2019-05-15  Saam Barati  <sbarati@apple.com>

        Bound liveness of SetArgumentMaybe nodes when maximal flush insertion phase is enabled
        https://bugs.webkit.org/show_bug.cgi?id=197855
        <rdar://problem/50236506>

        Reviewed by Michael Saboff.

        Maximal flush insertion phase assumes it can extend the live range of
        variables. However, this is not true with SetArgumentMaybe nodes, because
        they are not guaranteed to demarcate the birth of a variable in the way
        that SetArgumentDefinitely does. This caused things to break in SSA conversion
        when we wanted to use the result of a SetArgumentMaybe node. To obviate this,
        when we're done inlining something with SetArgumentMaybes, we SetLocal(undefined)
        to the same set of locals. This caps the live range of the SetArgumentMaybe
        and makes it so that extending the live range of the SetLocal is valid.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):

2019-05-14  Keith Miller  <keith_miller@apple.com>

        Fix issue with byteOffset on ARM64E
        https://bugs.webkit.org/show_bug.cgi?id=197884

        Reviewed by Saam Barati.

        We forgot to remove the tag from the ArrayBuffer's data
        pointer. This corrupted data when computing the offset.  We didn't
        catch this because we didn't run any with a non-zero byteOffset in
        the JITs.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset):
        (JSC::FTL::DFG::LowerDFGToB3::untagArrayPtr):
        (JSC::FTL::DFG::LowerDFGToB3::removeArrayPtrTag):
        (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotNeutered):
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):

2019-05-14  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION (r245249): ASSERTION FAILED: !m_needExceptionCheck seen with stress/proxy-delete.js and stress/proxy-property-descriptor.js
        https://bugs.webkit.org/show_bug.cgi?id=197885
        <rdar://problem/50770190>

        Reviewed by Yusuke Suzuki.

        In r245249 we added a throw scope to JSObject::getOwnPropertyDescriptor and its
        callers now need to check for exceptions.

        * runtime/ProxyObject.cpp:
        (JSC::performProxyGet):
        (JSC::ProxyObject::performDelete):

2019-05-14  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restoration of non-unified build.

        * dfg/DFGMinifiedID.h:
        * runtime/ObjectToStringAdaptiveStructureWatchpoint.cpp:

2019-05-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(UnlinkedFunctionExecutable) more
        https://bugs.webkit.org/show_bug.cgi?id=197833

        Reviewed by Darin Adler.

        It turns out that Gmail creates so many JSFunctions, FunctionExecutables, and UnlinkedFunctionExecutables.
        So we should shrink size of them to save memory. As a first step, this patch reduces the sizeof(UnlinkedFunctionExecutable) more by 16 bytes.

        1. We reorder some fields to get 8 bytes. And we use 31 bits for xxx offset things since their maximum size should be within 31 bits due to
           String's length & int32_t representation in our parser.

        2. We drop m_inferredName and prefer m_ecmaName. The inferred name is used to offer better function name when the function expression lacks
           the name, but now ECMAScript has a specified semantics to name those functions with intuitive names. We should use ecmaName consistently,
           and should not eat 8 bytes for inferred names in UnlinkedFunctionExecutable.

        We also fix generator ecma name.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::inferredName const):
        * bytecode/InlineCallFrame.cpp:
        (JSC::InlineCallFrame::inferredName const):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createAssignResolve):
        (JSC::ASTBuilder::createGeneratorFunctionBody):
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::tryInferNameInPatternWithIdentifier):
        (JSC::ASTBuilder::makeAssignNode):
        * parser/Nodes.cpp:
        (JSC::FunctionMetadataNode::operator== const):
        (JSC::FunctionMetadataNode::dump const):
        * parser/Nodes.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedFunctionExecutable::ecmaName const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::CachedFunctionExecutable::inferredName const): Deleted.
        * runtime/FunctionExecutable.h:
        * runtime/FunctionExecutableDump.cpp:
        (JSC::FunctionExecutableDump::dump const):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::calculatedDisplayName):
        (JSC::getCalculatedDisplayName):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::displayName):
        (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests):

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress JIT related data more by using Packed<>
        https://bugs.webkit.org/show_bug.cgi?id=197866

        Reviewed by Saam Barati.

        This patch leverages Packed<> more to reduce JIT related data size. When we measure memory usage on Gmail, we found that a lot of memory is
        consumed in DFG data. This patch attempts to reduce that size by using Packed<> to make various data structure's alignment 1.

        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::shrinkToFit): Add more shrinkToFit.
        * dfg/DFGMinifiedID.h: Make alignment = 1.
        (JSC::DFG::MinifiedID::operator! const):
        (JSC::DFG::MinifiedID::operator== const):
        (JSC::DFG::MinifiedID::operator!= const):
        (JSC::DFG::MinifiedID::operator< const):
        (JSC::DFG::MinifiedID::operator> const):
        (JSC::DFG::MinifiedID::operator<= const):
        (JSC::DFG::MinifiedID::operator>= const):
        (JSC::DFG::MinifiedID::hash const):
        (JSC::DFG::MinifiedID::dump const):
        (JSC::DFG::MinifiedID::isHashTableDeletedValue const):
        (JSC::DFG::MinifiedID::bits const):
        * dfg/DFGMinifiedIDInlines.h:
        (JSC::DFG::MinifiedID::MinifiedID):
        * dfg/DFGMinifiedNode.cpp:
        (JSC::DFG::MinifiedNode::fromNode): Make sizeof(MinifiedNode) from 16 to 13 with alignment = 1.
        * dfg/DFGMinifiedNode.h:
        (JSC::DFG::MinifiedNode::id const):
        (JSC::DFG::MinifiedNode::hasConstant const):
        (JSC::DFG::MinifiedNode::constant const):
        (JSC::DFG::MinifiedNode::isPhantomDirectArguments const):
        (JSC::DFG::MinifiedNode::isPhantomClonedArguments const):
        (JSC::DFG::MinifiedNode::hasInlineCallFrame const):
        (JSC::DFG::MinifiedNode::inlineCallFrame const):
        (JSC::DFG::MinifiedNode::op const): Deleted.
        (JSC::DFG::MinifiedNode::hasInlineCallFrame): Deleted.
        * dfg/DFGVariableEvent.h: Make sizeof(VariableEvent) from 12 to 10 with alignment = 1.
        (JSC::DFG::VariableEvent::fillGPR):
        (JSC::DFG::VariableEvent::fillPair):
        (JSC::DFG::VariableEvent::fillFPR):
        (JSC::DFG::VariableEvent::birth):
        (JSC::DFG::VariableEvent::spill):
        (JSC::DFG::VariableEvent::death):
        (JSC::DFG::VariableEvent::setLocal):
        (JSC::DFG::VariableEvent::movHint):
        (JSC::DFG::VariableEvent::id const):
        (JSC::DFG::VariableEvent::gpr const):
        (JSC::DFG::VariableEvent::tagGPR const):
        (JSC::DFG::VariableEvent::payloadGPR const):
        (JSC::DFG::VariableEvent::fpr const):
        (JSC::DFG::VariableEvent::spillRegister const):
        (JSC::DFG::VariableEvent::bytecodeRegister const):
        (JSC::DFG::VariableEvent::machineRegister const):
        (JSC::DFG::VariableEvent::variableRepresentation const):
        * dfg/DFGVariableEventStream.cpp:
        (JSC::DFG::tryToSetConstantRecovery):

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Simplify GCThread and CompilationThread flags by adding them to WTF::Thread
        https://bugs.webkit.org/show_bug.cgi?id=197146

        Reviewed by Saam Barati.

        Rename Heap::Thread to Heap::HeapThread to remove conflict between WTF::Thread.

        * heap/AlignedMemoryAllocator.cpp:
        (JSC::AlignedMemoryAllocator::registerDirectory):
        * heap/Heap.cpp:
        (JSC::Heap::HeapThread::HeapThread):
        (JSC::Heap::Heap):
        (JSC::Heap::runCurrentPhase):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::resumeThePeriphery):
        (JSC::Heap::requestCollection):
        (JSC::Heap::isCurrentThreadBusy):
        (JSC::Heap::notifyIsSafeToCollect):
        (JSC::Heap::Thread::Thread): Deleted.
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::incrementDeferralDepth):
        (JSC::Heap::decrementDeferralDepth):
        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::prepareForAllocation):

2019-05-13  Saam Barati  <sbarati@apple.com>

        macro assembler code-pointer tagging has its arguments backwards
        https://bugs.webkit.org/show_bug.cgi?id=197677

        Reviewed by Michael Saboff.

        We had the destination as the leftmost instead of the rightmost argument,
        which goes against the convention of how we order arguments in macro assembler
        methods.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::tagReturnAddress):
        (JSC::MacroAssemblerARM64E::untagReturnAddress):
        (JSC::MacroAssemblerARM64E::tagPtr):
        (JSC::MacroAssemblerARM64E::untagPtr):
        * 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):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2019-05-13  Tadeu Zagallo  <tzagallo@apple.com>

        JSObject::getOwnPropertyDescriptor is missing an exception check
        https://bugs.webkit.org/show_bug.cgi?id=197693
        <rdar://problem/50441784>

        Reviewed by Saam Barati.

        The method table call to getOwnPropertySlot might throw, and JSObject::getOwnPropertyDescriptor
        must handle the exception before calling PropertySlot::getValue, which can also throw.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):

2019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress miscelaneous JIT related data structures with Packed<>
        https://bugs.webkit.org/show_bug.cgi?id=197830

        Reviewed by Saam Barati.

        This patch leverages Packed<> to compress miscelaneous data structures related to JIT.

        1. JIT IC data structures

        2. ValueRecovery

            We use Packed<> for EncodedJSValue in ValueRecovery. This means that conservative GC cannot find
            these values. But this is OK anyway since ValueRecovery's constant should be already registered
            in DFG graph. From 16 (alignment 8) to 9 (alignment 1).

        3. FTL::ExitValue

            We use Packed<> for EncodedJSValue in FTL::ExitValue. This is also OK since this constant should
            be already registered by DFG/FTL graph. From 16 (alignment 8) to 9 (alignment 1).

        * assembler/CodeLocation.h:
        * bytecode/ByValInfo.h:
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::callReturnLocation):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::nearCallMode const):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::addJITAddIC):
        (JSC::CodeBlock::addJITMulIC):
        (JSC::CodeBlock::addJITSubIC):
        (JSC::CodeBlock::addJITNegIC):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addMathIC):
        * bytecode/InlineCallFrame.h:
        (JSC::InlineCallFrame::InlineCallFrame):
        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::inGPR):
        (JSC::ValueRecovery::inPair):
        (JSC::ValueRecovery::inFPR):
        (JSC::ValueRecovery::displacedInJSStack):
        (JSC::ValueRecovery::constant):
        (JSC::ValueRecovery::directArgumentsThatWereNotCreated):
        (JSC::ValueRecovery::clonedArgumentsThatWereNotCreated):
        (JSC::ValueRecovery::gpr const):
        (JSC::ValueRecovery::tagGPR const):
        (JSC::ValueRecovery::payloadGPR const):
        (JSC::ValueRecovery::fpr const):
        (JSC::ValueRecovery::virtualRegister const):
        (JSC::ValueRecovery::withLocalsOffset const):
        (JSC::ValueRecovery::constant const):
        (JSC::ValueRecovery::nodeID const):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        * ftl/FTLExitValue.cpp:
        (JSC::FTL::ExitValue::materializeNewObject):
        * ftl/FTLExitValue.h:
        (JSC::FTL::ExitValue::inJSStack):
        (JSC::FTL::ExitValue::inJSStackAsInt32):
        (JSC::FTL::ExitValue::inJSStackAsInt52):
        (JSC::FTL::ExitValue::inJSStackAsDouble):
        (JSC::FTL::ExitValue::constant):
        (JSC::FTL::ExitValue::exitArgument):
        (JSC::FTL::ExitValue::exitArgument const):
        (JSC::FTL::ExitValue::adjustStackmapLocationsIndexByOffset):
        (JSC::FTL::ExitValue::constant const):
        (JSC::FTL::ExitValue::virtualRegister const):
        (JSC::FTL::ExitValue::objectMaterialization const):
        (JSC::FTL::ExitValue::withVirtualRegister const):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
        * jit/CachedRecovery.h:
        * jit/CallFrameShuffleData.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * jit/JITMathIC.h:
        (JSC::isProfileEmpty):
        (JSC::JITBinaryMathIC::JITBinaryMathIC):
        (JSC::JITUnaryMathIC::JITUnaryMathIC):
        * jit/PolymorphicCallStubRoutine.h:
        (JSC::PolymorphicCallNode::hasCallLinkInfo):
        * jit/SnippetOperand.h:
        (JSC::SnippetOperand::asRawBits const):
        (JSC::SnippetOperand::asConstInt32 const):
        (JSC::SnippetOperand::asConstDouble const):
        (JSC::SnippetOperand::setConstInt32):
        (JSC::SnippetOperand::setConstDouble):

2019-05-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compress Watchpoint size by using enum type and Packed<> data structure
        https://bugs.webkit.org/show_bug.cgi?id=197730

        Reviewed by Filip Pizlo.

        Watchpoint takes 5~ MB memory in Gmail (total memory starts with 400 - 500 MB), so 1~%. Since it is allocated massively,
        reducing each size of Watchpoint reduces memory footprint significantly.

        As a first step, this patch uses Packed<> and enum to reduce the size of Watchpoint.

        1. Watchpoint should have enum type and should not use vtable. vtable takes one pointer, and it is too costly for such a
           memory sensitive objects. We perform downcast and dispatch the method of the derived classes based on this enum. Since
           the # of derived Watchpoint classes are limited (Only 8), we can list up them easily. One unfortunate thing is that
           we cannot do this for destructor so long as we use "delete" for deleting objects. If we dispatch the destructor of derived
           class in the destructor of the base class, we call the destructor of the base class multiple times. delete operator override
           does not help since custom delete operator is called after the destructor is called. While we can fix this issue by always
           using custom deleter, currently we do not since all the watchpoints do not have members which have non trivial destructor.
           Once it is strongly required, we can start using custom deleter, but for now, we do not need to do this.

        2. We use Packed<> to compact pointers in Watchpoint. Since Watchpoint is a node of doubly linked list, each one has two
           pointers for prev and next. This is also too costly. PackedPtr reduces the size and makes alignment 1.S

        3. We use PackedCellPtr<> for JSCells in Watchpoint. This leverages alignment information and makes pointers smaller in
           Darwin ARM64. One important thing to note here is that since this pointer is packed, it cannot be found by conservative
           GC scan. It is OK for watchpoint since they are allocated in the heap anyway.

        We applied this change to Watchpoint and get the following memory reduction. The highlight is that CodeBlockJettisoningWatchpoint in
        ARM64 only takes 2 pointers size.

                                                                              ORIGINAL    X86_64   ARM64
            WatchpointSet:                                                    40          32       28
            CodeBlockJettisoningWatchpoint:                                   32          19       15
            StructureStubClearingWatchpoint:                                  56          48       40
            AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint: 24          13       11
            AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint:  24          13       11
            FunctionRareData::AllocationProfileClearingWatchpoint:            32          19       15
            ObjectToStringAdaptiveStructureWatchpoint:                        56          48       40
            LLIntPrototypeLoadAdaptiveStructureWatchpoint:                    64          48       48
            DFG::AdaptiveStructureWatchpoint:                                 56          48       40

        While we will re-architect the mechanism of Watchpoint, anyway Packed<> mechanism and enum types will be used too.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
        * bytecode/CodeBlockJettisoningWatchpoint.h:
        * bytecode/CodeOrigin.h:
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureStubClearingWatchpoint::fireInternal):
        * bytecode/StructureStubClearingWatchpoint.h:
        * bytecode/Watchpoint.cpp:
        (JSC::Watchpoint::fire):
        * bytecode/Watchpoint.h:
        (JSC::Watchpoint::Watchpoint):
        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
        (JSC::DFG::AdaptiveStructureWatchpoint::AdaptiveStructureWatchpoint):
        * dfg/DFGAdaptiveStructureWatchpoint.h:
        * heap/PackedCellPtr.h: Added.
        * runtime/FunctionRareData.h:
        * runtime/ObjectToStringAdaptiveStructureWatchpoint.cpp: Added.
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::ObjectToStringAdaptiveStructureWatchpoint):
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::install):
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):
        * runtime/ObjectToStringAdaptiveStructureWatchpoint.h: Added.
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::clearObjectToStringValue):
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::ObjectToStringAdaptiveStructureWatchpoint): Deleted.
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::install): Deleted.
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal): Deleted.
        * runtime/StructureRareData.h:

2019-05-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Compact generator code's bytecode size
        https://bugs.webkit.org/show_bug.cgi?id=197822

        Reviewed by Michael Saboff.

        op_put_to_scope's symbolTableOrScopeDepth is represented as int. This was OK for the old bytecode format since
        VirtualRegister / scope depth can be represented by int anyway. But it is problematic now since only int8_t range
        will be represented in narrow bytecode. When this field is used for symbol table constant index, it is always
        larger than FirstConstantRegisterIndex. So it always exceeds the range of int8_t, and results in wide bytecode.
        It makes all generator's op_put_to_scope wide bytecode.

        In this patch, we introduce a new (logically) union type SymbolTableOrScopeDepth. It holds unsigned value, and we store the
        SymbolTableConstantIndex - FirstConstantRegisterIndex in this unsigned value to make op_put_to_scope narrow bytecode.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::run):
        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/Fits.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitProfileType):
        (JSC::BytecodeGenerator::emitPutToScope):
        (JSC::BytecodeGenerator::localScopeDepth const):
        * bytecompiler/BytecodeGenerator.h:
        * runtime/SymbolTableOrScopeDepth.h: Added.
        (JSC::SymbolTableOrScopeDepth::symbolTable):
        (JSC::SymbolTableOrScopeDepth::scopeDepth):
        (JSC::SymbolTableOrScopeDepth::raw):
        (JSC::SymbolTableOrScopeDepth::symbolTable const):
        (JSC::SymbolTableOrScopeDepth::scopeDepth const):
        (JSC::SymbolTableOrScopeDepth::raw const):
        (JSC::SymbolTableOrScopeDepth::dump const):
        (JSC::SymbolTableOrScopeDepth::SymbolTableOrScopeDepth):

2019-05-10  Saam barati  <sbarati@apple.com>

        Call to JSToWasmICCallee::createStructure passes in wrong prototype value
        https://bugs.webkit.org/show_bug.cgi?id=197807
        <rdar://problem/50530400>

        Reviewed by Yusuke Suzuki.

        We were passing the empty value instead of null. However, the empty
        value means the Structure is poly proto. That's definitely not the case
        here.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2019-05-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] String substring operation should return ropes consistently
        https://bugs.webkit.org/show_bug.cgi?id=197765
        <rdar://problem/37689944>

        Reviewed by Michael Saboff.

        Currently we have different policies per string substring operation function.

            1. String#slice returns the resolved non-rope string
            2. String#substring returns rope string
            3. String#substr returns rope string in runtime function, non-rope string in DFG and FTL

        Due to (3), we see large memory use in the tested web page[1]. Non rope substring have a problem.
        First of all, that returned string seems not used immediately. It is possible that the resulted
        string is used as a part of the other ropes (like, xxx.substring(...) + "Hello"). To avoid the
        eager materialization of the string, we are using StringImpl::createSubstringSharingImpl for the
        resulted non rope string. StringImpl::createSubstringSharingImpl is StringImpl's substring feature: the
        substring is pointing the owner StringImpl. While this has memory saving benefit, it can retain owner
        StringImpl so long, and it could keep very large owner StringImpl alive.

        The problem we are attempting to solve with StringImpl::createSubstringSharingImpl can be solved by
        the rope string simply. Rope string can share the underlying string. And good feature of the rope
        string is that, when resolving rope string, the rope string always create a new StringImpl instead of
        using StringImpl::createSubstringSharingImpl. So we allow the owner StringImpl to be destroyed. And this
        resolving only happens when we actually want to use the content of the rope string. In addition, we recently
        shrunk the sizeof(JSRopeString) from 48 to 32, so JSRopeString is cheap.

        In this patch, we change (2) and (3) to (1), using rope String as a result of substring operations.

        RAMification and JetStream2 are neutral. The web page[1] shows large memory footprint improvement from 776MB to 681MB.

        [1]: https://beta.observablehq.com/@ldgardner/assignment-4-visualizations-and-multiple-views

        * dfg/DFGOperations.cpp:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSlice):
        * runtime/StringPrototypeInlines.h:
        (JSC::stringSlice):

2019-05-10  Robin Morisset  <rmorisset@apple.com>

        testb3 failing with crash in JSC::B3::BasicBlock::appendNonTerminal
        https://bugs.webkit.org/show_bug.cgi?id=197756
        <rdar://problem/50641659>

        Reviewed by Saam Barati.

        When I added https://bugs.webkit.org/show_bug.cgi?id=197265 I assumed that which block is the root does not change in the middle of strength reduction.
        But specializeSelect can use splitForward, which uses a new block for the first half of the given block.
        So if the block being split is the root block I must update m_root and erase the m_valueInConstant cache.
        Erasing the cache cannot cause wrong results: at most it can make us miss some optimization opportunities in this iteration of the fixpoint.

        * b3/B3ReduceStrength.cpp:

2019-05-09  Keith Miller  <keith_miller@apple.com>

        Fix crashes related to pointer authentication for primitive gigacage
        https://bugs.webkit.org/show_bug.cgi?id=197763
        <rdar://problem/50629257>

        Reviewed by Saam Barati.

        This fixes two bugs related to PAC for caging. The first is that
        we didn't clear the high bits of the size register going into the
        patchpoint to tag the new buffer for NewArrayBuffer. The second is
        that the GC needs to strip all stack pointers when considering
        them as a conservative root.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::genericAddPointer):

2019-05-09  Keith Miller  <keith_miller@apple.com>

        parseStatementListItem needs a stack overflow check
        https://bugs.webkit.org/show_bug.cgi?id=197749
        <rdar://problem/50302697>

        Reviewed by Saam Barati.

        There currently exists a path in the parser where you can loop
        arbibrarily many times without a stack overflow check. This patch
        adds a check to parseStatementListItem to break that cycle.

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

2019-05-09  Keith Miller  <keith_miller@apple.com>

        REGRESSION (r245064): ASSERTION FAILED: m_ptr seen with wasm.yaml/wasm/js-api/test_Data.js.wasm-slow-memory
        https://bugs.webkit.org/show_bug.cgi?id=197740

        Reviewed by Saam Barati.

        If a TypedArray constructor is called with just 0 as the first argument, we don't allocate a backing vector.
        This means we need to handle null when calling vector() in ConstructionContext.

        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::ConstructionContext::vector const):

2019-05-09  Xan López  <xan@igalia.com>

        [CMake] Detect SSE2 at compile time
        https://bugs.webkit.org/show_bug.cgi?id=196488

        Reviewed by Carlos Garcia Campos.

        * assembler/MacroAssemblerX86Common.cpp: Remove unnecessary (and
        incorrect) static_assert.
        (JSC::MacroAssemblerX86Common::collectCPUFeatures):
        * assembler/MacroAssemblerX86Common.h: Remove SSE2 flags.

2019-05-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix after r245064
        https://bugs.webkit.org/show_bug.cgi?id=197110

        * runtime/GenericTypedArrayView.h:

2019-05-08  Saam barati  <sbarati@apple.com>

        AccessGenerationState::emitExplicitExceptionHandler can clobber an in use register
        https://bugs.webkit.org/show_bug.cgi?id=197715
        <rdar://problem/50399252>

        Reviewed by Filip Pizlo.

        AccessGenerationState::emitExplicitExceptionHandler was always clobbering
        x86's r9 without considering if that register was needed to be preserved
        by the IC. This leads to bad things when the DFG/FTL need that register when
        OSR exitting after an exception from a GetById call.

        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::emitExplicitExceptionHandler):
        * runtime/Options.h:

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r245068.

        Caused debug layout tests to exit early due to an assertion
        failure.

        Reverted changeset:

        "All prototypes should call didBecomePrototype()"
        https://bugs.webkit.org/show_bug.cgi?id=196315
        https://trac.webkit.org/changeset/245068

2019-05-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Invalid DFG JIT genereation in high CPU usage state
        https://bugs.webkit.org/show_bug.cgi?id=197453

        Reviewed by Saam Barati.

        We have a DFG graph like this.

            a: JSConstant(rope JSString)
            b: CheckStringIdent(Check:StringUse:@a)
            ... AI think this is unreachable ...

        When executing StringUse edge filter onto @a, AbstractValue::filterValueByType clears AbstractValue and makes it None.
        This is because @a constant produces SpecString (SpecStringVar | SpecStringIdent) while StringUse edge filter requires
        SpecStringIdent. AbstractValue::filterValueByType has an assumption that the JS constant always produces the same
        SpeculatedType. So it clears AbstractValue completely.
        But this assumption is wrong. JSString can produce SpecStringIdent later if the string is resolved to AtomicStringImpl.
        AI think that we always fail. But once the string is resolved to AtomicStringImpl, we pass this check. So we execute
        the breakpoint emitted by DFG since DFG think this is unreachable.

        In this patch, we just clear the `m_value` if AbstractValue type filter fails with the held constant, since the constant
        may produce a narrower type which can meet the type filter later.

        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::filterValueByType):

2019-05-08  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        This changelog already landed, but the commit was missing the actual changes.

        Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.

        I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
        create structures with invalid prototypes.
        It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
        Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.

        * runtime/BigIntPrototype.cpp:
        (JSC::BigIntPrototype::finishCreation):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::finishCreation):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::finishCreation):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::finishCreation):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::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/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSDataViewPrototype::finishCreation):
        * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
        (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
        * runtime/JSGlobalObject.cpp:
        (JSC::createConsoleProperty):
        * runtime/JSPromisePrototype.cpp:
        (JSC::JSPromisePrototype::finishCreation):
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSTypedArrayViewConstructor::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::finishCreation):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        * runtime/Structure.cpp:
        (JSC::Structure::isValidPrototype):
        (JSC::Structure::changePrototypeTransition):
        * runtime/Structure.h:
        * runtime/SymbolPrototype.cpp:
        (JSC::SymbolPrototype::finishCreation):
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::WebAssemblyInstancePrototype::finishCreation):
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        * wasm/js/WebAssemblyModulePrototype.cpp:
        (JSC::WebAssemblyModulePrototype::finishCreation):
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::WebAssemblyPrototype::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::WebAssemblyTablePrototype::finishCreation):

2019-05-08  Keith Miller  <keith_miller@apple.com>

        Remove Gigacage from arm64 and use PAC for arm64e instead
        https://bugs.webkit.org/show_bug.cgi?id=197110

        Reviewed by Saam Barati.

        This patch makes a bunch of changes. I'll start with global changes then go over changes to each tier and finish with bug fixes.

        Global Changes:
        Change CagedBarrierPtr to work with PAC so constructors and accessors now expect to receive a length.
        Update assembler helper methods to use do PAC when caging.

        LLInt:
        Add arm64e.rb backend as we missed that when originally open sourcing our arm64e code.
        Add a new optional t6 temporary, which is only used currently on arm64e for GetByVal on a TypedArray.
        Refactor caging into two helper macros for Primitive/JSValue cages.

        Baseline/DFG:
        Add authentication where needed for GetByVal and inline object construction.

        FTL:
        Add a new ValueRep that allows for a late register use. We want this for the authentication patchpoint since we use the length register at the same time as we are defing the authenticated pointer.

        Wasm:
        Use the TaggedArrayStoragePtr class for the memory base pointer. In theory we should be caging those pointers but I don't want to risk introducing a performance regression with the rest of this change. I've filed https://bugs.webkit.org/show_bug.cgi?id=197620 to do this later.
        As we no longer have the Gigacage using most of our VA memory, we can enable fast memories on iOS.
        Using fast memories leads to roughly a 2% JetStream2 speedup.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::tagArrayPtr):
        (JSC::MacroAssemblerARM64E::untagArrayPtr):
        (JSC::MacroAssemblerARM64E::removeArrayPtrTag):
        * b3/B3LowerToAir.cpp:
        * b3/B3PatchpointSpecial.cpp:
        (JSC::B3::PatchpointSpecial::admitsStack):
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::forEachArgImpl):
        (JSC::B3::StackmapSpecial::isArgValidForRep):
        * b3/B3Validate.cpp:
        * b3/B3ValueRep.cpp:
        (JSC::B3::ValueRep::addUsedRegistersTo const):
        (JSC::B3::ValueRep::dump const):
        (WTF::printInternal):
        * b3/B3ValueRep.h:
        (JSC::B3::ValueRep::ValueRep):
        (JSC::B3::ValueRep::isReg const):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::newTypedArrayWithSize):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds):
        (JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
        (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileDataViewGet):
        (JSC::FTL::DFG::LowerDFGToB3::compileDataViewSet):
        (JSC::FTL::DFG::LowerDFGToB3::untagArrayPtr):
        (JSC::FTL::DFG::LowerDFGToB3::caged):
        (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotNeutered):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::cageConditionally):
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitDirectArgumentsGetByVal):
        (JSC::JIT::emitIntTypedArrayGetByVal):
        (JSC::JIT::emitFloatTypedArrayGetByVal):
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallNode::clearCallLinkInfo):
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/arm64e.rb: Added.
        * offlineasm/ast.rb:
        * offlineasm/instructions.rb:
        * offlineasm/registers.rb:
        * offlineasm/x86.rb:
        * runtime/ArrayBuffer.cpp:
        (JSC::SharedArrayBufferContents::SharedArrayBufferContents):
        (JSC::SharedArrayBufferContents::~SharedArrayBufferContents):
        (JSC::ArrayBufferContents::ArrayBufferContents):
        (JSC::ArrayBufferContents::destroy):
        (JSC::ArrayBufferContents::tryAllocate):
        (JSC::ArrayBufferContents::makeShared):
        (JSC::ArrayBufferContents::copyTo):
        * runtime/ArrayBuffer.h:
        (JSC::SharedArrayBufferContents::data const):
        (JSC::ArrayBufferContents::data const):
        (JSC::ArrayBuffer::data):
        (JSC::ArrayBuffer::data const):
        (JSC::ArrayBuffer::byteLength const):
        * runtime/ArrayBufferView.cpp:
        (JSC::ArrayBufferView::ArrayBufferView):
        * runtime/ArrayBufferView.h:
        (JSC::ArrayBufferView::baseAddress const):
        (JSC::ArrayBufferView::byteLength const):
        (JSC::ArrayBufferView::setRangeImpl):
        (JSC::ArrayBufferView::getRangeImpl):
        * runtime/CachedTypes.cpp:
        (JSC::CachedScopedArgumentsTable::encode):
        (JSC::CachedScopedArgumentsTable::decode const):
        * runtime/CagedBarrierPtr.h:
        (JSC::CagedBarrierPtr::CagedBarrierPtr):
        (JSC::CagedBarrierPtr::set):
        (JSC::CagedBarrierPtr::get const):
        (JSC::CagedBarrierPtr::getMayBeNull const):
        (JSC::CagedBarrierPtr::getUnsafe const):
        (JSC::CagedBarrierPtr::at const):
        (JSC::CagedBarrierPtr::operator== const):
        (JSC::CagedBarrierPtr::operator bool const):
        (JSC::CagedBarrierPtr::setWithoutBarrier):
        (JSC::CagedBarrierPtr::operator* const): Deleted.
        (JSC::CagedBarrierPtr::operator-> const): Deleted.
        (JSC::CagedBarrierPtr::operator[] const): Deleted.
        (): Deleted.
        * runtime/DataView.cpp:
        (JSC::DataView::DataView):
        * runtime/DataView.h:
        (JSC::DataView::get):
        (JSC::DataView::set):
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::visitChildren):
        (JSC::DirectArguments::overrideThings):
        (JSC::DirectArguments::unmapArgument):
        * runtime/DirectArguments.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::visitChildren):
        (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor):
        (JSC::GenericArguments<Type>::setModifiedArgumentDescriptor):
        (JSC::GenericArguments<Type>::isModifiedArgumentDescriptor):
        * runtime/GenericTypedArrayView.h:
        * runtime/GenericTypedArrayViewInlines.h:
        (JSC::GenericTypedArrayView<Adaptor>::GenericTypedArrayView):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
        (JSC::JSArrayBufferView::JSArrayBufferView):
        (JSC::JSArrayBufferView::finalize):
        (JSC::JSArrayBufferView::slowDownAndWasteMemory):
        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::ConstructionContext::vector const):
        (JSC::JSArrayBufferView::isNeutered):
        (JSC::JSArrayBufferView::hasVector const):
        (JSC::JSArrayBufferView::vector const):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::createUninitialized):
        (JSC::JSGenericTypedArrayView<Adaptor>::estimatedSize):
        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
        * runtime/Options.h:
        * runtime/ScopedArgumentsTable.cpp:
        (JSC::ScopedArgumentsTable::clone):
        (JSC::ScopedArgumentsTable::setLength):
        * runtime/ScopedArgumentsTable.h:
        * runtime/SymbolTable.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::complete):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::cachedMemory const):
        (JSC::Wasm::Instance::updateCachedMemory):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::~Memory):
        (JSC::Wasm::Memory::grow):
        (JSC::Wasm::Memory::dump const):
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::memory const):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2019-05-08  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueMod into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186174

        Reviewed by Saam Barati.

        This patch is introducing a new DFG node called ValueMod, that is
        responsible to handle BigInt and Untyped specialization of op_mod.
        With the introduction of BigInt, we think that cases with
        ValueMod(Untyped, Untyped) can be more common and we introduced
        support for such kind of node.

        * dfg/DFGAbstractInterpreter.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::handleConstantDivOp):

        We are abstracting the constant rules of division operations. It
        includes ArithDiv, ValueDiv, ArithMod and ValueMod, since they perform
        the same analysis.

        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):

        Here we check if lhs and rhs have number result to emit ArithMod.
        Otherwise, we need to fallback to ValueMod and let fixup replace this
        operation when possible.

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

        ValueMod(BigIntUse) doesn't clobberize world because it only calls
        `operationModBigInt`.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

        ValueMod(BigIntUse) can trigger GC since it allocates intermediate
        JSBigInt to perform calculation. ValueMod(UntypedUse) can trigger GC
        because it can execute arbritary code from user.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupArithDivInt32):

        Function created to simplify readability of ArithDiv/AirthMod fixup
        operation.

        (JSC::DFG::FixupPhase::fixupArithDiv):
        (JSC::DFG::FixupPhase::fixupNode):

        Following the same fixup rules of ArithDiv.

        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::binaryOp):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:

        ValueMod follows the same prediction propagation rules of ArithMod and
        the same rules for `doDoubleVoting`.

        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueMod):
        * 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::compileValueMod):

2019-05-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG_ASSERT failed in lowInt52
        https://bugs.webkit.org/show_bug.cgi?id=197569

        Reviewed by Saam Barati.

        GetStack with FlushedInt52 should load the flushed value in Int52 form and put the result in m_int52Values / m_strictInt52Values. Previously,
        we load it in JSValue / Int32 form and lowInt52 fails to get appropriate one since GetStack does not put the result in m_int52Values / m_strictInt52Values.

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

2019-05-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] LLIntPrototypeLoadAdaptiveStructureWatchpoint does not require Bag<>
        https://bugs.webkit.org/show_bug.cgi?id=197645

        Reviewed by Saam Barati.

        We are using HashMap<std::tuple<Structure*, const Instruction*>, Bag<LLIntPrototypeLoadAdaptiveStructureWatchpoint>> for LLIntPrototypeLoadAdaptiveStructureWatchpoint,
        but this has several memory inefficiency.

        1. Structure* and Instruction* are too large. We can just use StructureID and bytecodeOffset (unsigned).
        2. While we are using Bag<>, we do not add a new LLIntPrototypeLoadAdaptiveStructureWatchpoint after constructing this Bag first. So we can
           use Vector<LLIntPrototypeLoadAdaptiveStructureWatchpoint> instead. We ensure that new entry won't be added to this Vector by making Watchpoint
           non-movable.
        3. Instead of having OpGetById::Metadata&, we just hold `unsigned` bytecodeOffset, and get Metadata& from the owner CodeBlock when needed.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * bytecode/CodeBlock.h:
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * bytecode/Watchpoint.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):

2019-05-07  Yusuke Suzuki  <ysuzuki@apple.com>

        JSC: A bug in BytecodeGenerator::emitEqualityOpImpl
        https://bugs.webkit.org/show_bug.cgi?id=197479

        Reviewed by Saam Barati.

        Our peephole optimization in BytecodeGenerator is (1) rewinding the previous instruction and (2) emit optimized instruction instead.
        If we have jump target between the previous instruction and the subsequent instruction, this peephole optimization breaks the jump target.
        To prevent it, we had a mechanism disabling peephole optimization, setting m_lastOpcodeID = op_end and checking m_lastOpcodeID when performing
        peephole optimization. However, BytecodeGenerator::emitEqualityOpImpl checks `m_lastInstruction->is<OpTypeof>` instead of `m_lastOpcodeID == op_typeof`,
        and miss `op_end` case.

        This patch makes the following changes.

        1. Add canDoPeepholeOptimization method to clarify the intent of `m_lastInstruction = op_end`.
        2. Check canDoPeepholeOptimization status before performing peephole optimization in emitJumpIfTrue, emitJumpIfFalse, and emitEqualityOpImpl.
        3. Add `ASSERT(canDoPeepholeOptimization())` in fuseCompareAndJump and fuseTestAndJmp to ensure that peephole optimization is allowed.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::fuseCompareAndJump):
        (JSC::BytecodeGenerator::fuseTestAndJmp):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::canDoPeepholeOptimization const):

2019-05-07  Yusuke Suzuki  <ysuzuki@apple.com>

        TemplateObject passed to template literal tags are not always identical for the same source location.
        https://bugs.webkit.org/show_bug.cgi?id=190756

        Reviewed by Saam Barati.

        Tagged template literal requires that the site object is allocated per source location. Previously, we create the site object
        when linking CodeBlock and cache it in CodeBlock. But this is wrong because,

        1. CodeBlock can be jettisoned and regenerated. So every time CodeBlock is regenerated, we get the different site object.
        2. Call and Construct can have different CodeBlock. Even if the function is called in call-form or construct-form, we should return the same site object.

        In this patch, we start caching these site objects in the top-level ScriptExecutable, this matches the spec's per source location since the only one top-level
        ScriptExecutable is created for the given script code. Each ScriptExecutable of JSFunction can be created multiple times because CodeBlock creates it.
        But the top-level one is not created by CodeBlock. This top-level ScriptExecutable is well-aligned to the Script itself. The top-level ScriptExecutable now has HashMap,
        which maps source locations to cached site objects.

        1. This patch threads the top-level ScriptExecutable to each FunctionExecutable creation. Each FunctionExecutable has a reference to the top-level ScriptExecutable.
        2. We put TemplateObjectMap in ScriptExecutable, which manages cached template objects.
        3. We move FunctionExecutable::m_cachedPolyProtoStructure to the FunctionExecutable::RareDate to keep FunctionExecutable 128 bytes.
        4. TemplateObjectMap is indexed with endOffset of TaggedTemplate.

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * 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-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * Scripts/wkbuiltins/builtins_templates.py:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addTemplateObjectConstant):
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        * bytecompiler/BytecodeGenerator.h:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createTaggedTemplate):
        * runtime/CachedTypes.cpp:
        (JSC::CachedTemplateObjectDescriptor::encode):
        (JSC::CachedTemplateObjectDescriptor::decode const):
        (JSC::CachedJSValue::encode):
        (JSC::CachedJSValue::decode const):
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::ensureTemplateObjectMap):
        (JSC::EvalExecutable::visitChildren):
        * runtime/EvalExecutable.h:
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::finishCreation):
        (JSC::FunctionExecutable::visitChildren):
        (JSC::FunctionExecutable::fromGlobalCode):
        (JSC::FunctionExecutable::ensureRareDataSlow):
        (JSC::FunctionExecutable::ensureTemplateObjectMap):
        * runtime/FunctionExecutable.h:
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::instantiateDeclarations):
        * runtime/JSTemplateObjectDescriptor.cpp:
        (JSC::JSTemplateObjectDescriptor::JSTemplateObjectDescriptor):
        (JSC::JSTemplateObjectDescriptor::create):
        * runtime/JSTemplateObjectDescriptor.h:
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::ensureTemplateObjectMap):
        (JSC::ModuleProgramExecutable::visitChildren):
        * runtime/ModuleProgramExecutable.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::ensureTemplateObjectMap):
        (JSC::ProgramExecutable::visitChildren):
        * runtime/ProgramExecutable.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::topLevelExecutable):
        (JSC::ScriptExecutable::createTemplateObject):
        (JSC::ScriptExecutable::ensureTemplateObjectMapImpl):
        (JSC::ScriptExecutable::ensureTemplateObjectMap):
        * runtime/ScriptExecutable.h:
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateBuiltin):
        (JSC::functionDeleteAllCodeWhenIdle):
        (JSC::JSDollarVM::finishCreation):

2019-05-07  Robin Morisset  <rmorisset@apple.com>

        [B3] Constants should be hoisted to the root block until moveConstants
        https://bugs.webkit.org/show_bug.cgi?id=197265

        Reviewed by Saam Barati.

        This patch does the following:
        - B3ReduceStrength now hoists all constants to the root BB, and de-duplicates them along the way
        - B3PureCSE no longer bothers with constants, since they are already de-duplicated by the time it gets to see them
        - We now run eliminateDeadCode just after moveConstants, so that the Nops that moveConstants generates are freed instead of staying live throughout Air compilation, reducing memory pressure.
        - I also took the opportunity to fix typos in comments in various parts of the code base.

        Here are a few numbers to justify this patch:
        - In JetStream2, about 27% of values at the beginning of B3 are constants
        - In JetStream2, about 11% of values at the end of B3 are Nops
        - In JetStream2, this patch increases the number of times that tail duplication happens from a bit less than 24k to a bit more than 25k (hoisting constants makes blocks smaller).

        When I tried measuring the total effect on JetStream2 I got a tiny and almost certainly non-significant progression.

        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3MoveConstants.cpp:
        * b3/B3PureCSE.cpp:
        (JSC::B3::PureCSE::process):
        * b3/B3PureCSE.h:
        * b3/B3ReduceStrength.cpp:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        * dfg/DFGCSEPhase.cpp:
        * dfg/DFGOSRAvailabilityAnalysisPhase.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):

2019-05-07  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.

        I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
        create structures with invalid prototypes.
        It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
        Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.

        * runtime/BigIntPrototype.cpp:
        (JSC::BigIntPrototype::finishCreation):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::finishCreation):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::finishCreation):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::finishCreation):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::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/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSDataViewPrototype::finishCreation):
        * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
        (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
        * runtime/JSGlobalObject.cpp:
        (JSC::createConsoleProperty):
        * runtime/JSPromisePrototype.cpp:
        (JSC::JSPromisePrototype::finishCreation):
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSTypedArrayViewConstructor::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::finishCreation):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        * runtime/Structure.cpp:
        (JSC::Structure::isValidPrototype):
        (JSC::Structure::changePrototypeTransition):
        * runtime/Structure.h:
        * runtime/SymbolPrototype.cpp:
        (JSC::SymbolPrototype::finishCreation):
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::WebAssemblyInstancePrototype::finishCreation):
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        * wasm/js/WebAssemblyModulePrototype.cpp:
        (JSC::WebAssemblyModulePrototype::finishCreation):
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::WebAssemblyPrototype::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::WebAssemblyTablePrototype::finishCreation):

2019-05-07  Robin Morisset  <rmorisset@apple.com>

        WTF::BitVector should have an isEmpty() method
        https://bugs.webkit.org/show_bug.cgi?id=197637

        Reviewed by Keith Miller.

        Just replaces some comparison of bitCount() to 0 by calls to isEmpty()

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:

2019-05-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244978.
        https://bugs.webkit.org/show_bug.cgi?id=197671

        TemplateObject map should use start/end offsets (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "TemplateObject passed to template literal tags are not always
        identical for the same source location."
        https://bugs.webkit.org/show_bug.cgi?id=190756
        https://trac.webkit.org/changeset/244978

2019-05-07  Tadeu Zagallo  <tzagallo@apple.com>

        tryCachePutByID should not crash if target offset changes
        https://bugs.webkit.org/show_bug.cgi?id=197311
        <rdar://problem/48033612>

        Reviewed by Filip Pizlo.

        When tryCachePutID is called with a cacheable setter, if the target object where the setter was
        found is still in the prototype chain and there's no poly protos in the chain, we use
        generateConditionsForPrototypePropertyHit to validate that the target object remains the same.
        It checks for the absence of the property in every object in the prototype chain from the base
        down to the target object and checks that the property is still present in the target object. It
        also bails if there are any uncacheable objects, proxies or dictionary objects in the prototype
        chain. However, it does not consider two edge cases:
        - It asserts that the property should still be at the same offset in the target object, but this
        assertion does not hold if the setter deletes properties of the object and causes the structure
        to be flattened after the deletion. Instead of asserting, we just use the updated offset.
        - It does not check whether the new slot is also a setter, which leads to a crash in case it's not.

        * jit/Repatch.cpp:
        (JSC::tryCachePutByID):

2019-05-07  Saam Barati  <sbarati@apple.com>

        Don't OSR enter into an FTL CodeBlock that has been jettisoned
        https://bugs.webkit.org/show_bug.cgi?id=197531
        <rdar://problem/50162379>

        Reviewed by Yusuke Suzuki.

        Sometimes we make silly mistakes. This is one of those times. It's invalid to OSR
        enter into an FTL OSR entry code block that has been jettisoned already.

        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::clearOSREntryBlockAndResetThresholds):
        * dfg/DFGJITCode.h:
        (JSC::DFG::JITCode::clearOSREntryBlock): Deleted.
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        (JSC::DFG::prepareCatchOSREntry):
        * dfg/DFGOperations.cpp:
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):

2019-05-06  Keith Miller  <keith_miller@apple.com>

        JSWrapperMap should check if existing prototype properties are wrappers when copying exported methods.
        https://bugs.webkit.org/show_bug.cgi?id=197324
        <rdar://problem/50253144>

        Reviewed by Saam Barati.

        The current implementation prevents using JSExport to shadow a
        method from a super class. This was because we would only add a
        method if the prototype didn't already claim to have the
        property. Normally this would only happen if an Objective-C super
        class already exported a ObjCCallbackFunction for the method,
        however, if the user exports a property that is already on
        Object.prototype the overriden method won't be exported.

        This patch fixes the object prototype issue by checking if the
        property on the prototype chain is an ObjCCallbackFunction, if
        it's not then it adds an override.

        * API/JSWrapperMap.mm:
        (copyMethodsToObject):
        * API/tests/testapi.mm:
        (-[ToStringClass toString]):
        (-[ToStringClass other]):
        (-[ToStringSubclass toString]):
        (-[ToStringSubclassNoProtocol toString]):
        (testToString):
        (testObjectiveCAPI):

2019-05-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] We should check OOM for description string of Symbol
        https://bugs.webkit.org/show_bug.cgi?id=197634

        Reviewed by Keith Miller.

        When resoling JSString for description of Symbol, we should check OOM error.
        We also change JSValueMakeSymbol(..., nullptr) to returning a symbol value
        without description, (1) to simplify the code and (2) give a way for JSC API
        to create a symbol value without description.

        * API/JSValueRef.cpp:
        (JSValueMakeSymbol):
        * API/tests/testapi.cpp:
        (TestAPI::symbolsTypeof):
        (TestAPI::symbolsDescription):
        (testCAPIViaCpp):
        * dfg/DFGOperations.cpp:
        * runtime/Symbol.cpp:
        (JSC::Symbol::createWithDescription):
        * runtime/Symbol.h:
        * runtime/SymbolConstructor.cpp:
        (JSC::callSymbol):

2019-05-06  Keith Rollin  <krollin@apple.com>

        Temporarily disable generate-xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=197619
        <rdar://problem/50507392>

        Reviewed by Alex Christensen.

        We need to perform a significant update to the generate-xcfilelist
        scripts. This work involves coordinated work with another facility. If
        the work does not occur in tandem, the build will be broken. To avoid
        this, disable the invoking of the scripts during the transition. The
        checking will be restored once the new scripts are in place.

        * Scripts/check-xcfilelists.sh:

2019-05-06  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [PlayStation] Fix build break since r244919
        https://bugs.webkit.org/show_bug.cgi?id=197627

        Reviewed by Ross Kirsling.

        Bugfix for POSIX socket implementation and suppress warnings.

        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        (Inspector::RemoteInspectorConnectionClient::didAccept):
        * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp:
        (Inspector::Socket::getPort):

2019-05-06  Yusuke Suzuki  <ysuzuki@apple.com>

        TemplateObject passed to template literal tags are not always identical for the same source location.
        https://bugs.webkit.org/show_bug.cgi?id=190756

        Reviewed by Saam Barati.

        Tagged template literal requires that the site object is allocated per source location. Previously, we create the site object
        when linking CodeBlock and cache it in CodeBlock. But this is wrong because,

        1. CodeBlock can be jettisoned and regenerated. So every time CodeBlock is regenerated, we get the different site object.
        2. Call and Construct can have different CodeBlock. Even if the function is called in call-form or construct-form, we should return the same site object.

        In this patch, we start caching these site objects in the top-level ScriptExecutable, this matches the spec's per source location since the only one top-level
        ScriptExecutable is created for the given script code. Each ScriptExecutable of JSFunction can be created multiple times because CodeBlock creates it.
        But the top-level one is not created by CodeBlock. This top-level ScriptExecutable is well-aligned to the Script itself. The top-level ScriptExecutable now has HashMap,
        which maps source locations to cached site objects.

        1. This patch threads the top-level ScriptExecutable to each FunctionExecutable creation. Each FunctionExecutable has a reference to the top-level ScriptExecutable.
        2. We put TemplateObjectMap in ScriptExecutable, which manages cached template objects.
        3. We move FunctionExecutable::m_cachedPolyProtoStructure to the FunctionExecutable::RareDate to keep FunctionExecutable 128 bytes.

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * 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-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * Scripts/wkbuiltins/builtins_templates.py:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addTemplateObjectConstant):
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        * bytecompiler/BytecodeGenerator.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedTemplateObjectDescriptor::encode):
        (JSC::CachedTemplateObjectDescriptor::decode const):
        (JSC::CachedJSValue::encode):
        (JSC::CachedJSValue::decode const):
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::ensureTemplateObjectMap):
        (JSC::EvalExecutable::visitChildren):
        * runtime/EvalExecutable.h:
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::finishCreation):
        (JSC::FunctionExecutable::visitChildren):
        (JSC::FunctionExecutable::fromGlobalCode):
        (JSC::FunctionExecutable::ensureRareDataSlow):
        (JSC::FunctionExecutable::ensureTemplateObjectMap):
        * runtime/FunctionExecutable.h:
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::instantiateDeclarations):
        * runtime/JSTemplateObjectDescriptor.cpp:
        (JSC::JSTemplateObjectDescriptor::JSTemplateObjectDescriptor):
        (JSC::JSTemplateObjectDescriptor::create):
        * runtime/JSTemplateObjectDescriptor.h:
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::ensureTemplateObjectMap):
        (JSC::ModuleProgramExecutable::visitChildren):
        * runtime/ModuleProgramExecutable.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::ensureTemplateObjectMap):
        (JSC::ProgramExecutable::visitChildren):
        * runtime/ProgramExecutable.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::topLevelExecutable):
        (JSC::ScriptExecutable::createTemplateObject):
        (JSC::ScriptExecutable::ensureTemplateObjectMap):
        * runtime/ScriptExecutable.h:
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateBuiltin):
        (JSC::functionDeleteAllCodeWhenIdle):
        (JSC::JSDollarVM::finishCreation):

2019-05-04  Tadeu Zagallo  <tzagallo@apple.com>

        TypedArrays should not store properties that are canonical numeric indices
        https://bugs.webkit.org/show_bug.cgi?id=197228
        <rdar://problem/49557381>

        Reviewed by Saam Barati.

        According to the spec[1]:
        - TypedArrays should not perform an ordinary GetOwnProperty/SetOwnProperty if the index is a
        CanonicalNumericIndexString, but invalid according to IntegerIndexedElementGet and similar
        functions. I.e., there are a few properties that should not be set in a TypedArray, like NaN,
        Infinity and -0.
        - On DefineOwnProperty, the out-of-bounds check should be performed before validating the property
        descriptor.
        - On GetOwnProperty, the returned descriptor for numeric properties should have writable set to true.

        [1]: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-integer-indexed-exotic-objects-defineownproperty-p-desc

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot):
        (JSC::JSGenericTypedArrayView<Adaptor>::put):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
        (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex):
        * runtime/PropertyName.h:
        (JSC::isCanonicalNumericIndexString):

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

        [JSC] Need to emit SetLocal if we emit MovHint in DFGByteCodeParser
        https://bugs.webkit.org/show_bug.cgi?id=197584

        Reviewed by Saam Barati.

        In r244864, we emit MovHint for adhocly created GetterCall/SetterCall frame locals in the callee side to make OSR availability analysis's pruning correct.
        However, we just emit MovHint, and we do not emit SetLocal since we ensured that these locals are already flushed in the same place before. However, MovHint
        and SetLocal are needed to be a pair in DFGByteCodeParser because we rely on this assumption in SSA conversion phase. SSA conversion phase always emit KillStack
        just before MovHint's target location even if the MovHint's target is the same to the previously emitted MovHint and SetLocal.
        This patch emits SetLocal too when emitting MovHint for GetterCall/SetterCall frame locals.

        The example is like this.

            a:  SomeValueNode
             :  MovHint(@a, loc10)
            b:  SetLocal(@a, loc10)
                ...
            c:  MovHint(@a, loc10)

        Then, this will be converted to the style in SSA conversion.

            a:  SomeValueNode
             :  KillStack(loc10)
            b:  PutStack(@a, loc10)
                ...
            c:  KillStack(loc10)

        Then, @b will be removed later since @c kills it.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inlineCall):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):

2019-05-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: rename "low power" to "display composited"
        https://bugs.webkit.org/show_bug.cgi?id=197296

        Reviewed by Joseph Pecoraro.

        Removed specific ChangeLog entries since it is almost entirely mechanical changes.

        * inspector/protocol/DOM.json:

2019-05-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Implement and enable RemoteInspector Server.
        https://bugs.webkit.org/show_bug.cgi?id=197432

        Reviewed by Ross Kirsling.

        Implement Windows implementation for Socket Backend of RemoteInspector and enable it on WinCairo
        for experimental feature.

        Also add listener interface for connection between RemoteInspector and RemoteInspectorServer
        for flexible configuration.

        * PlatformWin.cmake:
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        (Inspector::RemoteInspectorConnectionClient::didAccept):
        * inspector/remote/socket/RemoteInspectorServer.cpp:
        (Inspector::RemoteInspectorServer::connect):
        (Inspector::RemoteInspectorServer::listenForTargets):
        (Inspector::RemoteInspectorServer::didAccept):
        (Inspector::RemoteInspectorServer::dispatchMap):
        (Inspector::RemoteInspectorServer::start):
        (Inspector::RemoteInspectorServer::addServerConnection): Deleted.
        * inspector/remote/socket/RemoteInspectorServer.h:
        (Inspector::RemoteInspectorServer::RemoteInspectorServer):
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::RemoteInspector):
        (Inspector::RemoteInspector::dispatchMap):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::stopInternal):
        (Inspector::RemoteInspector::setServerPort):
        * inspector/remote/socket/RemoteInspectorSocket.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::getPort const):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:
        * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp:
        (Inspector::Socket::init): Added.
        (Inspector::Socket::listen): Signature changed.
        (Inspector::Socket::getPort): Added.
        * inspector/remote/socket/win/RemoteInspectorSocketWin.cpp: Added.
        (Inspector::Socket::init):
        (Inspector::Socket::Socket::Socket):
        (Inspector::Socket::Socket::~Socket):
        (Inspector::Socket::Socket::close):
        (Inspector::Socket::Socket::operator PlatformSocketType const):
        (Inspector::Socket::Socket::operator bool const):
        (Inspector::Socket::Socket::leak):
        (Inspector::Socket::Socket::create):
        (Inspector::Socket::setOpt):
        (Inspector::Socket::setOptEnabled):
        (Inspector::Socket::enableOpt):
        (Inspector::Socket::connectTo):
        (Inspector::Socket::bindAndListen):
        (Inspector::Socket::connect):
        (Inspector::Socket::listen):
        (Inspector::Socket::accept):
        (Inspector::Socket::createPair):
        (Inspector::Socket::setup):
        (Inspector::Socket::isValid):
        (Inspector::Socket::isListening):
        (Inspector::Socket::getPort):
        (Inspector::Socket::read):
        (Inspector::Socket::write):
        (Inspector::Socket::close):
        (Inspector::Socket::preparePolling):
        (Inspector::Socket::poll):
        (Inspector::Socket::isReadable):
        (Inspector::Socket::isWritable):
        (Inspector::Socket::markWaitingWritable):
        (Inspector::Socket::clearWaitingWritable):

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

        [JSC] Generator CodeBlock generation should be idempotent
        https://bugs.webkit.org/show_bug.cgi?id=197552

        Reviewed by Keith Miller.

        ES6 Generator saves and resumes the current execution state. Since ES6 generator can save the execution state at expression
        granularity (not statement granularity), the saved state involves locals. But if the underlying CodeBlock is jettisoned and
        recompiled with different code generation option (like, debugger, type profiler etc.), the generated instructions can be largely
        different and it does not have the same state previously used. If we resume the previously created generator with the newly
        generator function, resuming is messed up.

            function* gen () { ... }
            var g = gen();
            g.next();

            // CodeBlock is destroyed & Debugger is enabled.

            g.next();

        In this patch,

        1. In generatorification, we use index Identifier (localN => Identifier("N")) instead of private symbols to generate the same
           instructions every time we regenerate the CodeBlock.

        2. We decouple the options which can affect on the generated code (Debugger, TypeProfiler, ControlFlowProfiler) from the BytecodeGenerator,
           and pass them as a parameter, OptionSet<CodeGeneratorMode>.

        3. Generator ScriptExecutable remembers the previous CodeGeneratorMode and reuses this parameter to regenerate CodeBlock. It means that,
           even if the debugger is enabled, previously created generators are not debuggable. But newly created generators are debuggable.

        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::storageForGeneratorLocal):
        (JSC::BytecodeGeneratorification::run):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes const):
        (JSC::UnlinkedCodeBlock::wasCompiledWithTypeProfilerOpcodes const):
        (JSC::UnlinkedCodeBlock::wasCompiledWithControlFlowProfilerOpcodes const):
        (JSC::UnlinkedCodeBlock::codeGenerationMode const):
        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecode/UnlinkedFunctionCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecode/UnlinkedGlobalCodeBlock.h:
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecode/UnlinkedProgramCodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitTypeProfilerExpressionInfo):
        (JSC::BytecodeGenerator::emitProfileType):
        (JSC::BytecodeGenerator::emitProfileControlFlow):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitLogShadowChickenPrologueIfNecessary):
        (JSC::BytecodeGenerator::emitLogShadowChickenTailIfNecessary):
        (JSC::BytecodeGenerator::emitDebugHook):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::shouldEmitDebugHooks const):
        (JSC::BytecodeGenerator::shouldEmitTypeProfilerHooks const):
        (JSC::BytecodeGenerator::shouldEmitControlFlowProfilerHooks const):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PrefixNode::emitResolve):
        (JSC::EmptyVarExpression::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::FunctionNode::emitBytecode):
        * parser/ParserModes.h:
        (): Deleted.
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeFlags::SourceCodeFlags):
        (JSC::SourceCodeKey::SourceCodeKey):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::isClassContext const):
        (JSC::CachedCodeBlock::codeGenerationMode const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedCodeBlock::wasCompiledWithDebuggingOpcodes const): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedEvalCodeBlock):
        (JSC::CodeCache::getUnlinkedModuleProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        (JSC::generateUnlinkedCodeBlockForFunctions):
        (JSC::sourceCodeKeyForSerializedBytecode):
        (JSC::sourceCodeKeyForSerializedProgram):
        (JSC::sourceCodeKeyForSerializedModule):
        (JSC::serializeBytecode):
        * runtime/CodeCache.h:
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::generateUnlinkedCodeBlock):
        * runtime/Completion.cpp:
        (JSC::generateProgramBytecode):
        (JSC::generateModuleBytecode):
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        * runtime/IndirectEvalExecutable.cpp:
        (JSC::IndirectEvalExecutable::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::defaultCodeGenerationMode const):
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::create):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::newCodeBlockFor):
        * runtime/ScriptExecutable.h:
        * tools/JSDollarVM.cpp:
        (JSC::changeDebuggerModeWhenIdle):
        (JSC::functionEnableDebuggerModeWhenIdle):
        (JSC::functionDisableDebuggerModeWhenIdle):

2019-05-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Record actions performed on WebGL2RenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=176008
        <rdar://problem/34213884>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Recording.json:
        * inspector/scripts/codegen/generator.py:
        Add `canvas-webgl2` as a `Type`.

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

        Unreviewed, rolling out r244881.
        https://bugs.webkit.org/show_bug.cgi?id=197559

        Breaks compilation of jsconly on linux, breaking compilation
        for jsc-i386-ews, jsc-mips-ews and jsc-armv7-ews (Requested by
        guijemont on #webkit).

        Reverted changeset:

        "[CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into
        WEBKIT_COPY_FILES"
        https://bugs.webkit.org/show_bug.cgi?id=197174
        https://trac.webkit.org/changeset/244881

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

        [CMake] Refactor WEBKIT_MAKE_FORWARDING_HEADERS into WEBKIT_COPY_FILES
        https://bugs.webkit.org/show_bug.cgi?id=197174

        Reviewed by Alex Christensen.

        Replace WEBKIT_MAKE_FORWARDING_HEADERS with WEBKIT_COPY_FILES and make dependencies
        for framework headers explicit.

        * CMakeLists.txt:

2019-05-02  Michael Saboff  <msaboff@apple.com>

        Unreviewed rollout of r244862.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):

2019-05-01  Saam barati  <sbarati@apple.com>

        Baseline JIT should do argument value profiling after checking for stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=197052
        <rdar://problem/50009602>

        Reviewed by Yusuke Suzuki.

        Otherwise, we may do value profiling without running a write barrier, which
        is against the rules of how we do value profiling.

        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):

2019-05-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Inlining Getter/Setter should care availability of ad-hocly constructed frame
        https://bugs.webkit.org/show_bug.cgi?id=197405

        Reviewed by Saam Barati.

        When inlining getter and setter calls, we setup a stack frame which does not appear in the bytecode.
        Because Inlining can switch on executable, we could have a graph like this.

        BB#0
            ...
            30: GetSetter
            31: MovHint(loc10)
            32: SetLocal(loc10)
            33: MovHint(loc9)
            34: SetLocal(loc9)
            ...
            37: GetExecutable(@30)
            ...
            41: Switch(@37)

        BB#2
            42: GetLocal(loc12, bc#7 of caller)
            ...
            --> callee: loc9 and loc10 are arguments of callee.
              ...
              <HERE, exit to callee, loc9 and loc10 are required in the bytecode>

        When we prune OSR availability at the beginning of BB#2 (bc#7 in the caller), we prune loc9 and loc10's liveness because the caller does not actually have loc9 and loc10.
        However, when we begin executing the callee, we need OSR exit to be aware of where it can recover the arguments to the setter, loc9 and loc10.

        This patch inserts MovHint at the beginning of callee for a getter / setter stack frame to make arguments (loc9 and loc10 in the above example) recoverable from OSR exit.
        We also move arity fixup DFG nodes from the caller to the callee, since moved arguments are not live in the caller too.

        Interestingly, this fix also reveals the existing issue in LiveCatchVariablePreservationPhase. We emitted Flush for |this| of InlineCallFrame blindly if we saw InlineCallFrame
        inside a block which is covered by catch handler. But this is wrong because inlined function can finish its execution within the block, and |this| is completely unrelated to
        the catch handler if the catch handler is in the outer callee. We already collect all the live locals at the catch handler. And this locals must include arguments too if the
        catch handler is in inlined function. So, we should not emit Flush for each |this| of seen InlineCallFrame. This emitted Flush may connect unrelated locals in the catch handler
        to the locals that is only defined and used in the inlined function, and it leads to the results like DFG says the local is live while the bytecode says the local is dead.
        This results in reading and using garbage in OSR entry because DFG OSR entry needs to fill live DFG values from the stack.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inlineCall):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::handlePutById):
        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
        (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):

2019-05-01  Michael Saboff  <msaboff@apple.com>

        ASSERTION FAILED: !m_needExceptionCheck with --validateExceptionChecks=1; ProxyObject.getOwnPropertySlotCommon/JSFunction.callerGetter
        https://bugs.webkit.org/show_bug.cgi?id=197485

        Reviewed by Saam Barati.

        Added an EXCEPTION_ASSERT after call to getOwnPropertySlot().

        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):

2019-05-01  Ross Kirsling  <ross.kirsling@sony.com>

        RemoteInspector::updateAutomaticInspectionCandidate should have a default implementation.
        https://bugs.webkit.org/show_bug.cgi?id=197439

        Reviewed by Devin Rousso.

        On non-Cocoa platforms, automatic inspection is not currently implemented,
        so updateAutomaticInspectionCandidate falls back to the logic of updateTarget.
        This logic already existed in three places, so refactor it into a common private method
        and allow our websocket-based RWI implementation to make use of it too.

        * inspector/remote/RemoteInspector.cpp:
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::updateTargetMap):
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate): Deleted.
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate): Deleted.

2019-05-01  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * API/JSClassRef.cpp: Removed uneeded include of UTF8Conversion.h.

        * API/JSStringRef.cpp:
        (JSStringCreateWithUTF8CString): Updated for changes to convertUTF8ToUTF16.
        (JSStringGetUTF8CString): Updated for changes to convertLatin1ToUTF8.
        Removed unneeded "true" to get the strict version of convertUTF16ToUTF8,
        since that is the default. Also updated for changes to CompletionResult.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode): Stop using UTF8SequenceLength, and instead use U8_COUNT_TRAIL_BYTES
        and U8_MAX_LENGTH. Instead of decodeUTF8Sequence, use U8_NEXT. Also use U_IS_BMP,
        U_IS_SUPPLEMENTARY, U16_LEAD, U16_TRAIL, and U_IS_SURROGATE instead of our own
        equivalents, since these macros from ICU are correct and efficient.

        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::consumeUTF8String): Updated for changes to
        convertUTF8ToUTF16.

2019-05-01  Shawn Roberts  <sroberts@apple.com>

        Unreviewed, rolling out r244821.

        Causing

        Reverted changeset:

        "WebKit has too much of its own UTF-8 code and should rely
        more on ICU's UTF-8 support"
        https://bugs.webkit.org/show_bug.cgi?id=195535
        https://trac.webkit.org/changeset/244821

2019-04-29  Darin Adler  <darin@apple.com>

        WebKit has too much of its own UTF-8 code and should rely more on ICU's UTF-8 support
        https://bugs.webkit.org/show_bug.cgi?id=195535

        Reviewed by Alexey Proskuryakov.

        * API/JSClassRef.cpp: Removed uneeded include of UTF8Conversion.h.

        * API/JSStringRef.cpp:
        (JSStringCreateWithUTF8CString): Updated for changes to convertUTF8ToUTF16.
        (JSStringGetUTF8CString): Updated for changes to convertLatin1ToUTF8.
        Removed unneeded "true" to get the strict version of convertUTF16ToUTF8,
        since that is the default. Also updated for changes to CompletionResult.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode): Stop using UTF8SequenceLength, and instead use U8_COUNT_TRAIL_BYTES
        and U8_MAX_LENGTH. Instead of decodeUTF8Sequence, use U8_NEXT. Also use U_IS_BMP,
        U_IS_SUPPLEMENTARY, U16_LEAD, U16_TRAIL, and U_IS_SURROGATE instead of our own
        equivalents, since these macros from ICU are correct and efficient.

        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::consumeUTF8String): Updated for changes to
        convertUTF8ToUTF16.

2019-04-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244806.
        https://bugs.webkit.org/show_bug.cgi?id=197446

        Causing Test262 and JSC test failures on multiple builds
        (Requested by ShawnRoberts on #webkit).

        Reverted changeset:

        "TypeArrays should not store properties that are canonical
        numeric indices"
        https://bugs.webkit.org/show_bug.cgi?id=197228
        https://trac.webkit.org/changeset/244806

2019-04-30  Saam barati  <sbarati@apple.com>

        CodeBlock::m_instructionCount is wrong
        https://bugs.webkit.org/show_bug.cgi?id=197304

        Reviewed by Yusuke Suzuki.

        What we were calling instructionCount() was wrong, as evidenced by
        us using it incorrectly both in the sampling profiler and when we
        dumped bytecode for a given CodeBlock. Prior to the bytecode rewrite,
        instructionCount() was probably valid to do bounds checks against.
        However, this is no longer the case. This patch renames what we called
        instructionCount() to bytecodeCost(). It is now only used to make decisions
        about inlining and tier up heuristics. I've also named options related to
        this appropriately.
        
        This patch also introduces instructionsSize(). The result of this method
        is valid to do bounds checks against.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpAssumingJITType const):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::optimizationThresholdScalingFactor):
        (JSC::CodeBlock::predictedMachineCodeSize):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::instructionsSize const):
        (JSC::CodeBlock::bytecodeCost const):
        (JSC::CodeBlock::instructionCount const): Deleted.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inliningCost):
        (JSC::DFG::ByteCodeParser::getInliningBalance):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::mightInlineFunctionForCall):
        (JSC::DFG::mightInlineFunctionForClosureCall):
        (JSC::DFG::mightInlineFunctionForConstruct):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::isSmallEnoughToInlineCodeInto):
        * dfg/DFGDisassembler.cpp:
        (JSC::DFG::Disassembler::dumpHeader):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThread):
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITDisassembler.cpp:
        (JSC::JITDisassembler::dumpHeader):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::shouldJIT):
        * profiler/ProfilerBytecodes.cpp:
        (JSC::Profiler::Bytecodes::Bytecodes):
        * runtime/Options.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::tryGetBytecodeIndex):
        (JSC::SamplingProfiler::processUnverifiedStackTraces):

2019-04-30  Tadeu Zagallo  <tzagallo@apple.com>

        TypeArrays should not store properties that are canonical numeric indices
        https://bugs.webkit.org/show_bug.cgi?id=197228
        <rdar://problem/49557381>

        Reviewed by Darin Adler.

        According to the spec[1], TypedArrays should not perform an ordinary GetOwnProperty/SetOwnProperty
        if the index is a CanonicalNumericIndexString, but invalid according toIntegerIndexedElementGet
        and similar functions. I.e., there are a few properties that should not be set in a TypedArray,
        like NaN, Infinity and -0.

        [1]: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-integer-indexed-exotic-objects-defineownproperty-p-desc

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot):
        (JSC::JSGenericTypedArrayView<Adaptor>::put):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
        (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex):
        * runtime/JSTypedArrays.cpp:
        * runtime/PropertyName.h:
        (JSC::canonicalNumericIndexString):

2019-04-30  Brian Burg  <bburg@apple.com>

        Web Automation: use a more informative key to indicate automation availability
        https://bugs.webkit.org/show_bug.cgi?id=197377
        <rdar://problem/50258069>

        Reviewed by Devin Rousso.

        The existing WIRAutomationEnabledKey does not encode uncertainty.
        Add a new key that provides an 'Unknown' state, and prefer to use it.

        Since an application's initial listing is sent from a background dispatch queue
        on Cocoa platforms, this can race with main thread initialization that sets up
        RemoteInspector::Client. Therefore, the initial listing may not properly represent
        the client's capabilites because the client is not yet available. Allowing for
        an "Unknown" state that is later upgraded to Available or Not Available makes it
        possible to work around this potential race.

        * inspector/remote/RemoteInspectorConstants.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::pushListingsNow):

2019-04-30  Keith Miller  <keith_miller@apple.com>

        Fix failing ARM64E wasm tests
        https://bugs.webkit.org/show_bug.cgi?id=197420

        Reviewed by Saam Barati.

        This patch fixes a bug in the slow path of our JS->Wasm IC bridge
        where we wouldn't untag the link register before tail calling.

        Additionally, this patch fixes a broken assert when using setting
        Options::useTailCalls=false.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCallForwardArgumentsInTailPosition):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2019-04-29  Saam Barati  <sbarati@apple.com>

        Make JITType an enum class
        https://bugs.webkit.org/show_bug.cgi?id=197394

        Reviewed by Yusuke Suzuki.

        This makes the code more easily searchable.

        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFor):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpAssumingJITType const):
        (JSC::CodeBlock::specialOSREntryBlockOrNull):
        (JSC::timeToLive):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::baselineAlternative):
        (JSC::CodeBlock::baselineVersion):
        (JSC::CodeBlock::hasOptimizedReplacement):
        (JSC::CodeBlock::noticeIncomingCall):
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult):
        (JSC::CodeBlock::tallyFrequentExitSites):
        (JSC::CodeBlock::frameRegisterCount):
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::jitType const):
        (JSC::CodeBlock::hasBaselineJITProfiling const):
        * bytecode/CodeBlockWithJITType.h:
        (JSC::CodeBlockWithJITType::CodeBlockWithJITType):
        * bytecode/DeferredSourceDump.cpp:
        (JSC::DeferredSourceDump::DeferredSourceDump):
        * bytecode/DeferredSourceDump.h:
        * bytecode/ExitingJITType.h:
        (JSC::exitingJITTypeFor):
        * bytecode/InlineCallFrame.h:
        (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        * dfg/DFGDisassembler.cpp:
        (JSC::DFG::Disassembler::dumpHeader):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::JITCode):
        (JSC::DFG::JITCode::checkIfOptimizationThresholdReached):
        (JSC::DFG::JITCode::optimizeNextInvocation):
        (JSC::DFG::JITCode::dontOptimizeAnytimeSoon):
        (JSC::DFG::JITCode::optimizeAfterWarmUp):
        (JSC::DFG::JITCode::optimizeSoon):
        (JSC::DFG::JITCode::forceOptimizationSlowPathConcurrently):
        (JSC::DFG::JITCode::setOptimizationThresholdBasedOnCompilationResult):
        * dfg/DFGJITFinalizer.cpp:
        (JSC::DFG::JITFinalizer::finalize):
        (JSC::DFG::JITFinalizer::finalizeFunction):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        (JSC::DFG::prepareCatchOSREntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::OSRExit::compileOSRExit):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOSRExitCompilerCommon.h:
        (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk):
        * dfg/DFGOperations.cpp:
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * dfg/DFGVariableEventStream.cpp:
        (JSC::DFG::VariableEventStream::reconstruct const):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::JITCode):
        * ftl/FTLJITFinalizer.cpp:
        (JSC::FTL::JITFinalizer::finalizeCommon):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileFTLOSRExit):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::callSiteBitsAreBytecodeOffset const):
        (JSC::CallFrame::callSiteBitsAreCodeOriginIndex const):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::dump const):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::AssemblyHelpers):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITCode.cpp:
        (JSC::JITCode::typeName):
        (WTF::printInternal):
        * jit/JITCode.h:
        (JSC::JITCode::bottomTierJIT):
        (JSC::JITCode::topTierJIT):
        (JSC::JITCode::nextTierJIT):
        (JSC::JITCode::isExecutableScript):
        (JSC::JITCode::couldBeInterpreted):
        (JSC::JITCode::isJIT):
        (JSC::JITCode::isOptimizingJIT):
        (JSC::JITCode::isBaselineCode):
        (JSC::JITCode::jitTypeFor):
        * jit/JITDisassembler.cpp:
        (JSC::JITDisassembler::dumpHeader):
        * jit/JITOperations.cpp:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITToDFGDeferredCompilationCallback.cpp:
        (JSC::JITToDFGDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously):
        (JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileNow):
        * jit/Repatch.cpp:
        (JSC::readPutICCallTarget):
        (JSC::ftlThunkAwareRepatchCall):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        * runtime/SamplingProfiler.h:
        * runtime/VM.cpp:
        (JSC::jitCodeForCallTrampoline):
        (JSC::jitCodeForConstructTrampoline):
        * tools/CodeProfile.cpp:
        (JSC::CodeProfile::sample):
        * tools/JSDollarVM.cpp:
        (JSC::CallerFrameJITTypeFunctor::CallerFrameJITTypeFunctor):
        (JSC::CallerFrameJITTypeFunctor::jitType):
        (JSC::functionLLintTrue):
        (JSC::functionJITTrue):

2019-04-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreivewed, fix FTL implementation of r244760
        https://bugs.webkit.org/show_bug.cgi?id=197362

        Reviewed by Saam Barati.

        Looked with Saam. ValueFromBlock from double case block was overridden by NaN thing now.

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

2019-04-29  Yusuke Suzuki  <ysuzuki@apple.com>

        normalizeMapKey should normalize NaN to one PureNaN bit pattern to make MapHash same
        https://bugs.webkit.org/show_bug.cgi?id=197362

        Reviewed by Saam Barati.

        Our Map/Set's hash algorithm relies on the bit pattern of JSValue. So our Map/Set has
        normalization of the key, which normalizes Int32 / Double etc. But we did not normalize
        pure NaNs into one canonicalized pure NaN. So we end up having multiple different pure NaNs
        in one Map/Set. This patch normalizes NaN into one jsNaN(), which uses PNaN for the representation.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNormalizeMapKey):
        * runtime/HashMapImpl.h:
        (JSC::normalizeMapKey):

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-29  Yusuke Suzuki  <ysuzuki@apple.com>

        JITStubRoutineSet wastes 180KB of HashTable capacity on can.com
        https://bugs.webkit.org/show_bug.cgi?id=186732

        Reviewed by Saam Barati.

        Our current mechanism of JITStubRoutineSet consumes more memory than needed. Basically we have HashMap<uintptr_t, StubRoutine*> and register
        each executable address by 16 byte to this entry. So if your StubRoutine has 128bytes, it just adds 8 entries to this hash table.
        In Gmail, we see a ~2MB table size.

        Instead, this patch uses Vector<pair<uintptr_t, StubRoutine*>> and performs binary search onto this sorted vector. Before conservative
        scanning, we sort this vector. And doing binary search with the sorted vector to find executing stub routines from the conservative roots.
        This vector includes uintptr_t startAddress to make binary searching fast.

        Large amount of conservative scan should be filtered by range check, so I think binary search here is OK, but we can decide based on what the
        performance bots say.

        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::~JITStubRoutineSet):
        (JSC::JITStubRoutineSet::add):
        (JSC::JITStubRoutineSet::prepareForConservativeScan):
        (JSC::JITStubRoutineSet::clearMarks):
        (JSC::JITStubRoutineSet::markSlow):
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        (JSC::JITStubRoutineSet::traceMarkedStubRoutines):
        * heap/JITStubRoutineSet.h:
        (JSC::JITStubRoutineSet::mark):
        (JSC::JITStubRoutineSet::prepareForConservativeScan):
        (JSC::JITStubRoutineSet::size const): Deleted.
        (JSC::JITStubRoutineSet::at const): Deleted.

2019-04-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Add flag to enable version information stamping and disable by default.
        https://bugs.webkit.org/show_bug.cgi?id=197249
        <rdar://problem/50224412>

        Reviewed by Ross Kirsling.

        This feature is only used in AppleWin port. Add flag for this task and make it OFF by default.
        Then enable it by default on AppleWin.

        * CMakeLists.txt:

2019-04-26  Keith Rollin  <krollin@apple.com>

        Enable new build rule for post-processing headers when using XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=197340
        <rdar://problem/50226685>

        Reviewed by Brent Fulgham.

        In Bug 197116, we conditionally disabled the old method for
        post-processing header files when we are using the new XCBuild build
        system. This check-in conditionally enables the new post-processing
        facility. Note that the old system is disabled and the new system
        enabled only when the USE_NEW_BUILD_SYSTEM environment variable is set
        to YES.

        * Configurations/JavaScriptCore.xcconfig:

2019-04-26  Jessie Berlin  <jberlin@webkit.org>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=197313

        Reviewed by Alex Christensen.

        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244708.
        https://bugs.webkit.org/show_bug.cgi?id=197334

        "Broke the debug build" (Requested by rmorisset on #webkit).

        Reverted changeset:

        "All prototypes should call didBecomePrototype()"
        https://bugs.webkit.org/show_bug.cgi?id=196315
        https://trac.webkit.org/changeset/244708

2019-04-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WEBKIT_EXECUTABLE macro
        https://bugs.webkit.org/show_bug.cgi?id=197206

        Reviewed by Konstantin Tokarev.

        Migrate to WEBKIT_EXECUTABLE for the jsc and test targets.

        * b3/air/testair.cpp:
        * b3/testb3.cpp:
        * dfg/testdfg.cpp:
        * shell/CMakeLists.txt:
        * shell/PlatformGTK.cmake:
        * shell/PlatformJSCOnly.cmake: Removed.
        * shell/PlatformMac.cmake:
        * shell/PlatformPlayStation.cmake:
        * shell/PlatformWPE.cmake:
        * shell/PlatformWin.cmake:

2019-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] linkPolymorphicCall now does GC
        https://bugs.webkit.org/show_bug.cgi?id=197306

        Reviewed by Saam Barati.

        Previously, we assumed that linkPolymorphicCall does not perform allocations. So we put CallVariant into a Vector<>.
        But now, WebAssemblyFunction's entrypoint generation can allocate JSToWasmICCallee and cause GC. Since CallLinkInfo
        does not hold these cells, they can be collected, and we will see dead cells in the middle of linkPolymorphicCall.
        We should defer GC for a while in linkPolymorphicCall. We use DeferGCForAWhile instead of DeferGC because the
        caller "operationLinkPolymorphicCall" assumes that this function does not cause GC.

        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):

2019-04-26  Robin Morisset  <rmorisset@apple.com>

        All prototypes should call didBecomePrototype()
        https://bugs.webkit.org/show_bug.cgi?id=196315

        Reviewed by Saam Barati.

        Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.

        I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
        create structures with invalid prototypes.
        It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
        Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.

        * runtime/BigIntPrototype.cpp:
        (JSC::BigIntPrototype::finishCreation):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::finishCreation):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::finishCreation):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::finishCreation):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::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/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSDataViewPrototype::finishCreation):
        * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
        (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
        * runtime/JSGlobalObject.cpp:
        (JSC::createConsoleProperty):
        * runtime/JSPromisePrototype.cpp:
        (JSC::JSPromisePrototype::finishCreation):
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSTypedArrayViewConstructor::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::finishCreation):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        * runtime/Structure.cpp:
        (JSC::Structure::isValidPrototype):
        (JSC::Structure::changePrototypeTransition):
        * runtime/Structure.h:
        * runtime/SymbolPrototype.cpp:
        (JSC::SymbolPrototype::finishCreation):
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::WebAssemblyInstancePrototype::finishCreation):
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        * wasm/js/WebAssemblyModulePrototype.cpp:
        (JSC::WebAssemblyModulePrototype::finishCreation):
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::WebAssemblyPrototype::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::WebAssemblyTablePrototype::finishCreation):

2019-04-26  Don Olmstead  <don.olmstead@sony.com>

        Add WTF::findIgnoringASCIICaseWithoutLength to replace strcasestr
        https://bugs.webkit.org/show_bug.cgi?id=197291

        Reviewed by Konstantin Tokarev.

        Replace uses of strcasestr with WTF::findIgnoringASCIICaseWithoutLength.

        * API/tests/testapi.cpp:
        * assembler/testmasm.cpp:
        * b3/air/testair.cpp:
        * b3/testb3.cpp:
        * dfg/testdfg.cpp:
        * dynbench.cpp:

2019-04-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r244669.

        Windows ports can't clean build.

        Reverted changeset:

        "[Win] Add flag to enable version information stamping and
        disable by default."
        https://bugs.webkit.org/show_bug.cgi?id=197249
        https://trac.webkit.org/changeset/244669

2019-04-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] Add flag to enable version information stamping and disable by default.
        https://bugs.webkit.org/show_bug.cgi?id=197249

        Reviewed by Ross Kirsling.

        This feature is only used in AppleWin port. Add flag for this task and make it OFF by default.
        Then enable it by default on AppleWin.

        * CMakeLists.txt:

2019-04-25  Timothy Hatcher  <timothy@apple.com>

        Disable date and time inputs on iOSMac.
        https://bugs.webkit.org/show_bug.cgi?id=197287
        rdar://problem/46794376

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Fix more builds after r244653
        https://bugs.webkit.org/show_bug.cgi?id=197131

        * b3/B3Value.h:
        There is an older system with libc++ headers that don't have std::conjunction.  Just use constexpr and && instead for the one use of it in WebKit.

2019-04-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [RemoteInspector] Fix connection and target identifier types.
        https://bugs.webkit.org/show_bug.cgi?id=197243

        Reviewed by Ross Kirsling.

        Give dedicated type for RemoteControllableTarget's identifier as Inspector::TargetID.

        Also rename ClientID type used in Socket backend to ConnectionID because this is the identifier
        socket endpoint assign to the newly created connection. The size was changed to uint32_t.
        Enough size for managing connections.

        * inspector/remote/RemoteConnectionToTarget.cpp:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::targetIdentifier const):
        * inspector/remote/RemoteConnectionToTarget.h:
        * inspector/remote/RemoteControllableTarget.h:
        * inspector/remote/RemoteInspector.cpp:
        (Inspector::RemoteInspector::nextAvailableTargetIdentifier):
        (Inspector::RemoteInspector::registerTarget):
        (Inspector::RemoteInspector::unregisterTarget):
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::setupCompleted):
        (Inspector::RemoteInspector::waitingForAutomaticInspection):
        (Inspector::RemoteInspector::updateTargetListing):
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::targetIdentifier const):
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::receivedSetupMessage):
        (Inspector::RemoteInspector::receivedDataMessage):
        (Inspector::RemoteInspector::receivedDidCloseMessage):
        (Inspector::RemoteInspector::receivedIndicateMessage):
        (Inspector::RemoteInspector::receivedAutomaticInspectionRejectMessage):
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::receivedSetupMessage):
        (Inspector::RemoteInspector::receivedDataMessage):
        (Inspector::RemoteInspector::receivedCloseMessage):
        (Inspector::RemoteInspector::setup):
        (Inspector::RemoteInspector::sendMessageToTarget):
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::didReceiveWebInspectorEvent):
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        (Inspector::RemoteInspectorConnectionClient::didAccept):
        * inspector/remote/socket/RemoteInspectorMessageParser.cpp:
        (Inspector::MessageParser::MessageParser):
        (Inspector::MessageParser::parse):
        * inspector/remote/socket/RemoteInspectorMessageParser.h:
        (Inspector::MessageParser::setDidParseMessageListener):
        * inspector/remote/socket/RemoteInspectorServer.cpp:
        (Inspector::RemoteInspectorServer::didAccept):
        (Inspector::RemoteInspectorServer::didClose):
        (Inspector::RemoteInspectorServer::dispatchMap):
        (Inspector::RemoteInspectorServer::sendWebInspectorEvent):
        (Inspector::RemoteInspectorServer::sendCloseEvent):
        (Inspector::RemoteInspectorServer::connectionClosed):
        * inspector/remote/socket/RemoteInspectorServer.h:
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::didClose):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::setup):
        (Inspector::RemoteInspector::sendMessageToTarget):
        * inspector/remote/socket/RemoteInspectorSocket.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::connectInet):
        (Inspector::RemoteInspectorSocketEndpoint::isListening):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::recvIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::sendIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::send):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Alder.

        * Configurations/Base.xcconfig:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Remove DeprecatedOptional
        https://bugs.webkit.org/show_bug.cgi?id=197161

        Reviewed by Darin Adler.

        We need to keep a symbol exported from JavaScriptCore for binary compatibility with iOS12.
        We need this symbol to be in a file that doesn't include anything because libcxx's implementation of
        std::optional is actually std::__1::optional, which has a different mangled name.  This change will
        prevent protocol errors from being reported if you are running the iOS12 simulator with a custom build of WebKit
        and using the web inspector with it, but it's necessary to allow us to start using C++17 in WebKit.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * inspector/InspectorBackendDispatcher.cpp:
        * inspector/InspectorBackendDispatcher.h:
        * inspector/InspectorBackendDispatcherCompatibility.cpp: Added.
        (Inspector::BackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcherCompatibility.h: Added.

2019-04-24  Saam Barati  <sbarati@apple.com>

        Add SPI callbacks for before and after module execution
        https://bugs.webkit.org/show_bug.cgi?id=197244
        <rdar://problem/50180511>

        Reviewed by Yusuke Suzuki.

        This is helpful for clients that want to profile execution of modules
        in some way. E.g, if they want to time module execution time.

        * API/JSAPIGlobalObject.h:
        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderEvaluate):
        * API/JSContextPrivate.h:
        * API/tests/testapi.mm:
        (+[JSContextFetchDelegate contextWithBlockForFetch:]):
        (-[JSContextFetchDelegate willEvaluateModule:]):
        (-[JSContextFetchDelegate didEvaluateModule:]):
        (testFetch):
        (testFetchWithTwoCycle):
        (testFetchWithThreeCycle):
        (testLoaderResolvesAbsoluteScriptURL):
        (testLoaderRejectsNilScriptURL):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::evaluate):
        (JSC::JSModuleLoader::evaluateNonVirtual):
        * runtime/JSModuleLoader.h:

2019-04-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink DFG::MinifiedNode
        https://bugs.webkit.org/show_bug.cgi?id=197224

        Reviewed by Filip Pizlo.

        Since it is kept alive with compiled DFG code, we should shrink it to save memory.
        If it is effective, we should consider minimizing these OSR exit data more aggressively.

        * dfg/DFGMinifiedNode.h:

2019-04-23  Saam Barati  <sbarati@apple.com>

        LICM incorrectly assumes it'll never insert a node which provably OSR exits
        https://bugs.webkit.org/show_bug.cgi?id=196721
        <rdar://problem/49556479> 

        Reviewed by Filip Pizlo.

        Previously, we assumed LICM could never hoist code that caused us
        to provably OSR exit. This is a bad assumption, as we may very well
        hoist such code. Obviously hoisting such code is not ideal. We shouldn't
        hoist something we provably know will OSR exit. However, this is super rare,
        and the phase is written in such a way where it's easier to gracefully
        handle this case than to prevent us from hoisting such code.
        
        If we wanted to ensure we never hoisted code that would provably exit, we'd
        have to teach the phase to know when it inserted code that provably exits. I
        saw two ways to do that:
        1: Save and restore the AI state before actually hoisting.
        2: Write an analysis that can determine if such a node would exit.
        
        (1) is bad because it costs in memory and compile time. (2) will inevitably
        have bugs as running into this condition is rare.
        
        So instead of (1) or (2), I opted to have LICM gracefully handle when
        it causes a provable exit. When we encounter this, we mark all blocks
        in the loop as !cfaHasVisited and !cfaDidFinish.

        * dfg/DFGLICMPhase.cpp:
        (JSC::DFG::LICMPhase::attemptHoist):

2019-04-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use node index as DFG::MinifiedID
        https://bugs.webkit.org/show_bug.cgi?id=197186

        Reviewed by Saam Barati.

        DFG Nodes can be identified with index if the graph is given. We should use unsigned index as a DFG::MinifiedID's underlying
        source instead of Node* to reduce the size of VariableEvent from 16 to 12. Vector<VariableEvent> is the main data in DFG's OSR
        tracking. It is kept after DFG compilation is done to make OSR work. We saw that this is allocated with large size in GMail.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/DataFormat.h:
        * bytecode/ValueRecovery.h:
        * dfg/DFGGenerationInfo.h:
        * dfg/DFGMinifiedID.h:
        (JSC::DFG::MinifiedID::MinifiedID):
        (JSC::DFG::MinifiedID::operator! const):
        (JSC::DFG::MinifiedID::operator== const):
        (JSC::DFG::MinifiedID::operator!= const):
        (JSC::DFG::MinifiedID::operator< const):
        (JSC::DFG::MinifiedID::operator> const):
        (JSC::DFG::MinifiedID::operator<= const):
        (JSC::DFG::MinifiedID::operator>= const):
        (JSC::DFG::MinifiedID::hash const):
        (JSC::DFG::MinifiedID::dump const):
        (JSC::DFG::MinifiedID::isHashTableDeletedValue const):
        (JSC::DFG::MinifiedID::fromBits):
        (JSC::DFG::MinifiedID::bits const):
        (JSC::DFG::MinifiedID::invalidIndex):
        (JSC::DFG::MinifiedID::otherInvalidIndex):
        (JSC::DFG::MinifiedID::node const): Deleted.
        (JSC::DFG::MinifiedID::invalidID): Deleted.
        (JSC::DFG::MinifiedID::otherInvalidID): Deleted.
        * dfg/DFGMinifiedIDInlines.h: Copied from Source/JavaScriptCore/dfg/DFGMinifiedNode.cpp.
        (JSC::DFG::MinifiedID::MinifiedID):
        * dfg/DFGMinifiedNode.cpp:
        * dfg/DFGValueSource.h:
        (JSC::DFG::ValueSource::ValueSource):
        * dfg/DFGVariableEvent.h:
        (JSC::DFG::VariableEvent::dataFormat const):

2019-04-23  Keith Rollin  <krollin@apple.com>

        Add Xcode version check for Header post-processing scripts
        https://bugs.webkit.org/show_bug.cgi?id=197116
        <rdar://problem/50058968>

        Reviewed by Brent Fulgham.

        There are several places in our Xcode projects that post-process
        header files after they've been exported. Because of XCBuild, we're
        moving to a model where the post-processing is performed at the same
        time the header files are exported, rather than as a distinct
        post-processing step. This patch disables the distinct step when the
        inline processing is available.

        In practice, this means prefixing appropriate post-processing Custom
        Build phases with:

        if [ "${XCODE_VERSION_MAJOR}" -ge "1100" -a "${USE_NEW_BUILD_SYSTEM}" = "YES" ]; then
            # In this configuration, post-processing is performed at the same time as copying in the postprocess-header-rule script, so there's no need for this separate step.
            exit 0
        fi

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r244558.
        https://bugs.webkit.org/show_bug.cgi?id=197219

        Causing crashes on iOS Sim Release and Debug (Requested by
        ShawnRoberts on #webkit).

        Reverted changeset:

        "Remove DeprecatedOptional"
        https://bugs.webkit.org/show_bug.cgi?id=197161
        https://trac.webkit.org/changeset/244558

2019-04-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'this.ownerDocument.frameIdentifier')
        https://bugs.webkit.org/show_bug.cgi?id=196420
        <rdar://problem/49444205>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/DOM.json:
        Modify the existing `frameId` to represent the owner frame of the node, rather than the
        frame it holds (in the case of an `<iframe>`).

2019-04-23  Alex Christensen  <achristensen@webkit.org>

        Remove DeprecatedOptional
        https://bugs.webkit.org/show_bug.cgi?id=197161

        Reviewed by Darin Adler.

        * inspector/InspectorBackendDispatcher.cpp:
        * inspector/InspectorBackendDispatcher.h:

2019-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use volatile load to populate backing page in MarkedBlock::Footer instead of using holdLock
        https://bugs.webkit.org/show_bug.cgi?id=197152

        Reviewed by Saam Barati.

        Emit volatile load instead of using holdLock to populate backing page in MarkedBlock::Footer.

        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::isPagedOut):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::populatePage const):

2019-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] useJIT should subsume useRegExpJIT
        https://bugs.webkit.org/show_bug.cgi?id=197153

        Reviewed by Alex Christensen.

        useJIT should subsume useRegExpJIT. We should immediately disable JIT feature if useJIT = false,
        even if useRegExpJIT is true.

        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::isSupported):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileMatchOnly):
        * runtime/VM.cpp:
        (JSC::enableAssembler):
        (JSC::VM::canUseRegExpJIT): Deleted.
        * runtime/VM.h:

2019-04-22  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Restructuring Remote Inspector classes to support multiple platform.
        https://bugs.webkit.org/show_bug.cgi?id=197030

        Reviewed by Don Olmstead.

        Restructuring the PlayStation's RemoteInspector backend which uses native socket for the communication to be ready for WinCairo.

        What we did is basically:
        - Renamed `remote/playstation/` to `remote/socket/`. This directory is now platform independent implementation of socket backend. 
        - Renamed `RemoteInspectorSocket` class to `RemoteInspectorSocketEndpoint`. This class is platform independent and core of the backend.
        - Merged `RemoteInspectorSocket{Client|Server}` classes into `RemoteInspectorSocketEndpoint` class because the differences are little.
        - Defined a new interface functions in `Inspector::Socket` (new) namespace.
        - Moved POSIX socket implementation into `posix\RemoteInspectorSocketPOSIX.{h|cpp}`.

        * PlatformPlayStation.cmake:
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/playstation/RemoteInspectorSocketClient.h: Merged into RemoteInspectorSocketEndpoint.
        * inspector/remote/playstation/RemoteInspectorSocketClientPlayStation.cpp: Merged into RemoteInspectorSocketEndpoint.
        * inspector/remote/playstation/RemoteInspectorSocketPlayStation.cpp: Removed.
        * inspector/remote/playstation/RemoteInspectorSocketServer.h: Merged into RemoteInspectorSocketEndpoint.
        * inspector/remote/playstation/RemoteInspectorSocketServerPlayStation.cpp: Merged into RemoteInspectorSocketEndpoint.
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp: Renamed from inspector\remote\playstation\RemoteInspectorConnectionClientPlayStation.cpp.
        * inspector/remote/socket/RemoteInspectorConnectionClient.h: Renamed from inspector\remote\playstation\RemoteInspectorConnectionClient.h.
        (Inspector::RemoteInspectorConnectionClient::didAccept):
        * inspector/remote/socket/RemoteInspectorMessageParser.cpp: Renamed from inspector\remote\playstation\RemoteInspectorMessageParserPlayStation.cpp.
        * inspector/remote/socket/RemoteInspectorMessageParser.h: Renamed from inspector\remote\playstation\RemoteInspectorMessageParser.h.
        * inspector/remote/socket/RemoteInspectorServer.cpp: Renamed from inspector\remote\playstation\RemoteInspectorServerPlayStation.cpp.
        (Inspector::RemoteInspectorServer::didAccept):
        (Inspector::RemoteInspectorServer::start):
        * inspector/remote/socket/RemoteInspectorServer.h: Renamed from inspector\remote\playstation\RemoteInspectorServer.h.
        * inspector/remote/socket/RemoteInspectorSocket.cpp: Renamed from inspector\remote\playstation\RemoteInspectorPlayStation.cpp.
        (Inspector::RemoteInspector::start):
        * inspector/remote/socket/RemoteInspectorSocket.h: Copied from inspector\remote\playstation\RemoteInspectorSocket.h.
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp: Added.
        (Inspector::RemoteInspectorSocketEndpoint::RemoteInspectorSocketEndpoint):
        (Inspector::RemoteInspectorSocketEndpoint::~RemoteInspectorSocketEndpoint):
        (Inspector::RemoteInspectorSocketEndpoint::wakeupWorkerThread):
        (Inspector::RemoteInspectorSocketEndpoint::connectInet):
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::isListening):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::recvIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::sendIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::send):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h: Renamed from inspector\remote\playstation\RemoteInspectorSocket.h.
        * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp: Added.
        (Inspector::Socket::connect):
        (Inspector::Socket::listen):
        (Inspector::Socket::accept):
        (Inspector::Socket::createPair):
        (Inspector::Socket::setup):
        (Inspector::Socket::isValid):
        (Inspector::Socket::isListening):
        (Inspector::Socket::read):
        (Inspector::Socket::write):
        (Inspector::Socket::close):
        (Inspector::Socket::preparePolling):
        (Inspector::Socket::poll):
        (Inspector::Socket::isReadable):
        (Inspector::Socket::isWritable):
        (Inspector::Socket::markWaitingWritable):
        (Inspector::Socket::clearWaitingWritable):

2019-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, suppress warnings in non Darwin environments

        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):

2019-04-19  Saam Barati  <sbarati@apple.com>

        AbstractValue can represent more than int52
        https://bugs.webkit.org/show_bug.cgi?id=197118
        <rdar://problem/49969960>

        Reviewed by Michael Saboff.

        Let's analyze this control flow diamond:
        
        #0
        branch #1, #2
        
        #1:
        PutStack(JSValue, loc42)
        Jump #3
        
        #2:
        PutStack(Int52, loc42)
        Jump #3
        
        #3:
        ...
        
        Our abstract value for loc42 at the head of #3 will contain an abstract
        value that us the union of Int52 with other things. Obviously in the
        above program, a GetStack for loc42 would be inavlid, since it might
        be loading either JSValue or Int52. However, the abstract interpreter
        just tracks what the value could be, and it could be Int52 or JSValue.
        
        When I did the Int52 refactoring, I expected such things to never happen,
        but it turns out it does. We should just allow for this instead of asserting
        against it since it's valid IR to do the above.

        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::checkConsistency const):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::validateTypeAcceptingBoxedInt52 const):

2019-04-19  Tadeu Zagallo  <tzagallo@apple.com>

        Add option to dump JIT memory
        https://bugs.webkit.org/show_bug.cgi?id=197062
        <rdar://problem/49744332>

        Reviewed by Saam Barati.

        Dump all writes into JIT memory to the specified file. The format is:
        - 64-bit destination address for the write
        - 64-bit size of the content written
        - Copy of the data that was written to JIT memory

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):
        * runtime/Options.h:

2019-04-19  Keith Rollin  <krollin@apple.com>

        Add postprocess-header-rule scripts
        https://bugs.webkit.org/show_bug.cgi?id=197072
        <rdar://problem/50027299>

        Reviewed by Brent Fulgham.

        Several projects have post-processing build phases where exported
        headers are tweaked after they've been copied. This post-processing is
        performed via scripts called postprocess-headers.sh. For reasons
        related to XCBuild, we are now transitioning to a build process where
        the post-processing is performed at the same time as the
        exporting/copying. To support this process, add similar scripts named
        postprocess-header-rule, which are geared towards processing a single
        file at a time rather than all exported files at once. Also add a
        build rule that makes use of these scripts. These scripts and build
        rules are not used at the moment; they will come into use in an
        imminent patch.

        Note that I've named these postprocess-header-rule rather than
        postprocess-header-rule.sh. Scripts in Tools/Scripts do not have
        suffixes indicating how the tool is implemented. Scripts in
        per-project Scripts folders appear to be mixed regarding the use of
        suffixes. I'm opting here to follow the Tools/Scripts convention, with
        the expectation that over time we completely standardize on that.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/postprocess-header-rule: Added.

2019-04-18  Saam barati  <sbarati@apple.com>

        Remove useConcurrentBarriers option
        https://bugs.webkit.org/show_bug.cgi?id=197066

        Reviewed by Michael Saboff.

        This isn't a helpful option as it will lead us to crash when using the
        concurrent GC.

        * dfg/DFGStoreBarrierClusteringPhase.cpp:
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::barrierStoreLoadFence):
        * runtime/Options.h:

2019-04-17  Saam Barati  <sbarati@apple.com>

        Remove deprecated JSScript SPI
        https://bugs.webkit.org/show_bug.cgi?id=194909
        <rdar://problem/48283499>

        Reviewed by Keith Miller.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * API/JSScript.h:
        * API/JSScript.mm:
        (+[JSScript scriptWithSource:inVirtualMachine:]): Deleted.
        (fillBufferWithContentsOfFile): Deleted.
        (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]): Deleted.
        (+[JSScript scriptFromUTF8File:inVirtualMachine:withCodeSigning:andBytecodeCache:]): Deleted.
        (-[JSScript setSourceURL:]): Deleted.
        * API/JSScriptInternal.h:
        * API/tests/testapi.mm:
        (testFetch):
        (testFetchWithTwoCycle):
        (testFetchWithThreeCycle):
        (testLoaderResolvesAbsoluteScriptURL):
        (testImportModuleTwice):
        (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):

2019-04-17  Keith Rollin  <krollin@apple.com>

        Remove JSCBuiltins.cpp from Copy Headers phase
        https://bugs.webkit.org/show_bug.cgi?id=196981
        <rdar://problem/49952133>

        Reviewed by Alex Christensen.

        JSCBuiltins.cpp is not a header and so doesn't need to be in the Copy
        Headers phase. Checking its history, it seems to have been added
        accidentally at the same time that JSCBuiltins.h was added.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-04-16  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Update port for system library changes
        https://bugs.webkit.org/show_bug.cgi?id=196978

        Reviewed by Ross Kirsling.

        * shell/playstation/Initializer.cpp:
        Add reference to new posix compatibility library.

2019-04-16  Robin Morisset  <rmorisset@apple.com>

        [WTF] holdLock should be marked WARN_UNUSED_RETURN
        https://bugs.webkit.org/show_bug.cgi?id=196922

        Reviewed by Keith Miller.

        There was one case where holdLock was used and the result ignored.
        From a comment that was deleted in https://bugs.webkit.org/attachment.cgi?id=328438&action=prettypatch, I believe that it is on purpose.
        So I brought back a variant of the comment, and made the ignoring of the return explicit.

        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::isPagedOut):

2019-04-16  Caitlin Potter  <caitp@igalia.com>

        [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
        https://bugs.webkit.org/show_bug.cgi?id=176810

        Reviewed by Saam Barati.

        This adds conditional logic following the invariant checks, to perform
        filtering in common uses of getOwnPropertyNames.

        While this would ideally only be done in JSPropertyNameEnumerator, adding
        the filtering to ProxyObject::performGetOwnPropertyNames maintains the
        invariant that the EnumerationMode is properly followed.

        This was originally rolled out in r244020, as DontEnum filtering code
        in ObjectConstructor.cpp's ownPropertyKeys() had not been removed. It's
        now redundant due to being handled in ProxyObject::getOwnPropertyNames().

        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArray::reset):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performGetOwnPropertyNames):

2019-04-15  Saam barati  <sbarati@apple.com>

        Modify how we do SetArgument when we inline varargs calls
        https://bugs.webkit.org/show_bug.cgi?id=196712
        <rdar://problem/49605012>

        Reviewed by Michael Saboff.

        When we inline varargs calls, we guarantee that the number of arguments that
        go on the stack are somewhere between the "mandatoryMinimum" and the "limit - 1".
        However, we can't statically guarantee that the arguments between these two
        ranges was filled out by Load/ForwardVarargs. This is because in the general
        case we don't know the argument count statically.
        
        However, we used to always emit SetArgumentDefinitely up to "limit - 1" for
        all arguments, even when some arguments aren't guaranteed to be in a valid
        state. Emitting these SetArgumentDefinitely were helpful because they let us
        handle variable liveness and OSR exit metadata. However, when we converted
        to SSA, we ended up emitting a GetStack for each such SetArgumentDefinitely.
        
        This is wrong, as we can't guarantee such SetArgumentDefinitely nodes are
        actually looking at a range of the stack that are guaranteed to be initialized.
        This patch introduces a new form of SetArgument node: SetArgumentMaybe. In terms
        of OSR exit metadata and variable liveness tracking, it behaves like SetArgumentDefinitely.
        
        However, it differs in a couple key ways:
        1. In ThreadedCPS, GetLocal(@SetArgumentMaybe) is invalid IR, as this implies
        you might be loading uninitialized stack. (This same rule applies when you do
        the full data flow reachability analysis over CPS Phis.) If someone logically
        wanted to emit code like this, the correct node to emit would be GetArgument,
        not GetLocal. For similar reasons, PhantomLocal(@SetArgumentMaybe) is also
        invalid IR.
        2. To track liveness, Flush(@SetArgumentMaybe) is valid, and is the main user
        of SetArgumentMaybe.
        3. In SSA conversion, we don't lower SetArgumentMaybe to GetStack, as there
        should be no data flow user of SetArgumentMaybe.
        
        SetArgumentDefinitely guarantees that the stack slot is initialized.
        SetArgumentMaybe makes no such guarantee.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):
        * dfg/DFGCPSRethreadingPhase.cpp:
        (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
        (JSC::DFG::CPSRethreadingPhase::propagatePhis):
        (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGCommon.h:
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):
        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
        (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
        * dfg/DFGMaximalFlushInsertionPhase.cpp:
        (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
        (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::hasVariableAccessData):
        * dfg/DFGNodeType.h:
        * dfg/DFGPhantomInsertionPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSSAConversionPhase.cpp:
        (JSC::DFG::SSAConversionPhase::run):
        * 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):

2019-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243672.
        https://bugs.webkit.org/show_bug.cgi?id=196952

        [JSValue release] should be thread-safe (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "[JSC] JSWrapperMap should not use Objective-C Weak map
        (NSMapTable with NSPointerFunctionsWeakMemory) for
        m_cachedObjCWrappers"
        https://bugs.webkit.org/show_bug.cgi?id=196392
        https://trac.webkit.org/changeset/243672

2019-04-15  Saam barati  <sbarati@apple.com>

        SafeToExecute for GetByOffset/GetGetterByOffset/PutByOffset is using the wrong child for the base
        https://bugs.webkit.org/show_bug.cgi?id=196945
        <rdar://problem/49802750>

        Reviewed by Filip Pizlo.

        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):

2019-04-15  Robin Morisset  <rmorisset@apple.com>

        DFG should be able to constant fold Object.create() with a constant prototype operand
        https://bugs.webkit.org/show_bug.cgi?id=196886

        Reviewed by Yusuke Suzuki.


        It is a fairly simple and limited patch, as it only works when the DFG can prove the exact object used as prototype.
        But when it applies it can be a significant win:
                                                        Baseline                   Optim                                       
        object-create-constant-prototype              3.6082+-0.0979     ^      1.6947+-0.0756        ^ definitely 2.1292x faster
        object-create-null                           11.4492+-0.2510     ?     11.5030+-0.2402        ?
        object-create-unknown-object-prototype       15.6067+-0.1851     ?     15.7500+-0.2322        ?
        object-create-untyped-prototype               8.8873+-0.1240     ?      8.9806+-0.1202        ? might be 1.0105x slower
        <geometric>                                   8.6967+-0.1208     ^      7.2408+-0.1367        ^ definitely 1.2011x faster

        The only subtlety is that we need to to access the StructureCache concurrently from the compiler thread (see https://bugs.webkit.org/show_bug.cgi?id=186199)
        I solved this with a simple lock, taken when the compiler thread tries to read it, and when the main thread tries to modify it.
        I expect it to be extremely low contention, but will watch the bots just in case.
        The lock is taken neither when the main thread is only reading the cache (it has no-one to race with), nor when the GC purges it of dead entries (it does not free anything while a compiler thread is in the middle of a phase).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * runtime/StructureCache.cpp:
        (JSC::StructureCache::createEmptyStructure):
        (JSC::StructureCache::tryEmptyObjectStructureForPrototypeFromCompilerThread):
        * runtime/StructureCache.h:

2019-04-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: fake value descriptors for promises add a catch handler, preventing "rejectionhandled" events from being fired
        https://bugs.webkit.org/show_bug.cgi?id=196484
        <rdar://problem/49114725>

        Reviewed by Joseph Pecoraro.

        Only add a catch handler when the promise is reachable via a native getter and is known to
        have rejected. A non-rejected promise doesn't need a catch handler, and any promise that
        isn't reachable via a getter won't actually be reached, as `InjectedScript` doesn't call any
        functions, instead only getting the function object itself.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._propertyDescriptors.createFakeValueDescriptor):

        * inspector/JSInjectedScriptHost.h:
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::isPromiseRejectedWithNativeGetterTypeError): Added.
        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSInjectedScriptHostPrototype::finishCreation):
        (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError): Added.

        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::setNativeGetterTypeError): Added.
        (JSC::ErrorInstance::isNativeGetterTypeError const): Added.

        * runtime/Error.h:
        (JSC::throwVMGetterTypeError): Added.
        * runtime/Error.cpp:
        (JSC::createGetterTypeError): Added.
        (JSC::throwGetterTypeError): Added.
        (JSC::throwDOMAttributeGetterTypeError):

2019-04-15  Robin Morisset  <rmorisset@apple.com>

        B3::Value should have different kinds of adjacency lists
        https://bugs.webkit.org/show_bug.cgi?id=196091

        Reviewed by Filip Pizlo.

        The key idea of this optimization is to replace the Vector<Value*, 3> m_children in B3::Value (40 bytes on 64-bits platform) by one of the following:
        - Nothing (0 bytes)
        - 1 Value* (8 bytes)
        - 2 Value* (16 bytes)
        - 3 Value* (24 bytes)
        - A Vector<Value*, 3>
        after the end of the Value object, depending on the kind of the Value.
        So for example, when allocating an Add, we would allocate an extra 16 bytes into which to store 2 Values.
        This would halve the memory consumption of Const64/Const32/Nop/Identity and a bunch more kinds of values, and reduce by a more moderate amount the memory consumption of the rest of non-varargs values (e.g. Add would go from 72 to 48 bytes).

        A few implementation points:
        - Even if there is no children, we must remember to allocate at least enough space for replaceWithIdentity to work later. It needs sizeof(Value) (for the object itself) + sizeof(Value*) (for the pointer to its child)
        - We must make sure to destroy the vector whenever we destroy a Value which is VarArgs
        - We must remember how many elements there are in the case where we did not allocate a Vector. We cannot do it purely by relying on the kind, both for speed reasons and because Return can have either 0 or 1 argument in B3
          Thankfully, we have an extra byte of padding to use in the middle of B3::Value
        - In order to support clone(), we must have a separate version of allocate, which extracts the opcode from the to-be-cloned object instead of from the call to the constructor
        - Speaking of which, we need a special templated function opcodeFromConstructor, because some of the constructors of subclasses of Value don't take an explicit Opcode as argument, typically because they match a single one.
        - To maximize performance, we provide specialized versions of child/lastChild/numChildren/children in the subclasses of Value, skipping checks when the actual type of the Value is already known.
          This is done through the B3_SPECIALIZE_VALUE_FOR_... defined at the bottom of B3Value.h
        - In the constructors of Value, we convert all extra children arguments to Value* eagerly. It is not required for correctness (they will be converted when put into a Vector<Value*> or a Value* in the end), but it helps limit an explosion in the number of template instantiations.
        - I moved DeepValueDump::dump from the .h to the .cpp, as there is no good reason to inline it, and recompiling JSC is already slow enough

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3ArgumentRegValue.cpp:
        (JSC::B3::ArgumentRegValue::cloneImpl const): Deleted.
        * b3/B3ArgumentRegValue.h:
        * b3/B3AtomicValue.cpp:
        (JSC::B3::AtomicValue::AtomicValue):
        (JSC::B3::AtomicValue::cloneImpl const): Deleted.
        * b3/B3AtomicValue.h:
        * b3/B3BasicBlock.h:
        * b3/B3BasicBlockInlines.h:
        (JSC::B3::BasicBlock::appendNewNonTerminal): Deleted.
        * b3/B3CCallValue.cpp:
        (JSC::B3::CCallValue::appendArgs):
        (JSC::B3::CCallValue::cloneImpl const): Deleted.
        * b3/B3CCallValue.h:
        * b3/B3CheckValue.cpp:
        (JSC::B3::CheckValue::cloneImpl const): Deleted.
        * b3/B3CheckValue.h:
        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::cloneImpl const): Deleted.
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::cloneImpl const): Deleted.
        * b3/B3Const64Value.h:
        * b3/B3ConstDoubleValue.cpp:
        (JSC::B3::ConstDoubleValue::cloneImpl const): Deleted.
        * b3/B3ConstDoubleValue.h:
        * b3/B3ConstFloatValue.cpp:
        (JSC::B3::ConstFloatValue::cloneImpl const): Deleted.
        * b3/B3ConstFloatValue.h:
        * b3/B3ConstPtrValue.h:
        (JSC::B3::ConstPtrValue::opcodeFromConstructor):
        * b3/B3FenceValue.cpp:
        (JSC::B3::FenceValue::FenceValue):
        (JSC::B3::FenceValue::cloneImpl const): Deleted.
        * b3/B3FenceValue.h:
        * b3/B3MemoryValue.cpp:
        (JSC::B3::MemoryValue::MemoryValue):
        (JSC::B3::MemoryValue::cloneImpl const): Deleted.
        * b3/B3MemoryValue.h:
        * b3/B3MoveConstants.cpp:
        * b3/B3PatchpointValue.cpp:
        (JSC::B3::PatchpointValue::cloneImpl const): Deleted.
        * b3/B3PatchpointValue.h:
        (JSC::B3::PatchpointValue::opcodeFromConstructor):
        * b3/B3Procedure.cpp:
        * b3/B3Procedure.h:
        * b3/B3ProcedureInlines.h:
        (JSC::B3::Procedure::add):
        * b3/B3SlotBaseValue.cpp:
        (JSC::B3::SlotBaseValue::cloneImpl const): Deleted.
        * b3/B3SlotBaseValue.h:
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::forEachArgImpl):
        (JSC::B3::StackmapSpecial::isValidImpl):
        * b3/B3StackmapValue.cpp:
        (JSC::B3::StackmapValue::append):
        (JSC::B3::StackmapValue::StackmapValue):
        * b3/B3StackmapValue.h:
        * b3/B3SwitchValue.cpp:
        (JSC::B3::SwitchValue::SwitchValue):
        (JSC::B3::SwitchValue::cloneImpl const): Deleted.
        * b3/B3SwitchValue.h:
        (JSC::B3::SwitchValue::opcodeFromConstructor):
        * b3/B3UpsilonValue.cpp:
        (JSC::B3::UpsilonValue::cloneImpl const): Deleted.
        * b3/B3UpsilonValue.h:
        * b3/B3Value.cpp:
        (JSC::B3::DeepValueDump::dump const):
        (JSC::B3::Value::~Value):
        (JSC::B3::Value::replaceWithIdentity):
        (JSC::B3::Value::replaceWithNopIgnoringType):
        (JSC::B3::Value::replaceWithPhi):
        (JSC::B3::Value::replaceWithJump):
        (JSC::B3::Value::replaceWithOops):
        (JSC::B3::Value::replaceWith):
        (JSC::B3::Value::invertedCompare const):
        (JSC::B3::Value::returnsBool const):
        (JSC::B3::Value::cloneImpl const): Deleted.
        * b3/B3Value.h:
        (JSC::B3::DeepValueDump::dump const): Deleted.
        * b3/B3ValueInlines.h:
        (JSC::B3::Value::adjacencyListOffset const):
        (JSC::B3::Value::cloneImpl const):
        * b3/B3VariableValue.cpp:
        (JSC::B3::VariableValue::VariableValue):
        (JSC::B3::VariableValue::cloneImpl const): Deleted.
        * b3/B3VariableValue.h:
        * b3/B3WasmAddressValue.cpp:
        (JSC::B3::WasmAddressValue::WasmAddressValue):
        (JSC::B3::WasmAddressValue::cloneImpl const): Deleted.
        * b3/B3WasmAddressValue.h:
        * b3/B3WasmBoundsCheckValue.cpp:
        (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue):
        (JSC::B3::WasmBoundsCheckValue::cloneImpl const): Deleted.
        * b3/B3WasmBoundsCheckValue.h:
        (JSC::B3::WasmBoundsCheckValue::accepts):
        (JSC::B3::WasmBoundsCheckValue::opcodeFromConstructor):
        * b3/testb3.cpp:
        (JSC::B3::testCallFunctionWithHellaArguments):
        (JSC::B3::testCallFunctionWithHellaArguments2):
        (JSC::B3::testCallFunctionWithHellaArguments3):
        (JSC::B3::testCallFunctionWithHellaDoubleArguments):
        (JSC::B3::testCallFunctionWithHellaFloatArguments):
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::call):

2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should not encode the SourceProvider for UnlinkedFunctionExecutable's classSource
        https://bugs.webkit.org/show_bug.cgi?id=196878

        Reviewed by Saam Barati.

        Every time we encode an (Unlinked)SourceCode, we encode its SourceProvider,
        including the full source if it's a StringSourceProvider. This wasn't an issue,
        since the SourceCode contains a RefPtr to the SourceProvider, and the Encoder
        would avoid encoding the provider multiple times. With the addition of the
        incremental cache, each UnlinkedFunctionCodeBlock is encoded in isolation, which
        means we can no longer deduplicate it and the full program text was being encoded
        multiple times in the cache.
        As a work around, this patch adds a custom cached type for encoding the SourceCode
        without its provider, and later injects the SourceProvider through the Decoder.

        * parser/SourceCode.h:
        * parser/UnlinkedSourceCode.h:
        (JSC::UnlinkedSourceCode::provider const):
        * runtime/CachedTypes.cpp:
        (JSC::Decoder::Decoder):
        (JSC::Decoder::create):
        (JSC::Decoder::provider const):
        (JSC::CachedSourceCodeWithoutProvider::encode):
        (JSC::CachedSourceCodeWithoutProvider::decode const):
        (JSC::decodeCodeBlockImpl):
        * runtime/CachedTypes.h:

2019-04-15  Robin Morisset  <rmorisset@apple.com>

        MarkedSpace.cpp is not in the Xcode workspace
        https://bugs.webkit.org/show_bug.cgi?id=196928

        Reviewed by Saam Barati.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>

        Incremental bytecode cache should not append function updates when loaded from memory
        https://bugs.webkit.org/show_bug.cgi?id=196865

        Reviewed by Filip Pizlo.

        Function updates hold the assumption that a function can only be executed/cached
        after its containing code block has already been cached. This assumptions does
        not hold if the UnlinkedCodeBlock is loaded from memory by the CodeCache, since
        we might have two independent SourceProviders executing different paths of the
        code and causing the same UnlinkedCodeBlock to be modified in memory.
        Use a RefPtr instead of Ref for m_cachedBytecode in ShellSourceProvider to distinguish
        between a new, empty cache and a cache that was not loaded and therefore cannot be updated.

        * jsc.cpp:
        (ShellSourceProvider::ShellSourceProvider):

2019-04-15  Saam barati  <sbarati@apple.com>

        mergeOSREntryValue is wrong when the incoming value does not match up with the flush format
        https://bugs.webkit.org/show_bug.cgi?id=196918

        Reviewed by Yusuke Suzuki.

        r244238 lead to some debug failures because we were calling checkConsistency()
        before doing fixTypeForRepresentation when merging in must handle values in
        CFA. This patch fixes that.
        
        However, as I was reading over mergeOSREntryValue, I realized it was wrong. It
        was possible it could merge in a value/type outside of the variable's flushed type.
        Once the flush format types are locked in, we can't introduce a type out of
        that range. This probably never lead to any crashes as our profiling injection
        and speculation decision code is solid. However, what we were doing is clearly
        wrong, and something a fuzzer could have found if we fuzzed the must handle
        values inside prediction injection. We should do that fuzzing:
        https://bugs.webkit.org/show_bug.cgi?id=196924

        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::mergeOSREntryValue):
        * dfg/DFGAbstractValue.h:
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::injectOSR):

2019-04-15  Robin Morisset  <rmorisset@apple.com>

        Several structures and enums in the Yarr interpreter can be shrunk
        https://bugs.webkit.org/show_bug.cgi?id=196923

        Reviewed by Saam Barati.

        YarrOp: 88 -> 80
        RegularExpression: 40 -> 32
        ByteTerm: 56 -> 48
        PatternTerm: 56 -> 48

        * yarr/RegularExpression.cpp:
        * yarr/YarrInterpreter.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
        * yarr/YarrParser.h:
        * yarr/YarrPattern.h:

2019-04-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r244172): crash when trying to add extra domain while inspecting JSContext
        https://bugs.webkit.org/show_bug.cgi?id=196925
        <rdar://problem/49873994>

        Reviewed by Joseph Pecoraro.

        Move the logic for creating the `InspectorAgent` and `InspectorDebuggerAgent` into separate
        functions so that callers can be guaranteed to have a valid instance of the agent.

        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
        (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
        (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
        (Inspector::JSGlobalObjectInspectorController::ensureInspectorAgent): Added.
        (Inspector::JSGlobalObjectInspectorController::ensureDebuggerAgent): Added.
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

2019-04-14  Don Olmstead  <don.olmstead@sony.com>

        [CMake] JavaScriptCore derived sources should only be referenced inside JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=196742

        Reviewed by Konstantin Tokarev.

        Migrate to using JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOURCES_JAVASCRIPTCORE_DIR
        to support moving the JavaScriptCore derived sources outside of a shared directory.

        Also use JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOUCES_DIR.

        * CMakeLists.txt:

2019-04-13  Tadeu Zagallo  <tzagallo@apple.com>

        CodeCache should check that the UnlinkedCodeBlock was successfully created before caching it
        https://bugs.webkit.org/show_bug.cgi?id=196880

        Reviewed by Yusuke Suzuki.

        CodeCache should not tell the SourceProvider to cache the bytecode if it failed
        to create the UnlinkedCodeBlock.

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):

2019-04-12  Saam barati  <sbarati@apple.com>

        r244079 logically broke shouldSpeculateInt52
        https://bugs.webkit.org/show_bug.cgi?id=196884

        Reviewed by Yusuke Suzuki.

        In r244079, I changed shouldSpeculateInt52 to only return true
        when the prediction is isAnyInt52Speculation(). However, it was
        wrong to not to include SpecInt32 in this for two reasons:

        1. We diligently write code that first checks if we should speculate Int32.
        For example:
        if (shouldSpeculateInt32()) ... 
        else if (shouldSpeculateInt52()) ...

        It would be wrong not to fall back to Int52 if we're dealing with the union of
        Int32 and Int52.

        It would be a performance mistake to not include Int32 here because
        data flow can easily tell us that we have variables that are the union
        of Int32 and Int52 values. It's better to speculate Int52 than Double
        in that situation.

        2. We also write code where we ask if the inputs can be Int52, e.g, if
        we know via profiling that an Add overflows, we may not emit an Int32 add.
        However, we only emit such an add if both inputs can be Int52, and Int32
        can trivially become Int52.

       This patch recovers the 0.5-1% regression r244079 caused on JetStream 2.

        * bytecode/SpeculatedType.h:
        (JSC::isInt32SpeculationForArithmetic):
        (JSC::isInt32OrBooleanSpeculationForArithmetic):
        (JSC::isInt32OrInt52Speculation):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::observeUseKindOnNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt52):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGVariableAccessData.cpp:
        (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):

2019-04-12  Saam barati  <sbarati@apple.com>

        Unreviewed. Build fix after r244233.

        * assembler/CPU.cpp:

2019-04-12  Saam barati  <sbarati@apple.com>

        Sometimes we need to user fewer CPUs in our threading calculations
        https://bugs.webkit.org/show_bug.cgi?id=196794
        <rdar://problem/49389497>

        Reviewed by Yusuke Suzuki.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/CPU.cpp: Added.
        (JSC::isKernTCSMAvailable):
        (JSC::enableKernTCSM):
        (JSC::kernTCSMAwareNumberOfProcessorCores):
        * assembler/CPU.h:
        (JSC::isKernTCSMAvailable):
        (JSC::enableKernTCSM):
        (JSC::kernTCSMAwareNumberOfProcessorCores):
        * heap/MachineStackMarker.h:
        (JSC::MachineThreads::addCurrentThread):
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        * runtime/Options.cpp:
        (JSC::computeNumberOfWorkerThreads):
        (JSC::computePriorityDeltaOfWorkerThreads):
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::Worklist):

2019-04-12  Robin Morisset  <rmorisset@apple.com>

        Use padding at end of ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=196823

        Reviewed by Filip Pizlo.

        * runtime/ArrayBuffer.h:

2019-04-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] op_has_indexed_property should not assume subscript part is Uint32
        https://bugs.webkit.org/show_bug.cgi?id=196850

        Reviewed by Saam Barati.

        op_has_indexed_property assumed that subscript part is always Uint32. However, this is just a load from non-constant RegisterID,
        DFG can store it in double format and can perform OSR exit. op_has_indexed_property should not assume that.
        In this patch, instead, we check it with isAnyInt and get uint32_t from AnyInt.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2019-04-11  Saam barati  <sbarati@apple.com>

        Remove invalid assertion in operationInstanceOfCustom
        https://bugs.webkit.org/show_bug.cgi?id=196842
        <rdar://problem/49725493>

        Reviewed by Michael Saboff.

        In the generated JIT code, we go to the slow path when the incoming function
        isn't the Node's CodeOrigin's functionProtoHasInstanceSymbolFunction. However,
        in the JIT operation, we were asserting against exec->lexicalGlobalObject()'s
        functionProtoHasInstanceSymbolFunction. That assertion might be wrong when
        inlining across global objects as exec->lexicalGlobalObject() uses the machine
        frame for procuring the global object. There is no harm when this assertion fails
        as we just execute the slow path. This patch removes the assertion. (However, this
        does shed light on the deficiency in our exec->lexicalGlobalObject() function with
        respect to inlining. However, this isn't new -- we've known about this for a while.)

        * jit/JITOperations.cpp:

2019-04-11  Michael Saboff  <msaboff@apple.com>

        Improve the Inline Cache Stats code
        https://bugs.webkit.org/show_bug.cgi?id=196836

        Reviewed by Saam Barati.

        Needed to handle the case where the Identifier could be null, for example with InstanceOfAddAccessCase
        and InstanceOfReplaceWithJump.

        Added the ability to log the location of a GetBy and PutBy property as either on self or up the
        protocol chain.

        * jit/ICStats.cpp:
        (JSC::ICEvent::operator< const):
        (JSC::ICEvent::dump const):
        * jit/ICStats.h:
        (JSC::ICEvent::ICEvent):
        (JSC::ICEvent::hash const):
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        (JSC::tryCachePutByID):
        (JSC::tryCacheInByID):

2019-04-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/ScriptProfiler.json:
        * inspector/protocol/Timeline.json:
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * inspector/protocol/CPUProfiler.json:
        * inspector/protocol/Memory.json:
        Send an end timestamp to match other instruments.

        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
        (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):

        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
        (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.

2019-04-11  Saam barati  <sbarati@apple.com>

        Rename SetArgument to SetArgumentDefinitely
        https://bugs.webkit.org/show_bug.cgi?id=196828

        Reviewed by Yusuke Suzuki.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=196712
        where we will introduce a node named SetArgumentMaybe. Doing this refactoring
        first will make reviewing that other patch easier.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCPSRethreadingPhase.cpp:
        (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
        (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
        (JSC::DFG::CPSRethreadingPhase::specialCaseArguments):
        (JSC::DFG::CPSRethreadingPhase::propagatePhis):
        (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGCommon.h:
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        * dfg/DFGGraph.h:
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::initialize):
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):
        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
        (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
        * dfg/DFGMaximalFlushInsertionPhase.cpp:
        (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
        (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::hasVariableAccessData):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertPhantomToPhantomLocal):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSREntrypointCreationPhase.cpp:
        (JSC::DFG::OSREntrypointCreationPhase::run):
        * dfg/DFGPhantomInsertionPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSSAConversionPhase.cpp:
        (JSC::DFG::SSAConversionPhase::run):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::run):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):

2019-04-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r244158.

        Casued 8 inspector/timeline/ test failures.

        Reverted changeset:

        "Web Inspector: Timelines: can't reliably stop/start a
        recording"
        https://bugs.webkit.org/show_bug.cgi?id=196778
        https://trac.webkit.org/changeset/244158

2019-04-10  Saam Barati  <sbarati@apple.com>

        AbstractValue::validateOSREntryValue is wrong for Int52 constants
        https://bugs.webkit.org/show_bug.cgi?id=196801
        <rdar://problem/49771122>

        Reviewed by Yusuke Suzuki.

        validateOSREntryValue should not care about the format of the incoming
        value for Int52s. This patch normalizes the format of m_value and
        the incoming value when comparing them.

        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::validateOSREntryValue const):

2019-04-10  Saam Barati  <sbarati@apple.com>

        ArithSub over Int52 has shouldCheckOverflow as always true
        https://bugs.webkit.org/show_bug.cgi?id=196796

        Reviewed by Yusuke Suzuki.

        AI was checking for ArithSub over Int52 if !shouldCheckOverflow. However,
        shouldCheckOverflow is always true, so !shouldCheckOverflow is always
        false. We shouldn't check something we assert against.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-04-10  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Specify byte order clearly on Remote Inspector Protocol
        https://bugs.webkit.org/show_bug.cgi?id=196790

        Reviewed by Ross Kirsling.

        Original implementation lacks byte order specification. Network byte order is the
        good candidate if there's no strong reason to choose other.
        Currently no client exists for PlayStation remote inspector protocol, so we can
        change the byte order without care.

        * inspector/remote/playstation/RemoteInspectorMessageParserPlayStation.cpp:
        (Inspector::MessageParser::createMessage):
        (Inspector::MessageParser::parse):

2019-04-10  Devin Rousso  <drousso@apple.com>

       Web Inspector: Inspector: lazily create the agent
       https://bugs.webkit.org/show_bug.cgi?id=195971
       <rdar://problem/49039645>

       Reviewed by Joseph Pecoraro.

       * inspector/JSGlobalObjectInspectorController.cpp:
       (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
       (Inspector::JSGlobalObjectInspectorController::connectFrontend):
       (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
       (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

       * inspector/agents/InspectorAgent.h:
       * inspector/agents/InspectorAgent.cpp:

2019-04-10  Saam Barati  <sbarati@apple.com>

        Work around an arm64_32 LLVM miscompile bug
        https://bugs.webkit.org/show_bug.cgi?id=196788

        Reviewed by Yusuke Suzuki.

        * runtime/CachedTypes.cpp:

2019-04-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/ScriptProfiler.json:
        * inspector/protocol/Timeline.json:
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * inspector/protocol/CPUProfiler.json:
        * inspector/protocol/Memory.json:
        Send an end timestamp to match other instruments.

        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
        (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):

        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
        (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.

2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, fix watch build after r244143
        https://bugs.webkit.org/show_bug.cgi?id=195000

        The result of `lseek` should be `off_t` rather than `int`.

        * jsc.cpp:

2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>

        Add support for incremental bytecode cache updates
        https://bugs.webkit.org/show_bug.cgi?id=195000

        Reviewed by Filip Pizlo.

        Add support for incremental updates to the bytecode cache. The cache
        is constructed as follows:
        - When the cache is empty, the initial payload can be added to the BytecodeCache
        by calling BytecodeCache::addGlobalUpdate. This represents the encoded
        top-level UnlinkedCodeBlock.
        - Afterwards, updates can be added by calling BytecodeCache::addFunctionUpdate.
        The update is applied by appending the encoded UnlinkedFunctionCodeBlock
        to the existing cache and updating the CachedFunctionExecutableMetadata
        and the offset of the new CachedFunctionCodeBlock in the owner CachedFunctionExecutable.

        * API/JSScript.mm:
        (-[JSScript readCache]):
        (-[JSScript isUsingBytecodeCache]):
        (-[JSScript init]):
        (-[JSScript cachedBytecode]):
        (-[JSScript writeCache:]):
        * API/JSScriptInternal.h:
        * API/JSScriptSourceProvider.h:
        * API/JSScriptSourceProvider.mm:
        (JSScriptSourceProvider::cachedBytecode const):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        * jsc.cpp:
        (ShellSourceProvider::~ShellSourceProvider):
        (ShellSourceProvider::cachePath const):
        (ShellSourceProvider::loadBytecode const):
        (ShellSourceProvider::ShellSourceProvider):
        (ShellSourceProvider::cacheEnabled):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::cachedBytecode const):
        (JSC::SourceProvider::updateCache const):
        (JSC::SourceProvider::commitCachedBytecode const):
        * runtime/CachePayload.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        (JSC::CachePayload::makeMappedPayload):
        (JSC::CachePayload::makeMallocPayload):
        (JSC::CachePayload::makeEmptyPayload):
        (JSC::CachePayload::CachePayload):
        (JSC::CachePayload::~CachePayload):
        (JSC::CachePayload::operator=):
        (JSC::CachePayload::freeData):
        * runtime/CachePayload.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        (JSC::CachePayload::data const):
        (JSC::CachePayload::size const):
        (JSC::CachePayload::CachePayload):
        * runtime/CacheUpdate.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        (JSC::CacheUpdate::CacheUpdate):
        (JSC::CacheUpdate::operator=):
        (JSC::CacheUpdate::isGlobal const):
        (JSC::CacheUpdate::asGlobal const):
        (JSC::CacheUpdate::asFunction const):
        * runtime/CacheUpdate.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        * runtime/CachedBytecode.cpp: Added.
        (JSC::CachedBytecode::addGlobalUpdate):
        (JSC::CachedBytecode::addFunctionUpdate):
        (JSC::CachedBytecode::copyLeafExecutables):
        (JSC::CachedBytecode::commitUpdates const):
        * runtime/CachedBytecode.h: Added.
        (JSC::CachedBytecode::create):
        (JSC::CachedBytecode::leafExecutables):
        (JSC::CachedBytecode::data const):
        (JSC::CachedBytecode::size const):
        (JSC::CachedBytecode::hasUpdates const):
        (JSC::CachedBytecode::sizeForUpdate const):
        (JSC::CachedBytecode::CachedBytecode):
        * runtime/CachedTypes.cpp:
        (JSC::Encoder::addLeafExecutable):
        (JSC::Encoder::release):
        (JSC::Decoder::Decoder):
        (JSC::Decoder::create):
        (JSC::Decoder::size const):
        (JSC::Decoder::offsetOf):
        (JSC::Decoder::ptrForOffsetFromBase):
        (JSC::Decoder::addLeafExecutable):
        (JSC::VariableLengthObject::VariableLengthObject):
        (JSC::VariableLengthObject::buffer const):
        (JSC::CachedPtrOffsets::offsetOffset):
        (JSC::CachedWriteBarrierOffsets::ptrOffset):
        (JSC::CachedFunctionExecutable::features const):
        (JSC::CachedFunctionExecutable::hasCapturedVariables const):
        (JSC::CachedFunctionExecutableOffsets::codeBlockForCallOffset):
        (JSC::CachedFunctionExecutableOffsets::codeBlockForConstructOffset):
        (JSC::CachedFunctionExecutableOffsets::metadataOffset):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::encodeCodeBlock):
        (JSC::encodeFunctionCodeBlock):
        (JSC::decodeCodeBlockImpl):
        (JSC::isCachedBytecodeStillValid):
        * runtime/CachedTypes.h:
        (JSC::VariableLengthObjectBase::VariableLengthObjectBase):
        (JSC::decodeCodeBlock):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::updateCache):
        (JSC::CodeCache::write):
        (JSC::writeCodeBlock):
        (JSC::serializeBytecode):
        * runtime/CodeCache.h:
        (JSC::SourceCodeValue::SourceCodeValue):
        (JSC::CodeCacheMap::findCacheAndUpdateAge):
        (JSC::CodeCacheMap::fetchFromDiskImpl):
        * runtime/Completion.cpp:
        (JSC::generateProgramBytecode):
        (JSC::generateModuleBytecode):
        * runtime/Completion.h:
        * runtime/LeafExecutable.cpp: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
        (JSC::LeafExecutable::operator+ const):
        * runtime/LeafExecutable.h: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
        (JSC::LeafExecutable::LeafExecutable):
        (JSC::LeafExecutable::base const):

2019-04-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r243989.

        Broke i686 builds

        Reverted changeset:

        "[CMake] Detect SSE2 at compile time"
        https://bugs.webkit.org/show_bug.cgi?id=196488
        https://trac.webkit.org/changeset/243989

2019-04-10  Robin Morisset  <rmorisset@apple.com>

        We should clear m_needsOverflowCheck when hitting an exception in defineProperties in ObjectConstructor.cpp
        https://bugs.webkit.org/show_bug.cgi?id=196746

        Reviewed by Yusuke Suzuki..

        It should be safe as in that case we are not completing the operation, and so not going to have any buffer overflow.

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

2019-04-10  Antoine Quint  <graouts@apple.com>

        Enable Pointer Events on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=196771
        <rdar://problem/49040909>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-04-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build maintenance -- update .xcfilelists.

        * DerivedSources-input.xcfilelist:

2019-04-09  Ross Kirsling  <ross.kirsling@sony.com>

        JSC should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=193073

        Reviewed by Keith Miller.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        (JSC::BytecodeGenerator::emitEqualityOp): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitEqualityOp):
        Factor out the logic that uses the template parameter and keep it in the header.

        * jit/JITPropertyAccess.cpp:
        List off the template specializations needed by JITOperations.cpp.
        This is unfortunate but at least there are only two (x2) by definition?
        Trying to do away with this incurs a severe domino effect...

        * API/JSValueRef.cpp:
        * b3/B3OptimizeAssociativeExpressionTrees.cpp:
        * b3/air/AirHandleCalleeSaves.cpp:
        * builtins/BuiltinNames.cpp:
        * bytecode/AccessCase.cpp:
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeRewriter.cpp:
        * bytecode/BytecodeUseDef.h:
        * bytecode/CodeBlock.cpp:
        * bytecode/InstanceOfAccessCase.cpp:
        * bytecode/MetadataTable.cpp:
        * bytecode/PolyProtoAccessChain.cpp:
        * bytecode/StructureSet.cpp:
        * bytecompiler/NodesCodegen.cpp:
        * dfg/DFGCFAPhase.cpp:
        * dfg/DFGPureValue.cpp:
        * heap/GCSegmentedArray.h:
        * heap/HeapInlines.h:
        * heap/IsoSubspace.cpp:
        * heap/LocalAllocator.cpp:
        * heap/LocalAllocator.h:
        * heap/LocalAllocatorInlines.h:
        * heap/MarkingConstraintSolver.cpp:
        * inspector/ScriptArguments.cpp:
        (Inspector::ScriptArguments::isEqual const):
        * inspector/ScriptCallStackFactory.cpp:
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        * interpreter/StackVisitor.cpp:
        * llint/LLIntEntrypoint.cpp:
        * runtime/ArrayIteratorPrototype.cpp:
        * runtime/BigIntPrototype.cpp:
        * runtime/CachedTypes.cpp:
        * runtime/ErrorType.cpp:
        * runtime/IndexingType.cpp:
        * runtime/JSCellInlines.h:
        * runtime/JSImmutableButterfly.h:
        * runtime/Operations.h:
        * runtime/RegExpCachedResult.cpp:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpGlobalData.cpp:
        * runtime/StackFrame.h:
        * wasm/WasmSignature.cpp:
        * wasm/js/JSToWasm.cpp:
        * wasm/js/JSToWasmICCallee.cpp:
        * wasm/js/WebAssemblyFunction.h:
        Fix includes / forward declarations (and a couple of nearby clang warnings).

2019-04-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Apple builds should use ICU_INCLUDE_DIRS
        https://bugs.webkit.org/show_bug.cgi?id=196720

        Reviewed by Konstantin Tokarev.

        * PlatformMac.cmake:

2019-04-09  Saam barati  <sbarati@apple.com>

        Clean up Int52 code and some bugs in it
        https://bugs.webkit.org/show_bug.cgi?id=196639
        <rdar://problem/49515757>

        Reviewed by Yusuke Suzuki.

        This patch fixes bugs in our Int52 code. The primary change in this patch is
        adopting a segregated type lattice for Int52. Previously, for Int52 values,
        we represented them with SpecInt32Only and SpecInt52Only. For an Int52,
        SpecInt32Only meant that the value is in int32 range. And SpecInt52Only meant
        that the is outside of the int32 range.
        
        However, this got confusing because we reused SpecInt32Only both for JSValue
        representations and Int52 representations. This actually lead to some bugs.
        
        1. It's possible that roundtripping through Int52 representation would say
        it produces the wrong type. For example, consider this program and how we
        used to annotate types in AI:
        a: JSConstant(10.0) => m_type is SpecAnyIntAsDouble
        b: Int52Rep(@a) => m_type is SpecInt52Only
        c: ValueRep(@b) => m_type is SpecAnyIntAsDouble
        
        In AI, for the above program, we'd say that @c produces SpecAnyIntAsDouble.
        However, the execution semantics are such that it'd actually produce a boxed
        Int32. This patch fixes the bug where we'd say that Int52Rep over SpecAnyIntAsDouble
        would produce SpecInt52Only. This is clearly wrong, as SpecAnyIntAsDouble can
        mean an int value in either int32 or int52 range.
        
        2. AsbstractValue::validateTypeAcceptingBoxedInt52 was wrong in how it
        accepted Int52 values. It was wrong in two different ways:
        a: If the AbstractValue's type was SpecInt52Only, and the incoming value
        was a boxed double, but represented a value in int32 range, the incoming
        value would incorrectly validate as being acceptable. However, we should
        have rejected this value.
        b: If the AbstractValue's type was SpecInt32Only, and the incoming value
        was an Int32 boxed in a double, this would not validate, even though
        it should have validated.
        
        Solving 2 was easiest if we segregated out the Int52 type into its own
        lattice. This patch makes a new Int52 lattice, which is composed of
        SpecInt32AsInt52 and SpecNonInt32AsInt52.
        
        The conversion rules are now really simple.
        
        Int52 rep => JSValue rep
        SpecInt32AsInt52 => SpecInt32Only
        SpecNonInt32AsInt52 => SpecAnyIntAsDouble
        
        JSValue rep => Int52 rep
        SpecInt32Only => SpecInt32AsInt52
        SpecAnyIntAsDouble => SpecInt52Any
        
        With these rules, the program in (1) will now correctly report that @c
        returns SpecInt32Only | SpecAnyIntAsDouble.

        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        (JSC::speculationToAbbreviatedString):
        (JSC::int52AwareSpeculationFromValue):
        (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations):
        (JSC::speculationFromString):
        * bytecode/SpeculatedType.h:
        (JSC::isInt32SpeculationForArithmetic):
        (JSC::isInt32OrBooleanSpeculationForArithmetic):
        (JSC::isAnyInt52Speculation):
        (JSC::isIntAnyFormat):
        (JSC::isInt52Speculation): Deleted.
        (JSC::isAnyIntSpeculation): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::fixTypeForRepresentation):
        (JSC::DFG::AbstractValue::checkConsistency const):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::isInt52Any const):
        (JSC::DFG::AbstractValue::validateTypeAcceptingBoxedInt52 const):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupArithMul):
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupGetPrototypeOf):
        (JSC::DFG::FixupPhase::fixupToThis):
        (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
        (JSC::DFG::FixupPhase::observeUseKindOnNode):
        (JSC::DFG::FixupPhase::fixIntConvertingEdge):
        (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
        (JSC::DFG::FixupPhase::fixupChecksInBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addShouldSpeculateInt52):
        (JSC::DFG::Graph::binaryArithShouldSpeculateInt52):
        (JSC::DFG::Graph::unaryArithShouldSpeculateInt52):
        (JSC::DFG::Graph::addShouldSpeculateAnyInt): Deleted.
        (JSC::DFG::Graph::binaryArithShouldSpeculateAnyInt): Deleted.
        (JSC::DFG::Graph::unaryArithShouldSpeculateAnyInt): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt52):
        (JSC::DFG::Node::shouldSpeculateAnyInt): Deleted.
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
        (JSC::DFG::SpeculativeJIT::compileArithAdd):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        (JSC::DFG::SpeculativeJIT::compileArithNegate):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        * dfg/DFGVariableAccessData.cpp:
        (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):
        (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):
        (JSC::FTL::DFG::LowerDFGToB3::setIntTypedArrayLoadResult):

2019-04-09  Tadeu Zagallo  <tzagallo@apple.com>

        ASSERTION FAILED: !scope.exception() || !hasProperty in JSObject::get
        https://bugs.webkit.org/show_bug.cgi?id=196708
        <rdar://problem/49556803>

        Reviewed by Yusuke Suzuki.

        `operationPutToScope` needs to return early if an exception is thrown while
        checking if `hasProperty`.

        * jit/JITOperations.cpp:

2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG should respect node's strict flag
        https://bugs.webkit.org/show_bug.cgi?id=196617

        Reviewed by Saam Barati.

        We accidentally use codeBlock->isStrictMode() directly in DFG and FTL. But this is wrong since this CodeBlock is the top level DFG/FTL CodeBlock,
        and this code does not respect the isStrictMode flag for the inlined CodeBlocks. In this patch, we start using isStrictModeFor(CodeOrigin) consistently
        in DFG and FTL to get the right isStrictMode flag for the DFG node.
        And we also split compilePutDynamicVar into compilePutDynamicVarStrict and compilePutDynamicVarNonStrict since (1) it is cleaner than accessing inlined
        callframe in the operation function, and (2) it is aligned to the other functions like operationPutByValDirectNonStrict etc.
        This bug is discovered by RandomizingFuzzerAgent by expanding the DFG coverage.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupToThis):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutDynamicVar):
        (JSC::DFG::SpeculativeJIT::compileToThis):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar):

2019-04-08  Don Olmstead  <don.olmstead@sony.com>

        [CMake][WinCairo] Separate copied headers into different directories
        https://bugs.webkit.org/show_bug.cgi?id=196655

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt:
        * shell/PlatformWin.cmake:

2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] isRope jump in StringSlice should not jump over register allocations
        https://bugs.webkit.org/show_bug.cgi?id=196716

        Reviewed by Saam Barati.

        Jumping over the register allocation code in DFG (like the following) is wrong.

            auto jump = m_jit.branchXXX();
            {
                GPRTemporary reg(this);
                GPRReg regGPR = reg.gpr();
                ...
            }
            jump.link(&m_jit);

        When GPRTemporary::gpr allocates a new register, it can flush the previous register value into the stack and make the register usable.
        Jumping over this register allocation code skips the flushing code, and makes the DFG's stack and register content tracking inconsistent:
        DFG thinks that the content is flushed and stored in particular stack slot even while this flushing code is skipped.
        In this patch, we perform register allocations before jumping to the slow path based on `isRope` condition in StringSlice.

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

2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] to_index_string should not assume incoming value is Uint32
        https://bugs.webkit.org/show_bug.cgi?id=196713

        Reviewed by Saam Barati.

        The slow path of to_index_string assumes that incoming value is Uint32. But we should not have
        this assumption since DFG may decide we should have it double format. This patch removes this
        assumption, and instead, we should assume that incoming value is AnyInt and the range of this
        is within Uint32.

        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2019-04-08  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Fix Web GPU experimental feature on iOS
        https://bugs.webkit.org/show_bug.cgi?id=196632

        Reviewed by Myles C. Maxfield.

        Properly make Web GPU available on iOS 11+.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2019-04-08  Ross Kirsling  <ross.kirsling@sony.com>

        -f[no-]var-tracking-assignments is GCC-only
        https://bugs.webkit.org/show_bug.cgi?id=196699

        Reviewed by Don Olmstead.

        * CMakeLists.txt:
        Just remove the build flag altogether -- it supposedly doesn't solve the problem it was meant to
        and said problem evidently no longer occurs as of GCC 9.

2019-04-08  Saam Barati  <sbarati@apple.com>

        WebAssembly.RuntimeError missing exception check
        https://bugs.webkit.org/show_bug.cgi?id=196700
        <rdar://problem/49693932>

        Reviewed by Yusuke Suzuki.

        * wasm/js/JSWebAssemblyRuntimeError.h:
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, rolling in r243948 with test fix
        https://bugs.webkit.org/show_bug.cgi?id=196486

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createString):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::parseMultilineComment):
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        (JSC::Lexer<T>::lex): Deleted.
        * parser/Lexer.h:
        (JSC::Lexer::hasLineTerminatorBeforeToken const):
        (JSC::Lexer::setHasLineTerminatorBeforeToken):
        (JSC::Lexer<T>::lex):
        (JSC::Lexer::prevTerminator const): Deleted.
        (JSC::Lexer::setTerminator): Deleted.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::allowAutomaticSemicolon):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        (JSC::Parser<LexerType>::parseYieldExpression):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/Parser.h:
        (JSC::Parser::nextWithoutClearingLineTerminator):
        (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
        (JSC::Parser::internalSaveLexerState):
        (JSC::Parser::restoreLexerState):

2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243948.

        Caused inspector/runtime/parse.html to fail

        Reverted changeset:

        "SIGSEGV in JSC::BytecodeGenerator::addStringConstant"
        https://bugs.webkit.org/show_bug.cgi?id=196486
        https://trac.webkit.org/changeset/243948

2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243943.

        Caused test262 failures.

        Reverted changeset:

        "[JSC] Filter DontEnum properties in
        ProxyObject::getOwnPropertyNames()"
        https://bugs.webkit.org/show_bug.cgi?id=176810
        https://trac.webkit.org/changeset/243943

2019-04-08  Claudio Saavedra  <csaavedra@igalia.com>

        [JSC] Partially fix the build with unified builds disabled
        https://bugs.webkit.org/show_bug.cgi?id=196647

        Reviewed by Konstantin Tokarev.

        If you disable unified builds you find all kind of build
        errors. This partially tries to fix them but there's a lot
        more.

        * API/JSBaseInternal.h:
        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
        * b3/air/AirHandleCalleeSaves.h:
        * bytecode/ExecutableToCodeBlockEdge.cpp:
        * bytecode/ExitFlag.h:
        * bytecode/ICStatusUtils.h:
        * bytecode/UnlinkedMetadataTable.h:
        * dfg/DFGPureValue.h:
        * heap/IsoAlignedMemoryAllocator.cpp:
        * heap/IsoAlignedMemoryAllocator.h:

2019-04-08  Guillaume Emont  <guijemont@igalia.com>

        Enable DFG on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=196689

        Reviewed by Žan Doberšek.

        Since the bytecode change, we enabled the baseline JIT on mips in
        r240432, but DFG is still missing. With this change, all tests are
        passing on a ci20 board.

        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::calleeSaveRegisters):
        Added s0, which is used in llint.

2019-04-08  Xan Lopez  <xan@igalia.com>

        [CMake] Detect SSE2 at compile time
        https://bugs.webkit.org/show_bug.cgi?id=196488

        Reviewed by Carlos Garcia Campos.

        * assembler/MacroAssemblerX86Common.cpp: Remove unnecessary (and
        incorrect) static_assert.

2019-04-07  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r243642): Crash in reddit.com page
        https://bugs.webkit.org/show_bug.cgi?id=196684

        Reviewed by Geoffrey Garen.

        In r243642, the code that saves and restores the count for non-greedy character classes
        was inadvertently put inside an if statement.  This code should be generated for all
        non-greedy character classes.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):

2019-04-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] CallLinkInfo should clear Callee or CodeBlock even if it is unlinked by jettison
        https://bugs.webkit.org/show_bug.cgi?id=196683

        Reviewed by Saam Barati.

        In r243626, we stop repatching CallLinkInfo when the CallLinkInfo is held by jettisoned CodeBlock.
        But we still need to clear the Callee or CodeBlock since they are now dead. Otherwise, CodeBlock's
        visitWeak eventually accesses this dead cells and crashes because the owner CodeBlock of CallLinkInfo
        can be still live.

        We also move all repatching operations from CallLinkInfo.cpp to Repatch.cpp for consistency because the
        other repatching operations in CallLinkInfo are implemented in Repatch.cpp side.

        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::setCallee):
        (JSC::CallLinkInfo::clearCallee):
        * jit/Repatch.cpp:
        (JSC::linkFor):
        (JSC::revertCall):

2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] OSRExit recovery for SpeculativeAdd does not consier "A = A + A" pattern
        https://bugs.webkit.org/show_bug.cgi?id=196582

        Reviewed by Saam Barati.

        In DFG, our ArithAdd with overflow is executed speculatively, and we recover the value when overflow flag is set.
        The recovery is subtracting the operand from the destination to get the original two operands. Our recovery code
        handles A + B = A, A + B = B cases. But it misses A + A = A case (here, A and B are GPRReg). Our recovery code
        attempts to produce the original operand by performing A - A, and it always produces zero accidentally.

        This patch adds the recovery code for A + A = A case. Because we know that this ArithAdd overflows, and operands were
        same values, we can calculate the original operand from the destination value by `((int32_t)value >> 1) ^ 0x80000000`.

        We also found that FTL recovery code is dead. We remove them in this patch.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExit.h:
        (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithAdd):
        * ftl/FTLExitValue.cpp:
        (JSC::FTL::ExitValue::dataFormat const):
        (JSC::FTL::ExitValue::dumpInContext const):
        * ftl/FTLExitValue.h:
        (JSC::FTL::ExitValue::isArgument const):
        (JSC::FTL::ExitValue::hasIndexInStackmapLocations const):
        (JSC::FTL::ExitValue::adjustStackmapLocationsIndexByOffset):
        (JSC::FTL::ExitValue::recovery): Deleted.
        (JSC::FTL::ExitValue::isRecovery const): Deleted.
        (JSC::FTL::ExitValue::leftRecoveryArgument const): Deleted.
        (JSC::FTL::ExitValue::rightRecoveryArgument const): Deleted.
        (JSC::FTL::ExitValue::recoveryFormat const): Deleted.
        (JSC::FTL::ExitValue::recoveryOpcode const): Deleted.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::preparePatchpointForExceptions):
        (JSC::FTL::DFG::LowerDFGToB3::appendOSRExit):
        (JSC::FTL::DFG::LowerDFGToB3::exitValueForNode):
        (JSC::FTL::DFG::LowerDFGToB3::addAvailableRecovery): Deleted.
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileRecovery):

2019-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243665.

        Caused iOS JSC tests to exit with an exception.

        Reverted changeset:

        "Assertion failed in JSC::createError"
        https://bugs.webkit.org/show_bug.cgi?id=196305
        https://trac.webkit.org/changeset/243665

2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        SIGSEGV in JSC::BytecodeGenerator::addStringConstant
        https://bugs.webkit.org/show_bug.cgi?id=196486

        Reviewed by Saam Barati.

        When parsing a FunctionExpression / FunctionDeclaration etc., we use SyntaxChecker for the body of the function because we do not have any interest on the nodes of the body at that time.
        The nodes will be parsed with the ASTBuilder when the function itself is parsed for code generation. This works well previously because all the function ends with "}" previously.
        SyntaxChecker lexes this "}" token, and parser restores the context back to ASTBuilder and continues parsing.

        But now, we have ArrowFunctionExpression without braces `arrow => expr`. Let's consider the following code.

                arrow => expr
                "string!"

        We parse arrow function's body with SyntaxChecker. At that time, we lex "string!" token under the SyntaxChecker context. But this means that we may not build string content for this token
        since SyntaxChecker may not have interest on string content itself in certain case. After the parser is back to ASTBuilder, we parse "string!" as ExpressionStatement with string constant,
        generate StringNode with non-built identifier (nullptr), and we accidentally create StringNode with nullptr.

        This patch fixes this problem. The root cause of this problem is that the last token lexed in the previous context is used. We add lexCurrentTokenAgainUnderCurrentContext which will re-lex
        the current token under the current context (may be ASTBuilder). This should be done only when the caller's context is different from SyntaxChecker, which avoids unnecessary lexing.
        We leverage existing SavePoint mechanism to implement lexCurrentTokenAgainUnderCurrentContext cleanly.

        And we also fix the bug in the existing SavePoint mechanism, which is shown in the attached test script. When we save LexerState, we do not save line terminator status. This patch also introduces
        lexWithoutClearingLineTerminator, which lex the token without clearing line terminator status.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createString):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::parseMultilineComment):
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator): EOF token also should record offset information. This offset information is correctly handled in Lexer::setOffset too.
        (JSC::Lexer<T>::lex): Deleted.
        * parser/Lexer.h:
        (JSC::Lexer::hasLineTerminatorBeforeToken const):
        (JSC::Lexer::setHasLineTerminatorBeforeToken):
        (JSC::Lexer<T>::lex):
        (JSC::Lexer::prevTerminator const): Deleted.
        (JSC::Lexer::setTerminator): Deleted.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::allowAutomaticSemicolon):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        (JSC::Parser<LexerType>::parseYieldExpression):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/Parser.h:
        (JSC::Parser::nextWithoutClearingLineTerminator):
        (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
        (JSC::Parser::internalSaveLexerState):
        (JSC::Parser::restoreLexerState):

2019-04-05  Caitlin Potter  <caitp@igalia.com>

        [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
        https://bugs.webkit.org/show_bug.cgi?id=176810

        Reviewed by Saam Barati.

        This adds conditional logic following the invariant checks, to perform
        filtering in common uses of getOwnPropertyNames.

        While this would ideally only be done in JSPropertyNameEnumerator, adding
        the filtering to ProxyObject::performGetOwnPropertyNames maintains the
        invariant that the EnumerationMode is properly followed.

        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArray::reset):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performGetOwnPropertyNames):

2019-04-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243833.
        https://bugs.webkit.org/show_bug.cgi?id=196645

        This change breaks build of WPE and GTK ports (Requested by
        annulen on #webkit).

        Reverted changeset:

        "[CMake][WTF] Mirror XCode header directories"
        https://bugs.webkit.org/show_bug.cgi?id=191662
        https://trac.webkit.org/changeset/243833

2019-04-05  Caitlin Potter  <caitp@igalia.com>

        [JSC] throw if ownKeys Proxy trap result contains duplicate keys
        https://bugs.webkit.org/show_bug.cgi?id=185211

        Reviewed by Saam Barati.

        Implements the normative spec change in https://github.com/tc39/ecma262/pull/833

        This involves tracking duplicate keys returned from the ownKeys trap in yet
        another HashTable, and may incur a minor performance penalty in some cases. This
        is not expected to significantly affect web performance.

        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performGetOwnPropertyNames):

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] makeBoundFunction should not assume incoming "length" value is Int32 because it performs some calculation in bytecode
        https://bugs.webkit.org/show_bug.cgi?id=196631

        Reviewed by Saam Barati.

        makeBoundFunction assumes that "length" argument is always Int32. But this should not be done since this "length" value is calculated in builtin JS code.
        DFG may store this value in Double format so that we should not rely on that this value is Int32. This patch fixes makeBoundFunction function to perform
        toInt32 operation. We also insert a missing exception check for `JSString::value(ExecState*)` in makeBoundFunction.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * interpreter/CallFrameInlines.h:
        * runtime/DoublePredictionFuzzerAgent.cpp: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
        (JSC::DoublePredictionFuzzerAgent::DoublePredictionFuzzerAgent):
        (JSC::DoublePredictionFuzzerAgent::getPrediction):
        * runtime/DoublePredictionFuzzerAgent.h: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
        * runtime/JSGlobalObject.cpp:
        (JSC::makeBoundFunction):
        * runtime/Options.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2019-04-04  Robin Morisset  <rmorisset@apple.com>

        B3ReduceStrength should know that Mul distributes over Add and Sub
        https://bugs.webkit.org/show_bug.cgi?id=196325
        <rdar://problem/49441650>

        Reviewed by Saam Barati.

        Fix some obviously wrong code that was due to an accidental copy-paste.
        It made the entire optimization dead code that never ran.

        * b3/B3ReduceStrength.cpp:

2019-04-04  Saam Barati  <sbarati@apple.com>

        Unreviewed, build fix for CLoop after r243886

        * interpreter/Interpreter.cpp:
        (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
        * interpreter/StackVisitor.h:

2019-04-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r243898.
        https://bugs.webkit.org/show_bug.cgi?id=196624

        `#if !ENABLE(C_LOOP) && NUMBER_OF_CALLEE_SAVES_REGISTERS > 0`
        does not work well (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "Unreviewed, build fix for CLoop and Windows after r243886"
        https://bugs.webkit.org/show_bug.cgi?id=196387
        https://trac.webkit.org/changeset/243898

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for CLoop and Windows after r243886
        https://bugs.webkit.org/show_bug.cgi?id=196387

        RegisterAtOffsetList does not exist if ENABLE(ASSEMBLER) is false.

        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
        * interpreter/StackVisitor.h:

2019-04-04  Saam barati  <sbarati@apple.com>

        Teach Call ICs how to call Wasm
        https://bugs.webkit.org/show_bug.cgi?id=196387

        Reviewed by Filip Pizlo.

        This patch teaches JS to call Wasm without going through the native thunk.
        Currently, we emit a JIT "JS" callee stub which marshals arguments from
        JS to Wasm. Like the native version of this, this thunk is responsible
        for saving and restoring the VM's current Wasm context. Instead of emitting
        an exception handler, we also teach the unwinder how to read the previous
        wasm context to restore it as it unwindws past this frame.
        
        This patch is straight forward, and leaves some areas for perf improvement:
        - We can teach the DFG/FTL to directly use the Wasm calling convention when
          it knows it's calling a single Wasm function. This way we don't shuffle
          registers to the stack and then back into registers.
        - We bail out to the slow path for mismatched arity. I opened a bug to fix
          optimize arity check failures: https://bugs.webkit.org/show_bug.cgi?id=196564
        - We bail out to the slow path Double JSValues flowing into i32 arguments.
          We should teach this thunk how to do that conversion directly.
        
        This patch also refactors the code to explicitly have a single pinned size register.
        We used pretend in some places that we could have more than one pinned size register.
        However, there was other code that just asserted the size was one. This patch just rips
        out this code since we never moved to having more than one pinned size register. Doing
        this refactoring cleans up the various places where we set up the size register.
        
        This patch is a 50-60% progression on JetStream 2's richards-wasm.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodeRef::operator=):
        (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
        * interpreter/Interpreter.cpp:
        (JSC::UnwindFunctor::operator() const):
        (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
        (JSC::StackVisitor::Frame::calleeSaveRegisters): Deleted.
        * interpreter/StackVisitor.h:
        * jit/JITOperations.cpp:
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::runtimeTagRegisters):
        (JSC::RegisterSet::specialRegisters):
        (JSC::RegisterSet::runtimeRegisters): Deleted.
        * jit/RegisterSet.h:
        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):
        * runtime/JSFunction.cpp:
        (JSC::getCalculatedDisplayName):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::jsToWasmICCalleeStructure const):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmContext.h:
        (JSC::Wasm::Context::pointerToInstance):
        * wasm/WasmContextInlines.h:
        (JSC::Wasm::Context::store):
        * wasm/WasmMemoryInformation.cpp:
        (JSC::Wasm::getPinnedRegisters):
        (JSC::Wasm::PinnedRegisterInfo::get):
        (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
        * wasm/WasmMemoryInformation.h:
        (JSC::Wasm::PinnedRegisterInfo::toSave const):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/JSToWasmICCallee.cpp: Added.
        (JSC::JSToWasmICCallee::create):
        (JSC::JSToWasmICCallee::createStructure):
        (JSC::JSToWasmICCallee::visitChildren):
        * wasm/js/JSToWasmICCallee.h: Added.
        (JSC::JSToWasmICCallee::function):
        (JSC::JSToWasmICCallee::JSToWasmICCallee):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::useTagRegisters const):
        (JSC::WebAssemblyFunction::calleeSaves const):
        (JSC::WebAssemblyFunction::usedCalleeSaveRegisters const):
        (JSC::WebAssemblyFunction::previousInstanceOffset const):
        (JSC::WebAssemblyFunction::previousInstance):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        (JSC::WebAssemblyFunction::visitChildren):
        (JSC::WebAssemblyFunction::destroy):
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyFunctionHeapCellType.cpp: Added.
        (JSC::WebAssemblyFunctionDestroyFunc::operator() const):
        (JSC::WebAssemblyFunctionHeapCellType::WebAssemblyFunctionHeapCellType):
        (JSC::WebAssemblyFunctionHeapCellType::~WebAssemblyFunctionHeapCellType):
        (JSC::WebAssemblyFunctionHeapCellType::finishSweep):
        (JSC::WebAssemblyFunctionHeapCellType::destroy):
        * wasm/js/WebAssemblyFunctionHeapCellType.h: Added.
        * wasm/js/WebAssemblyPrototype.h:

2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Pass CodeOrigin to FuzzerAgent
        https://bugs.webkit.org/show_bug.cgi?id=196590

        Reviewed by Saam Barati.

        Pass CodeOrigin instead of bytecodeIndex. CodeOrigin includes richer information (InlineCallFrame*).
        We also mask prediction with SpecBytecodeTop in DFGByteCodeParser. The fuzzer can produce any SpeculatedTypes,
        but DFGByteCodeParser should only see predictions that can be actually produced from the bytecode execution.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        * runtime/FuzzerAgent.cpp:
        (JSC::FuzzerAgent::getPrediction):
        * runtime/FuzzerAgent.h:
        * runtime/RandomizingFuzzerAgent.cpp:
        (JSC::RandomizingFuzzerAgent::getPrediction):
        * runtime/RandomizingFuzzerAgent.h:

2019-04-04  Caio Lima  <ticaiolima@gmail.com>

        [JSC] We should consider moving UnlinkedFunctionExecutable::m_parentScopeTDZVariables to RareData
        https://bugs.webkit.org/show_bug.cgi?id=194944

        Reviewed by Keith Miller.

        Based on profile data collected on JetStream2, Speedometer 2 and
        other benchmarks, it is very rare having non-empty
        UnlinkedFunctionExecutable::m_parentScopeTDZVariables.

        - Data collected from Speedometer2
            Total number of UnlinkedFunctionExecutable: 39463
            Total number of non-empty parentScopeTDZVars: 428 (~1%)

        - Data collected from JetStream2
            Total number of UnlinkedFunctionExecutable: 83715
            Total number of non-empty parentScopeTDZVars: 5285 (~6%)

        We also collected numbers on 6 of top 10 Alexia sites.

        - Data collected from youtube.com
            Total number of UnlinkedFunctionExecutable: 29599
            Total number of non-empty parentScopeTDZVars: 97 (~0.3%)

        - Data collected from twitter.com
            Total number of UnlinkedFunctionExecutable: 23774
            Total number of non-empty parentScopeTDZVars: 172 (~0.7%)

        - Data collected from google.com
            Total number of UnlinkedFunctionExecutable: 33209
            Total number of non-empty parentScopeTDZVars: 174 (~0.5%)

        - Data collected from amazon.com:
            Total number of UnlinkedFunctionExecutable: 15182
            Total number of non-empty parentScopeTDZVars: 166 (~1%)

        - Data collected from facebook.com:
            Total number of UnlinkedFunctionExecutable: 54443
            Total number of non-empty parentScopeTDZVars: 269 (~0.4%)

        - Data collected from netflix.com:
            Total number of UnlinkedFunctionExecutable: 39266
            Total number of non-empty parentScopeTDZVars: 97 (~0.2%)

        Considering such numbers, this patch is moving `m_parentScopeTDZVariables`
        to RareData. This decreases sizeof(UnlinkedFunctionExecutable) by
        16 bytes. With this change, now UnlinkedFunctionExecutable constructors
        receives an `Optional<VariableEnvironmentMap::Handle>` and only stores
        it when `value != WTF::nullopt`. We also changed
        UnlinkedFunctionExecutable::parentScopeTDZVariables() and it returns
        `VariableEnvironment()` whenever the Executable doesn't have RareData,
        or VariableEnvironmentMap::Handle is unitialized. This is required
        because RareData is instantiated when any of its field is stored and
        we can have an unitialized `Handle` even on cases when parentScopeTDZVariables
        is `WTF::nullopt`.

        Results on memory usage on JetStrem2 is neutral.

            Mean of memory peak on ToT: 4258633728 bytes (confidence interval: 249720072.95)
            Mean of memory peak on Changes: 4367325184 bytes (confidence interval: 321285583.61)

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::getVariablesUnderTDZ):

        BytecodeGenerator::getVariablesUnderTDZ now also caches if m_cachedVariablesUnderTDZ
        is empty, so we can properly return `WTF::nullopt` without the
        reconstruction of a VariableEnvironment to check if it is empty.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * parser/VariableEnvironment.h:
        (JSC::VariableEnvironment::isEmpty const):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCompactVariableMapHandle::decode const):

        It returns an unitialized Handle when there is no
        CompactVariableEnvironment. This can happen when RareData is ensured
        because of another field.

        (JSC::CachedFunctionExecutableRareData::encode):
        (JSC::CachedFunctionExecutableRareData::decode const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * runtime/CodeCache.cpp:

        Instead of creating a dummyVariablesUnderTDZ, we simply pass
        WTF::nullopt.

        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):

2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode for jsc.cpp helpers and fix CachedStringImpl
        https://bugs.webkit.org/show_bug.cgi?id=196409

        Reviewed by Saam Barati.

        Some of the helpers in jsc.cpp, such as `functionRunString`, were stll using
        using `makeSource` instead of `jscSource`, which does not use the ShellSourceProvider
        and therefore does not write the bytecode cache to disk.

        Changing that revealed a bug in bytecode cache. The Encoder keeps a mapping
        of pointers to offsets of already cached objects, in order to avoid caching
        the same object twice. Similarly, the Decoder keeps a mapping from offsets
        to pointers, in order to avoid creating multiple objects in memory for the
        same cached object. The following was happening:
        1) A StringImpl* S was cached as CachedPtr<CachedStringImpl> at offset O. We add
        an entry in the Encoder mapping that S has already been encoded at O.
        2) We cache StringImpl* S again, but now as CachedPtr<CachedUniquedStringImpl>.
        We find an entry in the Encoder mapping for S, and return the offset O. However,
        the object cached at O is a CachedPtr<CachedStringImpl> (i.e. not Uniqued).

        3) When decoding, there are 2 possibilities:
        3.1) We find S for the first time through a CachedPtr<CachedStringImpl>. In
        this case, everything works as expected since we add an entry in the decoder
        mapping from the offset O to the decoded StringImpl* S. The next time we find
        S through the uniqued version, we'll return the already decoded S.
        3.2) We find S through a CachedPtr<CachedUniquedStringImpl>. Now we have a
        problem, since the CachedPtr has the offset of a CachedStringImpl (not uniqued),
        which has a different shape and we crash.

        We fix this by making CachedStringImpl and CachedUniquedStringImpl share the
        same implementation. Since it doesn't matter whether a string is uniqued for
        encoding, and we always decode strings as uniqued either way, they can be used
        interchangeably.

        * jsc.cpp:
        (functionRunString):
        (functionLoadString):
        (functionDollarAgentStart):
        (functionCheckModuleSyntax):
        (runInteractive):
        * runtime/CachedTypes.cpp:
        (JSC::CachedUniquedStringImplBase::decode const):
        (JSC::CachedFunctionExecutable::rareData const):
        (JSC::CachedCodeBlock::rareData const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedUniquedStringImpl::encode): Deleted.
        (JSC::CachedUniquedStringImpl::decode const): Deleted.
        (JSC::CachedStringImpl::encode): Deleted.
        (JSC::CachedStringImpl::decode const): Deleted.

2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>

        UnlinkedCodeBlock constructor from cache should initialize m_didOptimize
        https://bugs.webkit.org/show_bug.cgi?id=196396

        Reviewed by Saam Barati.

        The UnlinkedCodeBlock constructor in CachedTypes was missing the initialization
        for m_didOptimize, which leads to crashes in CodeBlock::thresholdForJIT.

        * runtime/CachedTypes.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):

2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, rolling in r243843 with the build fix
        https://bugs.webkit.org/show_bug.cgi?id=196586

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/RandomizingFuzzerAgent.cpp:
        (JSC::RandomizingFuzzerAgent::getPrediction):

2019-04-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r243843.

        Broke CLoop and Windows builds.

        Reverted changeset:

        "[JSC] Add dump feature for RandomizingFuzzerAgent"
        https://bugs.webkit.org/show_bug.cgi?id=196586
        https://trac.webkit.org/changeset/243843

2019-04-03  Robin Morisset  <rmorisset@apple.com>

        B3 should use associativity to optimize expression trees
        https://bugs.webkit.org/show_bug.cgi?id=194081

        Reviewed by Filip Pizlo.

        This patch adds a new B3 pass, that tries to find and optimize expression trees made purely of any one associative and commutative operator (Add/Mul/BitOr/BitAnd/BitXor).
        The pass only runs in O2, and runs once, after lowerMacros and just before a run of B3ReduceStrength (which helps clean up the dead code it tends to leave behind).
        I had to separate killDeadCode out of B3ReduceStrength (as a new B3EliminateDeadCode pass) to run it before B3OptimizeAssociativeExpressionTrees, as otherwise it is stopped by high use counts
        inherited from CSE.
        This extra run of DCE is by itself a win, most notably on microbenchmarks/instanceof-always-hit-two (1.5x faster), and on microbenchmarks/licm-dragons(-out-of-bounds) (both get 1.16x speedup).
        I suspect it is because it runs between CSE and tail-dedup, and as a result allows a lot more tail-dedup to occur.

        The pass is currently extremely conservative, not trying anything if it would cause _any_ code duplication.
        For this purpose, it starts by computing use counts for the potentially interesting nodes (those with the right opcodes), and segregate them into expression trees.
        The root of an expression tree is a node that is either used in multiple places, or is used by a value with a different opcode.
        The leaves of an expression tree are nodes that are either used in multiple places, or have a different opcode.
        All constant leaves of a tree are combined, as well as all leaves that are identical. What remains is then laid out into a balanced binary tree, hopefully maximizing ILP.

        This optimization was implemented as a stand-alone pass and not as part of B3ReduceStrength mostly because it needs use counts to avoid code duplication.
        It also benefits from finding all tree roots first, and not trying to repeatedly optimize subtrees.

        I added several tests to testB3 with varying patterns of trees. It is also tested in a less focused way by lots of older tests.

        In the future this pass could be expanded to allow some bounded amount of code duplication, and merging more leaves (e.g. Mul(a, 3) and a in an Add tree, into Mul(a, 4))
        The latter will need exposing the peephole optimizations out of B3ReduceStrength to avoid duplicating code.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/B3Common.cpp:
        (JSC::B3::shouldDumpIR):
        (JSC::B3::shouldDumpIRAtEachPhase):
        * b3/B3Common.h:
        * b3/B3EliminateDeadCode.cpp: Added.
        (JSC::B3::EliminateDeadCode::run):
        (JSC::B3::eliminateDeadCode):
        * b3/B3EliminateDeadCode.h: Added.
        (JSC::B3::EliminateDeadCode::EliminateDeadCode):
        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3OptimizeAssociativeExpressionTrees.cpp: Added.
        (JSC::B3::OptimizeAssociativeExpressionTrees::OptimizeAssociativeExpressionTrees):
        (JSC::B3::OptimizeAssociativeExpressionTrees::neutralElement):
        (JSC::B3::OptimizeAssociativeExpressionTrees::isAbsorbingElement):
        (JSC::B3::OptimizeAssociativeExpressionTrees::combineConstants):
        (JSC::B3::OptimizeAssociativeExpressionTrees::emitValue):
        (JSC::B3::OptimizeAssociativeExpressionTrees::optimizeRootedTree):
        (JSC::B3::OptimizeAssociativeExpressionTrees::run):
        (JSC::B3::optimizeAssociativeExpressionTrees):
        * b3/B3OptimizeAssociativeExpressionTrees.h: Added.
        * b3/B3ReduceStrength.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::replaceWithIdentity):
        * b3/testb3.cpp:
        (JSC::B3::testBitXorTreeArgs):
        (JSC::B3::testBitXorTreeArgsEven):
        (JSC::B3::testBitXorTreeArgImm):
        (JSC::B3::testAddTreeArg32):
        (JSC::B3::testMulTreeArg32):
        (JSC::B3::testBitAndTreeArg32):
        (JSC::B3::testBitOrTreeArg32):
        (JSC::B3::run):

2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add dump feature for RandomizingFuzzerAgent
        https://bugs.webkit.org/show_bug.cgi?id=196586

        Reviewed by Saam Barati.

        Towards deterministic tests for the results from randomizing fuzzer agent, this patch adds Options::dumpRandomizingFuzzerAgentPredictions, which dumps the generated types.
        The results is like this.

            getPrediction name:(#C2q9xD),bytecodeIndex:(22),original:(Array),generated:(OtherObj|Array|Float64Array|BigInt|NonIntAsDouble)
            getPrediction name:(makeUnwriteableUnconfigurableObject#AiEJv1),bytecodeIndex:(14),original:(OtherObj),generated:(Final|Uint8Array|Float64Array|SetObject|WeakSetObject|BigInt|NonIntAsDouble)

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/RandomizingFuzzerAgent.cpp:
        (JSC::RandomizingFuzzerAgent::getPrediction):

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * Configurations/FeatureDefines.xcconfig:

2019-04-03  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r243642): com.apple.JavaScriptCore crash in JSC::RegExpObject::execInline
        https://bugs.webkit.org/show_bug.cgi?id=196477

        Reviewed by Keith Miller.

        The problem here is that when we advance the index by 2 for a character class that only
        has non-BMP characters, we might go past the end of the string.  This can happen for
        greedy counted character classes that are part of a alternative where there is one
        character to match after the greedy non-BMP character class.

        The "do we have string left to match" check at the top of the JIT loop for the counted
        character class checks to see if index is not equal to the string length.  For non-BMP
        character classes, we need to check to see if there are at least 2 characters left.
        Therefore we now temporarily add 1 to the current index before comparing.  This checks
        to see if there are iat least 2 characters left to match, instead of 1.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):

2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Exception verification crash on operationArrayIndexOfValueInt32OrContiguous
        https://bugs.webkit.org/show_bug.cgi?id=196574

        Reviewed by Saam Barati.

        This patch adds missing exception check in operationArrayIndexOfValueInt32OrContiguous.

        * dfg/DFGOperations.cpp:

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

        [CMake][WTF] Mirror XCode header directories
        https://bugs.webkit.org/show_bug.cgi?id=191662

        Reviewed by Konstantin Tokarev.

        Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
        builds.

        * CMakeLists.txt:
        * shell/CMakeLists.txt:

2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add FuzzerAgent, which has a hooks to get feedback & inject fuzz data into JSC
        https://bugs.webkit.org/show_bug.cgi?id=196530

        Reviewed by Saam Barati.

        This patch adds FuzzerAgent interface and simple RandomizingFuzzerAgent to JSC.
        This RandomizingFuzzerAgent returns random SpeculatedType for value profiling to find
        the issues in JSC. The seed for randomization can be specified by seedOfRandomizingFuzzerAgent.

        I ran this with seedOfRandomizingFuzzerAgent=1 last night and it finds 3 failures in the current JSC tests,
        they should be fixed in subsequent patches.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        * runtime/FuzzerAgent.cpp: Added.
        (JSC::FuzzerAgent::~FuzzerAgent):
        (JSC::FuzzerAgent::getPrediction):
        * runtime/FuzzerAgent.h: Added.
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/Options.h:
        * runtime/RandomizingFuzzerAgent.cpp: Added.
        (JSC::RandomizingFuzzerAgent::RandomizingFuzzerAgent):
        (JSC::RandomizingFuzzerAgent::getPrediction):
        * runtime/RandomizingFuzzerAgent.h: Added.
        * runtime/RegExpCachedResult.h:
        * runtime/RegExpGlobalData.cpp:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::fuzzerAgent const):
        (JSC::VM::setFuzzerAgent):

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * Configurations/FeatureDefines.xcconfig:

2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remote Inspector indicate callback should always happen on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=196513
        <rdar://problem/49498284>

        Reviewed by Devin Rousso.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::receivedIndicateMessage):
        When we have a WebThread, don't just run on the WebThread,
        run on the MainThread with the WebThreadLock.

2019-04-02  Michael Saboff  <msaboff@apple.com>

        Crash in Options::setOptions() using --configFile option and libgmalloc
        https://bugs.webkit.org/show_bug.cgi?id=196506

        Reviewed by Keith Miller.

        Changed to call CString::data() while making the call to Options::setOptions().  This keeps
        the implicit CString temporary alive until after setOptions() returns.

        * runtime/ConfigFile.cpp:
        (JSC::ConfigFile::parse):

2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
        https://bugs.webkit.org/show_bug.cgi?id=182757

        Reviewed by Don Olmstead.

        * CMakeLists.txt: Do not use DERIVED_SOURCE_DIRECTORIES parameter
        of WEBKIT_MAKE_FORWARDING_HEADERS. Added generated headers to
        JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS.

2019-04-02  Saam barati  <sbarati@apple.com>

        Add a ValueRepReduction phase
        https://bugs.webkit.org/show_bug.cgi?id=196234

        Reviewed by Filip Pizlo.

        This patch adds a ValueRepReduction phase. The main idea here is
        to try to reduce DoubleRep(RealNumberUse:ValueRep(DoubleRepUse:@x))
        to just be @x. This patch handles such above strengh reduction rules
        as long as we prove that all users of the ValueRep can be converted
        to using the incoming double value. That way we prevent introducing
        a parallel live range for the double value.
        
        This patch tracks the uses of the ValueRep through Phi variables,
        so we can convert entire Phi variables to being Double instead
        of JSValue if the Phi also has only double uses.
        
        This is implemented through a simple escape analysis. DoubleRep(RealNumberUse:)
        and OSR exit hints are not counted as escapes. All other uses are counted
        as escapes. Connected Phi graphs are converted to being Double only if the
        entire graph is ok with the result being Double.
        
        Some ways we could extend this phase in the future:
        - There are a lot of DoubleRep(NumberUse:@ValueRep(@x)) uses. This ensures
          that the result of the DoubleRep of @x is not impure NaN. We could
          handle this case if we introduced a PurifyNaN node and replace the DoubleRep
          with PurifyNaN(@x). Alternatively, we could see if certain users of this
          DoubleRep are okay with impure NaN flowing into them and we'd need to ensure
          their output type is always treated as if the input is impure NaN.
        - We could do sinking of ValueRep where we think it's profitable. So instead
          of an escape making it so we never represent the variable as a Double, we
          could make the escape reconstruct the JSValueRep where profitable.
        - We can extend this phase to handle Int52Rep if it's profitable.
        - We can opt other nodes into accepting incoming Doubles so we no longer
          treat them as escapes.
        
        This patch is somewhere between neutral and a 1% progression on JetStream 2.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGValueRepReductionPhase.cpp: Added.
        (JSC::DFG::ValueRepReductionPhase::ValueRepReductionPhase):
        (JSC::DFG::ValueRepReductionPhase::run):
        (JSC::DFG::ValueRepReductionPhase::convertValueRepsToDouble):
        (JSC::DFG::performValueRepReduction):
        * dfg/DFGValueRepReductionPhase.h: Added.
        * runtime/Options.h:

2019-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSRunLoopTimer::Manager should be small
        https://bugs.webkit.org/show_bug.cgi?id=196425

        Reviewed by Darin Adler.

        Using very large Key or Value in HashMap potentially bloats memory since HashMap pre-allocates large size of
        memory ((sizeof(Key) + sizeof(Value)) * N) for its backing storage's array. Using std::unique_ptr<> for JSRunLoopTimer's
        PerVMData to keep HashMap's backing store size small.

        * runtime/JSRunLoopTimer.cpp:
        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer):
        (JSC::JSRunLoopTimer::Manager::timeUntilFire):
        (JSC::JSRunLoopTimer::Manager::didChangeRunLoop):
        * runtime/JSRunLoopTimer.h:

2019-04-01  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Add initialization for JSC shell for PlayStation port
        https://bugs.webkit.org/show_bug.cgi?id=195411

        Reviewed by Ross Kirsling.

        Add ps options

        * shell/PlatformPlayStation.cmake: Added.
        * shell/playstation/Initializer.cpp: Added.
        (initializer):

2019-04-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        Stop trying to support building JSC with clang 3.8
        https://bugs.webkit.org/show_bug.cgi?id=195947
        <rdar://problem/49069219>

        Reviewed by Darin Adler.

        It seems WebKit hasn't built with clang 3.8 in a while, no devs are using this compiler, we
        don't know how much effort it would be to make JSC work again, and it's making the code
        worse. Remove my hacks to support clang 3.8 from JSC.

        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        (JSC::GetterSetterAccessCase::clone const):
        * bytecode/InstanceOfAccessCase.cpp:
        (JSC::InstanceOfAccessCase::clone const):
        * bytecode/IntrinsicGetterAccessCase.cpp:
        (JSC::IntrinsicGetterAccessCase::clone const):
        * bytecode/ModuleNamespaceAccessCase.cpp:
        (JSC::ModuleNamespaceAccessCase::clone const):
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::clone const):

2019-03-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Butterfly allocation from LargeAllocation should try "realloc" behavior if collector thread is not active
        https://bugs.webkit.org/show_bug.cgi?id=196160

        Reviewed by Saam Barati.

        "realloc" can be effective in terms of peak/current memory footprint when realloc succeeds because,

        1. It does not allocate additional memory while expanding a vector
        2. It does not deallocate an old memory, just reusing the current memory by expanding, so that memory footprint is tight even before scavenging

        We found that we can "realloc" large butterflies in certain conditions are met because,

        1. If it goes to LargeAllocation, this memory region is never reused until GC sweeps it.
        2. Butterflies are owned by owner JSObjects, so we know the lifetime of Butterflies.

        This patch attempts to use "realloc" onto butterflies if,

        1. Butterflies are allocated in LargeAllocation kind
        2. Concurrent collector is not active
        3. Butterflies do not have property storage

        The condition (2) is required to avoid deallocating butterflies while the concurrent collector looks into it. The condition (3) is
        also required to avoid deallocating butterflies while the concurrent compiler looks into it.

        We also change LargeAllocation mechanism to using "malloc" and "free" instead of "posix_memalign". This allows us to use "realloc"
        safely in all the platforms. Since LargeAllocation uses alignment to distinguish LargeAllocation and MarkedBlock, we manually adjust
        16B alignment by allocating 8B more memory in "malloc".

        Speedometer2 and JetStream2 are neutral. RAMification shows about 1% progression (even in some of JIT tests).

        * heap/AlignedMemoryAllocator.h:
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::tryAllocateSlow):
        (JSC::CompleteSubspace::reallocateLargeAllocationNonVirtual):
        * heap/CompleteSubspace.h:
        * heap/FastMallocAlignedMemoryAllocator.cpp:
        (JSC::FastMallocAlignedMemoryAllocator::tryAllocateMemory):
        (JSC::FastMallocAlignedMemoryAllocator::freeMemory):
        (JSC::FastMallocAlignedMemoryAllocator::tryReallocateMemory):
        * heap/FastMallocAlignedMemoryAllocator.h:
        * heap/GigacageAlignedMemoryAllocator.cpp:
        (JSC::GigacageAlignedMemoryAllocator::tryAllocateMemory):
        (JSC::GigacageAlignedMemoryAllocator::freeMemory):
        (JSC::GigacageAlignedMemoryAllocator::tryReallocateMemory):
        * heap/GigacageAlignedMemoryAllocator.h:
        * heap/IsoAlignedMemoryAllocator.cpp:
        (JSC::IsoAlignedMemoryAllocator::tryAllocateMemory):
        (JSC::IsoAlignedMemoryAllocator::freeMemory):
        (JSC::IsoAlignedMemoryAllocator::tryReallocateMemory):
        * heap/IsoAlignedMemoryAllocator.h:
        * heap/LargeAllocation.cpp:
        (JSC::isAlignedForLargeAllocation):
        (JSC::LargeAllocation::tryCreate):
        (JSC::LargeAllocation::tryReallocate):
        (JSC::LargeAllocation::LargeAllocation):
        (JSC::LargeAllocation::destroy):
        * heap/LargeAllocation.h:
        (JSC::LargeAllocation::indexInSpace):
        (JSC::LargeAllocation::setIndexInSpace):
        (JSC::LargeAllocation::basePointer const):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::sweepLargeAllocations):
        (JSC::MarkedSpace::prepareForConservativeScan):
        * heap/WeakSet.h:
        (JSC::WeakSet::isTriviallyDestructible const):
        * runtime/Butterfly.h:
        * runtime/ButterflyInlines.h:
        (JSC::Butterfly::reallocArrayRightIfPossible):
        * runtime/JSObject.cpp:
        (JSC::JSObject::ensureLengthSlow):

2019-03-31  Sam Weinig  <weinig@apple.com>

        Remove more i386 specific configurations
        https://bugs.webkit.org/show_bug.cgi?id=196430

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:
        ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.

        * Configurations/ToolExecutable.xcconfig:
        ARC can be enabled unconditionally now.

2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSWrapperMap should not use Objective-C Weak map (NSMapTable with NSPointerFunctionsWeakMemory) for m_cachedObjCWrappers
        https://bugs.webkit.org/show_bug.cgi?id=196392

        Reviewed by Saam Barati.

        Weak representation in Objective-C is surprisingly costly in terms of memory. We can see that very easy program shows 10KB memory consumption due to
        this weak wrapper map in JavaScriptCore.framework. But we do not need this weak map since Objective-C JSValue has a dealloc. We can unregister itself
        from the map when it is deallocated without using Objective-C weak mechanism. And since Objective-C JSValue is tightly coupled to a specific JSContext,
        and wrapper map is created per JSContext, JSValue wrapper and actual JavaScriptCore value is one-on-one, and [JSValue dealloc] knows which JSContext's
        wrapper map holds itself.

        1. We do not use Objective-C weak mechanism. We use WTF::HashSet instead. When JSValue is allocated, we register it to JSWrapperMap's HashSet. And unregister
           JSValue from this map when JSValue is deallocated.
        2. We use HashSet<JSValue> (logically) instead of HashMap<JSValueRef, JSValue> to keep JSValueRef and JSValue relationship. We can achieve it because JSValue
           holds JSValueRef inside it.

        * API/JSContext.mm:
        (-[JSContext removeWrapper:]):
        * API/JSContextInternal.h:
        * API/JSValue.mm:
        (-[JSValue dealloc]):
        (-[JSValue initWithValue:inContext:]):
        * API/JSWrapperMap.h:
        * API/JSWrapperMap.mm:
        (WrapperKey::hashTableDeletedValue):
        (WrapperKey::WrapperKey):
        (WrapperKey::isHashTableDeletedValue const):
        (WrapperKey::Hash::hash):
        (WrapperKey::Hash::equal):
        (WrapperKey::Traits::isEmptyValue):
        (WrapperKey::Translator::hash):
        (WrapperKey::Translator::equal):
        (WrapperKey::Translator::translate):
        (-[JSWrapperMap initWithGlobalContextRef:]):
        (-[JSWrapperMap dealloc]):
        (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
        (-[JSWrapperMap removeWrapper:]):
        * API/tests/testapi.mm:
        (testObjectiveCAPIMain):

2019-03-29  Robin Morisset  <rmorisset@apple.com>

        B3ReduceStrength should know that Mul distributes over Add and Sub
        https://bugs.webkit.org/show_bug.cgi?id=196325

        Reviewed by Michael Saboff.

        In this patch I add the following patterns to B3ReduceStrength:
        - Turn this: Integer Neg(Mul(value, c))
          Into this: Mul(value, -c), as long as -c does not overflow
        - Turn these: Integer Mul(value, Neg(otherValue)) and Integer Mul(Neg(value), otherValue)
          Into this: Neg(Mul(value, otherValue))
        - For Op==Add or Sub, turn any of these:
             Op(Mul(x1, x2), Mul(x1, x3))
             Op(Mul(x2, x1), Mul(x1, x3))
             Op(Mul(x1, x2), Mul(x3, x1))
             Op(Mul(x2, x1), Mul(x3, x1))
          Into this: Mul(x1, Op(x2, x3))

        Also includes a trivial change: a similar reduction for the distributivity of BitAnd over BitOr/BitXor now
        emits the arguments to BitAnd in the other order, to minimize the probability that we'll spend a full fixpoint step just to flip them.

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testAddMulMulArgs):
        (JSC::B3::testMulArgNegArg):
        (JSC::B3::testMulNegArgArg):
        (JSC::B3::testNegMulArgImm):
        (JSC::B3::testSubMulMulArgs):
        (JSC::B3::run):

2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove distancing for LargeAllocation
        https://bugs.webkit.org/show_bug.cgi?id=196335

        Reviewed by Saam Barati.

        In r230226, we removed distancing feature from our GC. This patch removes remaining distancing thing in LargeAllocation.

        * heap/HeapCell.h:
        * heap/LargeAllocation.cpp:
        (JSC::LargeAllocation::tryCreate):
        * heap/MarkedBlock.h:

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        * inspector/protocol/Canvas.json:
        * inspector/scripts/codegen/generator.py:

2019-03-29  Tadeu Zagallo  <tzagallo@apple.com>

        Assertion failed in JSC::createError
        https://bugs.webkit.org/show_bug.cgi?id=196305
        <rdar://problem/49387382>

        Reviewed by Saam Barati.

        JSC::createError assumes that `errorDescriptionForValue` will either
        throw an exception or return a valid description string. However, that
        is not true if the value is a rope string and we successfully resolve it,
        but later fail to wrap the string in quotes with `tryMakeString`.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):

2019-03-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=196382
        <rdar://problem/49403417>

        Reviewed by Joseph Pecoraro.

        Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
        `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
        developer extras are enabled.

        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::startTiming):
        (Inspector::InspectorConsoleAgent::stopTiming):
        (Inspector::InspectorConsoleAgent::count):
        (Inspector::InspectorConsoleAgent::addConsoleMessage):

2019-03-29  Cathie Chen  <cathiechen@igalia.com>

        Implement ResizeObserver.
        https://bugs.webkit.org/show_bug.cgi?id=157743

        Reviewed by Simon Fraser.

        Add ENABLE_RESIZE_OBSERVER.

        * Configurations/FeatureDefines.xcconfig:

2019-03-28  Michael Saboff  <msaboff@apple.com>

        [YARR] Precompute BMP / non-BMP status when constructing character classes
        https://bugs.webkit.org/show_bug.cgi?id=196296

        Reviewed by Keith Miller.

        Changed CharacterClass::m_hasNonBMPCharacters into a character width bit field which
        indicateis if the class includes characters from either BMP, non-BMP or both ranges.
        This allows the recognizing code to eliminate checks for the width of a matched
        characters when the class has only one width.  The character width is needed to
        determine if we advance 1 or 2 character.  Also, the pre-computed width of character
        classes that contains either all BMP or all non-BMP characters allows the parser to
        use fixed widths for terms using those character classes.  Changed both the code gen
        scripts and Yarr compiler to compute this bit field during the construction of
        character classes.

        For JIT'ed code of character classes that contain either all BMP or all non-BMP
        characters, we can eliminate the generic check we were doing do compute how much
        to advance after sucessfully matching a character in the class.

                Generic isBMP check      BMP only            non-BMP only
                --------------           --------------      --------------
                inc %r9d                 inc %r9d            add $0x2, %r9d
                cmp $0x10000, %eax
                jl isBMP
                cmp %edx, %esi
                jz atEndOfString
                inc %r9d
                inc %esi
         isBMP:

        For character classes that contained non-BMP characters, we were always generating
        the code in the left column.  The middle column is the code we generate for character
        classes that contain only BMP characters.  The right column is the code we now
        generate if the character class has only non-BMP characters.  In the fix width cases,
        we can eliminate both the isBMP check as well as the atEndOfString check.  The
        atEndOfstring check is eliminated since we know how many characters this character
        class requires and that check can be factored out to the beginning of the current
        alternative.  For character classes that contain both BMP and non-BMP characters,
        we still generate the generic left column.

        This change is a ~8% perf progression on UniPoker and a ~2% improvement on RexBench
        as a whole.

        * runtime/RegExp.cpp:
        (JSC::RegExp::matchCompareWithInterpreter):
        * runtime/RegExpInlines.h:
        (JSC::RegExp::matchInline):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::checkCharacterClassDontAdvanceInputForNonBMP):
        (JSC::Yarr::Interpreter::matchCharacterClass):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::optimizeAlternative):
        (JSC::Yarr::YarrGenerator::matchCharacterClass):
        (JSC::Yarr::YarrGenerator::advanceIndexAfterCharacterClassTermMatch):
        (JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
        (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::generateEnter):
        (JSC::Yarr::YarrGenerator::YarrGenerator):
        (JSC::Yarr::YarrGenerator::compile):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
        (JSC::Yarr::CharacterClassConstructor::reset):
        (JSC::Yarr::CharacterClassConstructor::charClass):
        (JSC::Yarr::CharacterClassConstructor::addSorted):
        (JSC::Yarr::CharacterClassConstructor::addSortedRange):
        (JSC::Yarr::CharacterClassConstructor::hasNonBMPCharacters):
        (JSC::Yarr::CharacterClassConstructor::characterWidths):
        (JSC::Yarr::PatternTerm::dump):
        (JSC::Yarr::anycharCreate):
        * yarr/YarrPattern.h:
        (JSC::Yarr::operator|):
        (JSC::Yarr::operator&):
        (JSC::Yarr::operator|=):
        (JSC::Yarr::CharacterClass::CharacterClass):
        (JSC::Yarr::CharacterClass::hasNonBMPCharacters):
        (JSC::Yarr::CharacterClass::hasOneCharacterSize):
        (JSC::Yarr::CharacterClass::hasOnlyNonBMPCharacters):
        (JSC::Yarr::PatternTerm::invert const):
        (JSC::Yarr::PatternTerm::invert): Deleted.
        * yarr/create_regex_tables:
        * yarr/generateYarrUnicodePropertyTables.py:

2019-03-28  Saam Barati  <sbarati@apple.com>

        BackwardsGraph needs to consider back edges as the backward's root successor
        https://bugs.webkit.org/show_bug.cgi?id=195991

        Reviewed by Filip Pizlo.

        * b3/testb3.cpp:
        (JSC::B3::testInfiniteLoopDoesntCauseBadHoisting):
        (JSC::B3::run):

2019-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        Opcode.h(159,27): warning: adding 'unsigned int' to a string does not append to the string [-Wstring-plus-int]
        https://bugs.webkit.org/show_bug.cgi?id=196343

        Reviewed by Saam Barati.

        Clang reports a compilation warning and recommend '&PADDING_STRING[PADDING_STRING_LENGTH]'
        instead of 'PADDING_STRING + PADDING_STRING_LENGTH'.

        * bytecode/Opcode.cpp:
        (JSC::padOpcodeName): Moved padOpcodeName from Opcode.h because
        this function is used only in Opcode.cpp. Changed macros
        PADDING_STRING and PADDING_STRING_LENGTH to simple variables.
        (JSC::compareOpcodePairIndices): Replaced pair with std::pair.
        * bytecode/Opcode.h:
        (JSC::padOpcodeName): Moved.

2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>

        CodeBlock::jettison() should disallow repatching its own calls
        https://bugs.webkit.org/show_bug.cgi?id=196359
        <rdar://problem/48973663>

        Reviewed by Saam Barati.

        CodeBlock::jettison() calls CommonData::invalidate, which replaces the `hlt`
        instruction with the jump to OSR exit. However, if the `hlt` was immediately
        followed by a call to the CodeBlock being jettisoned, we would write over the
        OSR exit address while unlinking all the incoming CallLinkInfos later in
        CodeBlock::jettison().

        Change it so that we set a flag, `clearedByJettison`, in all the CallLinkInfos
        owned by the CodeBlock being jettisoned. If the flag is set, we will avoid
        repatching the call during unlinking. This is safe because this call will never
        be reachable again after the CodeBlock is jettisoned.

        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::setCallee):
        (JSC::CallLinkInfo::clearCallee):
        (JSC::CallLinkInfo::setCodeBlock):
        (JSC::CallLinkInfo::clearCodeBlock):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::clearedByJettison):
        (JSC::CallLinkInfo::setClearedByJettison):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::jettison):
        * jit/Repatch.cpp:
        (JSC::revertCall):

2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Drop VM and Context cache map in JavaScriptCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=196341

        Reviewed by Saam Barati.

        Previously, we created Objective-C weak map to maintain JSVirtualMachine and JSContext wrappers corresponding to VM and JSGlobalObject.
        But Objective-C weak map is really memory costly. Even if the entry is only one, it consumes 2.5KB per weak map. Since we can modify
        JSC intrusively for JavaScriptCore.framework (and we already did it, like, holding JSWrapperMap in JSGlobalObject), we can just hold
        a pointer to a wrapper in VM and JSGlobalObject.

        This patch adds void* members to VM and JSGlobalObject, which holds a non-strong reference to a wrapper. When a wrapper is gone, we
        clear this pointer too. This removes unnecessary two Objective-C weak maps, and save 5KB.

        * API/JSContext.mm:
        (-[JSContext initWithVirtualMachine:]):
        (-[JSContext dealloc]):
        (-[JSContext initWithGlobalContextRef:]):
        (-[JSContext wrapperMap]):
        (+[JSContext contextWithJSGlobalContextRef:]):
        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine initWithContextGroupRef:]):
        (-[JSVirtualMachine dealloc]):
        (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
        (scanExternalObjectGraph):
        (scanExternalRememberedSet):
        (initWrapperCache): Deleted.
        (wrapperCache): Deleted.
        (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): Deleted.
        (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): Deleted.
        (-[JSVirtualMachine contextForGlobalContextRef:]): Deleted.
        (-[JSVirtualMachine addContext:forGlobalContextRef:]): Deleted.
        * API/JSVirtualMachineInternal.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::setAPIWrapper):
        (JSC::JSGlobalObject::apiWrapper const):
        * runtime/VM.h:

2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>

        In-memory code cache should not share bytecode across domains
        https://bugs.webkit.org/show_bug.cgi?id=196321

        Reviewed by Geoffrey Garen.

        Use the SourceProvider's URL to make sure that the hosts match for the
        two SourceCodeKeys in operator==.

        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::host const):
        (JSC::SourceCodeKey::operator== const):

2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Silence lot of warnings when compiling with clang
        https://bugs.webkit.org/show_bug.cgi?id=196310

        Reviewed by Michael Catanzaro.

        Initialize variable with default constructor.

        * API/glib/JSCOptions.cpp:
        (jsc_options_foreach):

2019-03-27  Saam Barati  <sbarati@apple.com>

        validateOSREntryValue with Int52 should box the value being checked into double format
        https://bugs.webkit.org/show_bug.cgi?id=196313
        <rdar://problem/49306703>

        Reviewed by Yusuke Suzuki.

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

2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Owner of watchpoints should validate at GC finalizing phase
        https://bugs.webkit.org/show_bug.cgi?id=195827

        Reviewed by Filip Pizlo.

        This patch fixes JSC's watchpoint liveness issue by the following two policies.

        1. Watchpoint should have owner cell, and "fire" operation should be gaurded with owner cell's isLive check.

        Watchpoints should hold its owner cell, and fire procedure should be guarded by `owner->isLive()`.
        When the owner cell is destroyed, these watchpoints are destroyed too. But this destruction can
        be delayed due to incremental sweeper. So the following condition can happen.

        When we have a watchpoint like the following.

            class XXXWatchpoint {
                ObjectPropertyCondition m_key;
                JSCell* m_owner;
            };

        Both m_key's cell and m_owner is now unreachable from the root. So eventually, m_owner cell's destructor
        is called and this watchpoint will be destroyed. But before that, m_key's cell can be destroyed. And this
        watchpoint's fire procedure can be called since m_owner's destructor is not called yet. In this situation,
        we encounter the destroyed cell held in m_key. This problem can be avoided if we guard fire procedure with
        `m_owner->isLive()`. Until the owner cell is destroyed, this guard avoids "fire" procedure execution. And
        once the destructor of m_owner is called, this watchpoint will be destroyed too.

        2. Watchpoint liveness should be maintained by owner cell's unconditional finalizer

        Watchpoints often hold weak references to the other cell (like, m_key in the above example). If we do not
        delete watchpoints with dead cells when these weak cells become dead, these watchpoints continue holding dead cells,
        and watchpoint's fire operation can use these dead cells accidentally. isLive / isStillLive check for these weak cells
        in fire operation is not useful. Because these dead cells can be reused to the other live cells eventually, and this
        isLive / isStillLive checks fail to see these cells are live if they are reused. Appropriate way is deleting watchpoints
        with dead cells when finalizing GC. In this patch, we do this in unconditional finalizers in owner cells of watchpoints.
        We already did this in CodeBlock etc. We add the same thing to StructureRareData which owns watchpoints for toString operations.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint::StructureWatchpoint): Deleted.
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint::PropertyWatchpoint): Deleted.
        * bytecode/CodeBlockJettisoningWatchpoint.h:
        (JSC::CodeBlockJettisoningWatchpoint::CodeBlockJettisoningWatchpoint): Deleted.
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const): Deleted.
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureStubClearingWatchpoint::fireInternal):
        (JSC::WatchpointsOnStructureStubInfo::isValid const):
        * bytecode/StructureStubClearingWatchpoint.h:
        (JSC::StructureStubClearingWatchpoint::StructureStubClearingWatchpoint): Deleted.
        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
        (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::isValid const):
        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
        (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
        * dfg/DFGAdaptiveStructureWatchpoint.h:
        (JSC::DFG::AdaptiveStructureWatchpoint::key const): Deleted.
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):
        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::notifyIncommingReferencesOfTransfer):
        * runtime/ArrayBufferNeuteringWatchpointSet.cpp: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.cpp.
        (JSC::ArrayBufferNeuteringWatchpointSet::ArrayBufferNeuteringWatchpointSet):
        (JSC::ArrayBufferNeuteringWatchpointSet::destroy):
        (JSC::ArrayBufferNeuteringWatchpointSet::create):
        (JSC::ArrayBufferNeuteringWatchpointSet::createStructure):
        (JSC::ArrayBufferNeuteringWatchpointSet::fireAll):
        * runtime/ArrayBufferNeuteringWatchpointSet.h: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.h.
        * runtime/FunctionRareData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
        * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
        (JSC::ObjectPropertyChangeAdaptiveWatchpoint::ObjectPropertyChangeAdaptiveWatchpoint): Deleted.
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::finalizeUnconditionally):
        * runtime/StructureRareData.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2019-03-26  Saam Barati  <sbarati@apple.com>

        FTL: Emit code to validate AI's state when running the compiled code
        https://bugs.webkit.org/show_bug.cgi?id=195924
        <rdar://problem/49003422>

        Reviewed by Filip Pizlo.

        This patch adds code that between the execution of each node that validates
        the types that AI proves. This option is too expensive to turn on for our
        regression testing, but we think it will be valuable in other types of running
        modes, such as when running with a fuzzer.
        
        This patch also adds options to only probabilistically run this validation
        after the execution of each node. As the probability is lowered, there is
        less of a perf hit.
        
        This patch just adds this validation in the FTL. A follow-up patch will land
        it in the DFG too: https://bugs.webkit.org/show_bug.cgi?id=196219

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
        (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::lowJSValue):
        * runtime/Options.h:

2019-03-26  Tadeu Zagallo  <tzagallo@apple.com>

        WebAssembly: Fix f32.min, f64.min and f64.max operations on NaN
        https://bugs.webkit.org/show_bug.cgi?id=196217

        Reviewed by Saam Barati.

        Generalize the fix for f32.max to properly handle NaN by doing an extra GreatherThan
        comparison in r243446 to all min and max float operations.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
        (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
        * wasm/wasm.json:

2019-03-26  Andy VanWagoner  <andy@vanwagoner.family>

        Intl.DateTimeFormat should obey 2-digit hour
        https://bugs.webkit.org/show_bug.cgi?id=195974

        Reviewed by Keith Miller.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):

2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>

        Heap::isMarked and friends should be instance methods
        https://bugs.webkit.org/show_bug.cgi?id=179988

        Reviewed by Saam Barati.

        Almost all the callers of Heap::isMarked have VM& reference. We should make Heap::isMarked instance function instead of static function
        so that we do not need to look up Heap from the cell.

        * API/JSAPIWrapperObject.mm:
        (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
        * API/JSMarkingConstraintPrivate.cpp:
        (JSC::isMarked):
        * API/glib/JSAPIWrapperObjectGLib.cpp:
        (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::finalizeUnconditionally):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::visitWeak const):
        (JSC::AccessCase::propagateTransitions const):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::visitWeak):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::finalize):
        * bytecode/CallLinkStatus.h:
        * bytecode/CallVariant.cpp:
        (JSC::CallVariant::finalize):
        * bytecode/CallVariant.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shouldJettisonDueToWeakReference):
        (JSC::CodeBlock::shouldJettisonDueToOldAge):
        (JSC::shouldMarkTransition):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::determineLiveness):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::jettison):
        * bytecode/CodeBlock.h:
        * bytecode/ExecutableToCodeBlockEdge.cpp:
        (JSC::ExecutableToCodeBlockEdge::visitChildren):
        (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally):
        (JSC::ExecutableToCodeBlockEdge::runConstraint):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::finalize):
        * bytecode/GetByIdStatus.h:
        * bytecode/GetByIdVariant.cpp:
        (JSC::GetByIdVariant::finalize):
        * bytecode/GetByIdVariant.h:
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::finalize):
        * bytecode/InByIdStatus.h:
        * bytecode/InByIdVariant.cpp:
        (JSC::InByIdVariant::finalize):
        * bytecode/InByIdVariant.h:
        * bytecode/ObjectPropertyCondition.cpp:
        (JSC::ObjectPropertyCondition::isStillLive const):
        * bytecode/ObjectPropertyCondition.h:
        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::ObjectPropertyConditionSet::areStillLive const):
        * bytecode/ObjectPropertyConditionSet.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::visitWeak const):
        * bytecode/PropertyCondition.cpp:
        (JSC::PropertyCondition::isStillLive const):
        * bytecode/PropertyCondition.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::finalize):
        * bytecode/PutByIdStatus.h:
        * bytecode/PutByIdVariant.cpp:
        (JSC::PutByIdVariant::finalize):
        * bytecode/PutByIdVariant.h:
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::finalizeWithoutDeleting):
        (JSC::RecordedStatuses::finalize):
        * bytecode/RecordedStatuses.h:
        * bytecode/StructureSet.cpp:
        (JSC::StructureSet::isStillAlive const):
        * bytecode/StructureSet.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitWeakReferences):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::finalizeInGC):
        (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
        * heap/GCIncomingRefCounted.h:
        * heap/GCIncomingRefCountedInlines.h:
        (JSC::GCIncomingRefCounted<T>::filterIncomingReferences):
        * heap/GCIncomingRefCountedSet.h:
        * heap/GCIncomingRefCountedSetInlines.h:
        (JSC::GCIncomingRefCountedSet<T>::lastChanceToFinalize):
        (JSC::GCIncomingRefCountedSet<T>::sweep):
        (JSC::GCIncomingRefCountedSet<T>::removeAll): Deleted.
        (JSC::GCIncomingRefCountedSet<T>::removeDead): Deleted.
        * heap/Heap.cpp:
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::sweepArrayBuffers):
        (JSC::Heap::addCoreConstraints):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::isMarked):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::appendNode):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::visitChildren):
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallStubRoutine::visitWeak):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::finalizeUnconditionally):
        * runtime/InferredValueInlines.h:
        (JSC::InferredValue::finalizeUnconditionally):
        * runtime/StackFrame.h:
        (JSC::StackFrame::isMarked const):
        * runtime/Structure.cpp:
        (JSC::Structure::isCheapDuringGC):
        (JSC::Structure::markIfCheap):
        * runtime/Structure.h:
        * runtime/TypeProfiler.cpp:
        (JSC::TypeProfiler::invalidateTypeSetCache):
        * runtime/TypeProfiler.h:
        * runtime/TypeSet.cpp:
        (JSC::TypeSet::invalidateCache):
        * runtime/TypeSet.h:
        * runtime/WeakMapImpl.cpp:
        (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints):
        * runtime/WeakMapImplInlines.h:
        (JSC::WeakMapImpl<WeakMapBucket>::finalizeUnconditionally):

2019-03-25  Keith Miller  <keith_miller@apple.com>

        ASSERTION FAILED: m_op == CompareStrictEq in JSC::DFG::Node::convertToCompareEqPtr(JSC::DFG::FrozenValue *, JSC::DFG::Edge)
        https://bugs.webkit.org/show_bug.cgi?id=196176

        Reviewed by Saam Barati.

        convertToCompareEqPtr should allow for either CompareStrictEq or
        the SameValue DFG node. This fixes the old assertion that only
        allowed CompareStrictEq.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToCompareEqPtr):

2019-03-25  Tadeu Zagallo  <tzagallo@apple.com>

        WebAssembly: f32.max with NaN generates incorrect result
        https://bugs.webkit.org/show_bug.cgi?id=175691
        <rdar://problem/33952228>

        Reviewed by Saam Barati.

        Fix the B3 and Air compilation for f32.max. In order to handle the NaN
        case, we need an extra GreaterThan comparison on top of the existing
        Equal and LessThan ones.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
        * wasm/wasm.json:

2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative fix for CLoop build on CPU(UNKNOWN)
        https://bugs.webkit.org/show_bug.cgi?id=195982

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::initializeUnderlyingAllocator):

2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove NavigatorContentUtils in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=196070

        Reviewed by Alex Christensen.

        NavigatorContentUtils was to support the custom scheme spec [1].
        However, in WebKit side, no port has supported the feature in
        WebKit layer after EFL port was removed. So there has been the
        only IDL implementation of the NavigatorContentUtils in WebCore.
        So we don't need to keep the implementation in WebCore anymore.

        [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers

        * Configurations/FeatureDefines.xcconfig:

2019-03-23  Mark Lam  <mark.lam@apple.com>

        Rolling out r243032 and r243071 because the fix is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=195892
        <rdar://problem/48981239>

        Not reviewed.

        The fix is incorrect: it relies on being able to determine liveness of an object
        in an ObjectPropertyCondition based on the state of the object's MarkedBit.
        However, there's no guarantee that GC has run and that the MarkedBit is already
        set even if the object is live.  As a result, we may not re-install adaptive
        watchpoints based on presumed dead objects which are actually live.

        I'm rolling this out, and will implement a more comprehensive fix to handle
        watchpoint liveness later.

        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        * bytecode/ObjectPropertyCondition.cpp:
        (JSC::ObjectPropertyCondition::dumpInContext const):
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureStubClearingWatchpoint::fireInternal):
        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
        (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
        * runtime/StructureRareData.cpp:
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):

2019-03-23  Keith Miller  <keith_miller@apple.com>

        Refactor clz/ctz and fix getLSBSet.
        https://bugs.webkit.org/show_bug.cgi?id=196162

        Reviewed by Saam Barati.

        Refactor references of clz32/64 and ctz32 to use clz and ctz,
        respectively.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGOperations.cpp:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::digitDiv):
        (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
        (JSC::JSBigInt::calculateMaximumCharactersRequired):
        (JSC::JSBigInt::toStringBasePowerOfTwo):
        (JSC::JSBigInt::compareToDouble):
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncClz32):

2019-03-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(RegExp)
        https://bugs.webkit.org/show_bug.cgi?id=196133

        Reviewed by Mark Lam.

        Some applications have many RegExp cells. But RegExp cells are very large (144B).
        This patch reduces the size from 144B to 48B by,

        1. Allocate Yarr::YarrCodeBlock in non-GC heap. We can avoid this allocation if JIT is disabled.
        2. m_captureGroupNames and m_namedGroupToParenIndex are moved to RareData. They are only used when RegExp has named capture groups.

        * runtime/RegExp.cpp:
        (JSC::RegExp::finishCreation):
        (JSC::RegExp::estimatedSize):
        (JSC::RegExp::compile):
        (JSC::RegExp::matchConcurrently):
        (JSC::RegExp::compileMatchOnly):
        (JSC::RegExp::deleteCode):
        (JSC::RegExp::printTraceData):
        * runtime/RegExp.h:
        * runtime/RegExpInlines.h:
        (JSC::RegExp::hasCodeFor):
        (JSC::RegExp::matchInline):
        (JSC::RegExp::hasMatchOnlyCodeFor):

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
        .xcconfig files with regards to LTO settings. However, don't actually
        enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
        due to <rdar://problem/24543547>.

        * Configurations/Base.xcconfig:

2019-03-22  Mark Lam  <mark.lam@apple.com>

        Placate exception check validation in genericTypedArrayViewProtoFuncLastIndexOf().
        https://bugs.webkit.org/show_bug.cgi?id=196154
        <rdar://problem/49145307>

        Reviewed by Filip Pizlo.

        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):

2019-03-22  Mark Lam  <mark.lam@apple.com>

        Placate exception check validation in constructJSWebAssemblyLinkError().
        https://bugs.webkit.org/show_bug.cgi?id=196152
        <rdar://problem/49145257>

        Reviewed by Michael Saboff.

        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyLinkError):

2019-03-22  Timothy Hatcher  <timothy@apple.com>

        Change macosx() to macos() in WK_API... and JSC_API... macros.
        https://bugs.webkit.org/show_bug.cgi?id=196106

        Reviewed by Brian Burg.

        * API/JSBasePrivate.h:
        * API/JSContext.h:
        * API/JSContextPrivate.h:
        * API/JSContextRef.h:
        * API/JSContextRefInternal.h:
        * API/JSContextRefPrivate.h:
        * API/JSManagedValue.h:
        * API/JSObjectRef.h:
        * API/JSObjectRefPrivate.h:
        * API/JSRemoteInspector.h:
        * API/JSScript.h:
        * API/JSTypedArray.h:
        * API/JSValue.h:
        * API/JSValuePrivate.h:
        * API/JSValueRef.h:
        * API/JSVirtualMachinePrivate.h:

2019-03-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for Windows
        https://bugs.webkit.org/show_bug.cgi?id=196122

        * runtime/FunctionExecutable.cpp:

2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(FunctionExecutable) by 16bytes
        https://bugs.webkit.org/show_bug.cgi?id=196122

        Reviewed by Saam Barati.

        This patch reduces sizeof(FunctionExecutable) by 16 bytes.

        1. ScriptExecutable::m_numParametersForCall and ScriptExecutable::m_numParametersForConstruct are not used in a meaningful way. Removed them.
        2. ScriptExecutable::m_lastLine and ScriptExecutable::m_endColumn can be calculated from UnlinkedFunctionExecutable. So FunctionExecutable does not need to hold it.
           This patch adds GlobalExecutable, which are non-function ScriptExecutables, and move m_lastLine and m_endColumn to this class.
        3. FunctionExecutable still needs to have the feature overriding m_lastLine and m_endColumn. We move overridden data in FunctionExecutable::RareData.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        * runtime/EvalExecutable.h:
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::ensureRareDataSlow):
        (JSC::FunctionExecutable::overrideInfo):
        * runtime/FunctionExecutable.h:
        * runtime/GlobalExecutable.cpp: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
        * runtime/GlobalExecutable.h: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
        (JSC::GlobalExecutable::lastLine const):
        (JSC::GlobalExecutable::endColumn const):
        (JSC::GlobalExecutable::recordParse):
        (JSC::GlobalExecutable::GlobalExecutable):
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
        * runtime/ModuleProgramExecutable.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::ProgramExecutable):
        * runtime/ProgramExecutable.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::clearCode):
        (JSC::ScriptExecutable::installCode):
        (JSC::ScriptExecutable::hasClearableCode const):
        (JSC::ScriptExecutable::newCodeBlockFor):
        (JSC::ScriptExecutable::typeProfilingEndOffset const):
        (JSC::ScriptExecutable::recordParse):
        (JSC::ScriptExecutable::lastLine const):
        (JSC::ScriptExecutable::endColumn const):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::hasJITCodeForCall const):
        (JSC::ScriptExecutable::hasJITCodeForConstruct const):
        (JSC::ScriptExecutable::recordParse):
        (JSC::ScriptExecutable::lastLine const): Deleted.
        (JSC::ScriptExecutable::endColumn const): Deleted.
        * tools/FunctionOverrides.h:

2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(RegExpObject)
        https://bugs.webkit.org/show_bug.cgi?id=196130

        Reviewed by Saam Barati.

        sizeof(RegExpObject) is 48B due to one bool flag. We should compress this flag into lower bit of RegExp* field so that we can make RegExpObject 32B.
        It saves memory footprint 1.3% in RAMification's regexp.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewRegexp):
        (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
        (JSC::FTL::DFG::LowerDFGToB3::compileSetRegExpObjectLastIndex):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        (JSC::RegExpObject::visitChildren):
        (JSC::RegExpObject::getOwnPropertySlot):
        (JSC::RegExpObject::defineOwnProperty):
        * runtime/RegExpObject.h:

2019-03-21  Tomas Popela  <tpopela@redhat.com>

        [JSC] Fix build after r243232 on unsupported 64bit architectures
        https://bugs.webkit.org/show_bug.cgi?id=196072

        Reviewed by Keith Miller.

        As Keith suggested we already expect 16 free bits at the top of any
        pointer for JSValue even for the unsupported 64 bit arches.

        * bytecode/CodeOrigin.h:

2019-03-21  Mark Lam  <mark.lam@apple.com>

        Remove an invalid assertion in DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined().
        https://bugs.webkit.org/show_bug.cgi?id=196116
        <rdar://problem/48976951>

        Reviewed by Filip Pizlo.

        The DFG backend should not make assumptions about what optimizations the front end
        will or will not do.  The assertion asserts that the operand cannot be known to be
        a cell.  However, it is not guaranteed that the front end will fold away this case.
        Also, the DFG backend is perfectly capable of generating code to handle the case
        where the operand is a cell.

        The attached test case demonstrates a case where the operand can be a known cell.
        The test needs to be run with the concurrent JIT and GC, and is racy.  It used to
        trip up this assertion about once every 10 runs or so.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):

2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>

        JSC::createError should clear exception thrown by errorDescriptionForValue
        https://bugs.webkit.org/show_bug.cgi?id=196089

        Reviewed by Mark Lam.

        errorDescriptionForValue returns a nullString in case of failure, but it
        might also throw an OOM exception when resolving a rope string. We need
        to clear any potential exceptions thrown by errorDescriptionForValue
        before returning the OOM from JSC::createError.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):

2019-03-21  Robin Morisset  <rmorisset@apple.com>

        B3::Opcode can fit in a single byte, shrinking B3Value by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=196014

        Reviewed by Keith Miller.

        B3::Opcode has less than one hundred cases, so it can easily fit in one byte (from two currently)
        This shrinks B3::Kind from 4 bytes to 2 (by removing the byte of padding at the end).
        This in turns eliminate padding from B3::Value, shrinking it by 8 bytes (out of 80).

        * b3/B3Opcode.h:

2019-03-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, more clang 3.8 build fixes
        https://bugs.webkit.org/show_bug.cgi?id=195947
        <rdar://problem/49069219>

        In the spirit of making our code worse to please old compilers....

        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        (JSC::GetterSetterAccessCase::clone const):
        * bytecode/InstanceOfAccessCase.cpp:
        (JSC::InstanceOfAccessCase::clone const):
        * bytecode/IntrinsicGetterAccessCase.cpp:
        (JSC::IntrinsicGetterAccessCase::clone const):
        * bytecode/ModuleNamespaceAccessCase.cpp:
        (JSC::ModuleNamespaceAccessCase::clone const):
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::clone const):

2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not create JIT related data under non-JIT mode
        https://bugs.webkit.org/show_bug.cgi?id=195982

        Reviewed by Mark Lam.

        We avoid creations of JIT related data structures under non-JIT mode.
        This patch removes the following allocations.

        1. JITThunks
        2. FTLThunks
        3. FixedVMPoolExecutableAllocator
        4. noJITValueProfileSingleton since it is no longer used
        5. ARM disassembler should be initialized when it is used
        6. Wasm related data structures are accidentally allocated if VM::canUseJIT() == false &&
           Options::useWebAssembly() == true. Add Wasm::isSupported() function to check the both conditions.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::runEndPhase):
        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::~FixedVMPoolExecutableAllocator):
        (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
        (JSC::ExecutableAllocator::isValid const):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::isValidExecutableMemory):
        (JSC::ExecutableAllocator::getLock const):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::dumpProfile):
        (JSC::startOfFixedExecutableMemoryPoolImpl):
        (JSC::endOfFixedExecutableMemoryPoolImpl):
        (JSC::ExecutableAllocator::initialize):
        (JSC::ExecutableAllocator::initializeAllocator): Deleted.
        (JSC::ExecutableAllocator::ExecutableAllocator): Deleted.
        (JSC::ExecutableAllocator::~ExecutableAllocator): Deleted.
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocatorBase::isValid const):
        (JSC::ExecutableAllocatorBase::underMemoryPressure):
        (JSC::ExecutableAllocatorBase::memoryPressureMultiplier):
        (JSC::ExecutableAllocatorBase::dumpProfile):
        (JSC::ExecutableAllocatorBase::allocate):
        (JSC::ExecutableAllocatorBase::setJITEnabled):
        (JSC::ExecutableAllocatorBase::isValidExecutableMemory):
        (JSC::ExecutableAllocatorBase::committedByteCount):
        (JSC::ExecutableAllocatorBase::getLock const):
        (JSC::ExecutableAllocator::isValid const): Deleted.
        (JSC::ExecutableAllocator::underMemoryPressure): Deleted.
        (JSC::ExecutableAllocator::memoryPressureMultiplier): Deleted.
        (JSC::ExecutableAllocator::allocate): Deleted.
        (JSC::ExecutableAllocator::setJITEnabled): Deleted.
        (JSC::ExecutableAllocator::isValidExecutableMemory): Deleted.
        (JSC::ExecutableAllocator::committedByteCount): Deleted.
        (JSC::ExecutableAllocator::getLock const): Deleted.
        * jsc.cpp:
        (functionWebAssemblyMemoryMode):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/VM.cpp:
        (JSC::enableAssembler):
        (JSC::VM::canUseAssembler):
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/WasmCapabilities.h: Added.
        (JSC::Wasm::isSupported):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::enableFastMemory):

2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix JSC build with newer ICU
        https://bugs.webkit.org/show_bug.cgi?id=196098

        Reviewed by Keith Miller.

        IntlDateTimeFormat and IntlNumberFormat have switch statement over ICU's enums. However it lacks "default" clause so that
        the compile error occurs when a new enum value is added in ICU side. We should have "default" clause which just fallbacks
        "unknown"_s case. The behavior is not changed since we already have `return "unknown"_s;` statement anyway after the
        switch statement. This patch just suppresses a compile error.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::partTypeString):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::partTypeString):

2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>

        JSObject::putDirectIndexSlowOrBeyondVectorLength should check if indexIsSufficientlyBeyondLengthForSparseMap
        https://bugs.webkit.org/show_bug.cgi?id=196078
        <rdar://problem/35925380>

        Reviewed by Mark Lam.

        Unlike the other variations of putByIndex, it only checked if the index
        was larger than MIN_SPARSE_ARRAY_INDEX when the indexingType was
        ALL_BLANK_INDEXING_TYPES. This resulted in a huge butterfly being
        allocated for object literals (e.g. `{[9e4]: ...}`) and objects parsed
        from JSON.

        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):

2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>

        CachedUnlinkedSourceCodeShape::m_provider should be a CachedRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=196079

        Reviewed by Saam Barati.

        It was mistakenly cached as CachedPtr, which was leaking the decoded SourceProvider.

        * runtime/CachedTypes.cpp:
        (JSC::CachedUnlinkedSourceCodeShape::encode):

2019-03-21  Mark Lam  <mark.lam@apple.com>

        Placate exception check validation in operationArrayIndexOfString().
        https://bugs.webkit.org/show_bug.cgi?id=196067
        <rdar://problem/49056572>

        Reviewed by Michael Saboff.

        * dfg/DFGOperations.cpp:

2019-03-21  Xan Lopez  <xan@igalia.com>

        [JSC][x86] Drop support for x87 floating point
        https://bugs.webkit.org/show_bug.cgi?id=194853

        Reviewed by Don Olmstead.

        Require SSE2 throughout the codebase, and remove x87 support where
        it was optionally available. SSE2 detection happens at compile
        time through a static_assert.

        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::storeDouble):
        (JSC::MacroAssemblerX86::moveDoubleToInts):
        (JSC::MacroAssemblerX86::supportsFloatingPoint):
        (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
        * assembler/MacroAssemblerX86Common.cpp:
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::moveDouble):
        (JSC::MacroAssemblerX86Common::loadDouble):
        (JSC::MacroAssemblerX86Common::loadFloat):
        (JSC::MacroAssemblerX86Common::storeDouble):
        (JSC::MacroAssemblerX86Common::storeFloat):
        (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
        (JSC::MacroAssemblerX86Common::convertFloatToDouble):
        (JSC::MacroAssemblerX86Common::addDouble):
        (JSC::MacroAssemblerX86Common::addFloat):
        (JSC::MacroAssemblerX86Common::divDouble):
        (JSC::MacroAssemblerX86Common::divFloat):
        (JSC::MacroAssemblerX86Common::subDouble):
        (JSC::MacroAssemblerX86Common::subFloat):
        (JSC::MacroAssemblerX86Common::mulDouble):
        (JSC::MacroAssemblerX86Common::mulFloat):
        (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
        (JSC::MacroAssemblerX86Common::convertInt32ToFloat):
        (JSC::MacroAssemblerX86Common::branchDouble):
        (JSC::MacroAssemblerX86Common::branchFloat):
        (JSC::MacroAssemblerX86Common::compareDouble):
        (JSC::MacroAssemblerX86Common::compareFloat):
        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
        (JSC::MacroAssemblerX86Common::truncateFloatToInt32):
        (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
        (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
        (JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):
        (JSC::MacroAssemblerX86Common::lshiftPacked):
        (JSC::MacroAssemblerX86Common::rshiftPacked):
        (JSC::MacroAssemblerX86Common::orPacked):
        (JSC::MacroAssemblerX86Common::move32ToFloat):
        (JSC::MacroAssemblerX86Common::moveFloatTo32):
        (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
        (JSC::MacroAssemblerX86Common::moveConditionallyFloat):
        * offlineasm/x86.rb:
        * runtime/MathCommon.cpp:
        (JSC::operationMathPow):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=196073

        Reviewed by Michael Catanzaro.

        This is because GClosure always expects a first parameter as instance. In case of functions or constructors with
        no parameters we insert a fake instance which is just a null pointer that is ignored by the callback. But
        if the function/constructor has user data the callback will expect one parameter for the user data. In that case
        we can simply swap instance/user data so that the fake instance will be the second argument and user data the
        first one.

        * API/glib/JSCClass.cpp:
        (jscClassCreateConstructor): Use g_cclosure_new_swap() if parameters is empty and user data was provided.
        * API/glib/JSCValue.cpp:
        (jscValueFunctionCreate): Ditto.

2019-03-21  Pablo Saavedra  <psaavedra@igalia.com>

        [JSC][32-bit] Build failure after r243232
        https://bugs.webkit.org/show_bug.cgi?id=196068

        Reviewed by Mark Lam.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::reifyInlinedCallFrames):

2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a method does not work
        https://bugs.webkit.org/show_bug.cgi?id=195574

        Reviewed by Michael Catanzaro.

        Add more documentation to clarify the ownership of wrapped objects when created and when returned by functions.

        * API/glib/JSCCallbackFunction.cpp:
        (JSC::JSCCallbackFunction::construct): Also allow to return boxed types from a constructor.
        * API/glib/JSCClass.cpp:
        * API/glib/JSCValue.cpp:

2019-03-21  Mark Lam  <mark.lam@apple.com>

        Cap length of an array with spread to MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.
        https://bugs.webkit.org/show_bug.cgi?id=196055
        <rdar://problem/49067448>

        Reviewed by Yusuke Suzuki.

        We are doing this because:
        1. We expect the array to be densely packed.
        2. SpeculativeJIT::compileAllocateNewArrayWithSize() (and the FTL equivalent)
           expects the array length to be less than MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH
           if we don't want to use an ArrayStorage shape.
        3. There's no reason why an array with spread needs to be that large anyway.
           MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH is plenty.

        In this patch, we also add a debug assert in compileAllocateNewArrayWithSize() and
        emitAllocateButterfly() to check for overflows.

        * assembler/AbortReason.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCreateRest):
        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
        (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        * runtime/ArrayConventions.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2019-03-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use finalizer in JSGlobalLexicalEnvironment and JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=195992

        Reviewed by Keith Miller and Mark Lam.

        JSGlobalLexicalEnvironment and JSGlobalObject have their own CompleteSubspace to call destructors while they are not inheriting JSDestructibleObject.
        But it is too costly since (1) it requires CompleteSubspace in VM, (2) both objects allocate MarkedBlocks while # of them are really small.

        Instead of using CompleteSubspace, we just set finalizers for them. Since these objects are rarely allocated, setting finalizers does not show
        memory / performance problems (actually, previously we used finalizer for ArrayPrototype due to the same reason, and it does not show any problems).

        And we also add following two changes to JSSegmentedVariableObject.

        1. Remove one boolean used for debugging in Release build. It enlarges sizeof(JSSegmentedVariableObject) and allocates one more MarkedBlock.
        2. Use cellLock() instead.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::findVariableIndex):
        (JSC::JSSegmentedVariableObject::addVariables):
        (JSC::JSSegmentedVariableObject::visitChildren):
        (JSC::JSSegmentedVariableObject::~JSSegmentedVariableObject):
        (JSC::JSSegmentedVariableObject::finishCreation):
        * runtime/JSSegmentedVariableObject.h:
        (JSC::JSSegmentedVariableObject::subspaceFor): Deleted.
        * runtime/JSSegmentedVariableObjectHeapCellType.cpp: Removed.
        * runtime/JSSegmentedVariableObjectHeapCellType.h: Removed.
        * runtime/StringIteratorPrototype.cpp:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-03-20  Saam Barati  <sbarati@apple.com>

        DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
        https://bugs.webkit.org/show_bug.cgi?id=195721

        Reviewed by Filip Pizlo.

        There was a check in AbstractValue::validateOSREntry where it checked
        if isHeapTop(), and if so, just returned true. However, this is wrong
        if the value we're checking against is the empty value, since HeapTop
        does not include the Empty value. Instead, this check should be
        isBytecodeTop(), which does account for the empty value.
        
        This patch also does a couple of other things:
        - For our OSR entry AbstractValues, we were using HeapTop to mark
         a dead value. That is now changed to BytecodeTop. (The idea here
         is just to have validateOSREntry return early.)
        - It wasn't obvious to me how I could make this fail in JS code.
         The symptom we'd end up seeing is something like a nullptr derefernece
         from forgetting to do a TDZ check. Instead, I've added a unit test.
         This unit test lives in a new test file: testdfg. testdfg is similar
         to testb3/testair/testapi.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/SpeculatedType.h:
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::isBytecodeTop const):
        (JSC::DFG::AbstractValue::validateOSREntryValue const):
        * dfg/testdfg.cpp: Added.
        (hiddenTruthBecauseNoReturnIsStupid):
        (usage):
        (JSC::DFG::testEmptyValueDoesNotValidateWithHeapTop):
        (JSC::DFG::run):
        (run):
        (main):
        * shell/CMakeLists.txt:

2019-03-20  Saam Barati  <sbarati@apple.com>

        typeOfDoubleSum is wrong for when NaN can be produced
        https://bugs.webkit.org/show_bug.cgi?id=196030

        Reviewed by Filip Pizlo.

        We were using typeOfDoubleSum(SpeculatedType, SpeculatedType) for add/sub/mul.
        It assumed that the only way the resulting type could be NaN is if one of
        the inputs were NaN. However, this is wrong. NaN can be produced in at least
        these cases:
          Infinity - Infinity
          Infinity + (-Infinity)
          Infinity * 0

        * bytecode/SpeculatedType.cpp:
        (JSC::typeOfDoubleSumOrDifferenceOrProduct):
        (JSC::typeOfDoubleSum):
        (JSC::typeOfDoubleDifference):
        (JSC::typeOfDoubleProduct):

2019-03-20  Simon Fraser  <simon.fraser@apple.com>

        Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
        https://bugs.webkit.org/show_bug.cgi?id=196049

        Reviewed by Tim Horton.

        This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
        overflow scrolling in general, so rename it.

        * Configurations/FeatureDefines.xcconfig:

2019-03-20  Saam Barati  <sbarati@apple.com>

        GetCallee does not report the correct type in AI
        https://bugs.webkit.org/show_bug.cgi?id=195981

        Reviewed by Yusuke Suzuki.

        I found this as part of my work in:
        https://bugs.webkit.org/show_bug.cgi?id=195924
        
        I'm not sure how to write a test for it.
        
        GetCallee was always reporting that the result is SpecFunction. However,
        for eval, it may result in just a JSCallee object, which is not a JSFunction.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-03-20  Mark Lam  <mark.lam@apple.com>

        Open source arm64e code.
        https://bugs.webkit.org/show_bug.cgi?id=196012
        <rdar://problem/49066237>

        Reviewed by Keith Miller.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/ARM64EAssembler.h: Added.
        (JSC::ARM64EAssembler::encodeGroup1):
        (JSC::ARM64EAssembler::encodeGroup2):
        (JSC::ARM64EAssembler::encodeGroup4):
        (JSC::ARM64EAssembler::pacia1716):
        (JSC::ARM64EAssembler::pacib1716):
        (JSC::ARM64EAssembler::autia1716):
        (JSC::ARM64EAssembler::autib1716):
        (JSC::ARM64EAssembler::paciaz):
        (JSC::ARM64EAssembler::paciasp):
        (JSC::ARM64EAssembler::pacibz):
        (JSC::ARM64EAssembler::pacibsp):
        (JSC::ARM64EAssembler::autiaz):
        (JSC::ARM64EAssembler::autiasp):
        (JSC::ARM64EAssembler::autibz):
        (JSC::ARM64EAssembler::autibsp):
        (JSC::ARM64EAssembler::xpaclri):
        (JSC::ARM64EAssembler::pacia):
        (JSC::ARM64EAssembler::pacib):
        (JSC::ARM64EAssembler::pacda):
        (JSC::ARM64EAssembler::pacdb):
        (JSC::ARM64EAssembler::autia):
        (JSC::ARM64EAssembler::autib):
        (JSC::ARM64EAssembler::autda):
        (JSC::ARM64EAssembler::autdb):
        (JSC::ARM64EAssembler::paciza):
        (JSC::ARM64EAssembler::pacizb):
        (JSC::ARM64EAssembler::pacdza):
        (JSC::ARM64EAssembler::pacdzb):
        (JSC::ARM64EAssembler::autiza):
        (JSC::ARM64EAssembler::autizb):
        (JSC::ARM64EAssembler::autdza):
        (JSC::ARM64EAssembler::autdzb):
        (JSC::ARM64EAssembler::xpaci):
        (JSC::ARM64EAssembler::xpacd):
        (JSC::ARM64EAssembler::pacga):
        (JSC::ARM64EAssembler::braa):
        (JSC::ARM64EAssembler::brab):
        (JSC::ARM64EAssembler::blraa):
        (JSC::ARM64EAssembler::blrab):
        (JSC::ARM64EAssembler::braaz):
        (JSC::ARM64EAssembler::brabz):
        (JSC::ARM64EAssembler::blraaz):
        (JSC::ARM64EAssembler::blrabz):
        (JSC::ARM64EAssembler::retaa):
        (JSC::ARM64EAssembler::retab):
        (JSC::ARM64EAssembler::eretaa):
        (JSC::ARM64EAssembler::eretab):
        (JSC::ARM64EAssembler::linkPointer):
        (JSC::ARM64EAssembler::repatchPointer):
        (JSC::ARM64EAssembler::setPointer):
        (JSC::ARM64EAssembler::readPointer):
        (JSC::ARM64EAssembler::readCallTarget):
        (JSC::ARM64EAssembler::ret):
        * assembler/MacroAssembler.cpp:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM64.cpp:
        * assembler/MacroAssemblerARM64E.h: Added.
        (JSC::MacroAssemblerARM64E::tagReturnAddress):
        (JSC::MacroAssemblerARM64E::untagReturnAddress):
        (JSC::MacroAssemblerARM64E::tagPtr):
        (JSC::MacroAssemblerARM64E::untagPtr):
        (JSC::MacroAssemblerARM64E::removePtrTag):
        (JSC::MacroAssemblerARM64E::callTrustedPtr):
        (JSC::MacroAssemblerARM64E::call):
        (JSC::MacroAssemblerARM64E::callRegister):
        (JSC::MacroAssemblerARM64E::jump):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * 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/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::allocate):
        * jit/ThunkGenerators.cpp:
        (JSC::arityFixupGenerator):
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/ClassInfo.h:
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSCPtrTag.cpp: Added.
        (JSC::tagForPtr):
        (JSC::ptrTagName):
        (JSC::initializePtrTagLookup):
        * runtime/JSCPtrTag.h:
        (JSC::initializePtrTagLookup):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2019-03-20  Tadeu Zagallo  <tzagallo@apple.com>

        JSC::createError needs to check for OOM in errorDescriptionForValue
        https://bugs.webkit.org/show_bug.cgi?id=196032
        <rdar://problem/46842740>

        Reviewed by Mark Lam.

        We were missing exceptions checks at two levels:
        - In errorDescriptionForValue, when the value is a string, we should
          check that JSString::value returns a valid string, since we might run
          out of memory if it is a rope and we need to resolve it.
        - In createError, we should check for the result of errorDescriptionForValue
          before concatenating it with the message provided by the caller.

        * runtime/ExceptionHelpers.cpp:
        (JSC::errorDescriptionForValue):
        (JSC::createError):
        * runtime/ExceptionHelpers.h:

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: include window as part of any event listener chain
        https://bugs.webkit.org/show_bug.cgi?id=195730
        <rdar://problem/48916872>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/DOM.json:
        Modify `DOM.getEventListenersForNode` to not save the handler object, as that was never
        used by the frontend. Add an `onWindow` optional property to `DOM.EventListener` that is set
        when the event listener was retrieved from the `window` object.

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Runtime: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195972
        <rdar://problem/49039655>

        Reviewed by Timothy Hatcher.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

        * inspector/agents/InspectorRuntimeAgent.h:
        (Inspector::InspectorRuntimeAgent::enabled): Deleted.
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::didCreateFrontendAndBackend): Added.
        (Inspector::InspectorRuntimeAgent::willDestroyFrontendAndBackend):

        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
        * inspector/agents/JSGlobalObjectRuntimeAgent.cpp:
        (Inspector::JSGlobalObjectRuntimeAgent::didCreateFrontendAndBackend): Deleted.

2019-03-20  Michael Saboff  <msaboff@apple.com>

        JSC test crash: stress/dont-strength-reduce-regexp-with-compile-error.js.default
        https://bugs.webkit.org/show_bug.cgi?id=195906

        Reviewed by Mark Lam.

        The problem here as that we may successfully parsed a RegExp without running out of stack,
        but later run out of stack when trying to JIT compile the same expression.

        Added a check for available stack space when we call into one of the parenthesis compilation
        functions that recurse.  When we don't have enough stack space to recurse, we fail the JIT
        compilation and let the interpreter handle the expression.

        From code inspection of the YARR interpreter it has the same issue, but I couldn't cause a failure.
        Filed a new bug and added a FIXME comment for the Interpreter to have similar checks.
        Given that we can reproduce a failure, this is sufficient for now.

        This change is covered by the previously added failing test,
        JSTests/stress/dont-strength-reduce-regexp-with-compile-error.js.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::interpret):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
        (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
        (JSC::Yarr::YarrGenerator::opCompileBody):
        (JSC::Yarr::dumpCompileFailure):
        * yarr/YarrJIT.h:

2019-03-20  Robin Morisset  <rmorisset@apple.com>

        DFGNodeAllocator.h is dead code
        https://bugs.webkit.org/show_bug.cgi?id=196019

        Reviewed by Yusuke Suzuki.

        As explained by Yusuke on IRC, the comment on DFG::Node saying that it cannot have a destructor is obsolete since https://trac.webkit.org/changeset/216815/webkit.
        This patch removes both the comment and DFGNodeAllocator.h that that patch forgot to remove.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::dumpChildren):
        * dfg/DFGNodeAllocator.h: Removed.

2019-03-20  Robin Morisset  <rmorisset@apple.com>

        Compress CodeOrigin into a single word in the common case
        https://bugs.webkit.org/show_bug.cgi?id=195928

        Reviewed by Saam Barati.

        The trick is that pointers only take 48 bits on x86_64 in practice (and we can even use the bottom three bits of that thanks to alignment), and even less on ARM64.
        So we can shove the bytecode index in the top bits almost all the time.
        If the bytecodeIndex is too ginormous (1<<16 in practice on x86_64), we just set one bit at the bottom and store a pointer to some out-of-line storage instead.
        Finally we represent an invalid bytecodeIndex (which used to be represented by UINT_MAX) by setting the second least signifcant bit.

        The patch looks very long, but most of it is just replacing direct accesses to inlineCallFrame and bytecodeIndex by the relevant getters.

        End result: CodeOrigin in the common case moves from 16 bytes (8 for InlineCallFrame*, 4 for unsigned bytecodeIndex, 4 of padding) to 8.
        As a reference, during running JetStream2 we allocate more than 35M CodeOrigins. While they won't all be alive at the same time, it is still quite a lot of objects, so I am hoping for some small
        improvement to RAMification from this work.

        The one slightly tricky part is that we must implement copy and move assignment operators and constructors to make sure that any out-of-line storage belongs to a single CodeOrigin and is destroyed exactly once.

        * bytecode/ByValInfo.h:
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFor):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::globalObjectFor):
        (JSC::CodeBlock::updateOSRExitCounterAndCheckIfNeedToReoptimize):
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex):
        * bytecode/CodeOrigin.cpp:
        (JSC::CodeOrigin::inlineDepth const):
        (JSC::CodeOrigin::isApproximatelyEqualTo const):
        (JSC::CodeOrigin::approximateHash const):
        (JSC::CodeOrigin::inlineStack const):
        (JSC::CodeOrigin::codeOriginOwner const):
        (JSC::CodeOrigin::stackOffset const):
        (JSC::CodeOrigin::dump const):
        (JSC::CodeOrigin::inlineDepthForCallFrame): Deleted.
        * bytecode/CodeOrigin.h:
        (JSC::OutOfLineCodeOrigin::OutOfLineCodeOrigin):
        (JSC::CodeOrigin::CodeOrigin):
        (JSC::CodeOrigin::~CodeOrigin):
        (JSC::CodeOrigin::isSet const):
        (JSC::CodeOrigin::isHashTableDeletedValue const):
        (JSC::CodeOrigin::bytecodeIndex const):
        (JSC::CodeOrigin::inlineCallFrame const):
        (JSC::CodeOrigin::buildCompositeValue):
        (JSC::CodeOrigin::hash const):
        (JSC::CodeOrigin::operator== const):
        (JSC::CodeOrigin::exitingInlineKind const): Deleted.
        * bytecode/DeferredSourceDump.h:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeForStubInfo):
        (JSC::GetByIdStatus::computeFor):
        * bytecode/ICStatusMap.cpp:
        (JSC::ICStatusContext::isInlined const):
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::computeFor):
        (JSC::InByIdStatus::computeForStubInfo):
        * bytecode/InlineCallFrame.cpp:
        (JSC::InlineCallFrame::dumpInContext const):
        * bytecode/InlineCallFrame.h:
        (JSC::InlineCallFrame::computeCallerSkippingTailCalls):
        (JSC::InlineCallFrame::getCallerInlineFrameSkippingTailCalls):
        (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
        (JSC::CodeOrigin::walkUpInlineStack):
        * bytecode/InstanceOfStatus.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeForStubInfo):
        (JSC::PutByIdStatus::computeFor):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGArgumentsUtilities.cpp:
        (JSC::DFG::argumentsInvolveStackSlot):
        (JSC::DFG::emitCodeToGetArgumentsArrayLength):
        * dfg/DFGArrayMode.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::flushForTerminalImpl):
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
        * dfg/DFGForAllKills.h:
        (JSC::DFG::forAllKilledOperands):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dumpCodeOrigin):
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::isLiveInBytecode):
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        (JSC::DFG::Graph::willCatchExceptionInMachineFrame):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::executableFor):
        (JSC::DFG::Graph::isStrictModeFor):
        (JSC::DFG::Graph::hasExitSite):
        (JSC::DFG::Graph::forAllLocalsLiveInBytecode):
        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
        (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
        * dfg/DFGMinifiedNode.cpp:
        (JSC::DFG::MinifiedNode::fromNode):
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        (JSC::DFG::printOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExitBase.cpp:
        (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSiteSlow):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOSRExitPreparation.cpp:
        (JSC::DFG::prepareCodeOriginForOSRExit):
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGOperations.cpp:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitGetLength):
        (JSC::DFG::SpeculativeJIT::emitGetCallee):
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileForwardVarargs):
        (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        (JSC::DFG::TierUpCheckInjectionPhase::canOSREnterAtLoopHint):
        (JSC::DFG::TierUpCheckInjectionPhase::buildNaturalLoopToLoopHintMap):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::run):
        * dfg/DFGVariableEventStream.cpp:
        (JSC::DFG::VariableEventStream::reconstruct const):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsLength):
        (JSC::FTL::DFG::LowerDFGToB3::getCurrentCallee):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsStart):
        (JSC::FTL::DFG::LowerDFGToB3::codeOriginDescriptionOfCallSite const):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::bytecodeOffset):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::unwindToMachineCodeBlockFrame):
        (JSC::StackVisitor::readFrame):
        (JSC::StackVisitor::readNonInlinedFrame):
        (JSC::inlinedFrameOffset):
        (JSC::StackVisitor::readInlinedFrame):
        * interpreter/StackVisitor.h:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::executableFor):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::isStrictModeFor):
        (JSC::AssemblyHelpers::argumentsStart):
        (JSC::AssemblyHelpers::argumentCount):
        * jit/PCToCodeOriginMap.cpp:
        (JSC::PCToCodeOriginMap::PCToCodeOriginMap):
        (JSC::PCToCodeOriginMap::findPC const):
        * profiler/ProfilerOriginStack.cpp:
        (JSC::Profiler::OriginStack::OriginStack):
        * profiler/ProfilerOriginStack.h:
        * runtime/ErrorInstance.cpp:
        (JSC::appendSourceToError):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):

2019-03-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Search: allow DOM searches to be case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=194673
        <rdar://problem/48087577>

        Reviewed by Timothy Hatcher.

        Since `DOM.performSearch` also searches by selector and XPath, some results may appear
        as unexpected. As an example, searching for "BoDy" will still return the <body> as a result,
        as although the literal node name ("BODY") didn't match, it did match via selector/XPath.

        * inspector/protocol/DOM.json:
        Allow `DOM.performSearch` to be case sensitive.

2019-03-20  Saam Barati  <sbarati@apple.com>

        AI rule for ValueBitNot/ValueBitXor/ValueBitAnd/ValueBitOr is wrong
        https://bugs.webkit.org/show_bug.cgi?id=195980

        Reviewed by Yusuke Suzuki.

        They were all saying they could be type: (SpecBoolInt32, SpecBigInt)
        However, they should have been type: (SpecInt32Only, SpecBigInt)

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-03-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove copyRef() calls added in r243163
        https://bugs.webkit.org/show_bug.cgi?id=195962

        Reviewed by Chris Dumez.

        As best I can tell, may be a GCC 9 bug. It shouldn't warn about this case because the return
        value is noncopyable and the WTFMove() is absolutely required. We can avoid the warning
        without refcount churn by introducing an intermediate variable.

        * inspector/scripts/codegen/cpp_generator_templates.py:

2019-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Optimize jsc_value_object_define_property_data|accessor
        https://bugs.webkit.org/show_bug.cgi?id=195679

        Reviewed by Saam Barati.

        Use direct C++ call instead of using the JSC GLib API to create the descriptor object and invoke Object.defineProperty().

        * API/glib/JSCValue.cpp:
        (jsc_value_object_define_property_data):
        (jsc_value_object_define_property_accessor):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195973
        <rdar://problem/49039674>

        Reviewed by Joseph Pecoraro.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
        (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

        * inspector/JSGlobalObjectConsoleClient.h:
        (Inspector::JSGlobalObjectConsoleClient::setInspectorDebuggerAgent): Added.
        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::JSGlobalObjectConsoleClient):
        (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
        (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):

        * inspector/agents/InspectorDebuggerAgent.h:
        (Inspector::InspectorDebuggerAgent::addListener): Added.
        (Inspector::InspectorDebuggerAgent::removeListener): Added.
        (Inspector::InspectorDebuggerAgent::setListener): Deleted.
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (Inspector::InspectorDebuggerAgent::enable):
        (Inspector::InspectorDebuggerAgent::disable):
        (Inspector::InspectorDebuggerAgent::getScriptSource):
        (Inspector::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (Inspector::InspectorDebuggerAgent::didPause):
        (Inspector::InspectorDebuggerAgent::breakProgram):
        (Inspector::InspectorDebuggerAgent::clearBreakDetails):
        Drive-by: reorder some member variables for better sizing.
        Drive-by: rename some member variables for clarity.

2019-03-19  Saam barati  <sbarati@apple.com>

        Prune code after ForceOSRExit
        https://bugs.webkit.org/show_bug.cgi?id=195913

        Reviewed by Keith Miller.

        I removed our original implementation of this in r242989 because
        it was not sound. It broke backwards propagation because it removed
        uses of a node that backwards propagation relied on to be sound.
        Essentially, backwards propagation relies on being able to see uses
        that would exist in bytecode to be sound.
        
        The rollout in r242989 was a 1% Speedometer2 regression. This patch
        rolls back in the optimization in a sound way.
        
        This patch augments the code we had prior to r242989 to be sound. In
        addition to preserving liveness, we now also convert all uses after
        the ForceOSRExit to be Phantom. This may pessimize the optimizations
        we do in backwards propagation, but it will prevent that phase from
        making unsound optimizations.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::parse):

2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Build cleanly with GCC 9
        https://bugs.webkit.org/show_bug.cgi?id=195920

        Reviewed by Chris Dumez.

        WebKit triggers three new GCC 9 warnings:

        """
        -Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly
        declared copy constructor and assignment operator if one of them is user-provided.
        """

        Solution is to either add a copy constructor or copy assignment operator, if required, or
        else remove one if it is redundant.

        """
        -Wredundant-move, implied by -Wextra, warns about redundant calls to std::move.
        -Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision.
        """

        These account for most of this patch. Solution is to just remove the bad WTFMove().

        Additionally, -Wclass-memaccess has been enhanced to catch a few cases that GCC 8 didn't.
        These are solved by casting nontrivial types to void* before using memcpy. (Of course, it
        would be safer to not use memcpy on nontrivial types, but that's too complex for this
        patch. Searching for memcpy used with static_cast<void*> will reveal other cases to fix.)

        * b3/B3ValueRep.h:
        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        (JSC::GetterSetterAccessCase::clone const):
        * bytecode/InstanceOfAccessCase.cpp:
        (JSC::InstanceOfAccessCase::clone const):
        * bytecode/IntrinsicGetterAccessCase.cpp:
        (JSC::IntrinsicGetterAccessCase::clone const):
        * bytecode/ModuleNamespaceAccessCase.cpp:
        (JSC::ModuleNamespaceAccessCase::clone const):
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::clone const):
        * bytecode/StructureSet.h:
        * debugger/Breakpoint.h:
        * dfg/DFGRegisteredStructureSet.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::buildDebuggerLocation):
        * inspector/scripts/codegen/cpp_generator_templates.py:
        * parser/UnlinkedSourceCode.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::parseAndCompileAir):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmNameSectionParser.cpp:
        (JSC::Wasm::NameSectionParser::parse):
        * wasm/WasmStreamingParser.cpp:
        (JSC::Wasm::StreamingParser::consume):

2019-03-19  Saam Barati  <sbarati@apple.com>

        Style fix: remove C style cast in Instruction.h
        https://bugs.webkit.org/show_bug.cgi?id=195917

        Reviewed by Filip Pizlo.

        * bytecode/Instruction.h:
        (JSC::Instruction::wide const):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Provide $event in the console when paused on an event listener
        https://bugs.webkit.org/show_bug.cgi?id=188672

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScript.h:
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::setEventValue): Added.
        (Inspector::InjectedScript::clearEventValue): Added.

        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::clearEventValue): Added.

        * inspector/InjectedScriptSource.js:
        (WI.InjectedScript.prototype.setEventValue): Added.
        (WI.InjectedScript.prototype.clearEventValue): Added.
        (BasicCommandLineAPI):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: ScriptProfiler: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195591
        <rdar://problem/48791756>

        Reviewed by Joseph Pecoraro.

        * inspector/JSGlobalObjectConsoleClient.h:
        (Inspector::JSGlobalObjectConsoleClient::setInspectorScriptProfilerAgent): Added.
        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::JSGlobalObjectConsoleClient):
        (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
        (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

2019-03-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Heap: lazily create the agent
        https://bugs.webkit.org/show_bug.cgi?id=195590
        <rdar://problem/48791750>

        Reviewed by Joseph Pecoraro.

        * inspector/agents/InspectorHeapAgent.h:
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::~InspectorHeapAgent): Deleted.

        * inspector/agents/InspectorConsoleAgent.h:
        (Inspector::InspectorConsoleAgent::setInspectorHeapAgent): Added.
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::InspectorConsoleAgent):
        (Inspector::InspectorConsoleAgent::takeHeapSnapshot):
        (Inspector::InspectorConsoleAgent::~InspectorConsoleAgent): Deleted.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):

2019-03-19  Caio Lima  <ticaiolima@gmail.com>

        [JSC] LLIntEntryPoint creates same DirectJITCode for all functions
        https://bugs.webkit.org/show_bug.cgi?id=194648

        Reviewed by Keith Miller.

        1. Making LLIntThunks singleton. 

        Motivation: Former implementation has one LLIntThunk per type per VM.
        However, the generated code for every kind of thunk is essentially the
        same and we end up wasting memory (right now jitAllocationGranule = 32 bytes)
        when we have 2 or more VM instantiated. Turn these thunks into
        singleton will avoid such wasting.

        Tradeoff: This change comes with a price, because we will keep thunks
        allocated even when there is no VM instantiated. Considering WebCore use case,
        the situation of having no VM instantiated is uncommon, since once a
        VM is created through `commomVM()`, it will never be destroyed. Given
        that, this change does not impact the overall memory comsumption of
        WebCore/JSC. It also doesn't impact memory footprint, since thunks are
        generated lazily (see results below).

        Since we are keeping a static `MacroAssemblerCodeRef<JITThunkPtrTag>`,
        we have the assurance that JITed code will never be deallocated,
        given it is being pointed by `RefPtr<ExecutableMemoryHandle> m_executableMemory`.
        To understand why we decided to make LLIntThunks singleton instead of
        removing them, please see the comment on `llint/LLIntThunks.cpp`.

        2. Making all LLIntEntrypoints singleton

        Motivation: With singleton LLIntThunks, we also can have singleton
        DirectJITCodes and NativeJITCodes for each LLIntEntrypoint type and
        avoid multiple allocations of objects with the same content.

        Tradeoff: As explained before, once we allocate an entrypoint, it
        will be alive until the program exits. However, the gains we can
        achieve in some use cases justifies such allocations.

        As DirectJITCode and NativeJITCode are ThreadSafeRefCounted and we are using
        `codeBlock->setJITCode(makeRef(*jitCode))`, their reference counter
        will never be less than 1.

        3. Memory usage analysis

        This change reduces memory usage on stress/generate-multiple-llint-entrypoints.js
        by 2% and is neutral on JetStream 2. Following results were generated
        running each benchmark 6 times and using 95% Student's t distribution
        confidence interval.

        microbenchmarks/generate-multiple-llint-entrypoints.js (Changes uses less memory): 
            Mean of memory peak on ToT: 122576896 bytes (confidence interval: 67747.2316)
            Mean of memory peak on Changes: 119248213.33 bytes (confidence interval: 50251.2718)

        JetStream2 (Neutral):
            Mean of memory peak on ToT: 5442742272 bytes (confidence interval: 134381565.9117)
            Mean of memory peak on Changes: 5384949760 bytes (confidence interval: 158413904.8352)

        4. Performance Analysis

        This change is performance neutral on JetStream 2 and Speedometer 2.
        See results below.:

        JetStream 2 (Neutral):
            Mean of score on ToT: 139.58 (confidence interval: 2.44)
            Mean of score on Changes: 141.46 (confidence interval: 4.24)

        Speedometer run #1
           ToT: 110 +- 2.9
           Changes: 110 +- 1.8

        Speedometer run #2
           ToT: 110 +- 1.6
           Changes: 108 +- 2.3

        Speedometer run #3
           ToT: 110 +- 3.0
           Changes: 110 +- 1.4

        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::JSInterfaceJIT):
        * llint/LLIntEntrypoint.cpp:

        Here we are changing the usage or DirectJITCode by NativeJITCode on cases
        where there is no difference from address of calls with and without
        ArithCheck.

        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        (JSC::LLInt::setEntrypoint):
        * llint/LLIntEntrypoint.h:
        * 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::functionForCallEntryThunkGenerator): Deleted.
        (JSC::LLInt::functionForConstructEntryThunkGenerator): Deleted.
        (JSC::LLInt::functionForCallArityCheckThunkGenerator): Deleted.
        (JSC::LLInt::functionForConstructArityCheckThunkGenerator): Deleted.
        (JSC::LLInt::evalEntryThunkGenerator): Deleted.
        (JSC::LLInt::programEntryThunkGenerator): Deleted.
        (JSC::LLInt::moduleProgramEntryThunkGenerator): Deleted.
        * llint/LLIntThunks.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::setupLLInt):
        (JSC::ScriptExecutable::prepareForExecutionImpl):

2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add missing exception checks revealed by newly added exception checks, follow-up after r243081
        https://bugs.webkit.org/show_bug.cgi?id=195927

        Reviewed by Mark Lam.

        r243081 adds more exception checks which are previously missing, and it reveals missing exception checks in the caller.
        This patch is a follow-up patch after r243081, adding missing exception checks more to fix debug test failures.

        * runtime/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        * runtime/RegExpGlobalData.cpp:
        (JSC::RegExpGlobalData::getBackref):
        (JSC::RegExpGlobalData::getLastParen):

2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Generator should not create JSLexicalEnvironment if it is not necessary
        https://bugs.webkit.org/show_bug.cgi?id=195901

        Reviewed by Saam Barati.

        It is not rare that generators do not need to have any registers to be suspended and resumed.
        Since currently we always emit op_create_lexical_environment for generator code, we sometimes
        create empty JSLexicalEnvironment while it is not required. We can see that a lot of empty JSLexicalEnvironment
        are allocated in RAMification's Basic test.

        This patch removes this unnecessary allocation. We introduce op_create_generator_frame_environment, which is
        a marker, similar to op_yield. And generatorification phase decides whether we should actually emit op_create_lexical_environment,
        based on the result of the analysis in generatorification. This can remove unnecessary JSLexicalEnvironment allocations.

        We run RAMification in 6 times, use average of them.
        RAMification's Basic in JIT mode shows 1.4% improvement.
        ToT
            Current: 55076864.00, Peak: 55080960.00
        Patched
            Current: 54325930.67, Peak: 54329344.00

        RAMification's Basic in non-JIT mode shows 5.0% improvement.
        ToT
            Current: 12485290.67, Peak: 12485290.67
        Patched
            Current: 11894101.33, Peak: 11894101.33

        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
        (JSC::BytecodeGeneratorification::generatorFrameData const):
        (JSC::BytecodeGeneratorification::run):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * llint/LowLevelInterpreter.asm:

2019-03-18  Robin Morisset  <rmorisset@apple.com>

        Remove the inline capacity of Operands
        https://bugs.webkit.org/show_bug.cgi?id=195898

        Reviewed by Yusuke Suzuki.

        Operands currently has a vector with an inline capacity of 24.
        I tested on JetStream2, and only 4776 functions out of 12035 (that reach the DFG tier) have 24 or fewer elements in it.
        This is a major problem, because we have 5 Operands in every DFG::BasicBlock, resulting in 2688 bytes of inline capacity per basic block.
        Still on JetStream 2, functions have an average of 18 BB, but those functions whose operands overflow have an average of 27 BB (so we are wasting 72kB on average when compiling them), and the largest function has 1241 BB (!), for a total of 3.3MB being wasted while it is compiled.
        
        So I removed the inline capacity of the vector in Operands, and here are the results:
        Baseline Jetstream2:
        159.741
        159.746
        159.989
        Baseline RAMification on grouped and jit tests: (end/peak/score)
        89.288/89.763/89.526
        90.166/90.761/90.418
        89.560/90.014/89.787
        After optimization Jetstream2:
        159.342
        161.812
        162.037
        After optimization RAMification:
        89.147/89.644/89.395
        89.102.89.585/89.343
        88.953/89.536/89.2444
        
        So it looks like a roughly 1% improvement on RAMification (at least the tests where the JIT is enabled), and more surprisingly also a 1% progression on Jetstream2 (although I have more doubts about this one considering the variability in my numbers).
        I hope to land this, and get more accurate results from the bots.

        * bytecode/Operands.h:

2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add --destroy-vm shell option and dumpHeapStatisticsAtVMDestruction option
        https://bugs.webkit.org/show_bug.cgi?id=195897

        Reviewed by Keith Miller.

        It is useful if we have an option logging the status of all the existing MarkedBlocks and their objects at VM destruction.
        I used this feature to find wasting memory, and successfully removed many wasted MarkedBlocks and JS cells like r243081.
        This patch adds,

        1. --destroy-vm option to JSC shell to destroy main thread JSC::VM
        2. dumpHeapStatisticsAtVMDestruction to dump MarkedBlocks at VM destruction

        While the current option name is "dumpHeapStatisticsAtVMDestruction", we just dump the status of MarkedBlocks and cells. But eventually,
        we would like to collect heap statistics and dump them to investigate Heap status more.

        This patch also removes logHeapStatisticsAtExit option since it is no longer used in JSC.

        * heap/Heap.cpp:
        (JSC::Heap::dumpHeapStatisticsAtVMDestruction):
        (JSC::Heap::lastChanceToFinalize):
        * heap/Heap.h:
        * jsc.cpp:
        (printUsageStatement):
        (CommandLine::parseArguments):
        (runJSC):
        * runtime/Options.h:

2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] jsSubstring should resolve rope before calling JSRopeString::create
        https://bugs.webkit.org/show_bug.cgi?id=195840

        Reviewed by Geoffrey Garen.

        jsSubstring always ends up resolving rope of the base string because substring JSRopeString only accepts non-rope JSString
        as its base. Instead of resolving ropes in finishCreationSubstring, we should resolve before passing it to JSRopeString.
        So that, we can access string data before creating JSRopeString, and we can introduce optimizations like avoiding creation
        of single character substrings.

        We can find that a lot of substrings for length = 1 are allocated in RAMification regexp tests. This patch avoids creation of these
        strings to save memory.

        This patch also strengthen error checks caused by rope resolution for base of substrings. Previously we sometimes miss this checks.

        * dfg/DFGOperations.cpp:
        * runtime/JSString.cpp:
        (JSC::JSString::dumpToStream):
        * runtime/JSString.h:
        (JSC::jsSubstring):
        (JSC::jsSubstringOfResolved):
        (JSC::jsSingleCharacterString):
        * runtime/RegExpCachedResult.cpp:
        (JSC::RegExpCachedResult::lastResult): We no longer need to have length = 0 path since jsSubstring returns an empty string if length == 0.
        (JSC::RegExpCachedResult::leftContext):
        (JSC::RegExpCachedResult::rightContext):
        (JSC::RegExpCachedResult::setInput):
        * runtime/RegExpGlobalData.cpp:
        (JSC::RegExpGlobalData::getBackref):
        (JSC::RegExpGlobalData::getLastParen):
        * runtime/StringObject.h:
        (JSC::jsStringWithReuse):
        (JSC::jsSubstring):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
        (JSC::replaceUsingStringSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::splitStringByOneCharacterImpl):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        Some `const String& value = string->value(exec)` is dangerous if GC happens later. Changed to getting `String` instead of `const String&` here.

        * runtime/StringPrototypeInlines.h:
        (JSC::stringSlice):

2019-03-18  Mark Lam  <mark.lam@apple.com>

        Missing a ThrowScope release in JSObject::toString().
        https://bugs.webkit.org/show_bug.cgi?id=195893
        <rdar://problem/48970986>

        Reviewed by Michael Saboff.

        Placate the validator with a RELEASE_AND_RETURN().

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

2019-03-18  Mark Lam  <mark.lam@apple.com>

        Structure::flattenDictionary() should clear unused property slots.
        https://bugs.webkit.org/show_bug.cgi?id=195871
        <rdar://problem/48959497>

        Reviewed by Michael Saboff.

        It currently attempts to do this but fails because it's actually clearing up the
        preCapacity region instead.  The fix is simply to account for the preCapacity
        when computing the start address of the property slots.

        * runtime/Structure.cpp:
        (JSC::Structure::flattenDictionaryStructure):

2019-03-18  Robin Morisset  <rmorisset@apple.com>

        B3 should reduce Shl(<S|Z>Shr(@x, @const), @const) to BitAnd(@x, -(1<<@const))
        https://bugs.webkit.org/show_bug.cgi?id=152164

        Reviewed by Filip Pizlo.

        Turn this: Shl(<S|Z>Shr(@x, @const), @const)
        Into this: BitAnd(@x, -(1<<@const))

        I added two tests: one for ZShr/32 bits, and one for SShr/64 bits, I think it is enough coverage (no reason for any interaction between the signedness of the shift and the bitwidth).
        I also modified a few adjacent tests to remove undefined behaviours.

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testShlImms):
        (JSC::B3::testShlArgImm):
        (JSC::B3::testShlSShrArgImm):
        (JSC::B3::testShlImms32):
        (JSC::B3::testShlArgImm32):
        (JSC::B3::testShlZShrArgImm32):
        (JSC::B3::run):

2019-03-17  Robin Morisset  <rmorisset@apple.com>

        ParserError can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195496

        Reviewed by Mark Lam.

        * parser/ParserError.h:

2019-03-17  Diego Pino Garcia  <dpino@igalia.com>

        Fix WPE and GTK Debug builds after r243049
        https://bugs.webkit.org/show_bug.cgi?id=195860

        Unreviewed, build fix after r243049.

        * runtime/StringPrototype.cpp:
        (JSC::normalizationAffects8Bit):

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

        REGRESSION: !vm.isInitializingObject() void* JSC::tryAllocateCellHelper<JSC::Structure> JSC::Structure::create
        https://bugs.webkit.org/show_bug.cgi?id=195858

        Reviewed by Mark Lam.

        r243011 changed WebAssembly related structures lazily-allocated. It means that this lazy allocation must not be done in the middle of
        the other object allocations. This patch changes the signature of wasm related objects' ::create functions to taking Structure*.
        This prevents us from materializing lazily-allocated structures while allocating wasm related objects, and this style is used in the
        other places to fix the same problem. This bug is caught by existing debug tests for wasm.

        * runtime/JSGlobalObject.h:
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::createJSWebAssemblyCompileError):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finalizeCreation):
        (JSC::JSWebAssemblyInstance::create):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::createJSWebAssemblyLinkError):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::createStub):
        (JSC::JSWebAssemblyModule::finishCreation):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJSException):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        (JSC::callJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::create):
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyLinkError):
        (JSC::callJSWebAssemblyLinkError):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::webAssemblyModuleValidateAsyncInternal):
        (JSC::instantiate):
        (JSC::compileAndInstantiate):
        (JSC::webAssemblyModuleInstantinateAsyncInternal):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):
        (JSC::callJSWebAssemblyRuntimeError):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):
        * wasm/js/WebAssemblyToJSCallee.cpp:
        (JSC::WebAssemblyToJSCallee::create):
        * wasm/js/WebAssemblyToJSCallee.h:
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::WebAssemblyWrapperFunction::create):
        * wasm/js/WebAssemblyWrapperFunction.h:

2019-03-16  Darin Adler  <darin@apple.com>

        Improve normalization code, including moving from unorm.h to unorm2.h
        https://bugs.webkit.org/show_bug.cgi?id=195330

        Reviewed by Michael Catanzaro.

        * runtime/JSString.h: Move StringViewWithUnderlyingString to StringView.h.

        * runtime/StringPrototype.cpp: Include unorm2.h instead of unorm.h.
        (JSC::normalizer): Added. Function to create normalizer object given
        enumeration value indicating which is selected. Simplified because we
        know the function will not fail and so we don't need error handling code.
        (JSC::normalize): Changed this function to take a JSString* so we can
        optimize the case where no normalization is needed. Added an early exit
        if the string is stored as 8-bit and another if the string is already
        normalized, using unorm2_isNormalized. Changed error handling to only
        check cases that can actually fail in practice. Also did other small
        optimizations like passing VM rather than ExecState.
        (JSC::stringProtoFuncNormalize): Used smaller enumeration names that are
        identical to the names used in the API and normalization parlance rather
        than longer ones that expand the acronyms. Updated to pass JSString* to
        the normalize function, so we can optimize 8-bit and already-normalized
        cases, rather than callling the expensive String::upconvertedCharacters
        function. Use throwVMRangeError.

2019-03-15  Mark Lam  <mark.lam@apple.com>

        Need to check ObjectPropertyCondition liveness before accessing it when firing watchpoints.
        https://bugs.webkit.org/show_bug.cgi?id=195827
        <rdar://problem/48845513>

        Reviewed by Filip Pizlo.

        m_object in ObjectPropertyCondition may no longer be live by the time the watchpoint fires.

        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        * bytecode/ObjectPropertyCondition.cpp:
        (JSC::ObjectPropertyCondition::dumpInContext const):
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureStubClearingWatchpoint::fireInternal):
        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
        (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
        * runtime/StructureRareData.cpp:
        (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):

2019-03-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make more properties lazily-allocated in JSGlobalObject, including properties only used in JIT mode
        https://bugs.webkit.org/show_bug.cgi?id=195816

        Reviewed by Michael Saboff.

        This patch makes more properties lazily-allocated in JSGlobalObject. This patch makes the following lazily-allocated.

        1. iteratorResultObjectStructure
        2. WebAssembly related objects except for JSWebAssembly top-level object.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::iteratorResultObjectStructure const):
        (JSC::JSGlobalObject::webAssemblyModuleRecordStructure const):
        (JSC::JSGlobalObject::webAssemblyFunctionStructure const):
        (JSC::JSGlobalObject::webAssemblyWrapperFunctionStructure const):
        (JSC::JSGlobalObject::webAssemblyToJSCalleeStructure const):
        * wasm/js/JSWebAssembly.cpp:
        * wasm/js/JSWebAssembly.h:

2019-03-15  Dominik Infuehr  <dinfuehr@igalia.com>

        [CMake] Move test .js files into testapiScripts
        https://bugs.webkit.org/show_bug.cgi?id=195565

        Reviewed by Yusuke Suzuki.

        testapi expect .js file in the testapiScripts-directory.

        * shell/CMakeLists.txt:

2019-03-15  Mark Lam  <mark.lam@apple.com>

        Gardening: add a missing exception check after r242991.
        https://bugs.webkit.org/show_bug.cgi?id=195791

        Unreviewed.

        * tools/JSDollarVM.cpp:
        (JSC::functionGetGetterSetter):

2019-03-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to capture a screenshot of a node from within the page
        https://bugs.webkit.org/show_bug.cgi?id=194279
        <rdar://problem/10731573>

        Reviewed by Joseph Pecoraro.

        Add `console.screenshot` functionality, which displays a screenshot of a given object (if
        able) within Web Inspector's Console tab. From there, it can be viewed and saved.

        Currently, `console.screenshot` will
         - capture an image of a `Node` (if provided)
         - capture an image of the viewport if nothing is provided

        * inspector/protocol/Console.json:
        Add `Image` enum value to `ConsoleMessage` type.
        * runtime/ConsoleTypes.h:
        * inspector/ConsoleMessage.h:
        * inspector/ConsoleMessage.cpp:
        (Inspector::messageTypeValue):

        * runtime/ConsoleClient.h:
        * runtime/ConsoleObject.cpp:
        (JSC::ConsoleObject::finishCreation):
        (JSC::consoleProtoFuncScreenshot): Added.

        * inspector/JSGlobalObjectConsoleClient.h:
        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::screenshot): Added.

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

        [JSC] Retain PrivateName of Symbol before passing it to operations potentially incurring GC
        https://bugs.webkit.org/show_bug.cgi?id=195791
        <rdar://problem/48806130>

        Reviewed by Mark Lam.

        Consider the following example:

            void putByVal(JSObject*, PropertyName propertyName, ...);

            putByVal(object, symbol->privateName(), ...);

        PropertyName does not retain the passed UniquedStringImpl*. It just holds the pointer to UniquedStringImpl*.
        It means that since `Symbol::privateName()` returns `const PrivateName&` instead of `PrivateName`, putByVal
        and its caller does not retain UniquedStringImpl* held in PropertyName. The problem happens when the putByVal
        incurs GC, and when the `symbol` is missing in the conservative GC scan. The underlying UniquedStringImpl* of
        PropertyName can be accidentally destroyed in the middle of the putByVal operation. We should retain PrivateName
        before passing it to operations which takes it as PropertyName.

        1. We use the code pattern like this.

            auto propertyName = symbol->privateName();
            someOperation(..., propertyName);

        This pattern is well aligned to existing `JSValue::toPropertyKey(exec)` and `JSString::toIdentifier(exec)` code patterns.

            auto propertyName = value.toPropertyKey(exec);
            RETURN_IF_EXCEPTION(scope, { });
            someOperation(..., propertyName);

        2. We change `Symbol::privateName()` to returning `PrivateName` instead of `const PrivateName&` to avoid
           potential dangerous use cases. This is OK because the code using `Symbol::privateName()` is not a critical path,
           and they typically need to retain PrivateName.

        3. We audit similar functions `toPropertyKey(exec)` and `toIdentifier(exec)` for needed but missing exception checks.
           BTW, these functions are safe to the problem fixed in this patch since they return `Identifier` instead
           of `const Identifier&`.

        Mark and Robin investigated and offered important data to understand what went wrong. And figured out the reason behind
        the mysterious behavior shown in the data, and now, we confirm that this is the right fix for this bug.

        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        (JSC::tryGetByValOptimize):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::setFunctionName):
        * runtime/JSModuleLoader.cpp:
        (JSC::printableModuleKey):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        * runtime/Symbol.cpp:
        (JSC::Symbol::descriptiveString const):
        (JSC::Symbol::description const):
        * runtime/Symbol.h:
        * runtime/SymbolConstructor.cpp:
        (JSC::symbolConstructorKeyFor):
        * tools/JSDollarVM.cpp:
        (JSC::functionGetGetterSetter):

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

        REGRESSION(r242841): Fix conservative DFG OSR entry validation to accept values which will be stored in AnyInt / Double flush formats
        https://bugs.webkit.org/show_bug.cgi?id=195752

        Reviewed by Saam Barati.

        We fixed the bug skipping AbstractValue validations when the flush format is Double or AnyInt. But it
        was too conservative. While validating inputs with AbstractValue is mandatory (without it, whole CFA
        falls into wrong condition), our validation does not care AnyInt and Double representations in lower
        tiers. For example, if a value is stored in Double flush format in DFG, its AbstractValue becomes
        SpecFullDouble. However, it does not include Int32 and OSR entry is rejected if Int32 comes for DoubleRep
        OSR entry value. This is wrong since we later convert these numbers into DoubleRep representation
        before entering DFG code.

        This patch performs AbstractValue validation onto the correctly converted value with flush format hint.

        And it still does not fix OSR entry failures in navier-stokes. This is because AbstractValue representation
        in navier-stokes's lin_solve was too strict. Then, this patch reverts r242627. Instead of removing must handle
        value handling in CFA, DFG OSR entry now correctly validates inputs with AbstractValues even if the flush format
        is Double or AnyInt. As long as DFG OSR entry validates inputs, merging must handle values as proven constants is OK.

        We can see that # of OSR entry failures in navier-stokes.js becomes the same to the previous count. And we can see
        AnyInt OSR entry actually works in microbenchmarks/large-int.js. However, AnyInt effect is hard to observe because this
        is super rare. Since we inject type prediction based on must handle value, the flush format tends to be SpecAnyIntAsDouble
        and it accepts JSValues simply.

        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::filterValueByType):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::validateOSREntryValue const):
        (JSC::DFG::AbstractValue::validateTypeAcceptingBoxedInt52 const):
        (JSC::DFG::AbstractValue::validate const): Deleted.
        (JSC::DFG::AbstractValue::validateType const): Deleted.
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::run):
        (JSC::DFG::CFAPhase::injectOSR):
        (JSC::DFG::CFAPhase::performBlockCFA):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):

2019-03-14  Saam barati  <sbarati@apple.com>

        We can't remove code after ForceOSRExit until after FixupPhase
        https://bugs.webkit.org/show_bug.cgi?id=186916
        <rdar://problem/41396612>

        Reviewed by Yusuke Suzuki.

        There was an optimization in the bytecode parser I added in r232742 that converted blocks
        with ForceOSRExit in them to remove all IR after the ForceOSRExit. However,
        this is incorrect because it breaks backwards propagation. For example, it
        could incorrectly lead us to think it's safe to not check for overflow in
        an Add because such Add has no non-int uses. Backwards propagation relies on
        having a view over bytecode uses, and this optimization broke that. This patch
        rolls out that optimization, as initial perf data shows it may no longer be
        needed.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::parse):

2019-03-14  Saam barati  <sbarati@apple.com>

        JSScript should have an accessor saying if it's cached or not
        https://bugs.webkit.org/show_bug.cgi?id=195783

        Reviewed by Michael Saboff.

        * API/JSScript.h:
        * API/JSScript.mm:
        (-[JSScript isUsingBytecodeCache]):
        * API/tests/testapi.mm:
        (testIsUsingBytecodeCacheAccessor):
        (testObjectiveCAPI):

2019-03-14  Saam barati  <sbarati@apple.com>

        Remove retain cycle from JSScript and also don't keep the cache file descriptor open so many JSScripts can be cached in a loop
        https://bugs.webkit.org/show_bug.cgi?id=195782
        <rdar://problem/48880625>

        Reviewed by Michael Saboff.

        This patch fixes two issues with JSScript API:
        
        1. There was a retain cycle causing us to never destroy a JSScript once it
        created a JSSourceCode. The reason for this is that JSScript had a 
        Strong<JSSourceCode> field. And JSSourceCode transitively had RetainPtr<JSScript>.
        
        This patch fixes this issue by making the "jsSourceCode" accessor return a transient object.
        
        2. r242585 made it so that JSScript would keep the cache file descriptor open
        (and locked) for the duration of the lifetime of the JSScript itself. Our
        anticipation here is that it would make implementing iterative cache updates
        easier. However, this made using the API super limiting in other ways. For
        example, if a program had a loop that cached 3000 different JSScripts, it's
        likely that such a program would exhaust the open file count limit. This patch
        reverts to the behavior prior to r242585 where we just keep open the file descriptor
        while we read or write it.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * API/JSContext.mm:
        (-[JSContext evaluateJSScript:]):
        * API/JSScript.mm:
        (-[JSScript dealloc]):
        (-[JSScript readCache]):
        (-[JSScript init]):
        (-[JSScript sourceCode]):
        (-[JSScript jsSourceCode]):
        (-[JSScript writeCache:]):
        (-[JSScript forceRecreateJSSourceCode]): Deleted.
        * API/JSScriptInternal.h:
        * API/tests/testapi.mm:
        (testCanCacheManyFilesWithTheSameVM):
        (testObjectiveCAPI):
        (testCacheFileIsExclusive): Deleted.

2019-03-14  Michael Saboff  <msaboff@apple.com>

        ASSERTION FAILED: regexp->isValid() or ASSERTION FAILED: !isCompilationThread()
        https://bugs.webkit.org/show_bug.cgi?id=195735

        Reviewed by Mark Lam.

        There are two bug fixes here.

        The first bug happens due to a race condition when we are compiling on a separate thread while the
        main thread is compiling the RegExp at a place where it can run out of stack.  When that happens,
        the RegExp becomes invalid due to the out of stack error.  If we check the ASSERT condition in the DFG
        compilation thread, we crash.  After the main thread throws an exception, it resets the RegExp as
        it might compile successfully the next time we try to execute it on a shallower stack.
        The main thread will see the regular expression as valid when it executes the JIT'ed code we are compiling
        or any slow path we call out to.  Therefore ASSERTs like this in compilation code can be eliminated.

        The second bug is due to incorrect logic when we go to run the regexp in the Strength Reduction phase.
        The current check for "do we have code to run the RegExp?" only checks that the RegExp's state
        is != NotCompiled.  We also can't run the RegExp if there the state is ParseError.
        Changing hasCode() to take this into account fixes the second issue.

        (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
        * runtime/RegExp.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewRegexp):
        * runtime/RegExp.h:

2019-03-14  Saam barati  <sbarati@apple.com>

        Fixup uses KnownInt32 incorrectly in some nodes
        https://bugs.webkit.org/show_bug.cgi?id=195279
        <rdar://problem/47915654>

        Reviewed by Yusuke Suzuki.

        Fixup was sometimes using KnownInt32 edges when it knew some
        incoming value is an Int32 based on what the bytecode would return.
        However, because bytecode may result in Int32 for some node does
        not mean we'll pick Int32 as the value format for that local. For example,
        we may choose for a value to be represented as a double. This patch
        corrects such uses of KnownInt32.

        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArrayPush):
        (JSC::DFG::SpeculativeJIT::compileGetDirectPname):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush):

2019-03-14  Keith Miller  <keith_miller@apple.com>

        DFG liveness can't skip tail caller inline frames
        https://bugs.webkit.org/show_bug.cgi?id=195715
        <rdar://problem/46221598>

        Reviewed by Saam Barati.

        In order to simplify OSR exit/DFG bytecode parsing our bytecode
        generator always emits an op_ret after any tail call. However, the
        DFG when computing the liveness of locals, would skip any tail
        caller inline frames. This mean that if we ended up inserting a
        Check that would OSR to the op_ret we wouldn't have kept
        availability data around for it.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::isLiveInBytecode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::forAllLocalsLiveInBytecode):

2019-03-14  Robin Morisset  <rmorisset@apple.com>

        DFG::Worklist can be shrunk by 16 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195490

        Reviewed by Darin Adler.

        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::Worklist):
        * dfg/DFGWorklist.h:

2019-03-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide a way to get the contents of resources
        https://bugs.webkit.org/show_bug.cgi?id=195266
        <rdar://problem/48550911>

        Reviewed by Joseph Pecoraro.

        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeAsyncCall):
        Drive-by: fix missing `else`.

2019-03-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: `::-webkit-scrollbar*` rules aren't shown
        https://bugs.webkit.org/show_bug.cgi?id=195123
        <rdar://problem/48450148>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/CSS.json:
        Add `CSS.PseudoId` enum, rather than send a number, so that we have more knowledge about
        which pseudo type the rule corresponds to (e.g. a string is more descriptive than a number).

2019-03-13  Caio Lima  <ticaiolima@gmail.com>

        [JSC] CodeBlock::visitChildren is reporting extra memory even when its JITCode is singleton
        https://bugs.webkit.org/show_bug.cgi?id=195638

        Reviewed by Mark Lam.

        This patch introduces a m_isShared flag to track whether the
        JITCode is shared between many CodeBlocks. This flag is used in
        `CodeBlock::setJITCode` and `CodeBlock::visitChildren` to avoid
        reporting duplicated extra memory for singleton JITCodes.
        With those changes, we now stop counting singleton LLIntEntrypoints
        as extra memory, since they are declared as static variables. This
        change can potentially avoid unecessary GC pressure, because
        extra memory is used by Heap::updateAllocationLimits() to update Heap
        limits.
        Even though it is hard to show performance difference for this change
        (see results below), it is important to keep extra memory usage
        correct. Otherwise, it can be a source of a complicated bug on
        GC in the future.

        Results from last run of Speedometer 2 comparing ToT and changes. We
        collected those numbers running Minibrowser on a MacBook Pro 15-inch
        with 2,6 GHz Intel Core i7. Both versions are with JIT disabled,
        since these singleton JITCode are only used by this configuration:

        Speedometer2 Run #1
            ToT: 58.2 +- 1.1
            changes: 57.9 +- 0.99

        Speedometer2 Run #2
            ToT: 58.5 +- 1.7
            changes: 58.0 +- 1.5

        Speedometer2 Run #2
            ToT: 58.5 +- 0.99
            changes: 57.1 +- 1.5

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::estimatedSize):
        (JSC::CodeBlock::visitChildren):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setJITCode):
        * jit/JITCode.cpp:
        (JSC::JITCode::JITCode):
        (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef):
        (JSC::DirectJITCode::DirectJITCode):
        (JSC::NativeJITCode::NativeJITCode):
        * jit/JITCode.h:
        (JSC::JITCode::isShared const):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):

2019-03-13  Keith Rollin  <krollin@apple.com>

        Add support for new StagedFrameworks layout
        https://bugs.webkit.org/show_bug.cgi?id=195543

        Reviewed by Alexey Proskuryakov.

        When creating the WebKit layout for out-of-band Safari/WebKit updates,
        use an optional path prefix when called for.

        * Configurations/Base.xcconfig:

2019-03-13  Mark Lam  <mark.lam@apple.com>

        Remove unneeded --tradeDestructorBlocks option.
        https://bugs.webkit.org/show_bug.cgi?id=195698
        <rdar://problem/39681388>

        Reviewed by Yusuke Suzuki.

        There's no reason why we would ever want --tradeDestructorBlocks to be false.

        Also, there was an assertion in BlockDirectory::endMarking() for when
        (!Options::tradeDestructorBlocks() && needsDestruction()).  This assertion is
        outdated because the BlockDirectory's m_empty set used to mean the set of all
        blocks that have no live (as in not reachable by GC) objects and dead objects
        also do not require destructors to be called on them.  The current meaning of
        m_empty is that it is the set of all blocks that have no live objects,
        independent of whether they needs destructors to be called on them or not.
        The assertion is no longer valid for the new meaning of m_empty as m_empty may
        now contain destructible blocks.  This assertion is now removed as part of this
        patch.

        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::endMarking):
        * heap/LocalAllocator.cpp:
        (JSC::LocalAllocator::tryAllocateWithoutCollecting):
        * runtime/Options.h:

2019-03-13  Dominik Infuehr  <dinfuehr@igalia.com>

        String overflow when using StringBuilder in JSC::createError
        https://bugs.webkit.org/show_bug.cgi?id=194957

        Reviewed by Mark Lam.

        StringBuilder in notAFunctionSourceAppender didn't check
        for overflows but just failed.

        * runtime/ExceptionHelpers.cpp:
        (JSC::notAFunctionSourceAppender):

2019-03-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Move species watchpoint installation from ArrayPrototype to JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=195593

        Reviewed by Keith Miller.

        This patch moves watchpoints installation and watchpoints themselves from ArrayPrototype to JSGlobalObject because of the following two reasons.

        1. ArrayPrototype configures finalizer because of std::unique_ptr<> for watchpoints. If we move them from ArrayPrototype to JSGlobalObject, we do
           not need to set finalizer. And we can avoid unnecessary WeakBlock allocation.

        2. This code lazily configures watchpoints instead of setting watchpoints eagerly in JSGlobalObject::init. We would like to expand this mechanism
           to other watchpoints which are eagerly configured in JSGlobalObject::init. Putting these code in JSGlobalObject instead of scattering them in
           each XXXPrototype / XXXConstructor can encourage the reuse of the code.

        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::create):
        (JSC::speciesWatchpointIsValid):
        (JSC::ArrayPrototype::destroy): Deleted.
        (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint): Deleted.
        (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::ArrayPrototypeAdaptiveInferredPropertyWatchpoint): Deleted.
        (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire): Deleted.
        * runtime/ArrayPrototype.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint): Instead of using ArrayPrototypeAdaptiveInferredPropertyWatchpoint,
        we use ObjectPropertyChangeAdaptiveWatchpoint. We create watchpoints after touching WatchpointSet since ObjectPropertyChangeAdaptiveWatchpoint
        requires WatchpointSet is IsWatched state.
        * runtime/JSGlobalObject.h:

2019-03-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] OSR entry should respect abstract values in addition to flush formats
        https://bugs.webkit.org/show_bug.cgi?id=195653

        Reviewed by Mark Lam.

        Let's consider the following graph.

        Block #0
            ...
            27:< 2:loc13> JSConstant(JS|UseAsOther, StringIdent, Strong:String (atomic) (identifier): , StructureID: 42679, bc#10, ExitValid)
            ...
            28:< 2:loc13> ArithPow(DoubleRep:@437<Double>, Int32:@27, Double|UseAsOther, BytecodeDouble, Exits, bc#10, ExitValid)
            29:<!0:->     MovHint(DoubleRep:@28<Double>, MustGen, loc7, W:SideState, ClobbersExit, bc#10, ExitValid)
            30:< 1:->     SetLocal(DoubleRep:@28<Double>, loc7(M<Double>/FlushedDouble), machine:loc6, W:Stack(-8), bc#10, exit: bc#14, ExitValid)  predicting BytecodeDouble
            ...
            73:<!0:->     Jump(MustGen, T:#1, W:SideState, bc#71, ExitValid)

        Block #1 (bc#71): (OSR target) pred, #0
            ...
           102:<!2:loc15> GetLocal(Check:Untyped:@400, Double|MustGen|PureInt, BytecodeDouble, loc7(M<Double>/FlushedDouble), machine:loc6, R:Stack(-8), bc#120, ExitValid)  predicting BytecodeDouble
            ...

        CFA at @28 says it is invalid since there are type contradiction (Int32:@27 v.s. StringIdent). So, of course, we do not propagate #0's type information to #1 since we become invalid state.
        However, #1 is still reachable since it is an OSR target. Since #0 was only the predecessor of #1, loc7's type information becomes None at the head of #1.
        Since loc7's AbstractValue is None, @102 GetLocal emits breakpoint. It is OK as long as OSR entry fails because AbstractValue validation requires the given value is None type.

        The issue here is that we skipped AbstractValue validation when we have FlushFormat information. Since loc7 has FlushedDouble format, DFG OSR entry code does not validate it against AbstractValue,
        which is None. Then, we hit the breakpoint emitted by @102.

        This patch performs AbstractValue validation against values even if we have FlushFormat. We should correctly configure AbstractValue for OSR entry's locals too to avoid unnecessary OSR entry
        failures in the future but anyway validating locals with AbstractValue is correct behavior here since DFGSpeculativeJIT relies on that.

        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):

2019-03-12  Michael Saboff  <msaboff@apple.com>

        REGRESSION (iOS 12.2): Webpage using CoffeeScript crashes
        https://bugs.webkit.org/show_bug.cgi?id=195613

        Reviewed by Mark Lam.

        The bug here is in Yarr JIT backreference matching code.  We are incorrectly
        using a checkedOffset / inputPosition correction when checking for the available
        length left in a string.  It is improper to do these corrections as a backreference's
        match length is based on what was matched in the referenced capture group and not
        part of the checkedOffset and inputPosition computed when we compiled the RegExp.
        In some cases, the resulting incorrect calculation would allow us to go past
        the subject string's length.  Removed these adjustments.

        After writing tests for the first bug, found another bug where the non-greedy
        backreference backtracking code didn't do an "are we at the end of the input?" check.
        This caused an infinite loop as we'd jump from the backtracking code back to
        try matching one more backreference, fail and then backtrack.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateBackReference):
        (JSC::Yarr::YarrGenerator::backtrackBackReference):

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        A lot more classes have padding that can be reduced by reordering their fields
        https://bugs.webkit.org/show_bug.cgi?id=195579

        Reviewed by Mark Lam.

        * assembler/LinkBuffer.h:
        * dfg/DFGArrayifySlowPathGenerator.h:
        (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
        (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
        (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
        * dfg/DFGGraph.h:
        * dfg/DFGNode.h:
        (JSC::DFG::SwitchData::SwitchData):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::Plan):
        * dfg/DFGPlan.h:
        * dfg/DFGSlowPathGenerator.h:
        (JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT.h:
        * domjit/DOMJITSignature.h:
        (JSC::DOMJIT::Signature::Signature):
        (JSC::DOMJIT::Signature::effect):
        (JSC::DOMJIT::Signature::argumentCount): Deleted.
        * heap/MarkingConstraintSolver.h:
        * heap/SlotVisitor.h:
        * jit/CallFrameShuffleData.h:
        * jit/JITDivGenerator.h:
        * jit/SpillRegistersMode.h:
        * parser/Nodes.h:
        * profiler/ProfilerOSRExit.cpp:
        (JSC::Profiler::OSRExit::OSRExit):
        * profiler/ProfilerOSRExit.h:
        * runtime/ArrayBufferView.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::SamplingProfiler):
        * runtime/SamplingProfiler.h:
        * runtime/TypeSet.cpp:
        (JSC::StructureShape::StructureShape):
        * runtime/TypeSet.h:
        * runtime/Watchdog.h:

2019-03-12  Mark Lam  <mark.lam@apple.com>

        The HasIndexedProperty node does GC.
        https://bugs.webkit.org/show_bug.cgi?id=195559
        <rdar://problem/48767923>

        Reviewed by Yusuke Suzuki.

        HasIndexedProperty can call the slow path operationHasIndexedPropertyByInt(),
        which can eventually call JSString::getIndex(), which can resolve a rope.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2019-03-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: there should be a centralized place for reusable code
        https://bugs.webkit.org/show_bug.cgi?id=195265
        <rdar://problem/47040673>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Audit.json:
        Increment version.

2019-03-12  Robin Morisset  <rmorisset@apple.com>

        blocksInPreOrder and blocksInPostOrder should reserve the right capacity for their result vector
        https://bugs.webkit.org/show_bug.cgi?id=195595

        Reviewed by Saam Barati.

        Also change BlockList from being Vector<BasicBlock*, 5> to Vector<BasicBlock*>

        * dfg/DFGBasicBlock.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::blocksInPreOrder):
        (JSC::DFG::Graph::blocksInPostOrder):

2019-03-11  Ross Kirsling  <ross.kirsling@sony.com>

        Add Optional to Forward.h.
        https://bugs.webkit.org/show_bug.cgi?id=195586

        Reviewed by Darin Adler.

        * b3/B3Common.cpp:
        * b3/B3Common.h:
        * debugger/DebuggerParseData.cpp:
        * debugger/DebuggerParseData.h:
        * heap/HeapSnapshot.cpp:
        * heap/HeapSnapshot.h:
        * jit/PCToCodeOriginMap.cpp:
        * jit/PCToCodeOriginMap.h:
        * runtime/AbstractModuleRecord.cpp:
        * runtime/AbstractModuleRecord.h:
        * wasm/WasmInstance.h:
        * wasm/WasmModuleParser.h:
        * wasm/WasmSectionParser.cpp:
        * wasm/WasmSectionParser.h:
        * wasm/WasmStreamingParser.cpp:
        * wasm/WasmStreamingParser.h:
        * yarr/YarrFlags.cpp:
        * yarr/YarrFlags.h:
        * yarr/YarrUnicodeProperties.cpp:
        * yarr/YarrUnicodeProperties.h:
        Remove unnecessary includes from headers.

2019-03-11  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPUSwapChainDescriptor, GPUSwapChain and implement GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=194406
        <rdar://problem/47892466>

        Reviewed by Myles C. Maxfield.

        Added WebGPU to inspector context types.

        * inspector/protocol/Canvas.json:
        * inspector/scripts/codegen/generator.py:

2019-03-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Reduce # of structures in JSGlobalObject initialization
        https://bugs.webkit.org/show_bug.cgi?id=195498

        Reviewed by Darin Adler.

        This patch reduces # of structure allocations in JSGlobalObject initialization. Now it becomes 141, it fits in one
        MarkedBlock and this patch drops one MarkedBlock used for Structure previously.

        * CMakeLists.txt:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/ArrayIteratorPrototype.cpp:
        (JSC::ArrayIteratorPrototype::finishCreation): ArrayIteratorPrototype, MapIteratorPrototype, and StringIteratorPrototype's
        "next" properties are referenced by JSGlobalObject::init, and it causes reification of the lazy "next" property and structure
        transition anyway. So we should put it eagerly "without-transition" configuration to avoid one structure transition.

        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation): @@unscopable object's structure should be dictionary because (1) it is used as a dictionary
        in with-scope-resolution and (2) since with-scope-resolution is C++ runtime function anyway, non-dictionary structure does not add
        any performance benefit. This change saves several structures that are not useful.

        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createStructure): Bake CloneArguments's structure with 'without-transition' manner.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Previously we are always call resetProtoype at the end of JSGlobalObject::init. But it is not necessary
        since we do not change [[Prototype]] of JSGlobalObject. All we want is (1) fixupPrototypeChainWithObjectPrototype's operation and (2) setGlobalThis
        operation. Since setGlobalThis part is done in JSGlobalObject::finishCreation, fixupPrototypeChainWithObjectPrototype is only the thing
        we should do here.

        (JSC::JSGlobalObject::fixupPrototypeChainWithObjectPrototype):
        (JSC::JSGlobalObject::resetPrototype): If the [[Prototype]] is the same to the current [[Prototype]], we can skip the operation.

        * runtime/JSGlobalObject.h:
        * runtime/MapIteratorPrototype.cpp:
        (JSC::MapIteratorPrototype::finishCreation):
        * runtime/NullGetterFunction.h:
        * runtime/NullSetterFunction.h: Since structures of them are allocated per JSGlobalObject and they are per-JSGlobalObject,
        we can use without-transition property addition.

        * runtime/StringIteratorPrototype.cpp:
        (JSC::StringIteratorPrototype::finishCreation):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::setIteratorStructureSlow):
        (JSC::VM::mapIteratorStructureSlow): These structures are only used in WebCore's main thread.
        * runtime/VM.h:
        (JSC::VM::setIteratorStructure):
        (JSC::VM::mapIteratorStructure):

2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BuiltinExecutables should behave like a WeakSet instead of generic WeakHandleOwner for memory footprint
        https://bugs.webkit.org/show_bug.cgi?id=195508

        Reviewed by Darin Adler.

        Weak<> is not cheap in terms of memory footprint. We allocate WeakBlock (256 bytes) for book-keeping Weak<>.
        Currently BuiltinExecutables has 203 Weak<> members and many WeakBlocks are actually allocated because
        many UnlinkedFunctionExecutables in BuiltinExecutables are allocated during JSGlobalObject initialization process.

        This patch changes two things in BuiltinExecutables.

        1. Previously we have m_xxxSourceCode fields too. But we do not need to keep it since we know how to produce it when it is required.
           We generate SourceCode in xxxSourceCode() method instead of just returning m_xxxSourceCode. This reduces sizeof(BuiltinExecutables) 24 x 203 = 4KB.

        2. Instead of using Weak<>, BuiltinExecutables holds raw array of UnlinkedFunctionExecutable*. And Heap::finalizeUnconditionalFinalizers() correctly clears dead executables.
           This is similar to JSWeakSet implementation. And it saves WeakBlock allocations.

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::BuiltinExecutables):
        (JSC::BuiltinExecutables::finalizeUnconditionally):
        (JSC::JSC_FOREACH_BUILTIN_CODE): Deleted.
        (JSC::BuiltinExecutables::finalize): Deleted.
        * builtins/BuiltinExecutables.h:
        (JSC::BuiltinExecutables::static_cast<unsigned>):
        (): Deleted.
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):

2019-03-11  Robin Morisset  <rmorisset@apple.com>

        IntlDateTimeFormat can be shrunk by 32 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195504

        Reviewed by Darin Adler.

        * runtime/IntlDateTimeFormat.h:

2019-03-11  Robin Morisset  <rmorisset@apple.com>

        IntlCollator can be shrunk by 16 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195503

        Reviewed by Darin Adler.

        * runtime/IntlCollator.h:

2019-03-11  Robin Morisset  <rmorisset@apple.com>

        IntlNumberFormat can be shrunk by 16 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195505

        Reviewed by Darin Adler.

        * runtime/IntlNumberFormat.h:

2019-03-11  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement "~" unary operation
        https://bugs.webkit.org/show_bug.cgi?id=182216

        Reviewed by Keith Miller.

        This patch is adding support of BigInt into op_bitnot operations. In
        addition, we are changing ArithBitNot to handle only Number operands,
        while introducing a new node named ValueBitNot to handle Untyped and
        BigInt. This node follows the same approach we are doing into other
        arithimetic operations into DFG.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

        It is possible that fixup and prediction propagation don't convert a
        ValueBitNot(ConstInt32) into ArithBitNot(ConstInt32) because these
        analysis are conservative. In such case, we are adding constant
        folding rules to ValueBitNot AI.

        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):

        ValueBitNot has same rules as ArithBitNot on backwards propagation.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

        We can emit ArithBitNot if we know that operand of op_bitnot is a
        Number or any int. Otherwise we fallback to ValueBitNot and rely on
        fixup to convert the node to ArithBitNot when it is possible.
        ValueBitNot uses heap prediction on prediction propagation and we
        collect its type from op_bitnot's value profiler.

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

        When we have the case with ValueBitNot(BigInt), we don't clobberize
        world.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

        ValueBitNot can GC on BigIntUse because, right now, all bitNot
        operation allocates temporary BigInts to perform calculations and it
        can potentially trigger GC.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

        ValueBitNot is responsible do handle BigIntUse and UntypedUse. To all
        other uses, we fallback to ArithBitNot.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::bitwiseBinaryOp):

        This template function is abstracting the new semantics of numeric
        values operations on bitwise operations. These operations usually
        folow these steps:

            1. rhsNumeric = GetInt32OrBigInt(rhs)
            2. lhsNumeric = GetInt32OrBigInt(lhs)
            3. trhow error if TypeOf(rhsNumeric) != TypeOf(lhsNumeric)
            4. return BigInt::bitwiseOp(bitOp, rhs, lhs) if TypeOf(lhsNumeric) == BigInt
            5. return rhs <int32BitOp> lhs

        Since we have almost the same code for every bitwise op,
        we use such template to avoid code duplication. The template receives
        Int32 and BigInt operations as parameter. Error message is received as
        `const char*` instead of `String&` to avoid String allocation even when
        there is no error to throw.

        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueBitNot):

        ValueBitNot generates speculative code for BigIntUse and this code is a
        call to `operationBitNotBigInt`. This operation is faster than
        `operationValueBitNot` because there is no need to check types of
        operands and execute properly operation. We still need to check
        exceptions after `operationBitNotBigInt` because it can throw OOM.

        (JSC::DFG::SpeculativeJIT::compileBitwiseNot):
        * 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::compileValueBitNot):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::bitwiseNot):
        * runtime/JSBigInt.h:

2019-03-11  Darin Adler  <darin@apple.com>

        Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
        https://bugs.webkit.org/show_bug.cgi?id=195533

        Reviewed by Brent Fulgham.

        * API/tests/ExecutionTimeLimitTest.cpp:
        (testExecutionTimeLimit): Use appendFixedPrecisionNumber.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToPrecision): Use numberToStringFixedPrecision.
        * runtime/Options.cpp:
        (JSC::Option::dump const): Use appendFixedPrecisionNumber.

2019-03-10  Ross Kirsling  <ross.kirsling@sony.com>

        Invalid flags in a RegExp literal should be an early SyntaxError
        https://bugs.webkit.org/show_bug.cgi?id=195514

        Reviewed by Darin Adler.

        Currently we're throwing a *runtime* SyntaxError; this should occur at parse time. 

          12.2.8.1 Static Semantics: Early Errors
            PrimaryExpression : RegularExpressionLiteral
              - It is a Syntax Error if BodyText of RegularExpressionLiteral cannot be recognized
                using the goal symbol Pattern of the ECMAScript RegExp grammar specified in 21.2.1.
              - It is a Syntax Error if FlagText of RegularExpressionLiteral contains any code points
                other than "g", "i", "m",  "s", "u", or "y", or if it contains the same code point more than once.

        In fixing this, let's also move flag handling from runtime/ to yarr/.

        * yarr/YarrSyntaxChecker.cpp:
        (JSC::Yarr::checkSyntax):
        Check flags before checking pattern.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        * inspector/ContentSearchUtilities.cpp:
        (Inspector::ContentSearchUtilities::findMagicComment):
        * runtime/CachedTypes.cpp:
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::createWithoutCaching):
        (JSC::RegExp::create):
        (JSC::regExpFlags): Deleted.
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::ensureEmptyRegExpSlow):
        * runtime/RegExpCache.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::toFlags):
        (JSC::regExpCreate):
        (JSC::constructRegExp):
        * runtime/RegExpKey.h:
        (JSC::RegExpKey::RegExpKey):
        (WTF::HashTraits<JSC::RegExpKey>::constructDeletedValue):
        (WTF::HashTraits<JSC::RegExpKey>::isDeletedValue):
        (): Deleted.
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * testRegExp.cpp:
        (parseRegExpLine):
        * yarr/RegularExpression.cpp:
        (JSC::Yarr::RegularExpression::Private::compile):
        * yarr/YarrFlags.cpp: Added.
        (JSC::Yarr::parseFlags):
        * yarr/YarrFlags.h: Added.
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::BytecodePattern::ignoreCase const):
        (JSC::Yarr::BytecodePattern::multiline const):
        (JSC::Yarr::BytecodePattern::sticky const):
        (JSC::Yarr::BytecodePattern::unicode const):
        (JSC::Yarr::BytecodePattern::dotAll const):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPattern::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        (JSC::Yarr::YarrPattern::dumpPattern):
        * yarr/YarrPattern.h:
        (JSC::Yarr::YarrPattern::global const):
        (JSC::Yarr::YarrPattern::ignoreCase const):
        (JSC::Yarr::YarrPattern::multiline const):
        (JSC::Yarr::YarrPattern::sticky const):
        (JSC::Yarr::YarrPattern::unicode const):
        (JSC::Yarr::YarrPattern::dotAll const):
        Move flag handling to Yarr and modernize API.

2019-03-09  Robin Morisset  <rmorisset@apple.com>

        Compilation can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195500

        Reviewed by Mark Lam.

        * profiler/ProfilerCompilation.cpp:
        (JSC::Profiler::Compilation::Compilation):
        * profiler/ProfilerCompilation.h:

2019-03-09  Robin Morisset  <rmorisset@apple.com>

        BinarySwitch can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195493

        Reviewed by Mark Lam.

        * jit/BinarySwitch.cpp:
        (JSC::BinarySwitch::BinarySwitch):
        * jit/BinarySwitch.h:

2019-03-09  Robin Morisset  <rmorisset@apple.com>

        AsyncStackTrace can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195491

        Reviewed by Mark Lam.

        * inspector/AsyncStackTrace.h:

2019-03-08  Mark Lam  <mark.lam@apple.com>

        Stack overflow crash in JSC::JSObject::hasInstance.
        https://bugs.webkit.org/show_bug.cgi?id=195458
        <rdar://problem/48710195>

        Reviewed by Yusuke Suzuki.

        * runtime/JSObject.cpp:
        (JSC::JSObject::hasInstance):

2019-03-08  Robin Morisset  <rmorisset@apple.com>

        IntegerCheckCombiningPhase::Range can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195487

        Reviewed by Saam Barati.

        * dfg/DFGIntegerCheckCombiningPhase.cpp:

2019-03-08  Robin Morisset  <rmorisset@apple.com>

        TypeLocation can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195483

        Reviewed by Mark Lam.

        * bytecode/TypeLocation.h:
        (JSC::TypeLocation::TypeLocation):

2019-03-08  Robin Morisset  <rmorisset@apple.com>

        GetByIdStatus can be shrunk by 16 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195480

        Reviewed by Saam Barati.

        8 bytes from reordering fields
        8 more bytes by making the enum State only use 1 byte.

        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::GetByIdStatus):
        * bytecode/GetByIdStatus.h:

2019-03-08  Robin Morisset  <rmorisset@apple.com>

        PutByIdVariant can be shrunk by 8 bytes
        https://bugs.webkit.org/show_bug.cgi?id=195482

        Reviewed by Mark Lam.

        * bytecode/PutByIdVariant.h:
        (JSC::PutByIdVariant::PutByIdVariant):

2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r242568

        Robin pointed that calculation of `numberOfChildren` and `nonEmptyIndex` is unnecessary.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] We should have more WithoutTransition functions which are usable for JSGlobalObject initialization
        https://bugs.webkit.org/show_bug.cgi?id=195447

        Reviewed by Filip Pizlo.

        This patch reduces # of unnecessary structure transitions in JSGlobalObject initialization to avoid unnecessary allocations
        caused by Structure transition. One example is WeakBlock allocation for StructureTransitionTable.
        To achieve this, we (1) add putDirectNonIndexAccessorWithoutTransition and putDirectNativeIntrinsicGetterWithoutTransition
        to add accessor properties without transition, and (2) add NameAdditionMode::WithoutStructureTransition mode to InternalFunction::finishCreation
        to use `putDirectWithoutTransition` instead of `putDirect`.

        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSInjectedScriptHostPrototype::finishCreation):
        * inspector/JSJavaScriptCallFramePrototype.cpp:
        (Inspector::JSJavaScriptCallFramePrototype::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/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::finishCreation):
        (JSC::FunctionPrototype::addFunctionProperties):
        (JSC::FunctionPrototype::initRestrictedProperties):
        * runtime/FunctionPrototype.h:
        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::GeneratorFunctionConstructor::finishCreation):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::IntlCollatorConstructor::finishCreation):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructor::finishCreation):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructor::finishCreation):
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::IntlPluralRulesConstructor::finishCreation):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectNonIndexAccessorWithoutTransition):
        (JSC::JSObject::putDirectNativeIntrinsicGetterWithoutTransition):
        * runtime/JSObject.h:
        * runtime/JSPromiseConstructor.cpp:
        (JSC::JSPromiseConstructor::finishCreation):
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSTypedArrayViewConstructor::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/MapConstructor.cpp:
        (JSC::MapConstructor::finishCreation):
        * runtime/MapPrototype.cpp:
        (JSC::MapPrototype::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/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::finishCreation):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        * runtime/SetConstructor.cpp:
        (JSC::SetConstructor::finishCreation):
        * runtime/SetPrototype.cpp:
        (JSC::SetPrototype::finishCreation):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::finishCreation):
        * runtime/SymbolConstructor.cpp:
        (JSC::SymbolConstructor::finishCreation):
        * runtime/WeakMapConstructor.cpp:
        (JSC::WeakMapConstructor::finishCreation):
        * runtime/WeakSetConstructor.cpp:
        (JSC::WeakSetConstructor::finishCreation):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::WebAssemblyCompileErrorConstructor::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):

2019-03-08  Tadeu Zagallo  <tzagallo@apple.com>

        op_check_tdz does not def its argument
        https://bugs.webkit.org/show_bug.cgi?id=192880
        <rdar://problem/46221598>

        Reviewed by Saam Barati.

        This prevented the for-in loop optimization in the bytecode generator, since
        the analysis sees a redefinition of the loop variable.

        * bytecode/BytecodeUseDef.h:
        (JSC::computeDefsForBytecodeOffset):

2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make more fields lazy in JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=195449

        Reviewed by Mark Lam.

        This patch makes more fields lazy-allocated in JSGlobalObject to save memory.

        1. Some minor structures like moduleRecordStructure.
        2. Some functions like parseInt / parseFloat. While they are eagerly created in JIT mode anyway to materialize NumberConstructor, we can lazily allocate them in non JIT mode.
        3. ArrayBuffer constructor. While it is eagerly allocated in WebCore, we can make lazily allocated in JSC.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/JSArrayBufferPrototype.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::parseIntFunction const):
        (JSC::JSGlobalObject::parseFloatFunction const):
        (JSC::JSGlobalObject::evalFunction const):
        (JSC::JSGlobalObject::strictEvalActivationStructure const):
        (JSC::JSGlobalObject::moduleRecordStructure const):
        (JSC::JSGlobalObject::moduleNamespaceObjectStructure const):
        (JSC::JSGlobalObject::proxyObjectStructure const):
        (JSC::JSGlobalObject::callableProxyObjectStructure const):
        (JSC::JSGlobalObject::proxyRevokeStructure const):
        (JSC::JSGlobalObject::arrayBufferConstructor const):
        (JSC::JSGlobalObject::arrayBufferPrototype const):
        (JSC::JSGlobalObject::arrayBufferStructure const):
        * runtime/ProxyObject.h:
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::StrictEvalActivation):
        * runtime/StrictEvalActivation.h:
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::buffer):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::webAssemblyModuleCustomSections):

2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove merging must handle values into proven types in CFA
        https://bugs.webkit.org/show_bug.cgi?id=195444

        Reviewed by Saam Barati.

        Previously, we are merging must handle values as a proven constant in CFA. This is OK as long as this proven AbstractValue is blurred by merging the other legit AbstractValues
        from the successors. But let's consider the following code, this is actually generated DFG graph from the attached test in r242626.

            Block #2 (loop header) succ #3, #4
            ...
            1: ForceOSRExit
            ...
            2: JSConstant(0)
            3: SetLocal(@2, loc6)
            ...
            4: Branch(#3, #4)

            Block #3 (This is OSR entry target) pred #2, #3, must handle value for loc6 => JSConstant(Int32, 31)
            ...
            5: GetLocal(loc6)
            6: StringFromCharCode(@5)
            ...

        Block #3 is OSR entry target. So we have must handle value for loc6 and it is Int32 constant 31. Then we merge this constant as a proven value in #3's loc6 AbstractValue.
        If the value from #2 blurs the value, it is OK. However, #2 has ForceOSRExit. So must handle value suddenly becomes the only source of loc6 in #3. Then we use this constant
        as a proven value. But this is not expected behavior since must handle value is just a snapshot of the locals when we kick off the concurrent compilation. In the above example,
        we assume that loop index is an constant 31, but it is wrong, and OSR entry fails. Because there is no strong assumption that the must handle value is the proven type or value,
        we should not merge it in CFA.

        Since (1) this is just an optimization, (2) type information is already propagated in prediction injection phase, and (3) the must handle value does not show the performance
        progression in r211461 and we no longer see type misprediction in marsaglia-osr-entry.js, this patch simply removes must handle value type widening in CFA.

        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::run):
        (JSC::DFG::CFAPhase::performBlockCFA):
        (JSC::DFG::CFAPhase::injectOSR): Deleted.

2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] StringFromCharCode fast path should accept 0xff in DFG and FTL
        https://bugs.webkit.org/show_bug.cgi?id=195429

        Reviewed by Saam Barati.

        We can create single characters without allocation up to 0xff character code. But currently, DFGSpeculativeJIT and FTLLowerDFGToB3 go to the slow path
        for 0xff case. On the other hand, DFG DoesGC phase says GC won't happen if the child is int32 constant and it is <= 0xff. So, if you have `String.fromCharCode(0xff)`,
        this breaks the assumption in DFG DoesGC. The correct fix is changing the check in DFGSpeculativeJIT and FTLLowerDFGToB3 from AboveOrEqual to Above.
        Note that ThunkGenerators's StringFromCharCode thunk was correct.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileFromCharCode):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):

2019-03-07  Mark Lam  <mark.lam@apple.com>

        Follow up refactoring in try-finally code after r242591.
        https://bugs.webkit.org/show_bug.cgi?id=195428

        Reviewed by Saam Barati.

        1. Added some comments in emitFinallyCompletion() to describe each completion case.
        2. Converted CatchEntry into a struct.
        3. Renamed variable hasBreaksOrContinuesNotCoveredByJumps to hasBreaksOrContinuesThatEscapeCurrentFinally
           to be more clear about its purpose.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::emitOutOfLineExceptionHandler):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        * bytecompiler/BytecodeGenerator.h:

2019-03-07  Saam Barati  <sbarati@apple.com>

        CompactVariableMap::Handle's copy operator= leaks the previous data
        https://bugs.webkit.org/show_bug.cgi?id=195398

        Reviewed by Yusuke Suzuki.

        The copy constructor was just assigning |this| to the new value,
        forgetting to decrement the ref count of the thing pointed to by
        the |this| handle. Based on Yusuke's suggestion, this patch refactors
        the move constructor, move operator=, and copy operator= to use the
        swap() primitive and the copy constructor primitive.

        * parser/VariableEnvironment.cpp:
        (JSC::CompactVariableMap::Handle::Handle):
        (JSC::CompactVariableMap::Handle::swap):
        (JSC::CompactVariableMap::Handle::operator=): Deleted.
        * parser/VariableEnvironment.h:
        (JSC::CompactVariableMap::Handle::Handle):
        (JSC::CompactVariableMap::Handle::operator=):

2019-03-07  Tadeu Zagallo  <tzagallo@apple.com>

        Lazily decode cached bytecode
        https://bugs.webkit.org/show_bug.cgi?id=194810

        Reviewed by Saam Barati.

        Like lazy parsing, we should pause at code block boundaries. Instead
        of always eagerly decoding UnlinkedFunctionExecutable's UnlinkedCodeBlocks,
        we store their offsets in the executable and lazily decode them on the next
        call to `unlinkedCodeBlockFor`.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::~UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::visitChildren):
        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
        (JSC::UnlinkedFunctionExecutable::decodeCachedCodeBlocks):
        * bytecode/UnlinkedFunctionExecutable.h:
        * runtime/CachedTypes.cpp:
        (JSC::Decoder::Decoder):
        (JSC::Decoder::~Decoder):
        (JSC::Decoder::create):
        (JSC::Decoder::offsetOf):
        (JSC::Decoder::cacheOffset):
        (JSC::Decoder::ptrForOffsetFromBase):
        (JSC::Decoder::handleForEnvironment const):
        (JSC::Decoder::setHandleForEnvironment):
        (JSC::Decoder::addFinalizer):
        (JSC::VariableLengthObject::isEmpty const):
        (JSC::CachedWriteBarrier::isEmpty const):
        (JSC::CachedFunctionExecutable::unlinkedCodeBlockForCall const):
        (JSC::CachedFunctionExecutable::unlinkedCodeBlockForConstruct const):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::decodeCodeBlockImpl):
        (JSC::isCachedBytecodeStillValid):
        (JSC::decodeFunctionCodeBlock):
        * runtime/CachedTypes.h:
        (JSC::Decoder::vm):

2019-03-06  Mark Lam  <mark.lam@apple.com>

        Exception is a JSCell, not a JSObject.
        https://bugs.webkit.org/show_bug.cgi?id=195392

        Reviewed by Saam Barati.

        Exception is a VM implementation construct to carry a stack trace for the point
        where it is thrown from.  As a reminder, an Exception is needed because:
        1. JS code can throw primitives as well that are non-cells.
        2. Error objects capture the stack trace at the point where they are constructed,
           which is not always the same as the point where they are thrown (if they are
           thrown).

        Hence, Exception should not be visible to JS code, and therefore should not be a
        JSObject.  Hence, it should not inherit from JSDestructibleObject.

        This patch changes the following:

        1. Exception now inherits directly from JSCell instead.

        2. Places where we return an Exception masquerading as a JSObject* are now
           updated to return a nullptr when we encounter an exception.

        3. We still return Exception* as JSValue or EncodedJSValue when we encounter an
           exception in functions that return JSValue or EncodedJSValue.  This is because
           the number that implements the following pattern is too numerous:

                return throw<Some Error>(...)

           We'll leave these as is for now.

        * bytecode/CodeBlock.h:
        (JSC::ScriptExecutable::prepareForExecution):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        * runtime/Error.cpp:
        (JSC::throwConstructorCannotBeCalledAsFunctionTypeError):
        (JSC::throwTypeError):
        (JSC::throwSyntaxError):
        * runtime/Error.h:
        (JSC::throwRangeError):
        * runtime/Exception.cpp:
        (JSC::Exception::createStructure):
        * runtime/Exception.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::throwOutOfMemoryError):
        (JSC::throwStackOverflowError):
        (JSC::throwTerminatedExecutionException):
        * runtime/ExceptionHelpers.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::resolvedOptions):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        * runtime/JSObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/RegExpConstructor.cpp:
        (JSC::regExpCreate):
        (JSC::constructRegExp):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * runtime/ScriptExecutable.h:
        * runtime/ThrowScope.cpp:
        (JSC::ThrowScope::throwException):
        * runtime/ThrowScope.h:
        (JSC::ThrowScope::throwException):
        (JSC::throwException):
        * runtime/VM.cpp:
        (JSC::VM::throwException):
        * runtime/VM.h:

2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
        https://bugs.webkit.org/show_bug.cgi?id=195346

        Reviewed by Fujii Hironori.

        * jsc.cpp:
        (currentWorkingDirectory):
        (fetchModuleFromLocalFileSystem):
        * runtime/DateConversion.cpp:
        (JSC::formatDateTime):
        Use wchar helpers as needed.

2019-03-06  Mark Lam  <mark.lam@apple.com>

        Fix incorrect handling of try-finally completion values.
        https://bugs.webkit.org/show_bug.cgi?id=195131
        <rdar://problem/46222079>

        Reviewed by Saam Barati and Yusuke Suzuki.

        Consider the following:

            function foo() {                        // line 1
                try {
                    return 42;                      // line 3
                } finally {
                    for (var j = 0; j < 1; j++) {   // line 5
                        try {
                            throw '';               // line 7
                        } finally {
                            continue;               // line 9
                        }
                    }
                }                                   // line 11
            }
            var result = foo();

        With the current (before fix) code base, result will be the exception object thrown
        at line 7.  The expected result should be 42, returned at line 3.

        The bug is that we were previously only using one set of completion type and
        value registers for the entire function.  This is inadequate because the outer
        try-finally needs to preserve its own completion type and value ({ Return, 42 }
        in this case) in order to be able to complete correctly.

        One might be deceived into thinking that the above example should complete with
        the exception thrown at line 7.  However, according to Section 13.15.8 of the
        ECMAScript spec, the 'continue' in the finally at line 9 counts as an abrupt
        completion.  As a result, it overrides the throw from line 7.  After the continue,
        execution resumes at the top of the loop at line 5, followed by a normal completion
        at line 11.

        Also according to Section 13.15.8, given that the completion type of the outer
        finally is normal, the resultant completion of the outer try-finally should be
        the completion of the outer try block i.e. { Return, 42 }.

        This patch makes the following changes:
        
        1. Fix handling of finally completion to use a unique set of completion
           type and value registers for each FinallyContext.

        2. Move the setting of Throw completion type to the out of line exception handler.
           This makes the mainline code slightly less branchy.

        3. Introduce emitOutOfLineCatchHandler(), emitOutOfLineFinallyHandler(), and
           emitOutOfLineExceptionHandler() to make it clearer that these are not emitting
           bytecode inline.  Also, these make it clearer when we're emitting a handler
           for a catch vs a finally.

        4. Allocate the FinallyContext on the stack instead of as a member of the
           heap allocated ControlFlowScope.  This simplifies its life-cycle management
           and reduces the amount of needed copying.

        5. Update emitFinallyCompletion() to propagate the completion type and value to
           the outer FinallyContext when needed.

        6. Fix emitJumpIf() to use the right order of operands.  Previously, we were
           only using it to do op_stricteq and op_nstricteq comparisons.  So, the order
           wasn't important.  We now use it to also do op_beloweq comparisons.  Hence,
           the order needs to be corrected.

        7. Remove the unused CompletionType::Break and Continue.  These are encoded with
           the jumpIDs of the jump targets instead.

        Relevant specifications:
        Section 13.15.8: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-try-statement-runtime-semantics-evaluation
        Section 6.3.2.4: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-updateempty

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::FinallyContext::FinallyContext):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::popFinallyControlFlowScope):
        (JSC::BytecodeGenerator::emitOutOfLineCatchHandler):
        (JSC::BytecodeGenerator::emitOutOfLineFinallyHandler):
        (JSC::BytecodeGenerator::emitOutOfLineExceptionHandler):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::emitJumpIf):
        (JSC::BytecodeGenerator::emitCatch): Deleted.
        (JSC::BytecodeGenerator::allocateCompletionRecordRegisters): Deleted.
        (JSC::BytecodeGenerator::releaseCompletionRecordRegisters): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::FinallyContext::completionTypeRegister const):
        (JSC::FinallyContext::completionValueRegister const):
        (JSC::ControlFlowScope::ControlFlowScope):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::CompletionRecordScope::CompletionRecordScope): Deleted.
        (JSC::BytecodeGenerator::CompletionRecordScope::~CompletionRecordScope): Deleted.
        (JSC::BytecodeGenerator::completionTypeRegister const): Deleted.
        (JSC::BytecodeGenerator::completionValueRegister const): Deleted.
        (JSC::BytecodeGenerator::emitSetCompletionType): Deleted.
        (JSC::BytecodeGenerator::emitSetCompletionValue): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):

2019-03-06  Saam Barati  <sbarati@apple.com>

        JSScript should keep the cache file locked for the duration of its existence and should truncate the cache when it is out of date
        https://bugs.webkit.org/show_bug.cgi?id=195186

        Reviewed by Keith Miller.

        This patch makes it so that JSScript will keep its bytecode cache file
        locked as long as the JSScript is alive. This makes it obvious that it's
        safe to update that file, as it will only be used in a single VM, across
        all processes, at a single time. We may be able to extend this in the future
        if we can atomically update it across VMs/processes. However, we're choosing
        more restricted semantics now as it's always easier to extend these semantics
        in the future opposed to having to support the more flexible behavior
        up front.
        
        This patch also:
        - Adds error messages if writing the cache fails. We don't expect this to
          fail, but previously we would say we cached it even if write() fails.
        - Removes the unused m_moduleKey field.
        - Makes calling cacheBytecodeWithError with an already non-empty cache file fail.
          In the future, we should extend this to just fill in the parts of the cache
          that are not present. But we don't have the ability to do that yet, so we
          just result in an error for now.

        * API/JSScript.mm:
        (-[JSScript dealloc]):
        (-[JSScript readCache]):
        (-[JSScript init]):
        (-[JSScript writeCache:]):
        * API/JSScriptInternal.h:
        * API/tests/testapi.mm:
        (testCacheFileIsExclusive):
        (testCacheFileFailsWhenItsAlreadyCached):
        (testObjectiveCAPI):

2019-03-06  Christopher Reid  <chris.reid@sony.com>

        Followups to (r242306): Use LockHolder instead of std::lock_guard on Remote Inspector Locks
        https://bugs.webkit.org/show_bug.cgi?id=195381

        Reviewed by Mark Lam.

        Replacing std::lock_guard uses in Remote Inspector with WTF::LockHolder.
        Also using `= { }` for struct initialization instead of memeset.

        * inspector/remote/RemoteConnectionToTarget.cpp:
        * inspector/remote/RemoteInspector.cpp:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        * inspector/remote/playstation/RemoteInspectorPlayStation.cpp:
        * inspector/remote/playstation/RemoteInspectorSocketClientPlayStation.cpp:
        * inspector/remote/playstation/RemoteInspectorSocketPlayStation.cpp:
        * inspector/remote/playstation/RemoteInspectorSocketServerPlayStation.cpp:

2019-03-06  Saam Barati  <sbarati@apple.com>

        Air::reportUsedRegisters must padInterference
        https://bugs.webkit.org/show_bug.cgi?id=195303
        <rdar://problem/48270343>

        Reviewed by Keith Miller.

        reportUsedRegisters uses reg liveness to eliminate loads/moves into dead
        registers. However, liveness can report incorrect results in certain 
        scenarios when considering liveness at instruction boundaries. For example,
        it can go wrong when an Inst has a LateUse of a register and the following
        Inst has an EarlyDef of that same register. Such a scenario could lead us
        to incorrectly say the register is not live-in to the first Inst. Pad
        interference inserts Nops between such instruction boundaries that cause
        this issue.
        
        The test with this patch fixes the issue in reportUsedRegisters. This patch
        also conservatively makes it so that lowerAfterRegAlloc calls padInterference
        since it also reasons about liveness.

        * b3/air/AirLowerAfterRegAlloc.cpp:
        (JSC::B3::Air::lowerAfterRegAlloc):
        * b3/air/AirPadInterference.h:
        * b3/air/AirReportUsedRegisters.cpp:
        (JSC::B3::Air::reportUsedRegisters):
        * b3/testb3.cpp:
        (JSC::B3::testReportUsedRegistersLateUseNotDead):
        (JSC::B3::run):

2019-03-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] AI should not propagate AbstractValue relying on constant folding phase
        https://bugs.webkit.org/show_bug.cgi?id=195375

        Reviewed by Saam Barati.

        MakeRope rule in AI attempts to propagate the node, which will be produced after constant folding phase runs.
        This is wrong since we do not guarantee that constant folding phase runs after AI runs (e.g. DFGSpeculativeJIT
        and FTLLowerDFGToB3 run AI). This results in the bug that the value produced at runtime is different from the
        proven constant value in AI. In the attached test, AI says the value is SpecStringIdent while the resulted value
        at runtime is SpecStringVar, resulting in wrong MakeRope code. This patch removes the path propagating the node
        relying on constant folding phase.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-03-05  Saam barati  <sbarati@apple.com>

        op_switch_char broken for rope strings after JSRopeString layout rewrite
        https://bugs.webkit.org/show_bug.cgi?id=195339
        <rdar://problem/48592545>

        Reviewed by Yusuke Suzuki.

        When we did the JSString rewrite, we accidentally broke LLInt's switch_char
        for rope strings. That change made it so that we always go to the slow path
        for ropes. That's wrong. The slow path should only be taken when the rope
        is of length 1. For lengths other than 1, we need to fall through to the
        default case. This patch fixes this.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSString.h:

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

        [JSC] Should check exception for JSString::toExistingAtomicString
        https://bugs.webkit.org/show_bug.cgi?id=195337

        Reviewed by Keith Miller, Saam Barati, and Mark Lam.

        We missed the exception check for JSString::toExistingAtomicString while it can resolve
        a rope and throw an OOM exception. This patch adds necessary exception checks. This patch
        fixes test failures in debug build, reported in https://bugs.webkit.org/show_bug.cgi?id=194375#c93.

        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        (JSC::getByVal):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for debug builds after r242397

        * runtime/JSString.h:

2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Store bits for JSRopeString in 3 stores
        https://bugs.webkit.org/show_bug.cgi?id=195234

        Reviewed by Saam Barati.

        This patch cleans up the initialization of JSRopeString fields in DFG and FTL.
        Previously, we store some part of data separately. Instead, this patch calculates
        the data first by bit operations and store calculated data with fewer stores.

        This patch also cleans up is8Bit and isSubstring flags. We put them in lower bits
        of the first fiber instead of the upper 16 bits. Since we only have 3 bit flags, (isRope, is8Bit, isSubstring),
        we can put them into the lower 3 bits, they are always empty due to alignment.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl): A bit clean up of StringLength IC to give a chance of unnecessary mov removal.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::canBeRope):
        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        * dfg/DFGSpeculativeJIT.h:
        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::isRopeString):
        (JSC::FTL::DFG::LowerDFGToB3::isNotRopeString):
        * runtime/JSString.cpp:
        (JSC::JSString::visitChildren):
        * runtime/JSString.h:
        (JSC::JSString::is8Bit const):
        (JSC::JSString::isSubstring const):
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateNullRopeString):
        (JSC::JSDollarVM::finishCreation):

2019-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Data Bindings / Associated Data for nodes
        https://bugs.webkit.org/show_bug.cgi?id=195290
        <rdar://problem/48304019>

        Reviewed by Devin Rousso.

        * inspector/protocol/DOM.json:

2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make Reflect lazily-allocated by dropping @Reflect references from builtin JS
        https://bugs.webkit.org/show_bug.cgi?id=195250

        Reviewed by Saam Barati.

        By removing @Reflect from builtin JS, we can make Reflect object allocation lazy.
        We move @ownKeys function from @Reflect to @Object to remove @Reflect reference.

        We also remove m_intlObject field from JSGlobalObject since we no longer use it.

        * builtins/BuiltinNames.h:
        * builtins/GlobalOperations.js:
        (globalPrivate.copyDataProperties):
        (globalPrivate.copyDataPropertiesNoExclusions):
        * runtime/JSGlobalObject.cpp:
        (JSC::createReflectProperty):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        (JSC::objectConstructorOwnKeys):
        * runtime/ReflectObject.cpp:
        (JSC::ReflectObject::finishCreation):

2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Offer @makeTypeError instead of exposing @TypeError
        https://bugs.webkit.org/show_bug.cgi?id=193858

        Reviewed by Mark Lam.

        Instead of exposing @TypeError, we expose @makeTypeError function.
        And we make TypeError and Error lazily-allocated objects in non JIT environment.
        In JIT environment, only TypeError becomes lazily-allocated since WebAssembly errors
        touch Error prototype anyway. But we can make them lazy in a subsequent patch.

        * builtins/AsyncFromSyncIteratorPrototype.js:
        * builtins/AsyncGeneratorPrototype.js:
        (globalPrivate.asyncGeneratorEnqueue):
        * builtins/BuiltinNames.h:
        * builtins/PromiseOperations.js:
        (globalPrivate.createResolvingFunctions.resolve):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initializeErrorConstructor):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::errorPrototype const):
        (JSC::JSGlobalObject::errorStructure const):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncMakeTypeError):
        * runtime/JSGlobalObjectFunctions.h:

2019-03-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLib] Returning G_TYPE_OBJECT from a constructor does not work
        https://bugs.webkit.org/show_bug.cgi?id=195206

        Reviewed by Žan Doberšek.

        We are freeing the newly created object before returning from the constructor.

        * API/glib/JSCCallbackFunction.cpp:
        (JSC::JSCCallbackFunction::construct):

2019-03-02  Darin Adler  <darin@apple.com>

        Retire legacy dtoa function and DecimalNumber class
        https://bugs.webkit.org/show_bug.cgi?id=195253

        Reviewed by Daniel Bates.

        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToExponential): Removed dependency on NumberToStringBufferLength,
        using NumberToStringBuffer instead. Also tweaked style of implementation a bit.

2019-03-01  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::nameForRegister): Use makeString instead of String::format,
        using the new "pad" function.

2019-03-01  Christopher Reid  <chris.reid@sony.com>

        [PlayStation] Upstream playstation's remote inspector server
        https://bugs.webkit.org/show_bug.cgi?id=193806

        Reviewed by Joseph Pecoraro.

        Upstreaming PlayStation's Remote Inspector implementation.
        It is using a JSON RPC protocol over TCP sockets.
        This inspector implementation is planned to also support running on a WinCairo Client and Server.

        * PlatformPlayStation.cmake:
        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * inspector/remote/RemoteConnectionToTarget.cpp: Renamed from Source/JavaScriptCore/inspector/remote/glib/RemoteConnectionToTargetGlib.cpp.
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/playstation/RemoteInspectorConnectionClient.h: Added.
        * inspector/remote/playstation/RemoteInspectorConnectionClientPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorMessageParser.h: Added.
        * inspector/remote/playstation/RemoteInspectorMessageParserPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorServer.h: Added.
        * inspector/remote/playstation/RemoteInspectorServerPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorSocket.h: Added.
        * inspector/remote/playstation/RemoteInspectorSocketClient.h: Added.
        * inspector/remote/playstation/RemoteInspectorSocketClientPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorSocketPlayStation.cpp: Added.
        * inspector/remote/playstation/RemoteInspectorSocketServer.h: Added.
        * inspector/remote/playstation/RemoteInspectorSocketServerPlayStation.cpp: Added.

2019-03-01  Saam Barati  <sbarati@apple.com>

        Create SPI to crash if a JSC VM is created
        https://bugs.webkit.org/show_bug.cgi?id=195231
        <rdar://problem/47717990>

        Reviewed by Mark Lam.

        * API/JSVirtualMachine.mm:
        (+[JSVirtualMachine setCrashOnVMCreation:]):
        * API/JSVirtualMachinePrivate.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::setCrashOnVMCreation):
        * runtime/VM.h:

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

        [JSC] Fix FTL build on ARM32_64 by adding stubs for JSRopeString::offsetOfXXX
        https://bugs.webkit.org/show_bug.cgi?id=195235

        Reviewed by Saam Barati.

        This is a workaround until https://bugs.webkit.org/show_bug.cgi?id=195234 is done.

        * runtime/JSString.h:

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

        [JSC] Use runtime calls for DFG MakeRope if !CPU(ADDRESS64)
        https://bugs.webkit.org/show_bug.cgi?id=195221

        Reviewed by Mark Lam.

        ARM32_64 builds DFG 64bit, but the size of address is 32bit. Make DFG MakeRope a runtime call not only for DFG 32_64,
        but also DFG 64 with !CPU(ADDRESS64). This patch unifies compileMakeRope again, and use a runtime call for !CPU(ADDRESS64).

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.

2019-03-01  Justin Fan  <justin_fan@apple.com>

        [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=195191

        Rubber-stamped by Dean Jackson.

        Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.

        * Configurations/FeatureDefines.xcconfig:

2019-03-01  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix debug builds with GCC
        https://bugs.webkit.org/show_bug.cgi?id=195205

        Unreviewed. Fix debug builds in GCC by removing
        the constexpr-keyword for this function.

        * runtime/CachedTypes.cpp:
        (JSC::tagFromSourceCodeType):

2019-03-01  Dominik Infuehr  <dinfuehr@igalia.com>

        [ARM] Fix assembler warnings in ctiMasmProbeTrampoline
        https://bugs.webkit.org/show_bug.cgi?id=195164

        Reviewed by Mark Lam.

        Short branches in IT blocks are deprecated in AArch32. In addition the
        the conditional branch was the only instruction in the IT block. Short
        branches are able to encode the condition code themselves, the additional
        IT instruction is not needed.

        The assembler was also warning that writing into APSR without a bitmask
        was deprecated. Therefore use APSR_nzcvq instead, this generates the same
        instruction encoding.

        * assembler/MacroAssemblerARMv7.cpp:

2019-02-28  Tadeu Zagallo  <tzagallo@apple.com>

        Remove CachedPtr::m_isEmpty and CachedOptional::m_isEmpty fields
        https://bugs.webkit.org/show_bug.cgi?id=194999

        Reviewed by Saam Barati.

        These fields are unnecessary, since we can just check that m_offset
        has not been initialized (I added VariableLengthObject::isEmpty for
        that). They also add 7-byte padding to these classes, which is pretty
        bad given how frequently CachedPtr is used.

        * runtime/CachedTypes.cpp:
        (JSC::CachedObject::operator new[]):
        (JSC::VariableLengthObject::allocate):
        (JSC::VariableLengthObject::isEmpty const):
        (JSC::CachedPtr::encode):
        (JSC::CachedPtr::decode const):
        (JSC::CachedPtr::get const):
        (JSC::CachedOptional::encode):
        (JSC::CachedOptional::decode const):
        (JSC::CachedOptional::decodeAsPtr const):

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

        [JSC] sizeof(JSString) should be 16
        https://bugs.webkit.org/show_bug.cgi?id=194375

        Reviewed by Saam Barati.

        This patch reduces sizeof(JSString) from 24 to 16 to fit it into GC heap cell atom. And it also reduces sizeof(JSRopeString) from 48 to 32.
        Both classes cut 16 bytes per instance in GC allocation. This new layout is used in 64bit architectures which has little endianess.

        JSString no longer has length and flags directly. JSString has String, and we query information to this String instead of holding duplicate
        information in JSString. We embed isRope bit into this String's pointer so that we can convert JSRopeString to JSString in an atomic manner.
        We emit store-store fence before we put String pointer. This should exist even before this patch, so this patch also fixes one concurrency issue.

        The old JSRopeString separately had JSString* fibers along with String. In this patch, we merge the first JSString* fiber and String pointer
        storage into one to reduce the size of JSRopeString. JSRopeString has three pointer width storage. We pick 48bit effective address of JSString*
        fibers to compress three fibers + length + flags into three pointer width storage.

        In 64bit architecture, JSString and JSRopeString have the following memory layout to make sizeof(JSString) == 16 and sizeof(JSRopeString) == 32.
        JSString has only one pointer. We use it for String. length() and is8Bit() queries go to StringImpl. In JSRopeString, we reuse the above pointer
        place for the 1st fiber. JSRopeString has three fibers so its size is 48. To keep length and is8Bit flag information in JSRopeString, JSRopeString
        encodes these information into the fiber pointers. is8Bit flag is encoded in the 1st fiber pointer. length is embedded directly, and two fibers
        are compressed into 12bytes. isRope information is encoded in the first fiber's LSB.

        Since length of JSRopeString should be frequently accessed compared to each fiber, we put length in contiguous 32byte field, and compress 2nd
        and 3rd fibers into the following 80byte fields. One problem is that now 2nd and 3rd fibers are split. Storing and loading 2nd and 3rd fibers
        are not one pointer load operation. To make concurrent collector work correctly, we must initialize 2nd and 3rd fibers at JSRopeString creation
        and we must not modify these part later.

                     0                        8        10               16                       32                                     48
        JSString     [   ID      ][  header  ][   String pointer      0]
        JSRopeString [   ID      ][  header  ][ flags ][ 1st fiber    1][  length  ][2nd lower32][2nd upper16][3rd lower16][3rd upper32]
                                                                      ^
                                                                   isRope bit

        Since fibers in JSRopeString are not initialized in atomic pointer store manner, we must initialize all the fiber fields at JSRopeString creation.
        To achieve this, we modify our JSRopeString::RopeBuilder implementation not to create half-baked JSRopeString.

        This patch also makes an empty JSString singleton per VM. This makes evaluation of JSString in boolean context one pointer comparison. This is
        critical in this change since this patch enlarges the code necessary to get length from JSString in JIT. Without this guarantee, our code of boolean
        context evaluation is bloated. This patch hides all the JSString::create and JSRopeString::create in the private permission. JSString and JSRopeString
        creation is only allowed from jsString and related helper functions and they return a singleton empty JSString if the length is zero. We also change
        JSRopeString::RopeBuilder not to construct an empty JSRopeString.

        This patch is performance neutral in Speedometer2 and JetStream2. And it improves RAMification by 2.7%.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::storeZero16):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::storeZero16):
        (JSC::MacroAssemblerX86Common::store16):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/InlineAccess.cpp:
        (JSC::InlineAccess::dumpCacheSizesAndCrash):
        (JSC::linkCodeInline):
        (JSC::InlineAccess::isCacheableStringLength):
        (JSC::InlineAccess::generateStringLength):
        * bytecode/InlineAccess.h:
        (JSC::InlineAccess::sizeForPropertyAccess):
        (JSC::InlineAccess::sizeForPropertyReplace):
        (JSC::InlineAccess::sizeForLengthAccess):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStringSlice):
        (JSC::DFG::SpeculativeJIT::compileToLowerCase):
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compileStringEquality):
        (JSC::DFG::SpeculativeJIT::compileStringZeroLength):
        (JSC::DFG::SpeculativeJIT::compileLogicalNotStringOrOther):
        (JSC::DFG::SpeculativeJIT::emitStringBranch):
        (JSC::DFG::SpeculativeJIT::emitStringOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
        (JSC::DFG::SpeculativeJIT::emitPopulateSliceIndex):
        (JSC::DFG::SpeculativeJIT::compileArraySlice):
        (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
        (JSC::DFG::SpeculativeJIT::speculateStringIdentAndLoadStorage):
        (JSC::DFG::SpeculativeJIT::emitSwitchCharStringJump):
        (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString):
        (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength):
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharCodeAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringToUntypedStrictEquality):
        (JSC::FTL::DFG::LowerDFGToB3::compileSwitch):
        (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
        (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase):
        (JSC::FTL::DFG::LowerDFGToB3::stringsEqual):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::switchString):
        (JSC::FTL::DFG::LowerDFGToB3::isRopeString):
        (JSC::FTL::DFG::LowerDFGToB3::isNotRopeString):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringIdent):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfRopeStringImpl):
        (JSC::AssemblyHelpers::branchIfNotRopeStringImpl):
        * jit/JITInlines.h:
        (JSC::JIT::emitLoadCharacterString):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        * jit/ThunkGenerators.cpp:
        (JSC::stringGetByValGenerator):
        (JSC::stringCharLoad):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSString.cpp:
        (JSC::JSString::createEmptyString):
        (JSC::JSRopeString::RopeBuilder<RecordOverflow>::expand):
        (JSC::JSString::dumpToStream):
        (JSC::JSString::estimatedSize):
        (JSC::JSString::visitChildren):
        (JSC::JSRopeString::resolveRopeInternal8 const):
        (JSC::JSRopeString::resolveRopeInternal8NoSubstring const):
        (JSC::JSRopeString::resolveRopeInternal16 const):
        (JSC::JSRopeString::resolveRopeInternal16NoSubstring const):
        (JSC::JSRopeString::resolveRopeToAtomicString const):
        (JSC::JSRopeString::convertToNonRope const):
        (JSC::JSRopeString::resolveRopeToExistingAtomicString const):
        (JSC::JSRopeString::resolveRopeWithFunction const):
        (JSC::JSRopeString::resolveRope const):
        (JSC::JSRopeString::resolveRopeSlowCase8 const):
        (JSC::JSRopeString::resolveRopeSlowCase const):
        (JSC::JSRopeString::outOfMemory const):
        (JSC::JSRopeString::visitFibers): Deleted.
        (JSC::JSRopeString::clearFibers const): Deleted.
        * runtime/JSString.h:
        (JSC::JSString::uninitializedValueInternal const):
        (JSC::JSString::valueInternal const):
        (JSC::JSString::JSString):
        (JSC::JSString::finishCreation):
        (JSC::JSString::create):
        (JSC::JSString::offsetOfValue):
        (JSC::JSString::isRope const):
        (JSC::JSString::is8Bit const):
        (JSC::JSString::length const):
        (JSC::JSString::tryGetValueImpl const):
        (JSC::JSString::toAtomicString const):
        (JSC::JSString::toExistingAtomicString const):
        (JSC::JSString::value const):
        (JSC::JSString::tryGetValue const):
        (JSC::JSRopeString::unsafeView const):
        (JSC::JSRopeString::viewWithUnderlyingString const):
        (JSC::JSString::unsafeView const):
        (JSC::JSString::viewWithUnderlyingString const):
        (JSC::JSString::offsetOfLength): Deleted.
        (JSC::JSString::offsetOfFlags): Deleted.
        (JSC::JSString::setIs8Bit const): Deleted.
        (JSC::JSString::setLength): Deleted.
        (JSC::JSString::string): Deleted.
        (JSC::jsStringBuilder): Deleted.
        * runtime/JSStringInlines.h:
        (JSC::JSString::~JSString):
        (JSC::JSString::equal const):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):
        * runtime/RegExpObjectInlines.h:
        (JSC::collectMatches):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncSplitFast):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        (JSC::SmallStrings::createEmptyString): Deleted.
        * runtime/SmallStrings.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSlice):
        * runtime/StringPrototypeInlines.h: Added.
        (JSC::stringSlice):

2019-02-28  Saam barati  <sbarati@apple.com>

        Unreviewed. Attempt windows build fix after r242239.

        * runtime/CachedTypes.cpp:
        (JSC::tagFromSourceCodeType):

2019-02-28  Mark Lam  <mark.lam@apple.com>

        In cloop.rb, rename :int and :uint to :intptr and :uintptr.
        https://bugs.webkit.org/show_bug.cgi?id=195183

        Reviewed by Yusuke Suzuki.

        Also changed intMemRef and uintMemRef to intptrMemRef and uintptrMemRef respectively.

        * offlineasm/cloop.rb:

2019-02-28  Saam barati  <sbarati@apple.com>

        Make JSScript:cacheBytecodeWithError update the cache when the script changes
        https://bugs.webkit.org/show_bug.cgi?id=194912

        Reviewed by Mark Lam.

        Prior to this patch, the JSScript SPI would never check if its cached
        bytecode were still valid. This would lead the cacheBytecodeWithError
        succeeding even if the underlying cache were stale. This patch fixes
        that by making JSScript check if the cache is still valid. If it's not,
        we will cache bytecode when cacheBytecodeWithError is invoked.

        * API/JSScript.mm:
        (-[JSScript readCache]):
        (-[JSScript writeCache:]):
        * API/tests/testapi.mm:
        (testBytecodeCacheWithSameCacheFileAndDifferentScript):
        (testObjectiveCAPI):
        * runtime/CachedTypes.cpp:
        (JSC::Decoder::Decoder):
        (JSC::VariableLengthObject::buffer const):
        (JSC::CachedPtr::decode const):
        (JSC::tagFromSourceCodeType):
        (JSC::GenericCacheEntry::isUpToDate const):
        (JSC::CacheEntry::isStillValid const):
        (JSC::GenericCacheEntry::decode const):
        (JSC::GenericCacheEntry::isStillValid const):
        (JSC::encodeCodeBlock):
        (JSC::decodeCodeBlockImpl):
        (JSC::isCachedBytecodeStillValid):
        * runtime/CachedTypes.h:
        * runtime/CodeCache.cpp:
        (JSC::sourceCodeKeyForSerializedBytecode):
        (JSC::sourceCodeKeyForSerializedProgram):
        (JSC::sourceCodeKeyForSerializedModule):
        (JSC::serializeBytecode):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::fetchFromDiskImpl):
        * runtime/Completion.cpp:
        (JSC::generateProgramBytecode):
        (JSC::generateBytecode): Deleted.
        * runtime/Completion.h:

2019-02-28  Mark Lam  <mark.lam@apple.com>

        cloop.rb shift mask should depend on the word size being shifted.
        https://bugs.webkit.org/show_bug.cgi?id=195181
        <rdar://problem/48484164>

        Reviewed by Yusuke Suzuki.

        Previously, we're always masking the shift amount with 0x1f.  This is only correct
        for 32-bit words.  For 64-bit words, the mask should be 0x3f.  For pointer sized
        shifts, the mask depends on sizeof(uintptr_t).

        * offlineasm/cloop.rb:

2019-02-28  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Enable Web GPU only on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=195139

        Because Metal is only supported on 64 bit apps.

        Unreviewed build fix.

        * Configurations/FeatureDefines.xcconfig:

2019-02-27  Mark Lam  <mark.lam@apple.com>

        The parser is failing to record the token location of new in new.target.
        https://bugs.webkit.org/show_bug.cgi?id=195127
        <rdar://problem/39645578>

        Reviewed by Yusuke Suzuki.

        Also adjust the token location for the following to be as shown:

            new.target
            ^
            super
            ^
            import.meta
            ^

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

2019-02-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] mustHandleValues for dead bytecode locals should be ignored in DFG phases
        https://bugs.webkit.org/show_bug.cgi?id=195144
        <rdar://problem/47595961>

        Reviewed by Mark Lam.

        DFGMaximalFlushInsertionPhase inserts Flush for all the locals at the end of basic blocks. This enlarges the live ranges of
        locals in DFG, and it sometimes makes DFG value live while it is dead in bytecode. The issue happens when we use mustHandleValues
        to widen AbstractValue in CFAPhase. At that time, DFG tells "this value is live in DFG", but it may be dead in the bytecode level.
        At that time, we attempt to merge AbstractValue with dead mustHandleValue, which is cleared as jsUndefined() in
        DFG::Plan::cleanMustHandleValuesIfNecessary before start compilation, and crash because jsUndefined() may be irrelevant to the FlushFormat
        in VariableAccessData.

        This patch makes the type of mustHandleValues Operands<Optional<JSValue>>. We clear dead JSValues in DFG::Plan::cleanMustHandleValuesIfNecessary.
        And we skip handling dead mustHandleValue in DFG phases.

        * bytecode/Operands.h:
        (JSC::Operands::isLocal const):
        (JSC::Operands::isVariable const): Deleted.
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::injectOSR):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        (JSC::DFG::compile):
        * dfg/DFGDriver.h:
        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::reconstruct):
        * dfg/DFGJITCode.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::Plan):
        (JSC::DFG::Plan::checkLivenessAndVisitChildren):
        (JSC::DFG::Plan::cleanMustHandleValuesIfNecessary):
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::mustHandleValues const):
        * dfg/DFGPredictionInjectionPhase.cpp:
        (JSC::DFG::PredictionInjectionPhase::run):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::disableHoistingAcrossOSREntries):
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):
        * jit/JITOperations.cpp:

2019-02-27  Simon Fraser  <simon.fraser@apple.com>

        Roll out r242014; it caused crashes in compositing logging (webkit.org/b/195141)

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

2019-02-27  Robin Morisset  <rmorisset@apple.com>

        DFG: Loop-invariant code motion (LICM) should not hoist dead code
        https://bugs.webkit.org/show_bug.cgi?id=194945
        <rdar://problem/48311657>

        Reviewed by Saam Barati.

        * dfg/DFGLICMPhase.cpp:
        (JSC::DFG::LICMPhase::run):

2019-02-27  Antoine Quint  <graouts@apple.com>

        Support Pointer Events on macOS
        https://bugs.webkit.org/show_bug.cgi?id=195008
        <rdar://problem/47454419>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Remove poisons in JSCPoison and uses of them.
        https://bugs.webkit.org/show_bug.cgi?id=195082

        Reviewed by Yusuke Suzuki.

        Also removed unused poisoning code in WriteBarrier, AssemblyHelpers,
        DFG::SpeculativeJIT, FTLLowerDFGToB3, and FTL::Output.

        * API/JSAPIWrapperObject.h:
        (JSC::JSAPIWrapperObject::wrappedObject):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/glib/JSAPIWrapperGlobalObject.h:
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments):
        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
        (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon):
        (JSC::DFG::SpeculativeJIT::compileGetExecutable):
        (JSC::DFG::SpeculativeJIT::compileCreateThis):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::TrustedImmPtr::weakPoisonedPointer): Deleted.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetExecutable):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
        (JSC::FTL::DFG::LowerDFGToB3::weakPointer):
        (JSC::FTL::DFG::LowerDFGToB3::dynamicPoison): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnLoadedType): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnType): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::weakPoisonedPointer): Deleted.
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::weakPoisonedPointer): Deleted.
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitDynamicPoison): Deleted.
        (JSC::AssemblyHelpers::emitDynamicPoisonOnLoadedType): Deleted.
        (JSC::AssemblyHelpers::emitDynamicPoisonOnType): Deleted.
        * jit/AssemblyHelpers.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_create_this):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitScopedArgumentsGetByVal):
        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):
        (JSC::nativeForGenerator):
        (JSC::boundThisNoArgsFunctionCallGenerator):
        * parser/UnlinkedSourceCode.h:
        * runtime/ArrayPrototype.h:
        * runtime/CustomGetterSetter.h:
        (JSC::CustomGetterSetter::getter const):
        (JSC::CustomGetterSetter::setter const):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::getCallData):
        (JSC::InternalFunction::getConstructData):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::nativeFunctionFor):
        * runtime/JSArrayBuffer.h:
        * runtime/JSBoundFunction.h:
        * runtime/JSCPoison.cpp: Removed.
        * runtime/JSCPoison.h: Removed.
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSScriptFetchParameters.h:
        * runtime/JSScriptFetcher.h:
        * runtime/JSString.h:
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::hashFor const):
        * runtime/NativeExecutable.h:
        * runtime/Options.h:
        * runtime/ScopedArguments.h:
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::setSingleTransition):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::map const):
        (JSC::StructureTransitionTable::weakImpl const):
        (JSC::StructureTransitionTable::setMap):
        * runtime/WriteBarrier.h:
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmInstance.h:
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/JSWebAssemblyCodeBlock.h:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/JSWebAssemblyModule.h:
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
        (JSC::JSWebAssemblyTable::grow):
        (JSC::JSWebAssemblyTable::clearFunction):
        * wasm/js/JSWebAssemblyTable.h:
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::materializeImportJSCell):
        (JSC::Wasm::handleBadI64Use):
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunctionBase.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyModuleRecord.h:
        * wasm/js/WebAssemblyToJSCallee.h:
        * wasm/js/WebAssemblyWrapperFunction.h:

2019-02-26  Mark Lam  <mark.lam@apple.com>

        wasmToJS() should purify incoming NaNs.
        https://bugs.webkit.org/show_bug.cgi?id=194807
        <rdar://problem/48189132>

        Reviewed by Saam Barati.

        * runtime/JSCJSValue.h:
        (JSC::jsNumber):
        * runtime/TypedArrayAdaptors.h:
        (JSC::IntegralTypedArrayAdaptor::toJSValue):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):

2019-02-26  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix warnings on ARM and MIPS
        https://bugs.webkit.org/show_bug.cgi?id=195049

        Reviewed by Mark Lam.

        Fix all warnings on ARM and MIPS.

        * assembler/MacroAssemblerPrinter.cpp:
        (JSC::Printer::printMemory):
        * assembler/testmasm.cpp:
        (JSC::testProbeModifiesStackValues):
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::computeFor):
        * runtime/CachedTypes.cpp:
        (JSC::VariableLengthObject::buffer const):
        * runtime/JSBigInt.h:
        * tools/JSDollarVM.cpp:
        (JSC::codeBlockFromArg):

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Misc cleanup in StructureIDTable after r242096.
        https://bugs.webkit.org/show_bug.cgi?id=195063

        Reviewed by Saam Barati.

        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::allocateID):
        - RELEASE_ASSERT that the StructureID allocation will succeed.

        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::decode):
        (JSC::StructureIDTable::encode):
        - Add back a comment that Yusuke requested but was lost when the patch was rolled
          out and relanded.
        - Applied bitwise_casts that Saam requested.

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Gardening: 32-bit build fix after r242096.
        https://bugs.webkit.org/show_bug.cgi?id=194989

        Not reviewed.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):

2019-02-26  Mark Lam  <mark.lam@apple.com>

        Unpoison MacroAssemblerCodePtr, ClassInfo pointers, and a few other things.
        https://bugs.webkit.org/show_bug.cgi?id=195039

        Reviewed by Saam Barati.

        1. Unpoison MacroAssemblerCodePtrs, ReturnAddressPtr.
        2. Replace PoisonedClassInfoPtr with ClassInfo*.
        3. Replace PoisonedMasmPtr with const void*.
        4. Remove all references to CodeBlockPoison, JITCodePoison, and GlobalDataPoison.

        * API/JSCallbackObject.h:
        * API/JSObjectRef.cpp:
        (classInfoPrivate):
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):
        (JSC::FunctionPtr::executableAddress const):
        (JSC::FunctionPtr::retaggedExecutableAddress const):
        (JSC::ReturnAddressPtr::ReturnAddressPtr):
        (JSC::ReturnAddressPtr::value const):
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        (JSC::MacroAssemblerCodePtr:: const):
        (JSC::MacroAssemblerCodePtr::operator! const):
        (JSC::MacroAssemblerCodePtr::operator== const):
        (JSC::MacroAssemblerCodePtr::hash const):
        (JSC::MacroAssemblerCodePtr::emptyValue):
        (JSC::MacroAssemblerCodePtr::deletedValue):
        (JSC::FunctionPtr<tag>::FunctionPtr):
        (JSC::MacroAssemblerCodePtr::poisonedPtr const): Deleted.
        * b3/B3LowerMacros.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testInterpreter):
        * dfg/DFGOSRExitCompilerCommon.h:
        (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckSubClass):
        (JSC::DFG::SpeculativeJIT::compileNewStringObject):
        (JSC::DFG::SpeculativeJIT::emitSwitchIntJump):
        (JSC::DFG::SpeculativeJIT::emitSwitchImm):
        (JSC::DFG::SpeculativeJIT::emitSwitchCharStringJump):
        (JSC::DFG::SpeculativeJIT::emitSwitchChar):
        * dfg/DFGSpeculativeJIT.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewStringObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateDestructibleObject):
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):
        (JSC::boundThisNoArgsFunctionCallGenerator):
        * runtime/JSCPoison.h:
        * runtime/JSDestructibleObject.h:
        (JSC::JSDestructibleObject::classInfo const):
        * runtime/JSSegmentedVariableObject.h:
        (JSC::JSSegmentedVariableObject::classInfo const):
        * runtime/Structure.h:
        * runtime/VM.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):

2019-02-26  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Add some randomness into the StructureID.
        https://bugs.webkit.org/show_bug.cgi?id=194989
        <rdar://problem/47975563>

        Reviewed by Yusuke Suzuki.

        1. On 64-bit, the StructureID will now be encoded as:

            ----------------------------------------------------------------
            | 1 Nuke Bit | 24 StructureIDTable index bits | 7 entropy bits |
            ----------------------------------------------------------------

           The entropy bits are chosen at random and assigned when a StructureID is
           allocated.

        2. Instead of Structure pointers, the StructureIDTable will now contain
           encodedStructureBits, which is encoded as such:

            ----------------------------------------------------------------
            | 7 entropy bits |                   57 structure pointer bits |
            ----------------------------------------------------------------

           The entropy bits here are the same 7 bits used in the encoding of the
           StructureID for this structure entry in the StructureIDTable.

        3. Retrieval of the structure pointer given a StructureID is now computed as
           follows:

                index = structureID >> 7; // with arithmetic shift.
                encodedStructureBits = structureIDTable[index];
                structure = encodedStructureBits ^ (structureID << 57);

            We use an arithmetic shift for the right shift because that will preserve
            the nuke bit in the high bit of the index if the StructureID was not
            decontaminated before use as expected.

        4. Remove unused function loadArgumentWithSpecificClass() in SpecializedThunkJIT.

        5. Define StructureIDTable::m_size to be the number of allocated StructureIDs
           instead of always being the same as m_capacity.

        6. Change StructureIDTable::s_unusedID's value to 0.

           Its previous value of unusedPointer i.e. 0xd1e7beef, does not make sense for
           StructureID on 64-bit.  Also, there was never any code that initializes unused
           IDs to the s_unusedID.  The only meaningful value for s_unusedID is 0, which
           is the ID we'll get when the freelist is empty, prompting a resize of the
           structureIDTable.

        This patch appears to be perf neutral on JetStream 2 run via the cli on a
        11" MacBook Air, 13" MacBook Pro, iPhone 6S, and iPhone XR.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::loadStructure):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):
        * jit/AssemblyHelpers.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): Deleted.
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::StructureIDTable):
        (JSC::StructureIDTable::makeFreeListFromRange):
        (JSC::StructureIDTable::resize):
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::deallocateID):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::decode):
        (JSC::StructureIDTable::encode):
        (JSC::StructureIDTable::get):
        (JSC::StructureIDTable::isValid):

2019-02-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r242071.

        Breaks internal builds.

        Reverted changeset:

        "Add some randomness into the StructureID."
        https://bugs.webkit.org/show_bug.cgi?id=194989
        https://trac.webkit.org/changeset/242071

2019-02-26  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Fix compilation on 32-bit platforms after r242071
        https://bugs.webkit.org/show_bug.cgi?id=195042

        Reviewed by Carlos Garcia Campos.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):

2019-02-26  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Repeat string created from Array.prototype.join() take too much memory
        https://bugs.webkit.org/show_bug.cgi?id=193912

        Reviewed by Saam Barati.

        Added a fast case in Array.prototype.join when the array is
        uninitialized.

        * runtime/ArrayPrototype.cpp:
        (JSC::canUseFastJoin):
        (JSC::fastJoin):
        * runtime/JSStringInlines.h:
        (JSC::repeatCharacter): moved from StringPrototype.cpp
        * runtime/StringPrototype.cpp:

2019-02-25  Mark Lam  <mark.lam@apple.com>

        Add some randomness into the StructureID.
        https://bugs.webkit.org/show_bug.cgi?id=194989
        <rdar://problem/47975563>

        Reviewed by Yusuke Suzuki.

        1. On 64-bit, the StructureID will now be encoded as:

            ----------------------------------------------------------------
            | 1 Nuke Bit | 24 StructureIDTable index bits | 7 entropy bits |
            ----------------------------------------------------------------

           The entropy bits are chosen at random and assigned when a StructureID is
           allocated.

        2. Instead of Structure pointers, the StructureIDTable will now contain
           encodedStructureBits, which is encoded as such:

            ----------------------------------------------------------------
            | 7 entropy bits |                   57 structure pointer bits |
            ----------------------------------------------------------------

           The entropy bits here are the same 7 bits used in the encoding of the
           StructureID for this structure entry in the StructureIDTable.

        3. Retrieval of the structure pointer given a StructureID is now computed as
           follows:

                index = structureID >> 7; // with arithmetic shift.
                encodedStructureBits = structureIDTable[index];
                structure = encodedStructureBits ^ (structureID << 57);

            We use an arithmetic shift for the right shift because that will preserve
            the nuke bit in the high bit of the index if the StructureID was not
            decontaminated before use as expected.

        4. Remove unused function loadArgumentWithSpecificClass() in SpecializedThunkJIT.

        5. Define StructureIDTable::m_size to be the number of allocated StructureIDs
           instead of always being the same as m_capacity.

        6. Change StructureIDTable::s_unusedID's value to 0.

           Its previous value of unusedPointer i.e. 0xd1e7beef, does not make sense for
           StructureID on 64-bit.  Also, there was never any code that initializes unused
           IDs to the s_unusedID.  The only meaningful value for s_unusedID is 0, which
           is the ID we'll get when the freelist is empty, prompting a resize of the
           structureIDTable.

        This patch appears to be perf neutral on JetStream 2 run via the cli on a
        11" MacBook Air, 13" MacBook Pro, iPhone 6S, and iPhone XR.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::loadStructure):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):
        * jit/AssemblyHelpers.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): Deleted.
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::StructureIDTable):
        (JSC::StructureIDTable::makeFreeListFromRange):
        (JSC::StructureIDTable::resize):
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::deallocateID):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::decode):
        (JSC::StructureIDTable::encode):
        (JSC::StructureIDTable::get):
        (JSC::StructureIDTable::isValid):

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

        [JSC] Revert r226885 to make SlotVisitor creation lazy
        https://bugs.webkit.org/show_bug.cgi?id=195013

        Reviewed by Saam Barati.

        We once changed SlotVisitor creation apriori to drop the lock. Also, it turns out that SlotVisitor is memory-consuming.
        We should defer SlotVisitor creation until it is actually required. This patch reverts r226885. Even with this patch,
        we still hold many SlotVisitors after we execute many parallel markers at least once. But recovering the feature of
        dynamically allocating SlotVisitors helps further memory optimizations in this area.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::runBeginPhase):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::forEachSlotVisitor):
        (JSC::Heap::numberOfSlotVisitors):
        * heap/MarkingConstraintSolver.cpp:
        (JSC::MarkingConstraintSolver::didVisitSomething const):
        * heap/SlotVisitor.h:

2019-02-25  Saam Barati  <sbarati@apple.com>

        testb3 and testair should test O0/O1/O2
        https://bugs.webkit.org/show_bug.cgi?id=194637

        Reviewed by Mark Lam.

        This patch makes it so that we run all tests in testair and testb3
        in O0, O1, and O2. However, some tests are invalid for O0 and O1.
        This patch makes it so we only run those tests in O2. These are
        often tests that assert certain optimizations have occurred. There
        are also a class of tests that rely on using patchpoints to stress 
        the register allocator into only a single valid allocation. The
        O0, and sometimes O1, register allocators are not always good enough
        to allocate such programs. To make these valid allocators to use, we rely
        on the FTL and Wasm to not emit such patchpoints.

        * b3/air/testair.cpp:
        (main):
        * b3/testb3.cpp:
        (JSC::B3::compileProc):
        (JSC::B3::testAddLoadTwice):
        (JSC::B3::testMulLoadTwice):
        (JSC::B3::testSimplePatchpointWithOuputClobbersGPArgs):
        (JSC::B3::testSimplePatchpointWithOuputClobbersFPArgs):
        (JSC::B3::testPatchpointWithEarlyClobber):
        (JSC::B3::testSimpleCheck):
        (JSC::B3::testCheckFalse):
        (JSC::B3::testCheckTrue):
        (JSC::B3::testCheckLessThan):
        (JSC::B3::testCheckMegaCombo):
        (JSC::B3::testCheckTrickyMegaCombo):
        (JSC::B3::testCheckTwoMegaCombos):
        (JSC::B3::testCheckTwoNonRedundantMegaCombos):
        (JSC::B3::testCheckAddImm):
        (JSC::B3::testCheckAddImmCommute):
        (JSC::B3::testCheckAddImmSomeRegister):
        (JSC::B3::testCheckAdd):
        (JSC::B3::testCheckAdd64):
        (JSC::B3::testCheckAddFold):
        (JSC::B3::testCheckAddFoldFail):
        (JSC::B3::testCheckAddSelfOverflow64):
        (JSC::B3::testCheckAddSelfOverflow32):
        (JSC::B3::testCheckSubImm):
        (JSC::B3::testCheckSubBadImm):
        (JSC::B3::testCheckSub):
        (JSC::B3::testCheckSub64):
        (JSC::B3::testCheckSubFold):
        (JSC::B3::testCheckSubFoldFail):
        (JSC::B3::testCheckNeg):
        (JSC::B3::testCheckNeg64):
        (JSC::B3::testCheckMul):
        (JSC::B3::testCheckMulMemory):
        (JSC::B3::testCheckMul2):
        (JSC::B3::testCheckMul64):
        (JSC::B3::testCheckMulFold):
        (JSC::B3::testCheckMulFoldFail):
        (JSC::B3::testCheckMul64SShr):
        (JSC::B3::testLinearScanWithCalleeOnStack):
        (JSC::B3::testCheckSelect):
        (JSC::B3::testCheckSelectCheckSelect):
        (JSC::B3::testCheckSelectAndCSE):
        (JSC::B3::testLateRegister):
        (JSC::B3::testReduceStrengthCheckBottomUseInAnotherBlock):
        (JSC::B3::testSomeEarlyRegister):
        (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled2):
        (JSC::B3::testPinRegisters):
        (JSC::B3::testX86LeaAddAddShlLeft):
        (JSC::B3::testX86LeaAddAddShlRight):
        (JSC::B3::testX86LeaAddAdd):
        (JSC::B3::testX86LeaAddShlRight):
        (JSC::B3::testX86LeaAddShlLeftScale1):
        (JSC::B3::testX86LeaAddShlLeftScale2):
        (JSC::B3::testX86LeaAddShlLeftScale4):
        (JSC::B3::testX86LeaAddShlLeftScale8):
        (JSC::B3::testLoadBaseIndexShift2):
        (JSC::B3::testOptimizeMaterialization):
        (JSC::B3::testLICMPure):
        (JSC::B3::testLICMPureSideExits):
        (JSC::B3::testLICMPureWritesPinned):
        (JSC::B3::testLICMPureWrites):
        (JSC::B3::testLICMReadsPinned):
        (JSC::B3::testLICMReads):
        (JSC::B3::testLICMPureNotBackwardsDominant):
        (JSC::B3::testLICMPureNotBackwardsDominantFoiledByChild):
        (JSC::B3::testLICMControlDependent):
        (JSC::B3::testLICMControlDependentNotBackwardsDominant):
        (JSC::B3::testLICMReadsWritesDifferentHeaps):
        (JSC::B3::testWasmBoundsCheck):
        (JSC::B3::run):
        (main):

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

        [JSC] stress/function-constructor-reading-from-global-lexical-environment.js fails in 32bit arch
        https://bugs.webkit.org/show_bug.cgi?id=195030
        <rdar://problem/48385088>

        Reviewed by Saam Barati.

        While LLInt64 has checkTDZInGlobalPutToScopeIfNecessary for op_put_to_scope GlobalLexicalVar to check the value in the variable slot is not empty,
        this check is missing in LLInt32_64. Previously, this check was subsumed accidentally by the WatchpointSet check in GlobalLexicalVar in `notifyWrite`:
        because no "put" attempt succeeds here, the status WatchpointSet was ClearWatchpoint, we always go to the slow path, and we always throw the TDZ error
        before configuring the WatchpointSet in the slow path. But after r241862, WatchpointSet is not used under non-JIT configuration. This skips WatchpointSet
        check and LLInt32_64 starts failing tests because of lack of checkTDZInGlobalPutToScopeIfNecessary. This patch adds checkTDZInGlobalPutToScopeIfNecessary
        in LLInt32_64 too. This patch fixes the following four failing tests.

            stress/function-constructor-reading-from-global-lexical-environment.js.bytecode-cache
            stress/function-constructor-reading-from-global-lexical-environment.js.default
            stress/global-lexical-variable-tdz.js.bytecode-cache
            stress/global-lexical-variable-tdz.js.default

        * llint/LowLevelInterpreter32_64.asm:

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

        [JSC] Make Intl fields lazily-allocated
        https://bugs.webkit.org/show_bug.cgi?id=195022

        Reviewed by Mark Lam.

        This patch makes the following memory footprint optimization in IntlObject.

        1. Make IntlObject fields including Intl.Collator lazily-allocated because we already removed direct references from JS builtins to these constructors (@Collator etc.).

        2. Move LazyProperty<IntlObject, Structure> structures from IntlObject to JSGlobalObject. This makes sizeof(IntlObject) the same to the other ones of usual runtime Objects,
           and drop one MarkedBlock.

        * runtime/IntlCollatorConstructor.h:
        * runtime/IntlDateTimeFormatConstructor.h:
        * runtime/IntlNumberFormatConstructor.h:
        * runtime/IntlObject.cpp:
        (JSC::createCollatorConstructor):
        (JSC::createNumberFormatConstructor):
        (JSC::createDateTimeFormatConstructor):
        (JSC::createPluralRulesConstructor):
        (JSC::IntlObject::finishCreation):
        (JSC::IntlObject::visitChildren): Deleted.
        * runtime/IntlObject.h:
        * runtime/IntlPluralRulesConstructor.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::defaultCollator):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::collatorStructure):
        (JSC::JSGlobalObject::numberFormatStructure):
        (JSC::JSGlobalObject::dateTimeFormatStructure):
        (JSC::JSGlobalObject::pluralRulesStructure):
        (JSC::JSGlobalObject::intlObject const): Deleted.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncDateTimeFormat):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToLocaleString):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncLocaleCompare):

2019-02-25  Tadeu Zagallo  <tzagallo@apple.com>

        Avoid hashing CompactVariableEnvironment when decoding CompactVariableMap::Handle
        https://bugs.webkit.org/show_bug.cgi?id=194937

        Reviewed by Saam Barati.

        Hashing the CompactVariableEnvironment is expensive and we could avoid it
        when decoding multiple handles to the same environment. This is sound because
        a pointer to the same CompactVariableEnvironment will hash the same.

        * runtime/CachedTypes.cpp:
        (JSC::Decoder::handleForEnvironment const):
        (JSC::Decoder::setHandleForEnvironment):
        (JSC::CachedCompactVariableMapHandle::decode const):

2019-02-25  Tadeu Zagallo  <tzagallo@apple.com>

        Remove unnecessary WTF:: prefixes in CachedTypes
        https://bugs.webkit.org/show_bug.cgi?id=194936

        Reviewed by Saam Barati.

        Cleanup unnecessary prefixes from Optional, roundUpToMultipleOf and
        pageSize.

        * runtime/CachedTypes.cpp:
        (JSC::Encoder::cachedOffsetForPtr):
        (JSC::Encoder::Page::malloc):
        (JSC::Encoder::allocateNewPage):
        (JSC::CachedPtr::encode):
        (JSC::CachedPtr::decode const):
        (JSC::CachedOptional::encode):
        (JSC::CachedOptional::decode const):

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

        [JSC] Drop direct references to Intl constructors by rewriting Intl JS builtins in C++
        https://bugs.webkit.org/show_bug.cgi?id=194976

        Reviewed by Michael Saboff.

        This patch paves the way to making IntlObject allocation lazy by removing direct references
        to Intl constructors (Intl.Collator etc.) from builtin JS. To achieve that,

        1. We implement String.prototype.toLocaleCompare and Number.prototype.toLocaleString in C++
           instead of JS builtins. Since these functions end up calling ICU C++ runtime, writing them in
           JS does not offer performance improvement.

        2. We remove @DateTimeFormat constructor reference, and instead, exposing @dateTimeFormat function,
           which returns formatted string directly. We still have JS builtins for DateTimeFormat things
           because the initialization of its "options" JSObject involves many get_by_id / put_by_id things,
           which are efficient in JS. But we avoid exposing @DateTimeFormat directly, so that Intl constructors
           can be lazily allocated.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/BuiltinNames.h:
        * builtins/DatePrototype.js:
        (toLocaleString):
        (toLocaleDateString):
        (toLocaleTimeString):
        * builtins/NumberPrototype.js: Removed.
        * builtins/StringPrototype.js:
        (intrinsic.StringPrototypeReplaceIntrinsic.replace):
        (globalPrivate.getDefaultCollator): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::defaultCollator):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncDateTimeFormat):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::finishCreation):
        (JSC::throwVMToThisNumberError):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        (JSC::stringProtoFuncLocaleCompare):

2019-02-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: Change the InspectorOverlay to use native rather than canvas
        https://bugs.webkit.org/show_bug.cgi?id=105023
        <rdar://problem/13443692>

        Reviewed by Brian Burg.

        * inspector/protocol/OverlayTypes.json: Removed.
        Now that the overlay is entirely generated in C++, we no longer need the special prototol
        types for transferring data to a JavaScript context.

        * inspector/protocol/Debugger.json:
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::setOverlayMessage): Deleted.
        Remove `Debugger.setOverlayMessage` command as it hasn't been used and is no longer supported.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:

2019-02-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Lazily create sentinel Map and Set buckets
        https://bugs.webkit.org/show_bug.cgi?id=194975

        Reviewed by Saam Barati.

        If VM::canUseJIT() returns false, we can lazily initialize sentinel Map and Set buckets.
        This patch adds getters to VM which lazily allocate these buckets. We eagerly initialize
        them if VM::canUseJIT() returns true since they can be touched from DFG and FTL.

        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        (JSC::BytecodeIntrinsicRegistry::sentinelMapBucketValue):
        (JSC::BytecodeIntrinsicRegistry::sentinelSetBucketValue):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetMapBucketNext):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucketNext):
        * runtime/MapConstructor.cpp:
        (JSC::mapPrivateFuncMapBucketNext):
        * runtime/SetConstructor.cpp:
        (JSC::setPrivateFuncSetBucketNext):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::sentinelSetBucketSlow):
        (JSC::VM::sentinelMapBucketSlow):
        * runtime/VM.h:
        (JSC::VM::sentinelSetBucket):
        (JSC::VM::sentinelMapBucket):

2019-02-20  Darin Adler  <darin@apple.com>

        Finish removing String::format
        https://bugs.webkit.org/show_bug.cgi?id=194893

        Reviewed by Daniel Bates.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::nameForRegister): Use makeString instead of String::format,
        using the new "pad" function.

2019-02-23  Robin Morisset  <rmorisset@apple.com>

        Remove dead code: AdjacencyList::justOneChild()
        https://bugs.webkit.org/show_bug.cgi?id=194965

        Reviewed by Sam Weinig.

        * dfg/DFGAdjacencyList.h:
        (JSC::DFG::AdjacencyList::justOneChild const): Deleted.

2019-02-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wunused-param warning

        * jsc.cpp:

2019-02-23  Mark Lam  <mark.lam@apple.com>

        Add an exception check and some assertions in StringPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=194962
        <rdar://problem/48013416>

        Reviewed by Yusuke Suzuki and Saam Barati.

        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-22  Robin Morisset  <rmorisset@apple.com>

        DFGBytecodeParser should not declare that a node won't clobberExit if DFGFixupPhase can later declare it does clobberExit
        https://bugs.webkit.org/show_bug.cgi?id=194953
        <rdar://problem/47595253>

        Reviewed by Saam Barati.

        For each node that
        (a) may or may not clobberExit depending on their arrayMode
        (b) and get their arrayMode from profiling information in DFGBytecodeParser
        (c) and can have their arrayMode refined by DFGFixupPhase,
        We must make sure to be conservative in the DFGBytecodeParser and treat it as if it unconditionnally clobbered the exit.
        Otherwise we will hit a validation failure after fixup if the next node was marked ExitValid and exits to the same semantic origin.

        The list of nodes that fit (a) is:
        - StringCharAt
        - HasIndexProperty
        - GetByVal
        - PutByValDirect
        - PutByVal
        - PutByValAlias
        - GetIndexedPropertyStorage

        Out of these, the following also fit (b) and (c):
        - HasIndexedProperty
        - GetByVal
        - PutByValDirect
        - PutByVal

        GetByVal already had "m_exitOK = false; // GetByVal must be treated as if it clobbers exit state, since FixupPhase may make it generic."
        So we just have to fix the other three the same way.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):

2019-02-22  Robin Morisset  <rmorisset@apple.com>

        B3ReduceStrength: missing peephole optimizations for binary operations
        https://bugs.webkit.org/show_bug.cgi?id=194252

        Reviewed by Saam Barati.

        Adds several sets of optimizations for BitAnd, BitOr and BitXor.
        Using BitAnd distributivity over BitOr and BitXor:
          Turn any of these (for Op == BitOr || Op == BitXor):
                Op(BitAnd(x1, x2), BitAnd(x1, x3))
                Op(BitAnd(x2, x1), BitAnd(x1, x3))
                Op(BitAnd(x1, x2), BitAnd(x3, x1))
                Op(BitAnd(x2, x1), BitAnd(x3, x1))
           Into this: BitAnd(Op(x2, x3), x1)
           And any of these:
                Op(BitAnd(x1, x2), x1)
                Op(BitAnd(x2, x1), x1)
                Op(x1, BitAnd(x1, x2))
                Op(x1, BitAnd(x2, x1))
           Into this: BitAnd(Op(x2, x1), x1)
           This second set is equivalent to doing x1 => BitAnd(x1, x1), and then applying the first set.
        Using de Morgan laws (we represent not as BitXor with allOnes):
          BitAnd(BitXor(x1, allOnes), BitXor(x2, allOnes)) => BitXor(BitOr(x1, x2), allOnes)
          BitOr(BitXor(x1, allOnes), BitXor(x2, allOnes) => BitXor(BitAnd(x1, x2), allOnes)
          BitOr(BitXor(x, allOnes), c) => BitXor(BitAnd(x, ~c), allOnes)
          BitAnd(BitXor(x, allOnes), c) => BitXor(BitOr(x, ~c), allOnes)
        The latter two are equivalent to doing c => BitXor(~c, allOnes), and then applying the former two.

        All of these transformations either reduce the number of operations (which we always do when possible), or bring the expression closer to having:
          - BitXor with all ones at the outermost
          - then BitAnd
          - then other BitXor
          - then BitOr at the innermost.
        These transformations that don't directly reduce the number of operations are still useful for normalization (helping things like CSE), and also can enable
        more optimizations (for example BitXor with all ones can easily cancel each other once they are all at the outermost level).

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testBitAndNotNot):
        (JSC::B3::testBitAndNotImm):
        (JSC::B3::testBitOrAndAndArgs):
        (JSC::B3::testBitOrAndSameArgs):
        (JSC::B3::testBitOrNotNot):
        (JSC::B3::testBitOrNotImm):
        (JSC::B3::testBitXorAndAndArgs):
        (JSC::B3::testBitXorAndSameArgs):
        (JSC::B3::run):

2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] putNonEnumerable in JSWrapperMap is too costly
        https://bugs.webkit.org/show_bug.cgi?id=194935

        Reviewed by Mark Lam.

        When we convert Objective-C blocks to JS objects, we need to set up a corresponding function object correctly.
        During this allocation, we call [JSValue defineProperty:descriptor] to connect a "prototype" object and "constructor" object.
        The problem is that this API has a particularly costly implementation:

            [[_context globalObject][@"Object"] invokeMethod:@"defineProperty" withArguments:@[ self, key, descriptor ]];

        This wraps each JS objects appear in this code with Objective-C wrapper. And we convert a NSDictionary to JSObject, which
        has "writable", "enumerable", "configurable", "value" fields, and call the "defineProperty" JS function through Objective-C wrapper.
        This allocates many Objective-C wrappers and JS objects for descriptors. Since JSC has a direct C++ API "defineOwnProperty", we should
        bypass these Objective-C APIs and call JSC's code directly.

        This patch changes `putNonEnumerable` implementation, from calling [JSValue defineProperty:descriptor] to calling JSC C++ code directly.
        We do not change [JSValue defineProperty:descriptor] implementation for now because of two reasons. (1) This is not used in our benchmarks
        except for this (converting an Objective-C block to a JS object) one path. And (2) even if we were to re-write [JSValue defineProperty:descriptor]
        to be more optimized, we would still want to call the JSC C++ version of defineProperty directly here to avoid NSDictionary allocation for a descriptor.

        * API/APIUtils.h:
        (setException):
        * API/JSWrapperMap.mm:
        (putNonEnumerable):
        (copyMethodsToObject):
        (-[JSObjCClassInfo allocateConstructorAndPrototypeInContext:]):
        (-[JSObjCClassInfo wrapperForObject:inContext:]):

2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix after r241954
        https://bugs.webkit.org/show_bug.cgi?id=194939

        Renaming setCanAccessHeap was incomplete.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        * runtime/VM.cpp:
        (JSC::VM::~VM):

2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SmallStringsStorage is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=194939

        Reviewed by Mark Lam.

        SmallStrings hold common small JSStrings. Their underlying StringImpl is also held by SmallStringsStorage.
        But it is duplicate since we can get StringImpl from small JSStrings. This patch removes SmallStringsStorage,
        and get StringImpls from JSStrings if necessary.

        We also add m_canAccessHeap flag to SmallStrings. At the time of VM destruction, JSStrings are destroyed when
        VM's Heap is finalized. We must not touch JSStrings before VM's heap (and JSStrings in SmallStrings) is initialized,
        and after VM's Heap is destroyed. We add this m_canAccessHeap flag to allow users to get StringImpl during the
        this sensitive period. If m_canAccessHeap is false, we get StringImpl from AtomicStringImpl::add.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        (JSC::SmallStrings::singleCharacterStringRep):
        (JSC::SmallStringsStorage::rep): Deleted.
        (JSC::SmallStringsStorage::SmallStringsStorage): Deleted.
        (JSC::SmallStrings::createSingleCharacterString): Deleted.
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::setCanAccessHeap):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::~VM):

2019-02-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache CompactVariableMap::Handle instead of VariableEnvironment for UnlinkedFunctionExecutable
        https://bugs.webkit.org/show_bug.cgi?id=194706

        Reviewed by Saam Barati.

        In https://bugs.webkit.org/show_bug.cgi?id=194583 we started using a
        CompactVariableMap::Handle instead of VariableEnvironment for
        UnlinkedFunctionExecutables, but we were creating the full environment
        to encode the executable in the bytecode cache. This patch changes it so
        that we cache the handle instead of the environment. This avoids duplicating
        the VariableEnvironment whenever we have to cache two handles that point
        to the environment.

        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/VariableEnvironment.cpp:
        (JSC::CompactVariableMap::get):
        * parser/VariableEnvironment.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedCompactVariableEnvironment::encode):
        (JSC::CachedCompactVariableEnvironment::decode const):
        (JSC::CachedCompactVariableMapHandle::encode):
        (JSC::CachedCompactVariableMapHandle::decode const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):

2019-02-21  Saam Barati  <sbarati@apple.com>

        Update JSScript SPI based on feedback
        https://bugs.webkit.org/show_bug.cgi?id=194517

        Reviewed by Keith Miller.

        This patch updates the JSScript SPI in the following ways:
        - JSScript can now represent both modules and programs. This is a property
        of the script determined during creation.
        - JSScript now takes a sourceURL during construction. For modules, this acts
        as the module identifier.
        - JSScript now has SPI for writing the cache out to disk. We don't do this
        automatically.
        - JSScript will load the bytecode cache on creation if it exists.
        - We retrofit these new requirements on the prior JSScript SPI that
        we're going to remove as soon as we can: https://bugs.webkit.org/show_bug.cgi?id=194909.
        Previous SPI assumes all JSScripts are modules. Previous SPI also assigns
        a sourceURL to the JSScript based on what the module loader decided the
        identifier should be. We'll remove this once we remove the old SPI.
        
        This patch also adds SPI to JSContext to evaluate a JSScript. For modules,
        this is like returning the result of doing dynamic import. For programs,
        this does normal program evaluation.
        
        This patch also fixes a bug in generateBytecode/generateModuleBytecode where
        we would try to cache the bytecode even if recursivelyGenerateUnlinkedCodeBlock
        returned null. E.g, if the script had a syntax error.
        
        When writing tests, I also discovered that someone previously broke
        testapi. This patch also fixes those failures. They were broken when
        we switched to using a testapiScripts directory to hold our test .js
        scripts. 

        * API/JSAPIGlobalObject.h:
        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderResolve):
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule):
        * API/JSBase.cpp:
        (JSEvaluateScriptInternal):
        (JSEvaluateScript):
        * API/JSBaseInternal.h: Added.
        * API/JSContext.mm:
        (-[JSContext evaluateScript:withSourceURL:]):
        (-[JSContext evaluateJSScript:]):
        * API/JSContextPrivate.h:
        * API/JSScript.h:
        * API/JSScript.mm:
        (+[JSScript scriptWithSource:inVirtualMachine:]):
        (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        (createError):
        (+[JSScript scriptOfType:inVirtualMachine:withSourceURL:andSource:andBytecodeCache:error:]):
        (+[JSScript scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:]):
        (-[JSScript cacheBytecodeWithError:]):
        (-[JSScript sourceURL]):
        (-[JSScript type]):
        (-[JSScript jsSourceCode]):
        (-[JSScript writeCache:]):
        (-[JSScript setSourceURL:]):
        (-[JSScript forceRecreateJSSourceCode]):
        (-[JSScript writeCache]): Deleted.
        (-[JSScript jsSourceCode:]): Deleted.
        * API/JSScriptInternal.h:
        * API/tests/FunctionOverridesTest.cpp:
        (testFunctionOverrides):
        * API/tests/testapi.c:
        (main):
        * API/tests/testapi.mm:
        (tempFile):
        (testModuleBytecodeCache):
        (testProgramBytecodeCache):
        (testBytecodeCacheWithSyntaxError):
        (testProgramJSScriptException):
        (testLoadBasicFileLegacySPI):
        (+[JSContextMemoryMappedLoaderDelegate newContext]):
        (-[JSContextMemoryMappedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
        (testLoadBasicFile):
        (+[JSContextAugmentedLoaderDelegate newContext]):
        (-[JSContextAugmentedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
        (testJSScriptURL):
        (testObjectiveCAPI):
        (testBytecodeCache): Deleted.
        * API/tests/testapiScripts/foo.js: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Completion.cpp:
        (JSC::generateBytecode):
        (JSC::generateModuleBytecode):

2019-02-21  Mark Lam  <mark.lam@apple.com>

        Add more doesGC() assertions.
        https://bugs.webkit.org/show_bug.cgi?id=194911
        <rdar://problem/48285723>

        Reviewed by Saam Barati and Yusuke Suzuki.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileOSRExit):
        - Set expectDoesGC here because we no longer have to worry about missing store
          barriers in optimized code after this point.  This will prevent false positive
          assertion failures arising from functions called beneath compileOSRExit().

        (JSC::DFG::OSRExit::compileExit):
        - Add a comment to explain why the generated ramp needs to set expectDoesGC even
          though compileOSRExit() also sets it.  Reason: compileOSRExit() is only called
          for the first OSR from this code origin, the generated ramp is called for many
          subsequents OSR exits from this code origin.

        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        - Added a comment for the equivalent reason to the one above.

        (JSC::FTL::compileFTLOSRExit):
        - Set expectDoesGC here because we no longer have to worry about missing store
          barriers in optimized code after this point.  This will prevent false positive
          assertion failures arising from functions called beneath compileFTLOSRExit().

        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::tryAllocateSlow):
        * heap/CompleteSubspaceInlines.h:
        (JSC::CompleteSubspace::allocateNonVirtual):
        - assert expectDoesGC.

        * heap/DeferGC.h:
        (JSC::DeferGC::~DeferGC):
        - assert expectDoesGC.
        - Also added WTF_FORBID_HEAP_ALLOCATION to DeferGC, DeferGCForAWhile, and DisallowGC
          because all 3 should be stack allocated RAII objects.

        * heap/GCDeferralContext.h:
        * heap/GCDeferralContextInlines.h:
        (JSC::GCDeferralContext::~GCDeferralContext):
        - Added WTF_FORBID_HEAP_ALLOCATION.
        - assert expectDoesGC.

        * heap/Heap.cpp:
        (JSC::Heap::collectNow):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectIfNecessaryOrDefer):
        * heap/HeapInlines.h:
        (JSC::Heap::acquireAccess):
        (JSC::Heap::stopIfNecessary):
        * heap/LargeAllocation.cpp:
        (JSC::LargeAllocation::tryCreate):
        * heap/LocalAllocatorInlines.h:
        (JSC::LocalAllocator::allocate):
        - conservatively assert expectDoesGC on these functions that may trigger a GC
          though they don't always do.

        * runtime/DisallowScope.h:
        - DisallowScope should be stack allocated because it's an RAII object.

        * runtime/JSCellInlines.h:
        (JSC::tryAllocateCellHelper):
        - Remove the expectDoesGC assertion because it is now covered by assertions in
          CompleteSubspace, LargeAllocation, and LocalAllocator.

        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):
        - assert expectDoesGC.

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

        [JSC] Use Fast Malloc as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=194316

        Reviewed by Mark Lam.

        We should use Fast Malloc as much as possible to offer the whole memory view to bmalloc.

        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.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/ExecutableAllocator.h:
        * jsc.cpp:
        * runtime/JSRunLoopTimer.h:
        * tools/VMInspector.h:
        * wasm/WasmThunks.h:

2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove WatchpointSet creation for SymbolTable entries if VM::canUseJIT() returns false
        https://bugs.webkit.org/show_bug.cgi?id=194891

        Reviewed by Geoffrey Garen.

        WatchpointSet in SymbolTable is used to fold the value into a constant in JIT tiers. And it is
        not useful under the non-JIT mode. This patch avoids creation of WatchpointSet in SymbolTable
        if VM::canUseJIT() returns false.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTableEntry::addWatchpoint): Deleted.
        * runtime/SymbolTable.h:
        (JSC::SymbolTableEntry::isWatchable const):
        (JSC::SymbolTableEntry::watchpointSet):

2019-02-20  Mark Lam  <mark.lam@apple.com>

        Add code to validate expected GC activity modelled by doesGC() against what the runtime encounters.
        https://bugs.webkit.org/show_bug.cgi?id=193938
        <rdar://problem/47616277>

        Reviewed by Michael Saboff, Saam Barati, and Robin Morisset.

        In DFG::SpeculativeJIT::compile() and FTL::LowerDFGToB3::compileNode(), before
        emitting code / B3IR for each DFG node, we emit a write to set Heap::m_expectDoesGC
        to the value returned by doesGC() for that node.  In the runtime (i.e. in allocateCell()
        and functions that can resolve a rope), we assert that Heap::m_expectDoesGC is
        true.

        This validation code is currently only enabled for debug builds.  It is disabled
        for release builds by default, but it can easily be made to run on release builds
        as well by forcing ENABLE_DFG_DOES_GC_VALIDATION to 1 in Heap.h.

        To allow this validation code to run on release builds as well, the validation uses
        RELEASE_ASSERT instead of ASSERT.

        To ensure that Heap.h is #include'd for all files that needs to do this validation
        (so that the validation code is accidentally disabled), we guard the validation
        code with an if conditional on constexpr bool validateDFGDoesGC (instead of using
        a #if ENABLE(DFG_DOES_GC_VALIDATION)).  This way, if Heap.h isn't #include'd, the
        validation code will fail to build (no silent failures).

        Currently, all JSC tests and Layout tests should pass with this validation enabled
        in debug builds.  We'll only see new failures if there's a regression or if new
        tests reveal a previously untested code path that has an undetected issue.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        (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):
        * heap/Heap.h:
        (JSC::Heap::expectDoesGC const):
        (JSC::Heap::setExpectDoesGC):
        (JSC::Heap::addressOfExpectDoesGC):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJump):
        * runtime/JSCellInlines.h:
        (JSC::tryAllocateCellHelper):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::JSString::toAtomicString const):
        (JSC::JSString::toExistingAtomicString const):
        (JSC::JSString::value const):
        (JSC::JSString::tryGetValue const):
        (JSC::JSRopeString::unsafeView const):
        (JSC::JSRopeString::viewWithUnderlyingString const):
        (JSC::JSString::unsafeView const):

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * heap/HeapSnapshotBuilder.h:
        * heap/HeapSnapshotBuilder.cpp:
        Update the snapshot version. Change the node's 0 | 1 internal value
        to be a 32bit bit flag. This is nice in that it is both compatible
        with the previous snapshot version and the same size. We can use more
        flags in the future.

        (JSC::HeapSnapshotBuilder::json):
        In cases where the classInfo gives us "Object" check for a better
        class name by checking (o).__proto__.constructor.name. We avoid this
        check in cases where (o).hasOwnProperty("constructor") which is the
        case for most Foo.prototype objects. Otherwise this would get the
        name of the Foo superclass for the Foo.prototype object.

        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        Handle some possible edge cases that were not handled before, such as
        a JSObject without a GlobalObject or an object which doesn't
        have a default getPrototype. Try to make the code a little clearer.

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * heap/HeapSnapshotBuilder.h:
        * heap/HeapSnapshotBuilder.cpp:
        Update the snapshot version. Change the node's 0 | 1 internal value
        to be a 32bit bit flag. This is nice in that it is both compatible
        with the previous snapshot version and the same size. We can use more
        flags in the future.

        (JSC::HeapSnapshotBuilder::json):
        In cases where the classInfo gives us "Object" check for a better
        class name by checking (o).__proto__.constructor.name. We avoid this
        check in cases where (o).hasOwnProperty("constructor") which is the
        case for most Foo.prototype objects. Otherwise this would get the
        name of the Foo superclass for the Foo.prototype object.

        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        Handle some possible edge cases that were not handled before, such as
        a JSObject without a GlobalObject or an object which doesn't
        have a default getPrototype. Try to make the code a little clearer.

2019-02-19  Robin Morisset  <rmorisset@apple.com>

        B3-O2 incorrectly optimizes this subtest
        https://bugs.webkit.org/show_bug.cgi?id=194625

        Reviewed by Saam Barati.

        Trivial fix. Instead of doing
            if (!cond) foo else bar => if (cond) bar else foo
        B3LowerToAir was doing
            if (x^C) foo else bar => if (cond) bar else foo whenever C&1, even if C was for example 3.

        * b3/B3LowerToAir.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testBitNotOnBooleanAndBranch32):
        (JSC::B3::testNotOnBooleanAndBranch32): Added.

2019-02-19  Robin Morisset  <rmorisset@apple.com>

        CachedCall should not consider it UNLIKELY that it will not stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=194831

        Reviewed by Mark Lam.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):

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

        Fix DFG doesGC() for TryGetById and ProfileType nodes.
        https://bugs.webkit.org/show_bug.cgi?id=194821
        <rdar://problem/48206690>

        Reviewed by Saam Barati.

        Fix doesGC() for the following nodes:

            ProfileType:
                calls operationProcessTypeProfilerLogDFG(), which can calculatedClassName(),
                which can call JSString::tryGetValue(), which can resolve a rope.

            TryGetById:
                calls operationTryGetByIdOptimize(), which can startWatchingPropertyForReplacements()
                on a structure, which can allocate StructureRareData.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

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

        [JSC] Introduce JSNonDestructibleProxy for JavaScriptCore.framework's GlobalThis
        https://bugs.webkit.org/show_bug.cgi?id=194799

        Reviewed by Saam Barati.

        JSProxy is destructible one because we have JSWindowProxy which has ref counted object.
        However, JavaScriptCore.framework's JSProxy for GlobalThis does not need to be destructible.
        This is important since we need to separate Heap subspaces between destructible and non-destructible objects.
        If we can put more and more objects in non-destructible status, we can get rid of low-usage MarkedBlock.
        This patch adds JSNonDestructibleProxy, which is not destructible JSProxy. While it inherits JSDestructibleObject,
        we can make the subclass still non-destructible thanks to Subspace mechanism. This drops one more low-usage MarkedBlock.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::finishCreation):
        * runtime/JSNonDestructibleProxy.cpp: Added.
        * runtime/JSNonDestructibleProxy.h: Added.
        (JSC::JSNonDestructibleProxy::subspaceFor):
        (JSC::JSNonDestructibleProxy::create):
        (JSC::JSNonDestructibleProxy::createStructure):
        (JSC::JSNonDestructibleProxy::JSNonDestructibleProxy):
        * runtime/JSProxy.h:
        (JSC::JSProxy::JSProxy):

2019-02-19  Robin Morisset  <rmorisset@apple.com>

        B3ReduceStrength::simplifyCFG() could do a lot more on each iteration
        https://bugs.webkit.org/show_bug.cgi?id=194475

        Reviewed by Saam Barati.

        B3ReduceStrength::simplifyCFG() does three optimizations (which I will call A, B and C):
        - A makes any terminal that points to a block that is empty except for a jump point to that jump's target instead.
        - B transforms any branch or switch that points to a single block into a jump
        - C finds blocks ending with jumps, whose successor has a single predecessor, and inline that successor block in place of the jump

        It currently is limited in the following way:
        - A and C can only fire once per block per iteration
        - B can create jumps that would trigger A, but they may not be seen until the next iteration

        Both problems are mitigated by going through the blocks in post-order, so that when a block is optimized most of its successors have already been optimized.
        In a sense it is the symmetric of the peephole optimizer that goes in pre-order so that when an instruction is optimized most of its children have already been optimized.

        On JetStream2 it reduces the average number of iterations from 3.35 to 3.24.

        * b3/B3ReduceStrength.cpp:

2019-02-19  Tadeu Zagallo  <tzagallo@apple.com>

        Move bytecode cache-related filesystem code out of CodeCache
        https://bugs.webkit.org/show_bug.cgi?id=194675

        Reviewed by Saam Barati.

        The code is only used for the bytecode-cache tests, so it should live in
        jsc.cpp rather than in the CodeCache. The logic now lives in ShellSourceProvider,
        which overrides the a virtual method in SourceProvider, `cacheBytecode`,
        in order to write the cache to disk.

        * jsc.cpp:
        (ShellSourceProvider::create):
        (ShellSourceProvider::~ShellSourceProvider):
        (ShellSourceProvider::cachePath const):
        (ShellSourceProvider::loadBytecode):
        (ShellSourceProvider::ShellSourceProvider):
        (jscSource):
        (GlobalObject::moduleLoaderFetch):
        (functionDollarEvalScript):
        (runWithOptions):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::cacheBytecode const):
        * runtime/CodeCache.cpp:
        (JSC::writeCodeBlock):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::fetchFromDiskImpl):

2019-02-18  Dominik Infuehr  <dinfuehr@igalia.com>

        [ARM] Fix crash with sampling profiler
        https://bugs.webkit.org/show_bug.cgi?id=194772

        Reviewed by Mark Lam.

        sampling-profiler-richards.js was crashing with an enabled sampling profiler. add32
        did not update the stack pointer in a single instruction. The src register was first
        moved into the stack pointer, the immediate imm was added in a subsequent instruction.

        This was problematic when a signal handler was invoked before applying the immediate,
        when the stack pointer is still set to the temporary value. Avoid this by calculating src+imm in
        a temporary register and then move it in one go into the stack pointer.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::add32):

2019-02-18  Mark Lam  <mark.lam@apple.com>

        Fix DFG doesGC() for CompareEq/Less/LessEq/Greater/GreaterEq and CompareStrictEq nodes.
        https://bugs.webkit.org/show_bug.cgi?id=194800
        <rdar://problem/48183773>

        Reviewed by Yusuke Suzuki.

        Fix doesGC() for the following nodes:

            CompareEq:
            CompareLess:
            CompareLessEq:
            CompareGreater:
            CompareGreaterEq:
            CompareStrictEq:
                Only return false (i.e. does not GC) for child node use kinds that have
                been vetted to not do anything that can GC.  For all other use kinds
                (including StringUse and BigIntUse), we return true (i.e. does GC).

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2019-02-16  Darin Adler  <darin@apple.com>

        Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
        https://bugs.webkit.org/show_bug.cgi?id=194752

        Reviewed by Daniel Bates.

        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json): Added back the "0x" that was removed when changing
        this file to use appendUnsignedAsHex instead of "%p". The intent at that time was to
        keep behavior the same, so let's do that.

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::invalidCharacterMessage const): Use makeString and hex instead of
        String::format and "%04x".

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

        [JSC] Add LazyClassStructure::getInitializedOnMainThread
        https://bugs.webkit.org/show_bug.cgi?id=194784
        <rdar://problem/48154820>

        Reviewed by Mark Lam.

        LazyClassStructure::get and LazyProperty::get functions do not allow compiler threads to call them. But for booleanPrototype, numberPrototype and symbolPrototype cases,
        we would like to call them from compiler threads. We eagerly initialize them if VM::canUseJIT() is true, so that compiler threads can safely call LazyClassStructure::get
        and LazyProperty::get for booleanPrototype, numberPrototype and symbolPrototype. But still assertion hits because the assertion requires that these functions need to be
        called in non compiler threads. Calling `getConcurrently()` is not possible since symbolPrototype() function is called from both the main thread and compiler threads,
        and we would like to lazily initialize SymbolPrototype object if it is called from the main thread, which can happen with non-JIT configuration.

        This patch adds `getInitializedOnMainThread()`. Compiler threads can call it only when we know that the value is already initialized on the main thread. The main thread
        can call it at anytime and this function lazily initializes the value. This is useful to make some of prototypes lazy with non-JIT configuration: With non-JIT configuration,
        this function is always called from the main thread and it initializes the value lazily. Non-JIT configuration does not care about compiler threads since they do not exist.
        With JIT configuration, we eagerly initialize them in JSGlobalObject::init so that `getInitializedOnMainThread()` always succeeds.

        Basically, `getInitializedOnMainThread()` is `get` with different assertion location: While `get` always crashes if it is called from compiler threads, `getInitializedOnMainThread()`
        crashes only when actual initialization happens on compiler threads. We do not merge them since `get` is still useful to find accidental initialization from compiler threads.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::booleanPrototype const):
        (JSC::JSGlobalObject::numberPrototype const):
        (JSC::JSGlobalObject::symbolPrototype const):
        * runtime/LazyClassStructure.h:
        (JSC::LazyClassStructure::getInitializedOnMainThread const):
        (JSC::LazyClassStructure::prototypeInitializedOnMainThread const):
        (JSC::LazyClassStructure::constructorInitializedOnMainThread const):
        * runtime/LazyProperty.h:
        (JSC::LazyProperty::get const):
        (JSC::LazyProperty::getInitializedOnMainThread const):

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Reviewed by Devin Rousso.

        * inspector/protocol/CPUProfiler.json:
        Add additional properties per-Event, and new per-Thread object info.

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Bytecode cache should a have a boot-specific validation
        https://bugs.webkit.org/show_bug.cgi?id=194769
        <rdar://problem/48149509>

        Reviewed by Keith Miller.

        Add the boot UUID to the cached bytecode to enforce that it is not reused
        across reboots.

        * runtime/CachedTypes.cpp:
        (JSC::Encoder::malloc):
        (JSC::GenericCacheEntry::GenericCacheEntry):
        (JSC::GenericCacheEntry::tag const):
        (JSC::CacheEntry::CacheEntry):
        (JSC::CacheEntry::decode const):
        (JSC::GenericCacheEntry::decode const):
        (JSC::encodeCodeBlock):

2019-02-18  Eric Carlson  <eric.carlson@apple.com>

        Add MSE logging configuration
        https://bugs.webkit.org/show_bug.cgi?id=194719
        <rdar://problem/48122151>

        Reviewed by Joseph Pecoraro.

        * inspector/ConsoleMessage.cpp:
        (Inspector::messageSourceValue):
        * inspector/protocol/Console.json:
        * inspector/scripts/codegen/generator.py:
        * runtime/ConsoleTypes.h:

2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>

        Add version number to cached bytecode
        https://bugs.webkit.org/show_bug.cgi?id=194768
        <rdar://problem/48147968>

        Reviewed by Saam Barati.

        Add a version number to the bytecode cache that should be unique per build.

        * CMakeLists.txt:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * runtime/CachedTypes.cpp:
        (JSC::Encoder::malloc):
        (JSC::GenericCacheEntry::GenericCacheEntry):
        (JSC::CacheEntry::CacheEntry):
        (JSC::CacheEntry::encode):
        (JSC::CacheEntry::decode const):
        (JSC::GenericCacheEntry::decode const):
        (JSC::decodeCodeBlockImpl):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::fetchFromDiskImpl):

2019-02-17  Saam Barati  <sbarati@apple.com>

        WasmB3IRGenerator models some effects incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=194038

        Reviewed by Keith Miller.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::restoreWasmContextInstance):
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        These two functions were using global state instead of the
        arguments passed into the function.

        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
        Any patchpoint that allows scratch register usage must
        also say that it clobbers the scratch registers.

2019-02-17  Saam Barati  <sbarati@apple.com>

        Deadlock when adding a Structure property transition and then doing incremental marking
        https://bugs.webkit.org/show_bug.cgi?id=194767

        Reviewed by Mark Lam.

        This can happen in the following scenario:
        
        You have a Structure S. S is on the mark stack. Then:
        1. S grabs its lock
        2. S adds a new property transition
        3. We find out we need to do some incremental marking
        4. We mark S
        5. visitChildren on S will try to grab its lock
        6. We are now in a deadlock

        * heap/Heap.cpp:
        (JSC::Heap::performIncrement):
        * runtime/Structure.cpp:
        (JSC::Structure::addNewPropertyTransition):

2019-02-17  David Kilzer  <ddkilzer@apple.com>

        Unreviewed, rolling out r241620.

        "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
        (Requested by ddkilzer on #webkit.)

        Reverted changeset:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241620

2019-02-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241612.
        https://bugs.webkit.org/show_bug.cgi?id=194762

        "It regressed JetStream2 parsing tests by ~40%" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "Move bytecode cache-related filesystem code out of CodeCache"
        https://bugs.webkit.org/show_bug.cgi?id=194675
        https://trac.webkit.org/changeset/241612

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

        [JSC] JSWrapperObject should not be destructible
        https://bugs.webkit.org/show_bug.cgi?id=194743

        Reviewed by Saam Barati.

        JSWrapperObject should be just a wrapper object for JSValue, thus, it should not be a JSDestructibleObject.
        Currently it is destructible object because DateInstance uses it. This patch changes Base of DateInstance from
        JSWrapperObject to JSDestructibleObject, and makes JSWrapperObject non-destructible.

        * runtime/BigIntObject.cpp:
        (JSC::BigIntObject::BigIntObject):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::finishCreation):
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        (JSC::DateInstance::finishCreation):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncGetTime):
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/JSCPoison.h:
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::finishCreation):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::internalValue const):
        * runtime/SymbolObject.cpp:
        (JSC::SymbolObject::SymbolObject):
        * runtime/SymbolObject.h:

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

        [JSC] Shrink UnlinkedFunctionExecutable
        https://bugs.webkit.org/show_bug.cgi?id=194733

        Reviewed by Mark Lam.

        UnlinkedFunctionExecutable has sourceURLDirective and sourceMappingURLDirective. These
        directives can be found in the comment of non typical function's source code (Program,
        Eval code, and Global function from function constructor etc.), and tricky thing is that
        SourceProvider's directives are updated by Parser. The reason why we have these fields in
        UnlinkedFunctionExecutable is that we need to update the SourceProvider's directives even
        if we skip parsing by using CodeCache. These fields are effective only if (1)
        UnlinkedFunctionExecutable is for non typical function things, and (2) it has sourceURLDirective
        or sourceMappingURLDirective. This is rare enough to purge them to a separated
        UnlinkedFunctionExecutable::RareData to make UnlinkedFunctionExecutable small.
        sizeof(UnlinkedFunctionExecutable) is very important since it is super frequently allocated
        cell. Furthermore, the current JSC allocates two MarkedBlocks for UnlinkedFunctionExecutable
        in JSGlobalObject initialization, but the usage of the second MarkedBlock is quite low (8%).
        If we can reduce the size of UnlinkedFunctionExecutable, we can make them one MarkedBlock.
        Since UnlinkedFunctionExecutable is allocated from IsoSubspace, we do not need to fit it to
        one of size class.

        This patch adds RareData to UnlinkedFunctionExecutable and move some rare datas into RareData.
        And kill one MarkedBlock allocation in JSC initialization phase.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::ensureRareDataSlow):
        * bytecode/UnlinkedFunctionExecutable.h:
        * debugger/DebuggerLocation.cpp:
        (JSC::DebuggerLocation::DebuggerLocation):
        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::dispatchDidParseSource):
        * parser/Lexer.h:
        (JSC::Lexer::sourceURLDirective const):
        (JSC::Lexer::sourceMappingURLDirective const):
        (JSC::Lexer::sourceURL const): Deleted.
        (JSC::Lexer::sourceMappingURL const): Deleted.
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::sourceURLDirective const):
        (JSC::SourceProvider::sourceMappingURLDirective const):
        (JSC::SourceProvider::setSourceURLDirective):
        (JSC::SourceProvider::setSourceMappingURLDirective):
        (JSC::SourceProvider::sourceURL const): Deleted. We rename it from sourceURL to sourceURLDirective
        since it is the correct name.
        (JSC::SourceProvider::sourceMappingURL const): Deleted. We rename it from sourceMappingURL to
        sourceMappingURLDirective since it is the correct name.
        * runtime/CachedTypes.cpp:
        (JSC::CachedSourceProviderShape::encode):
        (JSC::CachedFunctionExecutableRareData::encode):
        (JSC::CachedFunctionExecutableRareData::decode const): CachedFunctionExecutable did not have
        sourceMappingURL to sourceMappingURLDirective. So this patch keeps the same logic.
        (JSC::CachedFunctionExecutable::rareData const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        (JSC::generateUnlinkedCodeBlockImpl):
        * runtime/FunctionExecutable.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::url):

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove unused global private variables
        https://bugs.webkit.org/show_bug.cgi?id=194741

        Reviewed by Joseph Pecoraro.

        There are some private functions and constants that are no longer referenced from builtin JS code.
        This patch cleans up them.

        * builtins/BuiltinNames.h:
        * builtins/ObjectConstructor.js:
        (entries):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Lazily create empty RegExp
        https://bugs.webkit.org/show_bug.cgi?id=194735

        Reviewed by Keith Miller.

        Some scripts do not have any RegExp. In that case, allocating MarkedBlock for RegExp is costly.
        Previously, there was always one RegExp, "empty RegExp". This patch lazily creates it and drop
        one MarkedBlock.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::ensureEmptyRegExpSlow):
        (JSC::RegExpCache::initialize): Deleted.
        * runtime/RegExpCache.h:
        (JSC::RegExpCache::ensureEmptyRegExp):
        (JSC::RegExpCache::emptyRegExp const): Deleted.
        * runtime/RegExpCachedResult.cpp:
        (JSC::RegExpCachedResult::lastResult):
        * runtime/RegExpCachedResult.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make builtin objects more lazily initialized under non-JIT mode
        https://bugs.webkit.org/show_bug.cgi?id=194727

        Reviewed by Saam Barati.

        Boolean, Symbol, and Number constructors and prototypes are initialized eagerly, but this is largely
        because concurrent compiler can touch NumberPrototype etc. when traversing object's prototypes. This
        means that eager initialization is not necessary under non-JIT mode. While we can investigate all the
        accesses to these prototypes from the concurrent compiler threads, this "lazily initialize under non-JIT"
        is safe and beneficial to non-JIT mode. This patch lazily initializes them under non-JIT mode, and
        drop some @Number references to avoid eager initialization. This removes some object allocations and 1
        MarkedBlock allocation just for Symbols.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::numberToStringWatchpoint):
        (JSC::JSGlobalObject::booleanPrototype const):
        (JSC::JSGlobalObject::numberPrototype const):
        (JSC::JSGlobalObject::symbolPrototype const):
        (JSC::JSGlobalObject::booleanObjectStructure const):
        (JSC::JSGlobalObject::symbolObjectStructure const):
        (JSC::JSGlobalObject::numberObjectStructure const):
        (JSC::JSGlobalObject::stringObjectStructure const):

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

        RELEASE_ASSERT at com.apple.JavaScriptCore: JSC::jsSubstringOfResolved
        https://bugs.webkit.org/show_bug.cgi?id=194558

        Reviewed by Saam Barati.

        Added an in bounds check before the read of the next character for Unicode regular expressions
        for pattern generation that didn't already have such checks.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):

2019-02-15  Dean Jackson  <dino@apple.com>

        Allow emulation of user gestures from Web Inspector console
        https://bugs.webkit.org/show_bug.cgi?id=194725
        <rdar://problem/48126604>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        * inspector/agents/InspectorRuntimeAgent.cpp: Add a new optional parameter, emulateUserGesture,
        to the evaluate function, and mark the function as override so that PageRuntimeAgent
        can change the behaviour.
        (Inspector::InspectorRuntimeAgent::evaluate):
        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/protocol/Runtime.json:

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not initialize Wasm related data if Wasm is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=194728

        Reviewed by Mark Lam.

        Under non-JIT mode, these data structures are unnecessary. Should not allocate extra memory for that.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):

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

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::RemoteInspector):
        (Inspector::RemoteInspector::start):
        * jsc.cpp:
        (startTimeoutThreadIfNeeded):
        * runtime/Options.cpp:
        (JSC::overrideOptionWithHeuristic):
        (JSC::Options::overrideAliasedOptionWithHeuristic):
        (JSC::Options::initialize):
        * runtime/VM.cpp:
        (JSC::enableAssembler):
        (JSC::VM::VM):
        * tools/CodeProfiling.cpp:
        (JSC::CodeProfiling::notifyAllocator):
        Utilize WTF::Environment where possible.

2019-02-15  Mark Lam  <mark.lam@apple.com>

        SamplingProfiler::stackTracesAsJSON() should escape strings.
        https://bugs.webkit.org/show_bug.cgi?id=194649
        <rdar://problem/48072386>

        Reviewed by Saam Barati.

        Ditto for TypeSet::toJSONString() and TypeSet::toJSONString().

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::stackTracesAsJSON):
        * runtime/TypeSet.cpp:
        (JSC::TypeSet::toJSONString const):
        (JSC::StructureShape::toJSONString const):

2019-02-15  Robin Morisset  <rmorisset@apple.com>

        CodeBlock::jettison should clear related watchpoints
        https://bugs.webkit.org/show_bug.cgi?id=194544

        Reviewed by Mark Lam.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::jettison):
        * dfg/DFGCommonData.h:
        (JSC::DFG::CommonData::clearWatchpoints): Added.
        * dfg/CommonData.cpp:
        (JSC::DFG::CommonData::clearWatchpoints): Added.

2019-02-15  Tadeu Zagallo  <tzagallo@apple.com>

        Move bytecode cache-related filesystem code out of CodeCache
        https://bugs.webkit.org/show_bug.cgi?id=194675

        Reviewed by Saam Barati.

        That code is only used for the bytecode-cache tests, so it should live in
        jsc.cpp rather than in the CodeCache.

        * jsc.cpp:
        (CliSourceProvider::create):
        (CliSourceProvider::~CliSourceProvider):
        (CliSourceProvider::cachePath const):
        (CliSourceProvider::loadBytecode):
        (CliSourceProvider::CliSourceProvider):
        (jscSource):
        (GlobalObject::moduleLoaderFetch):
        (functionDollarEvalScript):
        (runWithOptions):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::cacheBytecode const):
        * runtime/CodeCache.cpp:
        (JSC::writeCodeBlock):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::fetchFromDiskImpl):

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG, FTL, and Wasm worklist creation should be fenced
        https://bugs.webkit.org/show_bug.cgi?id=194714

        Reviewed by Mark Lam.

        Let's consider about the following extreme case.

        1. VM (A) is created.
        2. Another VM (B) is created on a different thread.
        3. (A) is being destroyed. It calls DFG::existingWorklistForIndexOrNull in a destructor.
        4. At the same time, (B) starts using DFG Worklist and it is instantiated in call_once.
        5. But (A) reads the pointer directly through DFG::existingWorklistForIndexOrNull.
        6. (A) sees the half-baked worklist, which may be in the middle of creation.

        This patch puts store-store fence just before putting a pointer to a global variable.
        This fence is executed only three times at most, for DFG, FTL, and Wasm worklist initializations.

        * dfg/DFGWorklist.cpp:
        (JSC::DFG::ensureGlobalDFGWorklist):
        (JSC::DFG::ensureGlobalFTLWorklist):
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::ensureWorklist):

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

        Unreviewed, rolling out r241559 and r241566.
        https://bugs.webkit.org/show_bug.cgi?id=194710

        Causes layout test crashes under GuardMalloc (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "[WTF] Add environment variable helpers"
        https://bugs.webkit.org/show_bug.cgi?id=192405
        https://trac.webkit.org/changeset/241559

        "Unreviewed build fix for WinCairo Debug after r241559."
        https://trac.webkit.org/changeset/241566

2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not even allocate JIT worklists in non-JIT mode
        https://bugs.webkit.org/show_bug.cgi?id=194693

        Reviewed by Mark Lam.

        Heap always allocates JIT worklists for Baseline, DFG, and FTL. While they do not have actual threads, Worklist itself already allocates some memory.
        And we do not perform any GC operations that are only meaningful in JIT environment.

        1. We add VM::canUseJIT() check in Heap's ensureXXXWorklist things to prevent them from being allocated.
        2. We remove DFG marking constraint in non-JIT mode.
        3. We do not gather conservative roots from scratch buffers under the non-JIT mode (BTW, # of scratch buffers are always zero in non-JIT mode)
        4. We do not visit JITStubRoutineSet.
        5. Align JITWorklist function names to the other worklists.

        * dfg/DFGOSRExitPreparation.cpp:
        (JSC::DFG::prepareCodeOriginForOSRExit):
        * dfg/DFGPlan.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::markCodeBlocks): Deleted.
        * dfg/DFGWorklist.h:
        * 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):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::existingGlobalWorklistOrNull):
        (JSC::JITWorklist::ensureGlobalWorklist):
        (JSC::JITWorklist::instance): Deleted.
        * jit/JITWorklist.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        (JSC::VM::gatherScratchBufferRoots):
        (JSC::VM::gatherConservativeRoots): Deleted.
        * runtime/VM.h:

2019-02-15  Saam barati  <sbarati@apple.com>

        [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
        https://bugs.webkit.org/show_bug.cgi?id=194036

        Reviewed by Yusuke Suzuki.

        This patch adds a new Air-O0 backend. Air-O0 runs fewer passes and doesn't
        use linear scan for register allocation. Instead of linear scan, Air-O0 does
        mostly block-local register allocation, and it does this as it's emitting
        code directly. The register allocator uses liveness analysis to reduce
        the number of spills. Doing register allocation as we're emitting code
        allows us to skip editing the IR to insert spills, which saves a non trivial
        amount of compile time. For stack allocation, we give each Tmp its own slot.
        This is less than ideal. We probably want to do some trivial live range analysis
        in the future. The reason this isn't a deal breaker for Wasm is that this patch
        makes it so that we reuse Tmps as we're generating Air IR in the AirIRGenerator.
        Because Wasm is a stack machine, we trivially know when we kill a stack value (its last use).
        
        This patch is another 25% Wasm startup time speedup. It seems to be worth
        another 1% on JetStream2.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp: Added.
        (JSC::B3::Air::GenerateAndAllocateRegisters::GenerateAndAllocateRegisters):
        (JSC::B3::Air::GenerateAndAllocateRegisters::buildLiveRanges):
        (JSC::B3::Air::GenerateAndAllocateRegisters::insertBlocksForFlushAfterTerminalPatchpoints):
        (JSC::B3::Air::callFrameAddr):
        (JSC::B3::Air::GenerateAndAllocateRegisters::flush):
        (JSC::B3::Air::GenerateAndAllocateRegisters::spill):
        (JSC::B3::Air::GenerateAndAllocateRegisters::alloc):
        (JSC::B3::Air::GenerateAndAllocateRegisters::freeDeadTmpsIfNeeded):
        (JSC::B3::Air::GenerateAndAllocateRegisters::assignTmp):
        (JSC::B3::Air::GenerateAndAllocateRegisters::isDisallowedRegister):
        (JSC::B3::Air::GenerateAndAllocateRegisters::prepareForGeneration):
        (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h: Added.
        * b3/air/AirCode.cpp:
        * b3/air/AirCode.h:
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::prepareForGeneration):
        (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
        (JSC::B3::Air::generate):
        * b3/air/AirHandleCalleeSaves.cpp:
        (JSC::B3::Air::handleCalleeSaves):
        * b3/air/AirHandleCalleeSaves.h:
        * b3/air/AirTmpMap.h:
        * runtime/Options.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::didKill):
        (JSC::Wasm::AirIRGenerator::newTmp):
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::parseAndCompileAir):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
        * wasm/WasmAirIRGenerator.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::didKill):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::compileFunctions):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseBody):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::didKill):

2019-02-14  Saam barati  <sbarati@apple.com>

        lowerStackArgs should lower Lea32/64 on ARM64 to Add
        https://bugs.webkit.org/show_bug.cgi?id=194656

        Reviewed by Yusuke Suzuki.

        On arm64, Lea is just implemented as an add. However, Air treats it as an
        address with a given width. Because of this width, we were incorrectly
        computing whether or not this immediate could fit into the instruction itself
        or it needed to be explicitly put into a register. This patch makes
        AirLowerStackArgs lower Lea to Add on arm64.

        * b3/air/AirLowerStackArgs.cpp:
        (JSC::B3::Air::lowerStackArgs):
        * b3/air/AirOpcode.opcodes:
        * b3/air/testair.cpp:

2019-02-14  Saam Barati  <sbarati@apple.com>

        Cache the results of BytecodeGenerator::getVariablesUnderTDZ
        https://bugs.webkit.org/show_bug.cgi?id=194583
        <rdar://problem/48028140>

        Reviewed by Yusuke Suzuki.

        This patch makes it so that getVariablesUnderTDZ caches a result of
        CompactVariableMap::Handle. getVariablesUnderTDZ is costly when
        it's called in an environment where there are a lot of variables.
        This patch makes it so we cache its results. This is profitable when
        getVariablesUnderTDZ is called repeatedly with the same environment
        state. This is common since we call this every time we encounter a
        function definition/expression node.

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
        (JSC::BytecodeGenerator::pushTDZVariables):
        (JSC::BytecodeGenerator::getVariablesUnderTDZ):
        (JSC::BytecodeGenerator::restoreTDZStack):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * parser/VariableEnvironment.cpp:
        (JSC::CompactVariableMap::Handle::Handle):
        (JSC::CompactVariableMap::Handle::operator=):
        * parser/VariableEnvironment.h:
        (JSC::CompactVariableMap::Handle::operator bool const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):

2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Non-JIT entrypoints should share NativeJITCode per entrypoint type
        https://bugs.webkit.org/show_bug.cgi?id=194659

        Reviewed by Mark Lam.

        Non-JIT entrypoints create NativeJITCode every time it is called. But it is meaningless since these entry point code are identical.
        We should create one per entrypoint type (for function, we should have CodeForCall and CodeForConstruct) and continue to use them.
        And we use NativeJITCode instead of DirectJITCode if it does not have difference between usual entrypoint and arity check entrypoint.

        * dfg/DFGJITCode.h:
        * dfg/DFGJITFinalizer.cpp:
        (JSC::DFG::JITFinalizer::finalize):
        (JSC::DFG::JITFinalizer::finalizeFunction):
        * jit/JITCode.cpp:
        (JSC::DirectJITCode::initializeCodeRefForDFG):
        (JSC::DirectJITCode::initializeCodeRef): Deleted.
        (JSC::NativeJITCode::initializeCodeRef): Deleted.
        * jit/JITCode.h:
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint): Retagged is removed since the tag is the same.

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

        [WTF] Add environment variable helpers
        https://bugs.webkit.org/show_bug.cgi?id=192405

        Reviewed by Michael Catanzaro.

        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::RemoteInspector):
        (Inspector::RemoteInspector::start):
        * jsc.cpp:
        (startTimeoutThreadIfNeeded):
        * runtime/Options.cpp:
        (JSC::overrideOptionWithHeuristic):
        (JSC::Options::overrideAliasedOptionWithHeuristic):
        (JSC::Options::initialize):
        * runtime/VM.cpp:
        (JSC::enableAssembler):
        (JSC::VM::VM):
        * tools/CodeProfiling.cpp:
        (JSC::CodeProfiling::notifyAllocator):
        Utilize WTF::Environment where possible.

2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Should have default NativeJITCode
        https://bugs.webkit.org/show_bug.cgi?id=194634

        Reviewed by Mark Lam.

        In JSC_useJIT=false mode, we always create identical NativeJITCode for call and construct when we create NativeExecutable.
        This is meaningless since we do not modify NativeJITCode after the creation. This patch adds singleton used as a default one.
        Since NativeJITCode (& JITCode) is ThreadSafeRefCounted, we can just share it in a whole process level. This removes 446 NativeJITCode
        allocations, which takes 14KB.

        * runtime/VM.cpp:
        (JSC::jitCodeForCallTrampoline):
        (JSC::jitCodeForConstructTrampoline):
        (JSC::VM::getHostFunction):

2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>

        generateUnlinkedCodeBlockForFunctions shouldn't need to create a FunctionExecutable just to get its source code
        https://bugs.webkit.org/show_bug.cgi?id=194576

        Reviewed by Saam Barati.

        Extract a new function, `linkedSourceCode` from UnlinkedFunctionExecutable::link
        and use it in `generateUnlinkedCodeBlockForFunctions` instead.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::linkedSourceCode const):
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockForFunctions):

2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>

        CachedBitVector's size must be converted from bits to bytes
        https://bugs.webkit.org/show_bug.cgi?id=194441

        Reviewed by Saam Barati.

        CachedBitVector used its size in bits for memcpy. That didn't cause any
        issues when encoding, since the size in bits was also used in the allocation,
        but would overflow the actual BitVector buffer when decoding.

        * runtime/CachedTypes.cpp:
        (JSC::CachedBitVector::encode):
        (JSC::CachedBitVector::decode const):

2019-02-13  Brian Burg  <bburg@apple.com>

        Web Inspector: don't include accessibility role in DOM.Node object payloads
        https://bugs.webkit.org/show_bug.cgi?id=194623
        <rdar://problem/36384037>

        Reviewed by Devin Rousso.

        Remove property of DOM.Node that is no longer being sent.

        * inspector/protocol/DOM.json:

2019-02-13  Keith Miller  <keith_miller@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

        We should only make rope strings when concatenating strings long enough.
        https://bugs.webkit.org/show_bug.cgi?id=194465

        Reviewed by Mark Lam.

        This patch stops us from allocating a rope string if the resulting
        rope would be smaller than the size of the JSRopeString object we
        would need to allocate.

        This patch also adds paths so that we don't unnecessarily allocate
        JSString cells for primitives we are going to concatenate with a
        string anyway.

        The important change from the previous one is that we do not apply
        the above rule to JSRopeStrings generated by JSStrings. If we convert
        it to JSString, comparison of memory consumption becomes the following,
        because JSRopeString does not have StringImpl until it is resolved.

            sizeof(JSRopeString) v.s. sizeof(JSString) + sizeof(StringImpl) + content

        Since sizeof(JSString) + sizeof(StringImpl) is larger than sizeof(JSRopeString),
        resolving eagerly increases memory footprint. The point is that we need to
        account newly created JSString and JSRopeString from the operands. This is the
        reason why this patch adds different thresholds for each jsString functions.

        This patch also avoids concatenation for ropes conservatively. Many ropes are
        temporary cells. So we do not resolve eagerly if one of operands is already a
        rope.

        In CLI execution, this change is performance neutral in JetStream2 (run 6 times, 1 for warming up and average in latter 5.).

            Before: 159.3778
            After:  160.72340000000003

        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSString.h:
        (JSC::JSString::isRope const):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAddNonNumber):
        (JSC::jsAdd):

2019-02-13  Saam Barati  <sbarati@apple.com>

        AirIRGenerator::addSwitch switch patchpoint needs to model clobbering the scratch register
        https://bugs.webkit.org/show_bug.cgi?id=194610

        Reviewed by Michael Saboff.

        BinarySwitch might use the scratch register. We must model the
        effects of that properly. This is already caught by our br-table
        tests on arm64.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addSwitch):

2019-02-13  Mark Lam  <mark.lam@apple.com>

        Create a randomized free list for new StructureIDs on StructureIDTable resize.
        https://bugs.webkit.org/show_bug.cgi?id=194566
        <rdar://problem/47975502>

        Reviewed by Michael Saboff.

        Also isolate 32-bit implementation of StructureIDTable out more so the 64-bit
        implementation is a little easier to read.

        This patch appears to be perf neutral on JetStream2 (as run from the command line).

        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::StructureIDTable):
        (JSC::StructureIDTable::makeFreeListFromRange):
        (JSC::StructureIDTable::resize):
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::deallocateID):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::get):
        (JSC::StructureIDTable::deallocateID):
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::flushOldTables):

2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>

        VariableLengthObject::allocate<T> should initialize objects
        https://bugs.webkit.org/show_bug.cgi?id=194534

        Reviewed by Michael Saboff.

        `buffer()` should not be called for empty VariableLengthObjects, but
        these cases were not being caught due to the objects not being properly
        initialized. Fix it so that allocate calls the constructor and fix the
        assertion failues.

        * runtime/CachedTypes.cpp:
        (JSC::CachedObject::operator new):
        (JSC::VariableLengthObject::allocate):
        (JSC::CachedVector::encode):
        (JSC::CachedVector::decode const):
        (JSC::CachedUniquedStringImpl::decode const):
        (JSC::CachedBitVector::encode):
        (JSC::CachedBitVector::decode const):
        (JSC::CachedArray::encode):
        (JSC::CachedArray::decode const):
        (JSC::CachedImmutableButterfly::CachedImmutableButterfly):
        (JSC::CachedBigInt::decode const):

2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>

        CodeBlocks read from disk should not be re-written
        https://bugs.webkit.org/show_bug.cgi?id=194535

        Reviewed by Michael Saboff.

        Keep track of which CodeBlocks have been read from disk or have already
        been serialized in CodeCache.

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::write):
        * runtime/CodeCache.h:
        (JSC::SourceCodeValue::SourceCodeValue):
        (JSC::CodeCacheMap::fetchFromDiskImpl):

2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>

        SourceCode should be copied when generating bytecode for functions
        https://bugs.webkit.org/show_bug.cgi?id=194536

        Reviewed by Saam Barati.

        The FunctionExecutable might be collected while generating the bytecode
        for nested functions, in which case the SourceCode reference would no
        longer be valid.

        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockForFunctions):

2019-02-12  Saam barati  <sbarati@apple.com>

        JSScript needs to retain its cache path NSURL*
        https://bugs.webkit.org/show_bug.cgi?id=194577

        Reviewed by Tim Horton.

        * API/JSScript.mm:
        (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        (-[JSScript dealloc]):

2019-02-12  Robin Morisset  <rmorisset@apple.com>

        Make B3Value::returnsBool() more precise
        https://bugs.webkit.org/show_bug.cgi?id=194457

        Reviewed by Saam Barati.

        It is currently used repeatedly in B3ReduceStrength, as well as once in B3LowerToAir.
        It has a needlessly complex rule for BitAnd, and has no rule for other easy cases such as BitOr or Select.
        No new tests added as this should be indirectly tested by the already existing tests.

        * b3/B3Value.cpp:
        (JSC::B3::Value::returnsBool const):

2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wimplicit-fallthrough warning after r241140
        https://bugs.webkit.org/show_bug.cgi?id=194399
        <rdar://problem/47889777>

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Unsafe g_unsetenv() use in WebProcessPool::platformInitialize
        https://bugs.webkit.org/show_bug.cgi?id=194370

        Reviewed by Darin Adler.

        Change a couple WTFLogAlways to use g_warning, for good measure. Of course this isn't
        necessary, but it will make errors more visible.

        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::start):
        (Inspector::dbusConnectionCallAsyncReadyCallback):
        * inspector/remote/glib/RemoteInspectorServer.cpp:
        (Inspector::RemoteInspectorServer::start):

2019-02-12  Andy Estes  <aestes@apple.com>

        [iOSMac] Enable Parental Controls Content Filtering
        https://bugs.webkit.org/show_bug.cgi?id=194521
        <rdar://39732376>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

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

        Randomize insertion of deallocated StructureIDs into the StructureIDTable's free list.
        https://bugs.webkit.org/show_bug.cgi?id=194512
        <rdar://problem/47975465>

        Reviewed by Yusuke Suzuki.

        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::StructureIDTable):
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::deallocateID):
        * runtime/StructureIDTable.h:

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

        Remove the RELEASE_ASSERT check for duplicate cases in the BinarySwitch constructor.
        https://bugs.webkit.org/show_bug.cgi?id=194493
        <rdar://problem/36380852>

        Reviewed by Yusuke Suzuki.

        Having duplicate cases in the BinarySwitch is not a correctness issue.  It is
        however not good for performance and memory usage.  As such, a debug ASSERT will
        do.  We'll also do an audit of the clients of BinarySwitch to see if it's
        possible to be instantiated with duplicate cases in
        https://bugs.webkit.org/show_bug.cgi?id=194492 later.

        Also added some value dumps to the RELEASE_ASSERT to help debug the issue when we
        see duplicate cases.

        * jit/BinarySwitch.cpp:
        (JSC::BinarySwitch::BinarySwitch):

2019-02-10  Darin Adler  <darin@apple.com>

        Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
        https://bugs.webkit.org/show_bug.cgi?id=194485

        Reviewed by Daniel Bates.

        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json): Use appendUnsignedAsHex along with
        reinterpret_cast<uintptr_t> to replace uses of String::format with "%p".

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode): Removed some unneeded casts in StringBuilder code,
        including one in a call to appendByteAsHex.
        (JSC::globalFuncEscape): Ditto.

2019-02-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241230.
        https://bugs.webkit.org/show_bug.cgi?id=194488

        "It regressed JetStream2 by ~6%" (Requested by saamyjoon on
        #webkit).

        Reverted changeset:

        "We should only make rope strings when concatenating strings
        long enough."
        https://bugs.webkit.org/show_bug.cgi?id=194465
        https://trac.webkit.org/changeset/241230

2019-02-10  Saam barati  <sbarati@apple.com>

        BBQ-Air: Emit better code for switch
        https://bugs.webkit.org/show_bug.cgi?id=194053

        Reviewed by Yusuke Suzuki.

        Instead of emitting a linear set of jumps for Switch, this patch
        makes the BBQ-Air backend emit a binary switch.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addSwitch):

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

        Unreviewed, Lexer should use isLatin1 implementation in WTF
        https://bugs.webkit.org/show_bug.cgi?id=194466

        Follow-up after r241233 pointed by Darin.

        * parser/Lexer.cpp:
        (JSC::isLatin1): Deleted.

2019-02-09  Darin Adler  <darin@apple.com>

        Eliminate unnecessary String temporaries by using StringConcatenateNumbers
        https://bugs.webkit.org/show_bug.cgi?id=194021

        Reviewed by Geoffrey Garen.

        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::count): Remove String::number and let
        makeString do the conversion without allocating/destroying a String.
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::objectGroupForBreakpointAction): Ditto.
        (Inspector::InspectorDebuggerAgent::setBreakpointByUrl): Ditto.
        (Inspector::InspectorDebuggerAgent::setBreakpoint): Ditto.
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty): Ditto.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToFixed): Use String::numberToStringFixedWidth instead
        of calling numberToFixedWidthString to do the same thing.
        (JSC::numberProtoFuncToPrecision): Use String::number instead of calling
        numberToFixedPrecisionString to do the same thing.
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::reportTopFunctions): Ditto.

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

        Unreviewed, rolling in r241237 again
        https://bugs.webkit.org/show_bug.cgi?id=194469

        * runtime/JSString.h:
        (JSC::jsSubstring):

2019-02-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241237.
        https://bugs.webkit.org/show_bug.cgi?id=194474

        Shows significant memory increase in WSL (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "[WTF] Use BufferInternal StringImpl if substring StringImpl
        takes more memory"
        https://bugs.webkit.org/show_bug.cgi?id=194469
        https://trac.webkit.org/changeset/241237

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Use BufferInternal StringImpl if substring StringImpl takes more memory
        https://bugs.webkit.org/show_bug.cgi?id=194469

        Reviewed by Geoffrey Garen.

        * runtime/JSString.h:
        (JSC::jsSubstring):

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] CachedTypes should use jsString instead of JSString::create
        https://bugs.webkit.org/show_bug.cgi?id=194471

        Reviewed by Mark Lam.

        Use jsString() here because JSString::create is a bit low-level API and it requires some invariant like "length is not zero".

        * runtime/CachedTypes.cpp:
        (JSC::CachedJSValue::decode const):

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Increase StructureIDTable initial capacity
        https://bugs.webkit.org/show_bug.cgi?id=194468

        Reviewed by Mark Lam.

        Currently, # of structures just after initializing JSGlobalObject (precisely, initializing GlobalObject in
        JSC shell), 281, already exceeds the current initial value 256. We should increase the capacity since
        unnecessary resizing requires more operations, keeps old StructureID array until GC happens, and makes
        more memory dirty. We also remove some structures that are no longer used.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::callbackObjectStructure const):
        (JSC::JSGlobalObject::propertyNameIteratorStructure const): Deleted.
        * runtime/StructureIDTable.h:
        * runtime/VM.h:

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] String.fromCharCode's slow path always generates 16bit string
        https://bugs.webkit.org/show_bug.cgi?id=194466

        Reviewed by Keith Miller.

        String.fromCharCode(a1) has a fast path and the most frequently used. And String.fromCharCode(a1, a2, ...)
        goes to the slow path. However, in the slow path, we always create 16bit string. 16bit string takes 2x memory,
        and even worse, taints ropes 16bit if 16bit string is included in the given rope. We find that acorn-wtb
        creates very large strings multiple times with String.fromCharCode, and String.fromCharCode always produces
        16bit string. However, only few strings are actually 16bit strings. This patch attempts to make 8bit string
        as much as possible.

        It improves non JIT acorn-wtb's peak and current memory footprint by 6% and 3% respectively.

        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCode):

2019-02-08  Keith Miller  <keith_miller@apple.com>

        We should only make rope strings when concatenating strings long enough.
        https://bugs.webkit.org/show_bug.cgi?id=194465

        Reviewed by Saam Barati.

        This patch stops us from allocating a rope string if the resulting
        rope would be smaller than the size of the JSRopeString object we
        would need to allocate.

        This patch also adds paths so that we don't unnecessarily allocate
        JSString cells for primitives we are going to concatenate with a
        string anyway.

        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSString.h:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAdd):

2019-02-08  Saam barati  <sbarati@apple.com>

        Nodes that rely on being dominated by CheckInBounds should have a child edge to it
        https://bugs.webkit.org/show_bug.cgi?id=194334
        <rdar://problem/47844327>

        Reviewed by Mark Lam.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
        * dfg/DFGIntegerCheckCombiningPhase.cpp:
        (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGNodeType.h:
        * dfg/DFGSSALoweringPhase.cpp:
        (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckInBounds):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink sizeof(CodeBlock) more
        https://bugs.webkit.org/show_bug.cgi?id=194419

        Reviewed by Mark Lam.

        This patch further shrinks the size of CodeBlock, from 352 to 296 (304).

        1. CodeBlock copies so many data from ScriptExecutable even if ScriptExecutable
        has the same information. These data is not touched in CodeBlock::~CodeBlock,
        so we can just use the data in ScriptExecutable instead of holding it in CodeBlock.

        2. We remove m_instructions pointer since the ownership is managed by UnlinkedCodeBlock.
        And we do not touch it in CodeBlock::~CodeBlock.

        3. We move m_calleeSaveRegisters from CodeBlock to CodeBlock::JITData. For baseline and LLInt
        cases, this patch offers RegisterAtOffsetList::llintBaselineCalleeSaveRegisters() which returns
        singleton to `const RegisterAtOffsetList*` usable for LLInt and Baseline JIT CodeBlocks.

        4. Move m_catchProfiles to RareData and materialize only when op_catch's slow path is called.

        5. Drop ownerScriptExecutable. ownerExecutable() returns ScriptExecutable*.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::hash const):
        (JSC::CodeBlock::sourceCodeForTools const):
        (JSC::CodeBlock::dumpAssumingJITType const):
        (JSC::CodeBlock::dumpSource):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::setCalleeSaveRegisters):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset const):
        (JSC::CodeBlock::hasOpDebugForLineAndColumn):
        (JSC::CodeBlock::newReplacement):
        (JSC::CodeBlock::replacement):
        (JSC::CodeBlock::computeCapabilityLevel):
        (JSC::CodeBlock::jettison):
        (JSC::CodeBlock::calleeSaveRegisters const):
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters):
        (JSC::CodeBlock::updateOSRExitCounterAndCheckIfNeedToReoptimize):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
        (JSC::CodeBlock::notifyLexicalBindingUpdate):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
        (JSC::CodeBlock::validate):
        (JSC::CodeBlock::outOfLineJumpTarget):
        (JSC::CodeBlock::arithProfileForBytecodeOffset):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::specializationKind const):
        (JSC::CodeBlock::isStrictMode const):
        (JSC::CodeBlock::isConstructor const):
        (JSC::CodeBlock::codeType const):
        (JSC::CodeBlock::isKnownNotImmediate):
        (JSC::CodeBlock::instructions const):
        (JSC::CodeBlock::ownerExecutable const):
        (JSC::CodeBlock::thisRegister const):
        (JSC::CodeBlock::source const):
        (JSC::CodeBlock::sourceOffset const):
        (JSC::CodeBlock::firstLineColumnOffset const):
        (JSC::CodeBlock::createRareDataIfNecessary):
        (JSC::CodeBlock::ownerScriptExecutable const): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters const): Deleted.
        * bytecode/EvalCodeBlock.h:
        * bytecode/FunctionCodeBlock.h:
        * bytecode/GlobalCodeBlock.h:
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        * bytecode/ModuleProgramCodeBlock.h:
        * bytecode/ProgramCodeBlock.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::toggleBreakpoint):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::sourceID const):
        (JSC::DebuggerCallFrame::sourceIDForCallFrame):
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::location const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::InlineStackEntry::executable):
        (JSC::DFG::ByteCodeParser::inliningCost):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::isSupportedForInlining):
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::canUseOSRExitFuzzing):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::executableFor):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::restoreCalleeSavesFor):
        (JSC::DFG::saveCalleeSavesFor):
        (JSC::DFG::saveOrCopyCalleeSavesFor):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        * dfg/DFGOperations.cpp:
        * dfg/DFGToFTLDeferredCompilationCallback.cpp:
        (JSC::DFG::ToFTLDeferredCompilationCallback::compilationDidComplete):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::callerSourceOrigin):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::calleeSaveRegisters):
        (JSC::StackVisitor::Frame::sourceURL const):
        (JSC::StackVisitor::Frame::sourceID):
        (JSC::StackVisitor::Frame::computeLineAndColumn const):
        * interpreter/StackVisitor.h:
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
        (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor):
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):
        * jit/CallFrameShuffleData.cpp:
        (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * jit/JITToDFGDeferredCompilationCallback.cpp:
        (JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Plan::finalize):
        (JSC::JITWorklist::compileNow):
        * jit/RegisterAtOffsetList.cpp:
        (JSC::RegisterAtOffsetList::llintBaselineCalleeSaveRegisters):
        * jit/RegisterAtOffsetList.h:
        (JSC::RegisterAtOffsetList::at const):
        * runtime/ErrorInstance.cpp:
        (JSC::appendSourceToError):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::sourceID const):
        (JSC::StackFrame::sourceURL const):
        (JSC::StackFrame::computeLineAndColumn const):

2019-02-08  Robin Morisset  <rmorisset@apple.com>

        B3LowerMacros wrongly sets m_changed to true in the case of AtomicWeakCAS on x86
        https://bugs.webkit.org/show_bug.cgi?id=194460

        Reviewed by Mark Lam.

        Trivial fix, should already be covered by testAtomicWeakCAS in testb3.cpp.

        * b3/B3LowerMacros.cpp:

2019-02-08  Mark Lam  <mark.lam@apple.com>

        Use maxSingleCharacterString in comparisons instead of literal constants.
        https://bugs.webkit.org/show_bug.cgi?id=194452

        Reviewed by Yusuke Suzuki.

        This way, if we ever change maxSingleCharacterString, it won't break all this code
        that relies on it being 0xff implicitly.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStringSlice):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
        * jit/ThunkGenerators.cpp:
        (JSC::stringGetByValGenerator):
        (JSC::charToString):

2019-02-08  Mark Lam  <mark.lam@apple.com>

        Fix DFG's doesGC() for CheckTierUp*, GetByVal, PutByVal*, and StringCharAt nodes.
        https://bugs.webkit.org/show_bug.cgi?id=194446
        <rdar://problem/47926792>

        Reviewed by Saam Barati.

        Fix doesGC() for the following nodes:

            CheckTierUpAtReturn:
                Calls triggerTierUpNow(), which calls triggerFTLReplacementCompile(),
                which calls Worklist::completeAllReadyPlansForVM(), which uses DeferGC.

            CheckTierUpInLoop:
                Calls triggerTierUpNowInLoop(), which calls tierUpCommon(), which calls
                Worklist::completeAllReadyPlansForVM(), which uses DeferGC.

            CheckTierUpAndOSREnter:
                Calls triggerOSREntryNow(), which calls tierUpCommon(), which calls
                Worklist::completeAllReadyPlansForVM(), which uses DeferGC.

            GetByVal:
                case Array::String calls operationSingleCharacterString(), which calls
                jsSingleCharacterString(), which can allocate a string.

            PutByValDirect:
            PutByVal:
            PutByValAlias:
                For the DFG only, the integer TypeArrays calls compilePutByValForIntTypedArray(),
                which may call slow paths operationPutByValDirectStrict(), operationPutByValDirectNonStrict(),
                operationPutByValStrict(), or operationPutByValNonStrict().  All of these
                slow paths call putByValInternal(), which may create exception objects, or
                call the generic JSValue::put() which may execute arbitrary code.

            StringCharAt:
                Can call operationSingleCharacterString(), which calls jsSingleCharacterString(),
                which can allocate a string.

        Also fix DFG::SpeculativeJIT::compileGetByValOnString() and FTL's compileStringCharAt()
        to use the maxSingleCharacterString constant instead of a literal constant.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):

2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SourceProviderCacheItem should be small
        https://bugs.webkit.org/show_bug.cgi?id=194432

        Reviewed by Saam Barati.

        Some JetStream2 tests stress the JS parser. At that time, so many SourceProviderCacheItems are created.
        While they are removed when full-GC happens, it significantly increases the peak memory usage.
        This patch reduces the size of SourceProviderCacheItem from 56 to 32.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseFunctionInfo):
        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        * parser/SourceProviderCacheItem.h:
        (JSC::SourceProviderCacheItem::endFunctionToken const):
        (JSC::SourceProviderCacheItem::SourceProviderCacheItem):

2019-02-07  Robin Morisset  <rmorisset@apple.com>

        Fix Abs(Neg(x)) -> Abs(x) optimization in B3ReduceStrength
        https://bugs.webkit.org/show_bug.cgi?id=194420

        Reviewed by Saam Barati.

        In https://bugs.webkit.org/show_bug.cgi?id=194250, I added an optimization: Abs(Neg(x)) -> Abs(x).
        But I introduced two bugs, one is that I actually implemented Abs(Neg(x)) -> x, and the other is that the test is looking at Abs(Abs(x)) instead (both were stupid copy-paste mistakes).
        This trivial patch fixes both.

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testAbsNegArg):

2019-02-07  Keith Miller  <keith_miller@apple.com>

        Better error messages for module loader SPI
        https://bugs.webkit.org/show_bug.cgi?id=194421

        Reviewed by Saam Barati.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):

2019-02-07  Mark Lam  <mark.lam@apple.com>

        Fix more doesGC() for CheckTraps, GetMapBucket, and Switch nodes.
        https://bugs.webkit.org/show_bug.cgi?id=194399
        <rdar://problem/47889777>

        Reviewed by Yusuke Suzuki.

        Fix doesGC() for the following nodes:

            CheckTraps:
                We normally will not emit this node because Options::usePollingTraps() is
                false by default.  However, as it is implemented now, CheckTraps can GC
                because it can allocate a TerminatedExecutionException.  If we make the
                TerminatedExecutionException a singleton allocated at initialization time,
                doesGC() can return false for CheckTraps.
                https://bugs.webkit.org/show_bug.cgi?id=194323

            GetMapBucket:
                Can call operationJSMapFindBucket() or operationJSSetFindBucket(),
                which calls HashMapImpl::findBucket(), which calls jsMapHash(), which
                can resolve a rope.

            Switch:
                If switchData kind is SwitchChar, can call operationResolveRope() .
                If switchData kind is SwitchString and the child use kind is not StringIdentUse,
                    can call operationSwitchString() which resolves ropes.

            DirectTailCall:
            ForceOSRExit:
            Return:
            TailCallForwardVarargs:
            TailCallVarargs:
            Throw:
                These are terminal nodes.  It shouldn't really matter what doesGC() returns
                for them, but following our conservative practice, unless we have a good
                reason for doesGC() to return false, we should just return true.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2019-02-07  Robin Morisset  <rmorisset@apple.com>

        B3ReduceStrength: missing peephole optimizations for Neg and Sub
        https://bugs.webkit.org/show_bug.cgi?id=194250

        Reviewed by Saam Barati.

        Adds the following optimizations for integers:
        - Sub(x, x) => 0
            Already covered by the test testSubArg
        - Sub(x1, Neg(x2)) => Add (x1, x2)
            Added test: testSubNeg
        - Neg(Sub(x1, x2)) => Sub(x2, x1)
            Added test: testNegSub
        - Add(Neg(x1), x2) => Sub(x2, x1)
            Added test: testAddNeg1
        - Add(x1, Neg(x2)) => Sub(x1, x2)
            Added test: testAddNeg2
        Adds the following optimization for floating point values:
        - Abs(Neg(x)) => Abs(x)
            Added test: testAbsNegArg
            Adds the following optimization:

        Also did some trivial refactoring, using m_value->isInteger() everywhere instead of isInt(m_value->type()), and using replaceWithNew<Value> instead of replaceWithNewValue(m_proc.add<Value(..))

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testAddNeg1):
        (JSC::B3::testAddNeg2):
        (JSC::B3::testSubNeg):
        (JSC::B3::testNegSub):
        (JSC::B3::testAbsAbsArg):
        (JSC::B3::testAbsNegArg):
        (JSC::B3::run):

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use BufferInternal single character StringImpl for SmallStrings
        https://bugs.webkit.org/show_bug.cgi?id=194374

        Reviewed by Geoffrey Garen.

        Currently, we first create a large StringImpl, and create bunch of substrings with length = 1.
        But pointer is larger than single character. BufferInternal StringImpl with single character
        is more memory efficient.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::SmallStringsStorage):
        (JSC::SmallStrings::SmallStrings):
        * runtime/SmallStrings.h:

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
        https://bugs.webkit.org/show_bug.cgi?id=194369
        <rdar://problem/47813087>

        Reviewed by Saam Barati.

        InitializeEntrypointArguments says SpecCell if the FlushFormat is FlushedCell. But this actually has
        JSEmpty if it is TDZ. This incorrectly proved type information removes necessary CheckNotEmpty in
        constant folding phase.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2019-02-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: don't send the entire function string with each event listener
        https://bugs.webkit.org/show_bug.cgi?id=194293
        <rdar://problem/47822809>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOM.json:

        * runtime/JSFunction.h:
        Export `calculatedDisplayName`.

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] PrivateName to PublicName hash table is wasteful
        https://bugs.webkit.org/show_bug.cgi?id=194277

        Reviewed by Michael Saboff.

        PrivateNames account for a lot of memory in the initial JSC footprint. BuiltinNames have Identifier fields corresponding to these PrivateNames
        which makes the sizeof(BuiltinNames) about 6KB. It also maintains hash tables for "PublicName to PrivateName" and "PrivateName to PublicName",
        each of which takes 16KB memory. While "PublicName to PrivateName" functionality is used in builtin JS (parsing "@xxx" and get a private
        name for "xxx"), "PrivateName to PublicName" is rarely used. Holding 16KB hash table for rarely used feature is costly.

        In this patch, we add some rules to remove "PrivateName to PublicName" hash table.

        1. PrivateName's content should be the same to PublicName.
        2. If PrivateName is not actually a private name (we introduced hacky mapping like "@iteratorSymbol" => Symbol.iterator),
           the public name should be easily crafted from the given PrivateName.

        We modify the content of private names to ensure (1). And for (2), we can meet this requirement by ensuring that the "@xxxSymbol"
        is converted to "Symbol.xxx". (1) and (2) allow us to convert a private name to a public name without a large hash table.

        We also remove unused identifiers in CommonIdentifiers. And we also move some of them to WebCore's WebCoreBuiltinNames if it is only used in
        WebCore.

        * builtins/BuiltinNames.cpp:
        (JSC::BuiltinNames::BuiltinNames):
        * builtins/BuiltinNames.h:
        (JSC::BuiltinNames::lookUpPrivateName const):
        (JSC::BuiltinNames::getPublicName const):
        (JSC::BuiltinNames::checkPublicToPrivateMapConsistency):
        (JSC::BuiltinNames::appendExternalName):
        (JSC::BuiltinNames::lookUpPublicName const): Deleted.
        * builtins/BuiltinUtils.h:
        * bytecode/BytecodeDumper.cpp:
        (JSC::BytecodeDumper<Block>::dumpIdentifiers):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
        * parser/Lexer.cpp:
        (JSC::Lexer<LChar>::parseIdentifier):
        (JSC::Lexer<UChar>::parseIdentifier):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::createGeneratorParameters):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        (JSC::Parser<LexerType>::parseClassDeclaration):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/ParserArena.h:
        (JSC::IdentifierArena::makeIdentifier):
        * runtime/CachedTypes.cpp:
        (JSC::CachedUniquedStringImpl::encode):
        (JSC::CachedUniquedStringImpl::decode const):
        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        (JSC::CommonIdentifiers::lookUpPrivateName const):
        (JSC::CommonIdentifiers::getPublicName const):
        (JSC::CommonIdentifiers::lookUpPublicName const): Deleted.
        * runtime/CommonIdentifiers.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError):
        * runtime/Identifier.cpp:
        (JSC::Identifier::dump const):
        * runtime/Identifier.h:
        * runtime/IdentifierInlines.h:
        (JSC::Identifier::fromUid):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * tools/JSDollarVM.cpp:
        (JSC::functionGetPrivateProperty):

2019-02-06  Keith Rollin  <krollin@apple.com>

        Really enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194357
        <rdar://problem/47861231>

        Reviewed by Chris Dumez.

        Bug 194124 was supposed to enable the automatic checking and
        regenerating of .xcfilelist files during the build. While related
        changes were included in that patch, the change to actually enable the
        operation somehow was omitted. This patch actually enables the
        operation. The check-xcfilelist.sh scripts now check
        WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
        from the checking.

        * Scripts/check-xcfilelists.sh:

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Unify indirectEvalExecutableSpace and directEvalExecutableSpace
        https://bugs.webkit.org/show_bug.cgi?id=194339

        Reviewed by Michael Saboff.

        DirectEvalExecutable and IndirectEvalExecutable have completely same memory layout.
        They have even the same structure. This patch unifies the subspaces for them.

        * runtime/DirectEvalExecutable.h:
        * runtime/EvalExecutable.h:
        (JSC::EvalExecutable::subspaceFor):
        * runtime/IndirectEvalExecutable.h:
        * runtime/VM.cpp:
        * runtime/VM.h:
        (JSC::VM::forEachScriptExecutableSpace):

2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] NativeExecutable should be smaller
        https://bugs.webkit.org/show_bug.cgi?id=194331

        Reviewed by Michael Saboff.

        NativeExecutable takes 88 bytes now. Since our GC rounds the size with 16, it actually takes 96 bytes in IsoSubspaces.
        Since a lot of NativeExecutable are allocated, we already has two MarkedBlocks even just after JSGlobalObject initialization.
        This patch makes sizeof(NativeExecutable) 64 bytes, which is 32 bytes smaller than 96 bytes. Now our JSGlobalObject initialization
        only takes one MarkedBlock for NativeExecutable.

        To make NativeExecutable smaller,

        1. m_numParametersForCall and m_numParametersForConstruct in ExecutableBase are only meaningful in ScriptExecutable subclasses. Since
           they are not touched from JIT, we can remove them from ExecutableBase and move them to ScriptExecutable.

        2. DOMJIT::Signature* is rarely used. Rather than having it in NativeExecutable, we should put it in NativeJITCode. Since NativeExecutable
           always has JITCode, we can safely query the value from NativeExecutable. This patch creates NativeDOMJITCode, which is a subclass of
           NativeJITCode, and instantiated only when DOMJIT::Signature* is given.

        3. Move Intrinsic to a member of ScriptExecutable or JITCode. Since JITCode has some paddings to put things, we can leverage this to put
           Intrinsic for NativeExecutable.

        We also move "clearCode" code from ExecutableBase to ScriptExecutable since it is only valid for ScriptExecutable subclasses.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CallVariant.h:
        * interpreter/Interpreter.cpp:
        * jit/JITCode.cpp:
        (JSC::DirectJITCode::DirectJITCode):
        (JSC::NativeJITCode::NativeJITCode):
        (JSC::NativeDOMJITCode::NativeDOMJITCode):
        * jit/JITCode.h:
        (JSC::JITCode::signature const):
        (JSC::JITCode::intrinsic):
        * jit/JITOperations.cpp:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/Repatch.cpp:
        * llint/LLIntSlowPaths.cpp:
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::dump const):
        (JSC::ExecutableBase::hashFor const):
        (JSC::ExecutableBase::hasClearableCode const): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        * runtime/ExecutableBase.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::isModuleProgramExecutable):
        (JSC::ExecutableBase::isHostFunction const):
        (JSC::ExecutableBase::generatedJITCodeForCall const):
        (JSC::ExecutableBase::generatedJITCodeForConstruct const):
        (JSC::ExecutableBase::generatedJITCodeFor const):
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall const): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct const): Deleted.
        (JSC::ExecutableBase::intrinsic const): Deleted.
        * runtime/ExecutableBaseInlines.h: Added.
        (JSC::ExecutableBase::intrinsic const):
        (JSC::ExecutableBase::hasJITCodeForCall const):
        (JSC::ExecutableBase::hasJITCodeForConstruct const):
        * runtime/JSBoundFunction.cpp:
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::createStructure):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::NativeExecutable::signatureFor const):
        (JSC::NativeExecutable::intrinsic const):
        * runtime/NativeExecutable.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::clearCode):
        (JSC::ScriptExecutable::installCode):
        (JSC::ScriptExecutable::hasClearableCode const):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::intrinsic const):
        (JSC::ScriptExecutable::hasJITCodeForCall const):
        (JSC::ScriptExecutable::hasJITCodeForConstruct const):
        * runtime/VM.cpp:
        (JSC::VM::getHostFunction):

2019-02-06  Pablo Saavedra  <psaavedra@igalia.com>

        Build failure after r240431
        https://bugs.webkit.org/show_bug.cgi?id=194330

        Reviewed by Žan Doberšek.

        * API/glib/JSCOptions.cpp:

2019-02-05  Mark Lam  <mark.lam@apple.com>

        Fix DFG's doesGC() for a few more nodes.
        https://bugs.webkit.org/show_bug.cgi?id=194307
        <rdar://problem/47832956>

        Reviewed by Yusuke Suzuki.

        Fix doesGC() for the following nodes:

            NumberToStringWithValidRadixConstant:
                Calls operationInt32ToStringWithValidRadix(), which calls int32ToString(),
                which can allocate a string.
                Calls operationInt52ToStringWithValidRadix(), which calls int52ToString(),
                which can allocate a string.
                Calls operationDoubleToStringWithValidRadix(), which calls numberToString(),
                which can allocate a string.

            RegExpExecNonGlobalOrSticky: calls createRegExpMatchesArray() which allocates
                memory for all kinds of objects.
            RegExpMatchFast: calls operationRegExpMatchFastString(), which calls
                RegExpObject::execInline() and RegExpObject::matchGlobal().  Both of
                these allocates memory for the match result.
            RegExpMatchFastGlobal: calls operationRegExpMatchFastGlobalString(), which
                calls RegExpObject's collectMatches(), which allocates an array amongst
                other objects.

            StringFromCharCode:
                If the uint32 code to convert is greater than maxSingleCharacterString,
                we'll call operationStringFromCharCode(), which calls jsSingleCharacterString(),
                which allocates a new string if the code is greater than maxSingleCharacterString.

        Also fix SpeculativeJIT::compileFromCharCode() and FTL's compileStringFromCharCode()
        to use maxSingleCharacterString instead of a literal constant.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileFromCharCode):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):

2019-02-05  Keith Rollin  <krollin@apple.com>

        Enable the automatic checking and regenerations of .xcfilelists during builds
        https://bugs.webkit.org/show_bug.cgi?id=194124
        <rdar://problem/47721277>

        Reviewed by Tim Horton.

        Bug 193790 add a facility for checking -- during build time -- that
        any needed .xcfilelist files are up-to-date and for updating them if
        they are not. This facility was initially opt-in by setting
        WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
        the process seemed robust. Its now time to enable this facility and
        make it opt-out. If there is a need to disable this facility, set and
        export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
        running `make` or `build-webkit`, or before running Xcode from the
        command line.

        Additionally, remove the step that generates a list of source files
        going into the UnifiedSources build step. It's only necessarily to
        specify Sources.txt and SourcesCocoa.txt as inputs.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * UnifiedSources-input.xcfilelist: Removed.

2019-02-05  Keith Rollin  <krollin@apple.com>

        Update .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=194121
        <rdar://problem/47720863>

        Reviewed by Tim Horton.

        Preparatory to enabling the facility for automatically updating the
        .xcfilelist files, check in a freshly-updated set so that not everyone
        runs up against having to regenerate them themselves.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2019-02-05  Andy VanWagoner  <andy@vanwagoner.family>

        [INTL] improve efficiency of Intl.NumberFormat formatToParts
        https://bugs.webkit.org/show_bug.cgi?id=185557

        Reviewed by Mark Lam.

        Since field nesting depth is minimal, this algorithm should be effectively O(n),
        where n is the number of characters in the formatted string.
        It may be less memory efficient than the previous impl, since the intermediate Vector
        is the length of the string, instead of the count of the fields.

        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::formatToParts):
        * runtime/IntlNumberFormat.h:

2019-02-05  Mark Lam  <mark.lam@apple.com>

        Move DFG nodes that clobberize() says will write(Heap) to the doesGC() list that returns true.
        https://bugs.webkit.org/show_bug.cgi?id=194298
        <rdar://problem/47827555>

        Reviewed by Saam Barati.

        We do this for 3 reasons:
        1. It's clearer when reading doesGC()'s code that these nodes will return true.
        2. If things change in the future where clobberize() no longer reports these nodes
           as write(Heap), each node should be vetted first to make sure that it can never
           GC before being moved back to the doesGC() list that returns false.
        3. This reduces the list of nodes that we need to audit to make sure doesGC() is
           correct in its claims about the nodes' GCing possibility.

        The list of nodes moved are:

            ArrayPush
            ArrayPop
            Call
            CallEval
            CallForwardVarargs
            CallVarargs
            Construct
            ConstructForwardVarargs
            ConstructVarargs
            DefineDataProperty
            DefineAccessorProperty
            DeleteById
            DeleteByVal
            DirectCall
            DirectConstruct
            DirectTailCallInlinedCaller
            GetById
            GetByIdDirect
            GetByIdDirectFlush
            GetByIdFlush
            GetByIdWithThis
            GetByValWithThis
            GetDirectPname
            GetDynamicVar
            HasGenericProperty
            HasOwnProperty
            HasStructureProperty
            InById
            InByVal
            InstanceOf
            InstanceOfCustom
            LoadVarargs
            NumberToStringWithRadix
            PutById
            PutByIdDirect
            PutByIdFlush
            PutByIdWithThis
            PutByOffset
            PutByValWithThis
            PutDynamicVar
            PutGetterById
            PutGetterByVal
            PutGetterSetterById
            PutSetterById
            PutSetterByVal
            PutStack
            PutToArguments
            RegExpExec
            RegExpTest
            ResolveScope
            ResolveScopeForHoistingFuncDeclInEval
            TailCall
            TailCallForwardVarargsInlinedCaller
            TailCallInlinedCaller
            TailCallVarargsInlinedCaller
            ToNumber
            ToPrimitive
            ValueNegate

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

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

        [JSC] Shrink sizeof(UnlinkedCodeBlock)
        https://bugs.webkit.org/show_bug.cgi?id=194281

        Reviewed by Michael Saboff.

        This patch first attempts to reduce the size of UnlinkedCodeBlock in a relatively simpler way. Reordering members, remove unused member, and
        move rarely used members to RareData. This changes sizeof(UnlinkedCodeBlock) from 312 to 256.

        Still we have several chances to reduce sizeof(UnlinkedCodeBlock). Making more Vectors to RefCountedArrays can be done with some restructuring
        of generatorification phase. It would be possible to remove m_sourceURLDirective and m_sourceMappingURLDirective from UnlinkedCodeBlock since
        they should be in SourceProvider and that should be enough. These changes require some intrusive modifications and we make them as a future work.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bitVectors const): Deleted.
        * bytecode/CodeType.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::shrinkToFit):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::bitVector):
        (JSC::UnlinkedCodeBlock::addBitVector):
        (JSC::UnlinkedCodeBlock::addSetConstant):
        (JSC::UnlinkedCodeBlock::constantRegisters):
        (JSC::UnlinkedCodeBlock::numberOfConstantIdentifierSets const):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        (JSC::UnlinkedCodeBlock::codeType const):
        (JSC::UnlinkedCodeBlock::didOptimize const):
        (JSC::UnlinkedCodeBlock::setDidOptimize):
        (JSC::UnlinkedCodeBlock::usesGlobalObject const): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister const): Deleted.
        (JSC::UnlinkedCodeBlock::bitVectors const): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::emitLoadGlobalObject): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):
        (JSC::CachedCodeBlock::scopeRegister const):
        (JSC::CachedCodeBlock::codeType const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::decode const):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedCodeBlock::globalObjectRegister const): Deleted.

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

        Unreviewed, add missing exception checks after r240637
        https://bugs.webkit.org/show_bug.cgi?id=193546

        * tools/JSDollarVM.cpp:
        (JSC::functionShadowChickenFunctionsOnStack):

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

        [JSC] Shrink size of VM by lazily allocating IsoSubspaces for non-common types
        https://bugs.webkit.org/show_bug.cgi?id=193993

        Reviewed by Keith Miller.

        JSC::VM has a lot of IsoSubspaces, and each takes 504B. This unnecessarily makes VM so large.
        And some of them are rarely used. We should allocate it lazily.

        In this patch, we make some `IsoSubspaces` `std::unique_ptr<IsoSubspace>`. And we add ensureXXXSpace
        functions which allocate IsoSubspaces lazily. This function is used by subspaceFor<> in each class.
        And we also add subspaceForConcurrently<> function, which is called from concurrent JIT tiers. This
        returns nullptr if the subspace is not allocated yet. JSCell::subspaceFor now takes second template
        parameter which tells the function whether subspaceFor is concurrently done. If the IsoSubspace is
        lazily created, we may return nullptr for the concurrent access. We ensure the space's initialization
        by using WTF::storeStoreFence when lazily allocating it.

        In GC's constraint solving, we may touch these lazily allocated spaces. At that time, we check the
        existence of the space before touching this. This is not racy because the main thread is stopped when
        the constraint solving is working.

        This changes sizeof(VM) from 64736 to 56472.

        Another interesting thing is that we removed `PreventCollectionScope preventCollectionScope(heap);` in
        `Subspace::initialize`. This is really dangerous API since it easily causes dead-lock between the
        collector and the mutator if IsoSubspace is dynamically created. We do want to make IsoSubspaces
        dynamically-created ones since the requirement of the pre-allocation poses a scalability problem
        of IsoSubspace adoption because IsoSubspace is large. Registered Subspace is only touched in the
        EndPhase, and the peripheries should be stopped when running EndPhase. Thus, as long as the main thread
        can run this IsoSubspace code, the collector is never EndPhase. So this is safe.

        * API/JSCallbackFunction.h:
        * API/ObjCCallbackFunction.h:
        (JSC::ObjCCallbackFunction::subspaceFor):
        * API/glib/JSCCallbackFunction.h:
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::finalizeUnconditionally):
        * bytecode/CodeBlock.h:
        * bytecode/EvalCodeBlock.h:
        * bytecode/ExecutableToCodeBlockEdge.h:
        * bytecode/FunctionCodeBlock.h:
        * bytecode/ModuleProgramCodeBlock.h:
        * bytecode/ProgramCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
        * bytecode/UnlinkedFunctionExecutable.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        (JSC::DFG::SpeculativeJIT::compileNewObject):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        (JSC::Heap::deleteAllCodeBlocks):
        (JSC::Heap::deleteAllUnlinkedCodeBlocks):
        (JSC::Heap::addCoreConstraints):
        * heap/Subspace.cpp:
        (JSC::Subspace::initialize):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize):
        (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_object):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        * runtime/DirectArguments.h:
        * runtime/DirectEvalExecutable.h:
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::subspaceFor):
        * runtime/ExecutableBase.h:
        * runtime/FunctionExecutable.h:
        * runtime/IndirectEvalExecutable.h:
        * runtime/InferredValue.cpp:
        (JSC::InferredValue::visitChildren):
        * runtime/InferredValue.h:
        * runtime/InferredValueInlines.h:
        (JSC::InferredValue::finalizeUnconditionally):
        * runtime/InternalFunction.h:
        * runtime/JSAsyncFunction.h:
        * runtime/JSAsyncGeneratorFunction.h:
        * runtime/JSBoundFunction.h:
        * runtime/JSCell.h:
        (JSC::subspaceFor):
        (JSC::subspaceForConcurrently):
        * runtime/JSCellInlines.h:
        (JSC::allocatorForNonVirtualConcurrently):
        * runtime/JSCustomGetterSetterFunction.h:
        * runtime/JSDestructibleObject.h:
        * runtime/JSFunction.h:
        * runtime/JSGeneratorFunction.h:
        * runtime/JSImmutableButterfly.h:
        * runtime/JSLexicalEnvironment.h:
        (JSC::JSLexicalEnvironment::subspaceFor):
        * runtime/JSNativeStdFunction.h:
        * runtime/JSSegmentedVariableObject.h:
        * runtime/JSString.h:
        * runtime/ModuleProgramExecutable.h:
        * runtime/NativeExecutable.h:
        * runtime/ProgramExecutable.h:
        * runtime/PropertyMapHashTable.h:
        * runtime/ProxyRevoke.h:
        * runtime/ScopedArguments.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::clearCode):
        (JSC::ScriptExecutable::installCode):
        * runtime/Structure.h:
        * runtime/StructureRareData.h:
        * runtime/SubspaceAccess.h: Copied from Source/JavaScriptCore/runtime/InferredValueInlines.h.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::SpaceAndSet::SpaceAndSet):
        (JSC::VM::SpaceAndSet::setFor):
        (JSC::VM::forEachScriptExecutableSpace):
        (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): Deleted.
        (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): Deleted.
        (JSC::VM::ScriptExecutableSpaceAndSet::ScriptExecutableSpaceAndSet): Deleted.
        (JSC::VM::ScriptExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
        (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::UnlinkedFunctionExecutableSpaceAndSet): Deleted.
        (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
        * runtime/WeakMapImpl.h:
        (JSC::WeakMapImpl::subspaceFor):
        * wasm/js/JSWebAssemblyCodeBlock.h:
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyWrapperFunction.h:

2019-02-04  Keith Miller  <keith_miller@apple.com>

        Change llint operand macros to inline functions
        https://bugs.webkit.org/show_bug.cgi?id=194248

        Reviewed by Mark Lam.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getNonConstantOperand):
        (JSC::LLInt::getOperand):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::genericCall):
        (JSC::LLInt::varargsSetup):
        (JSC::LLInt::commonCallEval):

2019-02-04  Robin Morisset  <rmorisset@apple.com>

        when lowering AssertNotEmpty, create the value before creating the patchpoint
        https://bugs.webkit.org/show_bug.cgi?id=194231

        Reviewed by Saam Barati.

        This is a very simple change: we should never generate B3 IR where an instruction depends on a value that comes later in the instruction stream.
        AssertNotEmpty was generating some such IR, it probably slipped through until now because it is a rather rare and tricky instruction to generate.

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

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

        [JSC] ExecutableToCodeBlockEdge should be smaller
        https://bugs.webkit.org/show_bug.cgi?id=194244

        Reviewed by Michael Saboff.

        ExecutableToCodeBlockEdge is allocated so many times. However its memory layout is not efficient.
        sizeof(ExecutableToCodeBlockEdge) is 24bytes, but it discards 7bytes due to one bool m_isActive flag.
        Because our size classes are rounded by 16bytes, ExecutableToCodeBlockEdge takes 32bytes. So, half of
        it is wasted. We should fit it into 16bytes so that we can efficiently allocate it.

        In this patch, we leverages TypeInfoMayBePrototype bit in JSTypeInfo. It is a bit special TypeInfo bit
        since this is per-cell bit. We rename this to TypeInfoPerCellBit, and use it as a `m_isActive` mark in
        ExecutableToCodeBlockEdge. In JSObject subclasses, we use it as MayBePrototype flag.

        Since this flag is not changed in CAS style, we must not change this in concurrent threads. This is OK
        for ExecutableToCodeBlockEdge's m_isActive flag since this is touched on the main thread (ScriptExecutable::installCode
        does not touch it if it is called in non-main threads).

        * bytecode/ExecutableToCodeBlockEdge.cpp:
        (JSC::ExecutableToCodeBlockEdge::finishCreation):
        (JSC::ExecutableToCodeBlockEdge::visitChildren):
        (JSC::ExecutableToCodeBlockEdge::activate):
        (JSC::ExecutableToCodeBlockEdge::deactivate):
        (JSC::ExecutableToCodeBlockEdge::isActive const):
        * bytecode/ExecutableToCodeBlockEdge.h:
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::perCellBit const):
        (JSC::JSCell::setPerCellBit):
        (JSC::JSCell::mayBePrototype const): Deleted.
        (JSC::JSCell::didBecomePrototype): Deleted.
        * runtime/JSObject.cpp:
        (JSC::JSObject::setPrototypeDirect):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::mayBePrototype const):
        (JSC::JSObject::didBecomePrototype):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::perCellBit):
        (JSC::TypeInfo::mergeInlineTypeFlags):
        (JSC::TypeInfo::mayBePrototype): Deleted.

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

        [JSC] Shrink size of FunctionExecutable
        https://bugs.webkit.org/show_bug.cgi?id=194191

        Reviewed by Michael Saboff.

        This patch reduces the size of FunctionExecutable. Since it is allocated in IsoSubspace, reducing the size directly
        improves the allocation efficiency.

        1. ScriptExecutable (base class of FunctionExecutable) has several members, but it is meaningful only in FunctionExecutable.
           We remove this from ScriptExecutable, and move it to FunctionExecutable.

        2. FunctionExecutable has several data which are rarely used. One for FunctionOverrides functionality, which is typically
           used for JSC debugging purpose, and another is TypeSet and offsets for type profiler. We move them to RareData and reduce
           the size of FunctionExecutable in the common case.

        This patch changes the size of FunctionExecutable from 176 to 144.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpSource):
        (JSC::CodeBlock::finishCreation):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::OpInfoWrapper::as const):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::computeLineAndColumn const):
        * runtime/ExecutableBase.h:
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::ensureRareDataSlow):
        * runtime/FunctionExecutable.h:
        * runtime/Intrinsic.h:
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::ProgramExecutable):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::overrideLineNumber const):
        (JSC::ScriptExecutable::typeProfilingStartOffset const):
        (JSC::ScriptExecutable::typeProfilingEndOffset const):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::firstLine const):
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber const): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber const): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset const): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset const): Deleted.
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::computeLineAndColumn const):
        * tools/JSDollarVM.cpp:
        (JSC::functionReturnTypeFor):

2019-02-04  Mark Lam  <mark.lam@apple.com>

        DFG's doesGC() is incorrect about the SameValue node's behavior.
        https://bugs.webkit.org/show_bug.cgi?id=194211
        <rdar://problem/47608913>

        Reviewed by Saam Barati.

        Only the DoubleRepUse case is guaranteed to not GC.  The other case may GC because
        it calls operationSameValue() which may allocate memory for resolving ropes.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

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

        [JSC] UnlinkedMetadataTable assumes that MetadataTable is destroyed before it is destructed, but order of destruction of JS heap cells are not guaranteed
        https://bugs.webkit.org/show_bug.cgi?id=194031

        Reviewed by Saam Barati.

        UnlinkedMetadataTable assumes that MetadataTable linked against this UnlinkedMetadataTable is already destroyed when UnlinkedMetadataTable is destroyed.
        This means that UnlinkedCodeBlock is destroyed after all the linked CodeBlocks are destroyed. But this assumption is not valid since GC's finalizer
        sweeps objects without considering the dependencies among swept objects. UnlinkedMetadataTable can be destroyed even before linked MetadataTable is
        destroyed if UnlinkedCodeBlock is destroyed before linked CodeBlock is destroyed.

        To make the above assumption valid, we make UnlinkedMetadataTable RefCounted object, and make MetadataTable hold the strong ref to UnlinkedMetadataTable.
        This ensures that UnlinkedMetadataTable is destroyed after all the linked MetadataTables are destroyed.

        * bytecode/MetadataTable.cpp:
        (JSC::MetadataTable::MetadataTable):
        (JSC::MetadataTable::~MetadataTable):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::visitChildren):
        (JSC::UnlinkedCodeBlock::estimatedSize):
        (JSC::UnlinkedCodeBlock::setInstructions):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::metadata):
        (JSC::UnlinkedCodeBlock::metadataSizeInBytes):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::create):
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
        * runtime/CachedTypes.cpp:
        (JSC::CachedMetadataTable::decode const):
        (JSC::CachedCodeBlock::metadata const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::decode const):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):

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

        [JSC] Decouple JIT related data from CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=194187

        Reviewed by Saam Barati.

        CodeBlock holds bunch of data which is only used after JIT starts compiling it.
        We have three types of data in CodeBlock.

        1. The data which is always used. CodeBlock needs to hold it.
        2. The data which is touched even in LLInt, but it is only meaningful in JIT tiers. The example is profiling.
        3. The data which is used after the JIT compiler starts running for the given CodeBlock.

        This patch decouples (3) from CodeBlock as CodeBlock::JITData. Even if we have bunch of CodeBlocks, only small
        number of them gets JIT compilation. Always allocating (3) data enlarges the size of CodeBlock, leading to the
        memory waste. Potentially we can decouple (2) in another data structure, but we first do (3) since (3) is beneficial
        in both non-JIT and *JIT* modes.

        JITData is created only when JIT compiler wants to use it. So it can be concurrently created and used, so it is guarded
        by the lock of CodeBlock.

        The size of CodeBlock is reduced from 512 to 352.

        This patch improves memory footprint and gets 1.1% improvement in RAMification.

            Footprint geomean: 36696503 (34.997 MB)
            Peak Footprint geomean: 38595988 (36.808 MB)
            Score: 37634263 (35.891 MB)

            Footprint geomean: 37172768 (35.451 MB)
            Peak Footprint geomean: 38978288 (37.173 MB)
            Score: 38064824 (36.301 MB)

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::ensureJITDataSlow):
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches):
        (JSC::CodeBlock::getICStatusMap):
        (JSC::CodeBlock::addStubInfo):
        (JSC::CodeBlock::addJITAddIC):
        (JSC::CodeBlock::addJITMulIC):
        (JSC::CodeBlock::addJITSubIC):
        (JSC::CodeBlock::addJITNegIC):
        (JSC::CodeBlock::findStubInfo):
        (JSC::CodeBlock::addByValInfo):
        (JSC::CodeBlock::addCallLinkInfo):
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex):
        (JSC::CodeBlock::addRareCaseProfile):
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset):
        (JSC::CodeBlock::resetJITData):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::shrinkToFit):
        (JSC::CodeBlock::linkIncomingCall):
        (JSC::CodeBlock::linkIncomingPolymorphicCall):
        (JSC::CodeBlock::unlinkIncomingCalls):
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
        (JSC::CodeBlock::dumpValueProfiles):
        (JSC::CodeBlock::setPCToCodeOriginMap):
        (JSC::CodeBlock::findPC):
        (JSC::CodeBlock::dumpMathICStats):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::ensureJITData):
        (JSC::CodeBlock::setJITCodeMap):
        (JSC::CodeBlock::jitCodeMap):
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::lazyOperandValueProfiles):
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::jitCodeMap const): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        * bytecode/MethodOfGettingAValueProfile.cpp:
        (JSC::MethodOfGettingAValueProfile::emitReportValue const):
        (JSC::MethodOfGettingAValueProfile::reportValue):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * jit/JIT.h:
        * jit/JITOperations.cpp:
        (JSC::tryGetByValOptimize):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByVal):
        (JSC::JIT::privateCompilePutByVal):

2018-12-16  Darin Adler  <darin@apple.com>

        Convert additional String::format clients to alternative approaches
        https://bugs.webkit.org/show_bug.cgi?id=192746

        Reviewed by Alexey Proskuryakov.

        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::stopTiming): Use makeString
        and FormattedNumber::fixedWidth.

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

        [JSC] Remove some of IsoSubspaces for JSFunction subclasses
        https://bugs.webkit.org/show_bug.cgi?id=194177

        Reviewed by Saam Barati.

        JSGeneratorFunction, JSAsyncFunction, and JSAsyncGeneratorFunction do not add any fields / classInfo methods.
        We can share the IsoSubspace for JSFunction.

        * runtime/JSAsyncFunction.h:
        * runtime/JSAsyncGeneratorFunction.h:
        * runtime/JSGeneratorFunction.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-02-01  Mark Lam  <mark.lam@apple.com>

        Remove invalid assertion in DFG's compileDoubleRep().
        https://bugs.webkit.org/show_bug.cgi?id=194130
        <rdar://problem/47699474>

        Reviewed by Saam Barati.

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

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

        [JSC] Unify CodeBlock IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=194167

        Reviewed by Saam Barati.

        When we move CodeBlock into its IsoSubspace, we create IsoSubspaces for each subclass of CodeBlock.
        But this is not necessary since,

        1. They do not override the classInfo methods.
        2. sizeof(ProgramCodeBlock etc.) == sizeof(CodeBlock) since subclasses adds no additional fields.

        Creating IsoSubspace for each subclass is costly in terms of memory. Especially, IsoSubspace for
        ProgramCodeBlock is. We typically create only one ProgramCodeBlock, and it means the rest of the
        MarkedBlock (16KB - sizeof(footer) - sizeof(ProgramCodeBlock)) is just wasted.

        This patch unifies these IsoSubspaces into one.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::destroy):
        * bytecode/CodeBlock.h:
        * bytecode/EvalCodeBlock.cpp:
        (JSC::EvalCodeBlock::destroy): Deleted.
        * bytecode/EvalCodeBlock.h: We drop some utility functions in EvalCodeBlock and use UnlinkedEvalCodeBlock's one directly.
        * bytecode/FunctionCodeBlock.cpp:
        (JSC::FunctionCodeBlock::destroy): Deleted.
        * bytecode/FunctionCodeBlock.h:
        * bytecode/GlobalCodeBlock.h:
        * bytecode/ModuleProgramCodeBlock.cpp:
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        * bytecode/ModuleProgramCodeBlock.h:
        * bytecode/ProgramCodeBlock.cpp:
        (JSC::ProgramCodeBlock::destroy): Deleted.
        * bytecode/ProgramCodeBlock.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::forEachCodeBlockSpace):

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

        Unreviewed, follow-up after r240859
        https://bugs.webkit.org/show_bug.cgi?id=194145

        Replace OOB HeapCellType with cellHeapCellType since they are completely the same.
        And rename cellDangerousBitsSpace back to cellSpace.

        * runtime/JSCellInlines.h:
        (JSC::JSCell::subspaceFor):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

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

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

        Reviewed by Mark Lam.

        * runtime/JSObject.h:
        (JSC::JSObject::subspaceFor): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-31  Mark Lam  <mark.lam@apple.com>

        Remove poisoning from CodeBlock and LLInt code.
        https://bugs.webkit.org/show_bug.cgi?id=194113

        Reviewed by Yusuke Suzuki.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::jettison):
        (JSC::CodeBlock::predictedMachineCodeSize):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::vm const):
        (JSC::CodeBlock::addConstant):
        (JSC::CodeBlock::heap const):
        (JSC::CodeBlock::replaceConstant):
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::setUpCall):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

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

        [JSC] Remove finalizer in AsyncFromSyncIteratorPrototype
        https://bugs.webkit.org/show_bug.cgi?id=194107

        Reviewed by Saam Barati.

        AsyncFromSyncIteratorPrototype uses the finalizer, but it is not necessary since it does not hold any objects which require destruction.
        We drop this finalizer. And we also make methods of AsyncFromSyncIteratorPrototype lazily allocated.

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/AsyncFromSyncIteratorPrototype.cpp:
        (JSC::AsyncFromSyncIteratorPrototype::AsyncFromSyncIteratorPrototype):
        (JSC::AsyncFromSyncIteratorPrototype::finishCreation):
        (JSC::AsyncFromSyncIteratorPrototype::create):
        * runtime/AsyncFromSyncIteratorPrototype.h:

2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>

        Fix `runJITThreadLimitTests` in testapi
        https://bugs.webkit.org/show_bug.cgi?id=194064
        <rdar://problem/46139147>

        Reviewed by Mark Lam.

        Fix typo where `targetNumberOfThreads` was not being used.

        * API/tests/testapi.mm:
        (runJITThreadLimitTests):

2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>

        testapi fails RELEASE_ASSERT(codeBlock) in fetchFromDisk() of CodeCache.h
        https://bugs.webkit.org/show_bug.cgi?id=194112

        Reviewed by Mark Lam.

        `testBytecodeCache` does not populate the bytecode cache for the global
        CodeBlock, so it should only enable `forceDiskCache` after its execution.

        * API/tests/testapi.mm:
        (testBytecodeCache):

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

        Unreviewed, follow-up after r240796

        Initialize WriteBarrier<InferredValue> in the constructor. Otherwise, GC can see the broken one
        when allocating InferredValue in FunctionExecutable::finishCreation.

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

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

        [JSC] Do not use InferredValue in non-JIT configuration
        https://bugs.webkit.org/show_bug.cgi?id=194084

        Reviewed by Saam Barati.

        InferredValue is not meaningful if our VM is non-JIT configuration. InferredValue is used to watch the instantiation of the  FunctionExecutable's
        JSFunction and SymbolTable's JSScope to explore the chance of folding them into constants in DFG and FTL. If it is instantiated only once, we can
        put a watchpoint and fold it into this constant. But if JIT is disabled, we do not need to care it.
        Even in non-JIT configuration, we still use InferredValue for FunctionExecutable to determine whether the given FunctionExecutable is preferable
        target for poly proto. If JSFunction for the FunctionExecutable is used as a constructor and instantiated more than once, poly proto Structure
        seems appropriate for objects created by this JSFunction. But at that time, only thing we would like to know is that whether JSFunction for this
        FunctionExecutable is instantiated multiple times. This does not require the full feature of InferredValue, WatchpointState is enough.
        To summarize, since nobody uses InferredValue feature in non-JIT configuration, we should not create it.

        * bytecode/ObjectAllocationProfileInlines.h:
        (JSC::ObjectAllocationProfile::initializeProfile):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::finishCreation):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/FunctionExecutable.h:
        * runtime/InferredValue.cpp:
        (JSC::InferredValue::create):
        * runtime/JSAsyncFunction.cpp:
        (JSC::JSAsyncFunction::create):
        * runtime/JSAsyncGeneratorFunction.cpp:
        (JSC::JSAsyncGeneratorFunction::create):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        * runtime/JSFunctionInlines.h:
        (JSC::JSFunction::createWithInvalidatedReallocationWatchpoint):
        * runtime/JSGeneratorFunction.cpp:
        (JSC::JSGeneratorFunction::create):
        * runtime/JSSymbolTableObject.h:
        (JSC::JSSymbolTableObject::setSymbolTable):
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::finishCreation):
        * runtime/VM.cpp:
        (JSC::VM::VM):

2019-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][JSC] Changing ud_opcode.py should trigger invoking ud_opcode.py
        https://bugs.webkit.org/show_bug.cgi?id=194085

        Reviewed by Yusuke Suzuki.

        r240730 changed ud_itab.py and caused incremental build failures
        for Ninja builds.

        * CMakeLists.txt: Added ud_itab.py and optable.xml to UDIS_GEN_DEP.

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

        [JSC] Symbol should be in destructibleCellSpace
        https://bugs.webkit.org/show_bug.cgi?id=194082

        Reviewed by Saam Barati.

        Because Symbol's member was not poisoned, we changed the subspace for Symbol from destructibleCellSpace
        to cellJSValueOOBSpace. But the problem is cellJSValueOOBSpace is a space for cells which are not
        destructible. As a result, Symbol::destroy is never called, and SymbolImpl is leaked. This patch makes
        Symbol's space destructibleCellSpace to appropriately call the destructor.

        * runtime/Symbol.h:

2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r240755.

        This was not correct

        Reverted changeset:

        "Unreviewed, fix GCC build after r240730"
        https://bugs.webkit.org/show_bug.cgi?id=194041
        https://trac.webkit.org/changeset/240755

2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix GCC build after r240730
        https://bugs.webkit.org/show_bug.cgi?id=194041
        <rdar://problem/47680981>

        * disassembler/udis86/ud_itab.py:
        (UdItabGenerator.genOpcodeTablesLookupIndex):

2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>

        testapi's `testBytecodeCache` does not need to run the code twice
        https://bugs.webkit.org/show_bug.cgi?id=194046

        Reviewed by Mark Lam.

        Since we populate the cache eagerly (unlike the stress tests) we don't
        need to run the code twice.

        * API/tests/testapi.mm:
        (testBytecodeCache):

2019-01-30  Saam barati  <sbarati@apple.com>

        [WebAssembly] Change BBQ to generate Air IR
        https://bugs.webkit.org/show_bug.cgi?id=191802
        <rdar://problem/47651718>

        Reviewed by Keith Miller.

        This patch adds a new Wasm compiler for the BBQ tier. Instead
        of compiling using  B3-01, we now generate Air code directly.
        The goal of doing this was to speed up compile times for Wasm
        programs.
        
        This patch provides us with a 20-30% compile time speedup. However, I
        have ideas on how to improve compile times even further. For example,
        we should probably implement a faster running register allocator:
        https://bugs.webkit.org/show_bug.cgi?id=194036
        
        We can also improve on the code we generate.
        We should emit better code for Switch: https://bugs.webkit.org/show_bug.cgi?id=194053
        And we should do better instruction selection in various
        areas: https://bugs.webkit.org/show_bug.cgi?id=193999

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/B3LowerToAir.cpp:
        * b3/B3StackmapSpecial.h:
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::emitDefaultPrologue):
        * b3/air/AirCode.h:
        * b3/air/AirTmp.h:
        (JSC::B3::Air::Tmp::Tmp):
        * runtime/Options.h:
        * wasm/WasmAirIRGenerator.cpp: Added.
        (JSC::Wasm::ConstrainedTmp::ConstrainedTmp):
        (JSC::Wasm::TypedTmp::TypedTmp):
        (JSC::Wasm::TypedTmp::operator== const):
        (JSC::Wasm::TypedTmp::operator!= const):
        (JSC::Wasm::TypedTmp::operator bool const):
        (JSC::Wasm::TypedTmp::operator Tmp const):
        (JSC::Wasm::TypedTmp::operator Arg const):
        (JSC::Wasm::TypedTmp::tmp const):
        (JSC::Wasm::TypedTmp::type const):
        (JSC::Wasm::AirIRGenerator::ControlData::ControlData):
        (JSC::Wasm::AirIRGenerator::ControlData::dump const):
        (JSC::Wasm::AirIRGenerator::ControlData::type const):
        (JSC::Wasm::AirIRGenerator::ControlData::signature const):
        (JSC::Wasm::AirIRGenerator::ControlData::hasNonVoidSignature const):
        (JSC::Wasm::AirIRGenerator::ControlData::targetBlockForBranch):
        (JSC::Wasm::AirIRGenerator::ControlData::convertIfToBlock):
        (JSC::Wasm::AirIRGenerator::ControlData::resultForBranch const):
        (JSC::Wasm::AirIRGenerator::emptyExpression):
        (JSC::Wasm::AirIRGenerator::fail const):
        (JSC::Wasm::AirIRGenerator::setParser):
        (JSC::Wasm::AirIRGenerator::toTmpVector):
        (JSC::Wasm::AirIRGenerator::validateInst):
        (JSC::Wasm::AirIRGenerator::extractArg):
        (JSC::Wasm::AirIRGenerator::append):
        (JSC::Wasm::AirIRGenerator::appendEffectful):
        (JSC::Wasm::AirIRGenerator::newTmp):
        (JSC::Wasm::AirIRGenerator::g32):
        (JSC::Wasm::AirIRGenerator::g64):
        (JSC::Wasm::AirIRGenerator::f32):
        (JSC::Wasm::AirIRGenerator::f64):
        (JSC::Wasm::AirIRGenerator::tmpForType):
        (JSC::Wasm::AirIRGenerator::addPatchpoint):
        (JSC::Wasm::AirIRGenerator::emitPatchpoint):
        (JSC::Wasm::AirIRGenerator::emitCheck):
        (JSC::Wasm::AirIRGenerator::emitCCall):
        (JSC::Wasm::AirIRGenerator::moveOpForValueType):
        (JSC::Wasm::AirIRGenerator::instanceValue):
        (JSC::Wasm::AirIRGenerator::fixupPointerPlusOffset):
        (JSC::Wasm::AirIRGenerator::restoreWasmContextInstance):
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::emitThrowException):
        (JSC::Wasm::AirIRGenerator::addLocal):
        (JSC::Wasm::AirIRGenerator::addConstant):
        (JSC::Wasm::AirIRGenerator::addArguments):
        (JSC::Wasm::AirIRGenerator::getLocal):
        (JSC::Wasm::AirIRGenerator::addUnreachable):
        (JSC::Wasm::AirIRGenerator::addGrowMemory):
        (JSC::Wasm::AirIRGenerator::addCurrentMemory):
        (JSC::Wasm::AirIRGenerator::setLocal):
        (JSC::Wasm::AirIRGenerator::getGlobal):
        (JSC::Wasm::AirIRGenerator::setGlobal):
        (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::sizeOfLoadOp):
        (JSC::Wasm::AirIRGenerator::emitLoadOp):
        (JSC::Wasm::AirIRGenerator::load):
        (JSC::Wasm::sizeOfStoreOp):
        (JSC::Wasm::AirIRGenerator::emitStoreOp):
        (JSC::Wasm::AirIRGenerator::store):
        (JSC::Wasm::AirIRGenerator::addSelect):
        (JSC::Wasm::AirIRGenerator::emitTierUpCheck):
        (JSC::Wasm::AirIRGenerator::addLoop):
        (JSC::Wasm::AirIRGenerator::addTopLevel):
        (JSC::Wasm::AirIRGenerator::addBlock):
        (JSC::Wasm::AirIRGenerator::addIf):
        (JSC::Wasm::AirIRGenerator::addElse):
        (JSC::Wasm::AirIRGenerator::addElseToUnreachable):
        (JSC::Wasm::AirIRGenerator::addReturn):
        (JSC::Wasm::AirIRGenerator::addBranch):
        (JSC::Wasm::AirIRGenerator::addSwitch):
        (JSC::Wasm::AirIRGenerator::endBlock):
        (JSC::Wasm::AirIRGenerator::addEndToUnreachable):
        (JSC::Wasm::AirIRGenerator::addCall):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        (JSC::Wasm::AirIRGenerator::unify):
        (JSC::Wasm::AirIRGenerator::unifyValuesWithBlock):
        (JSC::Wasm::AirIRGenerator::dump):
        (JSC::Wasm::AirIRGenerator::origin):
        (JSC::Wasm::parseAndCompileAir):
        (JSC::Wasm::AirIRGenerator::emitChecksForModOrDiv):
        (JSC::Wasm::AirIRGenerator::emitModOrDiv):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ctz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ctz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Popcnt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Popcnt>):
        (JSC::Wasm::AirIRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Nearest>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Nearest>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Trunc>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Trunc>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
        (JSC::Wasm::AirIRGenerator::addShift):
        (JSC::Wasm::AirIRGenerator::addIntegerSub):
        (JSC::Wasm::AirIRGenerator::addFloatingPointAbs):
        (JSC::Wasm::AirIRGenerator::addFloatingPointBinOp):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ceil>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Mul>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Sub>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Le>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32DemoteF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ne>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Lt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Mul>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Div>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Clz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Copysign>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertUI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ReinterpretI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64And>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ne>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Gt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sqrt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ge>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eqz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Div>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Add>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Or>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ne>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Clz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Neg>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32And>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotr>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Abs>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eq>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Copysign>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Lt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Eq>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Le>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ge>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ceil>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Shl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Floor>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Xor>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Abs>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Mul>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Sub>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ReinterpretF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Add>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sub>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Or>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Xor>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Mul>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sub>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64PromoteF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Add>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendUI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ne>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ReinterpretI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Eq>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eq>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Floor>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eqz>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ReinterpretF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sqrt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Shl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Gt>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32WrapI64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotr>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendSI32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Neg>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Add>):
        * wasm/WasmAirIRGenerator.h: Added.
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emptyExpression):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::compileFunctions):
        * wasm/WasmCallingConvention.cpp:
        (JSC::Wasm::jscCallingConventionAir):
        (JSC::Wasm::wasmCallingConventionAir):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::CallingConvention):
        (JSC::Wasm::CallingConvention::marshallArgumentImpl const):
        (JSC::Wasm::CallingConvention::marshallArgument const):
        (JSC::Wasm::CallingConventionAir::CallingConventionAir):
        (JSC::Wasm::CallingConventionAir::prologueScratch const):
        (JSC::Wasm::CallingConventionAir::marshallArgumentImpl const):
        (JSC::Wasm::CallingConventionAir::marshallArgument const):
        (JSC::Wasm::CallingConventionAir::headerSizeInBytes):
        (JSC::Wasm::CallingConventionAir::loadArguments const):
        (JSC::Wasm::CallingConventionAir::setupCall const):
        (JSC::Wasm::nextJSCOffset):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::emptyExpression):

2019-01-30  Robin Morisset  <rmorisset@apple.com>

        Object.keys can now lead to a PhantomNewArrayBuffer, OSR exit from the FTL should know how to materialize a NewArrayBuffer in that case
        https://bugs.webkit.org/show_bug.cgi?id=194050
        <rdar://problem/47595592>

        Following https://bugs.webkit.org/show_bug.cgi?id=190047, PhantomNewArrayBuffer is no longer guaranteed to originate from a NewArrayBuffer in the baseline jit.
        It can now come from Object.keys, which is a function call. We must teach the FTL how to OSR exit in that case.

        Reviewed by Yusuke Suzuki.

        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):

2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>

        Remove assertion that CachedSymbolTables should have no RareData
        https://bugs.webkit.org/show_bug.cgi?id=194037

        Reviewed by Mark Lam.

        It turns out that we don't need to cache the SymbolTableRareData and
        we should not assert that it's empty.

        * runtime/CachedTypes.cpp:
        (JSC::CachedSymbolTable::encode):

2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>

        CachedBytecode's move constructor should not call `freeDataIfOwned`
        https://bugs.webkit.org/show_bug.cgi?id=194045

        Reviewed by Mark Lam.

        That might result in freeing a garbage value

        * parser/SourceProvider.h:
        (JSC::CachedBytecode::CachedBytecode):

2019-01-30  Keith Miller  <keith_miller@apple.com>

        mul32 should convert powers of 2 to an lshift
        https://bugs.webkit.org/show_bug.cgi?id=193957

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::mul32):
        * assembler/testmasm.cpp:
        (JSC::int32Operands):
        (JSC::testMul32WithImmediates):
        (JSC::run):

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

        [JSC] Make disassembler data structures constant read-only data
        https://bugs.webkit.org/show_bug.cgi?id=194041

        Reviewed by Mark Lam.

        Bunch of disassembler data structures are not marked "const", which prevents the loader to put them in read-only region.
        This patch makes them "const".

        * disassembler/ARM64/A64DOpcode.cpp:
        * disassembler/udis86/ud_itab.py:
        (UdItabGenerator.genOpcodeTablesLookupIndex):
        (UdItabGenerator.genInsnTable):
        (UdItabGenerator.genMnemonicsList):
        (genItabH):
        * disassembler/udis86/udis86_decode.h:
        * disassembler/udis86/udis86_syn.c:
        * disassembler/udis86/udis86_syn.h:
        * disassembler/udis86/udis86_types.h:

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

        Unreviewed, update the builtin test results
        https://bugs.webkit.org/show_bug.cgi?id=194015

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * 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-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:

2019-01-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Make global static variables "const" as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=194015

        Reviewed by Mark Lam.

        Some of global static variables are not "const". For example, `static const char* name = ...`
        is not constant variable. We should make it `static const char* const name = ...`.

        * Scripts/wkbuiltins/builtins_generate_combined_header.py:
        (generate_externs_for_object):
        * Scripts/wkbuiltins/builtins_generate_separate_header.py:
        (generate_externs_for_object):
        * Scripts/wkbuiltins/builtins_generator.py:
        (BuiltinsGenerator.generate_embedded_code_string_section_for_data):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::additionBlindedConstant):
        * b3/air/AirFormTable.h:
        * b3/air/opcode_generator.rb:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterfly):
        * tools/CodeProfile.cpp:
        * tools/CodeProfile.h:

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

        Remove default constructor from LLIntPrototypeLoadAdaptiveStructureWatchpoint
        https://bugs.webkit.org/show_bug.cgi?id=194000
        <rdar://problem/47642894>

        Reviewed by Mark Lam.

        default constructor is unused and
        LLIntPrototypeLoadAdaptiveStructureWatchpoint has a reference
        data member which causes sadness.

        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:

2019-01-29  Ross Kirsling  <ross.kirsling@sony.com>

        Remove FIXME for Annex B.3.5's "for-of var" subcase.

        Rubber-stamped by Yusuke Suzuki.

        This subcase is removed from the spec in https://github.com/tc39/ecma262/pull/1393.

        * parser/Parser.h:
        (JSC::Parser::declareHoistedVariable):

2019-01-29  Mark Lam  <mark.lam@apple.com>

        Remove unneeded CPU(BIG_ENDIAN) handling in LLInt after new bytecode format.
        https://bugs.webkit.org/show_bug.cgi?id=132333

        Reviewed by Yusuke Suzuki.

        * bytecode/InstructionStream.h:
        (JSC::InstructionStreamWriter::write):
        - The 32-bit write() function need not invert the order of the bytes written to
          the bytecode stream for CPU(BUG_ENDIAN) because the incoming uint32_t value to
          be written is already in big endian order for CPU(BUG_ENDIAN) platforms.

        * llint/LLIntOfflineAsmConfig.h:
        - OFFLINE_ASM_BIG_ENDIAN is no longer needed nor used after the new bytecode format.

2019-01-29  Mark Lam  <mark.lam@apple.com>

        ValueRecovery::recover() should purify NaN values it recovers.
        https://bugs.webkit.org/show_bug.cgi?id=193978
        <rdar://problem/47625488>

        Reviewed by Saam Barati.

        According to DFG::OSRExit::executeOSRExit() and DFG::OSRExit::compileExit(),
        recovered DoubleDisplacedInJSStack values need to be purified.
        ValueRecovery::recover() should do the same.

        * bytecode/ValueRecovery.cpp:
        (JSC::ValueRecovery::recover const):

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

        [JSC] FTL should handle LocalAllocator*
        https://bugs.webkit.org/show_bug.cgi?id=193980

        Reviewed by Saam Barati.

        At some point, Allocator holds LocalAllocator* instead of 32bit integer. In FTL allocation path, we fail to use this constant LocalAllocator*
        because the FTL still use the incoming value as 32bit integer there.

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

2019-01-29  Keith Rollin  <krollin@apple.com>

        Add .xcfilelists to Run Script build phases
        https://bugs.webkit.org/show_bug.cgi?id=193792
        <rdar://problem/47201785>

        Reviewed by Alex Christensen.

        As part of supporting XCBuild, update the necessary Run Script build
        phases in their Xcode projects to refer to their associated
        .xcfilelist files.

        Note that the addition of these files bumps the Xcode project version
        number to something that's Xcode 10 compatible. This change means that
        older versions of the Xcode IDE can't read these projects. Nor can it
        fully load workspaces that refer to these projects (the updated
        projects are shown as non-expandable placeholders). `xcodebuild` can
        still build these projects; it's just that the IDE can't open them.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-01-29  Dominik Infuehr  <dinfuehr@igalia.com>

        [ARM] Check for negative zero instead of just zero
        https://bugs.webkit.org/show_bug.cgi?id=193689

        Reviewed by Mark Lam.

        ARM now performs a negative zero check in branchConvertDoubleToInt32 instead
        of just bailing out for zero.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchConvertDoubleToInt32):

2019-01-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page WebRTC settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193863
        <rdar://problem/47572764>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Page.json:
        Add more values to the `Setting` enum type:
         - `ICECandidateFilteringEnabled`
         - `MediaCaptureRequiresSecureConnection`
         - `MockCaptureDevicesEnabled`

2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>

        Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
        https://bugs.webkit.org/show_bug.cgi?id=193941

        Reviewed by Alex Christensen.

        * API/JSWeakObjectMapRefPrivate.cpp:
        * bytecompiler/NodesCodegen.cpp:
        * heap/MachineStackMarker.cpp:
        * jit/ExecutableAllocator.cpp:
        * jsc.cpp:
        * parser/Nodes.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/DateConversion.cpp:
        * runtime/DateInstance.cpp:
        * runtime/DatePrototype.cpp:
        * runtime/InitializeThreading.cpp:
        * runtime/IteratorOperations.cpp:
        * runtime/JSDateMath.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/StringPrototype.cpp:
        * runtime/VM.cpp:
        * testRegExp.cpp:
        * tools/JSDollarVM.cpp:
        * yarr/YarrInterpreter.cpp:
        * yarr/YarrJIT.cpp:
        * yarr/YarrPattern.cpp:
        * yarr/YarrUnicodeProperties.cpp:

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

        [JSC] Reduce size of memory used for ShadowChicken
        https://bugs.webkit.org/show_bug.cgi?id=193546

        Reviewed by Mark Lam.

        This patch lazily instantiate ShadowChicken. We do not need this until we start logging ShadowChicken packets.
        The removal of ShadowChicken saves 55KB memory.

        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::create):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::ensureShadowChickenPacket):
        * heap/Heap.cpp:
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::addCoreConstraints):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::ensureShadowChickenPacket):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::setDebugger):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::setDebugger): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::ensureShadowChicken):
        * runtime/VM.h:
        (JSC::VM::shadowChicken):
        * tools/JSDollarVM.cpp:
        (JSC::functionShadowChickenFunctionsOnStack):
        (JSC::changeDebuggerModeWhenIdle):

2019-01-28  Andy Estes  <aestes@apple.com>

        [watchOS] Enable Parental Controls content filtering
        https://bugs.webkit.org/show_bug.cgi?id=193939
        <rdar://problem/46641912>

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2019-01-28  Mark Lam  <mark.lam@apple.com>

        ToString node actually does GC.
        https://bugs.webkit.org/show_bug.cgi?id=193920
        <rdar://problem/46695900>

        Reviewed by Yusuke Suzuki.

        Other than for StringObjectUse and StringOrStringObjectUse, ToString and
        CallStringConstructor can allocate new JSStrings, and hence, can GC.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

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

        [JSC] RegExpConstructor should not have own IsoSubspace
        https://bugs.webkit.org/show_bug.cgi?id=193801

        Reviewed by Mark Lam.

        This patch finally removes RegExpConstructor's cached data to JSGlobalObject and remove IsoSubspace for RegExpConstructor.
        sizeof(RegExpConstructor) != sizeof(InternalFunction), so that we have 16KB memory just for RegExpConstructor. But cached
        regexp matching data (e.g. `RegExp.$1`) is per-JSGlobalObject one, and we can move this data to JSGlobalObject and remove
        it from RegExpConstructor members.

        We introduce RegExpGlobalData, which holds the per-global RegExp matching data. And we perform `performMatch` etc. with
        JSGlobalObject instead of RegExpConstructor. This change requires small changes in DFG / FTL's RecordRegExpCachedResult
        node since its 1st argument is changed from RegExpConstructor to JSGlobalObject.

        We also move emptyRegExp from RegExpPrototype to VM's RegExpCache because it is more natural place to put it.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileRecordRegExpCachedResult):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLAbstractHeapRepository.cpp:
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileRecordRegExpCachedResult):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::regExpGlobalData):
        (JSC::JSGlobalObject::regExpGlobalDataOffset):
        (JSC::JSGlobalObject::regExpConstructor const): Deleted.
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::initialize):
        * runtime/RegExpCache.h:
        (JSC::RegExpCache::emptyRegExp const):
        * runtime/RegExpCachedResult.cpp:
        (JSC::RegExpCachedResult::visitAggregate):
        (JSC::RegExpCachedResult::visitChildren): Deleted.
        * runtime/RegExpCachedResult.h:
        (JSC::RegExpCachedResult::RegExpCachedResult): Deleted.
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::regExpConstructorDollar):
        (JSC::regExpConstructorInput):
        (JSC::regExpConstructorMultiline):
        (JSC::regExpConstructorLastMatch):
        (JSC::regExpConstructorLastParen):
        (JSC::regExpConstructorLeftContext):
        (JSC::regExpConstructorRightContext):
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::RegExpConstructor::destroy): Deleted.
        (JSC::RegExpConstructor::visitChildren): Deleted.
        (JSC::RegExpConstructor::getBackref): Deleted.
        (JSC::RegExpConstructor::getLastParen): Deleted.
        (JSC::RegExpConstructor::getLeftContext): Deleted.
        (JSC::RegExpConstructor::getRightContext): Deleted.
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::performMatch): Deleted.
        (JSC::RegExpConstructor::recordMatch): Deleted.
        * runtime/RegExpGlobalData.cpp: Added.
        (JSC::RegExpGlobalData::visitAggregate):
        (JSC::RegExpGlobalData::getBackref):
        (JSC::RegExpGlobalData::getLastParen):
        (JSC::RegExpGlobalData::getLeftContext):
        (JSC::RegExpGlobalData::getRightContext):
        * runtime/RegExpGlobalData.h: Added.
        (JSC::RegExpGlobalData::cachedResult):
        (JSC::RegExpGlobalData::setMultiline):
        (JSC::RegExpGlobalData::multiline const):
        (JSC::RegExpGlobalData::input):
        (JSC::RegExpGlobalData::offsetOfCachedResult):
        * runtime/RegExpGlobalDataInlines.h: Added.
        (JSC::RegExpGlobalData::setInput):
        (JSC::RegExpGlobalData::performMatch):
        (JSC::RegExpGlobalData::recordMatch):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::matchGlobal):
        * runtime/RegExpObjectInlines.h:
        (JSC::RegExpObject::execInline):
        (JSC::RegExpObject::matchInline):
        (JSC::collectMatches):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        (JSC::regExpProtoFuncSearchFast):
        (JSC::RegExpPrototype::visitChildren): Deleted.
        * runtime/RegExpPrototype.h:
        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeCall): Use makeString.
        (Inspector::InjectedScriptBase::makeAsyncCall): Ditto.
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::getPropertyValue): Ditto.
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::enable): Ditto.
        * jsc.cpp:
        (FunctionJSCStackFunctor::operator() const): Ditto.

        * runtime/CodeCache.cpp:
        (JSC::writeCodeBlock): Use makeString's numeric capabilities instead of
        using String::number.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Use string concatenation.
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList): Ditto.

2019-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Introduce a static accessibility tree
        https://bugs.webkit.org/show_bug.cgi?id=193348
        <rdar://problem/47203295>

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2019-01-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit the user agent of a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193862
        <rdar://problem/47359292>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Page.json:
        Add `overrideUserAgent` command.

2019-01-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] NativeErrorConstructor should not have own IsoSubspace
        https://bugs.webkit.org/show_bug.cgi?id=193713

        Reviewed by Saam Barati.

        This removes an additional member in NativeErrorConstructor, and make sizeof(NativeErrorConstructor) == sizeof(InternalFunction).
        We also make error constructors lazily allocated by using LazyClassStructure. Since error structures are not accessed from DFG / FTL
        threads, this is OK. While TypeError constructor is eagerly allocated because it is touched from our builtin JS as @TypeError, we should
        offer some function instead of exposing TypeError constructor in the future, and remove this @TypeError reference. This change removes
        IsoSubspace for NativeErrorConstructor in VM. We also remove @Error and @RangeError references for builtins since they are no longer
        referenced.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.h:
        * interpreter/Interpreter.h:
        * runtime/Error.cpp:
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (WTF::printInternal): Deleted.
        * runtime/Error.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::create):
        (JSC::ErrorPrototype::finishCreation):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create): Deleted.
        * runtime/ErrorType.cpp: Added.
        (JSC::errorTypeName):
        (WTF::printInternal):
        * runtime/ErrorType.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initializeErrorConstructor):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::internalPromiseConstructor const):
        (JSC::JSGlobalObject::errorStructure const):
        (JSC::JSGlobalObject::evalErrorConstructor const): Deleted.
        (JSC::JSGlobalObject::rangeErrorConstructor const): Deleted.
        (JSC::JSGlobalObject::referenceErrorConstructor const): Deleted.
        (JSC::JSGlobalObject::syntaxErrorConstructor const): Deleted.
        (JSC::JSGlobalObject::typeErrorConstructor const): Deleted.
        (JSC::JSGlobalObject::URIErrorConstructor const): Deleted.
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::NativeErrorConstructor):
        (JSC::NativeErrorConstructorBase::finishCreation):
        (JSC::NativeErrorConstructor<errorType>::constructNativeErrorConstructor):
        (JSC::NativeErrorConstructor<errorType>::callNativeErrorConstructor):
        (JSC::NativeErrorConstructor::NativeErrorConstructor): Deleted.
        (JSC::NativeErrorConstructor::finishCreation): Deleted.
        (JSC::NativeErrorConstructor::visitChildren): Deleted.
        (JSC::Interpreter::constructWithNativeErrorConstructor): Deleted.
        (JSC::Interpreter::callNativeErrorConstructor): Deleted.
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructorBase::createStructure):
        (JSC::NativeErrorConstructorBase::NativeErrorConstructorBase):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::finishCreation): Deleted.
        * runtime/NativeErrorPrototype.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::handleBadI64Use):

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193813
        <rdar://problem/47359510>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Page.json:
        Add `overrideSetting` command with supporting `Setting` enum type.

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Check .xcfilelists" build phase
        https://bugs.webkit.org/show_bug.cgi?id=193790
        <rdar://problem/47201374>

        Reviewed by Alex Christensen.

        Support for XCBuild includes specifying inputs and outputs to various
        Run Script build phases. These inputs and outputs are specified as
        .xcfilelist files. Once created, these .xcfilelist files need to be
        kept up-to-date. In order to check that they are up-to-date or not,
        add an Xcode build step that invokes an external script that performs
        the checking. If the .xcfilelists are found to be out-of-date, update
        them, halt the build, and instruct the developer to restart the build
        with up-to-date files.

        At this time, the checking and regenerating is performed only if the
        WK_ENABLE_CHECK_XCFILELISTS environment variable is set to 1. People
        who want to use this facility can set this variable and test out the
        checking/regenerating. Once it seems like there are no egregious
        issues that upset a developer's workflow, we'll unconditionally enable
        this facility.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/check-xcfilelists.sh: Added.

2019-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Exclude Debugger Threads from CPU Usage values in Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=193796
        <rdar://problem/47532910>

        Reviewed by Devin Rousso.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::machThread):
        * runtime/SamplingProfiler.h:
        Expose the mach_port_t of the SamplingProfiler thread
        so it can be tested against later.

2019-01-25  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r240511

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update Xcode projects with "Apply Configuration to XCFileLists" build target
        https://bugs.webkit.org/show_bug.cgi?id=193781
        <rdar://problem/47201153>

        Reviewed by Alex Christensen.

        Part of generating the .xcfilelists used as part of adopting XCBuild
        includes running `make DerivedSources.make` from a standalone script.
        It’s important for this invocation to have the same environment as
        when the actual build invokes `make DerivedSources.make`. If the
        environments are different, then the two invocations will provide
        different results. In order to get the same environment in the
        standalone script, have the script launch xcodebuild targeting the
        "Apply Configuration to XCFileLists" build target, which will then
        re-invoke our standalone script. The script is now running again, this
        time in an environment with all workspace, project, target, xcconfig
        and other environment variables established.

        The "Apply Configuration to XCFileLists" build target accomplishes
        this task via a small embedded shell script that consists only of:

            eval "${WK_SUBLAUNCH_SCRIPT_PARAMETERS[@]}"

        The process that invokes "Apply Configuration to XCFileLists" first
        sets WK_SUBLAUNCH_SCRIPT_PARAMETERS to an array of commands to be
        evaluated and exports it into the shell environment. When xcodebuild
        is invoked, it inherits the value of this variable and can `eval` the
        contents of that variable. Our external standalone script can then set
        WK_SUBLAUNCH_SCRIPT_PARAMETERS to the path to itself, along with a set
        of command-line parameters needed to restart itself in the appropriate
        state.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-01-25  Tadeu Zagallo  <tzagallo@apple.com>

        Add API to generate and consume cached bytecode
        https://bugs.webkit.org/show_bug.cgi?id=193401
        <rdar://problem/47514099>

        Reviewed by Keith Miller.

        Add the `generateBytecode` and `generateModuleBytecode` functions to
        generate serialized bytecode for a given `SourceCode`. These functions
        will eagerly generate code for all the nested functions.

        Additionally, update the API methods in JSScript to generate and use the
        bytecode when the bytecodeCache path is provided.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * API/JSContext.mm:
        (-[JSContext wrapperMap]):
        * API/JSContextInternal.h:
        * API/JSScript.mm:
        (+[JSScript scriptWithSource:inVirtualMachine:]):
        (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        (-[JSScript dealloc]):
        (-[JSScript readCache]):
        (-[JSScript writeCache]):
        (-[JSScript hash]):
        (-[JSScript source]):
        (-[JSScript cachedBytecode]):
        (-[JSScript jsSourceCode:]):
        * API/JSScriptInternal.h:
        * API/JSScriptSourceProvider.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        (JSScriptSourceProvider::create):
        (JSScriptSourceProvider::JSScriptSourceProvider):
        * API/JSScriptSourceProvider.mm: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
        (JSScriptSourceProvider::hash const):
        (JSScriptSourceProvider::source const):
        (JSScriptSourceProvider::cachedBytecode const):
        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine vm]):
        * API/JSVirtualMachineInternal.h:
        * API/tests/testapi.mm:
        (testBytecodeCache):
        (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
        (testObjectiveCAPI):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * SourcesCocoa.txt:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::source const):
        * parser/SourceProvider.h:
        (JSC::CachedBytecode::CachedBytecode):
        (JSC::CachedBytecode::operator=):
        (JSC::CachedBytecode::data const):
        (JSC::CachedBytecode::size const):
        (JSC::CachedBytecode::owned const):
        (JSC::CachedBytecode::~CachedBytecode):
        (JSC::CachedBytecode::freeDataIfOwned):
        (JSC::SourceProvider::cachedBytecode const):
        * parser/UnlinkedSourceCode.h:
        (JSC::UnlinkedSourceCode::provider const):
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockForFunctions):
        (JSC::writeCodeBlock):
        (JSC::serializeBytecode):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::fetchFromDiskImpl):
        (JSC::CodeCacheMap::findCacheAndUpdateAge):
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::generateUnlinkedCodeBlock):
        * runtime/Completion.cpp:
        (JSC::generateBytecode):
        (JSC::generateModuleBytecode):
        * runtime/Completion.h:
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update WebKitAdditions.xcconfig with correct order of variable definitions
        https://bugs.webkit.org/show_bug.cgi?id=193793
        <rdar://problem/47532439>

        Reviewed by Alex Christensen.

        XCBuild changes the way xcconfig variables are evaluated. In short,
        all config file assignments are now considered in part of the
        evaluation. When using the new build system and an .xcconfig file
        contains multiple assignments of the same build setting:

        - Later assignments using $(inherited) will inherit from earlier
          assignments in the xcconfig file.
        - Later assignments not using $(inherited) will take precedence over
          earlier assignments. An assignment to a more general setting will
          mask an earlier assignment to a less general setting. For example,
          an assignment without a condition ('FOO = bar') will completely mask
          an earlier assignment with a condition ('FOO[sdk=macos*] = quux').

        This affects some of our .xcconfig files, in that sometimes platform-
        or sdk-specific definitions appear before the general definitions.
        Under the new evaluations rules, the general definitions alway take
        effect because they always overwrite the more-specific definitions. The
        solution is to swap the order, so that the general definitions are
        established first, and then conditionally overwritten by the
        more-specific definitions.

        * Configurations/Version.xcconfig:

2019-01-25  Keith Rollin  <krollin@apple.com>

        Update existing .xcfilelists
        https://bugs.webkit.org/show_bug.cgi?id=193791
        <rdar://problem/47201706>

        Reviewed by Alex Christensen.

        Many .xcfilelist files were added in r238824 in order to support
        XCBuild. Update these with recent changes to the set of build files
        and with the current generate-xcfilelist script.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * UnifiedSources-input.xcfilelist:
        * UnifiedSources-output.xcfilelist:

2019-01-25  Jon Davis  <jond@apple.com>

        Update JavaScriptCore feature status entries.
        https://bugs.webkit.org/show_bug.cgi?id=193797

        Reviewed by Mark Lam.
        
        Updated feature status for Async Iteration, and Object rest/spread.

        * features.json:

2019-01-24  Keith Miller  <keith_miller@apple.com>

        Remove usage of internal macro from private header
        https://bugs.webkit.org/show_bug.cgi?id=193809

        Reviewed by Saam Barati.

        Also, add a new file to include all of our API headers to make sure
        they don't accidentally include C++ or internal values.

        * API/JSScript.h:
        * API/tests/testIncludes.m: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2019-01-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] ErrorConstructor should not have own IsoSubspace
        https://bugs.webkit.org/show_bug.cgi?id=193800

        Reviewed by Saam Barati.

        Similar to r240456, sizeof(ErrorConstructor) != sizeof(InternalFunction), and that is why we have
        IsoSubspace errorConstructorSpace in VM. But it is allocated only one-per-JSGlobalObject, and it is
        too costly to have IsoSubspace which allocates 16KB. Since stackTraceLimit information is per
        JSGlobalObject information, we should have m_stackTraceLimit in JSGlobalObject instead and put
        ErrorConstructor in InternalFunction's IsoSubspace. As r230813 (moving InternalFunction and subclasses
        into IsoSubspaces) described,

            "subclasses that are the same size as InternalFunction share its subspace. I did this because the subclasses
            appear to just override methods, which are called dynamically via the structure or class of the object.
            So, I don't see a type confusion risk if UAF is used to allocate one kind of InternalFunction over another."

        Then, putting ErrorConstructor in InternalFunction IsoSubspace is fine since it meets the above condition.
        This patch removes m_stackTraceLimit in ErrorConstructor, and drops IsoSubspace for errorConstructorSpace.
        This reduces the memory usage.

        * interpreter/Interpreter.h:
        * runtime/Error.cpp:
        (JSC::getStackTrace):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        (JSC::ErrorConstructor::finishCreation):
        (JSC::constructErrorConstructor):
        (JSC::callErrorConstructor):
        (JSC::ErrorConstructor::put):
        (JSC::ErrorConstructor::deleteProperty):
        (JSC::Interpreter::constructWithErrorConstructor): Deleted.
        (JSC::Interpreter::callErrorConstructor): Deleted.
        * runtime/ErrorConstructor.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::stackTraceLimit const):
        (JSC::JSGlobalObject::setStackTraceLimit):
        (JSC::JSGlobalObject::errorConstructor const): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline
        https://bugs.webkit.org/show_bug.cgi?id=193730
        <rdar://problem/46797201>

        Reviewed by Devin Rousso.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        New files.

        * inspector/protocol/CPUProfiler.json: Added.
        New domain that follows the pattern of Memory/ScriptProfiler.

        * inspector/protocol/Timeline.json:
        New enum to auto-start a CPU instrument in the backend.

2019-01-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SharedArrayBufferConstructor and ArrayBufferConstructor should not have their own IsoSubspace
        https://bugs.webkit.org/show_bug.cgi?id=193774

        Reviewed by Mark Lam.

        We put all the instances of InternalFunction and its subclasses in IsoSubspace to make safer from UAF.
        But since IsoSubspace requires the memory layout of instances is the same, we created different IsoSubspace
        for subclasses of InternalFunction if sizeof(subclass) != sizeof(InternalFunction). One example is
        ArrayBufferConstructor and SharedArrayBufferConstructor. But it is too costly to allocate 16KB page just
        for these two constructor instances. They are only two instances per JSGlobalObject.

        This patch makes sizeof(ArrayBufferConstructor) == sizeof(InternalFunction) so that they can use IsoSubspace
        of InternalFunction. We introduce JSGenericArrayBufferConstructor, and it takes ArrayBufferSharingMode as
        its template parameter. We define JSArrayBufferConstructor as JSGenericArrayBufferConstructor<ArrayBufferSharingMode::Default>
        and JSSharedArrayBufferConstructor as JSGenericArrayBufferConstructor<ArrayBufferSharingMode::Shared> so that
        we do not need to hold ArrayBufferSharingMode in the field of the constructor. This change removes IsoSubspace
        for ArrayBufferConstructors, and reduces the memory usage.

        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::JSGenericArrayBufferConstructor):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructArrayBuffer):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::createStructure):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::info):
        (JSC::JSArrayBufferConstructor::JSArrayBufferConstructor): Deleted.
        (JSC::JSArrayBufferConstructor::finishCreation): Deleted.
        (JSC::JSArrayBufferConstructor::create): Deleted.
        (JSC::JSArrayBufferConstructor::createStructure): Deleted.
        (JSC::constructArrayBuffer): Deleted.
        * runtime/JSArrayBufferConstructor.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-24  Yusuke Suzuki  <ysuzuki@apple.com>

        stress/const-semantics.js fails a dfg-eager / ftl-eager run with an ASAN release build.
        https://bugs.webkit.org/show_bug.cgi?id=190693

        Reviewed by Michael Saboff.

        JITStubRoutine's fields are marked only when JITStubRoutine::m_mayBeExecuting is true.
        This becomes true when we find the executable address in our conservative roots, which
        means that we could be executing it right now. This means that object liveness in
        JITStubRoutine depends on the information gathered in ConservativeRoots. However, our
        constraints are separated, "Conservative Scan" and "JIT Stub Routines". They can even
        be executed concurrently, so that "JIT Stub Routines" may miss to mark the actually
        executing JITStubRoutine because "Conservative Scan" finds it later.
        When finalizing the GC, we delete the dead JITStubRoutines. At that time, since
        "Conservative Scan" already finishes, we do not delete some JITStubRoutines which do not
        mark the depending objects. Then, in the next cycle, we find JITStubRoutines still live,
        attempt to mark the depending objects, and encounter the dead objects which are collected
        in the previous cycles.

        This patch removes "JIT Stub Routines" and merge it to "Conservative Scan". Since
        "Conservative Scan" and "JIT Stub Routines" need to be executed only when the execution
        happens (ensured by GreyedByExecution and CollectionPhase check), this change is OK for
        GC stop time.

        * heap/ConservativeRoots.h:
        (JSC::ConservativeRoots::roots const):
        (JSC::ConservativeRoots::roots): Deleted.
        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::append):
        * heap/SlotVisitor.h:
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine):
        * jit/GCAwareJITStubRoutine.h:

2019-01-24  Saam Barati  <sbarati@apple.com>

        Update ARM64EHash
        https://bugs.webkit.org/show_bug.cgi?id=193776
        <rdar://problem/47526457>

        Reviewed by Mark Lam.

        See radar for details.

        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::finalHash const):

2019-01-24  Saam Barati  <sbarati@apple.com>

        Object Allocation Sinking phase can move a node that walks the stack into a place where the InlineCallFrame is no longer valid
        https://bugs.webkit.org/show_bug.cgi?id=193751
        <rdar://problem/47280215>

        Reviewed by Michael Saboff.

        The Object Allocation Sinking phase may move allocations around inside
        of the program. However, it was not ensuring that it's still possible 
        to walk the stack at the point in the program that it moved the allocation to.
        Certain InlineCallFrames rely on data in the stack when taking a stack trace.
        All allocation sites can do a stack walk (we do a stack walk when we GC).
        Conservatively, this patch says we're ok to move this allocation if we are
        moving within the same InlineCallFrame. We could be more precise and do an
        analysis of stack writes. However, this scenario is so rare that we just
        take the conservative-and-straight-forward approach of checking that the place
        we're moving to is the same InlineCallFrame as the allocation site.
        
        In general, this issue arises anytime we do any kind of code motion.
        Interestingly, LICM gets this right. It gets it right because the only
        InlineCallFrames we can't move out of are the InlineCallFrames that
        have metadata stored on the stack (callee for closure calls and argument
        count for varargs calls). LICM doesn't have this issue because it relies
        on Clobberize for doing its effects analysis. In clobberize, we model every
        node within an InlineCallFrame that meets the above criteria as reading
        from those stack fields. Consequently, LICM won't hoist any node in that
        InlineCallFrame past the beginning of the InlineCallFrame since the IR
        we generate to set up such an InlineCallFrame contains writes to that
        stack location.

        * dfg/DFGObjectAllocationSinkingPhase.cpp:

2019-01-24  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Reenable baseline JIT on mips
        https://bugs.webkit.org/show_bug.cgi?id=192983

        Reviewed by Mark Lam.

        Use $s0 as metadata register and make sure it's properly saved and
        restored.

        * jit/GPRInfo.h:
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::vmCalleeSaveRegisters):
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        * llint/LowLevelInterpreter.asm:
        * offlineasm/mips.rb:

2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Expose JavaScriptCore options in GLib public API
        https://bugs.webkit.org/show_bug.cgi?id=188742

        Reviewed by Michael Catanzaro.

        Add new API to set, get and iterate JSC options.

        * API/glib/JSCOptions.cpp: Added.
        (valueFromGValue):
        (valueToGValue):
        (jscOptionsSetValue):
        (jscOptionsGetValue):
        (jsc_options_set_boolean):
        (jsc_options_get_boolean):
        (jsc_options_set_int):
        (jsc_options_get_int):
        (jsc_options_set_uint):
        (jsc_options_get_uint):
        (jsc_options_set_size):
        (jsc_options_get_size):
        (jsc_options_set_double):
        (jsc_options_get_double):
        (jsc_options_set_string):
        (jsc_options_get_string):
        (jsc_options_set_range_string):
        (jsc_options_get_range_string):
        (jscOptionsType):
        (jsc_options_foreach):
        (setOptionEntry):
        (jsc_options_get_option_group):
        * API/glib/JSCOptions.h: Added.
        * API/glib/docs/jsc-glib-4.0-sections.txt:
        * API/glib/docs/jsc-glib-docs.sgml:
        * API/glib/jsc.h:
        * GLib.cmake:

2019-01-23  Mark Lam  <mark.lam@apple.com>

        ARM64E should not ENABLE(SEPARATED_WX_HEAP).
        https://bugs.webkit.org/show_bug.cgi?id=193744
        <rdar://problem/46262952>

        Reviewed by Saam Barati.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2019-01-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [DFG] AvailabilityMap::pruneByLiveness should make non-live operands Availability::unavailable instead of Availability()
        https://bugs.webkit.org/show_bug.cgi?id=193711
        <rdar://problem/47250262>

        Reviewed by Saam Barati.

        When pruning OSR Availability based on bytecode liveness, we accidentally clear the Availability (making it DeadFlush) instead of
        making it Availability::unavailable() (Making it ConflictingFlush). In OSRAvailabilityAnalysisPhase, we perform forward analysis.
        We first clear all the availability of basic blocks DeadFlush, which is an empty set. And then, we set operands in the root block
        ConflictingFlush. In this forward analysis, DeadFlush is BOTTOM, and ConflictingFlush is TOP. Then, we propagate information by
        merging availability until we reach to the fixed-point. As an optimization, we perform "pruning" of the availability in the head
        of the basic blocks. We remove availabilities of operands which are not live in the bytecode liveness at the head of the basic block.
        The problem is, when removing availabilities, we set DeadFlush for them instead of ConflictingFlush. Basically, it means that we set
        BOTTOM (an empty set) instead of TOP. Let's consider the following simple example. We have 6 basic blocks, and they are connected
        as follows.

            BB0 -> BB1 -> BB2 -> BB4
             |        \        ^
             v          > BB3 /
            BB5

        And consider about loc1 in FTL, which is required to be recovered in BB4's OSR exit.

            BB0 does nothing
                head: loc1 is dead
                tail: loc1 is dead

            BB1 has MovHint @1, loc1
                head: loc1 is dead
                tail: loc1 is live

            BB2 does nothing
                head: loc1 is live
                tail: loc1 is live

            BB3 has PutStack @1, loc1
                head: loc1 is live
                tail: loc1 is live

            BB4 has OSR exit using loc1
                head: loc1 is live
                tail: loc1 is live (in bytecode)

            BB5 does nothing
                head: loc1 is dead
                tail: loc1 is dead

        In our OSR Availability analysis, we always prune loc1 result in BB1's head since its head says "loc1 is dead".
        But at that time, we clear the availability for loc1, which makes it DeadFlush, instead of making it ConflictingFlush.

        So, the flush format of loc1 in each tail of BB is like this.

            BB0
                ConflictingFlush (because all the local operands are initialized with ConflictingFlush)
            BB1
                DeadFlush+@1 (pruning clears it)
            BB2
                DeadFlush+@1 (since it is propagated from BB1)
            BB3
                FlushedJSValue+@1 with loc1 (since it has PutStack)
            BB4
                FlushedJSValue+@1 with loc1 (since MERGE(DeadFlush, FlushedJSValue) = FlushedJSValue)
            BB5
                DeadFlush (pruning clears it)

        Then, if we go the path BB0->BB1->BB2->BB4, we read the value from the stack while it is not flushed.
        The correct fix is making availability "unavailable" when pruning based on bytecode liveness.

        * dfg/DFGAvailabilityMap.cpp:
        (JSC::DFG::AvailabilityMap::pruneByLiveness): When pruning availability, we first set all the operands Availability::unavailable(),
        and copy the calculated value from the current availability map.
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run): Add logging things for debugging.

2019-01-23  David Kilzer  <ddkilzer@apple.com>

        [JSC] Duplicate global variables: JSC::opcodeLengths
        <https://webkit.org/b/193714>
        <rdar://problem/47340200>

        Reviewed by Mark Lam.

        * bytecode/Opcode.cpp:
        (JSC::opcodeLengths): Move array implementation here and mark
        const.
        * bytecode/Opcode.h:
        (JSC::opcodeLengths): Change to extern declaration.

2019-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Remote Inspector: no data displayed
        https://bugs.webkit.org/show_bug.cgi?id=193569

        Reviewed by Michael Catanzaro.

        Release the remote inspector mutex before using RemoteConnectionToTarget in RemoteInspector::setup() to avoid a
        deadlock.

        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::receivedSetupMessage):
        (Inspector::RemoteInspector::setup):

2019-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix initial global lexical binding epoch
        https://bugs.webkit.org/show_bug.cgi?id=193603
        <rdar://problem/47380869>

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

2019-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION(r239612) Crash at runtime due to broken DFG assumption
        https://bugs.webkit.org/show_bug.cgi?id=193709
        <rdar://problem/47363838>

        Unreviewed, rollout to watch the tests.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupObjectToString): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectToString): 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::compileToStringOrCallStringConstructorOrStringValueOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectToString): Deleted.
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::finishCreation):
        (JSC::objectProtoFuncToString):
        * runtime/ObjectPrototype.h:
        * runtime/ObjectPrototypeInlines.h: Removed.
        * runtime/StructureRareData.h:

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: expose Audit and Recording versions to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=193262
        <rdar://problem/47130684>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Audit.json:
        * inspector/protocol/Recording.json:
        Add `version` values.

        * inspector/scripts/codegen/models.py:
        (Protocol.parse_domain):
        (Domain.__init__):
        (Domain.version): Added.
        (Domains):

        * inspector/scripts/codegen/generator.py:
        (Generator.version_for_domain): Added.

        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator.generate_output):
        (CppProtocolTypesHeaderGenerator._generate_versions): Added.

        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.should_generate_domain):
        (JSBackendCommandsGenerator.generate_domain):

        * inspector/scripts/tests/generic/version.json: Added.
        * inspector/scripts/tests/generic/expected/version.json-result: Added.

        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.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/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/domain-availability.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/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result:
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:

2019-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl constructors should fit in sizeof(InternalFunction)
        https://bugs.webkit.org/show_bug.cgi?id=193661

        Reviewed by Mark Lam.

        Previously all the Intl constructors have their own subspace. This is because these constructors have different size from InternalFunction.
        But it is too costly approach in terms of the memory usage since these constructors are only one per JSGlobalObject. This patch attempts to
        reduce the memory size consumed by these Intl objects by holding instance structures in IntlObject instead of in each Intl constructors.
        So that we can make sizeof(Intl constructors) == sizeof(InternalFunction) and drop costly subspaces. Since this patch drops subspaces in VM,
        it also significantly reduces the sizeof(VM), from 76696 to 74680.

        This patch also includes the preparation for making Intl properties lazy. But currently it is not possible since @Collator reference exists
        in builtin code.

        * CMakeLists.txt:
        * DerivedSources.make:
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::IntlCollatorConstructor::create):
        (JSC::IntlCollatorConstructor::finishCreation):
        (JSC::constructIntlCollator):
        (JSC::callIntlCollator):
        (JSC::IntlCollatorConstructor::visitChildren): Deleted.
        * runtime/IntlCollatorConstructor.h:
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructor::create):
        (JSC::IntlDateTimeFormatConstructor::finishCreation):
        (JSC::constructIntlDateTimeFormat):
        (JSC::callIntlDateTimeFormat):
        (JSC::IntlDateTimeFormatConstructor::visitChildren): Deleted.
        * runtime/IntlDateTimeFormatConstructor.h:
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructor::create):
        (JSC::IntlNumberFormatConstructor::finishCreation):
        (JSC::constructIntlNumberFormat):
        (JSC::callIntlNumberFormat):
        (JSC::IntlNumberFormatConstructor::visitChildren): Deleted.
        * runtime/IntlNumberFormatConstructor.h:
        * runtime/IntlObject.cpp:
        (JSC::createCollatorConstructor):
        (JSC::createNumberFormatConstructor):
        (JSC::createDateTimeFormatConstructor):
        (JSC::createPluralRulesConstructor):
        (JSC::IntlObject::create):
        (JSC::IntlObject::finishCreation):
        (JSC::IntlObject::visitChildren):
        * runtime/IntlObject.h:
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::IntlPluralRulesConstructor::create):
        (JSC::IntlPluralRulesConstructor::finishCreation):
        (JSC::constructIntlPluralRules):
        (JSC::IntlPluralRulesConstructor::visitChildren): Deleted.
        * runtime/IntlPluralRulesConstructor.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::intlObject const):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-22  Saam Barati  <sbarati@apple.com>

        Unreviewed. Rollout r240223. It regressed JetStream2 by 1%.

        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, restore bytecode cache-related JSC options deleted in r240254
        https://bugs.webkit.org/show_bug.cgi?id=192782

        The JSC options were committed as part of r240210, which got rolled out in
        r240224. However, the options got re-landed in r240248  and then deleted
        again in 240254 (immediately before the caching code code landed in 240255)

        * runtime/Options.h:

2019-01-22  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add the logic to serialize and deserialize the new JSC bytecode. For now,
        the cache is only used for tests.

        Each class that can be serialized has a counterpart in CachedTypes, which
        handles the decoding and encoding. When decoding, the cached objects are
        mmap'd from disk, but only used for creating instances of the respective
        in-memory version of each object. Ideally, the mmap'd objects should be
        used at runtime in the future.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.cpp:
        (JSC::BuiltinNames::BuiltinNames):
        * builtins/BuiltinNames.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setConstantIdentifierSetRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/HandlerInfo.h:
        (JSC::UnlinkedHandlerInfo::UnlinkedHandlerInfo):
        * bytecode/InstructionStream.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addSetConstant):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecode/UnlinkedFunctionCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecode/UnlinkedGlobalCodeBlock.h:
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
        * bytecode/UnlinkedMetadataTable.h:
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecode/UnlinkedProgramCodeBlock.h:
        * interpreter/Interpreter.cpp:
        * jsc.cpp:
        (functionQuit):
        (runJSC):
        * parser/SourceCode.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::operator!= const):
        * parser/UnlinkedSourceCode.h:
        * parser/VariableEnvironment.h:
        * runtime/CachedTypes.cpp: Added.
        (JSC::Encoder::Allocation::buffer const):
        (JSC::Encoder::Allocation::offset const):
        (JSC::Encoder::Allocation::Allocation):
        (JSC::Encoder::Encoder):
        (JSC::Encoder::vm):
        (JSC::Encoder::malloc):
        (JSC::Encoder::offsetOf):
        (JSC::Encoder::cachePtr):
        (JSC::Encoder::offsetForPtr):
        (JSC::Encoder::release):
        (JSC::Encoder::Page::Page):
        (JSC::Encoder::Page::malloc):
        (JSC::Encoder::Page::buffer const):
        (JSC::Encoder::Page::size const):
        (JSC::Encoder::Page::getOffset const):
        (JSC::Encoder::allocateNewPage):
        (JSC::Decoder::Decoder):
        (JSC::Decoder::~Decoder):
        (JSC::Decoder::vm):
        (JSC::Decoder::offsetOf):
        (JSC::Decoder::cacheOffset):
        (JSC::Decoder::addFinalizer):
        (JSC::encode):
        (JSC::decode):
        (JSC::VariableLengthObject::buffer const):
        (JSC::VariableLengthObject::allocate):
        (JSC::CachedPtr::encode):
        (JSC::CachedPtr::decode const):
        (JSC::CachedPtr::operator-> const):
        (JSC::CachedPtr::get const):
        (JSC::CachedRefPtr::encode):
        (JSC::CachedRefPtr::decode const):
        (JSC::CachedWriteBarrier::encode):
        (JSC::CachedWriteBarrier::decode const):
        (JSC::CachedVector::encode):
        (JSC::CachedVector::decode const):
        (JSC::CachedPair::encode):
        (JSC::CachedPair::decode const):
        (JSC::CachedHashMap::encode):
        (JSC::CachedHashMap::decode const):
        (JSC::CachedUniquedStringImpl::encode):
        (JSC::CachedUniquedStringImpl::decode const):
        (JSC::CachedStringImpl::encode):
        (JSC::CachedStringImpl::decode const):
        (JSC::CachedString::encode):
        (JSC::CachedString::decode const):
        (JSC::CachedIdentifier::encode):
        (JSC::CachedIdentifier::decode const):
        (JSC::CachedOptional::encode):
        (JSC::CachedOptional::decode const):
        (JSC::CachedOptional::decodeAsPtr const):
        (JSC::CachedSimpleJumpTable::encode):
        (JSC::CachedSimpleJumpTable::decode const):
        (JSC::CachedStringJumpTable::encode):
        (JSC::CachedStringJumpTable::decode const):
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):
        (JSC::CachedBitVector::encode):
        (JSC::CachedBitVector::decode const):
        (JSC::CachedHashSet::encode):
        (JSC::CachedHashSet::decode const):
        (JSC::CachedConstantIdentifierSetEntry::encode):
        (JSC::CachedConstantIdentifierSetEntry::decode const):
        (JSC::CachedVariableEnvironment::encode):
        (JSC::CachedVariableEnvironment::decode const):
        (JSC::CachedArray::encode):
        (JSC::CachedArray::decode const):
        (JSC::CachedScopedArgumentsTable::encode):
        (JSC::CachedScopedArgumentsTable::decode const):
        (JSC::CachedSymbolTableEntry::encode):
        (JSC::CachedSymbolTableEntry::decode const):
        (JSC::CachedSymbolTable::encode):
        (JSC::CachedSymbolTable::decode const):
        (JSC::CachedImmutableButterfly::encode):
        (JSC::CachedImmutableButterfly::decode const):
        (JSC::CachedRegExp::encode):
        (JSC::CachedRegExp::decode const):
        (JSC::CachedTemplateObjectDescriptor::encode):
        (JSC::CachedTemplateObjectDescriptor::decode const):
        (JSC::CachedBigInt::encode):
        (JSC::CachedBigInt::decode const):
        (JSC::CachedJSValue::encode):
        (JSC::CachedJSValue::decode const):
        (JSC::CachedInstructionStream::encode):
        (JSC::CachedInstructionStream::decode const):
        (JSC::CachedMetadataTable::encode):
        (JSC::CachedMetadataTable::decode const):
        (JSC::CachedSourceOrigin::encode):
        (JSC::CachedSourceOrigin::decode const):
        (JSC::CachedTextPosition::encode):
        (JSC::CachedTextPosition::decode const):
        (JSC::CachedSourceProviderShape::encode):
        (JSC::CachedSourceProviderShape::decode const):
        (JSC::CachedStringSourceProvider::encode):
        (JSC::CachedStringSourceProvider::decode const):
        (JSC::CachedWebAssemblySourceProvider::encode):
        (JSC::CachedWebAssemblySourceProvider::decode const):
        (JSC::CachedSourceProvider::encode):
        (JSC::CachedSourceProvider::decode const):
        (JSC::CachedUnlinkedSourceCodeShape::encode):
        (JSC::CachedUnlinkedSourceCodeShape::decode const):
        (JSC::CachedSourceCode::encode):
        (JSC::CachedSourceCode::decode const):
        (JSC::CachedFunctionExecutable::firstLineOffset const):
        (JSC::CachedFunctionExecutable::lineCount const):
        (JSC::CachedFunctionExecutable::unlinkedFunctionNameStart const):
        (JSC::CachedFunctionExecutable::unlinkedBodyStartColumn const):
        (JSC::CachedFunctionExecutable::unlinkedBodyEndColumn const):
        (JSC::CachedFunctionExecutable::startOffset const):
        (JSC::CachedFunctionExecutable::sourceLength const):
        (JSC::CachedFunctionExecutable::parametersStartOffset const):
        (JSC::CachedFunctionExecutable::typeProfilingStartOffset const):
        (JSC::CachedFunctionExecutable::typeProfilingEndOffset const):
        (JSC::CachedFunctionExecutable::parameterCount const):
        (JSC::CachedFunctionExecutable::features const):
        (JSC::CachedFunctionExecutable::sourceParseMode const):
        (JSC::CachedFunctionExecutable::isInStrictContext const):
        (JSC::CachedFunctionExecutable::hasCapturedVariables const):
        (JSC::CachedFunctionExecutable::isBuiltinFunction const):
        (JSC::CachedFunctionExecutable::isBuiltinDefaultClassConstructor const):
        (JSC::CachedFunctionExecutable::constructAbility const):
        (JSC::CachedFunctionExecutable::constructorKind const):
        (JSC::CachedFunctionExecutable::functionMode const):
        (JSC::CachedFunctionExecutable::scriptMode const):
        (JSC::CachedFunctionExecutable::superBinding const):
        (JSC::CachedFunctionExecutable::derivedContextType const):
        (JSC::CachedFunctionExecutable::name const):
        (JSC::CachedFunctionExecutable::ecmaName const):
        (JSC::CachedFunctionExecutable::inferredName const):
        (JSC::CachedCodeBlock::instructions const):
        (JSC::CachedCodeBlock::thisRegister const):
        (JSC::CachedCodeBlock::scopeRegister const):
        (JSC::CachedCodeBlock::globalObjectRegister const):
        (JSC::CachedCodeBlock::sourceURLDirective const):
        (JSC::CachedCodeBlock::sourceMappingURLDirective const):
        (JSC::CachedCodeBlock::usesEval const):
        (JSC::CachedCodeBlock::isStrictMode const):
        (JSC::CachedCodeBlock::isConstructor const):
        (JSC::CachedCodeBlock::hasCapturedVariables const):
        (JSC::CachedCodeBlock::isBuiltinFunction const):
        (JSC::CachedCodeBlock::superBinding const):
        (JSC::CachedCodeBlock::scriptMode const):
        (JSC::CachedCodeBlock::isArrowFunctionContext const):
        (JSC::CachedCodeBlock::isClassContext const):
        (JSC::CachedCodeBlock::wasCompiledWithDebuggingOpcodes const):
        (JSC::CachedCodeBlock::constructorKind const):
        (JSC::CachedCodeBlock::derivedContextType const):
        (JSC::CachedCodeBlock::evalContextType const):
        (JSC::CachedCodeBlock::hasTailCalls const):
        (JSC::CachedCodeBlock::lineCount const):
        (JSC::CachedCodeBlock::endColumn const):
        (JSC::CachedCodeBlock::numVars const):
        (JSC::CachedCodeBlock::numCalleeLocals const):
        (JSC::CachedCodeBlock::numParameters const):
        (JSC::CachedCodeBlock::features const):
        (JSC::CachedCodeBlock::parseMode const):
        (JSC::CachedCodeBlock::codeType const):
        (JSC::CachedCodeBlock::rareData const):
        (JSC::CachedProgramCodeBlock::encode):
        (JSC::CachedProgramCodeBlock::decode const):
        (JSC::CachedModuleCodeBlock::encode):
        (JSC::CachedModuleCodeBlock::decode const):
        (JSC::CachedEvalCodeBlock::encode):
        (JSC::CachedEvalCodeBlock::decode const):
        (JSC::CachedFunctionCodeBlock::encode):
        (JSC::CachedFunctionCodeBlock::decode const):
        (JSC::UnlinkedFunctionCodeBlock::UnlinkedFunctionCodeBlock):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::decode const):
        (JSC::UnlinkedProgramCodeBlock::UnlinkedProgramCodeBlock):
        (JSC::UnlinkedModuleProgramCodeBlock::UnlinkedModuleProgramCodeBlock):
        (JSC::UnlinkedEvalCodeBlock::UnlinkedEvalCodeBlock):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedSourceCodeKey::encode):
        (JSC::CachedSourceCodeKey::decode const):
        (JSC::CacheEntry::encode):
        (JSC::CacheEntry:: const):
        (JSC:: const):
        (JSC::encodeCodeBlock):
        (JSC::decodeCodeBlockImpl):
        * runtime/CachedTypes.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedGlobalCodeBlock.h.
        (JSC::decodeCodeBlock):
        * runtime/CodeCache.cpp:
        (JSC::CodeCacheMap::pruneSlowCase):
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        (JSC::CodeCache::write):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::begin):
        (JSC::CodeCacheMap::end):
        (JSC::CodeCacheMap::fetchFromDiskImpl):
        (JSC::CodeCacheMap::findCacheAndUpdateAge):
        (JSC::writeCodeBlock):
        * runtime/JSBigInt.cpp:
        * runtime/JSBigInt.h:
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/RegExp.h:
        * runtime/ScopedArgumentsTable.h:
        * runtime/StackFrame.h:
        * runtime/StructureInlines.h:
        * runtime/SymbolTable.h:

2019-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Invalidate old scope operations using global lexical binding epoch
        https://bugs.webkit.org/show_bug.cgi?id=193603
        <rdar://problem/47380869>

        Reviewed by Saam Barati.

        Even if the global lexical binding does not shadow the global property at that time, we need to clear the cached information in
        scope related operations since we may have a global property previously. Consider the following example,

            foo = 0;
            function get() { return foo; }
            print(get()); // 0
            print(get()); // 0
            delete globalThis.foo;
            $.evalScript(`const foo = 42;`);
            print(get()); // Should be 42, but it returns 0 if the cached information in get() is not cleared.

        To invalidate the cache easily, we introduce global lexical binding epoch. It is bumped every time we introduce a new lexical binding
        into JSGlobalLexicalEnvironment, since that name could shadow the global property name previously. In op_resolve_scope, we first check
        the epoch stored in the metadata, and go to slow path if it is not equal to the current epoch. Our slow path code convert the scope
        operation to the appropriate one even if the resolve type is not UnresolvedProperty type. After updating the resolve type of the bytecode,
        we update the cached epoch to the current one, so that we can use the cached information as long as we stay in the same epoch.

        In op_get_from_scope and op_put_to_scope, we do not use this epoch since Structure check can do the same thing instead. If op_resolve_type
        is updated by the epoch, and if it starts returning JSGlobalLexicalEnvironment instead JSGlobalObject, obviously the structure check fails.
        And in the slow path, we update op_get_from_scope and op_put_to_scope appropriately.

        So, the metadata for scope related bytecodes are eventually updated to the appropriate one. In DFG and FTL, we use the watchpoint based approach.
        In DFG and FTL, we concurrently attempt to get the watchpoint for the lexical binding and look into it by using `isStillValid()` to avoid
        infinite compile-and-fail loop.

        When the global lexical binding epoch overflows we iterate all the live CodeBlock and update the op_resolve_scope's epoch. Even if the shadowing
        happens, it is OK if we bump the epoch, since op_resolve_scope will return JSGlobalLexicalEnvironment instead of JSGlobalObject, and following
        structure check in op_put_to_scope and op_get_from_scope fail. We do not need to update op_get_from_scope and op_put_to_scope because of the same
        reason.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::notifyLexicalBindingUpdate):
        (JSC::CodeBlock::notifyLexicalBindingShadowing): Deleted.
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDesiredGlobalProperties.cpp:
        (JSC::DFG::DesiredGlobalProperties::isStillValidOnMainThread):
        * dfg/DFGDesiredGlobalProperties.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::watchGlobalProperty):
        * dfg/DFGGraph.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::isStillValidOnMainThread):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::bumpGlobalLexicalBindingEpoch):
        (JSC::JSGlobalObject::getReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::ensureReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::notifyLexicalBindingShadowing): Deleted.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::globalLexicalBindingEpoch const):
        (JSC::JSGlobalObject::globalLexicalBindingEpochOffset):
        (JSC::JSGlobalObject::addressOfGlobalLexicalBindingEpoch):
        * runtime/Options.cpp:
        (JSC::correctOptions):
        (JSC::Options::initialize):
        (JSC::Options::setOptions):
        (JSC::Options::setOptionWithoutAlias):
        * runtime/Options.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):

2019-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, roll out r240220 due to date-format-xparb regression
        https://bugs.webkit.org/show_bug.cgi?id=193603

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::notifyLexicalBindingShadowing):
        (JSC::CodeBlock::notifyLexicalBindingUpdate): Deleted.
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDesiredGlobalProperties.cpp:
        (JSC::DFG::DesiredGlobalProperties::isStillValidOnMainThread):
        * dfg/DFGDesiredGlobalProperties.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::watchGlobalProperty): Deleted.
        * dfg/DFGGraph.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::isStillValidOnMainThread):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::notifyLexicalBindingShadowing):
        (JSC::JSGlobalObject::getReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::ensureReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::bumpGlobalLexicalBindingEpoch): Deleted.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::globalLexicalBindingEpoch const): Deleted.
        (JSC::JSGlobalObject::globalLexicalBindingEpochOffset): Deleted.
        (JSC::JSGlobalObject::addressOfGlobalLexicalBindingEpoch): Deleted.
        * runtime/Options.cpp:
        (JSC::Options::initialize):
        (JSC::Options::setOptions):
        (JSC::Options::setOptionWithoutAlias):
        (JSC::correctOptions): Deleted.
        * runtime/Options.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):

2019-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] StrictModeTypeErrorFunction is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=193662

        Reviewed by Mark Lam.

        StrictModeTypeErrorFunction is no longer used. This patch drops it. Furthermore, it also allows us to drop
        strictModeTypeErrorFunctionSpace from VM.

        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::destroy): Deleted.
        * runtime/Error.h:
        (): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-21  Caio Lima  <ticaiolima@gmail.com>

        DoesGC rule is wrong for nodes with BigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=193652

        Reviewed by Saam Barati.

        Former rule was that ValueOp does not GC. However this is wrong, since
        these operations can trigger GC and mess up memory management. In the end, this
        will generate wrong code because we will have wrong GC epoch value during 
        Store Barrier Insertion phase.
        We changed this to consider BigIntUse for such nodes and properly return true when
        they are BigIntUse.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2019-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Lazily initialize JSModuleLoader
        https://bugs.webkit.org/show_bug.cgi?id=193646

        Reviewed by Keith Miller and Saam Barati.

        Lazily initialize JSModuleLoader so that we do not need to initialize it until we need modules.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::moduleLoader const):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] sub op with 0 should be optimized
        https://bugs.webkit.org/show_bug.cgi?id=190751

        Reviewed by Mark Lam.

        LLInt sometimes emit `subp 0, %rxx`. For example, `maxFrameExtentForSlowPathCall` is 0 in X86_64, ARM64, and ARM64E.
        So `subp maxFrameExtentForSlowPathCall sp` becomes `subp 0, %rsp`. While `addp 0, %rsp` is removed in offlineasm,
        sub operation does not have such an optimization. This patch applies the same optimization to sub operation already
        done in add operation. Since the CPU flags changed in offlineasm's these operations are not considered (if these flags
        are required, we use special branch operations instead), this optimization is sane.

        One problem is that zero-extension of the 32bit register in 64bit architecture. If the instruction emission is skipped,
        this won't be happen. Currently, we align our sub to add operation: we skip emission in this case.

        * offlineasm/arm64.rb:
        * offlineasm/x86.rb:

2019-01-20  Saam Barati  <sbarati@apple.com>

        DFG: When inlining DataView set* intrinsics we need to set undefined as our result
        https://bugs.webkit.org/show_bug.cgi?id=193644
        <rdar://problem/46209745>

        Reviewed by Yusuke Suzuki.

        This patch also makes it so we fail fast when we make this mistake.
        I've made this mistake more than once.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Reduce size of SourceProvider
        https://bugs.webkit.org/show_bug.cgi?id=193544

        Reviewed by Saam Barati.

        This patch attempts to reduce the dirty memory footprint by the following 3 optimizations.

        1. Reordering the members of SourceProvider to reduce the size. This affects on JSC, and CachedScriptSourceProvider used in WebCore.

        2. Create one SourceProvider for all the builtin code and use substring to create builtin JS functions.
           This reduces # of SourceProvider created for builtins.

        3. Drop m_validated flag in SourceProvider since nobody uses it. It also deletes dead code in Parser.cpp.

        Unfortunately, MSVC does not accept super long C string literal. So instead, we construct combined string in a form of C array.

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/wkbuiltins/builtins_generate_combined_header.py:
        (BuiltinsCombinedHeaderGenerator.generate_output):
        * Scripts/wkbuiltins/builtins_generate_combined_implementation.py:
        (BuiltinsCombinedImplementationGenerator.generate_output):
        * Scripts/wkbuiltins/builtins_generate_separate_implementation.py:
        (BuiltinsSeparateImplementationGenerator.generate_output):
        * Scripts/wkbuiltins/builtins_generator.py:
        (BuiltinsGenerator.generate_embedded_code_data_for_function):
        (BuiltinsGenerator.generate_embedded_code_string_section_for_data):
        (BuiltinsGenerator.generate_embedded_code_string_section_for_function): Deleted.
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::BuiltinExecutables):
        (JSC::JSC_FOREACH_BUILTIN_CODE):
        (JSC::BuiltinExecutables::createExecutable):
        * builtins/BuiltinExecutables.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::Parser):
        (JSC::Parser<LexerType>::parseExpressionOrLabelStatement):
        (JSC::Parser<LexerType>::shouldCheckPropertyForUnderscoreProtoDuplicate):
        (JSC::Parser<LexerType>::parseObjectLiteral):
        (JSC::Parser<LexerType>::parseUnaryExpression):
        * parser/Parser.h:
        * parser/SourceCode.h:
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::SourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::isValid const): Deleted.
        (JSC::SourceProvider::setValid): Deleted.
        * runtime/CachedTypes.cpp:
        (JSC::CachedSourceProviderShape::encode):
        (JSC::CachedSourceProviderShape::decode const):

2019-01-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix -Wint-in-bool-context warning
        https://bugs.webkit.org/show_bug.cgi?id=193483
        <rdar://problem/47280522>

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::addCheckStructureForOriginalStringObjectUse):

2019-01-20  Saam Barati  <sbarati@apple.com>

        Rollout r240210: It broke tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=193640

        Unreviewed. ~2650 tests are failing on iOS.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.cpp:
        (JSC::BuiltinNames::BuiltinNames):
        * builtins/BuiltinNames.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setConstantIdentifierSetRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/HandlerInfo.h:
        * bytecode/InstructionStream.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addSetConstant):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecode/UnlinkedFunctionCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecode/UnlinkedGlobalCodeBlock.h:
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
        * bytecode/UnlinkedMetadataTable.h:
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecode/UnlinkedProgramCodeBlock.h:
        * interpreter/Interpreter.cpp:
        * jsc.cpp:
        (functionQuit):
        (runJSC):
        * parser/SourceCode.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::operator!= const): Deleted.
        * parser/UnlinkedSourceCode.h:
        * parser/VariableEnvironment.h:
        * runtime/CachedTypes.cpp:
        (): Deleted.
        (JSC::Encoder::Allocation::buffer const): Deleted.
        (JSC::Encoder::Allocation::offset const): Deleted.
        (JSC::Encoder::Allocation::Allocation): Deleted.
        (JSC::Encoder::Encoder): Deleted.
        (JSC::Encoder::vm): Deleted.
        (JSC::Encoder::malloc): Deleted.
        (JSC::Encoder::offsetOf): Deleted.
        (JSC::Encoder::cachePtr): Deleted.
        (JSC::Encoder::offsetForPtr): Deleted.
        (JSC::Encoder::release): Deleted.
        (JSC::Encoder::Page::Page): Deleted.
        (JSC::Encoder::Page::malloc): Deleted.
        (JSC::Encoder::Page::buffer const): Deleted.
        (JSC::Encoder::Page::size const): Deleted.
        (JSC::Encoder::Page::getOffset const): Deleted.
        (JSC::Encoder::allocateNewPage): Deleted.
        (JSC::Decoder::Decoder): Deleted.
        (JSC::Decoder::~Decoder): Deleted.
        (JSC::Decoder::vm): Deleted.
        (JSC::Decoder::offsetOf): Deleted.
        (JSC::Decoder::cacheOffset): Deleted.
        (JSC::Decoder::addFinalizer): Deleted.
        (JSC::encode): Deleted.
        (JSC::decode): Deleted.
        (JSC::VariableLengthObject::buffer const): Deleted.
        (JSC::VariableLengthObject::allocate): Deleted.
        (JSC::CachedPtr::encode): Deleted.
        (JSC::CachedPtr::decode const): Deleted.
        (JSC::CachedPtr::operator-> const): Deleted.
        (JSC::CachedPtr::get const): Deleted.
        (JSC::CachedRefPtr::encode): Deleted.
        (JSC::CachedRefPtr::decode const): Deleted.
        (JSC::CachedWriteBarrier::encode): Deleted.
        (JSC::CachedWriteBarrier::decode const): Deleted.
        (JSC::CachedVector::encode): Deleted.
        (JSC::CachedVector::decode const): Deleted.
        (JSC::CachedPair::encode): Deleted.
        (JSC::CachedPair::decode const): Deleted.
        (JSC::CachedHashMap::encode): Deleted.
        (JSC::CachedHashMap::decode const): Deleted.
        (JSC::CachedUniquedStringImpl::encode): Deleted.
        (JSC::CachedUniquedStringImpl::decode const): Deleted.
        (JSC::CachedStringImpl::encode): Deleted.
        (JSC::CachedStringImpl::decode const): Deleted.
        (JSC::CachedString::encode): Deleted.
        (JSC::CachedString::decode const): Deleted.
        (JSC::CachedIdentifier::encode): Deleted.
        (JSC::CachedIdentifier::decode const): Deleted.
        (JSC::CachedOptional::encode): Deleted.
        (JSC::CachedOptional::decode const): Deleted.
        (JSC::CachedOptional::decodeAsPtr const): Deleted.
        (JSC::CachedSimpleJumpTable::encode): Deleted.
        (JSC::CachedSimpleJumpTable::decode const): Deleted.
        (JSC::CachedStringJumpTable::encode): Deleted.
        (JSC::CachedStringJumpTable::decode const): Deleted.
        (JSC::CachedCodeBlockRareData::encode): Deleted.
        (JSC::CachedCodeBlockRareData::decode const): Deleted.
        (JSC::CachedBitVector::encode): Deleted.
        (JSC::CachedBitVector::decode const): Deleted.
        (JSC::CachedHashSet::encode): Deleted.
        (JSC::CachedHashSet::decode const): Deleted.
        (JSC::CachedConstantIdentifierSetEntry::encode): Deleted.
        (JSC::CachedConstantIdentifierSetEntry::decode const): Deleted.
        (JSC::CachedVariableEnvironment::encode): Deleted.
        (JSC::CachedVariableEnvironment::decode const): Deleted.
        (JSC::CachedArray::encode): Deleted.
        (JSC::CachedArray::decode const): Deleted.
        (JSC::CachedScopedArgumentsTable::encode): Deleted.
        (JSC::CachedScopedArgumentsTable::decode const): Deleted.
        (JSC::CachedSymbolTableEntry::encode): Deleted.
        (JSC::CachedSymbolTableEntry::decode const): Deleted.
        (JSC::CachedSymbolTable::encode): Deleted.
        (JSC::CachedSymbolTable::decode const): Deleted.
        (JSC::CachedImmutableButterfly::encode): Deleted.
        (JSC::CachedImmutableButterfly::decode const): Deleted.
        (JSC::CachedRegExp::encode): Deleted.
        (JSC::CachedRegExp::decode const): Deleted.
        (JSC::CachedTemplateObjectDescriptor::encode): Deleted.
        (JSC::CachedTemplateObjectDescriptor::decode const): Deleted.
        (JSC::CachedBigInt::encode): Deleted.
        (JSC::CachedBigInt::decode const): Deleted.
        (JSC::CachedJSValue::encode): Deleted.
        (JSC::CachedJSValue::decode const): Deleted.
        (JSC::CachedInstructionStream::encode): Deleted.
        (JSC::CachedInstructionStream::decode const): Deleted.
        (JSC::CachedMetadataTable::encode): Deleted.
        (JSC::CachedMetadataTable::decode const): Deleted.
        (JSC::CachedSourceOrigin::encode): Deleted.
        (JSC::CachedSourceOrigin::decode const): Deleted.
        (JSC::CachedTextPosition::encode): Deleted.
        (JSC::CachedTextPosition::decode const): Deleted.
        (JSC::CachedSourceProviderShape::encode): Deleted.
        (JSC::CachedSourceProviderShape::decode const): Deleted.
        (JSC::CachedStringSourceProvider::encode): Deleted.
        (JSC::CachedStringSourceProvider::decode const): Deleted.
        (JSC::CachedWebAssemblySourceProvider::encode): Deleted.
        (JSC::CachedWebAssemblySourceProvider::decode const): Deleted.
        (JSC::CachedSourceProvider::encode): Deleted.
        (JSC::CachedSourceProvider::decode const): Deleted.
        (JSC::CachedUnlinkedSourceCodeShape::encode): Deleted.
        (JSC::CachedUnlinkedSourceCodeShape::decode const): Deleted.
        (JSC::CachedSourceCode::encode): Deleted.
        (JSC::CachedSourceCode::decode const): Deleted.
        (JSC::CachedFunctionExecutable::firstLineOffset const): Deleted.
        (JSC::CachedFunctionExecutable::lineCount const): Deleted.
        (JSC::CachedFunctionExecutable::unlinkedFunctionNameStart const): Deleted.
        (JSC::CachedFunctionExecutable::unlinkedBodyStartColumn const): Deleted.
        (JSC::CachedFunctionExecutable::unlinkedBodyEndColumn const): Deleted.
        (JSC::CachedFunctionExecutable::startOffset const): Deleted.
        (JSC::CachedFunctionExecutable::sourceLength const): Deleted.
        (JSC::CachedFunctionExecutable::parametersStartOffset const): Deleted.
        (JSC::CachedFunctionExecutable::typeProfilingStartOffset const): Deleted.
        (JSC::CachedFunctionExecutable::typeProfilingEndOffset const): Deleted.
        (JSC::CachedFunctionExecutable::parameterCount const): Deleted.
        (JSC::CachedFunctionExecutable::features const): Deleted.
        (JSC::CachedFunctionExecutable::sourceParseMode const): Deleted.
        (JSC::CachedFunctionExecutable::isInStrictContext const): Deleted.
        (JSC::CachedFunctionExecutable::hasCapturedVariables const): Deleted.
        (JSC::CachedFunctionExecutable::isBuiltinFunction const): Deleted.
        (JSC::CachedFunctionExecutable::isBuiltinDefaultClassConstructor const): Deleted.
        (JSC::CachedFunctionExecutable::constructAbility const): Deleted.
        (JSC::CachedFunctionExecutable::constructorKind const): Deleted.
        (JSC::CachedFunctionExecutable::functionMode const): Deleted.
        (JSC::CachedFunctionExecutable::scriptMode const): Deleted.
        (JSC::CachedFunctionExecutable::superBinding const): Deleted.
        (JSC::CachedFunctionExecutable::derivedContextType const): Deleted.
        (JSC::CachedFunctionExecutable::name const): Deleted.
        (JSC::CachedFunctionExecutable::ecmaName const): Deleted.
        (JSC::CachedFunctionExecutable::inferredName const): Deleted.
        (JSC::CachedCodeBlock::instructions const): Deleted.
        (JSC::CachedCodeBlock::thisRegister const): Deleted.
        (JSC::CachedCodeBlock::scopeRegister const): Deleted.
        (JSC::CachedCodeBlock::globalObjectRegister const): Deleted.
        (JSC::CachedCodeBlock::sourceURLDirective const): Deleted.
        (JSC::CachedCodeBlock::sourceMappingURLDirective const): Deleted.
        (JSC::CachedCodeBlock::usesEval const): Deleted.
        (JSC::CachedCodeBlock::isStrictMode const): Deleted.
        (JSC::CachedCodeBlock::isConstructor const): Deleted.
        (JSC::CachedCodeBlock::hasCapturedVariables const): Deleted.
        (JSC::CachedCodeBlock::isBuiltinFunction const): Deleted.
        (JSC::CachedCodeBlock::superBinding const): Deleted.
        (JSC::CachedCodeBlock::scriptMode const): Deleted.
        (JSC::CachedCodeBlock::isArrowFunctionContext const): Deleted.
        (JSC::CachedCodeBlock::isClassContext const): Deleted.
        (JSC::CachedCodeBlock::wasCompiledWithDebuggingOpcodes const): Deleted.
        (JSC::CachedCodeBlock::constructorKind const): Deleted.
        (JSC::CachedCodeBlock::derivedContextType const): Deleted.
        (JSC::CachedCodeBlock::evalContextType const): Deleted.
        (JSC::CachedCodeBlock::hasTailCalls const): Deleted.
        (JSC::CachedCodeBlock::lineCount const): Deleted.
        (JSC::CachedCodeBlock::endColumn const): Deleted.
        (JSC::CachedCodeBlock::numVars const): Deleted.
        (JSC::CachedCodeBlock::numCalleeLocals const): Deleted.
        (JSC::CachedCodeBlock::numParameters const): Deleted.
        (JSC::CachedCodeBlock::features const): Deleted.
        (JSC::CachedCodeBlock::parseMode const): Deleted.
        (JSC::CachedCodeBlock::codeType const): Deleted.
        (JSC::CachedCodeBlock::rareData const): Deleted.
        (JSC::CachedProgramCodeBlock::encode): Deleted.
        (JSC::CachedProgramCodeBlock::decode const): Deleted.
        (JSC::CachedModuleCodeBlock::encode): Deleted.
        (JSC::CachedModuleCodeBlock::decode const): Deleted.
        (JSC::CachedEvalCodeBlock::encode): Deleted.
        (JSC::CachedEvalCodeBlock::decode const): Deleted.
        (JSC::CachedFunctionCodeBlock::encode): Deleted.
        (JSC::CachedFunctionCodeBlock::decode const): Deleted.
        (JSC::UnlinkedFunctionCodeBlock::UnlinkedFunctionCodeBlock): Deleted.
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
        (JSC::CachedCodeBlock<CodeBlockType>::decode const): Deleted.
        (JSC::UnlinkedProgramCodeBlock::UnlinkedProgramCodeBlock): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::UnlinkedModuleProgramCodeBlock): Deleted.
        (JSC::UnlinkedEvalCodeBlock::UnlinkedEvalCodeBlock): Deleted.
        (JSC::CachedFunctionExecutable::encode): Deleted.
        (JSC::CachedFunctionExecutable::decode const): Deleted.
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): Deleted.
        (JSC::CachedCodeBlock<CodeBlockType>::encode): Deleted.
        (JSC::CachedSourceCodeKey::encode): Deleted.
        (JSC::CachedSourceCodeKey::decode const): Deleted.
        (JSC::CacheEntry::encode): Deleted.
        (JSC::CacheEntry:: const): Deleted.
        (JSC:: const): Deleted.
        (JSC::encodeCodeBlock): Deleted.
        (JSC::decodeCodeBlockImpl): Deleted.
        * runtime/CachedTypes.h:
        (JSC::decodeCodeBlock): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::CodeCacheMap::pruneSlowCase):
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        (JSC::CodeCache::write): Deleted.
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::findCacheAndUpdateAge):
        (JSC::CodeCache::clear):
        (JSC::CodeCacheMap::begin): Deleted.
        (JSC::CodeCacheMap::end): Deleted.
        (JSC::CodeCacheMap::fetchFromDiskImpl): Deleted.
        (): Deleted.
        (JSC::writeCodeBlock): Deleted.
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::offsetOfData):
        (JSC::JSBigInt::dataStorage):
        * runtime/JSBigInt.h:
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/RegExp.h:
        * runtime/ScopedArgumentsTable.h:
        * runtime/StackFrame.h:
        * runtime/StructureInlines.h:
        * runtime/SymbolTable.h:

2019-01-20  Saam Barati  <sbarati@apple.com>

        MovHint must merge NodeBytecodeUsesAsValue for its child in backwards propagation
        https://bugs.webkit.org/show_bug.cgi?id=186916
        <rdar://problem/41396612>

        Reviewed by Yusuke Suzuki.

        Otherwise, we may not think we care about the non-integral part in
        a division (or perhaps overflow in an add, etc). Consider a program
        like this:
        
        ```return a / b```
        
        That gets compiled to:
        ```
        a: ArithDiv // We don't check that the remainder is zero here.
        b: MovHint(@a)
        c: ForceOSRExit
        d: Unreachable
        ```
        
        If we don't inform @a that we care about its result in full number
        accuracy, it will choose to ignore its non-integral remainder. This
        makes sense if *everybody* that all uses of the Div only cared about
        the integral part. However, OSR exit is not one of those users. OSR
        exit cares about the fractional bits in such a Div.

        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):

2019-01-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Invalidate old scope operations using global lexical binding epoch
        https://bugs.webkit.org/show_bug.cgi?id=193603
        <rdar://problem/47380869>

        Reviewed by Saam Barati.

        Even if the global lexical binding does not shadow the global property at that time, we need to clear the cached information in
        scope related operations since we may have a global property previously. Consider the following example,

            foo = 0;
            function get() { return foo; }
            print(get()); // 0
            print(get()); // 0
            delete globalThis.foo;
            $.evalScript(`const foo = 42;`);
            print(get()); // Should be 42, but it returns 0 if the cached information in get() is not cleared.

        To invalidate the cache easily, we introduce global lexical binding epoch. It is bumped every time we introduce a new lexical binding
        into JSGlobalLexicalEnvironment, since that name could shadow the global property name previously. In op_resolve_scope, we first check
        the epoch stored in the metadata, and go to slow path if it is not equal to the current epoch. Our slow path code convert the scope
        operation to the appropriate one even if the resolve type is not UnresolvedProperty type. After updating the resolve type of the bytecode,
        we update the cached epoch to the current one, so that we can use the cached information as long as we stay in the same epoch.

        In op_get_from_scope and op_put_to_scope, we do not use this epoch since Structure check can do the same thing instead. If op_resolve_type
        is updated by the epoch, and if it starts returning JSGlobalLexicalEnvironment instead JSGlobalObject, obviously the structure check fails.
        And in the slow path, we update op_get_from_scope and op_put_to_scope appropriately.

        So, the metadata for scope related bytecodes are eventually updated to the appropriate one. In DFG and FTL, we use the watchpoint based approach.
        In DFG and FTL, we concurrently attempt to get the watchpoint for the lexical binding and look into it by using `isStillValid()` to avoid
        infinite compile-and-fail loop.

        When the global lexical binding epoch overflows we iterate all the live CodeBlock and update the op_resolve_scope's epoch. Even if the shadowing
        happens, it is OK if we bump the epoch, since op_resolve_scope will return JSGlobalLexicalEnvironment instead of JSGlobalObject, and following
        structure check in op_put_to_scope and op_get_from_scope fail. We do not need to update op_get_from_scope and op_put_to_scope because of the same
        reason.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::notifyLexicalBindingUpdate):
        (JSC::CodeBlock::notifyLexicalBindingShadowing): Deleted.
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDesiredGlobalProperties.cpp:
        (JSC::DFG::DesiredGlobalProperties::isStillValidOnMainThread):
        * dfg/DFGDesiredGlobalProperties.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::watchGlobalProperty):
        * dfg/DFGGraph.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::isStillValidOnMainThread):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::bumpGlobalLexicalBindingEpoch):
        (JSC::JSGlobalObject::getReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::ensureReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::notifyLexicalBindingShadowing): Deleted.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::globalLexicalBindingEpoch const):
        (JSC::JSGlobalObject::globalLexicalBindingEpochOffset):
        (JSC::JSGlobalObject::addressOfGlobalLexicalBindingEpoch):
        * runtime/Options.cpp:
        (JSC::correctOptions):
        (JSC::Options::initialize):
        (JSC::Options::setOptions):
        (JSC::Options::setOptionWithoutAlias):
        * runtime/Options.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):

2019-01-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Shrink data structure size in JSC/heap
        https://bugs.webkit.org/show_bug.cgi?id=193612

        Reviewed by Saam Barati.

        This patch reduces the size of data structures in JSC/heap. Basically, we reorder the members to remove paddings.

        For Subspace, we drop CellAttributes `m_attributes`. Instead, we use `heapCellType->attributes()`. And we use
        FreeList::cellSize() instead of holding m_cellSize in LocalAllocator.

        This change reduces the size of JSC::VM too since it includes JSC::Heap. The size of VM becomes from 78208 to 76696.

        * heap/BlockDirectory.cpp:
        * heap/BlockDirectory.h:
        * heap/CollectionScope.h:
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::allocatorForSlow):
        * heap/FreeList.h:
        (JSC::FreeList::offsetOfCellSize):
        (JSC::FreeList::cellSize const):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::willStartCollection):
        (JSC::Heap::pruneStaleEntriesFromWeakGCMaps):
        (JSC::Heap::deleteSourceProviderCaches):
        (JSC::Heap::notifyIncrementalSweeper):
        (JSC::Heap::updateAllocationLimits):
        * heap/Heap.h:
        * heap/IsoAlignedMemoryAllocator.h:
        * heap/LargeAllocation.cpp:
        * heap/LocalAllocator.cpp:
        (JSC::LocalAllocator::LocalAllocator):
        * heap/LocalAllocator.h:
        (JSC::LocalAllocator::cellSize const):
        (JSC::LocalAllocator::offsetOfCellSize):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        * heap/MarkedSpace.h:
        * heap/MarkingConstraint.h:
        * heap/Subspace.cpp:
        (JSC::Subspace::initialize):
        * heap/Subspace.h:
        (JSC::Subspace::attributes const): Deleted.
        * heap/SubspaceInlines.h:
        (JSC::Subspace::forEachMarkedCell):
        (JSC::Subspace::forEachMarkedCellInParallel):
        (JSC::Subspace::forEachLiveCell):
        (JSC::Subspace::attributes const):

2019-01-20  Tadeu Zagallo  <tzagallo@apple.com>

        Cache bytecode to disk
        https://bugs.webkit.org/show_bug.cgi?id=192782
        <rdar://problem/46084932>

        Reviewed by Keith Miller.

        Add the logic to serialize and deserialize the new JSC bytecode. For now,
        the cache is only used for tests.

        Each class that can be serialized has a counterpart in CachedTypes, which
        handles the decoding and encoding. When decoding, the cached objects are
        mmap'd from disk, but only used for creating instances of the respective
        in-memory version of each object. Ideally, the mmap'd objects should be
        used at runtime in the future.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.cpp:
        (JSC::BuiltinNames::BuiltinNames):
        * builtins/BuiltinNames.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setConstantIdentifierSetRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/HandlerInfo.h:
        (JSC::UnlinkedHandlerInfo::UnlinkedHandlerInfo):
        * bytecode/InstructionStream.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addSetConstant):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecode/UnlinkedFunctionCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecode/UnlinkedGlobalCodeBlock.h:
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
        * bytecode/UnlinkedMetadataTable.h:
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecode/UnlinkedProgramCodeBlock.h:
        * interpreter/Interpreter.cpp:
        * jsc.cpp:
        (functionQuit):
        (runJSC):
        * parser/SourceCode.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::operator!= const):
        * parser/UnlinkedSourceCode.h:
        * parser/VariableEnvironment.h:
        * runtime/CachedTypes.cpp: Added.
        (JSC::Encoder::Allocation::buffer const):
        (JSC::Encoder::Allocation::offset const):
        (JSC::Encoder::Allocation::Allocation):
        (JSC::Encoder::Encoder):
        (JSC::Encoder::vm):
        (JSC::Encoder::malloc):
        (JSC::Encoder::offsetOf):
        (JSC::Encoder::cachePtr):
        (JSC::Encoder::offsetForPtr):
        (JSC::Encoder::release):
        (JSC::Encoder::Page::Page):
        (JSC::Encoder::Page::malloc):
        (JSC::Encoder::Page::buffer const):
        (JSC::Encoder::Page::size const):
        (JSC::Encoder::Page::getOffset const):
        (JSC::Encoder::allocateNewPage):
        (JSC::Decoder::Decoder):
        (JSC::Decoder::~Decoder):
        (JSC::Decoder::vm):
        (JSC::Decoder::offsetOf):
        (JSC::Decoder::cacheOffset):
        (JSC::Decoder::addFinalizer):
        (JSC::encode):
        (JSC::decode):
        (JSC::VariableLengthObject::buffer const):
        (JSC::VariableLengthObject::allocate):
        (JSC::CachedPtr::encode):
        (JSC::CachedPtr::decode const):
        (JSC::CachedPtr::operator-> const):
        (JSC::CachedPtr::get const):
        (JSC::CachedRefPtr::encode):
        (JSC::CachedRefPtr::decode const):
        (JSC::CachedWriteBarrier::encode):
        (JSC::CachedWriteBarrier::decode const):
        (JSC::CachedVector::encode):
        (JSC::CachedVector::decode const):
        (JSC::CachedPair::encode):
        (JSC::CachedPair::decode const):
        (JSC::CachedHashMap::encode):
        (JSC::CachedHashMap::decode const):
        (JSC::CachedUniquedStringImpl::encode):
        (JSC::CachedUniquedStringImpl::decode const):
        (JSC::CachedStringImpl::encode):
        (JSC::CachedStringImpl::decode const):
        (JSC::CachedString::encode):
        (JSC::CachedString::decode const):
        (JSC::CachedIdentifier::encode):
        (JSC::CachedIdentifier::decode const):
        (JSC::CachedOptional::encode):
        (JSC::CachedOptional::decode const):
        (JSC::CachedOptional::decodeAsPtr const):
        (JSC::CachedSimpleJumpTable::encode):
        (JSC::CachedSimpleJumpTable::decode const):
        (JSC::CachedStringJumpTable::encode):
        (JSC::CachedStringJumpTable::decode const):
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):
        (JSC::CachedBitVector::encode):
        (JSC::CachedBitVector::decode const):
        (JSC::CachedHashSet::encode):
        (JSC::CachedHashSet::decode const):
        (JSC::CachedConstantIdentifierSetEntry::encode):
        (JSC::CachedConstantIdentifierSetEntry::decode const):
        (JSC::CachedVariableEnvironment::encode):
        (JSC::CachedVariableEnvironment::decode const):
        (JSC::CachedArray::encode):
        (JSC::CachedArray::decode const):
        (JSC::CachedScopedArgumentsTable::encode):
        (JSC::CachedScopedArgumentsTable::decode const):
        (JSC::CachedSymbolTableEntry::encode):
        (JSC::CachedSymbolTableEntry::decode const):
        (JSC::CachedSymbolTable::encode):
        (JSC::CachedSymbolTable::decode const):
        (JSC::CachedImmutableButterfly::encode):
        (JSC::CachedImmutableButterfly::decode const):
        (JSC::CachedRegExp::encode):
        (JSC::CachedRegExp::decode const):
        (JSC::CachedTemplateObjectDescriptor::encode):
        (JSC::CachedTemplateObjectDescriptor::decode const):
        (JSC::CachedBigInt::encode):
        (JSC::CachedBigInt::decode const):
        (JSC::CachedJSValue::encode):
        (JSC::CachedJSValue::decode const):
        (JSC::CachedInstructionStream::encode):
        (JSC::CachedInstructionStream::decode const):
        (JSC::CachedMetadataTable::encode):
        (JSC::CachedMetadataTable::decode const):
        (JSC::CachedSourceOrigin::encode):
        (JSC::CachedSourceOrigin::decode const):
        (JSC::CachedTextPosition::encode):
        (JSC::CachedTextPosition::decode const):
        (JSC::CachedSourceProviderShape::encode):
        (JSC::CachedSourceProviderShape::decode const):
        (JSC::CachedStringSourceProvider::encode):
        (JSC::CachedStringSourceProvider::decode const):
        (JSC::CachedWebAssemblySourceProvider::encode):
        (JSC::CachedWebAssemblySourceProvider::decode const):
        (JSC::CachedSourceProvider::encode):
        (JSC::CachedSourceProvider::decode const):
        (JSC::CachedUnlinkedSourceCodeShape::encode):
        (JSC::CachedUnlinkedSourceCodeShape::decode const):
        (JSC::CachedSourceCode::encode):
        (JSC::CachedSourceCode::decode const):
        (JSC::CachedFunctionExecutable::firstLineOffset const):
        (JSC::CachedFunctionExecutable::lineCount const):
        (JSC::CachedFunctionExecutable::unlinkedFunctionNameStart const):
        (JSC::CachedFunctionExecutable::unlinkedBodyStartColumn const):
        (JSC::CachedFunctionExecutable::unlinkedBodyEndColumn const):
        (JSC::CachedFunctionExecutable::startOffset const):
        (JSC::CachedFunctionExecutable::sourceLength const):
        (JSC::CachedFunctionExecutable::parametersStartOffset const):
        (JSC::CachedFunctionExecutable::typeProfilingStartOffset const):
        (JSC::CachedFunctionExecutable::typeProfilingEndOffset const):
        (JSC::CachedFunctionExecutable::parameterCount const):
        (JSC::CachedFunctionExecutable::features const):
        (JSC::CachedFunctionExecutable::sourceParseMode const):
        (JSC::CachedFunctionExecutable::isInStrictContext const):
        (JSC::CachedFunctionExecutable::hasCapturedVariables const):
        (JSC::CachedFunctionExecutable::isBuiltinFunction const):
        (JSC::CachedFunctionExecutable::isBuiltinDefaultClassConstructor const):
        (JSC::CachedFunctionExecutable::constructAbility const):
        (JSC::CachedFunctionExecutable::constructorKind const):
        (JSC::CachedFunctionExecutable::functionMode const):
        (JSC::CachedFunctionExecutable::scriptMode const):
        (JSC::CachedFunctionExecutable::superBinding const):
        (JSC::CachedFunctionExecutable::derivedContextType const):
        (JSC::CachedFunctionExecutable::name const):
        (JSC::CachedFunctionExecutable::ecmaName const):
        (JSC::CachedFunctionExecutable::inferredName const):
        (JSC::CachedCodeBlock::instructions const):
        (JSC::CachedCodeBlock::thisRegister const):
        (JSC::CachedCodeBlock::scopeRegister const):
        (JSC::CachedCodeBlock::globalObjectRegister const):
        (JSC::CachedCodeBlock::sourceURLDirective const):
        (JSC::CachedCodeBlock::sourceMappingURLDirective const):
        (JSC::CachedCodeBlock::usesEval const):
        (JSC::CachedCodeBlock::isStrictMode const):
        (JSC::CachedCodeBlock::isConstructor const):
        (JSC::CachedCodeBlock::hasCapturedVariables const):
        (JSC::CachedCodeBlock::isBuiltinFunction const):
        (JSC::CachedCodeBlock::superBinding const):
        (JSC::CachedCodeBlock::scriptMode const):
        (JSC::CachedCodeBlock::isArrowFunctionContext const):
        (JSC::CachedCodeBlock::isClassContext const):
        (JSC::CachedCodeBlock::wasCompiledWithDebuggingOpcodes const):
        (JSC::CachedCodeBlock::constructorKind const):
        (JSC::CachedCodeBlock::derivedContextType const):
        (JSC::CachedCodeBlock::evalContextType const):
        (JSC::CachedCodeBlock::hasTailCalls const):
        (JSC::CachedCodeBlock::lineCount const):
        (JSC::CachedCodeBlock::endColumn const):
        (JSC::CachedCodeBlock::numVars const):
        (JSC::CachedCodeBlock::numCalleeLocals const):
        (JSC::CachedCodeBlock::numParameters const):
        (JSC::CachedCodeBlock::features const):
        (JSC::CachedCodeBlock::parseMode const):
        (JSC::CachedCodeBlock::codeType const):
        (JSC::CachedCodeBlock::rareData const):
        (JSC::CachedProgramCodeBlock::encode):
        (JSC::CachedProgramCodeBlock::decode const):
        (JSC::CachedModuleCodeBlock::encode):
        (JSC::CachedModuleCodeBlock::decode const):
        (JSC::CachedEvalCodeBlock::encode):
        (JSC::CachedEvalCodeBlock::decode const):
        (JSC::CachedFunctionCodeBlock::encode):
        (JSC::CachedFunctionCodeBlock::decode const):
        (JSC::UnlinkedFunctionCodeBlock::UnlinkedFunctionCodeBlock):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::decode const):
        (JSC::UnlinkedProgramCodeBlock::UnlinkedProgramCodeBlock):
        (JSC::UnlinkedModuleProgramCodeBlock::UnlinkedModuleProgramCodeBlock):
        (JSC::UnlinkedEvalCodeBlock::UnlinkedEvalCodeBlock):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::CachedFunctionExecutable::decode const):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedSourceCodeKey::encode):
        (JSC::CachedSourceCodeKey::decode const):
        (JSC::CacheEntry::encode):
        (JSC::CacheEntry:: const):
        (JSC:: const):
        (JSC::encodeCodeBlock):
        (JSC::decodeCodeBlockImpl):
        * runtime/CachedTypes.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedGlobalCodeBlock.h.
        (JSC::decodeCodeBlock):
        * runtime/CodeCache.cpp:
        (JSC::CodeCacheMap::pruneSlowCase):
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        (JSC::CodeCache::write):
        * runtime/CodeCache.h:
        (JSC::CodeCacheMap::begin):
        (JSC::CodeCacheMap::end):
        (JSC::CodeCacheMap::fetchFromDiskImpl):
        (JSC::CodeCacheMap::findCacheAndUpdateAge):
        (JSC::writeCodeBlock):
        * runtime/JSBigInt.cpp:
        * runtime/JSBigInt.h:
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/RegExp.h:
        * runtime/ScopedArgumentsTable.h:
        * runtime/StackFrame.h:
        * runtime/StructureInlines.h:
        * runtime/SymbolTable.h:

2019-01-20  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577
        <rdar://problem/47408511>

        Unreviewed. Also enable Pointer Events for iosmac.

        * Configurations/FeatureDefines.xcconfig:

2019-01-19  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Reorder JSSegmentedVariableObject member for preparation of JSGlobalObject memory reduction
        https://bugs.webkit.org/show_bug.cgi?id=193609

        Reviewed by Sam Weinig.

        Basically, we should order the members in large => small order not to add paddings.

        * runtime/JSSegmentedVariableObject.h:

2019-01-19  Antoine Quint  <graouts@apple.com>

        Add a POINTER_EVENTS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=193577

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2019-01-18  Keith Miller  <keith_miller@apple.com>

        JSScript API should only take ascii files.
        https://bugs.webkit.org/show_bug.cgi?id=193420

        Reviewed by Saam Barati.

        This patch leaves the UTF8 method for binary compatablity, which
        will be removed later.

        * API/JSScript.h:
        * API/JSScript.mm:
        (fillBufferWithContentsOfFile):
        (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        (+[JSScript scriptFromUTF8File:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        * API/tests/testapi.mm:
        (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):

2019-01-18  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Gigacages should start allocations from a slide
        <https://bugs.webkit.org/show_bug.cgi?id=193523>
        <rdar://problem/44958707>

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::caged): Add UNUSED_PARAM(kind) to
        fix the build.

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-18  Keith Miller  <keith_miller@apple.com>

        Gigacages should start allocations from a slide
        https://bugs.webkit.org/show_bug.cgi?id=193523

        Reviewed by Mark Lam.

        This patch changes some macros into constants since macros are the
        devil.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::caged):
        * llint/LowLevelInterpreter64.asm:

2019-01-18  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r240160.

        This broke multiple internal builds.

        Reverted changeset:

        "Gigacages should start allocations from a slide"
        https://bugs.webkit.org/show_bug.cgi?id=193523
        https://trac.webkit.org/changeset/240160

2019-01-18  Keith Miller  <keith_miller@apple.com>

        Gigacages should start allocations from a slide
        https://bugs.webkit.org/show_bug.cgi?id=193523

        Reviewed by Mark Lam.

        This patch changes some macros into constants since macros are the
        devil.

        * llint/LowLevelInterpreter64.asm:

2019-01-17  Mark Lam  <mark.lam@apple.com>

        Audit bytecode fields and ensure that LLInt instructions for accessing them are appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=193557
        <rdar://problem/47369125>

        Reviewed by Yusuke Suzuki.

        1. Rename some bytecode fields so that it's easier to discern whether the LLInt
           is accessing them the right way:
           - distinguish between targetVirtualRegister and targetLabel.
           - name all StructureID fields as structureID (oldStructureID, newStructureID)
             instead of structure (oldStructure, newStructure).

        2. Use bitwise_cast in struct Fits when sizeof(T) == size.
           This prevents potential undefined behavior issues arising from doing
           assignments with reinterpret_cast'ed pointers.

        3. Make Special::Pointer an unsigned type (previously int).
           Make ResolveType an unsigned type (previously int).

        4. In LowLevelInterpreter*.asm:

           - rename the op macro argument to opcodeName or opcodeStruct respectively.
             This makes it clearer which argument type the macro is working with.

           - rename the name macro argument to opcodeName.

           - fix operator types to match the field type being accessed.  The following
             may have resulted in bugs before:

             1. The following should be read with getu() instead of get() because they
                are unsigned ints:
                    OpSwitchImm::m_tableIndex
                    OpSwitchChar::m_tableIndex
                    OpGetFromArguments::m_index
                    OpPutToArguments::m_index
                    OpGetRestLength::m_numParametersToSkip

                OpJneqPtr::m_specialPointer should also be read with getu() though this
                wasn't a bug because it was previously an int by default, and is only
                changed to an unsigned int in this patch.

             2.The following should be read with loadi (not loadp) because they are of
               unsigned type (not a pointer):
                    OpResolveScope::Metadata::m_resolveType
                    CodeBlock::m_numParameters (see prepareForTailCall)

             3. OpPutToScope::Metadata::m_operand should be read with loadp (not loadis)
                because it is a uintptr_t.

             4. The following should be read with loadi (not loadis) because they are
                unsigned ints:
                    OpNegate::Metadata::m_arithProfile + ArithProfile::m_bits
                    OpPutById::Metadata::m_oldStructureID
                    OpPutToScope::Metadata::m_getPutInfo + GetPutInfo::m_operand

                These may not have manifested in bugs because the operations that follow
                the load are 32-bit instructions which ignore the high word.

        5. Give class GetPutInfo a default constructor so that we can use bitwise_cast
           on it.  Also befriend LLIntOffsetsExtractor so that we can take the offset of
           m_operand in it.

        * bytecode/ArithProfile.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * bytecode/Fits.h:
        * bytecode/GetByIdMetadata.h:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::clearLLIntGetByIdCache):
        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::jumpTargetForInstruction):
        (JSC::updateStoredJumpTargetsForInstruction):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        * bytecode/SpecialPointer.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::Label::setLocation):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareAndJumpSlow):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emitBinaryDoubleOp):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emit_op_profile_type):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emit_op_profile_type):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::setupGetByIdPrototypeCache):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        * runtime/GetPutInfo.h:

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Saam barati  <sbarati@apple.com>

        StringObjectUse should not be a structure check for the original string object structure
        https://bugs.webkit.org/show_bug.cgi?id=193483
        <rdar://problem/47280522>

        Reviewed by Yusuke Suzuki.

        Prior to this patch, the use kind for StringObjectUse implied that we
        do a StructureCheck on the input operand for the *original* StringObject
        structure. This is generally not how we use UseKinds, so it's no surprise
        that this is buggy. A UseKind should map to a set of SpeculatedTypes, not an
        actual set of structures. This patch changes the meaning of StringObjectUse
        to mean an object where jsDynamicCast<StringObject*> would succeed.
        
        This patch also fixes a bug that was caused by the old and weird usage of the
        UseKind to mean StructureCheck. Consider a program like this:
        ```
        S1 = Original StringObject structure
        S2 = Original StringObject structure with the field "f" added
        
        a: GetLocal()
        b: CheckStructure(@a, {S2})
        c: ToString(StringObject:@a)
        ```
        
        According to AI, in the above program, we would exit at @c, since
        StringObject:@a implies a structure check of {S1}, and the intersection
        of {S1} and {S2} is {}. So, we'd convert the program to be:
        ```
        a: GetLocal()
        b: CheckStructure(@a, {S2})
        c: Check(StringObject:@a)
        d: Unreachable
        ```
        
        However, AI would set the proof status of the StringObject:@a edge
        to be proven, since the SpeculatedType for @a is SpecStringObject.
        This was incorrect of AI to do because the SpeculatedType itself
        didn't capture the full power of StringObjectUse. However, having
        a UseKind mean CheckStructure is weird precisely because what AI was
        doing is a natural fit to how we typically we think about UseKinds.
        
        So the above program would then incorrectly be converted to this, and
        we'd crash when reaching the Unreachable node:
        ```
        a: GetLocal()
        b: CheckStructure(@a, {S2})
        d: Unreachable
        ```
        
        This patch makes it so that StringObjectUse just means that the object that
        filters through a StringObjectUse check must !!jsDynamicCast<StringObject*>.
        This is now in line with all other UseKinds. It also lets us simplify a bunch
        of other code that had weird checks for the StringObjectUse UseKind.
        
        This patch also makes it so that anywhere where we used to rely on
        StringObjectUse implying a structure check we actually emit an explicit
        CheckStructure node.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/ExitKind.cpp:
        (JSC::exitKindToString):
        * bytecode/ExitKind.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGCSEPhase.cpp:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGEdgeUsesStructure.h: Removed.
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
        (JSC::DFG::FixupPhase::addCheckStructureForOriginalStringObjectUse):
        (JSC::DFG::FixupPhase::fixupToPrimitive):
        (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
        (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
        (JSC::DFG::FixupPhase::isStringObjectUse): Deleted.
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::canOptimizeStringObjectAccess):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOrStringValueOf):
        (JSC::DFG::SpeculativeJIT::speculateStringObject):
        (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure): Deleted.
        * dfg/DFGUseKind.h:
        (JSC::DFG::alreadyChecked):
        (JSC::DFG::usesStructure): Deleted.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructorOrStringValueOf):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringObject):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringOrStringObject):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringObjectForCell):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringObjectForStructureID): Deleted.
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringPrototype.h:

2019-01-17  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Add generateHeapSnapshotForGCDebugging function to dump GCDebugging data
        https://bugs.webkit.org/show_bug.cgi?id=193526

        Reviewed by Michael Saboff.

        This patch adds generateHeapSnapshotForGCDebugging to JSC shell to dump heap snapshot JSON string with GCDebugging option.
        GCDebuggingSnapshot mode is slightly different from InspectorSnapshot in terms of both the output data and the behavior.
        It always takes full snapshot, and it reports internal data too. This is useful to view the live heap objects after running
        the code. Also, generateHeapSnapshotForGCDebugging returns String instead of parsing it to JSObject internally by calling
        JSON.parse. If we convert the String to bunch of objects by using JSON.parse, it is difficult to call generateHeapSnapshotForGCDebugging
        multiple times for debugging. Currently, it only generates a large string, which is easily distinguishable in the heap inspector tool.

        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionGenerateHeapSnapshotForGCDebugging):

2019-01-17  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] ToThis omission in DFGByteCodeParser is wrong
        https://bugs.webkit.org/show_bug.cgi?id=193513
        <rdar://problem/45842236>

        Reviewed by Saam Barati.

        DFGByteCodeParser omitted ToThis node when we have `ToThis(ToThis(value))`. This semantics is wrong if ToThis has different semantics
        in the sloppy mode and the strict mode. If we convert `ToThisInSloppyMode(ToThisInStrictMode(boolean))` to `ToThisInStrictMode(boolean)`,
        we get boolean instead of BooleanObject.

        This optimization is introduced more than 7 years ago, and from that, we have several optimizations that can remove such ToThis nodes
        in BytecodeParser, AI, and Fixup. Furthermore, this optimization is simply wrong since `toThis()` function of JSCell can be defined
        as they want. Before ensuring all the toThis function is safe, we should not fold `ToThis(ToThis(value))` => `ToThis(value)`.
        This patch just removes the problematic optimization. The performance numbers look neutral.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2019-01-16  Mark Lam  <mark.lam@apple.com>

        Refactor new bytecode structs so that the fields are prefixed with "m_".
        https://bugs.webkit.org/show_bug.cgi?id=193467

        Reviewed by Saam Barati and Tadeu Zagallo.

        This makes it easier to do a manual audit of type correctness of the LLInt
        instructions used to access these fields.  Without this change, it would be
        difficult (and error prone) to distinguish the difference between field names and
        macro variables.  This audit will be done after this patch lands.

        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::notifyLexicalBindingShadowing):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
        (JSC::CodeBlock::arithProfileForPC):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        (JSC::CodeBlock::forEachArrayAllocationProfile):
        (JSC::CodeBlock::forEachObjectAllocationProfile):
        (JSC::CodeBlock::forEachLLIntCallLinkInfo):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::clearLLIntGetByIdCache):
        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::jumpTargetForInstruction):
        (JSC::extractStoredJumpTargetsForInstruction):
        (JSC::updateStoredJumpTargetsForInstruction):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::dumpLineColumnEntry):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::fuseCompareAndJump):
        (JSC::BytecodeGenerator::fuseTestAndJmp):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::StructureForInContext::finalize):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleVarargsCall):
        (JSC::DFG::ByteCodeParser::parseGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ByteCodeParser::handlePutAccessorById):
        (JSC::DFG::ByteCodeParser::handlePutAccessorByVal):
        (JSC::DFG::ByteCodeParser::handleNewFunc):
        (JSC::DFG::ByteCodeParser::handleNewFuncExp):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareCatchOSREntry):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * generator/Argument.rb:
        * generator/Metadata.rb:
        * generator/Opcode.rb:
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_unsigned):
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_inc):
        (JSC::JIT::emit_op_dec):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitBitBinaryOpFastPath):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emitRightShiftFastPath):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_unsigned):
        (JSC::JIT::emit_op_inc):
        (JSC::JIT::emit_op_dec):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        * jit/JITInlines.h:
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::copiedGetPutInfo):
        (JSC::JIT::copiedArithProfile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_is_empty):
        (JSC::JIT::emit_op_is_undefined):
        (JSC::JIT::emit_op_is_undefined_or_null):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_cell_with_type):
        (JSC::JIT::emit_op_is_object):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_string):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_get_parent_scope):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_get_scope):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::emit_op_has_indexed_property):
        (JSC::JIT::emitSlow_op_has_indexed_property):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_argument_count):
        (JSC::JIT::emit_op_get_rest_length):
        (JSC::JIT::emit_op_get_argument):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_is_empty):
        (JSC::JIT::emit_op_is_undefined):
        (JSC::JIT::emit_op_is_undefined_or_null):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_cell_with_type):
        (JSC::JIT::emit_op_is_object):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_string):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_get_parent_scope):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_get_scope):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::emit_op_has_indexed_property):
        (JSC::JIT::emitSlow_op_has_indexed_property):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOperations.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitGetByValWithCachedId):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_put_to_arguments):
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitGetByValWithCachedId):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_put_to_arguments):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::setupGetByIdPrototypeCache):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::genericCall):
        (JSC::LLInt::varargsSetup):
        (JSC::LLInt::commonCallEval):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        (JSC::updateArithProfileForUnaryArithOp):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):

2019-01-15  Mark Lam  <mark.lam@apple.com>

        JSFunction::canUseAllocationProfile() should account for builtin functions with no own prototypes.
        https://bugs.webkit.org/show_bug.cgi?id=193423
        <rdar://problem/46209355>

        Reviewed by Saam Barati.

        JSFunction::canUseAllocationProfile() should return false for most builtins
        because the majority of them have no prototype property.  The only exception to
        this is the few builtin functions that are explicitly used as constructors.

        For these builtin constructors, JSFunction::canUseAllocationProfile() should also
        return false if the prototype property is a getter or custom getter because
        getting the prototype would then be effectful.

        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSFunctionInlines.h:
        (JSC::JSFunction::canUseAllocationProfile):
        * runtime/PropertySlot.h:

2019-01-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Use KnownStringUse for GetByVal(Array::String) since AI would offer wider type information and offer non-string type after removing Check(String)
        https://bugs.webkit.org/show_bug.cgi?id=193438
        <rdar://problem/45581249>

        Reviewed by Saam Barati and Keith Miller.

        GetByVal(Array::String) emits Check(String) before that. But AI can broaden type constraint in the second run.
        After the first run removes Check(String), it would happen that AI starts saying the type of 1st child is not String.
        To claim that it *is* a String type, we should use KnownStringUse here.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode): StringCharAt and GetByVal(Array::String) share the underlying compiler code. We should
        change StringUse => KnownStringUse for StringCharAt too. And StringCharAt and StringCharCodeAt potentially have the same
        problem. This patch fixes it too.
        * dfg/DFGSSALoweringPhase.cpp:
        (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharCodeAt):

2019-01-15  Saam Barati  <sbarati@apple.com>

        Try ripping out inferred types because it might be a performance improvement
        https://bugs.webkit.org/show_bug.cgi?id=190906

        Reviewed by Yusuke Suzuki.

        This patch removes inferred types from JSC. Initial evidence shows that
        this might be around a ~1% speedup on Speedometer2 and JetStream2.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/Fits.h:
        * bytecode/PutByIdFlags.cpp:
        (WTF::printInternal):
        * bytecode/PutByIdFlags.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        (JSC::PutByIdStatus::computeForStubInfo):
        (JSC::PutByIdStatus::computeFor):
        * bytecode/PutByIdVariant.cpp:
        (JSC::PutByIdVariant::operator=):
        (JSC::PutByIdVariant::replace):
        (JSC::PutByIdVariant::transition):
        (JSC::PutByIdVariant::setter):
        (JSC::PutByIdVariant::attemptToMerge):
        (JSC::PutByIdVariant::dumpInContext const):
        * bytecode/PutByIdVariant.h:
        (JSC::PutByIdVariant::requiredType const): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::isType const): Deleted.
        * dfg/DFGAbstractValue.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleGetByOffset):
        (JSC::DFG::ByteCodeParser::handlePutByOffset):
        (JSC::DFG::ByteCodeParser::load):
        (JSC::DFG::ByteCodeParser::store):
        (JSC::DFG::ByteCodeParser::handlePutById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::emitGetByOffset):
        (JSC::DFG::ConstantFoldingPhase::emitPutByOffset):
        * dfg/DFGDesiredInferredType.h: Removed.
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::DesiredWatchpoints::reallyAdd):
        (JSC::DFG::DesiredWatchpoints::areStillValid const):
        (JSC::DFG::DesiredWatchpoints::dumpInContext const):
        (JSC::DFG::InferredTypeAdaptor::add): Deleted.
        * dfg/DFGDesiredWatchpoints.h:
        (JSC::DFG::DesiredWatchpoints::isWatched):
        (JSC::DFG::InferredTypeAdaptor::hasBeenInvalidated): Deleted.
        (JSC::DFG::InferredTypeAdaptor::dumpInContext): Deleted.
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::inferredValueForProperty):
        (JSC::DFG::Graph::inferredTypeFor): Deleted.
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::registerInferredType): Deleted.
        (JSC::DFG::Graph::inferredTypeForProperty): Deleted.
        * dfg/DFGInferredTypeCheck.cpp: Removed.
        * dfg/DFGInferredTypeCheck.h: Removed.
        * dfg/DFGNode.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::checkInferredType): Deleted.
        * generator/DSL.rb:
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::branchIfNotType): Deleted.
        * jit/AssemblyHelpers.h:
        * jit/Repatch.cpp:
        (JSC::tryCachePutByID):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/InferredStructure.cpp:
        (JSC::InferredStructure::InferredStructure): Deleted.
        * runtime/InferredStructure.h:
        (): Deleted.
        * runtime/InferredStructureWatchpoint.cpp:
        (JSC::InferredStructureWatchpoint::fireInternal): Deleted.
        * runtime/InferredType.cpp: Removed.
        * runtime/InferredType.h: Removed.
        * runtime/InferredTypeInlines.h: Removed.
        * runtime/InferredTypeTable.cpp: Removed.
        * runtime/InferredTypeTable.h: Removed.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::willStoreValueSlow):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/StructureInlines.h:
        (JSC::Structure::get):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2019-01-15  Tomas Popela  <tpopela@redhat.com>

        Unreviewed: Fix the -Wformat compiler warnings

        * jsc.cpp:
        (jscmain):

2019-01-15  Caio Lima  <ticaiolima@gmail.com>

        DFGByteCodeParser rules for bitwise operations should consider type of their operands
        https://bugs.webkit.org/show_bug.cgi?id=192966

        Reviewed by Yusuke Suzuki.

        This patch is changing the logic how we lower bitwise operations, to
        consider only the type of input nodes and fix them during FixupPhase,
        if necessary. We are also changing the prediction propagation rules
        for ValueBitOp to use `getHeapPrediction()`. 

        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasInt32Result):
        (JSC::DFG::Node::hasNumberOrAnyIntResult):
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGPredictionPropagationPhase.cpp:

2019-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate the DOMDebugger domain for Augmenting Agents (ObjC protocol)
        https://bugs.webkit.org/show_bug.cgi?id=193409
        <rdar://problem/44349411>

        Reviewed by Devin Rousso.

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator):
        Generate DOMDebugger domain ObjC interfaces.

2019-01-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: create new IDL type for exposing special functionality in test context
        https://bugs.webkit.org/show_bug.cgi?id=193149
        <rdar://problem/46801218>

        Reviewed by Joseph Pecoraro.

        Create a new `AuditAgent` (and various subclasses for different inspection targets)

        * inspector/protocol/Audit.json: Added.
        Add a `run` command that is a simpler version of `Runtime.evaluate`, except that it expects
        a function string instead of an arbitrary JavaScript expression.
        Add `setup` and `teardown` commands that create a JavaScript object that will be passed in
        to the test as an argument. Keep this object alive so that tests can add to the object and
        have later tests use what was added.

        * inspector/agents/InspectorAuditAgent.h: Added.
        * inspector/agents/InspectorAuditAgent.cpp: Added.
        (Inspector::InspectorAuditAgent::InspectorAuditAgent):
        (Inspector::InspectorAuditAgent::didCreateFrontendAndBackend):
        (Inspector::InspectorAuditAgent::willDestroyFrontendAndBackend):
        (Inspector::InspectorAuditAgent::setup):
        (Inspector::InspectorAuditAgent::run):
        (Inspector::InspectorAuditAgent::teardown):
        (Inspector::InspectorAuditAgent::hasActiveAudit):
        (Inspector::InspectorAuditAgent::populateAuditObject):

        * inspector/agents/JSGlobalObjectAuditAgent.h: Added.
        * inspector/agents/JSGlobalObjectAuditAgent.cpp: Added.
        (Inspector::JSGlobalObjectAuditAgent::JSGlobalObjectAuditAgent):
        (Inspector::JSGlobalObjectAuditAgent::injectedScriptForEval):

        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
        (Inspector::JSGlobalObjectInspectorController::jsAgentContext): Added.
        (Inspector::JSGlobalObjectInspectorController::createLazyAgents): Added.

        * inspector/InjectedScript.h:
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::execute): Added.
        (Inspector::InjectedScript::arrayFromVector): Added.
        Create a version of `evaluate` that accepts a list of values to be passed in as arguments
        to the function that was created by the `eval` of the given `functionString`.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype.execute): Added.
        (InjectedScript.prototype.evaluate):
        (InjectedScript.prototype.evaluateOnCallFrame):
        (InjectedScript.prototype._evaluateAndWrap):
        (InjectedScript.prototype._wrapAndSaveCall): Added.
        (InjectedScript.prototype._wrapCall): Added.
        (InjectedScript.prototype._evaluateOn):
        Refactor the `eval` and `saveResult` logic to allow for more flexibility for other callers.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * UnifiedSources-input.xcfilelist:

2019-01-14  Michael Saboff  <msaboff@apple.com>

        Add option to JSC to dump memory footprint on script completion
        https://bugs.webkit.org/show_bug.cgi?id=193422

        Reviewed by Mark Lam.

        Added the --footprint option to dump peak and current memory usage.  This uses the same
        OS calls added in r2362362.

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

2019-01-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] AI should check the given constant's array type when folding GetByVal into constant
        https://bugs.webkit.org/show_bug.cgi?id=193413
        <rdar://problem/46092389>

        Reviewed by Keith Miller.

        If GetByVal's DFG::ArrayMode's type is Array::Double, we expect that the result of GetByVal is Double, since we already performed CheckStructure or CheckArray
        to ensure this array type. But this assumption on the given value becomes wrong in AI, since CheckStructure may not perform filtering. And the proven AbstractValue
        in GetByVal would not be expected one.

        We have the graph before performing constant folding.

        53:<!0:->     GetLocal(Check:Untyped:@77, JS|MustGen|UseAsOther, Array, arg2(C<Array>/FlushedCell), R:Stack(7), bc#37, ExitValid)  predicting Array
        54:< 1:->     JSConstant(JS|PureNum|UseAsOther|UseAsInt|ReallyWantsInt, BoolInt32, Int32: 0, bc#37, ExitValid)
        93:<!0:->     CheckStructure(Cell:@53, MustGen, [%C7:Array], R:JSCell_structureID, Exits, bc#37, ExitValid)
        94:< 1:->     GetButterfly(Check:Cell:@53, Storage|PureInt, R:JSObject_butterfly, Exits, bc#37, ExitValid)
        55:<!0:->     GetByVal(Check:KnownCell:@53, Check:Int32:@54, Check:Untyped:@94, Double|MustGen|VarArgs|PureInt, AnyIntAsDouble|NonIntAsdouble, Double+OriginalCopyOnWriteArray+SaneChain+AsIs+Read, R:Butterfly_publicLength,IndexedDoubleProperties, Exits, bc#37, ExitValid)  predicting StringIdent|NonIntAsdouble

        And 53 is converted to JSConstant in the constant folding. It leads to constant folding attempt in GetByVal.

        53:< 1:->     JSConstant(JS|UseAsOther, Array, Weak:Object: 0x117fb4370 with butterfly 0x8000e4050 (Structure %BV:Array), StructureID: 104, bc#37, ExitValid)
        54:< 1:->     JSConstant(JS|PureNum|UseAsOther|UseAsInt|ReallyWantsInt, BoolInt32, Int32: 0, bc#37, ExitValid)
        93:<!0:->     CheckStructure(Cell:@53, MustGen, [%C7:Array], R:JSCell_structureID, Exits, bc#37, ExitValid)
        94:< 1:->     GetButterfly(Check:Cell:@53, Storage|PureInt, R:JSObject_butterfly, Exits, bc#37, ExitValid)
        55:<!0:->     GetByVal(Check:KnownCell:@53, Check:Int32:@54, Check:Untyped:@94, Double|MustGen|VarArgs|PureInt, AnyIntAsDouble|NonIntAsdouble, Double+OriginalCopyOnWriteArray+SaneChain+AsIs+Read, R:Butterfly_publicLength,IndexedDoubleProperties, Exits, bc#37, ExitValid)  predicting StringIdent|NonIntAsdouble

        GetByVal gets constant Array from @53, and attempt to perform constant folding by leverating CoW state: if the given array's butterfly is CoW and we performed CoW array check for this GetByVal, the array would not be changed as long as the check works.
        However, CheckStructure for @53 does not filter anything at AI. So, if @53 is CopyOnWrite | Contiguous array (not CopyOnWrite | Double array!), GetByVal will get a JSValue. But it does not meet the requirement of GetByVal since it has Double Array mode, and says it returns Double.
        Here, CheckStructure is valid because structure of the constant object would be changed. What we should do is additional CoW & ArrayShape check in GetByVal when folding since this node leverages CoW's interesting feature,
        "If CoW array check (CheckStructure etc.) is emitted by GetByVal's DFG::ArrayMode, the content is not changed from the creation!".

        This patch adds ArrayShape check in addition to CoW status check in GetByVal.

        Unfortunately, this crash is very flaky. In the above case, if @53 stays GetLocal after the constant folding phase, this issue does not occur. We can see this crash in r238109, but it is really hard to reproduce it in the current ToT.
        I verified this fix works in r238109 with the attached test.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::fixTypeForRepresentation):

2019-01-14  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Literal parsing is crashing when used inside a Object Literal
        https://bugs.webkit.org/show_bug.cgi?id=193404

        Reviewed by Yusuke Suzuki.

        Former implementation was relying into token.m_data.radix after the
        call of `next()` into Parser.cpp. This is not safe because next
        clobbers token.m_data.radix in some cases (e.g is CLOSEBRACE).
        Now we get radix value before calling `next()` into parser and store
        in a local variable.

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

2019-01-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Do not use asArrayModes() with Structures because it discards TypedArray information
        https://bugs.webkit.org/show_bug.cgi?id=193372

        Reviewed by Saam Barati.

        When RegisteredStructureSet is filtered with AbstractValue, we use structure, SpeculationType, and ArrayModes.
        However, we use asArrayModes() function with IndexingMode to compute the ArrayModes in AbstractValue. This is
        wrong since this discards TypedArray ArrayModes. As a result, if RegisteredStructureSet with TypedArrays is
        filtered with ArrayModes of AbstractValue populated from TypedArrays, we filter all the structures out since
        AbstractValue's ArrayModes become NonArray, which is wrong with the TypedArrays' ArrayModes. This leads to
        incorrect FTL code generation with MultiGetByOffset etc. nodes because,

        1. AI think that this MultiGetByOffset never succeeds since all the values of RegisteredStructureSet are filtered out by the AbstractValue.
        2. AI says the state of MultiGetByOffset is invalid since AI think it never succeeds.
        3. So subsequent code becomes FTL crash code since AI think the execution should do OSR exit.
        4. Then, FTL emits the code for MultiGetByOffset, and emits crash after that.
        5. But in reality, the incoming value can match to the one of the RegisteredStructureSet value since (1)'s structures are incorrectly filtered by the incorrect ArrayModes.
        6. Then, the execution goes on, and falls into the FTL crash.

        This patch fixes the incorrect ArrayModes calculation by the following changes

        1. Rename asArrayModes to asArrayModesIgnoringTypedArrays.
        2. Fix incorrect asArrayModesIgnoringTypedArrays use in our code. Use arrayModesFromStructure instead.
        3. Fix OSR exit code which stores incorrect ArrayModes to the profiles.

        * bytecode/ArrayProfile.cpp:
        (JSC::dumpArrayModes):
        (JSC::ArrayProfile::computeUpdatedPrediction):
        * bytecode/ArrayProfile.h:
        (JSC::asArrayModesIgnoringTypedArrays):
        (JSC::arrayModesFromStructure):
        (JSC::arrayModesIncludeIgnoringTypedArrays):
        (JSC::shouldUseSlowPutArrayStorage):
        (JSC::shouldUseFastArrayStorage):
        (JSC::shouldUseContiguous):
        (JSC::shouldUseDouble):
        (JSC::shouldUseInt32):
        (JSC::asArrayModes): Deleted.
        (JSC::arrayModeFromStructure): Deleted.
        (JSC::arrayModesInclude): Deleted.
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::observeTransitions):
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::mergeOSREntryValue):
        (JSC::DFG::AbstractValue::contains const):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::observeTransition):
        (JSC::DFG::AbstractValue::validate const):
        (JSC::DFG::AbstractValue::observeIndexingTypeTransition):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::fromObserved):
        (JSC::DFG::ArrayMode::alreadyChecked const):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::structureWouldPassArrayModeFiltering):
        (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const):
        (JSC::DFG::ArrayMode::arrayModesWithIndexingShape const):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGRegisteredStructureSet.cpp:
        (JSC::DFG::RegisteredStructureSet::filterArrayModes):
        (JSC::DFG::RegisteredStructureSet::arrayModesFromStructures const):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * jit/JITInlines.h:
        (JSC::JIT::chooseArrayMode):
        (JSC::arrayProfileSaw): Deleted.
        * runtime/JSType.h:
        (JSC::isTypedArrayType):

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Re-enable ability to build --cloop builds.
        https://bugs.webkit.org/show_bug.cgi?id=192955
        <rdar://problem/46882363>

        Reviewed by Saam barati and Keith Miller.

        * Configurations/FeatureDefines.xcconfig:

2019-01-14  Mark Lam  <mark.lam@apple.com>

        Fix all CLoop JSC test failures (including some LLInt bugs due to recent bytecode format change).
        https://bugs.webkit.org/show_bug.cgi?id=193402
        <rdar://problem/46012309>

        Reviewed by Keith Miller.

        The CLoop builds via build-jsc were previously completely disabled after our
        change to enable ASM LLInt build without the JIT.  As a result, JSC tests have
        regressed on CLoop builds.  The CLoop builds and tests will be re-enabled when
        the fix for https://bugs.webkit.org/show_bug.cgi?id=192955 lands.  This patch
        fixes all the regressions (and some old bugs) so that the CLoop test bots won't
        be red when CLoop build gets re-enabled.

        In this patch, we do the following:

        1. Change CLoopStack::grow() to set the new CLoop stack top at the maximum
           allocated capacity (after discounting the reserved zone) as opposed to setting
           it only at the level that the client requested.

           This fixes a small performance bug that I happened to noticed when I was
           debugging a stack issue.  It does not affect correctness.

        2. In LowLevelInterpreter32_64.asm:

           1. Fix loadConstantOrVariableTag() to use subi for computing the constant
              index because the VirtualRegister offset and FirstConstantRegisterIndex
              values it is operating on are both signed ints.  This is just to be
              pedantic.  The previous use of subu will still produce a correct value.

           2. Fix llintOpWithReturn() to use getu (instead of get) for reading
              OpIsCellWithType::type because it is of type JSType, which is a uint8_t.

           3. Fix llintOpWithMetadata() to use loadis for loading
              OpGetById::Metadata::modeMetadata.protoLoadMode.cachedOffset[t5] because it
              is of type PropertyOffset, which is a signed int.

           4. Fix commonCallOp() to use getu for loading fields argv and argc because they
              are  of type unsigned for OpCall, OpConstruct, and OpTailCall, which are the
              clients of commonCallOp.

           5. Fix llintOpWithMetadata() and getClosureVar() to use loadp for loading
              OpGetFromScope::Metadata::operand because it is of type uintptr_t.

        3. In LowLevelInterpreter64.asm:

           1. Fix llintOpWithReturn() to use getu for reading OpIsCellWithType::type
              because it is of type JSType, which is a uint8_t.

           2. Fix llintOpWithMetadata() to use loadi for loading
              OpGetById::Metadata::modeMetadata.protoLoadMode.structure[t2] because it is
              of type StructureID, which is a uint32_t.

              Fix llintOpWithMetadata() to use loadis for loading
              OpGetById::Metadata::modeMetadata.protoLoadMode.cachedOffset[t2] because it
              is of type PropertyOffset, which is a signed int.

           3. commonOp() should reload the metadataTable for op_catch because unlike
              for the ASM LLInt, the exception unwinding code is not able to restore
              "callee saved registers" for the CLoop interpreter because the CLoop uses
              pseudo-registers (see the CLoopRegister class).

              This was the source of many exotic Cloop failures after the bytecode format
              change (which introduced the metadataTable callee saved register).  Hence,
              we fix it by reloading metadataTable's value on re-entry via op_catch for
              exception handling.  We already take care of restoring it in op_ret.

           4. Fix llintOpWithMetadata() and getClosureVar() to use loadp for loading
              OpGetFromScope::Metadata::operand because it is of type uintptr_t.

        4. In LowLevelInterpreter.asm:

           Fix metadata() to use loadi for loading metadataTable offsets because they are
           of type unsigned.  This was also a source of many exotic CLoop test failures.

        5. Change CLoopRegister into a class with a uintptr_t as its storage element.
           Previously, we were using a union to convert between various value types that
           we would store in this pseudo-register.  This method of type conversion is
           undefined behavior according to the C++ spec.  As a result, the C++ compiler
           may choose to elide some CLoop statements, thereby resulting in some exotic
           bugs.

           We fix this by now always using accessor methods and assignment operators to
           ensure that we use bitwise_cast to do the type conversions.  Since bitwise_cast
           uses a memcpy, this ensures that there's no undefined behavior, and that CLoop
           statements won't get elided willy-nilly by the compiler.

           Ditto for the CloopDobleRegisters.

           Similarly, use bitwise_cast for ints2Double() and double2Ints() utility
           functions.

           Also use bitwise_cast (instead of reinterpret_cast) for the CLoop CAST macro.

        6. Fix cloop.rb to use the new CLoopRegister and CLoopDoubleRegister classes.

           Add a clLValue accessor for offlineasm operand types to distinguish
           LValue use of the operands from RValue uses.

           Replace the use of clearHighWord() with simply casting to uint32_t.  This is
           more efficient for the C++ compiler (and help speed up debug build runs).

           Also fix 32-bit arithmetic operations to only set the lower 32-bit value of
           the pseudo registers.  This fixes some CLoop JSC test failures.

        This patch has been manually tested with the JSC tests on the following builds:
        64bit X86 ASM LLLint (without JIT), 64bit and 32bit X86 CLoop, and ARMv7 Cloop.

        * interpreter/CLoopStack.cpp:
        (JSC::CLoopStack::grow):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        (JSC::CLoopRegister::i const):
        (JSC::CLoopRegister::u const):
        (JSC::CLoopRegister::i32 const):
        (JSC::CLoopRegister::u32 const):
        (JSC::CLoopRegister::i8 const):
        (JSC::CLoopRegister::u8 const):
        (JSC::CLoopRegister::ip const):
        (JSC::CLoopRegister::i8p const):
        (JSC::CLoopRegister::vp const):
        (JSC::CLoopRegister::cvp const):
        (JSC::CLoopRegister::callFrame const):
        (JSC::CLoopRegister::execState const):
        (JSC::CLoopRegister::instruction const):
        (JSC::CLoopRegister::vm const):
        (JSC::CLoopRegister::cell const):
        (JSC::CLoopRegister::protoCallFrame const):
        (JSC::CLoopRegister::nativeFunc const):
        (JSC::CLoopRegister::i64 const):
        (JSC::CLoopRegister::u64 const):
        (JSC::CLoopRegister::encodedJSValue const):
        (JSC::CLoopRegister::opcode const):
        (JSC::CLoopRegister::operator ExecState*):
        (JSC::CLoopRegister::operator const Instruction*):
        (JSC::CLoopRegister::operator JSCell*):
        (JSC::CLoopRegister::operator ProtoCallFrame*):
        (JSC::CLoopRegister::operator Register*):
        (JSC::CLoopRegister::operator VM*):
        (JSC::CLoopRegister::operator=):
        (JSC::CLoopRegister::bitsAsDouble const):
        (JSC::CLoopRegister::bitsAsInt64 const):
        (JSC::CLoopDoubleRegister::operator T const):
        (JSC::CLoopDoubleRegister::d const):
        (JSC::CLoopDoubleRegister::bitsAsInt64 const):
        (JSC::CLoopDoubleRegister::operator=):
        (JSC::LLInt::ints2Double):
        (JSC::LLInt::double2Ints):
        (JSC::LLInt::decodeResult):
        (JSC::CLoop::execute):
        (JSC::LLInt::Ints2Double): Deleted.
        (JSC::LLInt::Double2Ints): Deleted.
        (JSC::CLoopRegister::CLoopRegister): Deleted.
        (JSC::CLoopRegister::clearHighWord): Deleted.
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/cloop.rb:

2019-01-14  Keith Miller  <keith_miller@apple.com>

        JSC should have a module loader API
        https://bugs.webkit.org/show_bug.cgi?id=191121

        Reviewed by Michael Saboff.

        This patch adds a new delegate to JSContext that is called to fetch
        any resolved module. The resolution of a module identifier is computed
        as if it were a URL on the web with the caveat that it must be a file URL.

        A new class JSScript has also been added that is similar to JSScriptRef.
        Right now all JSScripts are copied into memory. In the future we should
        mmap the provided file into memory so the OS can evict it to disk under
        pressure. Additionally, the API does not make use of the code signing path
        nor the bytecode caching path, which we will add in subsequent patches.

        Lastly, a couple of new convenience methods have been added. C API
        conversion, can now toRef a JSValue with just a vm rather than
        requiring an ExecState. Secondly, there is now a call wrapper that
        does not require CallData and CallType since many places don't
        care about this.

        * API/APICast.h:
        (toRef):
        * API/JSAPIGlobalObject.cpp: Copied from Source/JavaScriptCore/API/JSVirtualMachineInternal.h.
        * API/JSAPIGlobalObject.h: Added.
        (JSC::JSAPIGlobalObject::create):
        (JSC::JSAPIGlobalObject::createStructure):
        (JSC::JSAPIGlobalObject::JSAPIGlobalObject):
        * API/JSAPIGlobalObject.mm: Added.
        (JSC::JSAPIGlobalObject::moduleLoaderResolve):
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        (JSC::JSAPIGlobalObject::moduleLoaderCreateImportMetaProperties):
        * API/JSAPIValueWrapper.h:
        (JSC::jsAPIValueWrapper): Deleted.
        * API/JSContext.h:
        * API/JSContext.mm:
        (-[JSContext moduleLoaderDelegate]):
        (-[JSContext setModuleLoaderDelegate:]):
        * API/JSContextInternal.h:
        * API/JSContextPrivate.h:
        * API/JSContextRef.cpp:
        (JSGlobalContextCreateInGroup):
        * API/JSScript.h: Added.
        * API/JSScript.mm: Added.
        (+[JSScript scriptWithSource:inVirtualMachine:]):
        (fillBufferWithContentsOfFile):
        (+[JSScript scriptFromUTF8File:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
        (getJSScriptSourceCode):
        * API/JSScriptInternal.h: Copied from Source/JavaScriptCore/API/JSVirtualMachineInternal.h.
        * API/JSValueInternal.h:
        * API/JSVirtualMachineInternal.h:
        * API/tests/testapi.mm:
        (+[JSContextFetchDelegate contextWithBlockForFetch:]):
        (-[JSContextFetchDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
        (checkModuleCodeRan):
        (checkModuleWasRejected):
        (testFetch):
        (testFetchWithTwoCycle):
        (testFetchWithThreeCycle):
        (testLoaderResolvesAbsoluteScriptURL):
        (testLoaderRejectsNilScriptURL):
        (testLoaderRejectsFailedFetch):
        (testImportModuleTwice):
        (+[JSContextFileLoaderDelegate newContext]):
        (resolvePathToScripts):
        (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
        (testLoadBasicFile):
        (testObjectiveCAPI):
        * API/tests/testapiScripts/basic.js: Copied from Source/JavaScriptCore/API/JSVirtualMachineInternal.h.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * SourcesCocoa.txt:
        * config.h:
        * postprocess-headers.sh:
        * runtime/CallData.cpp:
        (JSC::call):
        * runtime/CallData.h:
        * runtime/Completion.cpp:
        (JSC::loadAndEvaluateModule):
        * runtime/Completion.h:
        * runtime/JSCast.h:
        (JSC::jsSecureCast):
        * runtime/JSGlobalObject.cpp:
        (JSC::createProxyProperty):

2019-01-14  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix property access on ARM with the baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=193393

        Reviewed by Yusuke Suzuki.

        Code was still using currentInstruction[4] to access the instruction's metadata.
        Updated to use metadata.getPutInfo and metadata.resolveType.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):

2019-01-12  Timothy Hatcher  <timothy@apple.com>

        Have prefers-color-scheme: light always match on macOS versions before Mojave.
        https://bugs.webkit.org/show_bug.cgi?id=191655
        rdar://problem/46074680

        Reviewed by Megan Gardner.

        * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions.

2019-01-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, fix scope check assertions
        https://bugs.webkit.org/show_bug.cgi?id=193308

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::notifyLexicalBindingShadowing):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::notifyLexicalBindingShadowing):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):

2019-01-11  John Wilander  <wilander@apple.com>

        Compile out Web API Statistics Collection
        https://bugs.webkit.org/show_bug.cgi?id=193370
        <rdar://problem/45388584>

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:
            Defined ENABLE_WEB_API_STATISTICS, off by default.

2019-01-11  Saam barati  <sbarati@apple.com>

        DFG combined liveness can be wrong for terminal basic blocks
        https://bugs.webkit.org/show_bug.cgi?id=193304
        <rdar://problem/45268632>

        Reviewed by Yusuke Suzuki.

        If a block doesn't have any successors, it can't rely on the typical
        backwards liveness propagation that CombinedLiveness was doing. The phase
        first got what was live in bytecode and IR at the heads of each block. Then
        for each block, it made the live at tail the union of the live at head for
        each successor. For a terminal block though, this could be wrong. We could
        end up saying nothing is live even though many things may be live in bytecode.
        We must account for what's bytecode live at the end of the block. Consider a
        block that ends with:
        ```
        ForceOSRExit
        Unreachable
        ```
        
        Things may definitely be live in bytecode at the tail. However, we'll
        report nothing as being alive. This probably subtly breaks many analyses,
        but we have a test case of it breaking the interference analysis that
        the ArgumentsEliminationPhase performs.

        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::last const):
        * dfg/DFGCombinedLiveness.cpp:
        (JSC::DFG::addBytecodeLiveness):
        (JSC::DFG::liveNodesAtHead):
        (JSC::DFG::CombinedLiveness::CombinedLiveness):
        * dfg/DFGCombinedLiveness.h:

2019-01-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Global lexical bindings can shadow global variables if it is `configurable = true`
        https://bugs.webkit.org/show_bug.cgi?id=193308
        <rdar://problem/45546542>

        Reviewed by Saam Barati.

        Previously, we assumed that lexical bindings in JSGlobalLexicalEnvironment cannot shadow existing global properties.
        However, it is wrong. According to the spec, we can shadow global properties if a property's attribute is configurable = true.
        For example, we execute two scripts.

        script1.js

            bar = 42;
            function load() { return bar; }
            print(bar); // 42
            print(load()); // 42

        script2.js

            let bar = 0; // This lexical binding can shadow the global.bar defined in script1.js
            print(bar); // 0
            print(load()); // 0

        In JSC, we cache GlobalProperty resolve type and its associated information in op_resolve_type, op_get_from_scope, and op_put_to_scope.
        They attempt to load a property from JSGlobalObject directly. However, once the newly added lexical binding starts shadowing this, our existing instructions
        become invalid since they do not respect JSGlobalLexicalEnvironment.

        In this patch, we fix this issue by introducing the following mechanisms.

        1. We have a HashMap<property name, watchpoint set> in JSGlobalObject. DFG and FTL create a watchpoint set with the property name if the generated code
        depends on GlobalProperty condition of op_resolve_scope etc. These watchpoint will be fired when the shadowing happens, so that our generated DFG and FTL
        code will be invalidated if it depends on the condition which is no longer valid.

        2. When we detect shadowing, we iterate all the live CodeBlocks which globalObject is the target one. And we rewrite instructions in them from GlobalProperty
        to GlobalLexicalVar (or Dynamic precisely). So, the subsequent LLInt code just works well. "Dynamic" conversion happens when your op_put_to_scope attempts to
        put a value onto a const lexical binding. This fails and it should throw a type error.

        3. GlobalProperty scope operations in Baseline JIT start checking ResolveType in metadata, and emit code for GlobalProperty and GlobalLexicalVar. Once the rewrite
        happens, baseline JIT continues working because it checks the rewritten metadata's ResolveType.

        We use this mechanism (which is similar to haveABadTime() thing) because,

        1. Shadowing should be super rare. Before r214145, we made these cases as SytaxError. Thus, before r214145, this type of code cannot be executed in WebKit.
        And the number of the live CodeBlocks for the given JSGlobalObject should be small. This supports introducing rather simple (but not so efficient) mechanism
        instead of the complicated one.

        2. Rewriting instructions immediately forces GlobalProperty => GlobalLexicalVar / Dynamic conversion in all the possible CodeBlock. This allows us to avoid
        compilation failure loop in DFG and FTL: DFG and FTL codes are invalidated by the watchpoint, but we may attempt to compile the code with the invalidated watchpoint
        and GlobalProperty status if we do not rewrite it. One possible other implementation is having and checking a counter in instruction, and every time we introduce
        a new shadow binding, bump the counter. And eventually executed instruction will go to the slow path and rewrite itself. However, this way leaves the not-executed-again-yet
        instructions as is, and DFG and FTL repeatedly fail to compile if we just watch the invalidated watchpoint for that. Rewriting all the existing GlobalProperty immediately
        avoids this situation easily.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::notifyLexicalBindingShadowing):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::scriptMode const):
        * bytecode/Watchpoint.h:
        (JSC::WatchpointSet::create):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDesiredGlobalProperties.cpp: Added.
        (JSC::DFG::DesiredGlobalProperties::isStillValidOnMainThread):
        (JSC::DFG::DesiredGlobalProperties::reallyAdd):
        * dfg/DFGDesiredGlobalProperties.h: Added.
        (JSC::DFG::DesiredGlobalProperties::addLazily):
        We need this DesiredGlobalProperties mechanism since we do not want to ref() the UniquedStringImpl in DFG and FTL thread.
        We keep JSGlobalObject* and identifierNumber, and materialize WatchpointSets for each JSGlobalObject's property referenced
        from DFG and FTL and inject CodeBlock jettison watchpoints in the main thread.
        * dfg/DFGDesiredGlobalProperty.h: Added.
        (JSC::DFG::DesiredGlobalProperty::DesiredGlobalProperty):
        (JSC::DFG::DesiredGlobalProperty::globalObject const):
        (JSC::DFG::DesiredGlobalProperty::identifierNumber const):
        (JSC::DFG::DesiredGlobalProperty::operator== const):
        (JSC::DFG::DesiredGlobalProperty::operator!= const):
        (JSC::DFG::DesiredGlobalProperty::isHashTableDeletedValue const):
        (JSC::DFG::DesiredGlobalProperty::hash const):
        (JSC::DFG::DesiredGlobalProperty::dumpInContext const):
        (JSC::DFG::DesiredGlobalProperty::dump const):
        (JSC::DFG::DesiredGlobalPropertyHash::hash):
        (JSC::DFG::DesiredGlobalPropertyHash::equal):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::globalProperties):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::reallyAdd):
        (JSC::DFG::Plan::isStillValidOnMainThread):
        (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
        (JSC::DFG::Plan::cancel):
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::globalProperties):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::addStaticGlobals):
        (JSC::JSGlobalObject::notifyLexicalBindingShadowing):
        (JSC::JSGlobalObject::getReferencedPropertyWatchpointSet):
        (JSC::JSGlobalObject::ensureReferencedPropertyWatchpointSet):
        * runtime/JSGlobalObject.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::hasRestrictedGlobalProperty):
        (JSC::ProgramExecutable::initializeGlobalProperties):

2019-01-11  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Do not use register
        r11 in compiled DFG mode since it is already used in LLInt as metadataTable
        register. Also clean up code since ARM traditional isn't supported anymore.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer):
        (JSC::DFG::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer):
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        * jit/GPRInfo.h:
        (JSC::GPRInfo::toIndex):
        * llint/LowLevelInterpreter32_64.asm:
        * offlineasm/arm.rb:

2019-01-10  Brian Burg  <bburg@apple.com>

        Web Inspector: incorrect type signature used for protocol enums in async command results
        https://bugs.webkit.org/show_bug.cgi?id=193331

        Reviewed by Devin Rousso.

        When an enum is returned by an async command, the type signature should be that of the
        Inspector::Protocol::* generated enum, rather than the underlying primitive type (i.e., String).

        * inspector/scripts/codegen/cpp_generator.py:
        (CppGenerator.cpp_type_for_formal_async_parameter):
        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        Rebaseline generator test results.

2019-01-10  Brian Burg  <bburg@apple.com>

        Rebaseline inspector generator test results after recent changes.

        Unreviewed test gardening.

        * 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/fail-on-domain-availability-value.json-error:

2019-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239825.
        https://bugs.webkit.org/show_bug.cgi?id=193330

        Broke tests on armv7/linux bots (Requested by guijemont on
        #webkit).

        Reverted changeset:

        "Enable DFG on ARM/Linux again"
        https://bugs.webkit.org/show_bug.cgi?id=192496
        https://trac.webkit.org/changeset/239825

2019-01-10  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable DFG on ARM/Linux again
        https://bugs.webkit.org/show_bug.cgi?id=192496

        Reviewed by Yusuke Suzuki.

        After changing the bytecode format DFG was disabled on all 32-bit
        architectures. Enable DFG now again on ARM/Linux. Do not use register
        r11 in compiled DFG mode since it is already used in LLInt as metadataTable
        register. Also clean up code since ARM traditional isn't supported anymore.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer):
        (JSC::DFG::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer):
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        * jit/GPRInfo.h:
        (JSC::GPRInfo::toIndex):
        * llint/LowLevelInterpreter32_64.asm:
        * offlineasm/arm.rb:

2019-01-09  Mark Lam  <mark.lam@apple.com>

        Restore bytecode dumper's ability to dump jump target as offset#(->targetBytecodeIndex#).
        https://bugs.webkit.org/show_bug.cgi?id=193300

        Reviewed by Saam Barati.

        For example, instead of:
            [  95] jtrue              loc11, 9
        We can now again (as before the bytecode format rewrite) have:
            [  95] jtrue              loc11, 9(->104)

        * bytecode/BytecodeDumper.cpp:
        (JSC::BytecodeDumper<Block>::printLocationAndOp):
        * bytecode/BytecodeDumper.h:
        (JSC::BytecodeDumper::dumpValue):

2019-01-09  Mark Lam  <mark.lam@apple.com>

        Gigacage disabling checks should handle the GIGACAGE_ALLOCATION_CAN_FAIL case properly.
        https://bugs.webkit.org/show_bug.cgi?id=193292
        <rdar://problem/46485450>

        Reviewed by Yusuke Suzuki.

        * runtime/VM.h:
        (JSC::VM::gigacageAuxiliarySpace):

2019-01-08  Keith Miller  <keith_miller@apple.com>

        builtins should be able to use async/await
        https://bugs.webkit.org/show_bug.cgi?id=193263

        Reviewed by Saam Barati.

        This patch makes it possible to use async functions when writing builtin JS code.

        * Scripts/wkbuiltins/builtins_generator.py:
        (BuiltinsGenerator.generate_embedded_code_string_section_for_function):
        * Scripts/wkbuiltins/builtins_model.py:
        (BuiltinFunction.__init__):
        (BuiltinFunction.fromString):
        (BuiltinFunction.__str__):
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * builtins/ModuleLoader.js:
        (requestInstantiate):
        (async.loadModule):
        (async.loadAndEvaluateModule):
        (async.requestImportModule):
        (loadModule): Deleted.
        (): Deleted.
        (loadAndEvaluateModule): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):

2019-01-08  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Array.prototype.flat/flatMap have a minor bug in ArraySpeciesCreate
        https://bugs.webkit.org/show_bug.cgi?id=193127

        Reviewed by Saam Barati.

        `== null` is frequently used idiom to check `null` or `undefined` in JS.
        However, it has a problem in terms of the builtin JS implementation: it
        returns true if masquerade-as-undefined objects (e.g. document.all) come.

        In this patch, we introduce a convenient builtin intrinsic @isUndefinedOrNull,
        which is equivalent to C++ `JSValue::isUndefinedOrNull`. It does not consider
        about masquerade-as-undefined objects, so that we can use it instead of
        `value === null || value === @undefined`. We introduce is_undefined_or_null
        bytecode, IsUndefinedOrNull DFG node and its DFG and FTL backends. Since
        Null and Undefined have some bit patterns, we can implement this query
        very efficiently.

        * builtins/ArrayIteratorPrototype.js:
        (next):
        * builtins/ArrayPrototype.js:
        (globalPrivate.arraySpeciesCreate):
        * builtins/GlobalOperations.js:
        (globalPrivate.speciesConstructor):
        (globalPrivate.copyDataProperties):
        (globalPrivate.copyDataPropertiesNoExclusions):
        * builtins/MapIteratorPrototype.js:
        (next):
        * builtins/SetIteratorPrototype.js:
        (next):
        * builtins/StringIteratorPrototype.js:
        (next):
        * builtins/StringPrototype.js:
        (match):
        (repeat):
        (padStart):
        (padEnd):
        (intrinsic.StringPrototypeReplaceIntrinsic.replace):
        (search):
        (split):
        (concat):
        (globalPrivate.createHTML):
        * builtins/TypedArrayPrototype.js:
        (globalPrivate.typedArraySpeciesConstructor):
        (map):
        (filter):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitIsUndefinedOrNull):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_isUndefinedOrNull):
        * 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):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsUndefinedOrNull):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_is_undefined_or_null):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_is_undefined_or_null):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2019-01-08  David Kilzer  <ddkilzer@apple.com>

        Leak of VectorBufferBase.m_buffer (16-64 bytes) under JSC::CompactVariableEnvironment in com.apple.WebKit.WebContent running layout tests
        <https://webkit.org/b/193264>
        <rdar://problem/46651026>

        Reviewed by Yusuke Suzuki.

        * parser/VariableEnvironment.cpp:
        (JSC::CompactVariableMap::Handle::~Handle): Call delete on
        m_environment instead of fastFree() to make sure the destructors
        for the Vector instance variables are run.  This fixes the leaks
        because calling fastFree() would only free the
        CompactVariableEnvironment object, but not the heap-based
        buffers allocated for the Vector instance variables.

2019-01-08  Joseph Pecoraro  <pecoraro@apple.com>

        ASSERT when paused in debugger and console evaluation causes exception
        https://bugs.webkit.org/show_bug.cgi?id=193246

        Reviewed by Mark Lam.

        * runtime/VM.cpp:
        (JSC::VM::throwException):
        Improve assertion to allow for the debugger's evaluate on call frame condition.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::callFrameAtDebuggerEntry const):
        (JSC::JSGlobalObject::setCallFrameAtDebuggerEntry):
        Debugger call frame only used by assertions.

        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
        * debugger/DebuggerEvalEnabler.h:
        (JSC::DebuggerEvalEnabler::DebuggerEvalEnabler):
        (JSC::DebuggerEvalEnabler::~DebuggerEvalEnabler):
        When evaluating on a call frame, set a debug GlobalObject state.

2019-01-08  Keith Miller  <keith_miller@apple.com>

        Move JSValueMakeSymbol to private header
        https://bugs.webkit.org/show_bug.cgi?id=193254

        Reviewed by Saam Barati.

        When moving other functions in JSValueRef I guess I forgot to move this one.

        * API/JSObjectRefPrivate.h:
        * API/JSValueRef.h:

2019-01-08  Mark Lam  <mark.lam@apple.com>

        Fix some typos in comments.

        Not reviewed.

        * dfg/DFGIntegerRangeOptimizationPhase.cpp:

2019-01-08  Tadeu Zagallo  <tzagallo@apple.com>

        LLInt put_by_id uses the wrong load instruction for loading flags from the metadata
        https://bugs.webkit.org/show_bug.cgi?id=193221

        Reviewed by Mark Lam.

        The flags are only 4 bytes, but were loaded with loadp. It used to work,
        since the flags were followed by a 4-byte padding, but it broke after the
        struct was compacted in r239626.

        * llint/LowLevelInterpreter64.asm:

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: extend XHR breakpoints to work with fetch
        https://bugs.webkit.org/show_bug.cgi?id=185843
        <rdar://problem/40431027>

        Reviewed by Matt Baker.

        * inspector/protocol/DOMDebugger.json:
        Rename `XHR` to `URL`.

        * inspector/protocol/Debugger.json:
        Add `Fetch` to `reason` enum for the `Debugger.paused` event.

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure connection details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191539
        <rdar://problem/45979891>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Security.json:
        Add `Connection` type.

        * inspector/protocol/Network.json:
        Send `Security.Connection` information when request metrics become available.

2019-01-04  Tadeu Zagallo  <tzagallo@apple.com>

        Baseline version of get_by_id may corrupt metadata
        https://bugs.webkit.org/show_bug.cgi?id=193085
        <rdar://problem/23453006>

        Reviewed by Saam Barati.

        The Baseline version of get_by_id unconditionally calls `emitArrayProfilingSiteForBytecodeIndexWithCell`
        if the property is `length`. However, since the bytecode rewrite, get_by_id only has an ArrayProfile entry
        in the metadata if its mode is `GetByIdMode::ArrayLength`. That might result in one of two bad things:
        1) get_by_id's mode is not ArrayLength, and a duplicate, out-of-line ArrayProfile entry will be created by
        `CodeBlock::getOrAddArrayProfile`.
        2) get_by_id's mode *is* ArrayLength and we generate the array profiling code pointing to the ArrayProfile
        that lives in the metadata table. This works fine as long as get_by_id does not change modes. If that happens,
        the JIT code will write into the metadata table, overwriting the 'GetByIdModeMetadata` for another mode.

        Add a check to the Baseline version of get_by_id so that we only do the ArrayProfiling if the get_by_id's
        mode is ArrayLength

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfArrayProfiles const): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachArrayProfile):
        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitArrayProfilingSiteForBytecodeIndexWithCell): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_id):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2019-01-02  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Optimize Object.prototype.toString
        https://bugs.webkit.org/show_bug.cgi?id=193031

        Reviewed by Saam Barati.

        Object.prototype.toString is frequently used for type checking.
        It is called many times in wtb-lebab.js. This patch optimizes
        Object.prototype.toString by the following two optimizations.

        1. We should emit code looking up cached to string in DFG and FTL.

        toString's result is cached in the Structure. We emit a fast path code
        in DFG and FTL to lookup this cache.

        2. We should not create objects for primitive values in major cases.

        When Object.prototype.toString(primitive) is called, this primitive is converted
        to an object by calling ToObject. But if the result is appropriately cached in
        the Structure, we should get it in the fast path without creating this object.
        When converting primitives to objects, Structures used in these newly created objects
        are known (Structure for StringObject etc.). So we can first query the cached string
        before actually converting primitives to objects.

        This patch improves wtb-lebab.js by roughly 2%.

            before:    lebab:  8.90 runs/s
            after :    lebab:  9.09 runs/s

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupObjectToString):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectToString):
        * 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::compileObjectToString):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::finishCreation):
        (JSC::objectProtoFuncToString):
        * runtime/ObjectPrototype.h:
        * runtime/ObjectPrototypeInlines.h: Added.
        (JSC::structureForPrimitiveValue):
        (JSC::objectToString):
        * runtime/StructureRareData.h:

2019-01-03  Michael Saboff  <msaboff@apple.com>

        DFG IntegerRangeOptimization phase exceeding loop limit shouldn't ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=193094

        Reviewed by Saam Barati.

        Removed this debug only ASSERT as one can construct test cases that will exceed the giveUpThreshold
        amount.   This can be done with a large switch statement with at least one const or variable case
        clause.  Such code bytecompiles to compare / jtrue sequences.  Increasing the giveUpThreshold count
        doesn't help with the eventual code generated as B3 has optimizations to coalesce compare / branch
        code sequences even when we don't run the IntegerRangeOptimization phase.

        * dfg/DFGIntegerRangeOptimizationPhase.cpp:

2019-01-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Implement `queryObjects` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=176766
        <rdar://problem/34890689>

        Reviewed by Joseph Pecoraro.

        Introduces a new Command Line function called `queryObjects` that will return an array of
        object that have the given constructor/prototype argument in their prototype chain.
         - `queryObjects(Promise)` will return an array of all Promises.
         - `queryObjects(Foo)` will return all objects created with the constructor `Foo`.

        Currently, an error is thrown if the first argument is one of the following:
         - Object
         - Object.prototype
         - Function
         - Function.prototype
         - Array
         - Array.prototype
         - Map
         - Map.prototype
         - Set
         - Set.prototype
         - Proxy

        The reason for this is that we don't want to expose any internal/builtin objects, as some of
        them are highly sensitive and undefined behaviour can occur if they are modified.

        * inspector/JSInjectedScriptHost.h:
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::checkForbiddenPrototype): Added.
        (Inspector::JSInjectedScriptHost::queryObjects): Added.
        Does a GC and then iterates over all live JSCell in the heap to find these objects.

        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSInjectedScriptHostPrototype::finishCreation):
        (Inspector::jsInjectedScriptHostPrototypeFunctionQueryObjects): Added.

        * inspector/InjectedScriptSource.js:
        (queryObjects): Added.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::promisePrototype): Added.

2018-12-31  Keith Miller  <keith_miller@apple.com>

        SourceProviders should use an actual URL instead of a string
        https://bugs.webkit.org/show_bug.cgi?id=192734

        Reviewed by Yusuke Suzuki.

        This will be useful for the Module loader API in the future where
        by default it will use the relative path from the referring module
        to resolve dependencies.

        I didn't change the JSC shell's urls to be absolute paths as it
        caused problems with the stack traces in our Chakra tests. Since
        the absolute paths included system directories the diff would
        appear incorrect.
        See: https://bugs.webkit.org/show_bug.cgi?id=193077

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSScriptRef.cpp:
        (OpaqueJSScript::create):
        (OpaqueJSScript::OpaqueJSScript):
        * API/glib/JSCContext.cpp:
        (jsc_context_check_syntax):
        * jsc.cpp:
        (jscSource):
        (GlobalObject::moduleLoaderFetch):
        (functionCheckModuleSyntax):
        (runWithOptions):
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::SourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::url const):
        (JSC::StringSourceProvider::create):
        (JSC::StringSourceProvider::StringSourceProvider):
        (JSC::WebAssemblySourceProvider::create):
        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * tools/CodeProfile.h:
        (JSC::CodeProfile::CodeProfile):
        * tools/FunctionOverrides.cpp:
        (JSC::initializeOverrideInfo):

2019-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2019
        https://bugs.webkit.org/show_bug.cgi?id=192811

        Reviewed by Mark Lam.

        * Info.plist:

2018-12-30  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Identifier validity should be based on ID_Start / ID_Continue properties
        https://bugs.webkit.org/show_bug.cgi?id=193050

        Reviewed by Yusuke Suzuki.

        From https://tc39.github.io/ecma262/#sec-names-and-keywords:
            UnicodeIDStart::
                any Unicode code point with the Unicode property "ID_Start"
            UnicodeIDContinue::
                any Unicode code point with the Unicode property "ID_Continue"

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::Lexer):
        (JSC::isNonLatin1IdentStart):
        (JSC::isNonLatin1IdentPart):
        (JSC::isIdentPart):
        (JSC::Lexer<T>::lex):
        Ensure identifier start / part is based on ID_Start / ID_Continue.
        (Implies a special case for U+00B7, which is Latin-1 but Other_ID_Continue.)

2018-12-28  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove one indirection in JSObject::toStringName
        https://bugs.webkit.org/show_bug.cgi?id=193037

        Reviewed by Keith Miller.

        We should not have additional one-level indirection in JSObject::toStringName.
        JSObject::toStringName is dispatched through methodTable. Even after that, we
        need to call JSObject::className function through methodTable again. But className
        function is rarely defined. So instead of introducing this indirection here,
        classes having className functions should have toStringName function too. This can
        remove one-level indirection in toStringName in major cases.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::toStringName):
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::toStringName):
        * debugger/DebuggerScope.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::toStringName):

2018-12-27  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=192658

        Reviewed by Yusuke Suzuki.

        * PlatformMac.cmake:

2018-12-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [JSC][Win][Clang] warning: implicit conversion from 'size_t' (aka 'unsigned long long') to 'int32_t' (aka 'int') changes value from 18446744073709551552 to -64 [-Wconstant-conversion]
        https://bugs.webkit.org/show_bug.cgi?id=193035

        Reviewed by Yusuke Suzuki.

        Clang-cl reports a compilation warning for implicit conversion
        from -64 size_t to int. Replaced '-maxFrameExtentForSlowPathCall'
        with '-static_cast<int32_t>(maxFrameExtentForSlowPathCall)'.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * jit/ThunkGenerators.cpp:
        (JSC::slowPathFor):

2018-12-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [BigInt] Support BigInt in JSON.stringify
        https://bugs.webkit.org/show_bug.cgi?id=192624

        Reviewed by Saam Barati.

        This patch adds BigInt support to JSON.stringify, specified in [1].

        [1]: https://tc39.github.io/proposal-bigint/#sec-serializejsonproperty

        * runtime/JSONObject.cpp:
        (JSC::unwrapBoxedPrimitive):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::toJSONImpl):
        (JSC::Stringifier::appendStringifiedValue):

2018-12-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Use appendUnbarriered for cached own keys
        https://bugs.webkit.org/show_bug.cgi?id=192981

        Reviewed by Saam Barati.

        m_cachedOwnKeys would be changed to sentinel after checking `thisObject->m_cachedOwnKeys.unvalidatedGet() != cachedOwnKeysSentinel()`
        and before executing `visitor.append(thisObject->m_cachedOwnKeys)`. We never do this now, but might in the future.
        To make the code safe, we should use appendUnbarriered to mark non sentinel cell.

        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):

2018-12-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use Ref<> as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=192808

        Reviewed by Alex Christensen.

        * API/JSTypedArray.cpp:
        (JSObjectMakeTypedArrayWithBytesNoCopy):
        * API/JSWeakObjectMapRefPrivate.cpp:
        * bytecompiler/StaticPropertyAnalyzer.h:
        (JSC::StaticPropertyAnalyzer::newObject):
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::sweeper):
        * heap/Heap.h:
        * heap/IsoCellSet.cpp:
        (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource):
        * heap/IsoCellSet.h:
        * heap/IsoCellSetInlines.h:
        (JSC::IsoCellSet::forEachMarkedCellInParallel):
        * heap/Subspace.cpp:
        (JSC::Subspace::parallelDirectorySource):
        (JSC::Subspace::parallelNotEmptyMarkedBlockSource):
        * heap/Subspace.h:
        * heap/SubspaceInlines.h:
        (JSC::Subspace::forEachMarkedCellInParallel):
        * jsc.cpp:
        (functionDollarAgentReceiveBroadcast):
        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::slice const):
        (JSC::ArrayBuffer::sliceImpl const):
        * runtime/ArrayBuffer.h:
        * runtime/ArrayBufferNeuteringWatchpoint.cpp:
        (JSC::ArrayBufferNeuteringWatchpoint::ArrayBufferNeuteringWatchpoint):
        (JSC::ArrayBufferNeuteringWatchpoint::fireAll):
        * runtime/ArrayBufferNeuteringWatchpoint.h:
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):

2018-12-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crashes seen under Inspector::ScriptCallFrame::~ScriptCallFrame
        https://bugs.webkit.org/show_bug.cgi?id=180373
        <rdar://problem/33894170>

        Rubber-stamped by Devin Rousso.

        * inspector/AsyncStackTrace.cpp:
        (Inspector::AsyncStackTrace::truncate):
        The `lastUnlockedAncestor->remove()` may release the only reference to it's
        parent which we intend to use later but don't hold a RefPtr to. Keep the
        parent alive explicitly by protecting it.

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::hasValue() instead of Optional::has_value()
        https://bugs.webkit.org/show_bug.cgi?id=192948

        Reviewed by Tim Horton.

        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command):

2018-12-20  Keith Miller  <keith_miller@apple.com>

        Add support for globalThis
        https://bugs.webkit.org/show_bug.cgi?id=165171

        Reviewed by Mark Lam.

        This patch adds support for the globalThis property on the global
        object. The globalThis property spec is in stage three and is
        quite simple. For reference: http://tc39.github.io/proposal-global/

        * runtime/JSGlobalObject.cpp:

2018-12-20  Chris Dumez  <cdumez@apple.com>

        Use Optional::valueOr() instead of Optional::value_or()
        https://bugs.webkit.org/show_bug.cgi?id=192933

        Reviewed by Geoffrey Garen.

        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::setup):
        * inspector/remote/glib/RemoteConnectionToTargetGlib.cpp:
        (Inspector::RemoteConnectionToTarget::setup):
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Elements tab does not show DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=192910
        <rdar://problem/46680585>

        Reviewed by Brian Burg.

        * inspector/agents/InspectorAgent.h:
        * inspector/agents/InspectorAgent.cpp:
        (Inspector::InspectorAgent::enable):
        (Inspector::InspectorAgent::activateExtraDomain):
        (Inspector::InspectorAgent::activateExtraDomains):
        Send extra domains immediately instead of waiting until
        the Inspector domain is enabled. This will ensure the frontend
        hears about extra augmented domains before augmenting agents
        get a chance to send any messages.

2018-12-20  Mark Lam  <mark.lam@apple.com>

        Fix a typo in slow_path_construct_arityCheck and operationConstructArityCheck.
        https://bugs.webkit.org/show_bug.cgi?id=192939
        <rdar://problem/46869516>

        Reviewed by Keith Miller.

        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:

2018-12-20  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] We should enable CSE into arithmetic operations that speculate BigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=192723

        Reviewed by Yusuke Suzuki.

        This patch is adjusting clobberize rules into ValueOp nodes to enable
        more optimizations when we speculate BigIntUse. In such case, DFG now
        is able to apply CSE, LICM and commutativity on nodes like
        ValueAdd(BigInt, BigInt), ValueSub(BigInt, BigInt), etc.

        Here are the numbers we can observe with some microbenchmarks:

                                  baseline                 changes

        big-int-cse           108.2733+-0.8445    ^    80.9897+-4.9781   ^ definitely 1.3369x faster
        big-int-licm          75.6641+-0.3477     ^    57.8144+-1.6043   ^ definitely 1.3087x faster
        big-int-global-cse    145.3557+-1.0552    ^    86.5866+-0.3025   ^ definitely 1.6787x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):

2018-12-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239377.
        https://bugs.webkit.org/show_bug.cgi?id=192921

        broke 32-bit JSC tests (Requested by keith_miller on #webkit).

        Reverted changeset:

        "[BigInt] We should enable CSE into arithmetic operations that
        speculate BigIntUse"
        https://bugs.webkit.org/show_bug.cgi?id=192723
        https://trac.webkit.org/changeset/239377

2018-12-19  Chris Dumez  <cdumez@apple.com>

        wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=192728
        <rdar://problem/46746779>

        Reviewed by Geoff Garen.

        * API/*:
        * Scripts/*:
        * assembler/*:
        * b3/*:
        * bytecode/*:
        * bytecompiler/*:
        * debugger/*:
        * dfg/*:
        * ftl/*:
        * heap/*:
        * inspector/*:
        * jit/*:
        * llint/*:
        * parser/*:
        * runtime/*:
        * tools/*:
        * wasm/*:
        * yarr/*:

2018-12-18  Simon Fraser  <simon.fraser@apple.com>

        Web Inspector: Timelines: correctly label Intersection Observer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=192669
        <rdar://problem/46702490>

        Reviewed by Joseph Pecoraro.

        Add InspectorInstrumentation::willFireObserverCallback() and use it to wrap calls
        to Intersection Observer, Performance Observer and Mutation Observer callbacks so 
        that they get correctly labeled in the Inspector timeline.

        * inspector/protocol/Timeline.json:

2018-12-18  Mark Lam  <mark.lam@apple.com>

        JSPropertyNameEnumerator should cache the iterated object's structure only after getting its property names.
        https://bugs.webkit.org/show_bug.cgi?id=192464
        <rdar://problem/46519455>

        Reviewed by Saam Barati.

        This is because the process of getting its property names may cause some lazy
        properties to be reified, and the structure will change.  This is needed in order
        for get_direct_pname to work correctly.

        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):

2018-12-19  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] We should enable CSE into arithmetic operations that speculate BigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=192723

        Reviewed by Saam Barati.

        This patch is adjusting clobberize rules into ValueOp nodes to enable
        more optimizations when we speculate BigIntUse. In such case, DFG now
        is able to apply CSE, LICM and commutativity on nodes like
        ValueAdd(BigInt, BigInt), ValueSub(BigInt, BigInt), etc.

        Here are the numbers we can observe with some microbenchmarks:

                                  baseline                 changes

        big-int-cse           108.2733+-0.8445    ^    80.9897+-4.9781   ^ definitely 1.3369x faster
        big-int-licm          75.6641+-0.3477     ^    57.8144+-1.6043   ^ definitely 1.3087x faster
        big-int-global-cse    145.3557+-1.0552    ^    86.5866+-0.3025   ^ definitely 1.6787x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):

2018-12-19  Tadeu Zagallo  <tzagallo@apple.com>

        String overflow in JSC::createError results in ASSERT in WTF::makeString
        https://bugs.webkit.org/show_bug.cgi?id=192833
        <rdar://problem/45706868>

        Reviewed by Mark Lam.

        JSC::createError was calling WTF::makeString which would result in an
        assertion failure when the string was too big. Change it to call
        WTF::tryMakeString instead and return an OutOfMemory error if we fail
        to create the error string.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):

2018-12-18  Ross Kirsling  <ross.kirsling@sony.com>

        Error message for `-x ** y` contains a typo.
        https://bugs.webkit.org/show_bug.cgi?id=192832

        Reviewed by Saam Barati.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseBinaryExpression):
        Make corrections to error message: "amiguous" -> "ambiguous", "parenthesis" -> "parentheses"

2018-12-18  Saam Barati  <sbarati@apple.com>

        Update ARM64EHash
        https://bugs.webkit.org/show_bug.cgi?id=192823
        <rdar://problem/45468257>

        Reviewed by Mark Lam.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::ARM64Assembler):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::finalHash const):
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        (JSC::ARM64EHash::ARM64EHash): Deleted.
        (JSC::ARM64EHash::hash const): Deleted.
        (JSC::ARM64EHash::randomSeed const): Deleted.
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2018-12-18  Mark Lam  <mark.lam@apple.com>

        JSON.stringify() should throw OOM on StringBuilder overflows.
        https://bugs.webkit.org/show_bug.cgi?id=192822
        <rdar://problem/46670577>

        Reviewed by Saam Barati.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::appendNextProperty):

2018-12-18  Ross Kirsling  <ross.kirsling@sony.com>

        Redeclaration of var over let/const/class should be a syntax error.
        https://bugs.webkit.org/show_bug.cgi?id=192298

        Reviewed by Keith Miller.

        From https://tc39.github.io/ecma262/#sec-block-static-semantics-early-errors:
        It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList also occurs in the
        VarDeclaredNames of StatementList.

        Accordingly, this patch ensures that { let x; { var x; } } and { { var x; } let x; } are syntax errors.

        For the "var after" scenario:
        When checking for existing lexically-declared names, we can't simply check the current var scope;
        we need to check *all* enclosing scopes up to (and including) the current var scope. In so doing,
        we must also avoid violating the Annex B.3.5 condition that allows `try {} catch (e) { var e; }`.

        For the "var before" scenario:
        We ensure that lexical scopes always keep track of the vars being hoisted over them; this gives us
        a simple way to check the current block's var-declared names prior to making a lexical declaration.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseTryStatement):
        * parser/Parser.h:
        (JSC::Scope::Scope):
        (JSC::Scope::setIsSimpleCatchParameterScope): Added.
        (JSC::Scope::isSimpleCatchParameterScope): Added.
        (JSC::Scope::declareVariable):
        (JSC::Scope::addVariableBeingHoisted): Added.
        (JSC::Scope::declareLexicalVariable):
        (JSC::Scope::hasDeclaredVariable):
        (JSC::Scope::hasLexicallyDeclaredVariable): Added.
        (JSC::Parser::declareHoistedVariable): Added.
        (JSC::Parser::declareVariable):

2018-12-18  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Use const reference for MediaTime parameter to prevent object copy
        <https://webkit.org/b/192814>

        Reviewed by Mark Lam.

        * runtime/JSCJSValue.h:
        (JSC::jsNumber):

2018-12-18  Saam Barati  <sbarati@apple.com>

        Unreviewed. Appease a build error where we weren't using a variable defined in an "if"

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2018-12-17  Mark Lam  <mark.lam@apple.com>

        Array unshift/shift should not race against the AI in the compiler thread.
        https://bugs.webkit.org/show_bug.cgi?id=192795
        <rdar://problem/46724263>

        Reviewed by Saam Barati.

        The Array unshift and shift operations for ArrayStorage type arrays are protected
        using the cellLock.  The AbstractInterpreter's foldGetByValOnConstantProperty()
        function does grab the cellLock before reading a value from the array's ArrayStorage,
        but does not get the array butterfly under the protection of the cellLock.

        This is insufficient and racy.  For ArrayStorage type arrays, the fetching of the
        butterfly also needs to be protected by the cellLock.  The unshift / shift
        operations can move values around in the butterfly.  Hence, the fact that AI has
        fetched a butterfly pointer (while ensuring no structure change) is insufficient
        to guarantee that the values in the butterfly haven't shifted.

        Having AI hold the cellLock the whole time (from before fetching the butterfly
        till after reading the value from it) eliminates this race.  Note: we only need
        to do this for ArrayStorage type arrays.

        Note also that though AI is holding the cellLock in this case, we still need to
        ensure that the array structure hasn't changed around the fetching of the butterfly.
        This is because operations other than unshift and shift are guarded by this
        protocol, and not the cellLock.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase):

2018-12-16  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Optimize Object.keys by caching own keys results in StructureRareData
        https://bugs.webkit.org/show_bug.cgi?id=190047

        Reviewed by Saam Barati.

        Object.keys is one of the most frequently used function in web-tooling-benchmarks (WTB).
        Object.keys is dominant in lebab of WTB, and frequently called in babel and others.
        Since our Structure knows the shape of JSObject, we can cache the result of Object.keys
        in Structure (StructureRareData) as we cache JSPropertyNameEnumerator in StructureRareData.

        This patch caches the result of Object.keys in StructureRareData. The cached array is created
        as JSImmutableButterfly. And Object.keys creates CoW from this data. Currently, the lifetime
        strategy of this JSImmutableButterfly is the same to cached JSPropertyNameEnumerator. It is
        referenced from Structure, and collected when Structure is collected.

        This improves several benchmarks in SixSpeed.

                                        baseline                  patched

            object-assign.es5      350.1710+-3.6303     ^    226.0368+-4.7558        ^ definitely 1.5492x faster
            for-of-object.es6      269.1941+-3.3430     ^    127.9317+-2.3875        ^ definitely 2.1042x faster

        And it improves WTB lebab by 11.8%.

            Before: lebab:  6.10 runs/s
            After:  lebab:  6.82 runs/s

        * 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/DFGNode.cpp:
        (JSC::DFG::Node::convertToNewArrayBuffer):
        * dfg/DFGNode.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::compileObjectKeys):
        * 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::compileObjectKeys):
        * runtime/Butterfly.h:
        (JSC::ContiguousData::Data::setStartingValue):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSImmutableButterfly.h:
        (JSC::JSImmutableButterfly::JSImmutableButterfly):
        We set JSEmpty to the underlying butterfly storage if indexing type is Contiguous.
        Otherwise, JSImmutableButterfly is half-baked one until all the storage is filled with some meaningful values, it leads to crash
        if half-baked JSImmutableButterfly is exposed to GC.
        * runtime/ObjectConstructor.cpp:
        (JSC::ownPropertyKeys):
        * runtime/Structure.cpp:
        (JSC::Structure::canCachePropertyNameEnumerator const):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::setCachedOwnKeys):
        (JSC::Structure::cachedOwnKeys const):
        (JSC::Structure::cachedOwnKeysIgnoringSentinel const):
        (JSC::Structure::canCacheOwnKeys const):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):
        (JSC::StructureRareData::cachedPropertyNameEnumerator const): Deleted.
        (JSC::StructureRareData::setCachedPropertyNameEnumerator): Deleted.
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedPropertyNameEnumerator const):
        (JSC::StructureRareData::setCachedPropertyNameEnumerator):
        (JSC::StructureRareData::cachedOwnKeys const):
        (JSC::StructureRareData::cachedOwnKeysIgnoringSentinel const):
        (JSC::StructureRareData::cachedOwnKeysConcurrently const):
        (JSC::StructureRareData::setCachedOwnKeys):
        (JSC::StructureRareData::previousID const): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):

2018-12-17  Mark Lam  <mark.lam@apple.com>

        SamplingProfiler's isValidFramePointer() should reject address at stack origin.
        https://bugs.webkit.org/show_bug.cgi?id=192779
        <rdar://problem/46775869>

        Reviewed by Saam Barati.

        isValidFramePointer() was previously treating the address at StackBounds::origin()
        as valid stack memory.  This is not true.  StackBounds::origin() is actually the
        first address beyond valid stack memory. This is now fixed.

        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::isValidFramePointer):

2018-12-17  Mark Lam  <mark.lam@apple.com>

        Suppress ASAN on valid stack accesses in Probe-based OSRExit::executeOSRExit().
        https://bugs.webkit.org/show_bug.cgi?id=192776
        <rdar://problem/46772368>

        Reviewed by Keith Miller.

        1. Add some asanUnsafe methods to the Register class.
        2. Update the probe-based OSRExit::executeOSRExit() to use these asanUnsafe methods.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        * interpreter/Register.h:
        (JSC::Register::asanUnsafeUnboxedInt32 const):
        (JSC::Register::asanUnsafeUnboxedInt52 const):
        (JSC::Register::asanUnsafeUnboxedStrictInt52 const):
        (JSC::Register::asanUnsafeUnboxedDouble const):
        (JSC::Register::asanUnsafeUnboxedCell const):

2018-12-17  Mark Lam  <mark.lam@apple.com>

        Fix stale assertion in attemptToForceStringArrayModeByToStringConversion().
        https://bugs.webkit.org/show_bug.cgi?id=192770
        <rdar://problem/46449037>

        Reviewed by Keith Miller.

        This assertion was added before Array::OriginalNonArray was introduced.  It just
        needs to be updated to allow for Array::OriginalNonArray.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):

2018-12-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r239254.

        This broke the Windows 10 Debug build

        Reverted changeset:

        "Replace many uses of String::format with more type-safe
        alternatives"
        https://bugs.webkit.org/show_bug.cgi?id=192742
        https://trac.webkit.org/changeset/239254

2018-12-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, suppress warnings in Linux

        * jsc.cpp:
        (jscmain):

2018-12-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Null pointer dereference in JSC::WriteBarrierBase()
        https://bugs.webkit.org/show_bug.cgi?id=191252

        Reviewed by Keith Miller.

        JSPromiseDeferred::create can return nullptr and an exception if stack overflow happens.
        We would like to make it RELEASE_ASSERT since the current module mechanism is not immune
        to stack overflow.

        This patch renames JSPromiseDeferred::create to JSPromiseDeferred::tryCreate to tell that
        it can return nullptr. And we insert error checks or assertions after this call.

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderFetch):
        * runtime/Completion.cpp:
        (JSC::rejectPromise):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):
        * runtime/JSInternalPromiseDeferred.cpp:
        (JSC::JSInternalPromiseDeferred::tryCreate):
        (JSC::JSInternalPromiseDeferred::create): Deleted.
        * runtime/JSInternalPromiseDeferred.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::moduleLoaderParseModule):
        * runtime/JSPromise.h:
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::tryCreate):
        * runtime/JSPromiseDeferred.h:
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::webAssemblyCompileFunc):
        (JSC::webAssemblyInstantiateFunc):
        (JSC::webAssemblyCompileStreamingInternal):
        (JSC::webAssemblyInstantiateStreamingInternal):

2018-12-15  Darin Adler  <darin@apple.com>

        Use warning-ignoring macros more consistently and simply
        https://bugs.webkit.org/show_bug.cgi?id=192743

        Reviewed by Mark Lam.

        * dfg/DFGSpeculativeJIT64.cpp: Use IGNORE_WARNINGS_BEGIN/END instead of
        IGNORE_CLANG_WARNINGS_BEGIN/END. Other callsites are using the non-clang-specific
        one for this warning, "implicit-fallthrough", and it seems there is no special
        need to use the clang-specific one here.
        * llint/LLIntData.cpp: Ditto, but here it's "missing-noreturn"."
        * tools/CodeProfiling.cpp: Ditto.

2018-12-15  Darin Adler  <darin@apple.com>

        Replace many uses of String::format with more type-safe alternatives
        https://bugs.webkit.org/show_bug.cgi?id=192742

        Reviewed by Mark Lam.

        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeCall): Use makeString.
        (Inspector::InjectedScriptBase::makeAsyncCall): Ditto.
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::getPropertyValue): Ditto.
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::enable): Ditto.
        * jsc.cpp:
        (FunctionJSCStackFunctor::operator() const): Ditto.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Use string concatenation.
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList): Ditto.

2018-12-14  Darin Adler  <darin@apple.com>

        LiteralParser has a bunch of uses of String::format with untrusted data
        https://bugs.webkit.org/show_bug.cgi?id=108883
        rdar://problem/13666409

        Reviewed by Mark Lam.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::Lexer::lex): Use makeString instead of String::format.
        (JSC::LiteralParser<CharType>::Lexer::lexStringSlow): Ditto.
        (JSC::LiteralParser<CharType>::parse): Ditto.

        * runtime/LiteralParser.h:
        (JSC::LiteralParser::getErrorMessage): Use string concatenation instead of
        String::format.

2018-12-14  Mark Lam  <mark.lam@apple.com>

        CallFrame::convertToStackOverflowFrame() needs to keep the top CodeBlock alive.
        https://bugs.webkit.org/show_bug.cgi?id=192717
        <rdar://problem/46660677>

        Reviewed by Saam Barati.

        When throwing a StackOverflowError, we convert the topCallFrame into a
        StackOverflowFrame.  Previously, we would nullify the codeBlock field in the frame
        because a StackOverflowFrame is only a sentinel and doesn't really correspond to
        any CodeBlocks.  However, this is a problem because the topCallFrame may be the
        only remaining place that references the CodeBlock that the stack overflow is
        triggered in.  The way we handle exceptions in JIT code is to return (from the
        runtime operation function throwing the exception) to the JIT code to check for
        the exception and if needed, do some clean up before jumping to the exception
        handling thunk.  As a result, we need to keep that JIT code alive, which means we
        need to keep its CodeBlock alive.  We only need to keep this CodeBlock alive until
        we've unwound (in terms of exception handling) out of it.

        We fix this issue by storing the CodeBlock to keep alive in the StackOverflowFrame
        for the GC to scan while the frame is still on the stack.

        We removed the call to convertToStackOverflowFrame() in
        lookupExceptionHandlerFromCallerFrame() because it is redundant.
        lookupExceptionHandlerFromCallerFrame() will only every be called after
        a StackOverFlowError has been thrown.  Hence, the top frame is already
        guaranteed to be a StackOverflowFrame, and there should always be a
        StackOverFlowError exception pending.  We added assertions for these
        instead.

        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::convertToStackOverflowFrame):
        * interpreter/CallFrame.h:
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::codeBlockFromCallFrameCallee):
        (JSC::CommonSlowPaths::arityCheckFor):
        * runtime/VM.h:
        (JSC::VM::exceptionForInspection const):

2018-12-14  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy of objects for operator==() methods
        <https://webkit.org/b/192712>
        <rdar://problem/46739332>

        Reviewed by Andy Estes.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        (JSC::B3::Air::(anonymous namespace)::AbstractColoringAllocator::InterferenceEdge::operator==):
        - Change argument from const to const reference to avoid a copy.

2018-12-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239153, r239154, and r239155.
        https://bugs.webkit.org/show_bug.cgi?id=192715

        Caused flaky GC-related crashes seen with layout tests
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[JSC] Optimize Object.keys by caching own keys results in
        StructureRareData"
        https://bugs.webkit.org/show_bug.cgi?id=190047
        https://trac.webkit.org/changeset/239153

        "Unreviewed, build fix after r239153"
        https://bugs.webkit.org/show_bug.cgi?id=190047
        https://trac.webkit.org/changeset/239154

        "Unreviewed, build fix after r239153, part 2"
        https://bugs.webkit.org/show_bug.cgi?id=190047
        https://trac.webkit.org/changeset/239155

2018-12-14  Keith Miller  <keith_miller@apple.com>

        Callers of JSString::getIndex should check for OOM exceptions
        https://bugs.webkit.org/show_bug.cgi?id=192709

        Reviewed by Mark Lam.

        This patch also allows Strings to OOM when the StringObject wrapper
        attempts to look up an own property on the string.

        Remove isExtensibleImpl because it's only used in one place and call
        isStructureExtensible instead.

        * runtime/JSObject.cpp:
        (JSC::JSObject::isExtensible):
        * runtime/JSObject.h:
        (JSC::JSObject::isExtensibleImpl): Deleted.
        * runtime/JSString.h:
        (JSC::JSString::getStringPropertySlot):
        * runtime/StringObject.cpp:
        (JSC::StringObject::defineOwnProperty):

2018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'
        https://bugs.webkit.org/show_bug.cgi?id=192688

        Reviewed by Ross Kirsling.

        These functions are used only in AppleWin port.

        * shell/DLLLauncherMain.cpp:
        (copyEnvironmentVariable): Moved.
        (getStringValue): Enclosed with #if !defined(WIN_CAIRO).
        (applePathFromRegistry): Ditto.
        (appleApplicationSupportDirectory): Ditto.
        (prependPath): Ditto.

2018-12-13  Dominik Infuehr  <dinfuehr@igalia.com>

        Improve GDB output for LLInt on Linux
        https://bugs.webkit.org/show_bug.cgi?id=192660

        Reviewed by Yusuke Suzuki.

        Annotate assembly code generated for LLInt with the bytecode operation. When debugging
        LLInt assembly code GDB is then able to show which bytecode instruction is implemented by
        the current assembly code. This also works for linux-perf.

        * llint/LowLevelInterpreter.cpp:
        * offlineasm/arm.rb:

2018-12-13  Mark Lam  <mark.lam@apple.com>

        Add a missing exception check.
        https://bugs.webkit.org/show_bug.cgi?id=192626
        <rdar://problem/46662163>

        Reviewed by Keith Miller.

        * runtime/ScopedArguments.h:

2018-12-13  Saam Barati  <sbarati@apple.com>

        The JSC shell should listen for memory pressure events and respond to them
        https://bugs.webkit.org/show_bug.cgi?id=192647

        Reviewed by Keith Miller.

        We want the JSC shell to behave more like the WebContent process when
        it comes to running performance tests. One way to make the shell
        more like this is to have it respond to memory pressure events in
        a similar way as the WebContent process. This makes it easier to run
        benchmarks like JetStream2 on the CLI on iOS.

        * jsc.cpp:
        (jscmain):
        * runtime/VM.cpp:
        (JSC::VM::drainMicrotasks):
        * runtime/VM.h:
        (JSC::VM::setOnEachMicrotaskTick):

2018-12-13  Mark Lam  <mark.lam@apple.com>

        Ensure that StructureFlags initialization always starts with Base::StructureFlags.
        https://bugs.webkit.org/show_bug.cgi?id=192686

        Reviewed by Keith Miller.

        This is purely a refactoring effort to make the code consistently start all
        StructureFlags initialization with Base::StructureFlags.  Previously, sometimes
        Base::StructureFlags is appended at the end, and sometimes, it is expressed using
        the name of the superclass.  This patch makes the code all consistent and easier
        to do a quick eye scan audit on to verify that no StructureFlags are forgetting
        to inherit Base::StructureFlags.

        Also added a static_assert in JSCallbackObject.h and JSBoundFunction.h.  Both of
        these implement a customHasInstance() method, and rely on ImplementsHasInstance
        being included in the StructureFlags, and conversely, ImplementsDefaultHasInstance
        has to be excluded.

        JSBoundFunction.h is the only case where a bit (ImplementsDefaultHasInstance)
        needs to be masked out of the inherited Base::StructureFlags.

        * API/JSCallbackObject.h:
        * runtime/ArrayConstructor.h:
        * runtime/ArrayIteratorPrototype.h:
        * runtime/Exception.h:
        * runtime/FunctionRareData.h:
        * runtime/InferredType.h:
        * runtime/InferredTypeTable.h:
        * runtime/InferredValue.h:
        * runtime/JSBoundFunction.h:
        * runtime/MapPrototype.h:
        * runtime/SetPrototype.h:
        * runtime/StringPrototype.h:
        * runtime/SymbolConstructor.h:

2018-12-13  Mark Lam  <mark.lam@apple.com>

        Add the JSC_traceBaselineJITExecution option for tracing baseline JIT execution.
        https://bugs.webkit.org/show_bug.cgi?id=192684

        Reviewed by Saam Barati.

        This dataLogs the bytecode execution order of baseline JIT code when the
        JSC_traceBaselineJITExecution option is true.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * runtime/Options.h:

2018-12-13  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary object copies in JavaScriptCore
        <https://webkit.org/b/192680>
        <rdar://problem/46708767>

        Reviewed by Mark Lam.

        * assembler/testmasm.cpp:
        (JSC::invoke):
        - Make MacroAssemblerCodeRef<JSEntryPtrTag> argument a const
          reference.

        * b3/testb3.cpp:
        (JSC::B3::checkDisassembly):
        - Make CString argument a const reference.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStringEquality):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        - Make JITCompiler::JumpList arguments a const reference.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::checkStructure):
        - Make RegisteredStructureSet argument a const reference.

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule): Make local auto
        variables const references.
        (Workers::report): Make String argument a const reference.
        (addOption): Make Identifier argument a const reference.
        (runJSC): Make CString loop variable a const reference.

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove DOM.BackendNodeId and associated commands/events
        https://bugs.webkit.org/show_bug.cgi?id=192478

        Reviewed by Matt Baker.

        * inspector/protocol/DOM.json:

2018-12-13  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueDiv into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186178

        Reviewed by Yusuke Suzuki.

        This patch is introducing a new node type called ValueDiv. This node
        is responsible to handle Untyped and Bigint specialization of division
        operator, while the ArithDiv variant handles Number/Boolean cases.

        BigInt specialization generates following speedup into simple
        benchmark:

                                  noSpec                 changes

        big-int-simple-div    10.6013+-0.4682    ^    8.4518+-0.0943   ^ definitely 1.2543x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupArithDiv):
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::arithNodeFlags):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueDiv):
        (JSC::DFG::SpeculativeJIT::compileArithDiv):
        * 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::compileValueDiv):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithDiv):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):

2018-12-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, build fix after r239153, part 2
        https://bugs.webkit.org/show_bug.cgi?id=190047

        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedOwnKeys const):

2018-12-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, build fix after r239153
        https://bugs.webkit.org/show_bug.cgi?id=190047

        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedOwnKeys const):

2018-12-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Optimize Object.keys by caching own keys results in StructureRareData
        https://bugs.webkit.org/show_bug.cgi?id=190047

        Reviewed by Keith Miller.

        Object.keys is one of the most frequently used function in web-tooling-benchmarks (WTB).
        Object.keys is dominant in lebab of WTB, and frequently called in babel and others.
        Since our Structure knows the shape of JSObject, we can cache the result of Object.keys
        in Structure (StructureRareData) as we cache JSPropertyNameEnumerator in StructureRareData.

        This patch caches the result of Object.keys in StructureRareData. The cached array is created
        as JSImmutableButterfly. And Object.keys creates CoW from this data. Currently, the lifetime
        strategy of this JSImmutableButterfly is the same to cached JSPropertyNameEnumerator. It is
        referenced from Structure, and collected when Structure is collected.

        This improves several benchmarks in SixSpeed.

                                        baseline                  patched

            object-assign.es5      350.1710+-3.6303     ^    226.0368+-4.7558        ^ definitely 1.5492x faster
            for-of-object.es6      269.1941+-3.3430     ^    127.9317+-2.3875        ^ definitely 2.1042x faster

        And it improves WTB lebab by 11.8%.

            Before: lebab:  6.10 runs/s
            After:  lebab:  6.82 runs/s

        * 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/DFGNode.cpp:
        (JSC::DFG::Node::convertToNewArrayBuffer):
        * dfg/DFGNode.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::compileObjectKeys):
        * 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::compileObjectKeys):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSImmutableButterfly.h:
        (JSC::JSImmutableButterfly::createSentinel):
        * runtime/ObjectConstructor.cpp:
        (JSC::ownPropertyKeys):
        * runtime/Structure.cpp:
        (JSC::Structure::canCachePropertyNameEnumerator const):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::setCachedOwnKeys):
        (JSC::Structure::cachedOwnKeys const):
        (JSC::Structure::canCacheOwnKeys const):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):
        (JSC::StructureRareData::cachedPropertyNameEnumerator const): Deleted.
        (JSC::StructureRareData::setCachedPropertyNameEnumerator): Deleted.
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedPropertyNameEnumerator const):
        (JSC::StructureRareData::setCachedPropertyNameEnumerator):
        (JSC::StructureRareData::cachedOwnKeys const):
        (JSC::StructureRareData::cachedOwnKeysConcurrently const):
        (JSC::StructureRareData::setCachedOwnKeys):
        (JSC::StructureRareData::previousID const): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2018-12-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [DFG][FTL] Add NewSymbol
        https://bugs.webkit.org/show_bug.cgi?id=192620

        Reviewed by Saam Barati.

        This patch introduces NewSymbol DFG node into DFG and FTL tiers. The main goal of this patch is not optimize
        NewSymbol code faster. Rather than that, this patch intends to offer SpecSymbol type information into DFG's
        data flow to optimize generated code in FTL backend.

        We add NewSymbol DFG node, which may take an argument. If an argument is not given, NewSymbol is for `Symbol()`.
        If an argument is given, ToString is emitted to this argument before passing it to NewSymbol. So NewSymbol node
        itself does not perform any type checks. ToString performs effects, but NewSymbol doesn't have any side observable
        effects. So we can decouple Symbol(description) call into NewSymbol(ToString(description)).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
        * 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/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewSymbol):
        * 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::compileNewSymbol):

2018-12-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [BigInt] Implement DFG/FTL typeof for BigInt
        https://bugs.webkit.org/show_bug.cgi?id=192619

        Reviewed by Keith Miller.

        This patch implements typeof for BigInt in DFG and FTL. Our DFG and FTL tiers now correctly consider about BigInt
        in the code generated for typeof.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::boolify): We add (SpecCell - SpecString) type filter for proven type since isString
        check is already performed here.
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): We use (SpecCell - SpecObject - SpecString) type filter for proven type
        since String and Object are already checked here. If we know the proven type does not include Symbol type here, we
        can omit the code for Symbol type.
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitTypeOf):

2018-12-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [BigInt] Simplify boolean context evaluation by leveraging JSString::offsetOfLength() == JSBigInt::offsetOfLength()
        https://bugs.webkit.org/show_bug.cgi?id=192615

        Reviewed by Saam Barati.

        JSString and JSBigInt have similar concept in terms of the implementation.
        Both are immutable, JSCells, and have length information. m_length is located
        just after JSCell header part, we can ensure `JSString::offsetOfLength() == JSBigInt::offsetOfLength()`,
        and it allows us to optimize the boolean context evaluation.

        This patch leverages the above information to reduce the code size for the boolean context evaluation.

        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::JSBigInt):
        (JSC::JSBigInt::offsetOfLength): Deleted.
        * runtime/JSBigInt.h:

2018-12-11  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag for CSS Typed OM
        https://bugs.webkit.org/show_bug.cgi?id=192610

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2018-12-10  Don Olmstead  <don.olmstead@sony.com>

        Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=192573

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-12-10  Mark Lam  <mark.lam@apple.com>

        PropertyAttribute needs a CustomValue bit.
        https://bugs.webkit.org/show_bug.cgi?id=191993
        <rdar://problem/46264467>

        Reviewed by Saam Barati.

        This is because GetByIdStatus needs to distinguish CustomValue properties from
        other types, and its only means of doing so is via the property's attributes.
        Previously, there's nothing in the property's attributes that can indicate that
        the property is a CustomValue.

        We fix this by doing the following:

        1. Added a PropertyAttribute::CustomValue bit.
        2. Added a PropertyAttribute::CustomAccessorOrValue convenience bit mask that is
           CustomAccessor | CustomValue.

        3. Since CustomGetterSetter properties are only set via JSObject::putDirectCustomAccessor(),
           we added a check in JSObject::putDirectCustomAccessor() to see if the attributes
           bits include PropertyAttribute::CustomAccessor.  If not, then the property
           must be a CustomValue, and we'll add the PropertyAttribute::CustomValue bit
           to the attributes bits.

           This ensures that the property attributes is sufficient to tell us if the
           property contains a CustomGetterSetter.

        4. Updated all checks for PropertyAttribute::CustomAccessor to check for
           PropertyAttribute::CustomAccessorOrValue instead if their intent is to check
           for the presence of a CustomGetterSetter as opposed to checking specifically
           for one that is used as a CustomAccessor.

           This includes all the Structure transition code that needs to capture the
           attributes change when a CustomValue has been added.

        5. Filtered out the PropertyAttribute::CustomValue bit in PropertyDescriptor.
           The fact that we're using a CustomGetterSetter as a CustomValue should remain
           invisible to the descriptor.  This is because the descriptor should describe
           a CustomValue no differently from a plain value.

        6. Added some asserts to ensure that property attributes are as expected, and to
           document some invariants.

        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByIdStatus::computeFor):
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/PropertyCondition.cpp:
        (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFor):
        * runtime/JSFunction.cpp:
        (JSC::getCalculatedDisplayName):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectCustomAccessor):
        (JSC::JSObject::putDirectNonIndexAccessor):
        (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectIndex):
        (JSC::JSObject::fillCustomGetterPropertySlot):
        (JSC::JSObject::putDirect):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::setDescriptor):
        (JSC::PropertyDescriptor::setCustomDescriptor):
        (JSC::PropertyDescriptor::setAccessorDescriptor):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::setCustomGetterSetter):

2018-12-10  Mark Lam  <mark.lam@apple.com>

        LinkBuffer::copyCompactAndLinkCode() needs to be aware of ENABLE(SEPARATED_WX_HEAP).
        https://bugs.webkit.org/show_bug.cgi?id=192569
        <rdar://problem/45615617>

        Reviewed by Saam Barati.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2018-12-10  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueMul into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186175

        Reviewed by Yusuke Suzuki.

        This patch is adding a new DFG node called ValueMul. This node is
        responsible to handle multiplication operations that can result into
        non-number values. We emit such node during DFGByteCodeParser when the
        operands are not numbers. During FixupPhase, we change this
        operation to ArithMul if we can speculate Number/Boolean operands.

        The BigInt specialization shows a small progression:

                                noSpec                changes

        big-int-simple-mul  18.8090+-1.0435  ^  17.4305+-0.2673  ^ definitely 1.0791x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupMultiplication):
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::arithNodeFlags):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileArithMul):
        * dfg/DFGSpeculativeJIT.h:
        * 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::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithMul):

2018-12-08  Mark Lam  <mark.lam@apple.com>

        Reduce size of PropertySlot and PutPropertySlot.
        https://bugs.webkit.org/show_bug.cgi?id=192526

        Reviewed by Keith Miller.

        With some minor adjustments, we can reduce the size of PropertySlot from 80 bytes
        (19 padding bytes) to 64 bytes (3 padding bytes), and PutPropertySlot from 40
        bytes (4 padding bytes) to 32 bytes (0 padding bytes but with 6 unused bits).
        These measurements are for a 64-bit build.

        * runtime/PropertySlot.h:
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):

2018-12-08  Dominik Infuehr  <dinfuehr@igalia.com>

        Record right offset with aligned wide instructions
        https://bugs.webkit.org/show_bug.cgi?id=192006

        Reviewed by Yusuke Suzuki.

        Aligning bytecode instructions inserts nops into the instruction stream.
        Emitting an instruction did not record the actual start of the instruction with
        aligned instructions, but the nop just before the actual instruction. This was
        problematic with the StaticPropertyAnalyzer that used the wrong instruction offset.

        * bytecode/InstructionStream.h:
        (JSC::InstructionStream::MutableRef::clone):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::alignWideOpcode):
        (JSC::BytecodeGenerator::emitCreateThis):
        (JSC::BytecodeGenerator::emitNewObject):
        * generator/Opcode.rb:

2018-12-07  Tadeu Zagallo  <tzagallo@apple.com>

        Align the metadata table on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=192050
        <rdar://problem/46312674>

        Reviewed by Mark Lam.

        Although certain platforms don't require the metadata to be aligned,
        values were being concurrently read and written to ValueProfiles,
        which caused crashes since these operations are not atomic on unaligned
        addresses.

        * bytecode/Opcode.cpp:
        (JSC::metadataAlignment):
        * bytecode/Opcode.h:
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::finalize):

2018-12-05  Mark Lam  <mark.lam@apple.com>

        speculationFromCell() should speculate non-Identifier strings as SpecString instead of SpecStringVar.
        https://bugs.webkit.org/show_bug.cgi?id=192441
        <rdar://problem/46480355>

        Reviewed by Saam Barati.

        This is because a regular String (non-Identifier) can be converted into an
        Identifier.  During DFG/FTL compilation, AbstractValue::checkConsistency() may
        expect a value to be of type SpecStringVar, but the mutator thread may have
        converted the string into an Identifier.  This creates a race where
        AbstractValue::checkConsistency() may fail because it sees a SpecStringIdent when
        it expects the a SpecStringVar.  

        The fix is to speculate non-Identifier strings as type SpecString which allows it
        to be SpecStringVar or SpecStringIndent.

        * bytecode/SpeculatedType.cpp:
        (JSC::speculationFromCell):

2018-12-04  Mark Lam  <mark.lam@apple.com>

        DFG's StrengthReduction phase should not reduce Construct into DirectContruct when the executable does not have constructAbility.
        https://bugs.webkit.org/show_bug.cgi?id=192386
        <rdar://problem/46445516>

        Reviewed by Saam Barati.

        This violates an invariant documented by a RELEASE_ASSERT in operationLinkDirectCall().

        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):

2018-12-04  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Support logic operations
        https://bugs.webkit.org/show_bug.cgi?id=179903

        Reviewed by Yusuke Suzuki.

        We are introducing in this patch the ToBoolean support for JSBigInt.
        With this change, we can implement the correct behavior of BigInt as
        operand of logical opertions. During JIT genertion into DFG and FTL,
        we are using JSBigInt::m_length to verify if the number is 0n or not,
        following the same approach used by JSString. This is also safe in the case
        of BigInt, because only 0n has m_length == 0.

        We are not including BigInt speculation into Branch nodes in this
        patch, but the plan is to implement it in further patches.

        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::isZero const):
        (JSC::JSBigInt::offsetOfLength):
        (JSC::JSBigInt::toBoolean const):
        (JSC::JSBigInt::isZero): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::toBoolean const):
        (JSC::JSCell::pureToBoolean const):

2018-12-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: tests should support async operations
        https://bugs.webkit.org/show_bug.cgi?id=192171
        <rdar://problem/46423562>

        Reviewed by Joseph Pecoraro.

        Add `awaitPromise` command for executing a callback when a Promise gets settled.

        Drive-by: allow `wasThrown` to be optional, instead of expecting it to always have a value.

        * inspector/protocol/Runtime.json:

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype.awaitPromise): Added.

        * inspector/InjectedScript.h:
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::evaluate):
        (Inspector::InjectedScript::awaitPromise): Added.
        (Inspector::InjectedScript::callFunctionOn):
        (Inspector::InjectedScript::evaluateOnCallFrame):

        * inspector/InjectedScriptBase.h:
        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeEvalCall):
        (Inspector::InjectedScriptBase::makeAsyncCall): Added.
        (Inspector::InjcetedScriptBase::checkCallResult): Added.
        (Inspector::InjcetedScriptBase::checkAsyncCallResult): Added.

        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::evaluate):
        (Inspector::InspectorRuntimeAgent::awaitPromise):
        (Inspector::InspectorRuntimeAgent::callFunctionOn):

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame):

2018-12-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238833.

        Breaks macOS and iOS debug builds.

        Reverted changeset:

        "[ESNext][BigInt] Support logic operations"
        https://bugs.webkit.org/show_bug.cgi?id=179903
        https://trac.webkit.org/changeset/238833

2018-12-03  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Support logic operations
        https://bugs.webkit.org/show_bug.cgi?id=179903

        Reviewed by Yusuke Suzuki.

        We are introducing in this patch the ToBoolean support for JSBigInt.
        With this change, we can implement the correct behavior of BigInt as
        operand of logical opertions. During JIT genertion into DFG and FTL,
        we are using JSBigInt::m_length to verify if the number is 0n or not,
        following the same approach used by JSString. This is also safe in the case
        of BigInt, because only 0n has m_length == 0.

        We are not including BigInt speculation into Branch nodes in this
        patch, but the plan is to implement it in further patches.

        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::isZero const):
        (JSC::JSBigInt::offsetOfLength):
        (JSC::JSBigInt::toBoolean const):
        (JSC::JSBigInt::isZero): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::toBoolean const):
        (JSC::JSCell::pureToBoolean const):

2018-12-03  Keith Rollin  <krollin@apple.com>

        Add .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192082
        <rdar://problem/46312533>

        Reviewed by Brent Fulgham.

        Add .xcfilelist files for Generate Derived Sources and Generate
        Unified Sources build phases in Xcode. These are just being staged for
        now; they'll be added to the Xcode projects later.

        * DerivedSources-input.xcfilelist: Added.
        * DerivedSources-output.xcfilelist: Added.
        * UnifiedSources-input.xcfilelist: Added.
        * UnifiedSources-output.xcfilelist: Added.

2018-12-03  Mark Lam  <mark.lam@apple.com>

        Fix the bytecode code generator scripts to pretty print BytecodeStructs.h and BytecodeIndices.h.
        https://bugs.webkit.org/show_bug.cgi?id=192271

        Reviewed by Keith Miller.

        This makes the generated code style compliant and human readable.

        * generator/Argument.rb:
        * generator/DSL.rb:
        * generator/Fits.rb:
        * generator/Metadata.rb:
        * generator/Opcode.rb:

2018-12-02  Zalan Bujtas  <zalan@apple.com>

        Add a runtime feature flag for LayoutFormattingContext.
        https://bugs.webkit.org/show_bug.cgi?id=192280

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-12-02  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement support for "<<" and ">>"
        https://bugs.webkit.org/show_bug.cgi?id=186233

        Reviewed by Yusuke Suzuki.

        This patch is introducing the support for BigInt into lshift and
        rshift into LLint and Baseline layers.

        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createWithLength):
        (JSC::JSBigInt::leftShift):
        (JSC::JSBigInt::signedRightShift):
        (JSC::JSBigInt::leftShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByMaximum):
        (JSC::JSBigInt::toShiftAmount):
        * runtime/JSBigInt.h:

2018-12-01  Simon Fraser  <simon.fraser@apple.com>

        Heap.h refers to the non-existent HeapStatistics
        https://bugs.webkit.org/show_bug.cgi?id=187882

        Reviewed by Keith Miller.
        
        Just remove the "friend class HeapStatistics".

        * heap/Heap.h:

2018-11-29  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Keep TypeMaybeBigInt small
        https://bugs.webkit.org/show_bug.cgi?id=192203

        Reviewed by Saam Barati.

        As BigInt is being implemented, more and more bytecodes start returning BigInt.
        It means that ResultType of these bytecodes include TypeMaybeBigInt. However,
        TypeMaybeBigInt was large number 0x20, leading to wide instruction since ResultType
        easily becomes larger than 32 (e.g. TypeInt32 | TypeMaybeBigInt == 33).

        This patch sorts the numbers of TypeMaybeXXX based on the frequency of appearance in
        the code.

        * parser/ResultType.h:

2018-11-30  Dean Jackson  <dino@apple.com>

        Try to fix Windows build by using strcmp instead of strcasecmp.

        * jsc.cpp:
        (isMJSFile):

2018-11-30  Mark Lam  <mark.lam@apple.com>

        Fix the bytecode code generator scripts to pretty print Bytecodes.h.
        https://bugs.webkit.org/show_bug.cgi?id=192258

        Reviewed by Keith Miller.

        This makes Bytecodes.h more human readable.

        * generator/DSL.rb:
        * generator/Section.rb:

2018-11-30  Mark Lam  <mark.lam@apple.com>

        Add the generator directory to the Xcode project.
        https://bugs.webkit.org/show_bug.cgi?id=192252

        Reviewed by Michael Saboff.

        This is so that we can work with these bytecode class generator files easily in Xcode.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-11-30  Don Olmstead  <don.olmstead@sony.com>

        Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=192197

        Reviewed by Jiewen Tan.

        * Configurations/FeatureDefines.xcconfig:

2018-11-30  Dean Jackson  <dino@apple.com>

        Add first-class support for .mjs files in jsc binary
        https://bugs.webkit.org/show_bug.cgi?id=192190
        <rdar://problem/46375715>

        Reviewed by Keith Miller.

        Treat files with a .mjs extension as a module, regardless
        of whether or not the --module-file argument was given.

        * jsc.cpp:
        (printUsageStatement): Update usage.
        (isMJSFile): Helper to look for .mjs extensions.
        (CommandLine::parseArguments): Pick the appropriate script type.

2018-11-30  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Implement ValueBitXor into DFG
        https://bugs.webkit.org/show_bug.cgi?id=190264

        Reviewed by Yusuke Suzuki.

        This patch is splitting the BitXor node into ArithBitXor and
        ValueBitXor. This is necessary due the introduction of
        BigInt, since BitXor operations now can result into Int32 or BigInt.
        In such case, we use ArithBitXor when operands are Int and fallback to
        ValueBitXor when operands are anything else. In the case of
        ValueBitXor, we speculate BigInt when op1 and op2 are predicted as
        BigInt as well. BigInt specialization consist into call
        `operationBigIntBitXor` function, that calls JSBigInt::bitXor.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::arithProfileForPC):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * 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::compileValueBitwiseOp):
        (JSC::DFG::SpeculativeJIT::compileBitwiseOp):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::bitOp):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitXor):
        (JSC::FTL::DFG::LowerDFGToB3::compileBitXor): Deleted.
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitxor):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2018-11-29  Justin Michaud  <justin_michaud@apple.com>

        CSS Painting API should pass 'this' correctly to paint callback, and repaint when properties change.
        https://bugs.webkit.org/show_bug.cgi?id=191443

        Reviewed by Dean Jackson.

        Export the simpler construct() method for use in WebCore.

        * runtime/ConstructData.h:

2018-11-28  Mark Lam  <mark.lam@apple.com>

        ENABLE_SEPARATED_WX_HEAP needs to be defined in Platform.h.
        https://bugs.webkit.org/show_bug.cgi?id=192110
        <rdar://problem/46317746>

        Reviewed by Saam Barati.

        * config.h:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=192031
        <rdar://problem/46286816>

        Reviewed by Alex Christensen.

        The Generate Derived Sources and Generate Unified Sources build phases
        in Xcode need to have their inputs and outputs specified. This
        specification will come in the form of .xcfilelist files that will be
        attached to these build phases. There is one .xcfilelist file that
        lists the input file and one that lists the output files. As part of
        this work, the various generate-{derived,unified}-sources scripts that
        are executed in these Generate build phases are modified to help in
        the creation of these .xcfilelist files. In particular, they can now
        be invoked with command-line parameters. These parameters are then
        used to alter the normal execution of these scripts, causing them to
        produce the .xcfilelist files as opposed to actually generating the
        files that are listed in those files.

        * Scripts/generate-derived-sources.sh:
        * Scripts/generate-unified-sources.sh:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Revert print_all_generated_files work in r238008; tighten up target specifications
        https://bugs.webkit.org/show_bug.cgi?id=192025
        <rdar://problem/46284301>

        Reviewed by Alex Christensen.

        In r238008, I added a facility for DerivedSources.make makefiles to
        print out the list of files that they generate. This output was used
        in the generation of .xcfilelist files used to specify the output of
        the associated Generate Derived Sources build phases in Xcode. This
        approach worked, but it meant that people would need to follow a
        specific convention to keep this mechanism working.

        Instead of continuing this approach, I'm going to implement a new
        facility based on the output of `make` when passed the -d flag (which
        prints dependency information). This new mechanism is completely
        automatic and doesn't need maintainers to follow a convention. To that
        end, remove most of the work performed in r238008 that supports the
        print_all_generated_files target.

        At the same time, it's important for the sets of targets and their
        dependencies to be complete and correct. Therefore, also include
        changes to bring those up-to-date. As part of that, you'll see
        prevalent use of a particular technique. Here's an example:

            BYTECODE_FILES = \
                Bytecodes.h \
                BytecodeIndices.h \
                BytecodeStructs.h \
                InitBytecodes.asm \
            #
            BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))

            all : $(BYTECODE_FILES)

            $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
                ...

        These lines indicate a set of generated files (those specified in
        BYTECODE_FILES). These files are generated by the BytecodeList.rb
        tool. But, as opposed to the normal rule where a single foo.output is
        generated by foo.input plus some additional dependencies, this rule
        produces multiple output files from a tool whose connection to the
        output files is not immediately clear. A special approach is needed
        where a single rule produces multiple output files. The normal way to
        implement this is to use an .INTERMEDIATE target. However, we used
        this approach in the past and ran into a problem with it, addressing
        it with an alternate approach in r210507. The above example shows this
        approach. The .'s in the list of target files are replaced with %'s,
        and the result is used as the left side of the dependency rule.

        * DerivedSources.make:

2018-11-28  Keith Rollin  <krollin@apple.com>

        Remove Postprocess Headers dependencies
        https://bugs.webkit.org/show_bug.cgi?id=192023
        <rdar://problem/46283377>

        Reviewed by Mark Lam.

        JavaScriptCore's Xcode Postprocess Headers build phase used to have a
        dependency on a specific handful of files. In r234227, the script used
        in this phase (postprocess-headers.sh) was completely rewritten to
        operate on *all* files in JSC's Public and Private headers directories
        instead of just this handful. This rewrite makes the previous
        dependency specification insufficient, leading to incorrect
        incremental builds if the right files weren't touched. Address this by
        removing the dependencies completely. This will cause
        postprocess-headers.sh to always be executed, even when none of its
        files are touch. Running this script all the time is OK, since it has
        built-in protections against unnecessarily touching files that haven't
        changed.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
        https://bugs.webkit.org/show_bug.cgi?id=192055
        <rdar://problem/46288783>

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2018-11-27  Saam barati  <sbarati@apple.com>

        r238510 broke scopes of size zero
        https://bugs.webkit.org/show_bug.cgi?id=192033
        <rdar://problem/46281734>

        Reviewed by Keith Miller.

        In r238510, I wrote the loop like this: 
        `for (ScopeOffset offset { 0 }; offset <= symbolTable->maxScopeOffset(); offset += 1)`
        
        This breaks for scopes of size zero because maxScopeOffset() will be UINT_MAX.
        
        This patch fixes this by writing the loop as:
        `for (unsigned offset = 0; offset < symbolTable->scopeSize(); ++offset)`

        * dfg/DFGObjectAllocationSinkingPhase.cpp:

2018-11-27  Mark Lam  <mark.lam@apple.com>

        ASSERTION FAILED: capacity && isPageAligned(capacity) in JSC::CLoopStack::CLoopStack(JSC::VM&).
        https://bugs.webkit.org/show_bug.cgi?id=192018

        Reviewed by Saam Barati.

        This assertion failed because the regress-191579.js test was specifying
        --maxPerThreadStackUsage=400000 i.e. it was running with a stack size that is not
        page aligned.  Given that the user can specify any arbitrary stack size, and the
        CLoop stack expects to be page aligned, we'll just round up the requested capacity
        to the next page alignment.

        * interpreter/CLoopStack.cpp:
        (JSC::CLoopStack::CLoopStack):

2018-11-27  Mark Lam  <mark.lam@apple.com>

        [Re-landing] NaNs read from Wasm code needs to be be purified.
        https://bugs.webkit.org/show_bug.cgi?id=191056
        <rdar://problem/45660341>

        Reviewed by Filip Pizlo.

        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2018-11-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add support for forcing color scheme appearance in DOM tree.
        https://bugs.webkit.org/show_bug.cgi?id=191820
        rdar://problem/46153172

        Reviewed by Devin Rousso.

        * inspector/protocol/Page.json: Added setForcedAppearance.
        Also added the defaultAppearanceDidChange event and Appearance enum.

2018-11-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238509.

        Causes JSC tests to fail on iOS.

        Reverted changeset:

        "NaNs read from Wasm code needs to be be purified."
        https://bugs.webkit.org/show_bug.cgi?id=191056
        https://trac.webkit.org/changeset/238509

2018-11-27  Mark Lam  <mark.lam@apple.com>

        Introducing a ENABLE_SEPARATED_WX_HEAP macro.
        https://bugs.webkit.org/show_bug.cgi?id=192013
        <rdar://problem/45494310>

        Reviewed by Keith Miller.

        This makes the code a little more readable.

        I put the definition of ENABLE_SEPARATED_WX_HEAP in JSC's config.h instead of
        Platform.h because ENABLE_SEPARATED_WX_HEAP is only needed inside JSC.  Also,
        ENABLE_SEPARATED_WX_HEAP depends on ENABLE(FAST_JIT_PERMISSIONS), which is only
        defined for JSC.

        * config.h:
        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2018-11-26  Caio Lima  <ticaiolima@gmail.com>

        Re-introduce op_bitnot
        https://bugs.webkit.org/show_bug.cgi?id=190923

        Reviewed by Yusuke Suzuki.

        With the introduction of BigInt as a new type, we can't emit bitwise
        not as `x ^ -1` anymore, because this is incompatible with the new type.
        Based on that, this Patch is adding `op_bitnot` as a new operation
        into LLInt, as well as introducing ArithBitNot node into DFG to support
        JIT compilation of such opcode. We will use the ValueProfile of this
        intruction in the future to generate better code when its operand
        is not Int32.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::not32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::not32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::not32):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitUnaryOp):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::UnaryPlusNode::emitBytecode):
        (JSC::BitwiseNotNode::emitBytecode): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * 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::compileBitwiseNot):
        * 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::compileArithBitNot):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitnot):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/cloop.rb:
        * parser/NodeConstructors.h:
        (JSC::BitwiseNotNode::BitwiseNotNode):
        * parser/Nodes.h:
        * parser/ResultType.h:
        (JSC::ResultType::bigIntOrInt32Type):
        (JSC::ResultType::forBitOp):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:

2018-11-26  Saam barati  <sbarati@apple.com>

        InPlaceAbstractState::endBasicBlock rule for SetLocal should filter the value based on the flush format
        https://bugs.webkit.org/show_bug.cgi?id=191956
        <rdar://problem/45665806>

        Reviewed by Yusuke Suzuki.

        This is a similar bug to what Keith fixed in r232134. The issue is if we have
        a program like this:
        
        a: JSConstant(jsNumber(0))
        b: SetLocal(Int32:@a, loc1, FlushedInt32)
        c: ArrayifyToStructure(Cell:@a)
        d: Jump(...)
        
        At the point in the program right after the Jump, a GetLocal for loc1
        would return whatever the ArrayifyToStructure resulting type is. This breaks
        the invariant that a GetLocal must return a value that is a subtype of its
        FlushFormat. InPlaceAbstractState::endBasicBlock will know if a SetLocal is
        the final node touching a local slot. If so, it'll see if any nodes later
        in the block may have refined the type of the value stored in that slot. If
        so, endBasicBlock() further refines the type to ensure that any GetLocals
        loading from the same slot will result in having this more refined type.
        However, we must ensure that this logic only considers types within the
        hierarchy of the variable access data's FlushFormat, otherwise, we may
        break the invariant that a GetLocal's type is a subtype of its FlushFormat.

        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):

2018-11-26  Saam barati  <sbarati@apple.com>

        Object allocation sinking phase needs to iterate each scope offset instead of just iterating the symbol table's hashmap when handling an activation
        https://bugs.webkit.org/show_bug.cgi?id=191958
        <rdar://problem/46221877>

        Reviewed by Yusuke Suzuki.

        There may be more entries in an activation than unique variables
        in a symbol table's hashmap. For example, if you have two parameters
        to a function, and they both are the same name, and the function
        uses eval, we'll end up with two scope slots, but only a single
        entry in the hashmap in the symbol table. Object allocation sinking
        phase was previously iterating over the hashmap, assuming these
        values were equivalent. This is wrong in the above case. Instead,
        we need to iterate over each scope offset.

        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * runtime/GenericOffset.h:
        (JSC::GenericOffset::operator+=):
        (JSC::GenericOffset::operator-=):

2018-11-26  Mark Lam  <mark.lam@apple.com>

        NaNs read from Wasm code needs to be be purified.
        https://bugs.webkit.org/show_bug.cgi?id=191056
        <rdar://problem/45660341>

        Reviewed by Filip Pizlo.

        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2018-11-26  Tadeu Zagallo  <tzagallo@apple.com>

        ASSERTION FAILED: m_outOfLineJumpTargets.contains(bytecodeOffset)
        https://bugs.webkit.org/show_bug.cgi?id=191716
        <rdar://problem/45723878>

        Reviewed by Saam Barati.

        After https://bugs.webkit.org/show_bug.cgi?id=187373, when updating
        jump targets during generatorification, we only stored the new jump
        target when it changed. However, the out-of-line jump targets are
        cleared at the beginning of the pass, so we need to store it
        unconditionally.

        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::extractStoredJumpTargetsForInstruction):
        (JSC::updateStoredJumpTargetsForInstruction):

2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable drag and drop support for iOSMac
        https://bugs.webkit.org/show_bug.cgi?id=191818
        <rdar://problem/43907454>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2018-11-22  Mark Lam  <mark.lam@apple.com>

        Make the jsc shell's dumpException() more robust against long exception strings.
        https://bugs.webkit.org/show_bug.cgi?id=191910
        <rdar://problem/46212980>

        Reviewed by Michael Saboff.

        This only affects the dumping of the exception string in the jsc shell due to
        unhandled exceptions or exceptions at shell boot time before any JS code is
        running.

        * jsc.cpp:
        (dumpException):

2018-11-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Drop ARM_TRADITIONAL support in LLInt, baseline JIT, and DFG
        https://bugs.webkit.org/show_bug.cgi?id=191675

        Reviewed by Mark Lam.

        We no longer maintain ARM_TRADITIONAL LLInt and JIT in JSC. This architecture will use
        CLoop instead. This patch removes ARM_TRADITIONAL support in LLInt and JIT.

        Discussed in https://lists.webkit.org/pipermail/webkit-dev/2018-October/030220.html.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/ARMAssembler.cpp: Removed.
        * assembler/ARMAssembler.h: Removed.
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::linkCode):
        (JSC::LinkBuffer::dumpCode):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::patchableBranch32):
        * assembler/MacroAssemblerARM.cpp: Removed.
        * assembler/MacroAssemblerARM.h: Removed.
        * assembler/PerfLog.cpp:
        * assembler/PerfLog.h:
        * assembler/ProbeContext.h:
        (JSC::Probe::CPUState::pc):
        (JSC::Probe::CPUState::fp):
        (JSC::Probe::CPUState::sp):
        * assembler/testmasm.cpp:
        (JSC::isPC):
        (JSC::testProbeModifiesStackPointer):
        (JSC::testProbeModifiesStackValues):
        * bytecode/InlineAccess.h:
        (JSC::InlineAccess::sizeForPropertyAccess):
        (JSC::InlineAccess::sizeForPropertyReplace):
        (JSC::InlineAccess::sizeForLengthAccess):
        * dfg/DFGSpeculativeJIT.h:
        * disassembler/CapstoneDisassembler.cpp:
        (JSC::tryToDisassemble):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::debugCall):
        * jit/AssemblyHelpers.h:
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsImpl):
        (JSC::CCallHelpers::prepareForTailCallSlow):
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/HostCallReturnValue.cpp:
        * jit/JITMathIC.h:
        (JSC::isProfileEmpty):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::reservedHardwareRegisters):
        (JSC::RegisterSet::calleeSaveRegisters):
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        (JSC::RegisterSet::dfgCalleeSaveRegisters):
        * jit/Repatch.cpp:
        (JSC::forceICFailure):
        * jit/ThunkGenerators.cpp:
        (JSC::nativeForGenerator):
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * offlineasm/arm.rb:
        * offlineasm/backends.rb:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateEnter):
        (JSC::Yarr::YarrGenerator::generateReturn):

2018-11-21  Saam barati  <sbarati@apple.com>

        DFGSpeculativeJIT should not &= exitOK with mayExit(node)
        https://bugs.webkit.org/show_bug.cgi?id=191897
        <rdar://problem/45871998>

        Reviewed by Mark Lam.

        exitOK is a statement about it being legal to exit. mayExit() is about being
        conservative and returning false only if an OSR exit *could never* happen.
        mayExit() tries to be as smart as possible to see if it can return false.
        It can't return false if a runtime exit *could* happen. However, there is
        code in the compiler where mayExit() returns false (because it uses data
        generated from AI about type checks being proved), but the code we emit in the
        compiler backend unconditionally generates an OSR exit, even if that exit may
        never execute. For example, let's say we have this IR:
        
        SomeNode(Boolean:@input)
        
        And we always emit code like this as a way of emitting a boolean type check:
        
        jump L1 if input == true
        jump L1 if input == false
        emit an OSR exit
        
        In such a program, when we generate the above OSR exit, in a validationEnabled()
        build, and if @input is proved to be a boolean, we'll end up crashing because we
        have the bogus assertion saying !exitOK. This is one reason why things are cleaner
        if we don't conflate mayExit() with exitOK.

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

2018-11-21  Saam barati  <sbarati@apple.com>

        Fix assertion in KnownCellUse inside SpeculativeJIT::speculate
        https://bugs.webkit.org/show_bug.cgi?id=191895
        <rdar://problem/46167406>

        Reviewed by Mark Lam.

        We were asserting that the input edge should have type SpecCell but it should
        really be SpecCellCheck since the type filter for KnownCellUse is SpecCellCheck.
        
        This patch cleans up that assertion code by joining a bunch of cases into a
        single function call which grabs the type filter for the edge UseKind and
        asserts that the incoming edge meets the type filter criteria.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculate):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::speculate):

2018-11-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Use ProtoCallFrame::numberOfRegisters instead of raw number `4`
        https://bugs.webkit.org/show_bug.cgi?id=191877

        Reviewed by Sam Weinig.

        Instead of hard-coding `4` into LowLevelInterpreter, use ProtoCallFrame::numberOfRegisters.

        * interpreter/ProtoCallFrame.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2018-11-21  Mark Lam  <mark.lam@apple.com>

        Creating a wasm memory that is bigger than the ArrayBuffer limit but smaller than the spec limit should throw OOME not RangeError.
        https://bugs.webkit.org/show_bug.cgi?id=191776
        <rdar://problem/46152851>

        Reviewed by Saam Barati.

        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::tryCreate):
        - return nullptr if the requested bytes exceed MAX_ARRAY_BUFFER_SIZE.
          The clients will already do a null check and throw an OutOfMemoryError if needed.
        (JSC::Wasm::Memory::grow):
        - throw OOME if newPageCount.bytes() > MAX_ARRAY_BUFFER_SIZE.
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        - throw OOME if newPageCount.bytes() > MAX_ARRAY_BUFFER_SIZE.

2018-11-21  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] JSBigInt::createWithLength should throw when length is greater than JSBigInt::maxLength
        https://bugs.webkit.org/show_bug.cgi?id=190836

        Reviewed by Saam Barati and Yusuke Suzuki.

        In this patch we are creating a new method called `JSBigInt::createWithLengthUnchecked`
        where we allocate a BigInt trusting the length received as argument.
        With this additional method, we now check if length passed to
        `JSBigInt::tryCreateWithLength` is not greater than JSBigInt::maxLength.
        When the length is greater than JSBigInt::maxLength, we then throw OOM
        exception.
        This required us to change the interface of some JSBigInt operations to
        receive `ExecState*` instead of `VM&`. We changed only operations that
        can throw because of OOM.
        We beleive that this approach of throwing instead of finishing the
        execution abruptly is better because JS programs can catch such
        exception and handle this issue properly.

        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createZero):
        (JSC::JSBigInt::tryCreateWithLength):
        (JSC::JSBigInt::createWithLengthUnchecked):
        (JSC::JSBigInt::createFrom):
        (JSC::JSBigInt::multiply):
        (JSC::JSBigInt::divide):
        (JSC::JSBigInt::copy):
        (JSC::JSBigInt::unaryMinus):
        (JSC::JSBigInt::remainder):
        (JSC::JSBigInt::add):
        (JSC::JSBigInt::sub):
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::bitwiseOr):
        (JSC::JSBigInt::bitwiseXor):
        (JSC::JSBigInt::absoluteAdd):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::absoluteDivWithDigitDivisor):
        (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
        (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAddOne):
        (JSC::JSBigInt::absoluteSubOne):
        (JSC::JSBigInt::toStringGeneric):
        (JSC::JSBigInt::rightTrim):
        (JSC::JSBigInt::allocateFor):
        (JSC::JSBigInt::createWithLength): Deleted.
        * runtime/JSBigInt.h:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsSub):
        (JSC::jsMul):

2018-11-20  Mark Lam  <mark.lam@apple.com>

        Remove invalid assertion in VMTraps::SignalSender's SignalAction.
        https://bugs.webkit.org/show_bug.cgi?id=191856
        <rdar://problem/46089992>

        Reviewed by Yusuke Suzuki.

        The ASSERT(vm.traps().needTrapHandling()) assertion in SignalSender's SigAction
        function is invalid because we can't be sure that the trap has been handled yet
        by the time the trap fires.  This is because the main thread may also check traps
        (in LLInt, baseline JIT and VM runtime code).  There's a race to handle the trap.
        Hence, the SigAction cannot assume that the trap still needs handling by the time
        it is executed.  This patch removed the invalid assertion.

        Also renamed m_trapSet to m_condition because it is a AutomaticThreadCondition,
        and all the ways it is used is as a condvar.  The m_trapSet name doesn't seem
        appropriate nor meaningful.

        * runtime/VMTraps.cpp:
        (JSC::VMTraps::tryInstallTrapBreakpoints):
        - Added a !needTrapHandling() check as an optimization: there's no need to install
          VMTrap breakpoints if someone already beat us to handling the trap (remember,
          the main thread is racing against the VMTraps signalling thread to handle the
          trap too).  We only need to install the VMTraps breakpoints if we need DFG/FTL
          compiled code to deopt so that they can check and handle pending traps.  If the
          trap has already been handled, it's better to not deopt any DFG/FTL functions.

        (JSC::VMTraps::willDestroyVM):
        (JSC::VMTraps::fireTrap):
        (JSC::VMTraps::VMTraps):
        * runtime/VMTraps.h:

2018-11-21  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable JIT on ARM/Linux
        https://bugs.webkit.org/show_bug.cgi?id=191548

        Reviewed by Yusuke Suzuki.

        Enable JIT by default on ARMv7/Linux after it was disabled with
        recent bytcode format change.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getICStatusMap):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::metadata):
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::computeFor):
        * bytecode/Instruction.h:
        (JSC::Instruction::cast):
        * bytecode/MetadataTable.h:
        (JSC::MetadataTable::forEach):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFor):
        (JSC::PutByIdStatus::hasExitSite): Deleted.
        * bytecode/PutByIdStatus.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * generator/Argument.rb:
        * generator/Opcode.rb:
        * jit/GPRInfo.h:
        * jit/JIT.h:
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_unsigned):
        (JSC::JIT::emit_op_inc):
        (JSC::JIT::emit_op_dec):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_tail_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_forward_arguments):
        (JSC::JIT::emitSlow_op_construct_varargs):
        (JSC::JIT::emitSlow_op_construct):
        (JSC::JIT::emit_op_call):
        (JSC::JIT::emit_op_tail_call):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_call_varargs):
        (JSC::JIT::emit_op_tail_call_varargs):
        (JSC::JIT::emit_op_tail_call_forward_arguments):
        (JSC::JIT::emit_op_construct_varargs):
        (JSC::JIT::emit_op_construct):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::compileSetupVarargsFrame): Deleted.
        * jit/JITInlines.h:
        (JSC::JIT::updateTopCallFrame):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emitSlow_op_loop_hint):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_instanceof_custom):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_is_empty):
        (JSC::JIT::emit_op_is_undefined):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_cell_with_type):
        (JSC::JIT::emit_op_is_object):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_jstricteq):
        (JSC::JIT::emit_op_jnstricteq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_string):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_identity_with_profile):
        (JSC::JIT::emit_op_get_parent_scope):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_get_scope):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_indexed_property):
        (JSC::JIT::emitSlow_op_has_indexed_property):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitGetByValWithCachedId):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val_direct):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_put_to_arguments):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::vmCalleeSaveRegisters):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/SamplingProfiler.cpp:
        (JSC::tryGetBytecodeIndex):

2018-11-20  Saam barati  <sbarati@apple.com>

        Merging an IC variant may lead to the IC status containing overlapping structure sets
        https://bugs.webkit.org/show_bug.cgi?id=191869
        <rdar://problem/45403453>

        Reviewed by Mark Lam.

        When merging two IC variant lists, we may end up in a world where we have
        overlapping structure sets. We defend against this when we append a new
        variant, but we should also defend against it once we merge in a new variant.
        
        Consider this case with MultiPutByOffset, where we merge two PutByIdStatuses
        together, P1 and P2.
        
        Let's consider these structures:
        s1 = {}
        s2 = {p: 0}
        s3 = {p: 0, p2: 1}
        
        P1 contains these variants:
        Transition: [s1 => s2]
        Replace: [s2, s3]
        
        P2 contains:
        Replace: [s2]
        
        Because of the ordering of the variants, we may end up combining
        P2's replace into P1's transition, forming this new list:
        Transition: [(s1, s2) => s2]
        Replace: [s2, s3]
        
        Obviously the ideal thing here is to have some ordering when we merge
        in variants to choose the most ideal option. It'd be ideal for P2's
        Replace to be merged into P1's replace.
        
        If we notice that this is super important, we can implement some kind
        of ordering. None of our tests (until this patch) stress this. This patch
        just makes it so we defend against this crazy scenario by falling back
        to the slow path gracefully. This prevents us from emitting invalid
        IR in FTL->B3 lowering by creating a switch with two case labels being
        identical values.

        * bytecode/ICStatusUtils.h:
        (JSC::appendICStatusVariant):

2018-11-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=191626
        <rdar://problem/46161064>

        Unreviewed adding comment for my change r238366.

        * runtime/Structure.h: Added a comment for Structure::create.

2018-11-19  Mark Lam  <mark.lam@apple.com>

        globalFuncImportModule() should return a promise when it clears exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=191792
        <rdar://problem/46090763>

        Reviewed by Michael Saboff.

        If we're clearing the exceptions in a CatchScope, then it means that we've handled
        the exception, and is able to proceed in a normal manner.  Hence, we should not
        return the empty JSValue in this case: instead, we should return a Promise as
        expected by import's API.

        The only time when we can't return a promise is when we fail to create a Promise.
        In that case, we should be propagating the exception.

        Hence, globalFuncImportModule() contains a ThrowScope (for propagating the
        exception that arises from failure to create the Promise) wrapping a CatchScope
        (for catching any exception that arises from failure to execute the import).

        Also fixed similar issues, and some exception check issues in JSModuleLoader and
        the jsc shell.

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderFetch):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::loadAndEvaluateModule):
        (JSC::JSModuleLoader::loadModule):
        (JSC::JSModuleLoader::requestImportModule):
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::moduleLoaderParseModule):
        (JSC::moduleLoaderResolveSync):

2018-11-19  Alex Christensen  <achristensen@webkit.org>

        Add SPI to disable JIT in a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=191822
        <rdar://problem/28119360>

        Reviewed by Geoffrey Garen.

        * jit/ExecutableAllocator.cpp:
        (JSC::jitDisabled):
        (JSC::allowJIT):
        (JSC::ExecutableAllocator::setJITEnabled):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::setJITEnabled):

2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [MSVC] X86Assembler.h(108): error C2666: 'WebCore::operator -': 7 overloads have similar conversions
        https://bugs.webkit.org/show_bug.cgi?id=189467
        <rdar://problem/44290945>

        Reviewed by Mark Lam.

        This issue has happened several times. And, it seems that it will
        take more time for Microsoft to fix the MSVC bug. We need a
        effective workaround not to repeat this issue until they fix MSVC.

        Remove ": int8_t" of RegisterID only for COMPILER(MSVC).

        * assembler/X86Assembler.h: Added JSC_X86_ASM_REGISTER_ID_ENUM_BASE_TYPE macro.

2018-11-19  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [WebAssembly] I64 arguments / return value check should be moved from callWebAssemblyFunction to JSToWasm wrapper
        https://bugs.webkit.org/show_bug.cgi?id=190512

        Reviewed by Keith Miller.

        This patch moves I64 arguments / return value check from callWebAssemblyFunction to JSToWasm wrapper. Since this
        check can be done when compiling the function, we should encode the result into the generated wrapper instead of
        checking every time we call callWebAssemblyFunction. This change is also one of the steps removing callWebAssemblyFunction
        entirely.

        * wasm/WasmExceptionType.h:
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::callWebAssemblyWrapperFunction):

2018-11-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Consider removing double load for accessing the instructions from LLInt
        https://bugs.webkit.org/show_bug.cgi?id=190932

        Reviewed by Mark Lam.

        Changing InstructionStream to RefCountedArray like structure involves so much changes
        including BytecodeGraph, PreciseJumpTargets etc. Instead, CodeBlock simply hold a raw
        pointer to the InstructionStream's data. Since InstructionStream is not changed
        anymore, this pointer is valid while CodeBlock is live.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        * bytecode/InstructionStream.h:
        (JSC::InstructionStream::rawPointer const):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2018-11-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=191626

        Reviewed by Yusuke Suzuki.

        JSC::Structure::create is used everywhere. It should be defined in
        Structure.h, not in StructureInlines.h.

        * runtime/Structure.h:
        (JSC::Structure::create): Moved.
        * runtime/StructureInlines.h: Moved JSC::Structure::create.

2018-11-18  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, rolling in the rest of r237254
        https://bugs.webkit.org/show_bug.cgi?id=190340

        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        (JSC::JSTextPosition::JSTextPosition):
        (JSC::JSTokenLocation::JSTokenLocation): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):

2018-11-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: add button to show system certificate dialog
        https://bugs.webkit.org/show_bug.cgi?id=191458
        <rdar://problem/45977019>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Network.json:
        Add `getSerializedCertificate` command.

2018-11-17  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix build with disabled DFG/FTL
        https://bugs.webkit.org/show_bug.cgi?id=191256

        Reviewed by Yusuke Suzuki.

        Fix compilation errors and warnings with both DFG and FTL
        disabled at compile-time.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getICStatusMap):
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::computeFor):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFor):
        (JSC::PutByIdStatus::hasExitSite): Deleted.
        * bytecode/PutByIdStatus.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Local Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191740
        <rdar://problem/45470897>

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendChannel.h:
        Expose EnumTraits for ConnectionType for WebKit IPC messages.

2018-11-16  Filip Pizlo  <fpizlo@apple.com>

        All users of ArrayBuffer should agree on the same max size
        https://bugs.webkit.org/show_bug.cgi?id=191771

        Reviewed by Mark Lam.

        Array buffers cannot be larger than 0x7fffffff, because otherwise loading typedArray.length in the DFG/FTL would produce
        a uint32 or would require a signedness check, neither of which sounds reasonable. It's better to just bound their max size
        instead.

        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBufferContents::ArrayBufferContents):
        (JSC::ArrayBufferContents::tryAllocate):
        (JSC::ArrayBufferContents::transferTo):
        (JSC::ArrayBufferContents::copyTo):
        (JSC::ArrayBufferContents::shareWith):
        * runtime/ArrayBuffer.h:
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::tryCreate):
        (JSC::Wasm::Memory::grow):
        * wasm/WasmPageCount.h:

2018-11-16  Saam Barati  <sbarati@apple.com>

        KnownCellUse should also have SpecCellCheck as its type filter
        https://bugs.webkit.org/show_bug.cgi?id=191729
        <rdar://problem/45872852>

        Reviewed by Filip Pizlo.

        We write transformations in the compiler like this where we emit edges with
        KnownCellUse if we know we're inserting code at a point where we're dominated
        by a Cell check:
        
        a: SomeValue
        b: Something(Cell:@a)
        c: SomethingElse(@b)
        d: CheckNotEmpty(@a)
        
        =>
        
        a: SomeValue
        b: Something(Cell:@a)
        e: RandomOtherThing(KnownCellUse:@a)
        c: SomethingElse(@b)
        d: CheckNotEmpty(@a)
        
        However, doing this used to lead to subtly incorrect programs since KnownCellUse
        did not allow the empty value to flow through it. We used to end up incorrectly
        deleting @d in the above program. We fix this, we make KnownCellUse allow the empty
        value to flow through.

        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):

2018-11-16  Tadeu Zagallo  <tzagallo@apple.com>

        Fix assertion failure on BytecodeGenerator::recordOpcode
        https://bugs.webkit.org/show_bug.cgi?id=191724
        <rdar://problem/45724395>

        Reviewed by Saam Barati.

        Since https://bugs.webkit.org/show_bug.cgi?id=187373, we were not
        restoring m_lastInstruction after patching the bytecode when
        finalizing StructureForInContexts, only m_lastOpcodeID, which led to
        the assertion failure.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::StructureForInContext::finalize):

2018-11-15  Mark Lam  <mark.lam@apple.com>

        RegExpObject's collectMatches should not be using JSArray::push to fill in its match results.
        https://bugs.webkit.org/show_bug.cgi?id=191730
        <rdar://problem/46048517>

        Reviewed by Saam Barati.

        According to the spec https://www.ecma-international.org/ecma-262/9.0/index.html#sec-regexp.prototype-@@match,
        the RegExp match results are filled in using the spec's CreateDataProperty()
        function which does not consult the prototype for setters.  JSArray:push()
        consults the prototype for setters.  We should be using putDirectIndex() instead.

        * runtime/RegExpObjectInlines.h:
        (JSC::collectMatches):

2018-11-15  Mark Lam  <mark.lam@apple.com>

        RegExp operations should not take fast patch if lastIndex is not numeric.
        https://bugs.webkit.org/show_bug.cgi?id=191731
        <rdar://problem/46017305>

        Reviewed by Saam Barati.

        This is because if lastIndex is an object with a valueOf() method, it can execute
        arbitrary code which may have side effects, and side effects are not permitted by
        the RegExp fast paths.

        * builtins/RegExpPrototype.js:
        (globalPrivate.hasObservableSideEffectsForRegExpMatch):
        (overriddenName.string_appeared_here.search):
        (globalPrivate.hasObservableSideEffectsForRegExpSplit):
        (intrinsic.RegExpTestIntrinsic.test):
        * builtins/StringPrototype.js:
        (globalPrivate.hasObservableSideEffectsForStringReplace):

2018-11-15  Keith Rollin  <krollin@apple.com>

        Delete old .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191669
        <rdar://problem/46081994>

        Reviewed by Chris Dumez.

        .xcfilelist files were created and added to the Xcode project files in
        https://trac.webkit.org/changeset/238008/webkit. However, they caused
        build issues and they were removed from the Xcode projects in
        https://trac.webkit.org/changeset/238055/webkit. This check-in removes
        the files from the repository altogether. They'll ultimately be
        replaced with new files with names that indicate whether the
        associated files are inputs to the Run Script phase or are files
        created by the Run Script phase.

        * DerivedSources.xcfilelist: Removed.
        * UnifiedSources.xcfilelist: Removed.

2018-11-14  Keith Rollin  <krollin@apple.com>

        Move scripts for Derived and Unified Sources to external files
        https://bugs.webkit.org/show_bug.cgi?id=191670
        <rdar://problem/46082278>

        Reviewed by Keith Miller.

        Move the scripts in the Generate Derived Sources and Generate Unified
        Sources Run Script phases from the Xcode projects to external shell
        script files. Then invoke those scripts from the Run Script phases.
        This refactoring is being performed to support later work that will
        invoke these scripts in other contexts.

        The scripts were maintained as-is when making the move. I did a little
        reformatting and added 'set -e' to the top of each file, but that's
        it.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/generate-derived-sources.sh: Added.
        * Scripts/generate-unified-sources.sh: Added.

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pass Inspector::FrontendChannel as a reference connect/disconnect methods
        https://bugs.webkit.org/show_bug.cgi?id=191612

        Reviewed by Matt Baker.

        * inspector/InspectorFrontendRouter.cpp:
        (Inspector::FrontendRouter::connectFrontend):
        (Inspector::FrontendRouter::disconnectFrontend):
        * inspector/InspectorFrontendRouter.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
        (Inspector::JSGlobalObjectInspectorController::disconnectFrontend):
        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/remote/RemoteControllableTarget.h:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        * inspector/remote/glib/RemoteConnectionToTargetGlib.cpp:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        * runtime/JSGlobalObjectDebuggable.cpp:
        (JSC::JSGlobalObjectDebuggable::connect):
        (JSC::JSGlobalObjectDebuggable::disconnect):
        * runtime/JSGlobalObjectDebuggable.h:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        New domain and resources.

        * inspector/protocol/Target.json: Added.
        New protocol domain, modeled after Worker.json, to allow for
        multiplexing between different targets.

        * inspector/InspectorTarget.h:
        Each target will instantiate an InspectorTarget and must
        provide an identifier, type, and means of connecting/disconnecting
        to a frontend channel.

        * inspector/agents/InspectorTargetAgent.cpp: Added.
        (Inspector::InspectorTargetAgent::InspectorTargetAgent):
        (Inspector::InspectorTargetAgent::didCreateFrontendAndBackend):
        (Inspector::InspectorTargetAgent::willDestroyFrontendAndBackend):
        (Inspector::InspectorTargetAgent::exists):
        (Inspector::InspectorTargetAgent::initialized):
        (Inspector::InspectorTargetAgent::sendMessageToTarget):
        (Inspector::InspectorTargetAgent::sendMessageFromTargetToFrontend):
        (Inspector::targetTypeToProtocolType):
        (Inspector::buildTargetInfoObject):
        (Inspector::InspectorTargetAgent::targetCreated):
        (Inspector::InspectorTargetAgent::targetTerminated):
        (Inspector::InspectorTargetAgent::connectToTargets):
        (Inspector::InspectorTargetAgent::disconnectFromTargets):
        * inspector/agents/InspectorTargetAgent.h: Added.
        TargetAgent holds a list of targets, and connects/disconnects to each
        of the targets when a frontend connects/disconnects.

        * inspector/scripts/codegen/generator.py:
        Better enum casing of ServiceWorker.

2018-11-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, rolling in CodeCache in r237254
        https://bugs.webkit.org/show_bug.cgi?id=190340

        Land the CodeCache part without adding an additional hash value.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-11-13  Saam Barati  <sbarati@apple.com>

        ProxyObject should check for VMInquiry and return early before throwing a stack overflow exception
        https://bugs.webkit.org/show_bug.cgi?id=191601

        Reviewed by Mark Lam.

        This doesn't fix any bugs today, but it may reduce future bugs. It was
        always weird that ProxyObject::getOwnPropertySlot with VMInquiry might
        throw a stack overflow error instead of just returning false like it
        normally does when VMInquiry is passed in.

        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::getOwnPropertySlotCommon):

2018-11-13  Saam Barati  <sbarati@apple.com>

        TypeProfileLog::processLogEntries should stash away any pending exceptions and re-apply them to the VM
        https://bugs.webkit.org/show_bug.cgi?id=191600

        Reviewed by Mark Lam.

        processLogEntries will call into calculatedClassName, which will clear
        any exceptions it encounters (it assumes that they're stack overflow exceptions).
        However, this code may be called when an exception is already pending on the 
        VM (e.g, when we throw an exception in the DFG, we compile an OSR exit
        offramp, which may compile a baseline codeblock, which will process
        the type profiler log). To get around this, processLogEntires should stash
        away and re-apply any pending exceptions.

        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * dfg/DFGOperations.cpp:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
        * jit/JIT.cpp:
        (JSC::JIT::doMainThreadPreparationBeforeCompile):
        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/TypeProfilerLog.cpp:
        (JSC::TypeProfilerLog::processLogEntries):
        * runtime/TypeProfilerLog.h:
        * runtime/VM.cpp:
        (JSC::VM::dumpTypeProfilerData):
        * runtime/VM.h:
        (JSC::VM::DeferExceptionScope::DeferExceptionScope):
        * tools/JSDollarVM.cpp:
        (JSC::functionFindTypeForExpression):
        (JSC::functionReturnTypeFor):

2018-11-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r238132.

        The test added with this change is timing out on Debug JSC
        bots.

        Reverted changeset:

        "[BigInt] JSBigInt::createWithLength should throw when length
        is greater than JSBigInt::maxLength"
        https://bugs.webkit.org/show_bug.cgi?id=190836
        https://trac.webkit.org/changeset/238132

2018-11-12  Mark Lam  <mark.lam@apple.com>

        Add OOM detection to StringPrototype's substituteBackreferences().
        https://bugs.webkit.org/show_bug.cgi?id=191563
        <rdar://problem/45720428>

        Reviewed by Saam Barati.

        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::substituteBackreferencesInline):
        (JSC::substituteBackreferences):
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        * runtime/StringPrototype.h:

2018-11-13  Mark Lam  <mark.lam@apple.com>

        LLIntSlowPath's llint_loop_osr and llint_replace should set the topCallFrame.
        https://bugs.webkit.org/show_bug.cgi?id=191579
        <rdar://problem/45942472>

        Reviewed by Saam Barati.

        Both of these functions do a lot of work.  It would be good for the topCallFrame
        to be correct should we need to throw an exception.

        For example, we've observed the following crash trace:

          * frame #0: WTFCrash() at Assertions.cpp:253
            frame #1: ...
            frame #2: JSC::StructureIDTable::get(this=0x00006040000162f0, structureID=1874583248) at StructureIDTable.h:129
            frame #3: JSC::VM::getStructure(this=0x0000604000016210, id=4022066896) at VM.h:705
            frame #4: JSC::JSCell::structure(this=0x00007ffeefbbde30, vm=0x0000604000016210) const at JSCellInlines.h:125
            frame #5: JSC::JSCell::classInfo(this=0x00007ffeefbbde30, vm=0x0000604000016210) const at JSCellInlines.h:335
            frame #6: JSC::JSCell::inherits(this=0x00007ffeefbbde30, vm=0x0000604000016210, info=0x0000000105eaf020) const at JSCellInlines.h:302
            frame #7: JSC::JSObject* JSC::jsCast<JSC::JSObject*, JSC::JSCell>(from=0x00007ffeefbbde30) at JSCast.h:36
            frame #8: JSC::asObject(cell=0x00007ffeefbbde30) at JSObject.h:1299
            frame #9: JSC::asObject(value=JSValue @ 0x00007ffeefbba380) at JSObject.h:1304
            frame #10: JSC::Register::object(this=0x00007ffeefbbdd58) const at JSObject.h:1514
            frame #11: JSC::ExecState::jsCallee(this=0x00007ffeefbbdd40) const at CallFrame.h:107
            frame #12: JSC::ExecState::isStackOverflowFrame(this=0x00007ffeefbbdd40) const at CallFrameInlines.h:36
            frame #13: JSC::StackVisitor::StackVisitor(this=0x00007ffeefbba860, startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800) at StackVisitor.cpp:52
            frame #14: JSC::StackVisitor::StackVisitor(this=0x00007ffeefbba860, startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800) at StackVisitor.cpp:41
            frame #15: void JSC::StackVisitor::visit<(JSC::StackVisitor::EmptyEntryFrameAction)0, JSC::Interpreter::getStackTrace(JSC::JSCell*, WTF::Vector<JSC::StackFrame, 0ul, WTF::CrashOnOverflow, 16ul>&, unsigned long, unsigned long)::$_3>(startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800, functor=0x00007ffeefbbaa60)::$_3 const&) at StackVisitor.h:147
            frame #16: JSC::Interpreter::getStackTrace(this=0x0000602000005db0, owner=0x000062d00020cbe0, results=0x00006020000249d0, framesToSkip=0, maxStackSize=1) at Interpreter.cpp:437
            frame #17: JSC::getStackTrace(exec=0x000062d00002c048, vm=0x0000631000000800, obj=0x000062d00020cbe0, useCurrentFrame=true) at Error.cpp:170
            frame #18: JSC::ErrorInstance::finishCreation(this=0x000062d00020cbe0, exec=0x000062d00002c048, vm=0x0000631000000800, message=0x00007ffeefbbb800, useCurrentFrame=true) at ErrorInstance.cpp:119
            frame #19: JSC::ErrorInstance::create(exec=0x000062d00002c048, vm=0x0000631000000800, structure=0x000062d0000f5730, message=0x00007ffeefbbb800, appender=0x0000000000000000, type=TypeNothing, useCurrentFrame=true)(WTF::String const&, WTF::String const&, JSC::RuntimeType, JSC::ErrorInstance::SourceTextWhereErrorOccurred), JSC::RuntimeType, bool) at ErrorInstance.h:49
            frame #20: JSC::createRangeError(exec=0x000062d00002c048, globalObject=0x000062d00002c000, message=0x00007ffeefbbb800, appender=0x0000000000000000)(WTF::String const&, WTF::String const&, JSC::RuntimeType, JSC::ErrorInstance::SourceTextWhereErrorOccurred)) at Error.cpp:68
            frame #21: JSC::createRangeError(exec=0x000062d00002c048, globalObject=0x000062d00002c000, message=0x00007ffeefbbb800) at Error.cpp:316
            frame #22: JSC::createStackOverflowError(exec=0x000062d00002c048, globalObject=0x000062d00002c000) at ExceptionHelpers.cpp:77
            frame #23: JSC::createStackOverflowError(exec=0x000062d00002c048) at ExceptionHelpers.cpp:72
            frame #24: JSC::throwStackOverflowError(exec=0x000062d00002c048, scope=0x00007ffeefbbbaa0) at ExceptionHelpers.cpp:335
            frame #25: JSC::ProxyObject::getOwnPropertySlotCommon(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbba80, slot=0x00007ffeefbbc720) at ProxyObject.cpp:372
            frame #26: JSC::ProxyObject::getOwnPropertySlot(object=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbbd40, slot=0x00007ffeefbbc720) at ProxyObject.cpp:395
            frame #27: JSC::JSObject::getNonIndexPropertySlot(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbbea0, slot=0x00007ffeefbbc720) at JSObjectInlines.h:150
            frame #28: bool JSC::JSObject::getPropertySlot<false>(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbc320, slot=0x00007ffeefbbc720) at JSObject.h:1424
            frame #29: JSC::JSObject::calculatedClassName(object=0x000062d000200e40) at JSObject.cpp:535
            frame #30: JSC::Structure::toStructureShape(this=0x000062d000007410, value=JSValue @ 0x00007ffeefbbcae0, sawPolyProtoStructure=0x00007ffeefbbcf60) at Structure.cpp:1142
            frame #31: JSC::TypeProfilerLog::processLogEntries(this=0x000060400000a950, reason=0x00007ffeefbbd5c0) at TypeProfilerLog.cpp:89
            frame #32: JSC::JIT::doMainThreadPreparationBeforeCompile(this=0x0000619000034da0) at JIT.cpp:951
            frame #33: JSC::JITWorklist::Plan::Plan(this=0x0000619000034d80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:43
            frame #34: JSC::JITWorklist::Plan::Plan(this=0x0000619000034d80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:42
            frame #35: JSC::JITWorklist::compileLater(this=0x0000616000001b80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:256
            frame #36: JSC::LLInt::jitCompileAndSetHeuristics(codeBlock=0x000062d0001d88c0, exec=0x00007ffeefbbde30, loopOSREntryBytecodeOffset=0) at LLIntSlowPaths.cpp:391
            frame #37: llint_replace(exec=0x00007ffeefbbde30, pc=0x00006040000161ba) at LLIntSlowPaths.cpp:516
            frame #38: llint_entry at LowLevelInterpreter64.asm:98
            frame #39: vmEntryToJavaScript at LowLevelInterpreter64.asm:296
            ...

        This crash occurred because StackVisitor was seeing an invalid topCallFrame while
        trying to capture the Error stack while throwing a StackOverflowError below
        llint_replace.  While in this specific example, it is questionable whether we
        should be executing JS code below TypeProfilerLog::processLogEntries(), it is
        correct to have set the topCallFrame in llint_replace.  We do this by calling
        LLINT_BEGIN_NO_SET_PC() at the top of llint_replace.

        We also do the same for llint_osr.
        
        Note: both of these LLInt slow path functions are called with a fully initialized
        CallFrame.  Hence, there's no issue with setting topCallFrame to their CallFrames
        for these functions.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2018-11-13  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] JSBigInt::createWithLength should throw when length is greater than JSBigInt::maxLength
        https://bugs.webkit.org/show_bug.cgi?id=190836

        Reviewed by Saam Barati.

        In this patch we are creating a new method called `JSBigInt::createWithLengthUnchecked`
        where we allocate a BigInt trusting the length received as argument.
        With this additional method, we now check if length passed to
        `JSBigInt::createWithLength` is not greater than JSBigInt::maxLength.
        When the length is greater than maxLength, we then throw OOM
        exception.
        This required change the interface of some JSBigInt operations to
        receive `ExecState*` instead of `VM&`. We changed only operations that
        can throw because of OOM.
        We beleive that this approach of throwing instead of finishing the
        execution abruptly is better because JS programs can catch such
        exception and handle this issue properly.

        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createZero):
        (JSC::JSBigInt::tryCreateWithLength):
        (JSC::JSBigInt::createWithLengthUnchecked):
        (JSC::JSBigInt::createFrom):
        (JSC::JSBigInt::multiply):
        (JSC::JSBigInt::divide):
        (JSC::JSBigInt::copy):
        (JSC::JSBigInt::unaryMinus):
        (JSC::JSBigInt::remainder):
        (JSC::JSBigInt::add):
        (JSC::JSBigInt::sub):
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::bitwiseOr):
        (JSC::JSBigInt::bitwiseXor):
        (JSC::JSBigInt::absoluteAdd):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::absoluteDivWithDigitDivisor):
        (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
        (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAddOne):
        (JSC::JSBigInt::absoluteSubOne):
        (JSC::JSBigInt::toStringGeneric):
        (JSC::JSBigInt::rightTrim):
        (JSC::JSBigInt::allocateFor):
        (JSC::JSBigInt::createWithLength): Deleted.
        * runtime/JSBigInt.h:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsSub):
        (JSC::jsMul):

2018-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure certificate details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191447
        <rdar://problem/30019476>

        Reviewed by Joseph Pecoraro.

        Add Security domain to hold security related protocol types.

        * CMakeLists.txt:
        * DerivedSources.make:
        * inspector/protocol/Network.json:
        * inspector/protocol/Security.json: Added.
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator):

2018-11-12  Saam barati  <sbarati@apple.com>

        Unreviewed. Rollout 238026: It caused ~8% JetStream 2 regressions on some iOS devices
        https://bugs.webkit.org/show_bug.cgi?id=191555

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-11-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        Rename file.

        * API/JSValue.mm:

2018-11-10  Benjamin Poulain  <benjamin@webkit.org>

        Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
        https://bugs.webkit.org/show_bug.cgi?id=191492

        Reviewed by Alex Christensen.

        * API/JSValue.mm:

2018-11-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence -Wunused-variable warning

        * bytecode/Opcode.h:
        (JSC::padOpcodeName):

2018-11-09  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after https://bugs.webkit.org/show_bug.cgi?id=191324

        Remove the use of .xcfilelists until their side-effects are better
        understood.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-11-09  Keith Miller  <keith_miller@apple.com>

        LLInt VectorSizeOffset should be based on offset extraction
        https://bugs.webkit.org/show_bug.cgi?id=191468

        Reviewed by Yusuke Suzuki.

        This patch also adds some usings to LLIntOffsetsExtractor that
        make it possible to use the bare names of Vector/RefCountedArray
        in offsets extraction.

        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LowLevelInterpreter.asm:

2018-11-09  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, rolling in CodeCache in r237254
        https://bugs.webkit.org/show_bug.cgi?id=190340

        Land the CodeCache part, which uses DefaultHash<>::Hash instead of computeHash.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-11-08  Keith Miller  <keith_miller@apple.com>

        put_by_val opcodes need to add the number tag as a 64-bit register
        https://bugs.webkit.org/show_bug.cgi?id=191456

        Reviewed by Saam Barati.

        Previously the LLInt would add it as a pointer sized value. That is
        wrong if pointer size is less 64-bits.

        * llint/LowLevelInterpreter64.asm:

2018-11-08  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] isStrWhiteSpace seems redundant with Lexer<UChar>::isWhiteSpace
        https://bugs.webkit.org/show_bug.cgi?id=191439

        Reviewed by Saam Barati.

        * CMakeLists.txt:
        * runtime/ParseInt.h:
        (JSC::isStrWhiteSpace):
        Define isStrWhiteSpace in terms of isWhiteSpace and isLineTerminator.

2018-11-08  Michael Saboff  <msaboff@apple.com>

        Options::useRegExpJIT() should use jitEnabledByDefault() just like useJIT()
        https://bugs.webkit.org/show_bug.cgi?id=191444

        Reviewed by Saam Barati.

        * runtime/Options.h:

2018-11-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] UDis86Disassembler.cpp: warning: format specifies type 'unsigned long' but the argument has type 'uintptr_t' (aka 'unsigned long long')
        https://bugs.webkit.org/show_bug.cgi?id=191416

        Reviewed by Saam Barati.

        * disassembler/UDis86Disassembler.cpp:
        (JSC::tryToDisassembleWithUDis86): Use PRIxPTR for uintptr_t.

2018-11-08  Keith Rollin  <krollin@apple.com>

        Create .xcfilelist files
        https://bugs.webkit.org/show_bug.cgi?id=191324
        <rdar://problem/45852819>

        Reviewed by Alex Christensen.

        As part of preparing for enabling XCBuild, create and use .xcfilelist
        files. These files are using during Run Script build phases in an
        Xcode project. If a Run Script build phase produces new files that are
        used later as inputs to subsequent build phases, XCBuild needs to know
        about these files. These files can be either specified in an "output
        files" section of the Run Script phase editor, or in .xcfilelist files
        that are associated with the Run Script build phase.

        This patch takes the second approach. It consists of three sets of changes:

        - Modify the DerivedSources.make files to have a
          'print_all_generated_files" target that produces a list of the files
          they create.

        - Create a shell script that produces .xcfilelist files from the
          output of the previous step, as well as for the files created in the
          Generate Unified Sources build steps.

        - Add the new .xcfilelist files to the associated projects.

        Note that, with these changes, the Xcode workspace and projects can no
        longer be fully loaded into Xcode 9. Xcode will attempt to load the
        projects that have .xcfilelist files associated with them, but will
        fail and display a placeholder for those projects instead. It's
        expected that all developers are using Xcode 10 by now and that not
        being able to load into Xcode 9 is not a practical issue. Keep in mind
        that this is strictly an IDE issue, and that the projects can still be
        built with `xcodebuild`.

        Also note that the shell script that creates the .xcfilelist files can
        also be used to verify that the set of files that's currently checked
        in is up-to-date. This checking can be used as part of a check-in hook
        or part of check-webkit-style to sooner catch cases where the
        .xcfilelist files need to be regenerated.

        * DerivedSources.make:
        * DerivedSources.xcfilelist: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * UnifiedSources.xcfilelist: Added.

2018-11-08  Ross Kirsling  <ross.kirsling@sony.com>

        U+180E is no longer a whitespace character
        https://bugs.webkit.org/show_bug.cgi?id=191415

        Reviewed by Saam Barati.

        Mongolian Vowel Separator stopped being a valid whitespace character as of ES2016.
        (https://github.com/tc39/ecma262/pull/300)

        * parser/Lexer.h:
        (JSC::Lexer<UChar>::isWhiteSpace):
        * runtime/ParseInt.h:
        (JSC::isStrWhiteSpace):
        * yarr/create_regex_tables:

2018-11-08  Keith Miller  <keith_miller@apple.com>

        jitEnabledByDefault() should be on useJIT not useBaselineJIT
        https://bugs.webkit.org/show_bug.cgi?id=191434

        Reviewed by Saam Barati.

        * runtime/Options.h:

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Restrict domains at the target level instead of only at the window level
        https://bugs.webkit.org/show_bug.cgi?id=191344

        Reviewed by Devin Rousso.

        * inspector/protocol/Console.json:
        * inspector/protocol/Debugger.json:
        * inspector/protocol/Heap.json:
        * inspector/protocol/Runtime.json:
        Remove workerSupported as it is now no longer necessary. It is implied
        by availability being empty (meaning it is supported everywhere).

        * inspector/protocol/Inspector.json:
        * inspector/protocol/ScriptProfiler.json:
        Restrict to "javascript" and "web" debuggables, not available in workers.

        * inspector/protocol/Worker.json:
        Cleanup, remove empty types list.
        
        * inspector/protocol/Recording.json:
        Cleanup, only expose this in the "web" domain for now.

        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.generate_domain):
        * inspector/scripts/codegen/models.py:
        (Protocol.parse_domain):
        Allow a list of debuggable types. Add "worker" even though it is unused
        since that is a type we would want to allow or consider.

        (Domain.__init__):
        (Domains):
        Remove now unnecessary workerSupported code.
        Allow availability on a domain with only types.

        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result: Removed.
        * inspector/scripts/tests/generic/worker-supported-domains.json: Removed.

2018-11-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Consider removing double load for accessing the MetadataTable from LLInt
        https://bugs.webkit.org/show_bug.cgi?id=190933

        Reviewed by Keith Miller.

        This patch removes double load for accesses to MetadataTable from LLInt.
        MetadataTable is now specially RefCounted class, which has interesting memory layout.
        When refcount becomes 0, MetadataTable asks UnlinkedMetadataTable to destroy itself.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::estimatedSize):
        (JSC::CodeBlock::visitChildren):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::metadata):
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        (JSC::CodeBlock::forEachArrayAllocationProfile):
        (JSC::CodeBlock::forEachObjectAllocationProfile):
        (JSC::CodeBlock::forEachLLIntCallLinkInfo):
        * bytecode/MetadataTable.cpp:
        (JSC::MetadataTable::MetadataTable):
        (JSC::MetadataTable::~MetadataTable):
        (JSC::MetadataTable::sizeInBytes):
        * bytecode/MetadataTable.h:
        (JSC::MetadataTable::get):
        (JSC::MetadataTable::forEach):
        (JSC::MetadataTable::ref const):
        (JSC::MetadataTable::deref const):
        (JSC::MetadataTable::refCount const):
        (JSC::MetadataTable::hasOneRef const):
        (JSC::MetadataTable::buffer):
        (JSC::MetadataTable::linkingData const):
        (JSC::MetadataTable::getImpl):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::buffer const):
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::~UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::addEntry):
        (JSC::UnlinkedMetadataTable::sizeInBytes):
        (JSC::UnlinkedMetadataTable::finalize):
        (JSC::UnlinkedMetadataTable::link):
        (JSC::UnlinkedMetadataTable::unlink):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:

2018-11-07  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add support to BigInt into ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=186177

        Reviewed by Keith Miller.

        We are adding a very primitive specialization case of BigInts into ValueAdd.
        When compiling a speculated version of this node to BigInt, we are currently
        calling 'operationAddBigInt', a function that expects only BigInts as
        parameter and effectly add numbers using JSBigInt::add. To properly
        speculate BigInt operands, we changed ArithProfile to observe when
        its result is a BigInt. With this new observation, we are able to identify
        when ValueAdd results into a String or BigInt.

        Here are some numbers for this specialization running
        microbenchmarks:

        big-int-simple-add                   21.5411+-1.1096  ^  15.3502+-0.7027  ^ definitely 1.4033x faster
        big-int-add-prediction-propagation   13.7762+-0.5578  ^  10.8117+-0.5330  ^ definitely 1.2742x faster

        * bytecode/ArithProfile.cpp:
        (JSC::ArithProfile::emitObserveResult):
        (JSC::ArithProfile::shouldEmitSetNonNumeric const):
        (JSC::ArithProfile::shouldEmitSetBigInt const):
        (JSC::ArithProfile::emitSetNonNumeric const):
        (JSC::ArithProfile::emitSetBigInt const):
        (WTF::printInternal):
        (JSC::ArithProfile::shouldEmitSetNonNumber const): Deleted.
        (JSC::ArithProfile::emitSetNonNumber const): Deleted.
        * bytecode/ArithProfile.h:
        (JSC::ArithProfile::observedUnaryInt):
        (JSC::ArithProfile::observedUnaryNumber):
        (JSC::ArithProfile::observedBinaryIntInt):
        (JSC::ArithProfile::observedBinaryNumberInt):
        (JSC::ArithProfile::observedBinaryIntNumber):
        (JSC::ArithProfile::observedBinaryNumberNumber):
        (JSC::ArithProfile::didObserveNonInt32 const):
        (JSC::ArithProfile::didObserveNonNumeric const):
        (JSC::ArithProfile::didObserveBigInt const):
        (JSC::ArithProfile::setObservedNonNumeric):
        (JSC::ArithProfile::setObservedBigInt):
        (JSC::ArithProfile::observeResult):
        (JSC::ArithProfile::didObserveNonNumber const): Deleted.
        (JSC::ArithProfile::setObservedNonNumber): Deleted.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::mayHaveNonNumericResult):
        (JSC::DFG::Node::mayHaveBigIntResult):
        (JSC::DFG::Node::mayHaveNonNumberResult): Deleted.
        * dfg/DFGNodeFlags.cpp:
        (JSC::DFG::dumpNodeFlags):
        * dfg/DFGNodeFlags.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::updateArithProfileForBinaryArithOp):

2018-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix "Javascript" => "JavaScript" enum in protocol generated objects
        https://bugs.webkit.org/show_bug.cgi?id=191340

        Reviewed by Devin Rousso.

        * inspector/ConsoleMessage.cpp:
        (Inspector::messageSourceValue):
        Use new enum name.

        * inspector/scripts/codegen/generator.py:
        Correct the casing of "JavaScript".

2018-11-07  Tadeu Zagallo  <tzagallo@apple.com>

        Align wide opcodes in the instruction stream
        https://bugs.webkit.org/show_bug.cgi?id=191254

        Reviewed by Keith Miller.

        Pad the bytecode with nops to ensure that wide opcodes are 4-byte
        aligned on platforms that don't like unaligned memory access.

        For that, add a new type to represent jump targets, BoundLabel, which
        delays computing the offset in case we need to emit nops for padding.
        Extra padding is also emitted before op_yield and at the of each
        BytecodeWriter fragment, to ensure that the bytecode remains aligned
        after the rewriting.

        As a side effect, we can longer guarantee that the point immediately
        before emitting an opcode is the start of that opcode, since nops
        might be emitted in between if the opcode needs to be wide. To fix
        that, we only take the offset of opcodes after they have been emitted,
        using `m_lastInstruction.offset()`.

        * bytecode/BytecodeDumper.h:
        (JSC::BytecodeDumper::dumpValue):
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::run):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeRewriter.h:
        (JSC::BytecodeRewriter::Fragment::align):
        (JSC::BytecodeRewriter::insertFragmentBefore):
        (JSC::BytecodeRewriter::insertFragmentAfter):
        * bytecode/Fits.h:
        * bytecode/InstructionStream.h:
        (JSC::InstructionStreamWriter::ref):
        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::updateStoredJumpTargetsForInstruction):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::Label::setLocation):
        (JSC::BoundLabel::target):
        (JSC::BoundLabel::saveTarget):
        (JSC::BoundLabel::commitTarget):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::recordOpcode):
        (JSC::BytecodeGenerator::alignWideOpcode):
        (JSC::BytecodeGenerator::emitProfileControlFlow):
        (JSC::BytecodeGenerator::emitResolveScope):
        (JSC::BytecodeGenerator::emitGetFromScope):
        (JSC::BytecodeGenerator::emitPutToScope):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitDirectGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitCreateThis):
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::BytecodeGenerator::emitRequireObjectCoercible):
        (JSC::BytecodeGenerator::emitYieldPoint):
        (JSC::BytecodeGenerator::emitToThis):
        (JSC::Label::bind): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::recordOpcode): Deleted.
        * bytecompiler/Label.h:
        (JSC::BoundLabel::BoundLabel):
        (JSC::BoundLabel::operator int):
        (JSC::Label::bind):
        * generator/Opcode.rb:

2018-11-07  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r237547): Test failures on 32-bit JSC since the JIT was disabled
        https://bugs.webkit.org/show_bug.cgi?id=191184

        Reviewed by Saam Barati.

        Fix API test on CLoop: we can only disable the LLInt when the JIT is enabled.

        * API/tests/PingPongStackOverflowTest.cpp:
        (testPingPongStackOverflow):

2018-11-06  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
        https://bugs.webkit.org/show_bug.cgi?id=191291

        Reviewed by Myles Maxfield.

        Properly disable WEBGPU on all non-Metal platforms for now.

        * Configurations/FeatureDefines.xcconfig:

2018-11-06  Keith Rollin  <krollin@apple.com>

        Adjust handling of Include paths that need quoting
        https://bugs.webkit.org/show_bug.cgi?id=191314
        <rdar://problem/45849143>

        Reviewed by Dan Bernstein.

        There are several places in the JavaScriptCore Xcode project where the
        paths defined in HEADER_SEARCH_PATHS are quoted. That is, the
        definitions look like:

            HEADER_SEARCH_PATHS = (
                "\"${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\"",
                "\"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"",
                "\"$(JAVASCRIPTCORE_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders\"",
                "$(inherited)",
            );

        The idea here is presumably to have the resulting $(CPP) command have
        -I options where the associated paths are themselves quoted,
        protecting against space characters in the paths.

        This approach to quote management can break under Xcode 9. If
        .xcfilelist files are added to the project, the 'objectVersion' value
        in the Xcode project file is changed from 46 to 51. If a project with
        objectVersion=51 is presented to Xcode 9 (as can happen when we build
        for older OS's), it produces build lines where the quotes are escaped,
        thereby becoming part of the path. The build then fails because a
        search for a file normally found in a directory called "Foo" will be
        looked for in "\"Foo\"", which doesn't exist.

        Simply removing the escaped quotes from the HEADER_SEARCH_PATHS
        definition doesn't work, leading to paths that need quoting due to
        space characters but that don't get this quoting (the part of the path
        after the space appears to simply go missing).

        Removing the escaped quotes from the HEADER_SEARCH_PATHS and moving
        the definitions to the .xcconfig fixes this problem.

        * Configurations/ToolExecutable.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-11-06  Michael Saboff  <msaboff@apple.com>

        Multiple stress/regexp-compile-oom.js tests are failing on High Sierra Debug and Release JSC testers.
        https://bugs.webkit.org/show_bug.cgi?id=191271

        Reviewed by Saam Barati.

        Fixed use of ThrowScope my adding release() calls.  Found a few places where we needed
        RETURN_IF_EXCEPTION().  After some code inspections determined that we need to cover the
        exception bubbling for String.match() with a global RegExp as well as String.replace()
        and String.search().

        * runtime/RegExpObjectInlines.h:
        (JSC::RegExpObject::matchInline):
        (JSC::collectMatches):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncSearchFast):
        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):

2018-11-05  Don Olmstead  <don.olmstead@sony.com>

        Fix typos in closing ENABLE guards
        https://bugs.webkit.org/show_bug.cgi?id=191273

        Reviewed by Keith Miller.

        * ftl/FTLForOSREntryJITCode.h:
        * ftl/FTLJITCode.h:
        * jsc.cpp:
        * wasm/WasmMemoryInformation.h:
        * wasm/WasmPageCount.h:

2018-11-05  Keith Miller  <keith_miller@apple.com>

        Make static_asserts in APICast into bitwise_cast
        https://bugs.webkit.org/show_bug.cgi?id=191272

        Reviewed by Filip Pizlo.

        * API/APICast.h:
        (toJS):
        (toJSForGC):
        (toRef):

2018-11-05  Dominik Infuehr  <dinfuehr@igalia.com>

        Enable LLInt on ARMv7/Linux
        https://bugs.webkit.org/show_bug.cgi?id=191190

        Reviewed by Yusuke Suzuki.

        After enabling the new bytecode format in r237547, C_LOOP was
        forced on all 32-bit platforms. Now enable LLInt again on
        ARMv7-Thumb2/Linux.

        This adds a callee-saved register in ARMv7/Linux for the metadataTable and
        stores/restores it on LLInt function calls. It also introduces the globaladdr-
        instruction for the ARM-offlineasm to access the opcode-table.

        * jit/GPRInfo.h:
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * offlineasm/arm.rb:
        * offlineasm/asm.rb:
        * offlineasm/instructions.rb:

2018-11-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang][JSC] JIT::is64BitType reports "warning: explicit specialization cannot have a storage class"
        https://bugs.webkit.org/show_bug.cgi?id=191146

        Reviewed by Yusuke Suzuki.

        * jit/JIT.h: Changed is64BitType from a template class method to a
        template inner class.

2018-11-02  Keith Miller  <keith_miller@apple.com>

        Assert JSValues can fit into a pointer when API casting
        https://bugs.webkit.org/show_bug.cgi?id=191220

        Reviewed by Michael Saboff.

        * API/APICast.h:
        (toJS):
        (toJSForGC):
        (toRef):

2018-11-02  Michael Saboff  <msaboff@apple.com>

        Rolling in r237753 with unreviewed build fix.

        Fixed issues with DECLARE_THROW_SCOPE placement.

2018-11-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237753.

        Introduced JSC test failures

        Reverted changeset:

        "Running out of stack space not properly handled in
        RegExp::compile() and its callers"
        https://bugs.webkit.org/show_bug.cgi?id=191206
        https://trac.webkit.org/changeset/237753

2018-11-02  Michael Saboff  <msaboff@apple.com>

        Running out of stack space not properly handled in RegExp::compile() and its callers
        https://bugs.webkit.org/show_bug.cgi?id=191206

        Reviewed by Filip Pizlo.

        Eliminated two RELEASE_ASSERT_NOT_REACHED() for errors returned by Yarr parsing code.  Bubbled those errors
        up to where they are turned into the appropriate exceptions in matchInline().  If the errors are not due
        to syntax, we reset the RegExp state in case the parsing is tried with a smaller stack.

        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileMatchOnly):
        * runtime/RegExp.h:
        * runtime/RegExpInlines.h:
        (JSC::RegExp::compileIfNecessary):
        (JSC::RegExp::matchInline):
        (JSC::RegExp::compileIfNecessaryMatchOnly):
        * runtime/RegExpObjectInlines.h:
        (JSC::RegExpObject::execInline):
        * yarr/YarrErrorCode.h:
        (JSC::Yarr::hasHardError):

2018-11-02  Keith Miller  <keith_miller@apple.com>

        API should use wrapper object if address is 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=191203

        Reviewed by Filip Pizlo.

        * API/APICast.h:
        (toJS):
        (toJSForGC):
        (toRef):

2018-11-02  Tadeu Zagallo  <tzagallo@apple.com>

        Metadata should not be copyable
        https://bugs.webkit.org/show_bug.cgi?id=191193

        Reviewed by Keith Miller.

        We should only ever hold references to the entry in the metadata table.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * generator/Metadata.rb:

2018-11-02  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r237547): Exception handlers should be aware of wide opcodes when JIT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=191175

        Reviewed by Keith Miller.

        https://bugs.webkit.org/show_bug.cgi?id=191108 did not handle the case where JIT is not enabled

        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * llint/LLIntData.h:
        (JSC::LLInt::getWideCodePtr):

2018-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename <wtf/unicode/UTF8.h> to <wtf/unicode/UTF8Conversion.h> in order to avoid conflicting with ICU's unicode/utf8.h
        https://bugs.webkit.org/show_bug.cgi?id=189693

        Reviewed by Yusuke Suzuki.

        * API/JSClassRef.cpp: Replaced <wtf/unicode/UTF8.h> with <wtf/unicode/UTF8Conversion.h>.
        * API/JSStringRef.cpp: Ditto.
        * runtime/JSGlobalObjectFunctions.cpp: Ditto.
        * wasm/WasmParser.h: Ditto.

2018-11-01  Keith Miller  <keith_miller@apple.com>

        Unreviewed, JavaScriptCore should only guarantee to produce a
        modulemap if we are building for iOSMac.

        * Configurations/JavaScriptCore.xcconfig:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: create a setting for auto-recording newly created contexts
        https://bugs.webkit.org/show_bug.cgi?id=190856

        Reviewed by Brian Burg.

        * inspector/protocol/Canvas.json:
        Add `setRecordingAutoCaptureFrameCount` command for setting the number of frames to record
        immediately after a context is created.

        * inspector/protocol/Recording.json:
        Add `creation` value for `Initiator` enum.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: display low-power enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=190641
        <rdar://problem/45319049>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOM.json:
        Add `videoLowPowerChanged` event that is fired when `InspectorDOMAgent` is able to determine
        whether a video element's low power state has changed.

2018-10-31  Tadeu Zagallo  <tzagallo@apple.com>

        Adjust inlining threshold for new bytecode format
        https://bugs.webkit.org/show_bug.cgi?id=191115

        Reviewed by Saam Barati.

        The new format reduced the number of operands for many opcodes, which
        changed inlining decisions and impacted performance negatively.

        * runtime/Options.h:

2018-10-31  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r237547): Exception handlers should be aware of wide opcodes
        https://bugs.webkit.org/show_bug.cgi?id=191108
        <rdar://problem/45690700>

        Reviewed by Saam Barati.

        When linking the handler, we need to check whether the target op_catch is
        wide or narrow in order to chose the right code pointer for the handler.

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

2018-10-31  Dominik Infuehr  <dinfuehr@igalia.com>

        Align entries in metadata table
        https://bugs.webkit.org/show_bug.cgi?id=191062

        Reviewed by Filip Pizlo.

        Entries in the metadata table need to be aligned on some 32-bit
        architectures.

        * bytecode/MetadataTable.h:
        (JSC::MetadataTable::forEach):
        * bytecode/Opcode.cpp:
        (JSC::metadataAlignment):
        * bytecode/Opcode.h:
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::finalize):
        * generator/Section.rb:

2018-10-31  Jim Mason  <jmason@ibinx.com>

        Static global 'fastHandlerInstalled' conditionally declared in WasmFaultSignalHandler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=191063

        Reviewed by Yusuke Suzuki.

        * wasm/WasmFaultSignalHandler.cpp:

2018-10-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC][LLInt] Compact LLInt ASM code by removing unnecessary instructions
        https://bugs.webkit.org/show_bug.cgi?id=191092

        Reviewed by Saam Barati.

        Looking through LLIntAssembly.h, we can find several inefficiencies. This patch fixes the
        following things to tighten LLInt ASM code.

        1. Remove unnecessary load instructions. Use jmp with BaseIndex directly.
        2. Introduce strength reduction for mul instructions in offlineasm layer. This is now critical
        since mul instruction is executed in `metadata` operation in LLInt. If the given immediate is
        a power of two, we convert it to lshift instruction.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:

2018-10-30  Don Olmstead  <don.olmstead@sony.com>

        [PlayStation] Enable JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=191072

        Reviewed by Brent Fulgham.

        Add platform files for the PlayStation port.

        * PlatformPlayStation.cmake: Added.

2018-10-30  Alexey Proskuryakov  <ap@apple.com>

        Clean up some obsolete MAX_ALLOWED macros
        https://bugs.webkit.org/show_bug.cgi?id=190916

        Reviewed by Tim Horton.

        * API/JSManagedValue.mm:
        * API/JSVirtualMachine.mm:
        * API/JSWrapperMap.mm:

2018-10-30  Ross Kirsling  <ross.kirsling@sony.com>

        useProbeOSRExit causes failures for Win64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=190656

        Reviewed by Keith Miller.

        * assembler/ProbeContext.cpp:
        (JSC::Probe::executeProbe):
        If lowWatermark is expected to equal lowWatermarkFromVisitingDirtyPages *regardless* of the input param,
        then let's just call lowWatermarkFromVisitingDirtyPages instead.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        The result of VariableEventStream::reconstruct appears to be inappropriate for direct use as a stack pointer offset;
        mimic the non-probe case and use requiredRegisterCountForExit from DFGCommonData instead.
        (Also, stop redundantly setting the stack pointer twice in a row.)

2018-10-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        "Unreviewed, partial rolling in r237254"
        https://bugs.webkit.org/show_bug.cgi?id=190340

        This only adds Parser.{cpp,h}. And it is not used in this patch.
        It examines that the regression is related to exact Parser changes.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        (JSC::parseFunctionForFunctionConstructor):

2018-10-29  Mark Lam  <mark.lam@apple.com>

        Correctly detect string overflow when using the 'Function' constructor.
        https://bugs.webkit.org/show_bug.cgi?id=184883
        <rdar://problem/36320331>

        Reviewed by Saam Barati.

        Added StringBuilder::hasOverflowed() checks, and throwing OutOfMemoryErrors if
        we detect an overflow.

        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::appendStringifiedValue):

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        Unreviewed, fix JSC on arm64e after r237547
        https://bugs.webkit.org/show_bug.cgi?id=187373

        Unreviewed.

        Remove unused move guarded by POINTER_PROFILING that was trashing the
        metadata on arm64e.

        * llint/LowLevelInterpreter64.asm:

2018-10-29  Keith Miller  <keith_miller@apple.com>

        JSC should explicitly list its modulemap file
        https://bugs.webkit.org/show_bug.cgi?id=191032

        Reviewed by Saam Barati.

        The automagically generated module map file for JSC will
        include headers where they may not work out of the box.
        This patch makes it so we now export the same modulemap
        that used to be provided via the legacy system.

        * Configurations/JavaScriptCore.xcconfig:
        * JavaScriptCore.modulemap: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        English->en

2018-10-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237492.
        https://bugs.webkit.org/show_bug.cgi?id=191035

        "It regresses JetStream 2 by 5% on some iOS devices"
        (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "Unreviewed, partial rolling in r237254"
        https://bugs.webkit.org/show_bug.cgi?id=190340
        https://trac.webkit.org/changeset/237492

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        Add support for GetStack FlushedDouble
        https://bugs.webkit.org/show_bug.cgi?id=191012
        <rdar://problem/45265141>

        Reviewed by Saam Barati.

        LowerDFGToB3::compileGetStack assumed that we would not emit GetStack
        for doubles, but it turns out it may arise from the PutStack sinking
        phase: if we sink a PutStack into a successor block, other predecessors
        will emit a GetStack followed by a Upsilon.

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

2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Replace unlinked and linked bytecode with a new immutable bytecode that does not embed
        any addresses. Instructions can be encoded as narrow (1-byte operands) or wide (4-byte
        operands) and might contain an extra operand, the metadataID. The metadataID is used to
        access the instruction's mutable data in a side table in the CodeBlock (the MetadataTable).

        Bytecodes now must be structs declared in the new BytecodeList.rb. All bytecodes give names
        and types to all its operands. Additionally, reading a bytecode from the instruction stream
        requires decoding the whole bytecode, i.e. it's no longer possible to access arbitrary
        operands directly from the stream.


        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::ReturnAddressPtr::ReturnAddressPtr):
        (JSC::ReturnAddressPtr::value const):
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * bytecode/ArithProfile.h:
        (JSC::ArithProfile::ArithProfile):
        * bytecode/ArrayAllocationProfile.h:
        (JSC::ArrayAllocationProfile::ArrayAllocationProfile):
        * bytecode/ArrayProfile.h:
        * bytecode/BytecodeBasicBlock.cpp:
        (JSC::isJumpTarget):
        (JSC::BytecodeBasicBlock::computeImpl):
        (JSC::BytecodeBasicBlock::compute):
        * bytecode/BytecodeBasicBlock.h:
        (JSC::BytecodeBasicBlock::leaderOffset const):
        (JSC::BytecodeBasicBlock::totalLength const):
        (JSC::BytecodeBasicBlock::offsets const):
        (JSC::BytecodeBasicBlock::BytecodeBasicBlock):
        (JSC::BytecodeBasicBlock::addLength):
        * bytecode/BytecodeDumper.cpp:
        (JSC::BytecodeDumper<Block>::printLocationAndOp):
        (JSC::BytecodeDumper<Block>::dumpBytecode):
        (JSC::BytecodeDumper<Block>::dumpIdentifiers):
        (JSC::BytecodeDumper<Block>::dumpConstants):
        (JSC::BytecodeDumper<Block>::dumpExceptionHandlers):
        (JSC::BytecodeDumper<Block>::dumpSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpStringSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpBlock):
        * bytecode/BytecodeDumper.h:
        (JSC::BytecodeDumper::dumpOperand):
        (JSC::BytecodeDumper::dumpValue):
        (JSC::BytecodeDumper::BytecodeDumper):
        (JSC::BytecodeDumper::block const):
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
        (JSC::BytecodeGeneratorification::enterPoint const):
        (JSC::BytecodeGeneratorification::instructions const):
        (JSC::GeneratorLivenessAnalysis::run):
        (JSC::BytecodeGeneratorification::run):
        (JSC::performGeneratorification):
        * bytecode/BytecodeGeneratorification.h:
        * bytecode/BytecodeGraph.h:
        (JSC::BytecodeGraph::blockContainsBytecodeOffset):
        (JSC::BytecodeGraph::findBasicBlockForBytecodeOffset):
        (JSC::BytecodeGraph::findBasicBlockWithLeaderOffset):
        (JSC::BytecodeGraph::BytecodeGraph):
        * bytecode/BytecodeKills.h:
        * bytecode/BytecodeList.json: Removed.
        * bytecode/BytecodeList.rb: Added.
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::dumpResults):
        * bytecode/BytecodeLivenessAnalysis.h:
        * bytecode/BytecodeLivenessAnalysisInlines.h:
        (JSC::isValidRegisterForLiveness):
        (JSC::BytecodeLivenessPropagation::stepOverInstruction):
        * bytecode/BytecodeRewriter.cpp:
        (JSC::BytecodeRewriter::applyModification):
        (JSC::BytecodeRewriter::execute):
        (JSC::BytecodeRewriter::adjustJumpTargetsInFragment):
        (JSC::BytecodeRewriter::insertImpl):
        (JSC::BytecodeRewriter::adjustJumpTarget):
        (JSC::BytecodeRewriter::adjustJumpTargets):
        * bytecode/BytecodeRewriter.h:
        (JSC::BytecodeRewriter::InsertionPoint::InsertionPoint):
        (JSC::BytecodeRewriter::Fragment::Fragment):
        (JSC::BytecodeRewriter::Fragment::appendInstruction):
        (JSC::BytecodeRewriter::BytecodeRewriter):
        (JSC::BytecodeRewriter::insertFragmentBefore):
        (JSC::BytecodeRewriter::insertFragmentAfter):
        (JSC::BytecodeRewriter::removeBytecode):
        (JSC::BytecodeRewriter::adjustAbsoluteOffset):
        (JSC::BytecodeRewriter::adjustJumpTarget):
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::estimatedSize):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::addJITAddIC):
        (JSC::CodeBlock::addJITMulIC):
        (JSC::CodeBlock::addJITSubIC):
        (JSC::CodeBlock::addJITNegIC):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
        (JSC::CodeBlock::hasOpDebugForLineAndColumn):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::updateAllArrayPredictions):
        (JSC::CodeBlock::predictedMachineCodeSize):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        (JSC::CodeBlock::validate):
        (JSC::CodeBlock::outOfLineJumpOffset):
        (JSC::CodeBlock::outOfLineJumpTarget):
        (JSC::CodeBlock::arithProfileForBytecodeOffset):
        (JSC::CodeBlock::arithProfileForPC):
        (JSC::CodeBlock::couldTakeSpecialFastCase):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addMathIC):
        (JSC::CodeBlock::outOfLineJumpOffset):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::instructions const):
        (JSC::CodeBlock::instructionCount const):
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters):
        (JSC::CodeBlock::metadata):
        (JSC::CodeBlock::metadataSizeInBytes):
        (JSC::CodeBlock::numberOfNonArgumentValueProfiles):
        (JSC::CodeBlock::totalNumberOfValueProfiles):
        * bytecode/CodeBlockInlines.h: Added.
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        (JSC::CodeBlock::forEachArrayAllocationProfile):
        (JSC::CodeBlock::forEachObjectAllocationProfile):
        (JSC::CodeBlock::forEachLLIntCallLinkInfo):
        * bytecode/Fits.h: Added.
        * bytecode/GetByIdMetadata.h: Copied from Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h.
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        * bytecode/Instruction.h:
        (JSC::Instruction::Instruction):
        (JSC::Instruction::Impl::opcodeID const):
        (JSC::Instruction::opcodeID const):
        (JSC::Instruction::name const):
        (JSC::Instruction::isWide const):
        (JSC::Instruction::size const):
        (JSC::Instruction::is const):
        (JSC::Instruction::as const):
        (JSC::Instruction::cast):
        (JSC::Instruction::cast const):
        (JSC::Instruction::narrow const):
        (JSC::Instruction::wide const):
        * bytecode/InstructionStream.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::InstructionStream::InstructionStream):
        (JSC::InstructionStream::sizeInBytes const):
        * bytecode/InstructionStream.h: Added.
        (JSC::InstructionStream::BaseRef::BaseRef):
        (JSC::InstructionStream::BaseRef::operator=):
        (JSC::InstructionStream::BaseRef::operator-> const):
        (JSC::InstructionStream::BaseRef::ptr const):
        (JSC::InstructionStream::BaseRef::operator!= const):
        (JSC::InstructionStream::BaseRef::next const):
        (JSC::InstructionStream::BaseRef::offset const):
        (JSC::InstructionStream::BaseRef::isValid const):
        (JSC::InstructionStream::BaseRef::unwrap const):
        (JSC::InstructionStream::MutableRef::freeze const):
        (JSC::InstructionStream::MutableRef::operator->):
        (JSC::InstructionStream::MutableRef::ptr):
        (JSC::InstructionStream::MutableRef::operator Ref):
        (JSC::InstructionStream::MutableRef::unwrap):
        (JSC::InstructionStream::iterator::operator*):
        (JSC::InstructionStream::iterator::operator++):
        (JSC::InstructionStream::begin const):
        (JSC::InstructionStream::end const):
        (JSC::InstructionStream::at const):
        (JSC::InstructionStream::size const):
        (JSC::InstructionStreamWriter::InstructionStreamWriter):
        (JSC::InstructionStreamWriter::ref):
        (JSC::InstructionStreamWriter::seek):
        (JSC::InstructionStreamWriter::position):
        (JSC::InstructionStreamWriter::write):
        (JSC::InstructionStreamWriter::rewind):
        (JSC::InstructionStreamWriter::finalize):
        (JSC::InstructionStreamWriter::swap):
        (JSC::InstructionStreamWriter::iterator::operator*):
        (JSC::InstructionStreamWriter::iterator::operator++):
        (JSC::InstructionStreamWriter::begin):
        (JSC::InstructionStreamWriter::end):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::clearLLIntGetByIdCache):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * bytecode/MetadataTable.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::MetadataTable::MetadataTable):
        (JSC::DeallocTable::withOpcodeType):
        (JSC::MetadataTable::~MetadataTable):
        (JSC::MetadataTable::sizeInBytes):
        * bytecode/MetadataTable.h: Copied from Source/JavaScriptCore/runtime/Watchdog.h.
        (JSC::MetadataTable::get):
        (JSC::MetadataTable::forEach):
        (JSC::MetadataTable::getImpl):
        * bytecode/Opcode.cpp:
        (JSC::metadataSize):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * bytecode/OpcodeInlines.h:
        (JSC::isOpcodeShape):
        (JSC::getOpcodeType):
        * bytecode/OpcodeSize.h: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        * bytecode/PreciseJumpTargets.cpp:
        (JSC::getJumpTargetsForInstruction):
        (JSC::computePreciseJumpTargetsInternal):
        (JSC::computePreciseJumpTargets):
        (JSC::recomputePreciseJumpTargets):
        (JSC::findJumpTargetsForInstruction):
        * bytecode/PreciseJumpTargets.h:
        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::jumpTargetForInstruction):
        (JSC::extractStoredJumpTargetsForInstruction):
        (JSC::updateStoredJumpTargetsForInstruction):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        * bytecode/SpecialPointer.cpp:
        (WTF::printInternal):
        * bytecode/SpecialPointer.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::visitChildren):
        (JSC::UnlinkedCodeBlock::estimatedSize):
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset):
        (JSC::dumpLineColumnEntry):
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset const):
        (JSC::UnlinkedCodeBlock::setInstructions):
        (JSC::UnlinkedCodeBlock::instructions const):
        (JSC::UnlinkedCodeBlock::applyModification):
        (JSC::UnlinkedCodeBlock::addOutOfLineJumpTarget):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction):
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions const):
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset):
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets const):
        (JSC::UnlinkedCodeBlock::metadata):
        (JSC::UnlinkedCodeBlock::metadataSizeInBytes):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        (JSC::UnlinkedCodeBlock::replaceOutOfLineJumpTargets):
        * bytecode/UnlinkedInstructionStream.cpp: Removed.
        * bytecode/UnlinkedInstructionStream.h: Removed.
        * bytecode/UnlinkedMetadataTable.h: Copied from Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h.
        * bytecode/UnlinkedMetadataTableInlines.h: Added.
        (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::~UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::addEntry):
        (JSC::UnlinkedMetadataTable::sizeInBytes):
        (JSC::UnlinkedMetadataTable::finalize):
        (JSC::UnlinkedMetadataTable::link):
        (JSC::UnlinkedMetadataTable::unlink):
        * bytecode/VirtualRegister.cpp:
        (JSC::VirtualRegister::VirtualRegister):
        * bytecode/VirtualRegister.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::Label::setLocation):
        (JSC::Label::bind):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
        (JSC::BytecodeGenerator::emitEnter):
        (JSC::BytecodeGenerator::emitLoopHint):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitCheckTraps):
        (JSC::BytecodeGenerator::rewind):
        (JSC::BytecodeGenerator::fuseCompareAndJump):
        (JSC::BytecodeGenerator::fuseTestAndJmp):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::moveLinkTimeConstant):
        (JSC::BytecodeGenerator::moveEmptyValue):
        (JSC::BytecodeGenerator::emitMove):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitBinaryOp):
        (JSC::BytecodeGenerator::emitToObject):
        (JSC::BytecodeGenerator::emitToNumber):
        (JSC::BytecodeGenerator::emitToString):
        (JSC::BytecodeGenerator::emitTypeOf):
        (JSC::BytecodeGenerator::emitInc):
        (JSC::BytecodeGenerator::emitDec):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitProfileType):
        (JSC::BytecodeGenerator::emitProfileControlFlow):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::emitResolveScopeForHoistingFuncDeclInEval):
        (JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration):
        (JSC::BytecodeGenerator::emitOverridesHasInstance):
        (JSC::BytecodeGenerator::emitResolveScope):
        (JSC::BytecodeGenerator::emitGetFromScope):
        (JSC::BytecodeGenerator::emitPutToScope):
        (JSC::BytecodeGenerator::emitInstanceOf):
        (JSC::BytecodeGenerator::emitInstanceOfCustom):
        (JSC::BytecodeGenerator::emitInByVal):
        (JSC::BytecodeGenerator::emitInById):
        (JSC::BytecodeGenerator::emitTryGetById):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitDirectGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitPutGetterById):
        (JSC::BytecodeGenerator::emitPutSetterById):
        (JSC::BytecodeGenerator::emitPutGetterSetter):
        (JSC::BytecodeGenerator::emitPutGetterByVal):
        (JSC::BytecodeGenerator::emitPutSetterByVal):
        (JSC::BytecodeGenerator::emitDeleteById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitPutByVal):
        (JSC::BytecodeGenerator::emitDirectPutByVal):
        (JSC::BytecodeGenerator::emitDeleteByVal):
        (JSC::BytecodeGenerator::emitSuperSamplerBegin):
        (JSC::BytecodeGenerator::emitSuperSamplerEnd):
        (JSC::BytecodeGenerator::emitIdWithProfile):
        (JSC::BytecodeGenerator::emitUnreachable):
        (JSC::BytecodeGenerator::emitGetArgument):
        (JSC::BytecodeGenerator::emitCreateThis):
        (JSC::BytecodeGenerator::emitTDZCheck):
        (JSC::BytecodeGenerator::emitNewObject):
        (JSC::BytecodeGenerator::emitNewArrayBuffer):
        (JSC::BytecodeGenerator::emitNewArray):
        (JSC::BytecodeGenerator::emitNewArrayWithSpread):
        (JSC::BytecodeGenerator::emitNewArrayWithSize):
        (JSC::BytecodeGenerator::emitNewRegExp):
        (JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
        (JSC::BytecodeGenerator::emitNewDefaultConstructor):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallInTailPosition):
        (JSC::BytecodeGenerator::emitCallEval):
        (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitCallVarargsInTailPosition):
        (JSC::BytecodeGenerator::emitConstructVarargs):
        (JSC::BytecodeGenerator::emitCallForwardArgumentsInTailPosition):
        (JSC::BytecodeGenerator::emitLogShadowChickenPrologueIfNecessary):
        (JSC::BytecodeGenerator::emitLogShadowChickenTailIfNecessary):
        (JSC::BytecodeGenerator::emitCallDefineProperty):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitEnd):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitStrcat):
        (JSC::BytecodeGenerator::emitToPrimitive):
        (JSC::BytecodeGenerator::emitGetScope):
        (JSC::BytecodeGenerator::emitPushWithScope):
        (JSC::BytecodeGenerator::emitGetParentScope):
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitThrow):
        (JSC::BytecodeGenerator::emitArgumentCount):
        (JSC::BytecodeGenerator::emitThrowStaticError):
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::prepareJumpTableForSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::BytecodeGenerator::emitGetEnumerableLength):
        (JSC::BytecodeGenerator::emitHasGenericProperty):
        (JSC::BytecodeGenerator::emitHasIndexedProperty):
        (JSC::BytecodeGenerator::emitHasStructureProperty):
        (JSC::BytecodeGenerator::emitGetPropertyEnumerator):
        (JSC::BytecodeGenerator::emitEnumeratorStructurePropertyName):
        (JSC::BytecodeGenerator::emitEnumeratorGenericPropertyName):
        (JSC::BytecodeGenerator::emitToIndexString):
        (JSC::BytecodeGenerator::emitIsCellWithType):
        (JSC::BytecodeGenerator::emitIsObject):
        (JSC::BytecodeGenerator::emitIsNumber):
        (JSC::BytecodeGenerator::emitIsUndefined):
        (JSC::BytecodeGenerator::emitIsEmpty):
        (JSC::BytecodeGenerator::emitRestParameter):
        (JSC::BytecodeGenerator::emitRequireObjectCoercible):
        (JSC::BytecodeGenerator::emitYieldPoint):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitGetAsyncIterator):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::emitJumpIf):
        (JSC::ForInContext::finalize):
        (JSC::StructureForInContext::finalize):
        (JSC::IndexedForInContext::finalize):
        (JSC::StaticPropertyAnalysis::record):
        (JSC::BytecodeGenerator::emitToThis):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::StructureForInContext::addGetInst):
        (JSC::BytecodeGenerator::recordOpcode):
        (JSC::BytecodeGenerator::addMetadataFor):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::kill):
        (JSC::BytecodeGenerator::instructions const):
        (JSC::BytecodeGenerator::write):
        (JSC::BytecodeGenerator::withWriter):
        * bytecompiler/Label.h:
        (JSC::Label::Label):
        (JSC::Label::bind):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_argumentCount):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        (JSC::BitwiseNotNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):
        (JSC::StrictEqualNode::emitBytecode):
        (JSC::emitReadModifyAssignment):
        (JSC::ForInNode::emitBytecode):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::FunctionNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        * bytecompiler/ProfileTypeBytecodeFlag.cpp: Copied from Source/JavaScriptCore/bytecode/VirtualRegister.cpp.
        (WTF::printInternal):
        * bytecompiler/ProfileTypeBytecodeFlag.h: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        * bytecompiler/RegisterID.h:
        * bytecompiler/StaticPropertyAnalysis.h:
        (JSC::StaticPropertyAnalysis::create):
        (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis):
        * bytecompiler/StaticPropertyAnalyzer.h:
        (JSC::StaticPropertyAnalyzer::createThis):
        (JSC::StaticPropertyAnalyzer::newObject):
        (JSC::StaticPropertyAnalyzer::putById):
        (JSC::StaticPropertyAnalyzer::mov):
        (JSC::StaticPropertyAnalyzer::kill):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getArrayMode):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleVarargsCall):
        (JSC::DFG::ByteCodeParser::handleRecursiveTailCall):
        (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::handlePutById):
        (JSC::DFG::ByteCodeParser::parseGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ByteCodeParser::handlePutAccessorById):
        (JSC::DFG::ByteCodeParser::handlePutAccessorByVal):
        (JSC::DFG::ByteCodeParser::handleNewFunc):
        (JSC::DFG::ByteCodeParser::handleNewFuncExp):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareCatchOSREntry):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileArithMul):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * generate-bytecode-files: Removed.
        * generator/Argument.rb: Added.
        * generator/Assertion.rb: Added.
        * generator/DSL.rb: Added.
        * generator/Fits.rb: Added.
        * generator/GeneratedFile.rb: Added.
        * generator/Metadata.rb: Added.
        * generator/Opcode.rb: Added.
        * generator/OpcodeGroup.rb: Added.
        * generator/Options.rb: Added.
        * generator/Section.rb: Added.
        * generator/Template.rb: Added.
        * generator/Type.rb: Added.
        * generator/main.rb: Added.
        * interpreter/AbstractPC.h:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::currentVPC const):
        (JSC::CallFrame::setCurrentVPC):
        * interpreter/CallFrame.h:
        (JSC::CallSiteIndex::CallSiteIndex):
        (JSC::ExecState::setReturnPC):
        * interpreter/Interpreter.cpp:
        (WTF::printInternal):
        * interpreter/Interpreter.h:
        * interpreter/InterpreterInlines.h:
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::dump const):
        * interpreter/VMEntryRecord.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitSlowCaseCall):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::compileWithoutLinking):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emit_op_jlesseq):
        (JSC::JIT::emit_op_jgreater):
        (JSC::JIT::emit_op_jgreatereq):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emit_op_jngreater):
        (JSC::JIT::emit_op_jngreatereq):
        (JSC::JIT::emitSlow_op_jless):
        (JSC::JIT::emitSlow_op_jlesseq):
        (JSC::JIT::emitSlow_op_jgreater):
        (JSC::JIT::emitSlow_op_jgreatereq):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jngreater):
        (JSC::JIT::emitSlow_op_jngreatereq):
        (JSC::JIT::emit_op_below):
        (JSC::JIT::emit_op_beloweq):
        (JSC::JIT::emit_op_jbelow):
        (JSC::JIT::emit_op_jbeloweq):
        (JSC::JIT::emit_op_unsigned):
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_inc):
        (JSC::JIT::emit_op_dec):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):
        (JSC::JIT::emitBitBinaryOpFastPath):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShiftFastPath):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emit_op_urshift):
        (JSC::getOperandTypes):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_call):
        (JSC::JIT::emit_op_tail_call):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_call_varargs):
        (JSC::JIT::emit_op_tail_call_varargs):
        (JSC::JIT::emit_op_tail_call_forward_arguments):
        (JSC::JIT::emit_op_construct_varargs):
        (JSC::JIT::emit_op_construct):
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_tail_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_forward_arguments):
        (JSC::JIT::emitSlow_op_construct_varargs):
        (JSC::JIT::emitSlow_op_construct):
        * jit/JITDisassembler.cpp:
        (JSC::JITDisassembler::JITDisassembler):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITInlines.h:
        (JSC::JIT::emitDoubleGetByVal):
        (JSC::JIT::emitLoadForArrayMode):
        (JSC::JIT::emitContiguousGetByVal):
        (JSC::JIT::emitArrayStorageGetByVal):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::sampleInstruction):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::jumpTarget):
        (JSC::JIT::copiedGetPutInfo):
        (JSC::JIT::copiedArithProfile):
        * jit/JITMathIC.h:
        (JSC::isProfileEmpty):
        (JSC::JITBinaryMathIC::JITBinaryMathIC):
        (JSC::JITUnaryMathIC::JITUnaryMathIC):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_instanceof_custom):
        (JSC::JIT::emit_op_is_empty):
        (JSC::JIT::emit_op_is_undefined):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_cell_with_type):
        (JSC::JIT::emit_op_is_object):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_jstricteq):
        (JSC::JIT::emit_op_jnstricteq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_string):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_identity_with_profile):
        (JSC::JIT::emit_op_get_parent_scope):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_get_scope):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::emit_op_check_traps):
        (JSC::JIT::emit_op_nop):
        (JSC::JIT::emit_op_super_sampler_begin):
        (JSC::JIT::emit_op_super_sampler_end):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emit_op_new_func):
        (JSC::JIT::emit_op_new_generator_func):
        (JSC::JIT::emit_op_new_async_generator_func):
        (JSC::JIT::emit_op_new_async_func):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_func_exp):
        (JSC::JIT::emit_op_new_generator_func_exp):
        (JSC::JIT::emit_op_new_async_func_exp):
        (JSC::JIT::emit_op_new_async_generator_func_exp):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_indexed_property):
        (JSC::JIT::emitSlow_op_has_indexed_property):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_argument_count):
        (JSC::JIT::emit_op_get_rest_length):
        (JSC::JIT::emit_op_get_argument):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_to_this):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitGetByValWithCachedId):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val_direct):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_put_to_arguments):
        (JSC::JIT::privateCompileGetByVal):
        (JSC::JIT::privateCompileGetByValWithCachedId):
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        (JSC::JIT::emitDoubleLoad):
        (JSC::JIT::emitContiguousLoad):
        (JSC::JIT::emitArrayStorageLoad):
        (JSC::JIT::emitDirectArgumentsGetByVal):
        (JSC::JIT::emitScopedArgumentsGetByVal):
        (JSC::JIT::emitIntTypedArrayGetByVal):
        (JSC::JIT::emitFloatTypedArrayGetByVal):
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        * jit/SlowPathCall.h:
        (JSC::JITSlowPathCall::JITSlowPathCall):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntData.h:
        (JSC::LLInt::exceptionInstructions):
        (JSC::LLInt::opcodeMap):
        (JSC::LLInt::opcodeMapWide):
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide):
        (JSC::LLInt::getWideCodePtr):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::llint_trace_operand):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::setupGetByIdPrototypeCache):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::genericCall):
        (JSC::LLInt::varargsSetup):
        (JSC::LLInt::commonCallEval):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        (JSC::CLoopRegister::operator const Instruction*):
        (JSC::CLoop::execute):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/asm.rb:
        * offlineasm/ast.rb:
        * offlineasm/cloop.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/instructions.rb:
        * offlineasm/offsets.rb:
        * offlineasm/parser.rb:
        * offlineasm/transform.rb:
        * offlineasm/x86.rb:
        * parser/ResultType.h:
        (JSC::ResultType::dump const):
        (JSC::OperandTypes::first const):
        (JSC::OperandTypes::second const):
        (JSC::OperandTypes::dump const):
        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::BytecodeSequence):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::updateArithProfileForBinaryArithOp):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/ExceptionFuzz.cpp:
        (JSC::doExceptionFuzzing):
        * runtime/ExceptionFuzz.h:
        (JSC::doExceptionFuzzingIfEnabled):
        * runtime/GetPutInfo.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::GetPutInfo::dump const):
        (WTF::printInternal):
        * runtime/GetPutInfo.h:
        (JSC::GetPutInfo::operand const):
        * runtime/JSCPoison.h:
        * runtime/JSType.cpp: Added.
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::displayName):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::UnprocessedStackFrame::UnprocessedStackFrame):
        * runtime/SlowPathReturnType.h:
        (JSC::encodeResult):
        (JSC::decodeResult):
        * runtime/VM.h:
        * runtime/Watchdog.h:
        * tools/HeapVerifier.cpp:

2018-10-27  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, partial rolling in r237254
        https://bugs.webkit.org/show_bug.cgi?id=190340

        We do not use the added function right now to investigate what is the reason of the regression.
        It also does not include any Parser.{h,cpp} changes to ensure that Parser.cpp's inlining decision
        seems culprit of the regression on iOS devices.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237479 and r237484.
        https://bugs.webkit.org/show_bug.cgi?id=190978

        broke JSC on iOS (Requested by tadeuzagallo on #webkit).

        Reverted changesets:

        "New bytecode format for JSC"
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237479

        "Gardening: Build fix after r237479."
        https://bugs.webkit.org/show_bug.cgi?id=187373
        https://trac.webkit.org/changeset/237484

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        Gardening: Build fix after r237479.
        https://bugs.webkit.org/show_bug.cgi?id=187373

        Unreviewed.

        * Configurations/JSC.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):

2018-10-26  Tadeu Zagallo  <tzagallo@apple.com>

        New bytecode format for JSC
        https://bugs.webkit.org/show_bug.cgi?id=187373
        <rdar://problem/44186758>

        Reviewed by Filip Pizlo.

        Replace unlinked and linked bytecode with a new immutable bytecode that does not embed
        any addresses. Instructions can be encoded as narrow (1-byte operands) or wide (4-byte
        operands) and might contain an extra operand, the metadataID. The metadataID is used to
        access the instruction's mutable data in a side table in the CodeBlock (the MetadataTable).

        Bytecodes now must be structs declared in the new BytecodeList.rb. All bytecodes give names
        and types to all its operands. Additionally, reading a bytecode from the instruction stream
        requires decoding the whole bytecode, i.e. it's no longer possible to access arbitrary
        operands directly from the stream.


        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::ReturnAddressPtr::ReturnAddressPtr):
        (JSC::ReturnAddressPtr::value const):
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * bytecode/ArithProfile.h:
        (JSC::ArithProfile::ArithProfile):
        * bytecode/ArrayAllocationProfile.h:
        (JSC::ArrayAllocationProfile::ArrayAllocationProfile):
        * bytecode/ArrayProfile.h:
        * bytecode/BytecodeBasicBlock.cpp:
        (JSC::isJumpTarget):
        (JSC::BytecodeBasicBlock::computeImpl):
        (JSC::BytecodeBasicBlock::compute):
        * bytecode/BytecodeBasicBlock.h:
        (JSC::BytecodeBasicBlock::leaderOffset const):
        (JSC::BytecodeBasicBlock::totalLength const):
        (JSC::BytecodeBasicBlock::offsets const):
        (JSC::BytecodeBasicBlock::BytecodeBasicBlock):
        (JSC::BytecodeBasicBlock::addLength):
        * bytecode/BytecodeDumper.cpp:
        (JSC::BytecodeDumper<Block>::printLocationAndOp):
        (JSC::BytecodeDumper<Block>::dumpBytecode):
        (JSC::BytecodeDumper<Block>::dumpIdentifiers):
        (JSC::BytecodeDumper<Block>::dumpConstants):
        (JSC::BytecodeDumper<Block>::dumpExceptionHandlers):
        (JSC::BytecodeDumper<Block>::dumpSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpStringSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpBlock):
        * bytecode/BytecodeDumper.h:
        (JSC::BytecodeDumper::dumpOperand):
        (JSC::BytecodeDumper::dumpValue):
        (JSC::BytecodeDumper::BytecodeDumper):
        (JSC::BytecodeDumper::block const):
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
        (JSC::BytecodeGeneratorification::enterPoint const):
        (JSC::BytecodeGeneratorification::instructions const):
        (JSC::GeneratorLivenessAnalysis::run):
        (JSC::BytecodeGeneratorification::run):
        (JSC::performGeneratorification):
        * bytecode/BytecodeGeneratorification.h:
        * bytecode/BytecodeGraph.h:
        (JSC::BytecodeGraph::blockContainsBytecodeOffset):
        (JSC::BytecodeGraph::findBasicBlockForBytecodeOffset):
        (JSC::BytecodeGraph::findBasicBlockWithLeaderOffset):
        (JSC::BytecodeGraph::BytecodeGraph):
        * bytecode/BytecodeKills.h:
        * bytecode/BytecodeList.json: Removed.
        * bytecode/BytecodeList.rb: Added.
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::dumpResults):
        * bytecode/BytecodeLivenessAnalysis.h:
        * bytecode/BytecodeLivenessAnalysisInlines.h:
        (JSC::isValidRegisterForLiveness):
        (JSC::BytecodeLivenessPropagation::stepOverInstruction):
        * bytecode/BytecodeRewriter.cpp:
        (JSC::BytecodeRewriter::applyModification):
        (JSC::BytecodeRewriter::execute):
        (JSC::BytecodeRewriter::adjustJumpTargetsInFragment):
        (JSC::BytecodeRewriter::insertImpl):
        (JSC::BytecodeRewriter::adjustJumpTarget):
        (JSC::BytecodeRewriter::adjustJumpTargets):
        * bytecode/BytecodeRewriter.h:
        (JSC::BytecodeRewriter::InsertionPoint::InsertionPoint):
        (JSC::BytecodeRewriter::Fragment::Fragment):
        (JSC::BytecodeRewriter::Fragment::appendInstruction):
        (JSC::BytecodeRewriter::BytecodeRewriter):
        (JSC::BytecodeRewriter::insertFragmentBefore):
        (JSC::BytecodeRewriter::insertFragmentAfter):
        (JSC::BytecodeRewriter::removeBytecode):
        (JSC::BytecodeRewriter::adjustAbsoluteOffset):
        (JSC::BytecodeRewriter::adjustJumpTarget):
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::estimatedSize):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::addJITAddIC):
        (JSC::CodeBlock::addJITMulIC):
        (JSC::CodeBlock::addJITSubIC):
        (JSC::CodeBlock::addJITNegIC):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
        (JSC::CodeBlock::hasOpDebugForLineAndColumn):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::updateAllArrayPredictions):
        (JSC::CodeBlock::predictedMachineCodeSize):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        (JSC::CodeBlock::validate):
        (JSC::CodeBlock::outOfLineJumpOffset):
        (JSC::CodeBlock::outOfLineJumpTarget):
        (JSC::CodeBlock::arithProfileForBytecodeOffset):
        (JSC::CodeBlock::arithProfileForPC):
        (JSC::CodeBlock::couldTakeSpecialFastCase):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addMathIC):
        (JSC::CodeBlock::outOfLineJumpOffset):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::instructions const):
        (JSC::CodeBlock::instructionCount const):
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters):
        (JSC::CodeBlock::metadata):
        (JSC::CodeBlock::metadataSizeInBytes):
        (JSC::CodeBlock::numberOfNonArgumentValueProfiles):
        (JSC::CodeBlock::totalNumberOfValueProfiles):
        * bytecode/CodeBlockInlines.h: Added.
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        (JSC::CodeBlock::forEachArrayAllocationProfile):
        (JSC::CodeBlock::forEachObjectAllocationProfile):
        (JSC::CodeBlock::forEachLLIntCallLinkInfo):
        * bytecode/Fits.h: Added.
        * bytecode/GetByIdMetadata.h: Copied from Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h.
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        * bytecode/Instruction.h:
        (JSC::Instruction::Instruction):
        (JSC::Instruction::Impl::opcodeID const):
        (JSC::Instruction::opcodeID const):
        (JSC::Instruction::name const):
        (JSC::Instruction::isWide const):
        (JSC::Instruction::size const):
        (JSC::Instruction::is const):
        (JSC::Instruction::as const):
        (JSC::Instruction::cast):
        (JSC::Instruction::cast const):
        (JSC::Instruction::narrow const):
        (JSC::Instruction::wide const):
        * bytecode/InstructionStream.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::InstructionStream::InstructionStream):
        (JSC::InstructionStream::sizeInBytes const):
        * bytecode/InstructionStream.h: Added.
        (JSC::InstructionStream::BaseRef::BaseRef):
        (JSC::InstructionStream::BaseRef::operator=):
        (JSC::InstructionStream::BaseRef::operator-> const):
        (JSC::InstructionStream::BaseRef::ptr const):
        (JSC::InstructionStream::BaseRef::operator!= const):
        (JSC::InstructionStream::BaseRef::next const):
        (JSC::InstructionStream::BaseRef::offset const):
        (JSC::InstructionStream::BaseRef::isValid const):
        (JSC::InstructionStream::BaseRef::unwrap const):
        (JSC::InstructionStream::MutableRef::freeze const):
        (JSC::InstructionStream::MutableRef::operator->):
        (JSC::InstructionStream::MutableRef::ptr):
        (JSC::InstructionStream::MutableRef::operator Ref):
        (JSC::InstructionStream::MutableRef::unwrap):
        (JSC::InstructionStream::iterator::operator*):
        (JSC::InstructionStream::iterator::operator++):
        (JSC::InstructionStream::begin const):
        (JSC::InstructionStream::end const):
        (JSC::InstructionStream::at const):
        (JSC::InstructionStream::size const):
        (JSC::InstructionStreamWriter::InstructionStreamWriter):
        (JSC::InstructionStreamWriter::ref):
        (JSC::InstructionStreamWriter::seek):
        (JSC::InstructionStreamWriter::position):
        (JSC::InstructionStreamWriter::write):
        (JSC::InstructionStreamWriter::rewind):
        (JSC::InstructionStreamWriter::finalize):
        (JSC::InstructionStreamWriter::swap):
        (JSC::InstructionStreamWriter::iterator::operator*):
        (JSC::InstructionStreamWriter::iterator::operator++):
        (JSC::InstructionStreamWriter::begin):
        (JSC::InstructionStreamWriter::end):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::clearLLIntGetByIdCache):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * bytecode/MetadataTable.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::MetadataTable::MetadataTable):
        (JSC::DeallocTable::withOpcodeType):
        (JSC::MetadataTable::~MetadataTable):
        (JSC::MetadataTable::sizeInBytes):
        * bytecode/MetadataTable.h: Copied from Source/JavaScriptCore/runtime/Watchdog.h.
        (JSC::MetadataTable::get):
        (JSC::MetadataTable::forEach):
        (JSC::MetadataTable::getImpl):
        * bytecode/Opcode.cpp:
        (JSC::metadataSize):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * bytecode/OpcodeInlines.h:
        (JSC::isOpcodeShape):
        (JSC::getOpcodeType):
        * bytecode/OpcodeSize.h: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        * bytecode/PreciseJumpTargets.cpp:
        (JSC::getJumpTargetsForInstruction):
        (JSC::computePreciseJumpTargetsInternal):
        (JSC::computePreciseJumpTargets):
        (JSC::recomputePreciseJumpTargets):
        (JSC::findJumpTargetsForInstruction):
        * bytecode/PreciseJumpTargets.h:
        * bytecode/PreciseJumpTargetsInlines.h:
        (JSC::jumpTargetForInstruction):
        (JSC::extractStoredJumpTargetsForInstruction):
        (JSC::updateStoredJumpTargetsForInstruction):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        * bytecode/SpecialPointer.cpp:
        (WTF::printInternal):
        * bytecode/SpecialPointer.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::visitChildren):
        (JSC::UnlinkedCodeBlock::estimatedSize):
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset):
        (JSC::dumpLineColumnEntry):
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset const):
        (JSC::UnlinkedCodeBlock::setInstructions):
        (JSC::UnlinkedCodeBlock::instructions const):
        (JSC::UnlinkedCodeBlock::applyModification):
        (JSC::UnlinkedCodeBlock::addOutOfLineJumpTarget):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction):
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions const):
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset):
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets const):
        (JSC::UnlinkedCodeBlock::metadata):
        (JSC::UnlinkedCodeBlock::metadataSizeInBytes):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        (JSC::UnlinkedCodeBlock::replaceOutOfLineJumpTargets):
        * bytecode/UnlinkedInstructionStream.cpp: Removed.
        * bytecode/UnlinkedInstructionStream.h: Removed.
        * bytecode/UnlinkedMetadataTable.h: Copied from Source/JavaScriptCore/bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h.
        * bytecode/UnlinkedMetadataTableInlines.h: Added.
        (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::~UnlinkedMetadataTable):
        (JSC::UnlinkedMetadataTable::addEntry):
        (JSC::UnlinkedMetadataTable::sizeInBytes):
        (JSC::UnlinkedMetadataTable::finalize):
        (JSC::UnlinkedMetadataTable::link):
        (JSC::UnlinkedMetadataTable::unlink):
        * bytecode/VirtualRegister.cpp:
        (JSC::VirtualRegister::VirtualRegister):
        * bytecode/VirtualRegister.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::Label::setLocation):
        (JSC::Label::bind):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
        (JSC::BytecodeGenerator::emitEnter):
        (JSC::BytecodeGenerator::emitLoopHint):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitCheckTraps):
        (JSC::BytecodeGenerator::rewind):
        (JSC::BytecodeGenerator::fuseCompareAndJump):
        (JSC::BytecodeGenerator::fuseTestAndJmp):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::moveLinkTimeConstant):
        (JSC::BytecodeGenerator::moveEmptyValue):
        (JSC::BytecodeGenerator::emitMove):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitBinaryOp):
        (JSC::BytecodeGenerator::emitToObject):
        (JSC::BytecodeGenerator::emitToNumber):
        (JSC::BytecodeGenerator::emitToString):
        (JSC::BytecodeGenerator::emitTypeOf):
        (JSC::BytecodeGenerator::emitInc):
        (JSC::BytecodeGenerator::emitDec):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitProfileType):
        (JSC::BytecodeGenerator::emitProfileControlFlow):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::emitResolveScopeForHoistingFuncDeclInEval):
        (JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration):
        (JSC::BytecodeGenerator::emitOverridesHasInstance):
        (JSC::BytecodeGenerator::emitResolveScope):
        (JSC::BytecodeGenerator::emitGetFromScope):
        (JSC::BytecodeGenerator::emitPutToScope):
        (JSC::BytecodeGenerator::emitInstanceOf):
        (JSC::BytecodeGenerator::emitInstanceOfCustom):
        (JSC::BytecodeGenerator::emitInByVal):
        (JSC::BytecodeGenerator::emitInById):
        (JSC::BytecodeGenerator::emitTryGetById):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitDirectGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitPutGetterById):
        (JSC::BytecodeGenerator::emitPutSetterById):
        (JSC::BytecodeGenerator::emitPutGetterSetter):
        (JSC::BytecodeGenerator::emitPutGetterByVal):
        (JSC::BytecodeGenerator::emitPutSetterByVal):
        (JSC::BytecodeGenerator::emitDeleteById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitPutByVal):
        (JSC::BytecodeGenerator::emitDirectPutByVal):
        (JSC::BytecodeGenerator::emitDeleteByVal):
        (JSC::BytecodeGenerator::emitSuperSamplerBegin):
        (JSC::BytecodeGenerator::emitSuperSamplerEnd):
        (JSC::BytecodeGenerator::emitIdWithProfile):
        (JSC::BytecodeGenerator::emitUnreachable):
        (JSC::BytecodeGenerator::emitGetArgument):
        (JSC::BytecodeGenerator::emitCreateThis):
        (JSC::BytecodeGenerator::emitTDZCheck):
        (JSC::BytecodeGenerator::emitNewObject):
        (JSC::BytecodeGenerator::emitNewArrayBuffer):
        (JSC::BytecodeGenerator::emitNewArray):
        (JSC::BytecodeGenerator::emitNewArrayWithSpread):
        (JSC::BytecodeGenerator::emitNewArrayWithSize):
        (JSC::BytecodeGenerator::emitNewRegExp):
        (JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
        (JSC::BytecodeGenerator::emitNewDefaultConstructor):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallInTailPosition):
        (JSC::BytecodeGenerator::emitCallEval):
        (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitCallVarargsInTailPosition):
        (JSC::BytecodeGenerator::emitConstructVarargs):
        (JSC::BytecodeGenerator::emitCallForwardArgumentsInTailPosition):
        (JSC::BytecodeGenerator::emitLogShadowChickenPrologueIfNecessary):
        (JSC::BytecodeGenerator::emitLogShadowChickenTailIfNecessary):
        (JSC::BytecodeGenerator::emitCallDefineProperty):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitEnd):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitStrcat):
        (JSC::BytecodeGenerator::emitToPrimitive):
        (JSC::BytecodeGenerator::emitGetScope):
        (JSC::BytecodeGenerator::emitPushWithScope):
        (JSC::BytecodeGenerator::emitGetParentScope):
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitThrow):
        (JSC::BytecodeGenerator::emitArgumentCount):
        (JSC::BytecodeGenerator::emitThrowStaticError):
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::prepareJumpTableForSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::BytecodeGenerator::emitGetEnumerableLength):
        (JSC::BytecodeGenerator::emitHasGenericProperty):
        (JSC::BytecodeGenerator::emitHasIndexedProperty):
        (JSC::BytecodeGenerator::emitHasStructureProperty):
        (JSC::BytecodeGenerator::emitGetPropertyEnumerator):
        (JSC::BytecodeGenerator::emitEnumeratorStructurePropertyName):
        (JSC::BytecodeGenerator::emitEnumeratorGenericPropertyName):
        (JSC::BytecodeGenerator::emitToIndexString):
        (JSC::BytecodeGenerator::emitIsCellWithType):
        (JSC::BytecodeGenerator::emitIsObject):
        (JSC::BytecodeGenerator::emitIsNumber):
        (JSC::BytecodeGenerator::emitIsUndefined):
        (JSC::BytecodeGenerator::emitIsEmpty):
        (JSC::BytecodeGenerator::emitRestParameter):
        (JSC::BytecodeGenerator::emitRequireObjectCoercible):
        (JSC::BytecodeGenerator::emitYieldPoint):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitGetAsyncIterator):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::emitJumpIf):
        (JSC::ForInContext::finalize):
        (JSC::StructureForInContext::finalize):
        (JSC::IndexedForInContext::finalize):
        (JSC::StaticPropertyAnalysis::record):
        (JSC::BytecodeGenerator::emitToThis):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::StructureForInContext::addGetInst):
        (JSC::BytecodeGenerator::recordOpcode):
        (JSC::BytecodeGenerator::addMetadataFor):
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::kill):
        (JSC::BytecodeGenerator::instructions const):
        (JSC::BytecodeGenerator::write):
        (JSC::BytecodeGenerator::withWriter):
        * bytecompiler/Label.h:
        (JSC::Label::Label):
        (JSC::Label::bind):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_argumentCount):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        (JSC::BitwiseNotNode::emitBytecode):
        (JSC::BinaryOpNode::emitBytecode):
        (JSC::EqualNode::emitBytecode):
        (JSC::StrictEqualNode::emitBytecode):
        (JSC::emitReadModifyAssignment):
        (JSC::ForInNode::emitBytecode):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::FunctionNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        * bytecompiler/ProfileTypeBytecodeFlag.cpp: Copied from Source/JavaScriptCore/bytecode/VirtualRegister.cpp.
        (WTF::printInternal):
        * bytecompiler/ProfileTypeBytecodeFlag.h: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        * bytecompiler/RegisterID.h:
        * bytecompiler/StaticPropertyAnalysis.h:
        (JSC::StaticPropertyAnalysis::create):
        (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis):
        * bytecompiler/StaticPropertyAnalyzer.h:
        (JSC::StaticPropertyAnalyzer::createThis):
        (JSC::StaticPropertyAnalyzer::newObject):
        (JSC::StaticPropertyAnalyzer::putById):
        (JSC::StaticPropertyAnalyzer::mov):
        (JSC::StaticPropertyAnalyzer::kill):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getArrayMode):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleVarargsCall):
        (JSC::DFG::ByteCodeParser::handleRecursiveTailCall):
        (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::handlePutById):
        (JSC::DFG::ByteCodeParser::parseGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ByteCodeParser::handlePutAccessorById):
        (JSC::DFG::ByteCodeParser::handlePutAccessorByVal):
        (JSC::DFG::ByteCodeParser::handleNewFunc):
        (JSC::DFG::ByteCodeParser::handleNewFuncExp):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareCatchOSREntry):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileArithMul):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * generate-bytecode-files: Removed.
        * generator/Argument.rb: Added.
        * generator/Assertion.rb: Added.
        * generator/DSL.rb: Added.
        * generator/Fits.rb: Added.
        * generator/GeneratedFile.rb: Added.
        * generator/Metadata.rb: Added.
        * generator/Opcode.rb: Added.
        * generator/OpcodeGroup.rb: Added.
        * generator/Options.rb: Added.
        * generator/Section.rb: Added.
        * generator/Template.rb: Added.
        * generator/Type.rb: Added.
        * generator/main.rb: Added.
        * interpreter/AbstractPC.h:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::currentVPC const):
        (JSC::CallFrame::setCurrentVPC):
        * interpreter/CallFrame.h:
        (JSC::CallSiteIndex::CallSiteIndex):
        (JSC::ExecState::setReturnPC):
        * interpreter/Interpreter.cpp:
        (WTF::printInternal):
        * interpreter/Interpreter.h:
        * interpreter/InterpreterInlines.h:
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::dump const):
        * interpreter/VMEntryRecord.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitSlowCaseCall):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::compileWithoutLinking):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emit_op_jlesseq):
        (JSC::JIT::emit_op_jgreater):
        (JSC::JIT::emit_op_jgreatereq):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emit_op_jngreater):
        (JSC::JIT::emit_op_jngreatereq):
        (JSC::JIT::emitSlow_op_jless):
        (JSC::JIT::emitSlow_op_jlesseq):
        (JSC::JIT::emitSlow_op_jgreater):
        (JSC::JIT::emitSlow_op_jgreatereq):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jngreater):
        (JSC::JIT::emitSlow_op_jngreatereq):
        (JSC::JIT::emit_op_below):
        (JSC::JIT::emit_op_beloweq):
        (JSC::JIT::emit_op_jbelow):
        (JSC::JIT::emit_op_jbeloweq):
        (JSC::JIT::emit_op_unsigned):
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_inc):
        (JSC::JIT::emit_op_dec):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):
        (JSC::JIT::emitBitBinaryOpFastPath):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShiftFastPath):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emit_op_urshift):
        (JSC::getOperandTypes):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_call):
        (JSC::JIT::emit_op_tail_call):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_call_varargs):
        (JSC::JIT::emit_op_tail_call_varargs):
        (JSC::JIT::emit_op_tail_call_forward_arguments):
        (JSC::JIT::emit_op_construct_varargs):
        (JSC::JIT::emit_op_construct):
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_tail_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_varargs):
        (JSC::JIT::emitSlow_op_tail_call_forward_arguments):
        (JSC::JIT::emitSlow_op_construct_varargs):
        (JSC::JIT::emitSlow_op_construct):
        * jit/JITDisassembler.cpp:
        (JSC::JITDisassembler::JITDisassembler):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITInlines.h:
        (JSC::JIT::emitDoubleGetByVal):
        (JSC::JIT::emitLoadForArrayMode):
        (JSC::JIT::emitContiguousGetByVal):
        (JSC::JIT::emitArrayStorageGetByVal):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::sampleInstruction):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::jumpTarget):
        (JSC::JIT::copiedGetPutInfo):
        (JSC::JIT::copiedArithProfile):
        * jit/JITMathIC.h:
        (JSC::isProfileEmpty):
        (JSC::JITBinaryMathIC::JITBinaryMathIC):
        (JSC::JITUnaryMathIC::JITUnaryMathIC):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_instanceof_custom):
        (JSC::JIT::emit_op_is_empty):
        (JSC::JIT::emit_op_is_undefined):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_cell_with_type):
        (JSC::JIT::emit_op_is_object):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_jeq):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emit_op_jneq):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_jstricteq):
        (JSC::JIT::emit_op_jnstricteq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_string):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_identity_with_profile):
        (JSC::JIT::emit_op_get_parent_scope):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_get_scope):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_check_tdz):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::emit_op_check_traps):
        (JSC::JIT::emit_op_nop):
        (JSC::JIT::emit_op_super_sampler_begin):
        (JSC::JIT::emit_op_super_sampler_end):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emit_op_new_func):
        (JSC::JIT::emit_op_new_generator_func):
        (JSC::JIT::emit_op_new_async_generator_func):
        (JSC::JIT::emit_op_new_async_func):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_func_exp):
        (JSC::JIT::emit_op_new_generator_func_exp):
        (JSC::JIT::emit_op_new_async_func_exp):
        (JSC::JIT::emit_op_new_async_generator_func_exp):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_indexed_property):
        (JSC::JIT::emitSlow_op_has_indexed_property):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_prologue):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_argument_count):
        (JSC::JIT::emit_op_get_rest_length):
        (JSC::JIT::emit_op_get_argument):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_to_this):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitGetByValWithCachedId):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val_direct):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_put_to_arguments):
        (JSC::JIT::privateCompileGetByVal):
        (JSC::JIT::privateCompileGetByValWithCachedId):
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        (JSC::JIT::emitDoubleLoad):
        (JSC::JIT::emitContiguousLoad):
        (JSC::JIT::emitArrayStorageLoad):
        (JSC::JIT::emitDirectArgumentsGetByVal):
        (JSC::JIT::emitScopedArgumentsGetByVal):
        (JSC::JIT::emitIntTypedArrayGetByVal):
        (JSC::JIT::emitFloatTypedArrayGetByVal):
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        * jit/SlowPathCall.h:
        (JSC::JITSlowPathCall::JITSlowPathCall):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntData.h:
        (JSC::LLInt::exceptionInstructions):
        (JSC::LLInt::opcodeMap):
        (JSC::LLInt::opcodeMapWide):
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide):
        (JSC::LLInt::getWideCodePtr):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::llint_trace_operand):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::setupGetByIdPrototypeCache):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::genericCall):
        (JSC::LLInt::varargsSetup):
        (JSC::LLInt::commonCallEval):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        (JSC::CLoopRegister::operator const Instruction*):
        (JSC::CLoop::execute):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/asm.rb:
        * offlineasm/ast.rb:
        * offlineasm/cloop.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/instructions.rb:
        * offlineasm/offsets.rb:
        * offlineasm/parser.rb:
        * offlineasm/transform.rb:
        * offlineasm/x86.rb:
        * parser/ResultType.h:
        (JSC::ResultType::dump const):
        (JSC::OperandTypes::first const):
        (JSC::OperandTypes::second const):
        (JSC::OperandTypes::dump const):
        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::BytecodeSequence):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::updateArithProfileForBinaryArithOp):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/ExceptionFuzz.cpp:
        (JSC::doExceptionFuzzing):
        * runtime/ExceptionFuzz.h:
        (JSC::doExceptionFuzzingIfEnabled):
        * runtime/GetPutInfo.cpp: Copied from Source/JavaScriptCore/bytecode/SpecialPointer.cpp.
        (JSC::GetPutInfo::dump const):
        (WTF::printInternal):
        * runtime/GetPutInfo.h:
        (JSC::GetPutInfo::operand const):
        * runtime/JSCPoison.h:
        * runtime/JSType.cpp: Added.
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::displayName):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::UnprocessedStackFrame::UnprocessedStackFrame):
        * runtime/SlowPathReturnType.h:
        (JSC::encodeResult):
        (JSC::decodeResult):
        * runtime/VM.h:
        * runtime/Watchdog.h:
        * tools/HeapVerifier.cpp:

2018-10-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237445.
        https://bugs.webkit.org/show_bug.cgi?id=190972

        Cause performance regression on iOS devices (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "Unreviewed, partial rolling in r237254"
        https://bugs.webkit.org/show_bug.cgi?id=190340
        https://trac.webkit.org/changeset/237445

2018-10-26  Mark Lam  <mark.lam@apple.com>

        Fix missing edge cases with JSGlobalObjects having a bad time.
        https://bugs.webkit.org/show_bug.cgi?id=189028
        <rdar://problem/45204939>

        Reviewed by Saam Barati.

        Consider the following scenario:

            let object O1 (of global G1) have an indexing type that is not SlowPut.
            let global G2 have a bad time.
            let object O2 (of global G2) be set as the prototype of O1.
            let object O3 (of global G2) have indexed accessors.

        In the existing code, if we set O3 as O2's prototype, we'll have a bug where
        O1 will not be made aware that that there are indexed accessors in its prototype
        chain.

        In this patch, we solve this issue by introducing a new invariant:

            A prototype chain is considered to possibly have indexed accessors if any
            object in the chain belongs to a global object that is having a bad time.

        We apply this invariant as follows:

        1. Enhance JSGlobalObject::haveABadTime() to also check if other global objects are
           affected by it having a bad time.  If so, it also ensures that those affected
           global objects have a bad time.

           The original code for JSGlobalObject::haveABadTime() uses a ObjectsWithBrokenIndexingFinder
           to find all objects affected by the global object having a bad time.  We enhance
           ObjectsWithBrokenIndexingFinder to also check for the possibility that any global
           objects may be affected by other global objects having a bad time i.e.

                let g1 = global1
                let g2 = global2
                let o1 = an object in g1
                let o2 = an object in g2

                let g1 have a bad time
                g2 is affected if
                    o1 is in the prototype chain of o2,
                    and o2 may be a prototype.

           If the ObjectsWithBrokenIndexingFinder does find the possibility of other global
           objects being affected, it will abort its heap scan and let haveABadTime() take
           a slow path to do a more complete multi global object scan.

           The slow path works as follows:

           1. Iterate the heap and record the graph of all global object dependencies.

              For each global object, record the list of other global objects that are
              affected by it.

           2. Compute a list of global objects that need to have a bad time using the
              current global object dependency graph.

           3. For each global object in the list of affected global objects, fire their
              HaveABadTime watchpoint and convert all their array structures to the
              SlowPut alternatives.

           4. Re-run ObjectsWithBrokenIndexingFinder to find all objects that are affected
              by any of the globals in the list from (2).

        2. Enhance Structure::mayInterceptIndexedAccesses() to also return true if the
           structure's global object is having a bad time.

        Note: there are 3 scenarios that we need to consider:

            let g1 = global1
            let g2 = global2
            let o1 = an object in g1
            let o2 = an object in g2

            Scenario 1: o2 is a prototype, and
                        g1 has a bad time after o1 is inserted into the o2's prototype chain.

            Scenario 2: o2 is a prototype, and
                        o1 is inserted into the o2's prototype chain after g1 has a bad time.

            Scenario 3: o2 is NOT a prototype, and
                        o1 is inserted into the o2's prototype chain after g1 has a bad time.

            For scenario 1, when g1 has a bad time, we need to also make sure g2 has
            a bad time.  This is handled by enhancement 1 above.

            For scenario 2, when o1 is inserted into o2's prototype chain, we need to check
            if o1's global object has a bad time.  If so, then we need to make sure o2's
            global also has a bad time (because o2 is a prototype) and convert o2's
            storage type to SlowPut.  This is handled by enhancement 2 above in conjunction
            with JSObject::setPrototypeDirect().

            For scenario 3, when o1 is inserted into o2's prototype chain, we need to check
            if o1's global object has a bad time.  If so, then we only need to convert o2's
            storage type to SlowPut (because o2 is NOT a prototype).  This is handled by
            enhancement 2 above.

        3. Also add $vm.isHavingABadTime(), $vm.createGlobalObject() to enable us to
           write some tests for this issue.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::fireWatchpointAndMakeAllArrayStructuresSlowPut):
        (JSC::JSGlobalObject::haveABadTime):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.h:
        (JSC::JSObject::mayInterceptIndexedAccesses): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::mayInterceptIndexedAccesses):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::mayInterceptIndexedAccesses const):
        * tools/JSDollarVM.cpp:
        (JSC::functionHaveABadTime):
        (JSC::functionIsHavingABadTime):
        (JSC::functionCreateGlobalObject):
        (JSC::JSDollarVM::finishCreation):

2018-10-26  Keith Miller  <keith_miller@apple.com>

        JSC xcconfig should set DEFINES_MODULE
        https://bugs.webkit.org/show_bug.cgi?id=190952

        Reviewed by Mark Lam.

        This should mean that the JavaScriptCore.framework will have a module map.

        * Configurations/JavaScriptCore.xcconfig:

2018-10-25  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] havingABadTimeWatchpoint is not required in Array#indexOf optimization
        https://bugs.webkit.org/show_bug.cgi?id=190941

        Reviewed by Saam Barati.

        While "Rest" operation fast path requires havingABadTimeWatchpoint since it allocates
        JSArray, Array#{indexOf,lastIndexOf} do not require it when we use the fast path for them.
        This patch removes watching on havingABadTimeWatchpoint in Array#indexOf. The test causing
        "havingABadTime" is already included in our test suites (e.g. array-indexof-have-a-bad-time.js).

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * runtime/JSArrayInlines.h:
        (JSC::JSArray::canDoFastIndexedAccess):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectInlines.h:
        (JSC::JSGlobalObject::isArrayPrototypeIteratorProtocolFastAndNonObservable):
        (JSC::JSGlobalObject::isArrayPrototypeIndexedAccessFastAndNonObservable): Deleted.

2018-10-25  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, partial rolling in r237254
        https://bugs.webkit.org/show_bug.cgi?id=190340

        We do not use the added function right now to investigate what is the reason of the regression.
        If it causes the regression, it seems that Parser.cpp's inlining decision seems culprit.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        (JSC::parseFunctionForFunctionConstructor):
        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        (JSC::JSTextPosition::JSTextPosition):
        (JSC::JSTokenLocation::JSTokenLocation): Deleted.
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-10-25  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix for Visual Studio 2017

        * API/tests/testapi.c:
        (testMarkingConstraintsAndHeapFinalizers):
        (main):

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: display fullscreen enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=189874
        <rdar://problem/44700000>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOM.json:
        Allow `data` to be passed to the frontend with `didFireEvent`.

2018-10-25  Ross Kirsling  <ross.kirsling@sony.com>

        Cleanup: inline constexpr is redundant as constexpr implies inline
        https://bugs.webkit.org/show_bug.cgi?id=190819

        Reviewed by Mark Lam.

        * bytecode/ArrayProfile.h:
        (JSC::asArrayModes):
        * runtime/IndexingType.h:
        (JSC::isCopyOnWrite):
        * runtime/MathCommon.h:
        (JSC::maxSafeInteger):
        (JSC::minSafeInteger):
        * runtime/StackAlignment.h:
        (JSC::stackAlignmentBytes):
        (JSC::stackAlignmentRegisters):

2018-10-24  Megan Gardner  <megan_gardner@apple.com>

        Turn on Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=190810

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2018-10-24  Michael Saboff  <msaboff@apple.com>

        Increase executable memory pool from 64MB to 128MB for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=190453

        Unreviewed, rolling back in r237024.

        The original change did impact ARES-6 performance by 4-8%.  That will
        be investigated separately.

2018-10-22  Keith Rollin  <krollin@apple.com>

        Use Location = "Relative to Build Products" rather than "Relative to Group"
        https://bugs.webkit.org/show_bug.cgi?id=190781

        Reviewed by Alexey Proskuryakov.

        Almost all Derived Files are included in Xcode projects with the
        Location attribute set to "Relative to Group". While this currently
        works, the Derived Files can no longer be found when enabling XCBuild
        (which has stricter requirements). Fix this by setting the Location
        attribute to "Relative to Build Products".

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-10-22  Mark Lam  <mark.lam@apple.com>

        DFGAbstractValue::m_arrayModes expects IndexingMode values, not IndexingType.
        https://bugs.webkit.org/show_bug.cgi?id=190515
        <rdar://problem/45222379>

        Reviewed by Saam Barati.

        1. Fixes calls to asArrayModes() to take a structure's IndexingMode instead of
           IndexingType.

        2. DFG's compileNewArrayBuffer()'s HaveABadTime case was previously using the
           node's indexingType (instead of indexingMode) to choose the array structure
           to use for creating an array buffer with.  This turns out to not be an issue
           because when the VM is in having a bad time, all the
           arrayStructureForIndexingTypeDuringAllocation structure pointers will point to
           the SlowPutArrayStorage structure anyway.  However, to be strictly correct,
           we'll fix it to use the structure for the node's indexingMode.

        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::mergeOSREntryValue):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::validate const):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::executeOSRExit):
        * dfg/DFGRegisteredStructureSet.cpp:
        (JSC::DFG::RegisteredStructureSet::arrayModesFromStructures const):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewArrayBuffer):

2018-10-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237254.
        https://bugs.webkit.org/show_bug.cgi?id=190760

        "It regresses JetStream 2 by 5% on some iOS devices"
        (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "[JSC] JSC should have "parseFunction" to optimize Function
        constructor"
        https://bugs.webkit.org/show_bug.cgi?id=190340
        https://trac.webkit.org/changeset/237254

2018-10-19  Saam Barati  <sbarati@apple.com>

        vmCall should check if we exit before emitting an OSR exit due to exceptions
        https://bugs.webkit.org/show_bug.cgi?id=190740
        <rdar://problem/45220139>

        Reviewed by Mark Lam.

        The bug we were seeing is the MovHint removal phase would
        eliminate a superfluous MovHint. This left a certain range
        of nodes in a state where they would not be able to reconstruct
        values for an OSR exit. This is OK, since this phase proved those
        nodes don't exit. However, some of these nodes may use the vmCall
        construct in FTLLower. vmCall used to unconditionally emit an
        exception check after each call. However, if such a call happens
        in the range of nodes where we can't exit, we would end up generating
        an invalid exit (and running with validateFTLOSRExitLiveness flag
        would find this issue).
        
        This patch makes vmCall check to see if the node can exit before
        emitting an exception check. A node not being able to exit implies
        that it can't exit for exceptions, therefore, by definition, it can't
        throw an exception.

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

2018-10-19  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement support for "^"
        https://bugs.webkit.org/show_bug.cgi?id=186235

        Reviewed by Yusuke Suzuki.

        This patch is introducing support for BigInt into bitwise xor
        operation. We are including only support into LLInt and Baseline.

        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::bitwiseXor):
        (JSC::JSBigInt::absoluteXor):
        * runtime/JSBigInt.h:

2018-10-19  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueSub into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186176

        Reviewed by Yusuke Suzuki.

        We are introducing in this patch a new node called ValueSub. This node
        is necessary due to introduction of BigInt, making subtraction
        operations result in non-Number values in some cases. In such case, ValueSub is
        responsible to handle Untyped and BigInt operations.
        In addition, we are also creating a speculative path when both
        operands are BigInt. According to a simple BigInt subtraction microbenchmark,
        this represents a speedup of ~1.2x faster.

        big-int-simple-sub    14.6427+-0.5652    ^    11.9559+-0.6485   ^   definitely 1.2247x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addSpeculationMode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        * 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::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):

2018-10-18  Alexey Proskuryakov  <ap@apple.com>

        Switch from PLATFORM(IOS) to PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=190729

        Reviewed by Tim Horton.

        * API/JSBase.cpp:
        * API/JSWrapperMap.mm:
        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::cacheFlush):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::cacheFlush):
        * assembler/AssemblerCommon.h:
        (JSC::isIOS):
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        * heap/Heap.cpp:
        (JSC::Heap::overCriticalMemoryThreshold):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::collectIfNecessaryOrDefer):
        * heap/Heap.h:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::dispatchAsyncOnTarget):
        * jit/ExecutableAllocator.cpp:
        (JSC::allowJIT):
        * jit/ExecutableAllocator.h:
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::reservedHardwareRegisters):
        (JSC::RegisterSet::calleeSaveRegisters):
        * jit/ThunkGenerators.cpp:
        * jsc.cpp:
        (main):
        * runtime/MathCommon.cpp:
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:

2018-10-18  Ross Kirsling  <ross.kirsling@sony.com>

        delete expression should not throw without a reference
        https://bugs.webkit.org/show_bug.cgi?id=190637

        Reviewed by Yusuke Suzuki.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseUnaryExpression):
        Eliminate non-spec-compliant switch case.

2018-10-18  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] JSC should have "parseFunction" to optimize Function constructor
        https://bugs.webkit.org/show_bug.cgi?id=190340

        Reviewed by Mark Lam.

        The current Function constructor is suboptimal. We parse the piece of the same code three times to meet
        the spec requirement. (1) check parameters syntax, (2) check body syntax, and (3) parse the entire function.
        And to parse 1-3 correctly, we create two strings, the parameters and the entire function. This operation
        is really costly and ideally we should meet the above requirement by the one time parsing.

        To meet the above requirement, we add a special function for Parser, parseSingleFunction. This function
        takes `std::optional<int> functionConstructorParametersEndPosition` and check this end position is correct in the parser.
        For example, if we run the code,

            Function('/*', '*/){')

        According to the spec, this should produce '/*' parameter string and '*/){' body string. And parameter
        string should be syntax-checked by the parser, and raise the error since it is incorrect. Instead of doing
        that, in our implementation, we first create the entire string.

            function anonymous(/*) {
                */){
            }

        And we parse it. At that time, we also pass the end position of the parameters to the parser. In the above case,
        the position of the `function anonymous(/*)' <> is passed. And in the parser, we check that the last token
        offset of the parameters is the given end position. This check allows us to raise the error correctly to the
        above example while we parse the entire function only once. And we do not need to create two strings too.

        This improves the performance of the Function constructor significantly. And web-tooling-benchmark/uglify-js is
        significantly sped up (28.2%).

        Before:
            uglify-js:  2.94 runs/s
        After:
            uglify-js:  3.77 runs/s

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        (JSC::parseFunctionForFunctionConstructor):
        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        (JSC::JSTextPosition::JSTextPosition):
        (JSC::JSTokenLocation::JSTokenLocation): Deleted.
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237242.
        https://bugs.webkit.org/show_bug.cgi?id=190701

        it breaks "stress/sampling-profiler-basic.js" (Requested by
        caiolima on #webkit).

        Reverted changeset:

        "[BigInt] Add ValueSub into DFG"
        https://bugs.webkit.org/show_bug.cgi?id=186176
        https://trac.webkit.org/changeset/237242

2018-10-18  Takafumi Kubota  <takafumi.kubota1012@sslab.ics.keio.ac.jp>

        Missing #pragma once in WasmOpcodeOrigin.h
        https://bugs.webkit.org/show_bug.cgi?id=190699

        Reviewed by Yusuke Suzuki.

        This patch add ''#pragma once'' into WasmOpcodeOrigin.h to avoid the
        multiple inclusion that can happen in the unified build
        configuration.

        * wasm/WasmOpcodeOrigin.h:

2018-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Enable the datalist element by default on iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=190594
        <rdar://problem/45281159>

        Reviewed by Ryosuke Niwa and Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2018-10-17  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueSub into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186176

        Reviewed by Yusuke Suzuki.

        We are introducing in this patch a new node called ValueSub. This node
        is necessary due to introduction of BigInt, making subtraction
        operations result in non-Number values in some cases. In such case, ValueSub is
        responsible to handle Untyped and BigInt operations.
        In addition, we are also creating a speculative path when both
        operands are BigInt. According to a simple BigInt subtraction microbenchmark,
        this represents a speedup of ~1.2x faster.

        big-int-simple-sub    14.6427+-0.5652    ^    11.9559+-0.6485   ^   definitely 1.2247x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addSpeculationMode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        * 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::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):

2018-10-17  Mark Lam  <mark.lam@apple.com>

        The parser should not emit a ApplyFunctionCallDotNode for Reflect.apply.
        https://bugs.webkit.org/show_bug.cgi?id=190671
        <rdar://problem/45201145>

        Reviewed by Saam Barati.

        The bytecode generator does not currently know how to inline Reflect.apply (see
        https://bugs.webkit.org/show_bug.cgi?id=190668).  Hence, it's a waste of time to
        emit the ApplyFunctionCallDotNode since the function check against Function.apply
        that it will generate will always fail.

        Also fixed CallVariant::dump() to be able to handle dumping a non-executable
        callee.  Reflect.apply used to trip this up.  Any object with an apply property
        invoked as a function could also trip this up.  This is now fixed.

        * bytecode/CallVariant.cpp:
        (JSC::CallVariant::dump const):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeFunctionCallNode):

2018-10-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237024.
        https://bugs.webkit.org/show_bug.cgi?id=190673

        "It regressed ARES6 on iOS devices by 4-8%" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "Increase executable memory pool from 64MB to 128MB for ARM64"
        https://bugs.webkit.org/show_bug.cgi?id=190453
        https://trac.webkit.org/changeset/237024

2018-10-17  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Use WTF::Function instead of std::function
        https://bugs.webkit.org/show_bug.cgi?id=190665

        Reviewed by Keith Miller.

        We should use WTF::Function as much as possible. It allocates memory from bmalloc instead of standard malloc.

        * runtime/JSNativeStdFunction.h:

2018-10-17  Keith Miller  <keith_miller@apple.com>

        Remove debug logging from generate_offsets_extractor.rb
        https://bugs.webkit.org/show_bug.cgi?id=190667

        Reviewed by Mark Lam.

        * offlineasm/generate_offset_extractor.rb:

2018-10-17  Keith Miller  <keith_miller@apple.com>

        AI does not clear Phantom allocation nodes.
        https://bugs.webkit.org/show_bug.cgi?id=190694

        Reviewed by Saam Barati.

        Phantom nodes claim to have a result so they should make sure they clear
        their abstract values.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2018-10-17  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix windows build.

        * offlineasm/generate_offset_extractor.rb:

2018-10-17  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] More aggressively use `constexpr` in LowLevelInterpreter.asm for constant values
        https://bugs.webkit.org/show_bug.cgi?id=190659

        Reviewed by Keith Miller.

        Asking the actual constant value to the JSC binary is always the best way to get the correct value.
        The value is correctly updated once the original value is changed. We would like to encourage this
        approach more in LowLevelInterpreter.asm.

        This patch expands the coverage of this approach. We make ObservedType, ResultType, and ArithProfile
        constexpr-friendly to produce the magic value used in LowLevelInterpreter.asm at compiling time.
        This change allows us to easily extend ArithProfile in the future to adopt BigInt efficiently.

        We additionally use `constexpr` for several constant values in LowLevelInterpreter.asm.

        * assembler/MaxFrameExtentForSlowPathCall.h:
        Use this value in LowLevelInterpreter.asm directly. We also make them constexpr. And we add CPU(ARM64E).

        * bytecode/ArithProfile.h:
        (JSC::ObservedType::ObservedType):
        (JSC::ObservedType::sawInt32 const):
        (JSC::ObservedType::isOnlyInt32 const):
        (JSC::ObservedType::sawNumber const):
        (JSC::ObservedType::isOnlyNumber const):
        (JSC::ObservedType::sawNonNumber const):
        (JSC::ObservedType::isOnlyNonNumber const):
        (JSC::ObservedType::isEmpty const):
        (JSC::ObservedType::bits const):
        (JSC::ObservedType::withInt32 const):
        (JSC::ObservedType::withNumber const):
        (JSC::ObservedType::withNonNumber const):
        (JSC::ObservedType::withoutNonNumber const):
        (JSC::ObservedType::operator== const):
        (JSC::ArithProfile::ArithProfile):
        (JSC::ArithProfile::fromInt):
        (JSC::ArithProfile::observedUnaryInt):
        (JSC::ArithProfile::observedUnaryNumber):
        (JSC::ArithProfile::observedBinaryIntInt):
        (JSC::ArithProfile::observedBinaryNumberInt):
        (JSC::ArithProfile::observedBinaryIntNumber):
        (JSC::ArithProfile::observedBinaryNumberNumber):
        (JSC::ArithProfile::lhsObservedType const):
        (JSC::ArithProfile::rhsObservedType const):
        (JSC::ArithProfile::bits const):
        Make ObservedType and ArithProfile constexpr-friendly.

        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        Make several ASSERTs to STATIC_ASSERTs. Remove some unnecessary checks.
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LowLevelInterpreter.asm:
        Remove unused constant values. Use constexpr more and more aggressively.

        * parser/ResultType.h:
        (JSC::ResultType::ResultType):
        (JSC::ResultType::isInt32 const):
        (JSC::ResultType::definitelyIsNumber const):
        (JSC::ResultType::definitelyIsString const):
        (JSC::ResultType::definitelyIsBoolean const):
        (JSC::ResultType::definitelyIsBigInt const):
        (JSC::ResultType::mightBeNumber const):
        (JSC::ResultType::isNotNumber const):
        (JSC::ResultType::mightBeBigInt const):
        (JSC::ResultType::isNotBigInt const):
        (JSC::ResultType::nullType):
        (JSC::ResultType::booleanType):
        (JSC::ResultType::numberType):
        (JSC::ResultType::numberTypeIsInt32):
        (JSC::ResultType::stringOrNumberType):
        (JSC::ResultType::addResultType):
        (JSC::ResultType::stringType):
        (JSC::ResultType::bigIntType):
        (JSC::ResultType::unknownType):
        (JSC::ResultType::forAdd):
        (JSC::ResultType::forLogicalOp):
        (JSC::ResultType::forBitOp):
        (JSC::ResultType::bits const):
        Make ResultType constexpr-friendly.

        * runtime/JSCJSValue.h:
        Use offsetof instead of OBJECT_OFFSETOF. It is OK since EncodedValueDescriptor is POD.
        This change makes TagOffset and PayloadOffset macros constexpr-friendly while OBJECT_OFFSETOF
        cannot be used in constexpr since it uses reinterpret_cast.

2018-10-17  Keith Miller  <keith_miller@apple.com>

        Unreviewed revert Fujii's revert in r237214 with new WinCairo build fix.

2018-10-16  Mark Lam  <mark.lam@apple.com>

        GetIndexedPropertyStorage can GC.
        https://bugs.webkit.org/show_bug.cgi?id=190625
        <rdar://problem/45309366>

        Reviewed by Saam Barati.

        This is because if the ArrayMode type is String, the DFG and FTL will be emitting
        a call to operationResolveRope, and operationResolveRope can GC.  This patch
        updates doesGC() to reflect this.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):

2018-10-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r237188, r237189, and r237197.

        It breaks WinCairo Debug builds and Release LayoutTests

        Reverted changesets:

        https://bugs.webkit.org/show_bug.cgi?id=189708
        https://trac.webkit.org/changeset/237188

        "Unreviewed, forgot to add untracked files."
        https://trac.webkit.org/changeset/237189

        "isASTErroneous in offlineasm should de-macroify before
        looking for Errors"
        https://bugs.webkit.org/show_bug.cgi?id=190634
        https://trac.webkit.org/changeset/237197

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture previously saved states and add them to the recording payload
        https://bugs.webkit.org/show_bug.cgi?id=190473

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Recording.json:
        Add `states` key to `InitialState` object.

2018-10-16  Keith Miller  <keith_miller@apple.com>

        isASTErroneous in offlineasm should de-macroify before looking for Errors
        https://bugs.webkit.org/show_bug.cgi?id=190634

        Reviewed by Mark Lam.

        If a macro isn't usable in a configuration it might still cause us to
        think the ast is invalid. This change runs the de-macroifier before
        looking for errors.

        Also, it adds a missing include to Printer.h.

        * assembler/Printer.h:
        * offlineasm/settings.rb:

2018-10-16  Justin Michaud  <justin_michaud@apple.com>

        Implement feature flag and bindings for CSS Painting API
        https://bugs.webkit.org/show_bug.cgi?id=190237

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2018-10-16  Keith Miller  <keith_miller@apple.com>

        Unreviewed, forgot to add untracked files.

        * llint/LLIntSettingsExtractor.cpp: Added.
        (main):
        * offlineasm/generate_settings_extractor.rb: Added.

2018-10-16  Keith Miller  <keith_miller@apple.com>

        Unreviewed, reland https://bugs.webkit.org/show_bug.cgi?id=189708 with build fix.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntOffsetsExtractor.cpp:
        (JSC::LLIntOffsetsExtractor::dummy):
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/offsets.rb:
        * offlineasm/settings.rb:

2018-10-16  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add missing include.

        * runtime/BasicBlockLocation.h:

2018-10-15  Keith Miller  <keith_miller@apple.com>

        Support arm64 CPUs with a 32-bit address space
        https://bugs.webkit.org/show_bug.cgi?id=190273

        Reviewed by Michael Saboff.

        This patch adds support for arm64_32 in the LLInt. In order to
        make this work we needed to add a new type that reflects the size
        of a cpu register. This type is called CPURegister or UCPURegister
        for the unsigned version. Most places that used void* or intptr_t
        to refer to a register have been changed to use this new type.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARM64Assembler.h:
        (JSC::isInt):
        (JSC::is4ByteAligned):
        (JSC::PairPostIndex::PairPostIndex):
        (JSC::PairPreIndex::PairPreIndex):
        (JSC::ARM64Assembler::readPointer):
        (JSC::ARM64Assembler::readCallTarget):
        (JSC::ARM64Assembler::computeJumpType):
        (JSC::ARM64Assembler::linkCompareAndBranch):
        (JSC::ARM64Assembler::linkConditionalBranch):
        (JSC::ARM64Assembler::linkTestAndBranch):
        (JSC::ARM64Assembler::loadRegisterLiteral):
        (JSC::ARM64Assembler::loadStoreRegisterPairPostIndex):
        (JSC::ARM64Assembler::loadStoreRegisterPairPreIndex):
        (JSC::ARM64Assembler::loadStoreRegisterPairOffset):
        (JSC::ARM64Assembler::loadStoreRegisterPairNonTemporal):
        (JSC::isInt7): Deleted.
        (JSC::isInt11): Deleted.
        * assembler/CPU.h:
        (JSC::isAddress64Bit):
        (JSC::isAddress32Bit):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::shouldBlind):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssemblerARM64::collectCPUFeatures):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::load):
        (JSC::MacroAssemblerARM64::store):
        (JSC::MacroAssemblerARM64::isInIntRange): Deleted.
        * assembler/Printer.h:
        * assembler/ProbeContext.h:
        (JSC::Probe::CPUState::gpr):
        (JSC::Probe::CPUState::spr):
        (JSC::Probe::Context::gpr):
        (JSC::Probe::Context::spr):
        * b3/B3ConstPtrValue.h:
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::isArgValidForRep):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::stackSlot const):
        (JSC::B3::Air::Arg::special const):
        * b3/air/testair.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testStoreConstantPtr):
        (JSC::B3::testInterpreter):
        (JSC::B3::testAddShl32):
        (JSC::B3::testLoadBaseIndexShift32):
        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptCallArgumentHandler::appendArgument):
        * bindings/ScriptFunctionCall.h:
        * bytecode/CodeBlock.cpp:
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::restoreCalleeSavesFor):
        (JSC::DFG::saveCalleeSavesFor):
        (JSC::DFG::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer):
        (JSC::DFG::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * disassembler/UDis86Disassembler.cpp:
        (JSC::tryToDisassembleWithUDis86):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileWeakMapGet):
        * heap/MachineStackMarker.cpp:
        (JSC::copyMemory):
        * interpreter/CallFrame.h:
        (JSC::ExecState::returnPC const):
        (JSC::ExecState::hasReturnPC const):
        (JSC::ExecState::clearReturnPC):
        (JSC::ExecState::returnPCOffset):
        (JSC::ExecState::isGlobalExec const):
        (JSC::ExecState::setReturnPC):
        * interpreter/CalleeBits.h:
        (JSC::CalleeBits::boxWasm):
        (JSC::CalleeBits::isWasm const):
        (JSC::CalleeBits::asWasmCallee const):
        * interpreter/Interpreter.cpp:
        (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
        * interpreter/VMEntryRecord.h:
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::clearStackFrame):
        * jit/RegisterAtOffset.h:
        (JSC::RegisterAtOffset::offsetAsIndex const):
        * jit/RegisterAtOffsetList.cpp:
        (JSC::RegisterAtOffsetList::RegisterAtOffsetList):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/asm.rb:
        * offlineasm/ast.rb:
        * offlineasm/backends.rb:
        * offlineasm/parser.rb:
        * offlineasm/x86.rb:
        * runtime/BasicBlockLocation.cpp:
        (JSC::BasicBlockLocation::dumpData const):
        (JSC::BasicBlockLocation::emitExecuteCode const):
        * runtime/BasicBlockLocation.h:
        * runtime/HasOwnPropertyCache.h:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::inplaceMultiplyAdd):
        (JSC::JSBigInt::digitDiv):
        * runtime/JSBigInt.h:
        * runtime/JSObject.h:
        * runtime/Options.cpp:
        (JSC::jitEnabledByDefault):
        * runtime/Options.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::printTraceData):
        * runtime/SamplingProfiler.cpp:
        (JSC::CFrameWalker::walk):
        * runtime/SlowPathReturnType.h:
        (JSC::encodeResult):
        (JSC::decodeResult):
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::SigillCrashAnalyzer::dumpCodeBlock):

2018-10-15  Justin Fan  <justin_fan@apple.com>

        Add WebGPU 2018 feature flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=190509

        Reviewed by Dean Jackson.

        Re-add ENABLE_WEBGPU, an experimental feature flag, and a RuntimeEnabledFeature
        for the 2018 WebGPU prototype.

        * Configurations/FeatureDefines.xcconfig:

2018-10-15  Timothy Hatcher  <timothy@apple.com>

        Add support for prefers-color-scheme media query
        https://bugs.webkit.org/show_bug.cgi?id=190499
        rdar://problem/45212025

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_DARK_MODE_CSS.

2018-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237084, r237088, r237098, and
        r237114.
        https://bugs.webkit.org/show_bug.cgi?id=190602

        Breaks internal builds. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Separate configuration extraction from offset extraction"
        https://bugs.webkit.org/show_bug.cgi?id=189708
        https://trac.webkit.org/changeset/237084

        "Gardening: Build fix after r237084."
        https://bugs.webkit.org/show_bug.cgi?id=189708
        https://trac.webkit.org/changeset/237088

        "Gardening: Build fix after r237084."
        https://bugs.webkit.org/show_bug.cgi?id=189708
        https://trac.webkit.org/changeset/237098

        "REGRESSION (r237084): JavaScriptCore fails to build on Linux"
        https://trac.webkit.org/changeset/237114

2018-10-15  Keith Miller  <keith_miller@apple.com>

        BytecodeDumper should print all switch labels
        https://bugs.webkit.org/show_bug.cgi?id=190596

        Reviewed by Saam Barati.

        Right now the bytecode dumper only prints the default target not any of the
        non-default targets.

        * bytecode/BytecodeDumper.cpp:
        (JSC::BytecodeDumper<Block>::dumpBytecode):

2018-10-15  Saam barati  <sbarati@apple.com>

        Emit fjcvtzs on ARM64E on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=184023

        Reviewed by Yusuke Suzuki and Filip Pizlo.

        ARMv8.3 introduced the fjcvtzs instruction which does double->int32
        conversion using the semantics defined by JavaScript:
        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801g/hko1477562192868.html
        This patch teaches JSC to use that instruction when possible.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::fjcvtzs):
        (JSC::ARM64Assembler::fjcvtzsInsn):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssemblerARM64::collectCPUFeatures):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::supportsDoubleToInt32ConversionUsingJavaScriptSemantics):
        (JSC::MacroAssemblerARM64::convertDoubleToInt32UsingJavaScriptSemantics):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        * disassembler/ARM64/A64DOpcode.cpp:
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcode::appendInstructionName):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::doubleToInt32):
        * jit/JITRightShiftGenerator.cpp:
        (JSC::JITRightShiftGenerator::generateFastPath):
        * runtime/MathCommon.h:
        (JSC::toInt32):

2018-10-15  Saam Barati  <sbarati@apple.com>

        JSArray::shiftCountWithArrayStorage is wrong when an array has holes
        https://bugs.webkit.org/show_bug.cgi?id=190262
        <rdar://problem/44986241>

        Reviewed by Mark Lam.

        We would take the fast path for shiftCountWithArrayStorage when the array
        hasHoles(). However, the code for this was wrong. It'd incorrectly update
        ArrayStorage::m_numValuesInVector. Since the hasHoles() for ArrayStorage
        path is never taken in JetStream 2, this patch just removes that from
        the fast path. Instead, we just fallback to the slow path when hasHoles().
        If we find evidence that this matters for real use cases, we can
        figure out a way to make the fast path work.

        * runtime/JSArray.cpp:
        (JSC::JSArray::shiftCountWithArrayStorage):

2018-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r237054.
        https://bugs.webkit.org/show_bug.cgi?id=190593

        "this regressed JetStream 2 by 6% on iOS" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "[JSC] JSC should have "parseFunction" to optimize Function
        constructor"
        https://bugs.webkit.org/show_bug.cgi?id=190340
        https://trac.webkit.org/changeset/237054

2018-10-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r237084): JavaScriptCore fails to build on Linux
        <https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10949>

        * llint/LLIntSettingsExtractor.cpp: Attempt to fix build by
        including <stdio.h>.

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Shrink more enum classes
        https://bugs.webkit.org/show_bug.cgi?id=190540

        Reviewed by Chris Dumez.

        * runtime/ConsoleTypes.h:

2018-10-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Disable DOMJIT on 32bit architecture
        https://bugs.webkit.org/show_bug.cgi?id=190387

        Reviewed by Mark Lam.

        We disable DOMJIT on 32bit architecture due to exhaustion of registers.

        * runtime/Options.h:

2018-10-15  Alex Christensen  <achristensen@webkit.org>

        Include EnumTraits.h less
        https://bugs.webkit.org/show_bug.cgi?id=190535

        Reviewed by Chris Dumez.

        * runtime/ConsoleTypes.h:

2018-10-14  Mark Lam  <mark.lam@apple.com>

        Gardening: Build fix after r237084.
        https://bugs.webkit.org/show_bug.cgi?id=189708

        Unreviewd.

        * llint/LLIntOffsetsExtractor.cpp:

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Option::useAsyncIterator
        https://bugs.webkit.org/show_bug.cgi?id=190567

        Reviewed by Saam Barati.

        Async iterator is enabled by default at 2017-08-09. It is already shipped in several releases,
        and we can think that it is already mature. Let's drop the option `Option::useAsyncIterator`.

        * Configurations/FeatureDefines.xcconfig:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
        (JSC::BytecodeGenerator::emitNewFunction):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createFunctionMetadata):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseForStatement):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parseAsyncFunctionExpression):
        * runtime/Options.h:

2018-10-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Remove Options::useObjectRestSpread
        https://bugs.webkit.org/show_bug.cgi?id=190568

        Reviewed by Saam Barati.

        Options::useObjectRestSpread is enabled by default at 2017-06-27. It is already shipped in several releases,
        and we can think that it is mature. Let's drop Options::useObjectRestSpread() flag.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::Parser):
        (JSC::Parser<LexerType>::parseDestructuringPattern):
        (JSC::Parser<LexerType>::parseProperty):
        * parser/Parser.h:
        * runtime/Options.h:

2018-10-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] JSON.stringify can accept call-with-no-arguments
        https://bugs.webkit.org/show_bug.cgi?id=190343

        Reviewed by Mark Lam.

        JSON.stringify can accept `JSON.stringify()` call (call-with-no-arguments) according to the spec[1].
        Instead of throwing an error, we should take the first argument as `undefined` if it is not given.

        [1]: https://tc39.github.io/ecma262/#sec-json.stringify

        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncStringify):

2018-10-12  Tadeu Zagallo  <tzagallo@apple.com>

        Gardening: Build fix after r237084.
        https://bugs.webkit.org/show_bug.cgi?id=189708

        Unreviewd.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-10-12  Tadeu Zagallo  <tzagallo@apple.com>

        Separate configuration extraction from offset extraction
        https://bugs.webkit.org/show_bug.cgi?id=189708

        Reviewed by Keith Miller.

        Instead of generating a file with all offsets for every combination of
        configurations, we first generate a file with only the configuration
        indices and pass that to the offset extractor. The offset extractor then
        only generates the offsets for valid configurations

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntOffsetsExtractor.cpp:
        (JSC::LLIntOffsetsExtractor::dummy):
        * llint/LLIntSettingsExtractor.cpp: Added.
        (main):
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/generate_settings_extractor.rb: Added.
        * offlineasm/offsets.rb:
        * offlineasm/settings.rb:

2018-10-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r237063.

        Caused layout test fast/dom/Window/window-postmessage-clone-
        deep-array.html to fail on macOS and iOS Debug bots.

        Reverted changeset:

        "[JSC] Remove gcc warnings on mips and armv7"
        https://bugs.webkit.org/show_bug.cgi?id=188598
        https://trac.webkit.org/changeset/237063

2018-10-11  Guillaume Emont  <guijemont@igalia.com>

        [JSC] Remove gcc warnings on mips and armv7
        https://bugs.webkit.org/show_bug.cgi?id=188598

        Reviewed by Mark Lam.

        Fix many gcc/clang warnings that are false positives, mostly alignment
        issues.

        * assembler/MacroAssemblerPrinter.cpp:
        (JSC::Printer::printMemory):
        Use bitwise_cast instead of reinterpret_cast.
        * assembler/testmasm.cpp:
        (JSC::floatOperands):
        marked as potentially unused as it is not used on all platforms.
        (JSC::testProbeModifiesStackValues):
        modifiedFlags is not used on mips, so don't declare it.
        * bytecode/CodeBlock.h:
        Make ScriptExecutable::prepareForExecution() return an
        std::optional<Exception*> instead of a JSObject*.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        Update calling code for the prototype change of
        ScriptExecutable::prepareForExecution().
        * jit/JITOperations.cpp: Same as for Interpreter.cpp.
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall): Same as for Interpreter.cpp.
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::dataStorage):
        Use bitwise_cast instead of reinterpret_cast.
        * runtime/ScriptExecutable.cpp:
        * runtime/ScriptExecutable.h:
        Make ScriptExecutable::prepareForExecution() return an
        std::optional<Exception*> instead of a JSObject*.
        * tools/JSDollarVM.cpp:
        (JSC::codeBlockFromArg): Use bitwise_cast instead of reinterpret_cast.

2018-10-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Use currentStackPointer more
        https://bugs.webkit.org/show_bug.cgi?id=190503

        Reviewed by Saam Barati.

        * runtime/VM.cpp:
        (JSC::VM::committedStackByteCount):

2018-10-08  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] JSC should have "parseFunction" to optimize Function constructor
        https://bugs.webkit.org/show_bug.cgi?id=190340

        Reviewed by Mark Lam.

        The current Function constructor is suboptimal. We parse the piece of the same code three times to meet
        the spec requirement. (1) check parameters syntax, (2) check body syntax, and (3) parse the entire function.
        And to parse 1-3 correctly, we create two strings, the parameters and the entire function. This operation
        is really costly and ideally we should meet the above requirement by the one time parsing.

        To meet the above requirement, we add a special function for Parser, parseSingleFunction. This function
        takes `std::optional<int> functionConstructorParametersEndPosition` and check this end position is correct in the parser.
        For example, if we run the code,

            Function('/*', '*/){')

        According to the spec, this should produce '/*' parameter string and '*/){' body string. And parameter
        string should be syntax-checked by the parser, and raise the error since it is incorrect. Instead of doing
        that, in our implementation, we first create the entire string.

            function anonymous(/*) {
                */){
            }

        And we parse it. At that time, we also pass the end position of the parameters to the parser. In the above case,
        the position of the `function anonymous(/*)' <> is passed. And in the parser, we check that the last token
        offset of the parameters is the given end position. This check allows us to raise the error correctly to the
        above example while we parse the entire function only once. And we do not need to create two strings too.

        This improves the performance of the Function constructor significantly. And web-tooling-benchmark/uglify-js is
        significantly sped up (28.2%).

        Before:
            uglify-js:  2.94 runs/s
        After:
            uglify-js:  3.77 runs/s

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedFunctionExecutable.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        (JSC::Parser<LexerType>::parseClass):
        (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<LexerType>::parse):
        (JSC::parse):
        (JSC::parseFunctionForFunctionConstructor):
        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        (JSC::JSTextPosition::JSTextPosition):
        (JSC::JSTokenLocation::JSTokenLocation): Deleted.
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey):
        (JSC::SourceCodeKey::operator== const):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/FunctionExecutable.h:

2018-10-11  Ross Kirsling  <ross.kirsling@sony.com>

        Fix non-existent define `CPU(JSVALUE64)`
        https://bugs.webkit.org/show_bug.cgi?id=190479

        Reviewed by Yusuke Suzuki.

        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsImpl):
        Correct CPU(JSVALUE64) to USE(JSVALUE64).

2018-10-11  Keith Rollin  <krollin@apple.com>

        CURRENT_ARCH should not be used in Run Script phase.
        https://bugs.webkit.org/show_bug.cgi?id=190407
        <rdar://problem/45133556>

        Reviewed by Alexey Proskuryakov.

        CURRENT_ARCH is used in a number of Xcode Run Script phases. However,
        CURRENT_ARCH is not well-defined during this phase (and may even have
        the value "undefined") since this phase is run just once per build
        rather than once per supported architecture. Migrate away from
        CURRENT_ARCH in favor of ARCHS, either by iterating over ARCHS and
        performing an operation for each value, or by picking the first entry
        in ARCHS and using that as a representative value.

        * JavaScriptCore.xcodeproj/project.pbxproj: Store
        LLIntDesiredOffsets.h into a directory with a name based on ARCHS
        rather than CURRENT_ARCH.

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

        Changes towards allowing use of the ASAN detect_stack_use_after_return option.
        https://bugs.webkit.org/show_bug.cgi?id=190405
        <rdar://problem/45131464>

        Reviewed by Michael Saboff.

        The ASAN detect_stack_use_after_return option checks for use of stack variables
        after they have been freed.  It does this by allocating relevant stack variables
        in heap memory (instead of on the stack) if the code ever takes the address of
        those stack variables.  Unfortunately, this is a common idiom that we use to
        compute the approximate stack pointer value.  As a result, on such ASAN runs, the
        computed approximate stack pointer value will point into the heap instead of the
        stack.  This breaks the VM's expectations and wreaks havoc.

        To fix this, we use the newly introduced WTF::currentStackPointer() instead of
        taking the address of stack variables.

        We also need to enhance ExceptionScopes to be able to work with ASAN
        detect_stack_use_after_return which will allocated the scope in the heap.  We
        work around this by passing the current stack pointer of the instantiating calling
        frame into the scope constructor, and using that for the position check in
        ~ThrowScope() instead.

        The above is only a start towards enabling ASAN detect_stack_use_after_return on
        the VM.  There are still other issues to be resolved before we can run with this
        ASAN option.

        * runtime/CatchScope.h:
        * runtime/ExceptionEventLocation.h:
        (JSC::ExceptionEventLocation::ExceptionEventLocation):
        * runtime/ExceptionScope.h:
        (JSC::ExceptionScope::stackPosition const):
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        * runtime/ThrowScope.cpp:
        (JSC::ThrowScope::~ThrowScope):
        * runtime/ThrowScope.h:
        * runtime/VM.h:
        (JSC::VM::needExceptionCheck const):
        (JSC::VM::isSafeToRecurse const):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::isSafeToRecurse const):

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: create special Network waterfall for media events
        https://bugs.webkit.org/show_bug.cgi?id=189773
        <rdar://problem/44626605>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOM.json:
        Add `didFireEvent` event that is fired when specific event listeners added by
        `InspectorInstrumentation::addEventListenersToNode` are fired.

2018-10-10  Michael Saboff  <msaboff@apple.com>

        Increase executable memory pool from 64MB to 128MB for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=190453

        Reviewed by Saam Barati.

        * jit/ExecutableAllocator.cpp:

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: notify the frontend when a canvas has started recording via console.record
        https://bugs.webkit.org/show_bug.cgi?id=190306

        Reviewed by Brian Burg.

        * inspector/protocol/Canvas.json:
        Add `recordingStarted` event.

        * inspector/protocol/Recording.json:
        Add `Initiator` enum for determining who started the recording.

2018-10-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=190429

        Reviewed by Saam Barati.

        Some createXXX functions can fail. But sometimes the caller does not perform error checking.
        To make it explicit that these functions can fail, we rename these functions from createXXX
        to tryCreateXXX. In this patch, we focus on non-JS-managed factory functions. If the factory
        function does not fail, it should return Ref<>. Otherwise, it should be named as tryCreateXXX
        and it should return RefPtr<>.

        This patch mainly focuses on TypedArray factory functions. Previously, these functions are
        `RefPtr<XXXArray> create(...)`. This patch changes them to `RefPtr<XXXArray> tryCreate(...)`.
        And we also introduce `Ref<XXXArray> create(...)` function which internally performs
        RELEASE_ASSERT on the result of `tryCreate(...)`.

        And we also convert OpaqueJSString::create to OpaqueJSString::tryCreate since it can fail.

        This change actually finds one place which does not perform any null checkings while it uses
        `RefPtr<> create(...)` function.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
        (JSC::JSCallbackObject<Parent>::put):
        (JSC::JSCallbackObject<Parent>::putByIndex):
        (JSC::JSCallbackObject<Parent>::deleteProperty):
        (JSC::JSCallbackObject<Parent>::callbackGetter):
        * API/JSClassRef.h:
        (StaticValueEntry::StaticValueEntry):
        * API/JSContext.mm:
        (-[JSContext evaluateScript:withSourceURL:]):
        (-[JSContext setName:]):
        * API/JSContextRef.cpp:
        (JSGlobalContextCopyName):
        (JSContextCreateBacktrace):
        * API/JSObjectRef.cpp:
        (JSObjectCopyPropertyNames):
        * API/JSScriptRef.cpp:
        * API/JSStringRef.cpp:
        (JSStringCreateWithCharactersNoCopy):
        * API/JSValue.mm:
        (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]):
        (+[JSValue valueWithNewErrorFromMessage:inContext:]):
        (+[JSValue valueWithNewSymbolFromDescription:inContext:]):
        (performPropertyOperation):
        (-[JSValue invokeMethod:withArguments:]):
        (containerValueToObject):
        (objectToValueWithoutCopy):
        (objectToValue):
        * API/JSValueRef.cpp:
        (JSValueCreateJSONString):
        (JSValueToStringCopy):
        * API/OpaqueJSString.cpp:
        (OpaqueJSString::tryCreate):
        (OpaqueJSString::create): Deleted.
        * API/OpaqueJSString.h:
        * API/glib/JSCContext.cpp:
        (evaluateScriptInContext):
        * API/glib/JSCValue.cpp:
        (jsc_value_new_string_from_bytes):
        * ftl/FTLLazySlowPath.h:
        (JSC::FTL::LazySlowPath::createGenerator):
        * ftl/FTLLazySlowPathCall.h:
        (JSC::FTL::createLazyCallGenerator):
        * ftl/FTLOSRExit.cpp:
        (JSC::FTL::OSRExitDescriptor::emitOSRExit):
        (JSC::FTL::OSRExitDescriptor::emitOSRExitLater):
        (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
        * ftl/FTLOSRExit.h:
        * ftl/FTLPatchpointExceptionHandle.cpp:
        (JSC::FTL::PatchpointExceptionHandle::create):
        (JSC::FTL::PatchpointExceptionHandle::createHandle):
        * ftl/FTLPatchpointExceptionHandle.h:
        * heap/EdenGCActivityCallback.h:
        (JSC::GCActivityCallback::tryCreateEdenTimer):
        (JSC::GCActivityCallback::createEdenTimer): Deleted.
        * heap/FullGCActivityCallback.h:
        (JSC::GCActivityCallback::tryCreateFullTimer):
        (JSC::GCActivityCallback::createFullTimer): Deleted.
        * heap/GCActivityCallback.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * inspector/AsyncStackTrace.cpp:
        (Inspector::AsyncStackTrace::create):
        * inspector/AsyncStackTrace.h:
        * jsc.cpp:
        (fillBufferWithContentsOfFile):
        * runtime/ArrayBuffer.h:
        * runtime/GenericTypedArrayView.h:
        * runtime/GenericTypedArrayViewInlines.h:
        (JSC::GenericTypedArrayView<Adaptor>::create):
        (JSC::GenericTypedArrayView<Adaptor>::tryCreate):
        (JSC::GenericTypedArrayView<Adaptor>::createUninitialized):
        (JSC::GenericTypedArrayView<Adaptor>::tryCreateUninitialized):
        (JSC::GenericTypedArrayView<Adaptor>::subarray const):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::possiblySharedImpl):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::create):
        (JSC::Wasm::Memory::tryCreate):
        * wasm/WasmMemory.h:
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::tryCreate):
        (JSC::Wasm::Table::create): Deleted.
        * wasm/WasmTable.h:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):

2018-10-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: show redirect requests in Network and Timelines tabs
        https://bugs.webkit.org/show_bug.cgi?id=150005
        <rdar://problem/5378164>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Network.json:
        Add missing fields to `ResourceTiming`.

2018-10-09  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Explicitly link against gmodule where used
        https://bugs.webkit.org/show_bug.cgi?id=190398

        Reviewed by Michael Catanzaro.

        * PlatformWPE.cmake:

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.

        * Configurations/FeatureDefines.xcconfig:
        * inspector/protocol/Canvas.json:
        * inspector/scripts/codegen/generator.py:

2018-10-08  Aditya Keerthi  <akeerthi@apple.com>

        Make <input type=color> a runtime enabled (on-by-default) feature
        https://bugs.webkit.org/show_bug.cgi?id=189162

        Reviewed by Wenson Hsieh and Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: group media network entries by the node that triggered the request
        https://bugs.webkit.org/show_bug.cgi?id=189606
        <rdar://problem/44438527>

        Reviewed by Brian Burg.

        * inspector/protocol/Network.json:
        Add an optional `nodeId` field to the `Initiator` object that is set it is possible to
        determine which ancestor node triggered the load. It may not correspond directly to the node
        with the href/src, as that url may only be used by an ancestor for loading.

2018-10-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC][Linux] Use non-truncated name for JIT workers in Linux
        https://bugs.webkit.org/show_bug.cgi?id=190339

        Reviewed by Mark Lam.

        The current thread names are meaningless in Linux environment. We do not want to
        have truncated name in Linux: we want to have clear name in Linux. Instead, we
        should have the name for Linux separately from the name used in the non-Linux
        environments. This patch adds FTLWorker, DFGWorker, and JITWorker names for
        Linux environment.

        * dfg/DFGWorklist.cpp:
        (JSC::DFG::createWorklistName):
        (JSC::DFG::Worklist::Worklist):
        (JSC::DFG::Worklist::create):
        (JSC::DFG::ensureGlobalDFGWorklist):
        (JSC::DFG::ensureGlobalFTLWorklist):
        * dfg/DFGWorklist.h:
        * jit/JITWorklist.cpp:

2018-10-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Name Heap threads
        https://bugs.webkit.org/show_bug.cgi?id=190337

        Reviewed by Mark Lam.

        Name heap threads as "Heap Helper Thread". In Linux, we name it "HeapHelper" since
        Linux does not accept the name longer than 15. We do not want to use the short name
        for non-Linux environment. And we want to have clear name in Linux: truncated name
        is not good. So, having the two names is the only way.

        * heap/HeapHelperPool.cpp:
        (JSC::heapHelperPool):

2018-10-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Avoid creating ProgramExecutable in checkSyntax
        https://bugs.webkit.org/show_bug.cgi?id=190332

        Reviewed by Mark Lam.

        uglify-js in web-tooling-benchmark executes massive number of Function constructor calls.
        In Function constructor code, we perform checkSyntax for body and parameters. So fast checkSyntax
        is important when the performance of Function constructor matters. Current checkSyntax code
        unnecessarily allocates ProgramExecutable. This patch removes this allocation and improves
        the benchmark score slightly.

        Before:
            uglify-js:  2.87 runs/s
        After:
            uglify-js:  2.94 runs/s

        * runtime/Completion.cpp:
        (JSC::checkSyntaxInternal):
        (JSC::checkSyntax):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        * runtime/ProgramExecutable.h:

2018-10-06  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement support for "|"
        https://bugs.webkit.org/show_bug.cgi?id=186229

        Reviewed by Yusuke Suzuki.

        This patch is introducing support for BigInt into bitwise "or" operator.
        In addition, we are also introducing 2 new DFG nodes, named "ArithBitOr" and
        "ValueBitOr", to replace "BitOr" node. The idea is to follow the
        difference that we make on Arith<op> and Value<op>, where ArithBitOr
        handles cases when the operands are Int32 and ValueBitOr handles
        the remaining cases.

        We are also changing op_bitor to use ValueProfile. We are using
        ValueProfile during DFG generation to emit "ArithBitOr" when
        outcome prediction is Int32.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::arithProfileForPC):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitBinaryOp):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * 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:
        (JSC::DFG::bitwiseOp):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueBitwiseOp):
        (JSC::DFG::SpeculativeJIT::compileBitwiseOp):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::bitOp):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitOr):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitOr):
        (JSC::FTL::DFG::LowerDFGToB3::compileBitOr): Deleted.
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitor):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::bitwiseOr):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAddOne):
        * runtime/JSBigInt.h:

2018-10-05  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Use new extra memory reporting in SparseArrayMap
        https://bugs.webkit.org/show_bug.cgi?id=190278

        Reviewed by Keith Miller.

        This patch switches the extra memory reporting mechanism from deprecatedReportExtraMemory
        to reportExtraMemoryAllocated & reportExtraMemoryVisited in SparseArrayMap.

        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::add):
        (JSC::SparseArrayValueMap::visitChildren):

2018-10-05  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC][Linux] Support Perf JITDump logging
        https://bugs.webkit.org/show_bug.cgi?id=189893

        Reviewed by Mark Lam.

        This patch adds Linux `perf` command's JIT Dump support. It allows JSC to tell perf about JIT code information.
        We add a command line option, `--logJITCodeForPerf`, which dumps `jit-%pid.dump` in the current directory.
        By using this dump and perf.data output, we can annotate JIT code with profiling information.

            $ echo "(function f() { var s = 0; for (var i = 0; i < 1000000000; i++) { s += i; } return s; })();" > test.js
            $ perf record -k mono ../../WebKitBuild/perf/Release/bin/jsc test.js --logJITCodeForPerf=true
            [ perf record: Woken up 1 times to write data ]
            [ perf record: Captured and wrote 0.182 MB perf.data (4346 samples) ]
            $ perf inject --jit -i perf.data -o perf.jit.data
            $ perf report -i perf.jit.data

        * Sources.txt:
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::finalizeCodeWithDisassembly):
        * assembler/PerfLog.cpp: Added.
        (JSC::PerfLog::singleton):
        (JSC::generateTimestamp):
        (JSC::getCurrentThreadID):
        (JSC::PerfLog::PerfLog):
        (JSC::PerfLog::write):
        (JSC::PerfLog::flush):
        (JSC::PerfLog::log):
        * assembler/PerfLog.h: Added.
        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        * runtime/Options.cpp:
        (JSC::Options::isAvailable):
        * runtime/Options.h:

2018-10-05  Mark Lam  <mark.lam@apple.com>

        Gardening: Build fix after r236880.
        https://bugs.webkit.org/show_bug.cgi?id=190317

        Unreviewed.

        * jit/ExecutableAllocator.h:

2018-10-05  Mark Lam  <mark.lam@apple.com>

        performJITMemcpy() should handle the case when the executable allocator is not initialized yet.
        https://bugs.webkit.org/show_bug.cgi?id=190317
        <rdar://problem/45039398>

        Reviewed by Saam Barati.

        When SeparatedWXHeaps is in use, jitWriteThunkGenerator() will call performJITMemcpy()
        to copy memory before the JIT fixed memory pool is initialize.  Before r236864,
        performJITMemcpy() would just do a memcpy in that case.  We need to restore the
        equivalent behavior.

        * jit/ExecutableAllocator.cpp:
        (JSC::isJITPC):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):

2018-10-05  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [WPE][JSC] Use Unified Sources for Platform-specific sources
        https://bugs.webkit.org/show_bug.cgi?id=190300

        Reviewed by Yusuke Suzuki.

        Currently the GTK port already used Unified Sources with the same source files.
        As WPE has conditional code using gmodule, we need to add GLIB_GMODULE_LIBRARIES
        to the list of libraries to link with.

        * PlatformWPE.cmake:
        * SourcesWPE.txt: Added.
        * shell/PlatformWPE.cmake:

2018-10-05  Mike Gorse  <mgorse@alum.wpi.edu>

        [GTK] build fails with python 3 if LANG and LC_TYPE are unset
        https://bugs.webkit.org/show_bug.cgi?id=190258

        Reviewed by Konstantin Tokarev.

        * Scripts/cssmin.py: Set stdout to UTF-8 on python 3.
        * Scripts/generateIntlCanonicalizeLanguage.py: Open files with
          encoding=UTF-8 on Python 3.
        * yarr/generateYarrCanonicalizeUnicode: Ditto.
        * yarr/generateYarrUnicodePropertyTables.py: Ditto.

2018-10-04  Mark Lam  <mark.lam@apple.com>

        Move start/EndOfFixedExecutableMemoryPool pointers into the FixedVMPoolExecutableAllocator object.
        https://bugs.webkit.org/show_bug.cgi?id=190295
        <rdar://problem/19197193>

        Reviewed by Saam Barati.

        This allows us to use the tagging logic already baked into MacroAssemblerCodePtr
        instead of needing to use our own custom version here.

        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::memoryStart):
        (JSC::FixedVMPoolExecutableAllocator::memoryEnd):
        (JSC::FixedVMPoolExecutableAllocator::isJITPC):
        (JSC::ExecutableAllocator::allocate):
        (JSC::startOfFixedExecutableMemoryPoolImpl):
        (JSC::endOfFixedExecutableMemoryPoolImpl):
        (JSC::isJITPC):
        * jit/ExecutableAllocator.h:

2018-10-04  Mark Lam  <mark.lam@apple.com>

        Disable Options::useWebAssemblyFastMemory() on linux if ASAN signal handling is not disabled.
        https://bugs.webkit.org/show_bug.cgi?id=190283
        <rdar://problem/45015752>

        Reviewed by Keith Miller.

        * runtime/Options.cpp:
        (JSC::Options::initialize):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::enableFastMemory):

2018-10-03  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] print() changes CRLF to CRCRLF on Windows
        https://bugs.webkit.org/show_bug.cgi?id=190228

        Reviewed by Mark Lam.

        * jsc.cpp:
        (main):
        Ultimately, this is just the normal behavior of printf in text mode on Windows.
        Since we're reading in files as binary, we need to be printing out as binary too
        (just as we do in DumpRenderTree and ImageDiff.)

2018-10-03  Saam barati  <sbarati@apple.com>

        lowXYZ in FTLLower should always filter the type of the incoming edge
        https://bugs.webkit.org/show_bug.cgi?id=189939
        <rdar://problem/44407030>

        Reviewed by Michael Saboff.

        For example, the FTL may know more about data flow than AI in certain programs,
        and it needs to inform AI of these data flow properties to appease the assertion
        we have in AI that a node must perform type checks on its child nodes.
        
        For example, consider this program:
        
        ```
        bb#1
        a: Phi // Let's say it has an Int32 result, so it goes into the int32 hash table in FTLLower
        Branch(...,  #2, #3)
        
        bb#2
        ArrayifyToStructure(Cell:@a) // This modifies @a to have the its previous type union the type of some structure set.
        Jump(#3)
        
        bb#3
        c: Add(Int32:@something, Int32:@a)
        ```
        
        When the Add node does lowInt32() for @a, FTL lower used to just grab it
        from the int32 hash table without filtering the AbstractValue. However,
        the parent node is asking for a type check to happen, so we must inform
        AI of this "type check" if we want to appease the assertion that all nodes
        perform type checks for their edges that semantically perform type checks.
        This patch makes it so we filter the AbstractValue in the lowXYZ even
        if FTLLower proved the value must be XYZ.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePhi):
        (JSC::FTL::DFG::LowerDFGToB3::simulatedTypeCheck):
        (JSC::FTL::DFG::LowerDFGToB3::lowInt32):
        (JSC::FTL::DFG::LowerDFGToB3::lowCell):
        (JSC::FTL::DFG::LowerDFGToB3::lowBoolean):

2018-10-03  Michael Saboff  <msaboff@apple.com>

        Command line jsc should report memory footprint in bytes
        https://bugs.webkit.org/show_bug.cgi?id=190267

        Reviewed by Mark Lam.

        Change to leave the footprint values from the system unmodified.

        * jsc.cpp:
        (JSCMemoryFootprint::finishCreation):

2018-10-03  Mark Lam  <mark.lam@apple.com>

        Suppress unreachable code warning for LLIntAssembly.h code.
        https://bugs.webkit.org/show_bug.cgi?id=190263
        <rdar://problem/44986532>

        Reviewed by Saam Barati.

        This is needed because LLIntAssembly.h is template generated from LowLevelInterpreter
        asm files, and may contain dead code which are harmless, but will trip up the warning.
        We should suppress the warning so that it doesn't break builds.

        * llint/LowLevelInterpreter.cpp:
        (JSC::CLoop::execute):

2018-10-03  Dan Bernstein  <mitz@apple.com>

        JavaScriptCore part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Alex Christensen.

        * API/tests/Regress141275.mm:
        (-[JSTEvaluator _sourcePerform]): Addressed newly-enabled CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF
          by making the self-retaining explicit.

        * API/tests/testapi.cpp:
        (testCAPIViaCpp): Addressed newly-enabled CLANG_WARN_UNREACHABLE_CODE by breaking out of the
          loop instead of returning from the lambda.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_UNREACHABLE_CODE,
          CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF, and
          CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED.

        * JavaScriptCore.xcodeproj/project.pbxproj: Removed a duplicate reference to
          UnlinkedFunctionExecutable.h, and let Xcode update the project file.

        * assembler/MacroAssemblerPrinter.cpp:
        (JSC::Printer::printAllRegisters): Addressed newly-enabled CLANG_WARN_COMMA by replacing
          some commas with semicolons.

2018-10-03  Mark Lam  <mark.lam@apple.com>

        Make string MaxLength for all WTF and JS strings consistently equal to INT_MAX.
        https://bugs.webkit.org/show_bug.cgi?id=190187
        <rdar://problem/42512909>

        Reviewed by Michael Saboff.

        Allowing different max string lengths at each level opens up opportunities for
        bugs to creep in.  With 2 different max length values, it is more difficult to
        keep the story straight on how we do overflow / bounds checks at each place in
        the code.  It's also difficult to tell if a seemingly valid check at the WTF level
        will have bad ramifications at the JSC level.  Also, it's also not meaningful to
        support a max length > INT_MAX.  To eliminate this class of bugs, we'll
        standardize on a MaxLength of INT_MAX at all levels.

        We'll also standardize the way we do length overflow checks on using
        CheckedArithmetic, and add some asserts to document the assumptions of the code.

        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        - Fix OOM error handling which crashed a test after the new MaxLength was applied.
        * runtime/JSString.h:
        (JSC::JSString::finishCreation):
        (JSC::JSString::createHasOtherOwner):
        (JSC::JSString::setLength):
        * runtime/JSStringInlines.h:
        (JSC::jsMakeNontrivialString):
        * runtime/Operations.h:
        (JSC::jsString):

2018-10-03  Koby Boyango  <koby.b@mce-sys.com>

        [JSC] Add a C++ callable overload of objectConstructorSeal
        https://bugs.webkit.org/show_bug.cgi?id=190137

        Reviewed by Yusuke Suzuki.

        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:

2018-10-02  Dominik Infuehr  <dinfuehr@igalia.com>

        Fix Disassembler-output on ARM Thumb2
        https://bugs.webkit.org/show_bug.cgi?id=190203

        On ARMv7 with Thumb2 addresses have bit 0 set to 1 to force
        execution in thumb mode for jumps and calls. The actual machine
        instructions are still aligned to 2-bytes though. Use dataLocation() as
        start address for disassembling since it unsets the thumb bit.
        Until now the disassembler would start at the wrong address (off by 1),
        resulting in the wrong disassembled machine instructions.

        Reviewed by Mark Lam.

        * disassembler/CapstoneDisassembler.cpp:
        (JSC::tryToDisassemble):

2018-10-02  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Add stub of ExecutableAllocator used when JIT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=190215

        Reviewed by Mark Lam.

        When ENABLE(JIT) is disabled, we do not use JIT. But we ExecutableAllocator is still available since
        it is guarded by ENABLE(ASSEMBLER). ENABLE(ASSEMBLER) is necessary for LLInt ASM interpreter since
        our MacroAssembler tells machine architecture information. Eventually, we would like to decouple
        this machine architecture information from MacroAssembler. But for now, we use ENABLE(ASSEMBLER)
        for LLInt ASM interpreter even if JIT is disabled by ENABLE(JIT).

        To ensure any executable memory allocation is not done, we add a stub of ExecutableAllocator for
        non-JIT configurations. This does not have any functionality allocating executable memory, thus
        any accidental operation cannot attempt to allocate executable memory if ENABLE(JIT) = OFF.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::singleton):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::isValid const):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::dumpProfile):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::isValidExecutableMemory):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::getLock const):
        (JSC::performJITMemcpy):

2018-10-01  Dean Jackson  <dino@apple.com>

        Remove CSS Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=190175
        <rdar://problem/44925626>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-10-02  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] BigInt.proptotype.toString is broken when radix is power of 2
        https://bugs.webkit.org/show_bug.cgi?id=190033

        Reviewed by Yusuke Suzuki.

        The implementation of JSBigInt::toStringToGeneric doesn't handle power
        of 2 radix when JSBigInt length is >= 2. To handle such cases, we
        implemented JSBigInt::toStringBasePowerOfTwo that follows the
        algorithm that groups bits using mask of (2 ^ n) - 1 to extract every
        digit.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::toString):
        (JSC::JSBigInt::toStringBasePowerOfTwo):
        * runtime/JSBigInt.h:

2018-10-01  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Add branchIfNaN and branchIfNotNaN
        https://bugs.webkit.org/show_bug.cgi?id=190122

        Reviewed by Mark Lam.

        Add AssemblyHelpers::{branchIfNaN, branchIfNotNaN} to make code more readable.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
        (JSC::DFG::SpeculativeJIT::compileDoubleRep):
        (JSC::DFG::SpeculativeJIT::getIntTypedArrayStoreOperand):
        (JSC::DFG::SpeculativeJIT::compileSpread):
        (JSC::DFG::SpeculativeJIT::compileNewArray):
        (JSC::DFG::SpeculativeJIT::speculateRealNumber):
        (JSC::DFG::SpeculativeJIT::speculateDoubleRepReal):
        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::purifyNaN):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfNaN):
        (JSC::AssemblyHelpers::branchIfNotNaN):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitDoubleLoad):
        (JSC::JIT::emitFloatTypedArrayGetByVal):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitGenericContiguousPutByVal):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):

2018-10-01  Mark Lam  <mark.lam@apple.com>

        Function.toString() should also copy the source code Functions that are class definitions.
        https://bugs.webkit.org/show_bug.cgi?id=190186
        <rdar://problem/44733360>

        Reviewed by Saam Barati.

        Previously, if the Function is a class definition, functionProtoFuncToString()
        would create a String using StringView::toStringWithoutCopying(), and use that
        String to make a JSString.  This is not a problem if the underlying SourceProvider
        (that backs the characters in that StringView) is immortal.  However, this is
        not always the case in practice.

        This patch fixes this issue by changing functionProtoFuncToString() to create the
        String using StringView::toString() instead, which makes a copy of the underlying
        characters buffer.  This detaches the resultant JSString from the SourceProvider
        characters buffer that it was created from, and ensure that the underlying
        characters buffer of the string will be alive for the entire lifetime of the
        JSString.

        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):

2018-10-01  Keith Miller  <keith_miller@apple.com>

        Create a RELEASE_AND_RETURN macro for ExceptionScopes
        https://bugs.webkit.org/show_bug.cgi?id=190163

        Reviewed by Mark Lam.

        The new RELEASE_AND_RETURN does all the work for cases
        where you want to return the result of some expression
        without explicitly checking for an exception. This is
        much like the existing RETURN_IF_EXCEPTION macro.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::newTypedArrayWithSize):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * jit/JITOperations.cpp:
        (JSC::getByVal):
        * jsc.cpp:
        (functionDollarAgentReceiveBroadcast):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::varargsSetup):
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::toJSON const):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::hostResolveImportedModule):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        (JSC::fastJoin):
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opInByVal):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        * runtime/DateConstructor.cpp:
        (JSC::dateParse):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToPrimitiveSymbol):
        * runtime/DirectArguments.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::Interpreter::constructWithErrorConstructor):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionScope.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::defineOwnProperty):
        * runtime/GetterSetter.cpp:
        (JSC::callGetter):
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorFuncCompare):
        (JSC::IntlCollatorPrototypeFuncResolvedOptions):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatFuncFormatDateTime):
        (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts):
        (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatFuncFormatNumber):
        (JSC::IntlNumberFormatPrototypeFuncFormatToParts):
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
        * runtime/IntlObject.cpp:
        (JSC::intlNumberOption):
        * runtime/IntlObjectInlines.h:
        (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::resolvedOptions):
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf):
        * runtime/IntlPluralRulesPrototype.cpp:
        (JSC::IntlPluralRulesPrototypeFuncSelect):
        (JSC::IntlPluralRulesPrototypeFuncResolvedOptions):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::put):
        (JSC::JSArray::setLength):
        (JSC::JSArray::unshiftCountWithAnyIndexingType):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoGetterFuncByteLength):
        (JSC::sharedArrayBufferProtoGetterFuncByteLength):
        * runtime/JSArrayInlines.h:
        (JSC::toLength):
        * runtime/JSBoundFunction.cpp:
        (JSC::boundFunctionCall):
        (JSC::boundFunctionConstruct):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::toIndex const):
        (JSC::JSValue::toPropertyKey const):
        (JSC::JSValue::get const):
        (JSC::JSValue::getPropertySlot const):
        (JSC::JSValue::getOwnPropertySlot const):
        (JSC::JSValue::equalSlowCaseInline):
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::put):
        (JSC::JSDataView::defineOwnProperty):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode):
        (JSC::globalFuncEval):
        (JSC::globalFuncProtoGetter):
        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::then):
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::put):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::provideFetch):
        (JSC::JSModuleLoader::loadAndEvaluateModule):
        (JSC::JSModuleLoader::loadModule):
        (JSC::JSModuleLoader::linkAndEvaluateModule):
        (JSC::JSModuleLoader::requestImportModule):
        (JSC::JSModuleLoader::getModuleNamespaceObject):
        (JSC::moduleLoaderRequestedModules):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::toJSON):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncStringify):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::toPrimitive const):
        (JSC::JSObject::hasInstance):
        (JSC::JSObject::toNumber const):
        (JSC::JSObject::defineOwnIndexedProperty):
        (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
        (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
        (JSC::JSObject::defineOwnNonIndexProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::get const):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPropertySlot const):
        (JSC::JSObject::putInlineForJSObject):
        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::Interpreter::constructWithNativeErrorConstructor):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyDescriptors):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorGetOwnPropertySymbols):
        (JSC::objectConstructorKeys):
        (JSC::objectConstructorDefineProperty):
        (JSC::objectConstructorDefineProperties):
        (JSC::objectConstructorCreate):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsLess):
        (JSC::jsLessEq):
        * runtime/ParseInt.h:
        (JSC::toStringView):
        * runtime/ProxyConstructor.cpp:
        (JSC::constructProxyObject):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::toStringName):
        (JSC::performProxyGet):
        (JSC::ProxyObject::performInternalMethodGetOwnProperty):
        (JSC::ProxyObject::performHasProperty):
        (JSC::ProxyObject::getOwnPropertySlotCommon):
        (JSC::ProxyObject::performPut):
        (JSC::ProxyObject::putByIndexCommon):
        (JSC::performProxyCall):
        (JSC::performProxyConstruct):
        (JSC::ProxyObject::performDelete):
        (JSC::ProxyObject::performPreventExtensions):
        (JSC::ProxyObject::performIsExtensible):
        (JSC::ProxyObject::performDefineOwnProperty):
        (JSC::ProxyObject::performSetPrototype):
        (JSC::ProxyObject::performGetPrototype):
        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectConstruct):
        (JSC::reflectObjectDefineProperty):
        (JSC::reflectObjectGet):
        (JSC::reflectObjectGetOwnPropertyDescriptor):
        (JSC::reflectObjectGetPrototypeOf):
        (JSC::reflectObjectOwnKeys):
        (JSC::reflectObjectSet):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::defineOwnProperty):
        (JSC::RegExpObject::matchGlobal):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTestFast):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncToString):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putEntry):
        (JSC::SparseArrayEntry::put):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCode):
        (JSC::stringFromCodePoint):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::StringObject::putByIndex):
        (JSC::StringObject::defineOwnProperty):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
        (JSC::replaceUsingStringSearch):
        (JSC::repeatCharacter):
        (JSC::replace):
        (JSC::stringProtoFuncReplaceUsingRegExp):
        (JSC::stringProtoFuncReplaceUsingStringSearch):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::toLocaleCase):
        (JSC::trimString):
        (JSC::stringProtoFuncIncludes):
        (JSC::builtinStringIncludesInternal):
        (JSC::normalize):
        (JSC::stringProtoFuncNormalize):
        * runtime/SymbolPrototype.cpp:
        (JSC::symbolProtoFuncToString):
        (JSC::symbolProtoFuncValueOf):
        * tools/JSDollarVM.cpp:
        (WTF::functionWasmStreamingParserAddBytes):
        (JSC::functionGetPrivateProperty):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::callWebAssemblyWrapperFunction):

2018-10-01  Koby Boyango  <koby.b@mce-sys.com>

        [JSC] Add a JSONStringify overload that receives a JSValue space
        https://bugs.webkit.org/show_bug.cgi?id=190131

        Reviewed by Yusuke Suzuki.

        * runtime/JSONObject.cpp:
        * runtime/JSONObject.h:

2018-10-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r236647.
        https://bugs.webkit.org/show_bug.cgi?id=190124

        Breaking test stress/big-int-to-string.js (Requested by
        caiolima_ on #webkit).

        Reverted changeset:

        "[BigInt] BigInt.proptotype.toString is broken when radix is
        power of 2"
        https://bugs.webkit.org/show_bug.cgi?id=190033
        https://trac.webkit.org/changeset/236647

2018-10-01  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [WebAssembly] Move type conversion code of JSToWasm return type to JS wasm wrapper
        https://bugs.webkit.org/show_bug.cgi?id=189498

        Reviewed by Saam Barati.

        To call JS-to-Wasm code we need to convert the result value from wasm function to
        the JS type. Previously this is done by callWebAssemblyFunction by using swtich
        over signature.returnType(). But since we know the value of `signature.returnType()`
        at compiling phase, we can emit a small conversion code directly to JSToWasm glue
        and remove this switch from callWebAssemblyFunction.

        In JSToWasm glue code, we do not have tag registers. So we use DoNotHaveTagRegisters
        in boxInt32 and boxDouble. Since boxDouble does not have DoNotHaveTagRegisters version,
        we add an implementation for that.

        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::boxDouble):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):

2018-09-30  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] BigInt.proptotype.toString is broken when radix is power of 2
        https://bugs.webkit.org/show_bug.cgi?id=190033

        Reviewed by Yusuke Suzuki.

        The implementation of JSBigInt::toStringToGeneric doesn't handle power
        of 2 radix when JSBigInt length is >= 2. To handle such cases, we
        implemented JSBigInt::toStringBasePowerOfTwo that follows the
        algorithm that groups bits using mask of (2 ^ n) - 1 to extract every
        digit.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::toString):
        (JSC::JSBigInt::toStringBasePowerOfTwo):
        * runtime/JSBigInt.h:

2018-09-28  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement support for "&"
        https://bugs.webkit.org/show_bug.cgi?id=186228

        Reviewed by Yusuke Suzuki.

        This patch introduces support of BigInt into bitwise "&" operation.
        We are also introducing the ValueBitAnd DFG node, that is responsible
        to take care of JIT for non-Int32 operands. With the introduction of this
        new node, we renamed the BitAnd node to ArithBitAnd. The ArithBitAnd
        follows the behavior of ArithAdd and other arithmetic nodes, where
        the Arith<op> version always results in Number (in the case of
        ArithBitAnd, its is always an Int32).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitBinaryOp):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * 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::compileValueBitwiseOp):
        (JSC::DFG::SpeculativeJIT::compileBitwiseOp):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::bitOp):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitAnd):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitAnd):
        (JSC::FTL::DFG::LowerDFGToB3::compileBitAnd): Deleted.
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBitBinaryOpFastPath):
        (JSC::JIT::emit_op_bitand):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::JSBigInt):
        (JSC::JSBigInt::initialize):
        (JSC::JSBigInt::createZero):
        (JSC::JSBigInt::createFrom):
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAnd):
        (JSC::JSBigInt::absoluteOr):
        (JSC::JSBigInt::absoluteAndNot):
        (JSC::JSBigInt::absoluteAddOne):
        (JSC::JSBigInt::absoluteSubOne):
        * runtime/JSBigInt.h:
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::toBigIntOrInt32 const):

2018-09-28  Mark Lam  <mark.lam@apple.com>

        Gardening: speculative build fix.
        <rdar://problem/44869924>

        Not reviewed.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2018-09-28  Guillaume Emont  <guijemont@igalia.com>

        [JSC] [Armv7] Add a copy function argument to MacroAssemblerARMv7::link() and pass it down to the assembler's linking functions.
        https://bugs.webkit.org/show_bug.cgi?id=190080

        Reviewed by Mark Lam.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::link):
        (JSC::ARMv7Assembler::linkJumpT1):
        (JSC::ARMv7Assembler::linkJumpT2):
        (JSC::ARMv7Assembler::linkJumpT3):
        (JSC::ARMv7Assembler::linkJumpT4):
        (JSC::ARMv7Assembler::linkConditionalJumpT4):
        (JSC::ARMv7Assembler::linkBX):
        (JSC::ARMv7Assembler::linkConditionalBX):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::link):

2018-09-27  Saam barati  <sbarati@apple.com>

        Verify the contents of AssemblerBuffer on arm64e
        https://bugs.webkit.org/show_bug.cgi?id=190057
        <rdar://problem/38916630>

        Reviewed by Mark Lam.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::ARM64Assembler):
        (JSC::ARM64Assembler::fillNops):
        (JSC::ARM64Assembler::link):
        (JSC::ARM64Assembler::linkJumpOrCall):
        (JSC::ARM64Assembler::linkCompareAndBranch):
        (JSC::ARM64Assembler::linkConditionalBranch):
        (JSC::ARM64Assembler::linkTestAndBranch):
        (JSC::ARM64Assembler::unlinkedCode): Deleted.
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::fillNops):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::unlinkedCode): Deleted.
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::emitNops):
        (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::ARM64EHash):
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::hash const):
        (JSC::ARM64EHash::randomSeed const):
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::putShort):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt):
        (JSC::AssemblerBuffer::hash const):
        (JSC::AssemblerBuffer::data const):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        (JSC::AssemblerBuffer::append): Deleted.
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::fillNops):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::jumpsToLink):
        (JSC::MacroAssemblerARM64::link):
        (JSC::MacroAssemblerARM64::unlinkedCode): Deleted.
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::jumpsToLink):
        (JSC::MacroAssemblerARMv7::unlinkedCode): Deleted.
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::fillNops):

2018-09-27  Mark Lam  <mark.lam@apple.com>

        ByValInfo should not use integer offsets.
        https://bugs.webkit.org/show_bug.cgi?id=190070
        <rdar://problem/44803430>

        Reviewed by Saam Barati.

        Also moved some fields around to allow the ByValInfo struct to be more densely packed.

        * bytecode/ByValInfo.h:
        (JSC::ByValInfo::ByValInfo):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByVal):
        (JSC::JIT::privateCompileGetByValWithCachedId):
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutByValWithCachedId):

2018-09-27  Saam barati  <sbarati@apple.com>

        DFG::OSRExit::m_patchableCodeOffset should not be an int
        https://bugs.webkit.org/show_bug.cgi?id=190066
        <rdar://problem/39498244>

        Reviewed by Mark Lam.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::codeLocationForRepatch const):
        (JSC::DFG::OSRExit::compileOSRExit):
        (JSC::DFG::OSRExit::setPatchableCodeOffset): Deleted.
        (JSC::DFG::OSRExit::getPatchableCodeOffsetAsJump const): Deleted.
        (JSC::DFG::OSRExit::correctJump): Deleted.
        * dfg/DFGOSRExit.h:
        * dfg/DFGOSRExitCompilationInfo.h:

2018-09-27  Saam barati  <sbarati@apple.com>

        Don't use int offsets in StructureStubInfo
        https://bugs.webkit.org/show_bug.cgi?id=190064
        <rdar://problem/44784719>

        Reviewed by Mark Lam.

        * bytecode/InlineAccess.cpp:
        (JSC::linkCodeInline):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::slowPathCallLocation):
        (JSC::StructureStubInfo::doneLocation):
        (JSC::StructureStubInfo::slowPathStartLocation):
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInlineCacheGenerator::finalize):

2018-09-27  Mark Lam  <mark.lam@apple.com>

        DFG::OSREntry::m_machineCodeOffset should be a CodeLocation.
        https://bugs.webkit.org/show_bug.cgi?id=190054
        <rdar://problem/44803543>

        Reviewed by Saam Barati.

        * dfg/DFGJITCode.h:
        (JSC::DFG::JITCode::appendOSREntryData):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::OSREntryData::dumpInContext const):
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        * runtime/JSCPtrTag.h:

2018-09-27  Mark Lam  <mark.lam@apple.com>

        JITMathIC should not use integer offsets into machine code.
        https://bugs.webkit.org/show_bug.cgi?id=190030
        <rdar://problem/44803307>

        Reviewed by Saam Barati.

        We'll replace them with CodeLocation smart pointers instead.

        * jit/JITMathIC.h:
        (JSC::isProfileEmpty):

2018-09-26  Mark Lam  <mark.lam@apple.com>

        Options::useSeparatedWXHeap() should always be false when ENABLE(FAST_JIT_PERMISSIONS) && CPU(ARM64E).
        https://bugs.webkit.org/show_bug.cgi?id=190022
        <rdar://problem/44800928>

        Reviewed by Saam Barati.

        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2018-09-26  Mark Lam  <mark.lam@apple.com>

        Assert that performJITMemcpy() is always called with instruction size aligned addresses on ARM64.
        https://bugs.webkit.org/show_bug.cgi?id=190016
        <rdar://problem/44802875>

        Reviewed by Saam Barati.

        Also assert in performJITMemcpy() that the entire buffer to be copied will fit in
        JIT memory.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::fillNops):
        (JSC::ARM64Assembler::replaceWithVMHalt):
        (JSC::ARM64Assembler::replaceWithJump):
        (JSC::ARM64Assembler::replaceWithLoad):
        (JSC::ARM64Assembler::replaceWithAddressComputation):
        (JSC::ARM64Assembler::setPointer):
        (JSC::ARM64Assembler::repatchInt32):
        (JSC::ARM64Assembler::repatchCompact):
        (JSC::ARM64Assembler::linkJumpOrCall):
        (JSC::ARM64Assembler::linkCompareAndBranch):
        (JSC::ARM64Assembler::linkConditionalBranch):
        (JSC::ARM64Assembler::linkTestAndBranch):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        (JSC::LinkBuffer::linkCode):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):

2018-09-25  Keith Miller  <keith_miller@apple.com>

        Move Symbol API to SPI
        https://bugs.webkit.org/show_bug.cgi?id=189946

        Reviewed by Michael Saboff.

        Some of the property access methods on JSValue needed to be moved
        to a category so that SPI overloads don't result in a compiler
        error for internal users.

        Additionally, this patch does not move the new enum entry for
        Symbols in the JSType enumeration.

        * API/JSObjectRef.h:
        * API/JSObjectRefPrivate.h:
        * API/JSValue.h:
        * API/JSValuePrivate.h:
        * API/JSValueRef.h:

2018-09-26  Keith Miller  <keith_miller@apple.com>

        We should zero unused property storage when rebalancing array storage.
        https://bugs.webkit.org/show_bug.cgi?id=188151

        Reviewed by Michael Saboff.

        In unshiftCountSlowCase we sometimes will move property storage to the right even when net adding elements.
        This can happen because we "balance" the pre/post-capacity in that code so we need to zero the unused
        property storage.

        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase):

2018-09-26  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, add scope verification handling
        https://bugs.webkit.org/show_bug.cgi?id=189780

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):

2018-09-26  Koby Boyango  <koby.b@mce.systems>

        [JSC] offlineasm parser should handle CRLF in asm files
        https://bugs.webkit.org/show_bug.cgi?id=189949

        Reviewed by Mark Lam.

        * offlineasm/parser.rb:

2018-09-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Optimize Array#lastIndexOf
        https://bugs.webkit.org/show_bug.cgi?id=189780

        Reviewed by Saam Barati.

        Optimize Array#lastIndexOf as the same to Array#indexOf. We add a fast path
        for JSArray with contiguous storage.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncLastIndexOf):

2018-09-25  Saam Barati  <sbarati@apple.com>

        Calls to baselineCodeBlockForOriginAndBaselineCodeBlock in operationMaterializeObjectInOSR should actually pass in the baseline CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=189940
        <rdar://problem/43640987>

        Reviewed by Mark Lam.

        We were calling baselineCodeBlockForOriginAndBaselineCodeBlock with the FTL
        CodeBlock. There is nothing semantically wrong with doing that (except for
        poor naming), however, the poor naming here led us to make a real semantic
        mistake. We wanted the baseline CodeBlock's constant pool, but we were
        accessing the FTL CodeBlock's constant pool accidentally. We need to
        access the baseline CodeBlock's constant pool when we update the NewArrayBuffer
        constant value.

        * bytecode/InlineCallFrame.h:
        (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):

2018-09-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stricter block syntax in generated ObjC protocol interfaces
        https://bugs.webkit.org/show_bug.cgi?id=189962
        <rdar://problem/44648287>

        Reviewed by Brian Burg.

        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator._callback_block_for_command):
        If there are no return parameters include "void" in the block signature.

        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/domain-availability.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
        Rebaseline test results.

2018-09-24  Joseph Pecoraro  <pecoraro@apple.com>

        Remove AUTHORS and THANKS files which are stale
        https://bugs.webkit.org/show_bug.cgi?id=189941

        Reviewed by Darin Adler.

        Included mentions below so their names are still in ChangeLogs.

        * AUTHORS: Removed.
        Harri Porten (porten@kde.org) and Peter Kelly (pmk@post.com).
        These authors remain mentioned in copyrights in source files.

        * THANKS: Removed.
        Richard Moore <rich@kde.org> - for filling the Math object with some life
        Daegeun Lee <realking@mizi.com> - for pointing out some bugs and providing much code for the String and Date object.
        Marco Pinelli <pinmc@libero.it> - for his patches
        Christian Kirsch <ck@held.mind.de> - for his contribution to the Date object
        
2018-09-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Rename WTF_COMPILER_GCC_OR_CLANG to WTF_COMPILER_GCC_COMPATIBLE
        https://bugs.webkit.org/show_bug.cgi?id=189733

        Reviewed by Michael Catanzaro.

        * assembler/ARM64Assembler.h:
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::cacheFlush):
        * assembler/MacroAssemblerARM.cpp:
        (JSC::isVFPPresent):
        * assembler/MacroAssemblerARM64.cpp:
        * assembler/MacroAssemblerARMv7.cpp:
        * assembler/MacroAssemblerMIPS.cpp:
        * assembler/MacroAssemblerX86Common.cpp:
        * heap/HeapCell.cpp:
        * heap/HeapCell.h:
        * jit/HostCallReturnValue.h:
        * jit/JIT.h:
        * jit/JITOperations.cpp:
        * jit/ThunkGenerators.cpp:
        * runtime/ArrayConventions.cpp:
        (JSC::clearArrayMemset):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::digitDiv):

2018-09-24  Saam Barati  <sbarati@apple.com>

        Array.prototype.indexOf fast path needs to ensure the length is still valid after performing effects
        https://bugs.webkit.org/show_bug.cgi?id=189922
        <rdar://problem/44651275>

        Reviewed by Mark Lam.

        The implementation was first getting the length to iterate up to,
        then getting the starting index. However, getting the starting
        index may perform effects. e.g, it could change the length of the
        array. This changes it so we verify the length is still valid.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):

2018-09-24  Tadeu Zagallo  <tzagallo@apple.com>

        offlineasm: fix macro scoping
        https://bugs.webkit.org/show_bug.cgi?id=189902

        Reviewed by Mark Lam.

        In the code below, the reference to `f` in `g`, which should refer to
        the outer macro definition will instead refer to the f argument of the
        anonymous macro passed to `g`. That leads to this code failing to
        compile (f expected 0 args but got 1).
        
        ```
        macro f(x)
            move x, t0
        end
        
        macro g(fn)
            fn(macro () f(42) end)
        end
        
        g(macro(f) f() end)
        ```

        * offlineasm/ast.rb:
        * offlineasm/transform.rb:

2018-09-24  Tadeu Zagallo  <tzagallo@apple.com>

        Add forEach method for iterating CodeBlock's ValueProfiles
        https://bugs.webkit.org/show_bug.cgi?id=189897

        Reviewed by Mark Lam.

        Add method to abstract how we find ValueProfiles in a CodeBlock in
        preparation for https://bugs.webkit.org/show_bug.cgi?id=189785, when
        ValueProfiles will be stored in the MetadataTable.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
        (JSC::CodeBlock::updateAllValueProfilePredictions):
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::numberOfArgumentValueProfiles):
        (JSC::CodeBlock::valueProfileForArgument):
        (JSC::CodeBlock::numberOfValueProfiles):
        (JSC::CodeBlock::valueProfile):
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        * tools/HeapVerifier.cpp:
        (JSC::HeapVerifier::validateJSCell):

2018-09-24  Saam barati  <sbarati@apple.com>

        ArgumentsEliminationPhase should snip basic blocks after proven OSR exits
        https://bugs.webkit.org/show_bug.cgi?id=189682
        <rdar://problem/43557315>

        Reviewed by Mark Lam.

        Otherwise, if we have code like this:
        ```
        a: Arguments
        b: GetButterfly(@a)
        c: ForceExit
        d: GetArrayLength(@a, @b)
        ```
        it will get transformed into this invalid DFG IR:
        ```
        a: PhantomArguments
        b: Check(@a)
        c: ForceExit
        d: GetArrayLength(@a, @b)
        ```
        
        And we will fail DFG validation since @b does not have a result.
        
        The fix is to just remove all nodes after the ForceExit and plant an
        Unreachable after it. So the above code program will now turn into this:
        ```
        a: PhantomArguments
        b: Check(@a)
        c: ForceExit
        e: Unreachable
        ```

        * dfg/DFGArgumentsEliminationPhase.cpp:

2018-09-22  Saam barati  <sbarati@apple.com>

        The sampling should not use Strong<CodeBlock> in its machineLocation field
        https://bugs.webkit.org/show_bug.cgi?id=189319

        Reviewed by Filip Pizlo.

        The sampling profiler has a CLI mode where we gather information about inline
        call frames. That data structure was using a Strong<CodeBlock>. We were
        constructing this Strong<CodeBlock> during GC concurrently to processing all
        the Strong handles. This is a bug since we end up corrupting that data
        structure. This patch fixes this by just making this data structure use the
        sampling profiler's mechanism for holding onto and properly visiting heap pointers.

        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):

        (JSC::SamplingProfiler::reportTopFunctions):
        (JSC::SamplingProfiler::reportTopBytecodes):
        These CLI helpers needed a DeferGC otherwise we may end up deadlocking when we
        cause a GC to happen while already holding the sampling profiler's
        lock.

2018-09-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Enable LLInt ASM interpreter on X64 and ARM64 in non JIT configuration
        https://bugs.webkit.org/show_bug.cgi?id=189778

        Reviewed by Keith Miller.

        LLInt ASM interpreter is 2x and 15% faster than CLoop interpreter on
        Linux and macOS respectively. We would like to enable it for non JIT
        configurations in X86_64 and ARM64.

        This patch enables LLInt for non JIT builds in X86_64 and ARM64 architectures.
        Previously, we switch LLInt ASM interpreter and CLoop by using ENABLE(JIT)
        configuration. But it is wrong in the new scenario since we have a build
        configuration that uses LLInt ASM interpreter and JIT is disabled. We introduce
        ENABLE(C_LOOP) option, which represents that we use CLoop. And we replace
        ENABLE(JIT) with ENABLE(C_LOOP) if the previous ENABLE(JIT) is essentially just
        related to LLInt ASM interpreter and not related to JIT.

        We also replace some ENABLE(JIT) configurations with ENABLE(ASSEMBLER).
        ENABLE(ASSEMBLER) is now enabled even if we disable JIT since MacroAssembler
        has machine register information that is used in LLInt ASM interpreter.

        * API/tests/PingPongStackOverflowTest.cpp:
        (testPingPongStackOverflow):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MaxFrameExtentForSlowPathCall.h:
        * bytecode/CallReturnOffsetToBytecodeOffset.h: Removed. It is no longer used.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::calleeSaveRegisters const):
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters):
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters):
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * heap/Heap.cpp:
        (JSC::Heap::gatherJSStackRoots):
        (JSC::Heap::stopThePeriphery):
        * interpreter/CLoopStack.cpp:
        * interpreter/CLoopStack.h:
        * interpreter/CLoopStackInlines.h:
        * interpreter/EntryFrame.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
        * interpreter/Interpreter.h:
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::calleeSaveRegisters):
        * interpreter/VMEntryRecord.h:
        * jit/ExecutableAllocator.h:
        * jit/FPRInfo.h:
        (WTF::printInternal):
        * jit/GPRInfo.cpp:
        * jit/GPRInfo.h:
        (WTF::printInternal):
        * jit/HostCallReturnValue.cpp:
        (JSC::getHostCallReturnValueWithExecState): Moved. They are used in LLInt ASM interpreter too.
        * jit/HostCallReturnValue.h:
        * jit/JITOperations.cpp:
        (JSC::getHostCallReturnValueWithExecState): Deleted.
        * jit/JITOperationsMSVC64.cpp:
        * jit/Reg.cpp:
        * jit/Reg.h:
        * jit/RegisterAtOffset.cpp:
        * jit/RegisterAtOffset.h:
        * jit/RegisterAtOffsetList.cpp:
        * jit/RegisterAtOffsetList.h:
        * jit/RegisterMap.h:
        * jit/RegisterSet.cpp:
        * jit/RegisterSet.h:
        * jit/TempRegisterSet.cpp:
        * jit/TempRegisterSet.h:
        * llint/LLIntCLoop.cpp:
        * llint/LLIntCLoop.h:
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntData.h:
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LLIntOpcode.h:
        * llint/LLIntPCRanges.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LLIntThunks.cpp:
        * llint/LowLevelInterpreter.cpp:
        * llint/LowLevelInterpreter.h:
        * runtime/JSCJSValue.h:
        * runtime/MachineContext.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces): Enable SamplingProfiler
        for LLInt ASM interpreter with non JIT configuration.
        * runtime/TestRunnerUtils.cpp:
        (JSC::optimizeNextInvocation):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::getHostFunction):
        (JSC::VM::updateSoftReservedZoneSize):
        (JSC::sanitizeStackForVM):
        (JSC::VM::committedStackByteCount):
        * runtime/VM.h:
        * runtime/VMInlines.h:
        (JSC::VM::ensureStackCapacityFor):
        (JSC::VM::isSafeToRecurseSoft const):

2018-09-21  Keith Miller  <keith_miller@apple.com>

        Add Promise SPI
        https://bugs.webkit.org/show_bug.cgi?id=189809

        Reviewed by Saam Barati.

        The Patch adds new SPI to create promises. It's mostly SPI because
        I want to see how internal users react to it before we make it
        public.

        This patch adds a couple of new Obj-C SPI methods. The first
        creates a new promise using the same API that JS does where the
        user provides an executor callback. If an exception is raised
        in/to that callback the promise is automagically rejected. The
        other methods create a pre-resolved or rejected promise as this
        appears to be a common way to initialize a promise.

        I was also considering adding a second version of executor API
        where it would catch specific Obj-C exceptions. This would work by
        taking a Class paramter and checking isKindOfClass: on the
        exception. I decided against this as nothing else in our API
        handles Obj-C exceptions. I'm pretty sure the VM will end up in a
        corrupt state if an Obj-C exception unwinds through JS frames.

        This patch adds a new C function that will create a "deferred"
        promise. A deferred promise is a style of creating promise/futures
        where the resolve and reject functions are passed as outputs of a
        function. I went with this style for the C SPI because we don't have
        any concept of forwarding exceptions in the C API.

        In order to make the C API work I refactored a bit of the promise code
        so that we can call a static method on JSDeferredPromise and just get
        the components without allocating an extra cell wrapper.

        * API/JSContext.mm:
        (+[JSContext currentCallee]):
        * API/JSObjectRef.cpp:
        (JSObjectMakeDeferredPromise):
        * API/JSObjectRefPrivate.h:
        * API/JSValue.mm:
        (+[JSValue valueWithNewPromiseInContext:fromExecutor:]):
        (+[JSValue valueWithNewPromiseResolvedWithResult:inContext:]):
        (+[JSValue valueWithNewPromiseRejectedWithReason:inContext:]):
        * API/JSValuePrivate.h: Added.
        * API/JSVirtualMachine.mm:
        * API/JSVirtualMachinePrivate.h:
        * API/tests/testapi.c:
        (main):
        * API/tests/testapi.cpp:
        (APIContext::operator JSC::ExecState*):
        (TestAPI::failed const):
        (TestAPI::check):
        (TestAPI::basicSymbol):
        (TestAPI::symbolsTypeof):
        (TestAPI::symbolsGetPropertyForKey):
        (TestAPI::symbolsSetPropertyForKey):
        (TestAPI::symbolsHasPropertyForKey):
        (TestAPI::symbolsDeletePropertyForKey):
        (TestAPI::promiseResolveTrue):
        (TestAPI::promiseRejectTrue):
        (testCAPIViaCpp):
        (TestAPI::run): Deleted.
        * API/tests/testapi.mm:
        (testObjectiveCAPIMain):
        (promiseWithExecutor):
        (promiseRejectOnJSException):
        (promiseCreateResolved):
        (promiseCreateRejected):
        (parallelPromiseResolveTest):
        (testObjectiveCAPI):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSInternalPromiseDeferred.cpp:
        (JSC::JSInternalPromiseDeferred::create):
        * runtime/JSPromise.h:
        * runtime/JSPromiseConstructor.cpp:
        (JSC::constructPromise):
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::createDeferredData):
        (JSC::JSPromiseDeferred::create):
        (JSC::JSPromiseDeferred::finishCreation):
        (JSC::newPromiseCapability): Deleted.
        * runtime/JSPromiseDeferred.h:
        (JSC::JSPromiseDeferred::promise const):
        (JSC::JSPromiseDeferred::resolve const):
        (JSC::JSPromiseDeferred::reject const):

2018-09-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236359.

        Broke the Windows build.

        Reverted changeset:

        "Add Promise SPI"
        https://bugs.webkit.org/show_bug.cgi?id=189809
        https://trac.webkit.org/changeset/236359

2018-09-21  Mark Lam  <mark.lam@apple.com>

        JSRopeString::resolveRope() wrongly assumes that tryGetValue() passes it a valid ExecState.
        https://bugs.webkit.org/show_bug.cgi?id=189855
        <rdar://problem/44680181>

        Reviewed by Filip Pizlo.

        tryGetValue() always passes a nullptr to JSRopeString::resolveRope() for the
        ExecState* argument.  This is intentional so that resolveRope() does not throw
        in the event of an OutOfMemory error.  Hence, JSRopeString::resolveRope() should
        get the VM from the cell instead of via the ExecState.

        Also removed an obsolete and unused field in JSString.

        * runtime/JSString.cpp:
        (JSC::JSRopeString::resolveRope const):
        (JSC::JSRopeString::outOfMemory const):
        * runtime/JSString.h:
        (JSC::JSString::tryGetValue const):

2018-09-21  Michael Saboff  <msaboff@apple.com>

        Add functions to measure memory footprint to JSC
        https://bugs.webkit.org/show_bug.cgi?id=189768

        Reviewed by Saam Barati.

        Rolling this back in again.

        Provide system memory metrics for the current process to aid in memory reduction measurement and
        tuning using native JS tests.

        * jsc.cpp:
        (MemoryFootprint::now):
        (MemoryFootprint::resetPeak):
        (GlobalObject::finishCreation):
        (JSCMemoryFootprint::JSCMemoryFootprint):
        (JSCMemoryFootprint::createStructure):
        (JSCMemoryFootprint::create):
        (JSCMemoryFootprint::finishCreation):
        (JSCMemoryFootprint::addProperty):
        (functionResetMemoryPeak):

2018-09-21  Keith Miller  <keith_miller@apple.com>

        Add Promise SPI
        https://bugs.webkit.org/show_bug.cgi?id=189809

        Reviewed by Saam Barati.

        The Patch adds new SPI to create promises. It's mostly SPI because
        I want to see how internal users react to it before we make it
        public.

        This patch adds a couple of new Obj-C SPI methods. The first
        creates a new promise using the same API that JS does where the
        user provides an executor callback. If an exception is raised
        in/to that callback the promise is automagically rejected. The
        other methods create a pre-resolved or rejected promise as this
        appears to be a common way to initialize a promise.

        I was also considering adding a second version of executor API
        where it would catch specific Obj-C exceptions. This would work by
        taking a Class paramter and checking isKindOfClass: on the
        exception. I decided against this as nothing else in our API
        handles Obj-C exceptions. I'm pretty sure the VM will end up in a
        corrupt state if an Obj-C exception unwinds through JS frames.

        This patch adds a new C function that will create a "deferred"
        promise. A deferred promise is a style of creating promise/futures
        where the resolve and reject functions are passed as outputs of a
        function. I went with this style for the C SPI because we don't have
        any concept of forwarding exceptions in the C API.

        In order to make the C API work I refactored a bit of the promise code
        so that we can call a static method on JSDeferredPromise and just get
        the components without allocating an extra cell wrapper.

        * API/JSContext.mm:
        (+[JSContext currentCallee]):
        * API/JSObjectRef.cpp:
        (JSObjectMakeDeferredPromise):
        * API/JSObjectRefPrivate.h:
        * API/JSValue.mm:
        (+[JSValue valueWithNewPromiseInContext:fromExecutor:]):
        (+[JSValue valueWithNewPromiseResolvedWithResult:inContext:]):
        (+[JSValue valueWithNewPromiseRejectedWithReason:inContext:]):
        * API/JSValuePrivate.h: Added.
        * API/JSVirtualMachine.mm:
        * API/JSVirtualMachinePrivate.h:
        * API/tests/testapi.c:
        (main):
        * API/tests/testapi.cpp:
        (APIContext::operator JSC::ExecState*):
        (TestAPI::failed const):
        (TestAPI::check):
        (TestAPI::basicSymbol):
        (TestAPI::symbolsTypeof):
        (TestAPI::symbolsGetPropertyForKey):
        (TestAPI::symbolsSetPropertyForKey):
        (TestAPI::symbolsHasPropertyForKey):
        (TestAPI::symbolsDeletePropertyForKey):
        (TestAPI::promiseResolveTrue):
        (TestAPI::promiseRejectTrue):
        (testCAPIViaCpp):
        (TestAPI::run): Deleted.
        * API/tests/testapi.mm:
        (testObjectiveCAPIMain):
        (promiseWithExecutor):
        (promiseRejectOnJSException):
        (promiseCreateResolved):
        (promiseCreateRejected):
        (parallelPromiseResolveTest):
        (testObjectiveCAPI):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSInternalPromiseDeferred.cpp:
        (JSC::JSInternalPromiseDeferred::create):
        * runtime/JSPromise.h:
        * runtime/JSPromiseConstructor.cpp:
        (JSC::constructPromise):
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::createDeferredData):
        (JSC::JSPromiseDeferred::create):
        (JSC::JSPromiseDeferred::finishCreation):
        (JSC::newPromiseCapability): Deleted.
        * runtime/JSPromiseDeferred.h:
        (JSC::JSPromiseDeferred::promise const):
        (JSC::JSPromiseDeferred::resolve const):
        (JSC::JSPromiseDeferred::reject const):

2018-09-21  Truitt Savell  <tsavell@apple.com>

        Rebaseline tests after changes in https://trac.webkit.org/changeset/236321/webkit
        https://bugs.webkit.org/show_bug.cgi?id=156674

        Unreviewed Test Gardening

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

2018-09-21  Mike Gorse  <mgorse@suse.com>

        Build tools should work when the /usr/bin/python is python3
        https://bugs.webkit.org/show_bug.cgi?id=156674

        Reviewed by Michael Catanzaro.

        * Scripts/cssmin.py:
        * Scripts/generate-js-builtins.py:
        (do_open):
        (generate_bindings_for_builtins_files):
        * Scripts/generateIntlCanonicalizeLanguage.py:
        * Scripts/jsmin.py:
        (JavascriptMinify.minify.write):
        (JavascriptMinify):
        (JavascriptMinify.minify):
        * Scripts/make-js-file-arrays.py:
        (chunk):
        (main):
        * Scripts/wkbuiltins/__init__.py:
        * Scripts/wkbuiltins/builtins_generate_combined_header.py:
        (generate_section_for_global_private_code_name_macro):
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:
        (BuiltinsInternalsWrapperHeaderGenerator.__init__):
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:
        (BuiltinsInternalsWrapperImplementationGenerator.__init__):
        * Scripts/wkbuiltins/builtins_model.py:
        (BuiltinFunction.__lt__):
        (BuiltinsCollection.copyrights):
        (BuiltinsCollection._parse_functions):
        * disassembler/udis86/ud_opcode.py:
        (UdOpcodeTables.pprint.printWalk):
        * generate-bytecode-files:
        * inspector/scripts/codegen/__init__.py:
        * inspector/scripts/codegen/cpp_generator.py:
        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator.generate_output):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator.domains_to_generate):
        (CppBackendDispatcherHeaderGenerator.generate_output):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator.domains_to_generate):
        (CppBackendDispatcherImplementationGenerator.generate_output):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator.domains_to_generate):
        (CppFrontendDispatcherHeaderGenerator.generate_output):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator.domains_to_generate):
        (CppFrontendDispatcherImplementationGenerator.generate_output):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator.generate_output):
        (CppProtocolTypesHeaderGenerator._generate_forward_declarations):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator.generate_output):
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_enum_mapping_and_conversion_methods):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        (CppProtocolTypesImplementationGenerator._generate_builders_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_assertion_for_object_declaration):
        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.should_generate_domain):
        (JSBackendCommandsGenerator.domains_to_generate):
        (JSBackendCommandsGenerator.generate_output):
        (JSBackendCommandsGenerator.generate_domain):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator.domains_to_generate):
        (ObjCBackendDispatcherHeaderGenerator.generate_output):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCBackendDispatcherImplementationGenerator.generate_output):
        (ObjCBackendDispatcherImplementationGenerator._generate_success_block_for_command):
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCFrontendDispatcherImplementationGenerator.generate_output):
        (ObjCFrontendDispatcherImplementationGenerator._generate_event):
        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator.generate_output):
        (ObjCHeaderGenerator._generate_type_interface):
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        (ObjCInternalHeaderGenerator.generate_output):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate):
        (ObjCProtocolTypeConversionsHeaderGenerator.generate_output):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator.domains_to_generate):
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator.domains_to_generate):
        (ObjCProtocolTypesImplementationGenerator.generate_output):
        (ObjCProtocolTypesImplementationGenerator.generate_type_implementation):
        (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_required_members):
        * inspector/scripts/codegen/generator.py:
        (Generator.non_supplemental_domains):
        (Generator.open_fields):
        (Generator.calculate_types_requiring_shape_assertions):
        (Generator._traverse_and_assign_enum_values):
        (Generator.stylized_name_for_enum_value):
        * inspector/scripts/codegen/models.py:
        (find_duplicates):
        * inspector/scripts/codegen/objc_generator.py:
        * wasm/generateWasm.py:
        (opcodeIterator):
        * yarr/generateYarrCanonicalizeUnicode:
        * yarr/generateYarrUnicodePropertyTables.py:
        * yarr/hasher.py:
        (stringHash):

2018-09-21  Tomas Popela  <tpopela@redhat.com>

        [ARM] Build broken on armv7hl after r235517
        https://bugs.webkit.org/show_bug.cgi?id=189831

        Reviewed by Yusuke Suzuki.

        Add missing implementation of patchebleBranch8() for traditional ARM.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::patchableBranch8):

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236293.

        Internal build still broken.

        Reverted changeset:

        "Add functions to measure memory footprint to JSC"
        https://bugs.webkit.org/show_bug.cgi?id=189768
        https://trac.webkit.org/changeset/236293

2018-09-20  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Heap::reportExtraMemoryVisited shows contention if we have many JSString
        https://bugs.webkit.org/show_bug.cgi?id=189558

        Reviewed by Mark Lam.

        When running web-tooling-benchmark postcss test on Linux JSCOnly port, we get the following result in `perf report`.

            10.95%  AutomaticThread  libJavaScriptCore.so.1.0.0  [.] JSC::Heap::reportExtraMemoryVisited

        This is because postcss produces bunch of JSString, which require reportExtraMemoryVisited calls in JSString::visitChildren.
        And since reportExtraMemoryVisited attempts to update atomic counter, if we have bunch of marking threads, it becomes super contended.

        This patch reduces the frequency of updating the atomic counter. Each SlotVisitor has per-SlotVisitor m_extraMemorySize counter.
        And we propagate this value to the global atomic counter when rebalance happens.

        We also reduce HeapCell::heap() access by using `vm.heap`.

        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didStartMarking):
        (JSC::SlotVisitor::propagateExternalMemoryVisitedIfNecessary):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::performIncrementOfDraining):
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        * runtime/JSString.cpp:
        (JSC::JSRopeString::resolveRopeToAtomicString const):
        (JSC::JSRopeString::resolveRope const):
        * runtime/JSString.h:
        (JSC::JSString::finishCreation):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finishCreation):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::finishCreation):

2018-09-20  Michael Saboff  <msaboff@apple.com>

        Add functions to measure memory footprint to JSC
        https://bugs.webkit.org/show_bug.cgi?id=189768

        Reviewed by Saam Barati.

        Rolling this back in.

        Provide system memory metrics for the current process to aid in memory reduction measurement and
        tuning using native JS tests.

        * jsc.cpp:
        (MemoryFootprint::now):
        (MemoryFootprint::resetPeak):
        (GlobalObject::finishCreation):
        (JSCMemoryFootprint::JSCMemoryFootprint):
        (JSCMemoryFootprint::createStructure):
        (JSCMemoryFootprint::create):
        (JSCMemoryFootprint::finishCreation):
        (JSCMemoryFootprint::addProperty):
        (functionResetMemoryPeak):

2018-09-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r236235.

        Breaks internal builds.

        Reverted changeset:

        "Add functions to measure memory footprint to JSC"
        https://bugs.webkit.org/show_bug.cgi?id=189768
        https://trac.webkit.org/changeset/236235

2018-09-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] JITMathIC.h: error: missing 'template' keyword prior to dependent template name 'retagged'
        https://bugs.webkit.org/show_bug.cgi?id=189730

        Reviewed by Saam Barati.

        Clang for Windows can't compile the workaround for MSVC quirk in generateOutOfLine.

        * jit/JITMathIC.h:
        (generateOutOfLine): Append "&& !COMPILER(CLANG)" to "#if COMPILER(MSVC)".

2018-09-19  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Optimize Array#indexOf in C++ runtime
        https://bugs.webkit.org/show_bug.cgi?id=189507

        Reviewed by Saam Barati.

        C++ Array#indexOf runtime function takes so much time in babylon benchmark in
        web-tooling-benchmark. While our DFG and FTL has Array#indexOf optimization
        and actually it is working well, C++ Array#indexOf is called significant amount
        of time before tiering up, and it takes 6.74% of jsc main thread samples according
        to perf command in Linux. This is because C++ Array#indexOf is too generic and
        misses the chance to optimize JSArray cases.

        This patch adds JSArray fast path for Array#indexOf. If we know that indexed
        access to the given JSArray is non-observable and indexing type is good for the fast
        path, we go to the fast path. This makes sampling of Array#indexOf 3.83% in
        babylon web-tooling-benchmark.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):
        * runtime/JSArray.h:
        * runtime/JSArrayInlines.h:
        (JSC::JSArray::canDoFastIndexedAccess):
        (JSC::toLength):
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::JSValue):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectInlines.h:
        (JSC::JSGlobalObject::isArrayPrototypeIndexedAccessFastAndNonObservable):
        (JSC::JSGlobalObject::isArrayPrototypeIteratorProtocolFastAndNonObservable):
        * runtime/MathCommon.h:
        (JSC::canBeStrictInt32):
        (JSC::canBeInt32):

2018-09-19  Michael Saboff  <msaboff@apple.com>

        Add functions to measure memory footprint to JSC
        https://bugs.webkit.org/show_bug.cgi?id=189768

        Reviewed by Saam Barati.

        Provide system memory metrics for the current process to aid in memory reduction measurement and
        tuning using native JS tests.

        * jsc.cpp:
        (MemoryFootprint::now):
        (MemoryFootprint::resetPeak):
        (GlobalObject::finishCreation):
        (JSCMemoryFootprint::JSCMemoryFootprint):
        (JSCMemoryFootprint::createStructure):
        (JSCMemoryFootprint::create):
        (JSCMemoryFootprint::finishCreation):
        (JSCMemoryFootprint::addProperty):
        (functionResetMemoryPeak):

2018-09-19  Saam barati  <sbarati@apple.com>

        CheckStructureOrEmpty should pass in a tempGPR to emitStructureCheck since it may jump over that code
        https://bugs.webkit.org/show_bug.cgi?id=189703

        Reviewed by Mark Lam.

        This fixes a crash that a TypeProfiler change revealed.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2018-09-19  Saam barati  <sbarati@apple.com>

        AI rule for MultiPutByOffset executes its effects in the wrong order
        https://bugs.webkit.org/show_bug.cgi?id=189757
        <rdar://problem/43535257>

        Reviewed by Michael Saboff.

        The AI rule for MultiPutByOffset was executing effects in the wrong order.
        It first executed the transition effects and the effects on the base, and
        then executed the filtering effects on the value being stored. However, you
        can end up with the wrong type when the base and the value being stored
        are the same. E.g, in a program like `o.f = o`. These effects need to happen
        in the opposite order, modeling what happens in the runtime executing of
        MultiPutByOffset.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2018-09-18  Mark Lam  <mark.lam@apple.com>

        Ensure that ForInContexts are invalidated if their loop local is over-written.
        https://bugs.webkit.org/show_bug.cgi?id=189571
        <rdar://problem/44402277>

        Reviewed by Saam Barati.

        Instead of hunting down every place in the BytecodeGenerator that potentially
        needs to invalidate an enclosing ForInContext (if one exists), we simply iterate
        the bytecode range of the loop body when the ForInContext is popped, and
        invalidate the context if we ever find the loop temp variable over-written.

        This has 2 benefits:
        1. It ensures that every type of opcode that can write to the loop temp will be
           handled appropriately, not just the op_mov that we've hunted down.
        2. It avoids us having to check the BytecodeGenerator's m_forInContextStack
           every time we emit an op_mov (or other opcodes that can write to a local)
           even when we're not inside a for-in loop.

        JSC benchmarks show that that this change is performance neutral.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::pushIndexedForInScope):
        (JSC::BytecodeGenerator::popIndexedForInScope):
        (JSC::BytecodeGenerator::pushStructureForInScope):
        (JSC::BytecodeGenerator::popStructureForInScope):
        (JSC::ForInContext::finalize):
        (JSC::StructureForInContext::finalize):
        (JSC::IndexedForInContext::finalize):
        (JSC::BytecodeGenerator::invalidateForInContextForLocal): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::ForInContext::ForInContext):
        (JSC::ForInContext::bodyBytecodeStartOffset const):
        (JSC::StructureForInContext::StructureForInContext):
        (JSC::IndexedForInContext::IndexedForInContext):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PostfixNode::emitResolve):
        (JSC::PrefixNode::emitResolve):
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::EmptyLetExpression::emitBytecode):
        (JSC::ForInNode::emitLoopHeader):
        (JSC::ForOfNode::emitBytecode):
        (JSC::BindingNode::bindValue const):
        (JSC::AssignmentElementNode::bindValue const):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2018-09-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: generate CSSKeywordCompletions from backend values
        https://bugs.webkit.org/show_bug.cgi?id=189041

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/CSS.json:
        Include an optional `aliases` array and `inherited` boolean for `CSSPropertyInfo`.

2018-09-17  Saam barati  <sbarati@apple.com>

        We must convert ProfileType to CheckStructureOrEmpty instead of CheckStructure
        https://bugs.webkit.org/show_bug.cgi?id=189676
        <rdar://problem/39682897>

        Reviewed by Michael Saboff.

        Because the incoming value may be TDZ, CheckStructure may end up crashing.
        Since the Type Profile does not currently record TDZ values in any of its
        data structures, this is not a semantic change in how it will show you data.
        It just fixes crashes when we emit a CheckStructure and the incoming value
        is TDZ.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToCheckStructureOrEmpty):

2018-09-17  Darin Adler  <darin@apple.com>

        Use OpaqueJSString rather than JSRetainPtr inside WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189652

        Reviewed by Saam Barati.

        * API/JSCallbackObjectFunctions.h: Removed an uneeded include of
        JSStringRef.h.

        * API/JSContext.mm:
        (-[JSContext evaluateScript:withSourceURL:]): Use OpaqueJSString::create rather
        than JSStringCreateWithCFString, simplifying the code and also obviating the
        need for explicit JSStringRelease.
        (-[JSContext setName:]): Ditto.

        * API/JSStringRef.cpp:
        (JSStringIsEqualToUTF8CString): Use adoptRef rather than explicit JSStringRelease.
        It seems that additional optimization is possible, obviating the need to allocate
        an OpaqueJSString, but that's true almost everywhere else in this patch, too.

        * API/JSValue.mm:
        (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]): Use
        OpaqueJSString::create and adoptRef as appropriate.
        (+[JSValue valueWithNewErrorFromMessage:inContext:]): Ditto.
        (+[JSValue valueWithNewSymbolFromDescription:inContext:]): Ditto.
        (performPropertyOperation): Ditto.
        (-[JSValue invokeMethod:withArguments:]): Ditto.
        (valueToObjectWithoutCopy): Ditto.
        (containerValueToObject): Ditto.
        (valueToString): Ditto.
        (objectToValueWithoutCopy): Ditto.
        (objectToValue): Ditto.

2018-09-08  Darin Adler  <darin@apple.com>

        Streamline JSRetainPtr, fix leaks of JSString and JSGlobalContext
        https://bugs.webkit.org/show_bug.cgi?id=189455

        Reviewed by Keith Miller.

        * API/JSObjectRef.cpp:
        (OpaqueJSPropertyNameArray): Use Ref<OpaqueJSString> instead of
        JSRetainPtr<JSStringRef>.
        (JSObjectCopyPropertyNames): Remove now-unneeded use of leakRef and
        adopt constructor.
        (JSPropertyNameArrayGetNameAtIndex): Use ptr() instead of get() since
        the array elements are now Ref.

        * API/JSRetainPtr.h: While JSRetainPtr is written as a template,
        it only works for two specific unrelated types, JSStringRef and
        JSGlobalContextRef. Simplified the default constructor using data
        member initialization. Prepared to make the adopt constructor private
        (got everything compiling that way, then made it public again so that
        Apple internal software will still build). Got rid of unneeded
        templated constructor and assignment operator, since it's not relevant
        since there is no inheritance between JSRetainPtr template types.
        Added WARN_UNUSED_RETURN to leakRef as in RefPtr and RetainPtr.
        Added move constructor and move assignment operator for slightly better
        performance. Simplified implementations of various member functions
        so they are more obviously correct, by using leakPtr in more of them
        and using std::exchange to make the flow of values more obvious.

        * API/JSValue.mm:
        (+[JSValue valueWithNewSymbolFromDescription:inContext:]): Added a
        missing JSStringRelease to fix a leak.

        * API/tests/CustomGlobalObjectClassTest.c:
        (customGlobalObjectClassTest): Added a JSGlobalContextRelease to fix a leak.
        (globalObjectSetPrototypeTest): Ditto.
        (globalObjectPrivatePropertyTest): Ditto.

        * API/tests/ExecutionTimeLimitTest.cpp:
        (testResetAfterTimeout): Added a call to JSStringRelease to fix a leak.
        (testExecutionTimeLimit): Ditto, lots more.

        * API/tests/FunctionOverridesTest.cpp:
        (testFunctionOverrides): Added a call to JSStringRelease to fix a leak.

        * API/tests/JSObjectGetProxyTargetTest.cpp:
        (testJSObjectGetProxyTarget): Added a call to JSGlobalContextRelease to fix
        a leak.

        * API/tests/PingPongStackOverflowTest.cpp:
        (testPingPongStackOverflow): Added calls to JSGlobalContextRelease and
        JSStringRelease to fix leaks.

        * API/tests/testapi.c:
        (throwException): Added. Helper function for repeated idiom where we want
        to throw an exception, but with additional JSStringRelease calls so we don't
        have to leak just to keep the code simpler to read.
        (MyObject_getProperty): Use throwException.
        (MyObject_setProperty): Ditto.
        (MyObject_deleteProperty): Ditto.
        (isValueEqualToString): Added. Helper function for an idiom where we check
        if something is a string and then if it's equal to a particular string
        constant, but a version that has an additional JSStringRelease call so we
        don't have to leak just to keep the code simpler to read.
        (MyObject_callAsFunction): Use isValueEqualToString and throwException.
        (MyObject_callAsConstructor): Ditto.
        (MyObject_hasInstance): Ditto.
        (globalContextNameTest): Added a JSGlobalContextRelease to fix a leak.
        (testMarkingConstraintsAndHeapFinalizers): Ditto.

2018-09-14  Saam barati  <sbarati@apple.com>

        Don't dump OSRAvailabilityData in Graph::dump because a stale Availability may point to a Node that is already freed
        https://bugs.webkit.org/show_bug.cgi?id=189628
        <rdar://problem/39481690>

        Reviewed by Mark Lam.

        An Availability may point to a Node. And that Node may be removed from
        the graph, e.g, it's freed and its memory is no longer owned by Graph.
        This patch makes it so we no longer dump this metadata by default. If
        this metadata is interesting to you, you'll need to go in and change
        Graph::dump to dump the needed metadata.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):

2018-09-14  Mark Lam  <mark.lam@apple.com>

        Refactor some ForInContext code for better encapsulation.
        https://bugs.webkit.org/show_bug.cgi?id=189626
        <rdar://problem/44466415>

        Reviewed by Keith Miller.

        1. Add a ForInContext::m_type field to store the context type.  This does not
           increase the class size, but eliminates the need for a virtual call to get the
           type.

           Note: we still need a virtual destructor because we'll be mingling
           IndexedForInContexts and StructureForInContexts in the BytecodeGenerator::m_forInContextStack.

        2. Add ForInContext::isIndexedForInContext() and ForInContext::isStructureForInContext()
           convenience methods.

        3. Add ForInContext::asIndexedForInContext() and ForInContext::asStructureForInContext()
           to do the casting to the subclass types.  This ensures that we'll properly
           assert that the casting is legal.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::popIndexedForInScope):
        (JSC::BytecodeGenerator::popStructureForInScope):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::ForInContext::type const):
        (JSC::ForInContext::isIndexedForInContext const):
        (JSC::ForInContext::isStructureForInContext const):
        (JSC::ForInContext::asIndexedForInContext):
        (JSC::ForInContext::asStructureForInContext):
        (JSC::ForInContext::ForInContext):
        (JSC::StructureForInContext::StructureForInContext):
        (JSC::IndexedForInContext::IndexedForInContext):
        (JSC::ForInContext::~ForInContext): Deleted.

2018-09-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Record actions performed on ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=181341

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/Recording.json:
        * inspector/scripts/codegen/generator.py:

2018-09-14  Mike Gorse  <mgorse@suse.com>

        builtins directory causes name conflict on Python 3
        https://bugs.webkit.org/show_bug.cgi?id=189552

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt: builtins -> wkbuiltins.
        * DerivedSources.make: builtins -> wkbuiltins.
        * Scripts/generate-js-builtins.py: import wkbuiltins, rather than
          builtins.
        * Scripts/wkbuiltins/__init__.py: Renamed from Source/JavaScriptCore/Scripts/builtins/__init__.py.
        * Scripts/wkbuiltins/builtins_generate_combined_header.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py.
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_internals_wrapper_implementation.py.
        * Scripts/wkbuiltins/builtins_generate_separate_header.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py.
        * Scripts/wkbuiltins/builtins_generate_separate_implementation.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py.
        * Scripts/wkbuiltins/builtins_generate_wrapper_header.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_header.py.
        * Scripts/wkbuiltins/builtins_generate_wrapper_implementation.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generate_wrapper_implementation.py.
        * Scripts/wkbuiltins/builtins_generator.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_generator.py.
        * Scripts/wkbuiltins/builtins_model.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_model.py.
        * Scripts/wkbuiltins/builtins_templates.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins_templates.py.
        * Scripts/wkbuiltins/wkbuiltins.py: Renamed from Source/JavaScriptCore/Scripts/builtins/builtins.py.
        * JavaScriptCore.xcodeproj/project.pbxproj: Update for the renaming.

2018-09-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [WebAssembly] Inline WasmContext accessor functions
        https://bugs.webkit.org/show_bug.cgi?id=189416

        Reviewed by Saam Barati.

        WasmContext accessor functions are very small while it resides in the critical path of
        JS to Wasm function call. This patch makes them inline to improve performance.
        This change improves a small benchmark (calling JS to Wasm function 1e7 times) from 320ms to 270ms.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * interpreter/CallFrame.cpp:
        * jit/AssemblyHelpers.cpp:
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmContextInlines.h: Renamed from Source/JavaScriptCore/wasm/WasmContext.cpp.
        (JSC::Wasm::Context::useFastTLS):
        (JSC::Wasm::Context::load const):
        (JSC::Wasm::Context::store):
        * wasm/WasmMemoryInformation.cpp:
        * wasm/WasmModuleParser.cpp: Include <wtf/SHA1.h> due to changes of unified source combinations.
        * wasm/js/JSToWasm.cpp:
        * wasm/js/WebAssemblyFunction.cpp:

2018-09-12  David Kilzer  <ddkilzer@apple.com>

        Move JavaScriptCore files to match Xcode project hierarchy
        <https://webkit.org/b/189574>

        Reviewed by Filip Pizlo.

        * API/JSAPIValueWrapper.cpp: Rename from Source/JavaScriptCore/runtime/JSAPIValueWrapper.cpp.
        * API/JSAPIValueWrapper.h: Rename from Source/JavaScriptCore/runtime/JSAPIValueWrapper.h.
        * CMakeLists.txt: Update for new path to
        generateYarrUnicodePropertyTables.py, hasher.py and
        JSAPIValueWrapper.h.
        * DerivedSources.make: Ditto. Add missing dependency on
        hasher.py captured by CMakeLists.txt.
        * JavaScriptCore.xcodeproj/project.pbxproj: Update for new file
        reference paths. Add hasher.py library to project.
        * Sources.txt: Update for new path to
        JSAPIValueWrapper.cpp.
        * runtime/JSImmutableButterfly.h: Add missing includes
        after changes to Sources.txt and regenerating unified
        sources.
        * runtime/RuntimeType.h: Ditto.
        * yarr/generateYarrUnicodePropertyTables.py: Rename from Source/JavaScriptCore/Scripts/generateYarrUnicodePropertyTables.py.
        * yarr/hasher.py: Rename from Source/JavaScriptCore/Scripts/hasher.py.

2018-09-12  David Kilzer  <ddkilzer@apple.com>

        Let Xcode have its way with the JavaScriptCore project

        * JavaScriptCore.xcodeproj/project.pbxproj:

2018-09-12  Guillaume Emont  <guijemont@igalia.com>

        Add IGNORE_WARNING_.* macros
        https://bugs.webkit.org/show_bug.cgi?id=188996

        Reviewed by Michael Catanzaro.

        * API/JSCallbackObject.h:
        * API/tests/testapi.c:
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::finalizeCodeWithDisassembly):
        * b3/B3LowerToAir.cpp:
        * b3/B3Opcode.cpp:
        * b3/B3Type.h:
        * b3/B3TypeMap.h:
        * b3/B3Width.h:
        * b3/air/AirArg.cpp:
        * b3/air/AirArg.h:
        * b3/air/AirCode.h:
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNumber):
        (JSC::DFG::SpeculativeJIT::speculateMisc):
        * dfg/DFGSpeculativeJIT64.cpp:
        * ftl/FTLOutput.h:
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::calculatePokeOffset):
        * llint/LLIntData.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::slowPathLogF):
        * runtime/ConfigFile.cpp:
        (JSC::ConfigFile::canonicalizePaths):
        * runtime/JSDataViewPrototype.cpp:
        * runtime/JSGenericTypedArrayViewConstructor.h:
        * runtime/JSGenericTypedArrayViewPrototype.h:
        * runtime/Options.cpp:
        (JSC::Options::setAliasedOption):
        * tools/CodeProfiling.cpp:
        * wasm/WasmSections.h:
        * wasm/generateWasmValidateInlinesHeader.py:

== Rolled over to ChangeLog-2018-09-11 ==
