| 2018-10-28  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r237325. rdar://problem/45363533 | 
 |  | 
 |     DFGAbstractValue::m_arrayModes expects IndexingMode values, not IndexingType. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=190515 | 
 |     <rdar://problem/45222379> | 
 |      | 
 |     Reviewed by Saam Barati. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-190515.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     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): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237325 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Cherry-pick r237469. rdar://problem/45363534 | 
 |  | 
 |     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-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236606. rdar://problem/45285669 | 
 |  | 
 |     Gardening: speculative build fix. | 
 |     <rdar://problem/44869924> | 
 |      | 
 |     Not reviewed. | 
 |      | 
 |     * assembler/LinkBuffer.cpp: | 
 |     (JSC::LinkBuffer::copyCompactAndLinkCode): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236606 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236604. rdar://problem/45285669 | 
 |  | 
 |     [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): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236604 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236589. rdar://problem/45285669 | 
 |  | 
 |     Verify the contents of AssemblerBuffer on arm64e | 
 |     https://bugs.webkit.org/show_bug.cgi?id=190057 | 
 |     <rdar://problem/38916630> | 
 |      | 
 |     Reviewed by Mark Lam. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-189132.js: | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     * 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): | 
 |      | 
 |     Source/WTF: | 
 |      | 
 |     * wtf/PtrTag.h: | 
 |     (WTF::tagInt): | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236589 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-25  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Revert r237373. rdar://problem/45285669 | 
 |  | 
 | 2018-10-25  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Revert r236604. rdar://problem/45285669 | 
 |  | 
 | 2018-10-25  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Revert r236606. rdar://problem/45285669 | 
 |  | 
 | 2018-10-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236606. rdar://problem/45285669 | 
 |  | 
 |     Gardening: speculative build fix. | 
 |     <rdar://problem/44869924> | 
 |      | 
 |     Not reviewed. | 
 |      | 
 |     * assembler/LinkBuffer.cpp: | 
 |     (JSC::LinkBuffer::copyCompactAndLinkCode): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236606 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236589. rdar://problem/45285669 | 
 |  | 
 |     Verify the contents of AssemblerBuffer on arm64e | 
 |     https://bugs.webkit.org/show_bug.cgi?id=190057 | 
 |     <rdar://problem/38916630> | 
 |      | 
 |     Reviewed by Mark Lam. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-189132.js: | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     * 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): | 
 |      | 
 |     Source/WTF: | 
 |      | 
 |     * wtf/PtrTag.h: | 
 |     (WTF::tagInt): | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236589 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-23  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236604. rdar://problem/45285669 | 
 |  | 
 |     [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): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236604 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-10-21  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r237215. rdar://problem/45445113 | 
 |  | 
 |     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): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237215 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-21  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r236804. rdar://problem/45285687 | 
 |  | 
 |     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. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-190187.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     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): | 
 |      | 
 |     Source/WTF: | 
 |      | 
 |     * wtf/text/StringConcatenate.h: | 
 |     (WTF::tryMakeStringFromAdapters): | 
 |     (WTF::sumWithOverflow): Deleted. | 
 |     * wtf/text/StringImpl.h: | 
 |     * wtf/text/WTFString.h: | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236804 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-21  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234127. rdar://problem/45285391 | 
 |  | 
 |     [INTL] Language tags are not canonicalized | 
 |     https://bugs.webkit.org/show_bug.cgi?id=185836 | 
 |      | 
 |     Patch by Andy VanWagoner <andy@vanwagoner.family> on 2018-07-23 | 
 |     Reviewed by Keith Miller. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     Remove expected failures that have been fixed. | 
 |      | 
 |     * test262/expectations.yaml: | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     Canonicalize language tags, replacing deprecated tag parts with the | 
 |     preferred values. Remove broken support for algorithmic numbering systems, | 
 |     that can cause an error in icu, and are not supported in other engines. | 
 |      | 
 |     Generate the lookup functions from the language-subtag-registry. | 
 |      | 
 |     Also initialize the UNumberFormat in initializeNumberFormat so any | 
 |     failures are thrown immediately instead of failing to format later. | 
 |      | 
 |     * CMakeLists.txt: | 
 |     * DerivedSources.make: | 
 |     * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |     * Scripts/generateIntlCanonicalizeLanguage.py: Added. | 
 |     * runtime/IntlDateTimeFormat.cpp: | 
 |     (JSC::IntlDateTimeFormat::initializeDateTimeFormat): | 
 |     * runtime/IntlNumberFormat.cpp: | 
 |     (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |     (JSC::IntlNumberFormat::formatNumber): | 
 |     (JSC::IntlNumberFormat::formatToParts): | 
 |     (JSC::IntlNumberFormat::createNumberFormat): Deleted. | 
 |     * runtime/IntlNumberFormat.h: | 
 |     * runtime/IntlObject.cpp: | 
 |     (JSC::intlNumberOption): | 
 |     (JSC::intlDefaultNumberOption): | 
 |     (JSC::preferredLanguage): | 
 |     (JSC::preferredRegion): | 
 |     (JSC::canonicalLangTag): | 
 |     (JSC::canonicalizeLanguageTag): | 
 |     (JSC::defaultLocale): | 
 |     (JSC::removeUnicodeLocaleExtension): | 
 |     (JSC::numberingSystemsForLocale): | 
 |     (JSC::grandfatheredLangTag): Deleted. | 
 |     * runtime/IntlObject.h: | 
 |     * runtime/IntlPluralRules.cpp: | 
 |     (JSC::IntlPluralRules::initializePluralRules): | 
 |     * runtime/JSGlobalObject.cpp: | 
 |     (JSC::addMissingScriptLocales): | 
 |     (JSC::JSGlobalObject::intlCollatorAvailableLocales): | 
 |     (JSC::JSGlobalObject::intlDateTimeFormatAvailableLocales): | 
 |     (JSC::JSGlobalObject::intlNumberFormatAvailableLocales): | 
 |     (JSC::JSGlobalObject::intlPluralRulesAvailableLocales): | 
 |     * ucd/language-subtag-registry.txt: Added. | 
 |      | 
 |     LayoutTests: | 
 |      | 
 |     Use gregory instead of gregorian, matching test262/intl402 and other engines. | 
 |     Remove tests for algorithmic numbering systems. Add NumberFormat numbering system tests. | 
 |      | 
 |     * js/intl-datetimeformat-expected.txt: | 
 |     * js/intl-numberformat-expected.txt: | 
 |     * js/script-tests/intl-datetimeformat.js: | 
 |     * js/script-tests/intl-numberformat.js: | 
 |     (string_appeared_here): | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234127 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-23  Andy VanWagoner  <andy@vanwagoner.family> | 
 |  | 
 |             [INTL] Language tags are not canonicalized | 
 |             https://bugs.webkit.org/show_bug.cgi?id=185836 | 
 |  | 
 |             Reviewed by Keith Miller. | 
 |  | 
 |             Canonicalize language tags, replacing deprecated tag parts with the | 
 |             preferred values. Remove broken support for algorithmic numbering systems, | 
 |             that can cause an error in icu, and are not supported in other engines. | 
 |  | 
 |             Generate the lookup functions from the language-subtag-registry. | 
 |  | 
 |             Also initialize the UNumberFormat in initializeNumberFormat so any | 
 |             failures are thrown immediately instead of failing to format later. | 
 |  | 
 |             * CMakeLists.txt: | 
 |             * DerivedSources.make: | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             * Scripts/generateIntlCanonicalizeLanguage.py: Added. | 
 |             * runtime/IntlDateTimeFormat.cpp: | 
 |             (JSC::IntlDateTimeFormat::initializeDateTimeFormat): | 
 |             * runtime/IntlNumberFormat.cpp: | 
 |             (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |             (JSC::IntlNumberFormat::formatNumber): | 
 |             (JSC::IntlNumberFormat::formatToParts): | 
 |             (JSC::IntlNumberFormat::createNumberFormat): Deleted. | 
 |             * runtime/IntlNumberFormat.h: | 
 |             * runtime/IntlObject.cpp: | 
 |             (JSC::intlNumberOption): | 
 |             (JSC::intlDefaultNumberOption): | 
 |             (JSC::preferredLanguage): | 
 |             (JSC::preferredRegion): | 
 |             (JSC::canonicalLangTag): | 
 |             (JSC::canonicalizeLanguageTag): | 
 |             (JSC::defaultLocale): | 
 |             (JSC::removeUnicodeLocaleExtension): | 
 |             (JSC::numberingSystemsForLocale): | 
 |             (JSC::grandfatheredLangTag): Deleted. | 
 |             * runtime/IntlObject.h: | 
 |             * runtime/IntlPluralRules.cpp: | 
 |             (JSC::IntlPluralRules::initializePluralRules): | 
 |             * runtime/JSGlobalObject.cpp: | 
 |             (JSC::addMissingScriptLocales): | 
 |             (JSC::JSGlobalObject::intlCollatorAvailableLocales): | 
 |             (JSC::JSGlobalObject::intlDateTimeFormatAvailableLocales): | 
 |             (JSC::JSGlobalObject::intlNumberFormatAvailableLocales): | 
 |             (JSC::JSGlobalObject::intlPluralRulesAvailableLocales): | 
 |             * ucd/language-subtag-registry.txt: Added. | 
 |  | 
 | 2018-10-18  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r237129. rdar://problem/45285646 | 
 |  | 
 |     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. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/array-prototype-concat-of-long-spliced-arrays.js: | 
 |     (test): | 
 |     * stress/slice-array-storage-with-holes.js: Added. | 
 |     (main): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     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): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237129 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-09-27  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Cherry-pick r236554. rdar://problem/44855120 | 
 |  | 
 |     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-27  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Cherry-pick r236587. rdar://problem/44855118 | 
 |  | 
 |     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  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Cherry-pick r236576. rdar://problem/44855116 | 
 |  | 
 |     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  Saam barati  <sbarati@apple.com> | 
 |  | 
 |         Cherry-pick r236585. rdar://problem/44848947 | 
 |  | 
 |     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> | 
 |  | 
 |         Cherry-pick r236584. rdar://problem/44848936 | 
 |  | 
 |    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-21  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236223. rdar://problem/44682814 | 
 |  | 
 |     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. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/multi-put-by-offset-must-filter-value-before-filtering-base.js: Added. | 
 |     (foo): | 
 |     (Foo): | 
 |     (g): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     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): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236223 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-19  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236161. rdar://problem/44613375 | 
 |  | 
 |     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. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-189571.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     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): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236161 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-19  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r236018. rdar://problem/44613375 | 
 |  | 
 |     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. | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236018 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     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-19  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r235827. rdar://problem/44613379 | 
 |  | 
 |     Ensure that handleIntrinsicCall() is only applied on op_call shaped instructions. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=189317 | 
 |     <rdar://problem/44152198> | 
 |      | 
 |     Reviewed by Filip Pizlo. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-189317.js: Added. | 
 |     (testGetter): | 
 |     (testSetter): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     handleIntrinsicCall() is normally used for checking if an op_call is a call to | 
 |     an intrinsic function, and inlining it if it's a match. | 
 |      | 
 |     However, getter and setter functions also does calls, and uses handleCall() | 
 |     to implement the call.  handleCall() eventually calls handleIntrinsicCall() to | 
 |     check for intrinsics.  This results in a bug because handleIntrinsicCall() | 
 |     sometimes relies on the ArrayProfile* of the instruction, and is always assuming | 
 |     that the instruction is op_call shaped.  This turns out to be not true: getters | 
 |     and setters can get there with op_get_by_val and op_put_by_val instead. | 
 |      | 
 |     Since the intrinsic functions handled by handleIntrinsicCall() are never | 
 |     intended to be used as getter / setter functions anyway, we can prevent this | 
 |     whole class of bugs by having handleIntrinsicCall() fail early if the | 
 |     instruction is not op_call shaped. | 
 |      | 
 |     To implement this fix, we did the following: | 
 |      | 
 |     1. Introduced the OpcodeShape enum. | 
 |     2. Introduced isOpcodeShape<OpcodeShape>() for testing if a instruction of the | 
 |        shape of the specified OpcodeShape. | 
 |     3. Introduced arrayProfileFor<OpcodeShape>() for fetching the ArrayProfile* from | 
 |        the instruction given the OpcodeShape. | 
 |      | 
 |        Using this arrayProfileFor template has the following benefits: | 
 |        1. Centralizes the definition of which instructions has an ArrayProfile* operand. | 
 |        2. Centralizes the definition of which operand is the ArrayProfile*. | 
 |        3. Asserts that the instruction is of the expected shape when retrieving the | 
 |           ArrayProfile*. | 
 |      | 
 |     4. Added ArrayProfile::m_typeName and ArrayProfile::s_typeName which are used | 
 |        in ArrayProfile::isValid() as a sanity check that a retrieved ArrayProfile* | 
 |        indeed does point to an ArrayProfile. | 
 |      | 
 |     * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |     * bytecode/ArrayProfile.cpp: | 
 |     * bytecode/ArrayProfile.h: | 
 |     (JSC::ArrayProfile::isValid const): | 
 |     * bytecode/OpcodeInlines.h: Added. | 
 |     (JSC::isOpcodeShape): | 
 |     (JSC::arrayProfileFor): | 
 |     * dfg/DFGByteCodeParser.cpp: | 
 |     (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |     (JSC::DFG::ByteCodeParser::parseBlock): | 
 |     * jit/JITCall.cpp: | 
 |     (JSC::JIT::compileOpCall): | 
 |     * jit/JITCall32_64.cpp: | 
 |     (JSC::JIT::compileOpCall): | 
 |     * jit/JITOpcodes.cpp: | 
 |     (JSC::JIT::emit_op_has_indexed_property): | 
 |     * jit/JITOpcodes32_64.cpp: | 
 |     (JSC::JIT::emit_op_has_indexed_property): | 
 |     * jit/JITPropertyAccess.cpp: | 
 |     (JSC::JIT::emit_op_get_by_val): | 
 |     (JSC::JIT::emit_op_put_by_val): | 
 |     (JSC::JIT::emitGenericContiguousPutByVal): | 
 |     (JSC::JIT::emitArrayStoragePutByVal): | 
 |     (JSC::JIT::emitIntTypedArrayPutByVal): | 
 |     (JSC::JIT::emitFloatTypedArrayPutByVal): | 
 |     * jit/JITPropertyAccess32_64.cpp: | 
 |     (JSC::JIT::emit_op_get_by_val): | 
 |     (JSC::JIT::emit_op_put_by_val): | 
 |     (JSC::JIT::emitGenericContiguousPutByVal): | 
 |     (JSC::JIT::emitArrayStoragePutByVal): | 
 |     * llint/LLIntSlowPaths.cpp: | 
 |     (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |     (JSC::LLInt::getByVal): | 
 |     * runtime/CommonSlowPaths.cpp: | 
 |     (JSC::SLOW_PATH_DECL): | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235827 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-09-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Ensure that handleIntrinsicCall() is only applied on op_call shaped instructions. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=189317 | 
 |             <rdar://problem/44152198> | 
 |  | 
 |             Reviewed by Filip Pizlo. | 
 |  | 
 |             handleIntrinsicCall() is normally used for checking if an op_call is a call to | 
 |             an intrinsic function, and inlining it if it's a match. | 
 |  | 
 |             However, getter and setter functions also does calls, and uses handleCall() | 
 |             to implement the call.  handleCall() eventually calls handleIntrinsicCall() to | 
 |             check for intrinsics.  This results in a bug because handleIntrinsicCall() | 
 |             sometimes relies on the ArrayProfile* of the instruction, and is always assuming | 
 |             that the instruction is op_call shaped.  This turns out to be not true: getters | 
 |             and setters can get there with op_get_by_val and op_put_by_val instead. | 
 |  | 
 |             Since the intrinsic functions handled by handleIntrinsicCall() are never | 
 |             intended to be used as getter / setter functions anyway, we can prevent this | 
 |             whole class of bugs by having handleIntrinsicCall() fail early if the | 
 |             instruction is not op_call shaped. | 
 |  | 
 |             To implement this fix, we did the following: | 
 |  | 
 |             1. Introduced the OpcodeShape enum. | 
 |             2. Introduced isOpcodeShape<OpcodeShape>() for testing if a instruction of the | 
 |                shape of the specified OpcodeShape. | 
 |             3. Introduced arrayProfileFor<OpcodeShape>() for fetching the ArrayProfile* from | 
 |                the instruction given the OpcodeShape. | 
 |  | 
 |                Using this arrayProfileFor template has the following benefits: | 
 |                1. Centralizes the definition of which instructions has an ArrayProfile* operand. | 
 |                2. Centralizes the definition of which operand is the ArrayProfile*. | 
 |                3. Asserts that the instruction is of the expected shape when retrieving the | 
 |                   ArrayProfile*. | 
 |  | 
 |             4. Added ArrayProfile::m_typeName and ArrayProfile::s_typeName which are used | 
 |                in ArrayProfile::isValid() as a sanity check that a retrieved ArrayProfile* | 
 |                indeed does point to an ArrayProfile. | 
 |  | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             * bytecode/ArrayProfile.cpp: | 
 |             * bytecode/ArrayProfile.h: | 
 |             (JSC::ArrayProfile::isValid const): | 
 |             * bytecode/OpcodeInlines.h: Added. | 
 |             (JSC::isOpcodeShape): | 
 |             (JSC::arrayProfileFor): | 
 |             * dfg/DFGByteCodeParser.cpp: | 
 |             (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |             (JSC::DFG::ByteCodeParser::parseBlock): | 
 |             * jit/JITCall.cpp: | 
 |             (JSC::JIT::compileOpCall): | 
 |             * jit/JITCall32_64.cpp: | 
 |             (JSC::JIT::compileOpCall): | 
 |             * jit/JITOpcodes.cpp: | 
 |             (JSC::JIT::emit_op_has_indexed_property): | 
 |             * jit/JITOpcodes32_64.cpp: | 
 |             (JSC::JIT::emit_op_has_indexed_property): | 
 |             * jit/JITPropertyAccess.cpp: | 
 |             (JSC::JIT::emit_op_get_by_val): | 
 |             (JSC::JIT::emit_op_put_by_val): | 
 |             (JSC::JIT::emitGenericContiguousPutByVal): | 
 |             (JSC::JIT::emitArrayStoragePutByVal): | 
 |             (JSC::JIT::emitIntTypedArrayPutByVal): | 
 |             (JSC::JIT::emitFloatTypedArrayPutByVal): | 
 |             * jit/JITPropertyAccess32_64.cpp: | 
 |             (JSC::JIT::emit_op_get_by_val): | 
 |             (JSC::JIT::emit_op_put_by_val): | 
 |             (JSC::JIT::emitGenericContiguousPutByVal): | 
 |             (JSC::JIT::emitArrayStoragePutByVal): | 
 |             * llint/LLIntSlowPaths.cpp: | 
 |             (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |             (JSC::LLInt::getByVal): | 
 |             * runtime/CommonSlowPaths.cpp: | 
 |             (JSC::SLOW_PATH_DECL): | 
 |  | 
 | 2018-09-19  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r235356. rdar://problem/44613253 | 
 |  | 
 |     [JSC] Array.prototype.reverse modifies JSImmutableButterfly | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188794 | 
 |      | 
 |     Reviewed by Saam Barati. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/reverse-with-immutable-butterfly.js: Added. | 
 |     (shouldBe): | 
 |     (reverseInt): | 
 |     (reverseDouble): | 
 |     (reverseContiguous): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     While Array.prototype.reverse modifies the butterfly of the given Array, | 
 |     it does not account JSImmutableButterfly case. So it accidentally modifies | 
 |     the content of JSImmutableButterfly. | 
 |     This patch converts CoW arrays to writable arrays before reversing. | 
 |      | 
 |     * runtime/ArrayPrototype.cpp: | 
 |     (JSC::arrayProtoFuncReverse): | 
 |     * runtime/JSObject.h: | 
 |     (JSC::JSObject::ensureWritable): | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235356 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-24  Yusuke Suzuki  <yusukesuzuki@slowstart.org> | 
 |  | 
 |             [JSC] Array.prototype.reverse modifies JSImmutableButterfly | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188794 | 
 |  | 
 |             Reviewed by Saam Barati. | 
 |  | 
 |             While Array.prototype.reverse modifies the butterfly of the given Array, | 
 |             it does not account JSImmutableButterfly case. So it accidentally modifies | 
 |             the content of JSImmutableButterfly. | 
 |             This patch converts CoW arrays to writable arrays before reversing. | 
 |  | 
 |             * runtime/ArrayPrototype.cpp: | 
 |             (JSC::arrayProtoFuncReverse): | 
 |             * runtime/JSObject.h: | 
 |             (JSC::JSObject::ensureWritable): | 
 |  | 
 | 2018-09-06  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r235251. rdar://problem/44209840 | 
 |  | 
 |     [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188829 | 
 |      | 
 |     Reviewed by Tim Horton. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebCore: | 
 |      | 
 |     Test: http/tests/ssl/applepay/ApplePaySessionV4.html | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |     * testing/MockPaymentCoordinator.cpp: | 
 |     (WebCore::MockPaymentCoordinator::supportsVersion): | 
 |      | 
 |     Source/WebCore/PAL: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebKit: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |     * WebProcess/ApplePay/WebPaymentCoordinator.cpp: | 
 |     (WebKit::WebPaymentCoordinator::supportsVersion): | 
 |      | 
 |     Source/WebKitLegacy/mac: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Tools: | 
 |      | 
 |     * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     LayoutTests: | 
 |      | 
 |     * http/tests/ssl/applepay/ApplePaySession-expected.txt: | 
 |     * http/tests/ssl/applepay/ApplePaySession.html: | 
 |     * http/tests/ssl/applepay/ApplePaySessionV3-expected.txt: | 
 |     * http/tests/ssl/applepay/ApplePaySessionV3.html: | 
 |     * http/tests/ssl/applepay/ApplePaySessionV4-expected.txt: Added. | 
 |     * http/tests/ssl/applepay/ApplePaySessionV4.html: Added. | 
 |     * platform/mac-wk2/TestExpectations: | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235251 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-23  Andy Estes  <aestes@apple.com> | 
 |  | 
 |             [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188829 | 
 |  | 
 |             Reviewed by Tim Horton. | 
 |  | 
 |             * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-09-06  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r235742. rdar://problem/44169344 | 
 |  | 
 |     Gardening: only visit m_cachedStructureID if it's not null. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=189124 | 
 |     <rdar://problem/43863605> | 
 |      | 
 |     Not reviewed. | 
 |      | 
 |     * runtime/JSPropertyNameEnumerator.cpp: | 
 |     (JSC::JSPropertyNameEnumerator::visitChildren): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235742 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-09-06  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Gardening: only visit m_cachedStructureID if it's not null. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=189124 | 
 |             <rdar://problem/43863605> | 
 |  | 
 |             Not reviewed. | 
 |  | 
 |             * runtime/JSPropertyNameEnumerator.cpp: | 
 |             (JSC::JSPropertyNameEnumerator::visitChildren): | 
 |  | 
 | 2018-09-06  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Cherry-pick r235254, r235419, r235666. rdar://problem/44169332 | 
 |  | 
 |     2018-08-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Move vmEntryGlobalObject() to VM from CallFrame. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188900 | 
 |             <rdar://problem/43655753> | 
 |  | 
 |             Reviewed by Michael Saboff. | 
 |  | 
 |             Also introduced CallFrame::isGlobalExec() which makes use of one property of | 
 |             GlobalExecs to identify them i.e. GlobalExecs have null callerFrame and returnPCs. | 
 |             CallFrame::initGlobalExec() ensures this. | 
 |  | 
 |             In contrast, normal CallFrames always have a callerFrame (because they must at | 
 |             least be preceded by a VM EntryFrame) and a returnPC (at least return to the | 
 |             VM entry glue). | 
 |  | 
 |             * API/APIUtils.h: | 
 |             (handleExceptionIfNeeded): | 
 |             (setException): | 
 |             * API/JSBase.cpp: | 
 |             (JSEvaluateScript): | 
 |             (JSCheckScriptSyntax): | 
 |             * API/JSContextRef.cpp: | 
 |             (JSGlobalContextRetain): | 
 |             (JSGlobalContextRelease): | 
 |             (JSGlobalContextCopyName): | 
 |             (JSGlobalContextSetName): | 
 |             (JSGlobalContextGetRemoteInspectionEnabled): | 
 |             (JSGlobalContextSetRemoteInspectionEnabled): | 
 |             (JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions): | 
 |             (JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions): | 
 |             (JSGlobalContextGetDebuggerRunLoop): | 
 |             (JSGlobalContextSetDebuggerRunLoop): | 
 |             (JSGlobalContextGetAugmentableInspectorController): | 
 |             * API/JSValue.mm: | 
 |             (reportExceptionToInspector): | 
 |             * API/glib/JSCClass.cpp: | 
 |             (jscContextForObject): | 
 |             * API/glib/JSCContext.cpp: | 
 |             (jsc_context_evaluate_in_object): | 
 |             * debugger/Debugger.cpp: | 
 |             (JSC::Debugger::pauseIfNeeded): | 
 |             * debugger/DebuggerCallFrame.cpp: | 
 |             (JSC::DebuggerCallFrame::vmEntryGlobalObject const): | 
 |             (JSC::DebuggerCallFrame::evaluateWithScopeExtension): | 
 |             * interpreter/CallFrame.cpp: | 
 |             (JSC::CallFrame::vmEntryGlobalObject): Deleted. | 
 |             * interpreter/CallFrame.h: | 
 |             (JSC::ExecState::scope const): | 
 |             (JSC::ExecState::noCaller): | 
 |             (JSC::ExecState::isGlobalExec const): | 
 |             * interpreter/Interpreter.cpp: | 
 |             (JSC::notifyDebuggerOfUnwinding): | 
 |             (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown): | 
 |             (JSC::Interpreter::debug): | 
 |             * runtime/CallData.cpp: | 
 |             (JSC::profiledCall): | 
 |             * runtime/Completion.cpp: | 
 |             (JSC::evaluate): | 
 |             (JSC::profiledEvaluate): | 
 |             (JSC::evaluateWithScopeExtension): | 
 |             (JSC::loadAndEvaluateModule): | 
 |             (JSC::loadModule): | 
 |             (JSC::linkAndEvaluateModule): | 
 |             (JSC::importModule): | 
 |             * runtime/ConstructData.cpp: | 
 |             (JSC::profiledConstruct): | 
 |             * runtime/Error.cpp: | 
 |             (JSC::getStackTrace): | 
 |             * runtime/VM.cpp: | 
 |             (JSC::VM::throwException): | 
 |             (JSC::VM::vmEntryGlobalObject const): | 
 |             * runtime/VM.h: | 
 |  | 
 |     2018-08-27  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Fix exception throwing code so that topCallFrame and topEntryFrame stay true to their names. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188577 | 
 |             <rdar://problem/42985684> | 
 |  | 
 |             Reviewed by Saam Barati. | 
 |  | 
 |             1. Introduced CallFrame::convertToStackOverflowFrame() which converts the current | 
 |                (top) CallFrame (which may not have a valid callee) into a StackOverflowFrame. | 
 |  | 
 |                The StackOverflowFrame is a sentinel frame that the low level code (exception | 
 |                throwing code, stack visitor, and stack unwinding code) will know to skip | 
 |                over.  The StackOverflowFrame will also have a valid JSCallee so that client | 
 |                code can compute the globalObject or VM from this frame. | 
 |  | 
 |                As a result, client code that throws StackOverflowErrors no longer need to | 
 |                compute the caller frame to throw from: it just converts the top frame into | 
 |                a StackOverflowFrame and everything should *Just Work*. | 
 |  | 
 |             2. NativeCallFrameTracerWithRestore is now obsolete. | 
 |  | 
 |                Instead, client code should always call convertToStackOverflowFrame() on the | 
 |                frame before instantiating a NativeCallFrameTracer with it. | 
 |  | 
 |                This means that topCallFrame will always point to the top CallFrame (which | 
 |                may be a StackOverflowFrame), and topEntryFrame will always point to the top | 
 |                EntryFrame.  We'll never temporarily point them to the previous EntryFrame | 
 |                (which we used to do with NativeCallFrameTracerWithRestore). | 
 |  | 
 |             3. genericUnwind() and Interpreter::unwind() will now always unwind from the top | 
 |                CallFrame, and will know how to handle a StackOverflowFrame if they see one. | 
 |  | 
 |                This obsoletes the UnwindStart flag. | 
 |  | 
 |             * CMakeLists.txt: | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             * Sources.txt: | 
 |             * debugger/Debugger.cpp: | 
 |             (JSC::Debugger::pauseIfNeeded): | 
 |             * interpreter/CallFrame.cpp: | 
 |             (JSC::CallFrame::callerFrame const): | 
 |             (JSC::CallFrame::unsafeCallerFrame const): | 
 |             (JSC::CallFrame::convertToStackOverflowFrame): | 
 |             (JSC::CallFrame::callerFrame): Deleted. | 
 |             (JSC::CallFrame::unsafeCallerFrame): Deleted. | 
 |             * interpreter/CallFrame.h: | 
 |             (JSC::ExecState::iterate): | 
 |             * interpreter/CallFrameInlines.h: Added. | 
 |             (JSC::CallFrame::isStackOverflowFrame const): | 
 |             (JSC::CallFrame::isWasmFrame const): | 
 |             * interpreter/EntryFrame.h: Added. | 
 |             (JSC::EntryFrame::vmEntryRecordOffset): | 
 |             (JSC::EntryFrame::calleeSaveRegistersBufferOffset): | 
 |             * interpreter/FrameTracers.h: | 
 |             (JSC::NativeCallFrameTracerWithRestore::NativeCallFrameTracerWithRestore): Deleted. | 
 |             (JSC::NativeCallFrameTracerWithRestore::~NativeCallFrameTracerWithRestore): Deleted. | 
 |             * interpreter/Interpreter.cpp: | 
 |             (JSC::Interpreter::unwind): | 
 |             * interpreter/Interpreter.h: | 
 |             * interpreter/StackVisitor.cpp: | 
 |             (JSC::StackVisitor::StackVisitor): | 
 |             * interpreter/StackVisitor.h: | 
 |             (JSC::StackVisitor::visit): | 
 |             (JSC::StackVisitor::topEntryFrameIsEmpty const): | 
 |             * interpreter/VMEntryRecord.h: | 
 |             (JSC::VMEntryRecord::callee const): | 
 |             (JSC::EntryFrame::vmEntryRecordOffset): Deleted. | 
 |             (JSC::EntryFrame::calleeSaveRegistersBufferOffset): Deleted. | 
 |             * jit/AssemblyHelpers.h: | 
 |             * jit/JITExceptions.cpp: | 
 |             (JSC::genericUnwind): | 
 |             * jit/JITExceptions.h: | 
 |             * jit/JITOperations.cpp: | 
 |             * llint/LLIntOffsetsExtractor.cpp: | 
 |             * llint/LLIntSlowPaths.cpp: | 
 |             (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |             * llint/LowLevelInterpreter.asm: | 
 |             * llint/LowLevelInterpreter32_64.asm: | 
 |             * llint/LowLevelInterpreter64.asm: | 
 |             * runtime/CallData.cpp: | 
 |             * runtime/CommonSlowPaths.cpp: | 
 |             (JSC::throwArityCheckStackOverflowError): | 
 |             (JSC::SLOW_PATH_DECL): | 
 |             * runtime/CommonSlowPathsExceptions.cpp: Removed. | 
 |             * runtime/CommonSlowPathsExceptions.h: Removed. | 
 |             * runtime/Completion.cpp: | 
 |             (JSC::evaluateWithScopeExtension): | 
 |             * runtime/JSGeneratorFunction.h: | 
 |             * runtime/JSGlobalObject.cpp: | 
 |             (JSC::JSGlobalObject::init): | 
 |             (JSC::JSGlobalObject::visitChildren): | 
 |             * runtime/JSGlobalObject.h: | 
 |             (JSC::JSGlobalObject::stackOverflowFrameCallee const): | 
 |             * runtime/VM.cpp: | 
 |             (JSC::VM::throwException): | 
 |             * runtime/VM.h: | 
 |             * runtime/VMInlines.h: | 
 |             (JSC::VM::topJSCallFrame const): | 
 |  | 
 |     2018-09-05  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |             REGRESSION (r235419): DFGCFG.h is missing from JavaScriptCore Xcode project | 
 |  | 
 |             Found using `tidy-Xcode-project-file --missing` (see Bug | 
 |             188754).  Fix was made manually. | 
 |  | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             (dfg/DFGCFG.h): Revert accidental change in r235419 by restoring | 
 |             `name` and `path` values to file reference. | 
 |  | 
 | 2018-09-06  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r235715. rdar://problem/44169344 | 
 |  | 
 |     JSPropertyNameEnumerator::visitChildren() needs to visit its m_cachedStructureID. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=189124 | 
 |     <rdar://problem/43863605> | 
 |      | 
 |     Reviewed by Filip Pizlo. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-189124.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     It is assumed that the Structure for the m_cachedStructureID will remain alive | 
 |     while the m_cachedStructureID is in use.  This prevents the structureID from being | 
 |     re-used for a different Structure. | 
 |      | 
 |     * runtime/JSPropertyNameEnumerator.cpp: | 
 |     (JSC::JSPropertyNameEnumerator::visitChildren): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235715 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-09-05  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             JSPropertyNameEnumerator::visitChildren() needs to visit its m_cachedStructureID. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=189124 | 
 |             <rdar://problem/43863605> | 
 |  | 
 |             Reviewed by Filip Pizlo. | 
 |  | 
 |             It is assumed that the Structure for the m_cachedStructureID will remain alive | 
 |             while the m_cachedStructureID is in use.  This prevents the structureID from being | 
 |             re-used for a different Structure. | 
 |  | 
 |             * runtime/JSPropertyNameEnumerator.cpp: | 
 |             (JSC::JSPropertyNameEnumerator::visitChildren): | 
 |  | 
 | 2018-09-06  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r235177. rdar://problem/44169333 | 
 |  | 
 |     The DFG CFGSimplification phase shouldn’t jettison a block when it’s the target of both branch directions. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188298 | 
 |     <rdar://problem/42888427> | 
 |      | 
 |     Reviewed by Saam Barati. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/bug-188298.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     In the event that both targets of a Branch is the same block, then even if we'll | 
 |     always take one path of the branch, the other target is not unreachable because | 
 |     it is the same target as the one in the taken path.  Hence, it should not be | 
 |     jettisoned. | 
 |      | 
 |     * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |     - Added DFGCFG.h which is in use and should have been added to the project. | 
 |     * dfg/DFGCFGSimplificationPhase.cpp: | 
 |     (JSC::DFG::CFGSimplificationPhase::run): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235177 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             The DFG CFGSimplification phase shouldn’t jettison a block when it’s the target of both branch directions. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188298 | 
 |             <rdar://problem/42888427> | 
 |  | 
 |             Reviewed by Saam Barati. | 
 |  | 
 |             In the event that both targets of a Branch is the same block, then even if we'll | 
 |             always take one path of the branch, the other target is not unreachable because | 
 |             it is the same target as the one in the taken path.  Hence, it should not be | 
 |             jettisoned. | 
 |  | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             - Added DFGCFG.h which is in use and should have been added to the project. | 
 |             * dfg/DFGCFGSimplificationPhase.cpp: | 
 |             (JSC::DFG::CFGSimplificationPhase::run): | 
 |  | 
 | 2018-09-05  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r235007. rdar://problem/44144079 | 
 |  | 
 |     intersectionOfPastValuesAtHead must filter values after they've observed an invalidation point | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188707 | 
 |     <rdar://problem/43015442> | 
 |      | 
 |     Reviewed by Mark Lam. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/cfa-expected-values-must-set-clobbered-to-false.js: Added. | 
 |     (foo): | 
 |     (let.comp.valueOf): | 
 |     (result): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     We use the values in intersectionOfPastValuesAtHead to verify that it is safe to | 
 |     OSR enter at the head of a block. We verify it's safe to OSR enter by checking | 
 |     that each incoming value is compatible with its corresponding AbstractValue. | 
 |              | 
 |     The bug is that we were sometimes filtering the intersectionOfPastValuesAtHead | 
 |     with abstract values that were clobbererd. This meant that the value we're | 
 |     verifying with at OSR entry effectively has an infinite structure set because | 
 |     it's clobbered. So, imagine we have code like this: | 
 |     ``` | 
 |     ---> We OSR enter here, and we're clobbered here | 
 |     InvalidationPoint | 
 |     GetByOffset(@base) | 
 |     ``` | 
 |              | 
 |     The abstract value for @base inside intersectionOfPastValuesAtHead has a | 
 |     clobberred structure set, so we'd allow an incoming object with any | 
 |     structure. However, this is wrong because the invalidation point is no | 
 |     longer fulfilling its promise that it filters the structure that @base has. | 
 |              | 
 |     We fix this by filtering the AbstractValues in intersectionOfPastValuesAtHead | 
 |     as if the incoming value may be live past an InvalidationPoint. | 
 |     This places a stricter requirement that to safely OSR enter at any basic | 
 |     block, all incoming values must be compatible as if they lived past | 
 |     the execution of an invalidation point. | 
 |      | 
 |     * dfg/DFGCFAPhase.cpp: | 
 |     (JSC::DFG::CFAPhase::run): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235007 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-17  Saam barati  <sbarati@apple.com> | 
 |  | 
 |             intersectionOfPastValuesAtHead must filter values after they've observed an invalidation point | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188707 | 
 |             <rdar://problem/43015442> | 
 |  | 
 |             Reviewed by Mark Lam. | 
 |  | 
 |             We use the values in intersectionOfPastValuesAtHead to verify that it is safe to | 
 |             OSR enter at the head of a block. We verify it's safe to OSR enter by checking | 
 |             that each incoming value is compatible with its corresponding AbstractValue. | 
 |  | 
 |             The bug is that we were sometimes filtering the intersectionOfPastValuesAtHead | 
 |             with abstract values that were clobbererd. This meant that the value we're | 
 |             verifying with at OSR entry effectively has an infinite structure set because | 
 |             it's clobbered. So, imagine we have code like this: | 
 |             ``` | 
 |             ---> We OSR enter here, and we're clobbered here | 
 |             InvalidationPoint | 
 |             GetByOffset(@base) | 
 |             ``` | 
 |  | 
 |             The abstract value for @base inside intersectionOfPastValuesAtHead has a | 
 |             clobberred structure set, so we'd allow an incoming object with any | 
 |             structure. However, this is wrong because the invalidation point is no | 
 |             longer fulfilling its promise that it filters the structure that @base has. | 
 |  | 
 |             We fix this by filtering the AbstractValues in intersectionOfPastValuesAtHead | 
 |             as if the incoming value may be live past an InvalidationPoint. | 
 |             This places a stricter requirement that to safely OSR enter at any basic | 
 |             block, all incoming values must be compatible as if they lived past | 
 |             the execution of an invalidation point. | 
 |  | 
 |             * dfg/DFGCFAPhase.cpp: | 
 |             (JSC::DFG::CFAPhase::run): | 
 |  | 
 | 2018-09-05  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234649. rdar://problem/43009920 | 
 |  | 
 |     Use a more specific PtrTag for PlatformRegisters PC and LR. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188366 | 
 |     <rdar://problem/42984123> | 
 |      | 
 |     Reviewed by Keith Miller. | 
 |      | 
 |     Also fixed a bug in linkRegister(), which was previously returning the PC instead | 
 |     of LR.  It now returns LR. | 
 |      | 
 |     * runtime/JSCPtrTag.h: | 
 |     * runtime/MachineContext.h: | 
 |     (JSC::MachineContext::instructionPointer): | 
 |     (JSC::MachineContext::linkRegister): | 
 |     * runtime/VMTraps.cpp: | 
 |     (JSC::SignalContext::SignalContext): | 
 |     * tools/SigillCrashAnalyzer.cpp: | 
 |     (JSC::SignalContext::SignalContext): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234649 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Use a more specific PtrTag for PlatformRegisters PC and LR. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188366 | 
 |             <rdar://problem/42984123> | 
 |  | 
 |             Reviewed by Keith Miller. | 
 |  | 
 |             Also fixed a bug in linkRegister(), which was previously returning the PC instead | 
 |             of LR.  It now returns LR. | 
 |  | 
 |             * runtime/JSCPtrTag.h: | 
 |             * runtime/MachineContext.h: | 
 |             (JSC::MachineContext::instructionPointer): | 
 |             (JSC::MachineContext::linkRegister): | 
 |             * runtime/VMTraps.cpp: | 
 |             (JSC::SignalContext::SignalContext): | 
 |             * tools/SigillCrashAnalyzer.cpp: | 
 |             (JSC::SignalContext::SignalContext): | 
 |  | 
 | 2018-08-06  Kocsen Chung  <kocsen_chung@apple.com> | 
 |  | 
 |         Cherry-pick r234576. rdar://problem/42973449 | 
 |  | 
 |     Give the `jsc` shell the JIT entitlement | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188324 | 
 |     <rdar://problem/42885806> | 
 |      | 
 |     Reviewed by Dan Bernstein. | 
 |      | 
 |     This should help us in ensuring the system jsc is able to JIT. | 
 |      | 
 |     * Configurations/JSC.xcconfig: | 
 |     * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |     * allow-jit-macOS.entitlements: Added. | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234576 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-03  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |             Give the `jsc` shell the JIT entitlement | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188324 | 
 |             <rdar://problem/42885806> | 
 |  | 
 |             Reviewed by Dan Bernstein. | 
 |  | 
 |             This should help us in ensuring the system jsc is able to JIT. | 
 |  | 
 |             * Configurations/JSC.xcconfig: | 
 |             * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |             * allow-jit-macOS.entitlements: Added. | 
 |  | 
 | 2018-08-02  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234528. rdar://problem/42883788 | 
 |  | 
 |     Source/JavaScriptCore: | 
 |     Reading instructionPointer from PlatformRegisters may fail when using pointer profiling | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188271 | 
 |     <rdar://problem/42850884> | 
 |      | 
 |     Reviewed by Michael Saboff. | 
 |      | 
 |     This patch defends against the instructionPointer containing garbage bits. | 
 |     See radar for details. | 
 |      | 
 |     * runtime/MachineContext.h: | 
 |     (JSC::MachineContext::instructionPointer): | 
 |     * runtime/SamplingProfiler.cpp: | 
 |     (JSC::SamplingProfiler::takeSample): | 
 |     * runtime/VMTraps.cpp: | 
 |     (JSC::SignalContext::SignalContext): | 
 |     (JSC::SignalContext::tryCreate): | 
 |     * tools/CodeProfiling.cpp: | 
 |     (JSC::profilingTimer): | 
 |     * tools/SigillCrashAnalyzer.cpp: | 
 |     (JSC::SignalContext::SignalContext): | 
 |     (JSC::SignalContext::tryCreate): | 
 |     (JSC::SignalContext::dump): | 
 |     (JSC::installCrashHandler): | 
 |     * wasm/WasmFaultSignalHandler.cpp: | 
 |     (JSC::Wasm::trapHandler): | 
 |      | 
 |     Source/WTF: | 
 |     Reading instructionPointer from PlatformRegisters may fail when using pointer tagging | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188271 | 
 |     <rdar://problem/42850884> | 
 |      | 
 |     Reviewed by Michael Saboff. | 
 |      | 
 |     * wtf/PtrTag.h: | 
 |     (WTF::isTaggedWith): | 
 |     (WTF::usesPointerTagging): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234528 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-08-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |             Reading instructionPointer from PlatformRegisters may fail when using pointer profiling | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188271 | 
 |             <rdar://problem/42850884> | 
 |  | 
 |             Reviewed by Michael Saboff. | 
 |  | 
 |             This patch defends against the instructionPointer containing garbage bits. | 
 |             See radar for details. | 
 |  | 
 |             * runtime/MachineContext.h: | 
 |             (JSC::MachineContext::instructionPointer): | 
 |             * runtime/SamplingProfiler.cpp: | 
 |             (JSC::SamplingProfiler::takeSample): | 
 |             * runtime/VMTraps.cpp: | 
 |             (JSC::SignalContext::SignalContext): | 
 |             (JSC::SignalContext::tryCreate): | 
 |             * tools/CodeProfiling.cpp: | 
 |             (JSC::profilingTimer): | 
 |             * tools/SigillCrashAnalyzer.cpp: | 
 |             (JSC::SignalContext::SignalContext): | 
 |             (JSC::SignalContext::tryCreate): | 
 |             (JSC::SignalContext::dump): | 
 |             (JSC::installCrashHandler): | 
 |             * wasm/WasmFaultSignalHandler.cpp: | 
 |             (JSC::Wasm::trapHandler): | 
 |  | 
 | 2018-07-26  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234269. rdar://problem/42650430 | 
 |  | 
 |     arrayProtoPrivateFuncConcatMemcpy() should handle copying from an Undecided type array. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188065 | 
 |     <rdar://problem/42515726> | 
 |      | 
 |     Reviewed by Saam Barati. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     * stress/regress-188065.js: Added. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     * runtime/ArrayPrototype.cpp: | 
 |     (JSC::clearElement): | 
 |     (JSC::copyElements): | 
 |     (JSC::arrayProtoPrivateFuncConcatMemcpy): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234269 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             arrayProtoPrivateFuncConcatMemcpy() should handle copying from an Undecided type array. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188065 | 
 |             <rdar://problem/42515726> | 
 |  | 
 |             Reviewed by Saam Barati. | 
 |  | 
 |             * runtime/ArrayPrototype.cpp: | 
 |             (JSC::clearElement): | 
 |             (JSC::copyElements): | 
 |             (JSC::arrayProtoPrivateFuncConcatMemcpy): | 
 |  | 
 | 2018-07-26  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234272. rdar://problem/42645434 | 
 |  | 
 |     Unreviewed, rolling out r234181 and r234189. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=188075 | 
 |      | 
 |     These are not needed right now (Requested by thorton on | 
 |     #webkit). | 
 |      | 
 |     Reverted changesets: | 
 |      | 
 |     "Enable Web Content Filtering on watchOS" | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187979 | 
 |     https://trac.webkit.org/changeset/234181 | 
 |      | 
 |     "HAVE(PARENTAL_CONTROLS) should be true on watchOS" | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187985 | 
 |     https://trac.webkit.org/changeset/234189 | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234272 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-26  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |             Unreviewed, rolling out r234181 and r234189. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=188075 | 
 |  | 
 |             These are not needed right now (Requested by thorton on | 
 |             #webkit). | 
 |  | 
 |             Reverted changesets: | 
 |  | 
 |             "Enable Web Content Filtering on watchOS" | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187979 | 
 |             https://trac.webkit.org/changeset/234181 | 
 |  | 
 |             "HAVE(PARENTAL_CONTROLS) should be true on watchOS" | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187985 | 
 |             https://trac.webkit.org/changeset/234189 | 
 |  | 
 | 2018-07-25  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234181. rdar://problem/42604524 | 
 |  | 
 |     Enable Web Content Filtering on watchOS | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187979 | 
 |     <rdar://problem/42559346> | 
 |      | 
 |     Reviewed by Wenson Hsieh. | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebCore: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebCore/PAL: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebKit: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Source/WebKitLegacy/mac: | 
 |      | 
 |     * Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |     Tools: | 
 |      | 
 |     * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234181 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-24  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |             Enable Web Content Filtering on watchOS | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187979 | 
 |             <rdar://problem/42559346> | 
 |  | 
 |             Reviewed by Wenson Hsieh. | 
 |  | 
 |             * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-07-24  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234106. rdar://problem/42545682 | 
 |  | 
 |     Add some asserts to help diagnose a crash. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187915 | 
 |     <rdar://problem/42508166> | 
 |      | 
 |     Reviewed by Michael Saboff. | 
 |      | 
 |     Add some asserts to verify that an CodeBlock alternative should always have a | 
 |     non-null jitCode.  Also change a RELEASE_ASSERT_NOT_REACHED() in | 
 |     CodeBlock::setOptimizationThresholdBasedOnCompilationResult() to a RELEASE_ASSERT() | 
 |     so that we'll retain the state of the variables that failed the assertion (again | 
 |     to help with diagnosis). | 
 |      | 
 |     * bytecode/CodeBlock.cpp: | 
 |     (JSC::CodeBlock::setAlternative): | 
 |     (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): | 
 |     * dfg/DFGPlan.cpp: | 
 |     (JSC::DFG::Plan::Plan): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234106 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             Add some asserts to help diagnose a crash. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187915 | 
 |             <rdar://problem/42508166> | 
 |  | 
 |             Reviewed by Michael Saboff. | 
 |  | 
 |             Add some asserts to verify that an CodeBlock alternative should always have a | 
 |             non-null jitCode.  Also change a RELEASE_ASSERT_NOT_REACHED() in | 
 |             CodeBlock::setOptimizationThresholdBasedOnCompilationResult() to a RELEASE_ASSERT() | 
 |             so that we'll retain the state of the variables that failed the assertion (again | 
 |             to help with diagnosis). | 
 |  | 
 |             * bytecode/CodeBlock.cpp: | 
 |             (JSC::CodeBlock::setAlternative): | 
 |             (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): | 
 |             * dfg/DFGPlan.cpp: | 
 |             (JSC::DFG::Plan::Plan): | 
 |  | 
 | 2018-07-23  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234075. rdar://problem/42451525 | 
 |  | 
 |     DFG AbstractInterpreter: CheckArray filters array modes for DirectArguments/ScopedArguments using only NonArray | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187827 | 
 |     rdar://problem/42146858 | 
 |      | 
 |     Reviewed by Saam Barati. | 
 |      | 
 |     JSTests: | 
 |      | 
 |     New regression tests. | 
 |      | 
 |     * stress/direct-arguments-check-array.js: Added. | 
 |     (setup.f2): | 
 |     (setup): | 
 |     (forOfArray): | 
 |     (forOfArgs): | 
 |     (callEveryOnArgs): | 
 |     * stress/scoped-arguments-check-array.js: Added. | 
 |     (setup.foo): | 
 |     (setup.f2): | 
 |     (setup): | 
 |     (forOfArray): | 
 |     (forOfArgs): | 
 |     (callEveryOnArgs): | 
 |      | 
 |     Source/JavaScriptCore: | 
 |      | 
 |     When filtering array modes for DirectArguments or ScopedArguments, we need to allow for the possibility | 
 |     that they can either be NonArray or NonArrayWithArrayStorage (aka ArrayStorageShape). | 
 |     We can't end up with other shapes, Int32, Double, etc because GenericArguments sets  | 
 |     InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero which will cause us to go down a | 
 |     putByIndex() path that doesn't change the shape. | 
 |      | 
 |     * dfg/DFGArrayMode.h: | 
 |     (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234075 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-20  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |             DFG AbstractInterpreter: CheckArray filters array modes for DirectArguments/ScopedArguments using only NonArray | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187827 | 
 |             rdar://problem/42146858 | 
 |  | 
 |             Reviewed by Saam Barati. | 
 |  | 
 |             When filtering array modes for DirectArguments or ScopedArguments, we need to allow for the possibility | 
 |             that they can either be NonArray or NonArrayWithArrayStorage (aka ArrayStorageShape). | 
 |             We can't end up with other shapes, Int32, Double, etc because GenericArguments sets | 
 |             InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero which will cause us to go down a | 
 |             putByIndex() path that doesn't change the shape. | 
 |  | 
 |             * dfg/DFGArrayMode.h: | 
 |             (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const): | 
 |  | 
 | 2018-07-20  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r234022. rdar://problem/42417126 | 
 |  | 
 |     Conservatively make Object.assign's fast path do a two phase protocol of loading everything then storing everything to try to prevent a crash | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187836 | 
 |     <rdar://problem/42409527> | 
 |      | 
 |     Reviewed by Mark Lam. | 
 |      | 
 |     We have crash reports that we're crashing on source->getDirect in Object.assign's | 
 |     fast path. Mark investigated this and determined we end up with a nullptr for | 
 |     butterfly. This is curious, because source's Structure indicated that it has | 
 |     out of line properties. My leading hypothesis for this at the moment is a bit | 
 |     handwavy, but it's essentially: | 
 |     - We end up firing a watchpoint when assigning to the target (this can happen | 
 |     if a watchpoint was set up for storing to that particular field) | 
 |     - When we fire that watchpoint, we end up doing some kind work on the source, | 
 |     perhaps causing it to flattenDictionaryStructure. Therefore, we end up | 
 |     mutating source. | 
 |      | 
 |     I'm not super convinced this is what we're running into, but just by reading | 
 |     the code, I think it needs to be something similar to this. Seeing if this change | 
 |     fixes the crasher will give us good data to determine if something like this is | 
 |     happening or if the bug is something else entirely. | 
 |      | 
 |     * runtime/ObjectConstructor.cpp: | 
 |     (JSC::objectConstructorAssign): | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234022 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |             Conservatively make Object.assign's fast path do a two phase protocol of loading everything then storing everything to try to prevent a crash | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187836 | 
 |             <rdar://problem/42409527> | 
 |  | 
 |             Reviewed by Mark Lam. | 
 |  | 
 |             We have crash reports that we're crashing on source->getDirect in Object.assign's | 
 |             fast path. Mark investigated this and determined we end up with a nullptr for | 
 |             butterfly. This is curious, because source's Structure indicated that it has | 
 |             out of line properties. My leading hypothesis for this at the moment is a bit | 
 |             handwavy, but it's essentially: | 
 |             - We end up firing a watchpoint when assigning to the target (this can happen | 
 |             if a watchpoint was set up for storing to that particular field) | 
 |             - When we fire that watchpoint, we end up doing some kind work on the source, | 
 |             perhaps causing it to flattenDictionaryStructure. Therefore, we end up | 
 |             mutating source. | 
 |  | 
 |             I'm not super convinced this is what we're running into, but just by reading | 
 |             the code, I think it needs to be something similar to this. Seeing if this change | 
 |             fixes the crasher will give us good data to determine if something like this is | 
 |             happening or if the bug is something else entirely. | 
 |  | 
 |             * runtime/ObjectConstructor.cpp: | 
 |             (JSC::objectConstructorAssign): | 
 |  | 
 | 2018-07-18  Babak Shafiei  <bshafiei@apple.com> | 
 |  | 
 |         Cherry-pick r233893. rdar://problem/42345044 | 
 |  | 
 |     CodeBlock::baselineVersion() should account for executables with purged codeBlocks. | 
 |     https://bugs.webkit.org/show_bug.cgi?id=187736 | 
 |     <rdar://problem/42114371> | 
 |      | 
 |     Reviewed by Michael Saboff. | 
 |      | 
 |     CodeBlock::baselineVersion() currently checks for a null replacement but does not | 
 |     account for the fact that that the replacement can also be null due to the | 
 |     executable having being purged of its codeBlocks due to a memory event (see | 
 |     ExecutableBase::clearCode()).  This patch adds code to account for this. | 
 |      | 
 |     * bytecode/CodeBlock.cpp: | 
 |     (JSC::CodeBlock::baselineVersion): | 
 |      | 
 |      | 
 |      | 
 |     git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233893 268f45cc-cd09-0410-ab3c-d52691b4dbfc | 
 |  | 
 |     2018-07-17  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |             CodeBlock::baselineVersion() should account for executables with purged codeBlocks. | 
 |             https://bugs.webkit.org/show_bug.cgi?id=187736 | 
 |             <rdar://problem/42114371> | 
 |  | 
 |             Reviewed by Michael Saboff. | 
 |  | 
 |             CodeBlock::baselineVersion() currently checks for a null replacement but does not | 
 |             account for the fact that that the replacement can also be null due to the | 
 |             executable having being purged of its codeBlocks due to a memory event (see | 
 |             ExecutableBase::clearCode()).  This patch adds code to account for this. | 
 |  | 
 |             * bytecode/CodeBlock.cpp: | 
 |             (JSC::CodeBlock::baselineVersion): | 
 |  | 
 | 2018-07-15  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add API to evaluate code using a given object to store global symbols | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187639 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add jsc_context_evaluate_in_object(). It returns a new object as an out parameter. Global symbols in the | 
 |         evaluated script are added as properties to the new object instead of to the context global object. This is | 
 |         similar to JS::Evaluate in spider monkey when a scopeChain parameter is passed, but JSC doesn't support using a | 
 |         scope for assignments, so we have to create a new context and get its global object. This patch also updates | 
 |         jsc_context_evaluate_with_source_uri() to receive the starting line number for consistency with the new | 
 |         jsc_context_evaluate_in_object(). | 
 |  | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jsc_context_evaluate): Pass 0 as line number to jsc_context_evaluate_with_source_uri(). | 
 |         (evaluateScriptInContext): Helper function to evaluate a script in a JSGlobalContextRef. | 
 |         (jsc_context_evaluate_with_source_uri): Use evaluateScriptInContext(). | 
 |         (jsc_context_evaluate_in_object): Create a new context and set the main context global object as extension | 
 |         scope of it. Evaluate the script in the new context and get its global object to be returned as parameter. | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-07-13  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [32bit JSC tests]  stress/cow-convert-double-to-contiguous.js and stress/cow-convert-int32-to-contiguous.js are failing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187561 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         This patch fixes the issue that CoW array handling is not introduced in 32bit put_by_val code. | 
 |         We clean up 32bit put_by_val code. | 
 |  | 
 |         1. We remove inline out-of-bounds recording code since it is done in C operation code. This change | 
 |         aligns 32bit implementation to 64bit implementation. | 
 |  | 
 |         2. We add CoW array checking, which is done in 64bit implementation. | 
 |  | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_put_by_val): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_put_by_val): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |  | 
 | 2018-07-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Need to handle CodeBlock::replacement() being null. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187569 | 
 |         <rdar://problem/41468692> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         CodeBlock::replacement() may return a nullptr.  Some of our code already checks | 
 |         for this while others do not.  We should add null checks in all the places that | 
 |         need it. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::hasOptimizedReplacement): | 
 |         (JSC::CodeBlock::jettison): | 
 |         (JSC::CodeBlock::numberOfDFGCompiles): | 
 |         (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGToFTLDeferredCompilationCallback.cpp: | 
 |         (JSC::DFG::ToFTLDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously): | 
 |         (JSC::DFG::ToFTLDeferredCompilationCallback::compilationDidComplete): | 
 |         * jit/JITOperations.cpp: | 
 |  | 
 | 2018-07-12  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Thread VM& to JSCell::methodTable(VM&) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187548 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch threads VM& to methodTable(VM&) and remove methodTable(). | 
 |         We add VM& parameter to estimatedSize() to thread VM& in estimatedSize implementations. | 
 |  | 
 |         * API/APICast.h: | 
 |         (toJS): | 
 |         * API/JSCallbackObject.h: | 
 |         * API/JSCallbackObjectFunctions.h: | 
 |         (JSC::JSCallbackObject<Parent>::className): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::estimatedSize): | 
 |         * bytecode/CodeBlock.h: | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::estimatedSize): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         * debugger/DebuggerScope.cpp: | 
 |         (JSC::DebuggerScope::className): | 
 |         * debugger/DebuggerScope.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::GatherHeapSnapshotData::GatherHeapSnapshotData): | 
 |         (JSC::GatherHeapSnapshotData::operator() const): | 
 |         (JSC::Heap::gatherExtraHeapSnapshotData): | 
 |         * heap/HeapSnapshotBuilder.cpp: | 
 |         (JSC::HeapSnapshotBuilder::json): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::arrayProtoFuncToString): | 
 |         * runtime/ClassInfo.h: | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::estimatedSize): | 
 |         * runtime/DirectArguments.h: | 
 |         * runtime/HashMapImpl.cpp: | 
 |         (JSC::HashMapImpl<HashMapBucket>::estimatedSize): | 
 |         * runtime/HashMapImpl.h: | 
 |         * runtime/JSArrayBuffer.cpp: | 
 |         (JSC::JSArrayBuffer::estimatedSize): | 
 |         * runtime/JSArrayBuffer.h: | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::estimatedSize): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::dump const): | 
 |         (JSC::JSCell::estimatedSizeInBytes const): | 
 |         (JSC::JSCell::estimatedSize): | 
 |         (JSC::JSCell::className): | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         * runtime/JSGenericTypedArrayView.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::estimatedSize): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::estimatedSize): | 
 |         (JSC::JSObject::className): | 
 |         (JSC::JSObject::toStringName): | 
 |         (JSC::JSObject::calculatedClassName): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSProxy.cpp: | 
 |         (JSC::JSProxy::className): | 
 |         * runtime/JSProxy.h: | 
 |         * runtime/JSString.cpp: | 
 |         (JSC::JSString::estimatedSize): | 
 |         * runtime/JSString.h: | 
 |         * runtime/RegExp.cpp: | 
 |         (JSC::RegExp::estimatedSize): | 
 |         * runtime/RegExp.h: | 
 |         * runtime/WeakMapImpl.cpp: | 
 |         (JSC::WeakMapImpl<WeakMapBucket>::estimatedSize): | 
 |         * runtime/WeakMapImpl.h: | 
 |  | 
 | 2018-07-11  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r233714. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187579 | 
 |  | 
 |         it made tests time out (Requested by pizlo on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Change the reoptimization backoff base to 1.3 from 2" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187540 | 
 |         https://trac.webkit.org/changeset/233714 | 
 |  | 
 | 2018-07-11  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add API to allow creating variadic functions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187517 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add a _variadic alternate method for jsc_class_add_constructor, jsc_class_add_method and | 
 |         jsc_value_new_function. In that case the callback always receives a GPtrArray of JSCValue. | 
 |  | 
 |         * API/glib/JSCCallbackFunction.cpp: | 
 |         (JSC::JSCCallbackFunction::create): Make the parameters optional. | 
 |         (JSC::JSCCallbackFunction::JSCCallbackFunction): Ditto. | 
 |         (JSC::JSCCallbackFunction::call): Handle the case of parameters being nullopt by creating a GPtrArray of | 
 |         JSCValue for the arguments. | 
 |         (JSC::JSCCallbackFunction::construct): Ditto. | 
 |         * API/glib/JSCCallbackFunction.h: | 
 |         * API/glib/JSCClass.cpp: | 
 |         (jscClassCreateConstructor): Make the parameters optional. | 
 |         (jsc_class_add_constructor_variadic): Pass nullopt as parameters to jscClassCreateConstructor. | 
 |         (jscClassAddMethod): Make the parameters optional. | 
 |         (jsc_class_add_method_variadic): Pass nullopt as parameters to jscClassAddMethod. | 
 |         * API/glib/JSCClass.h: | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsc_value_object_define_property_accessor): Update now that parameters are optional. | 
 |         (jscValueFunctionCreate): Make the parameters optional. | 
 |         (jsc_value_new_function_variadic): Pass nullopt as parameters to jscValueFunctionCreate. | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-07-11  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add jsc_context_get_global_object() to GLib API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187515 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         This wasn't exposed because we have convenient methods in JSCContext to get and set properties on the global | 
 |         object. However, getting the global object could be useful in some cases, for example to give it a well known | 
 |         name like 'window' in browsers and GJS. | 
 |  | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jsc_context_get_global_object): | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-07-11  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Handle G_TYPE_STRV in glib API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187512 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add jsc_value_new_array_from_strv() and handle G_TYPE_STRV types in function parameters. | 
 |  | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jscContextGValueToJSValue): | 
 |         (jscContextJSValueToGValue): | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsc_value_new_array_from_strv): | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-07-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Iterator of Array.keys() returns object in wrong order | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185197 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * builtins/ArrayIteratorPrototype.js: | 
 |         (globalPrivate.arrayIteratorValueNext): | 
 |         (globalPrivate.arrayIteratorKeyNext): | 
 |         (globalPrivate.arrayIteratorKeyValueNext): | 
 |         * builtins/AsyncFromSyncIteratorPrototype.js: | 
 |         * builtins/AsyncGeneratorPrototype.js: | 
 |         (globalPrivate.asyncGeneratorResolve): | 
 |         * builtins/GeneratorPrototype.js: | 
 |         (globalPrivate.generatorResume): | 
 |         * builtins/MapIteratorPrototype.js: | 
 |         (globalPrivate.mapIteratorNext): | 
 |         * builtins/SetIteratorPrototype.js: | 
 |         (globalPrivate.setIteratorNext): | 
 |         * builtins/StringIteratorPrototype.js: | 
 |         (next): | 
 |         * runtime/IteratorOperations.cpp: | 
 |         (JSC::createIteratorResultObjectStructure): | 
 |         (JSC::createIteratorResultObject): | 
 |  | 
 | 2018-07-10  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         constructArray() should always allocate the requested length. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187543 | 
 |         <rdar://problem/41947884> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Currently, it does not when we're having a bad time.  We fix this by switching | 
 |         back to using tryCreateUninitializedRestricted() exclusively in constructArray(). | 
 |         If we detect that a structure transition is possible before we can initialize | 
 |         the butterfly, we'll go ahead and eagerly initialize the rest of the butterfly. | 
 |         We will introduce JSArray::eagerlyInitializeButterfly() to handle this. | 
 |  | 
 |         Also enhanced the DisallowScope and ObjectInitializationScope to support this | 
 |         eager initialization when needed. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         - the client of operationNewArrayWithSizeAndHint() (in FTL generated code) expects | 
 |           the array allocation to always succeed.  Adding this RELEASE_ASSERT here makes | 
 |           it clearer that we encountered an OutOfMemory condition instead of failing in FTL | 
 |           generated code, which will appear as a generic null pointer dereference. | 
 |  | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::concatAppendOne): | 
 |         - the code here clearly wants to check for an allocation failure.  Switched to | 
 |           using JSArray::tryCreate() instead of JSArray::create(). | 
 |  | 
 |         * runtime/DisallowScope.h: | 
 |         (JSC::DisallowScope::disable): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::eagerlyInitializeButterfly): | 
 |         (JSC::constructArray): | 
 |         * runtime/JSArray.h: | 
 |         * runtime/ObjectInitializationScope.cpp: | 
 |         (JSC::ObjectInitializationScope::notifyInitialized): | 
 |         * runtime/ObjectInitializationScope.h: | 
 |         (JSC::ObjectInitializationScope::notifyInitialized): | 
 |  | 
 | 2018-07-05  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove getTypedArrayImpl | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187338 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         getTypedArrayImpl is overridden only by typed arrays and DataView. Since the number of these classes | 
 |         are limited, we do not need to add this function to MethodTable: dispatching it in JSArrayBufferView is fine. | 
 |         This patch removes getTypedArrayImpl from MethodTable, and moves it to JSArrayBufferView. | 
 |  | 
 |         * runtime/ClassInfo.h: | 
 |         * runtime/GenericTypedArrayView.h: | 
 |         (JSC::GenericTypedArrayView::data const): Deleted. | 
 |         (JSC::GenericTypedArrayView::set): Deleted. | 
 |         (JSC::GenericTypedArrayView::setRange): Deleted. | 
 |         (JSC::GenericTypedArrayView::zeroRange): Deleted. | 
 |         (JSC::GenericTypedArrayView::zeroFill): Deleted. | 
 |         (JSC::GenericTypedArrayView::length const): Deleted. | 
 |         (JSC::GenericTypedArrayView::item const): Deleted. | 
 |         (JSC::GenericTypedArrayView::set const): Deleted. | 
 |         (JSC::GenericTypedArrayView::setNative const): Deleted. | 
 |         (JSC::GenericTypedArrayView::getRange): Deleted. | 
 |         (JSC::GenericTypedArrayView::checkInboundData const): Deleted. | 
 |         (JSC::GenericTypedArrayView::internalByteLength const): Deleted. | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::possiblySharedImpl): | 
 |         * runtime/JSArrayBufferView.h: | 
 |         * runtime/JSArrayBufferViewInlines.h: | 
 |         (JSC::JSArrayBufferView::possiblySharedImpl): Deleted. | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::getTypedArrayImpl): Deleted. | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSDataView.cpp: | 
 |         (JSC::JSDataView::getTypedArrayImpl): Deleted. | 
 |         * runtime/JSDataView.h: | 
 |         * runtime/JSGenericTypedArrayView.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::getTypedArrayImpl): Deleted. | 
 |  | 
 | 2018-07-10  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         hasOwnProperty returns true for out of bounds property index on TypedArray | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187520 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot): | 
 |  | 
 | 2018-07-10  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         DFG JIT: compileMathIC produces incorrect machine code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187537 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Added checks for constant multipliers in JITMulGenerator::generateInline().  If we have a constant multiplier, | 
 |         fall back to the fast path generator which handles such cases. | 
 |  | 
 |         * jit/JITMulGenerator.cpp: | 
 |         (JSC::JITMulGenerator::generateInline): | 
 |  | 
 | 2018-07-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Change the reoptimization backoff base to 1.3 from 2 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187540 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         I have data that hints at this being a speed-up on JetStream, ARES-6, and Speedometer2. | 
 |          | 
 |         I also have data that hints that a backoff base of 1 might be even better, but I think that | 
 |         we want to keep *some* backoff in case we find ourselves in an unmitigated recomp loop. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::reoptimizationRetryCounter const): | 
 |         (JSC::CodeBlock::countReoptimization): | 
 |         (JSC::CodeBlock::adjustedCounterValue): | 
 |         * runtime/Options.cpp: | 
 |         (JSC::recomputeDependentOptions): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-07-10  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         [32-bit JSC tests] ASSERTION FAILED: !butterfly->propertyStorage()[-I - 1].get() under JSC::ObjectInitializationScope::verifyPropertiesAreInitialized. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187362 | 
 |         <rdar://problem/42027210> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         On 32-bit targets, a 0 valued JSValue is not the empty JSValue, but it is a valid | 
 |         value to use for initializing unused properties.  Updated an assertion to account | 
 |         for this. | 
 |  | 
 |         * runtime/ObjectInitializationScope.cpp: | 
 |         (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized): | 
 |  | 
 | 2018-07-10  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         YARR: . doesn't match non-BMP Unicode characters in some cases | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187248 | 
 |  | 
 |         Reviewed by Geoffrey Garen. | 
 |  | 
 |         The safety check in optimizeAlternative() for moving character classes that only consist of BMP | 
 |         characters did not take into account that the character class is inverted.  In this case, we | 
 |         represent '.' as "not a newline" using the newline character class with an inverted check. | 
 |         Clearly that includes non-BMP characters. | 
 |  | 
 |         The fix is to check that the character class doesn't have non-BMP characters AND it isn't an | 
 |         inverted use of that character class. | 
 |  | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::optimizeAlternative): | 
 |  | 
 | 2018-07-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add --traceLLIntExecution and --traceLLIntSlowPath options. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187479 | 
 |  | 
 |         Reviewed by Yusuke Suzuki and Saam Barati. | 
 |  | 
 |         These options are only available if LLINT_TRACING is enabled in LLIntCommon.h. | 
 |  | 
 |         The details: | 
 |         1. LLINT_TRACING consolidates and replaces LLINT_EXECUTION_TRACING and LLINT_SLOW_PATH_TRACING. | 
 |         2. Tracing is now guarded behind runtime options --traceLLIntExecution and --traceLLIntSlowPath. | 
 |            This makes it such that enabling LLINT_TRACING doesn't means that we'll | 
 |            continually spammed with logging until we rebuild. | 
 |         3. Fixed slow path LLINT tracing to work with exception check validation. | 
 |  | 
 |         * llint/LLIntCommon.h: | 
 |         * llint/LLIntExceptions.cpp: | 
 |         (JSC::LLInt::returnToThrow): | 
 |         (JSC::LLInt::callToThrow): | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::slowPathLog): | 
 |         (JSC::LLInt::slowPathLn): | 
 |         (JSC::LLInt::slowPathLogF): | 
 |         (JSC::LLInt::slowPathLogLn): | 
 |         (JSC::LLInt::llint_trace_operand): | 
 |         (JSC::LLInt::llint_trace_value): | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::traceFunctionPrologue): | 
 |         (JSC::LLInt::handleHostCall): | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LLIntSlowPaths.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/CommonSlowPathsExceptions.cpp: | 
 |         (JSC::CommonSlowPaths::interpreterThrowInCaller): | 
 |         * runtime/Options.cpp: | 
 |         (JSC::Options::isAvailable): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-07-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Embed RegExp into constant buffer in UnlinkedCodeBlock and CodeBlock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187477 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Before this patch, RegExp* is specially held in m_regexp buffer which resides in CodeBlock's RareData. | 
 |         However, it is not necessary since JSCells can be reside in a constant buffer. | 
 |         This patch embeds RegExp* to a constant buffer in UnlinkedCodeBlock and CodeBlock. And remove RegExp | 
 |         vector from RareData. | 
 |  | 
 |         We also move the code of dumping RegExp from BytecodeDumper to RegExp::dumpToStream. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         (JSC::BytecodeDumper<Block>::dumpBlock): | 
 |         (JSC::regexpToSourceString): Deleted. | 
 |         (JSC::regexpName): Deleted. | 
 |         (JSC::BytecodeDumper<Block>::dumpRegExps): Deleted. | 
 |         * bytecode/BytecodeDumper.h: | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::regexp const): Deleted. | 
 |         (JSC::CodeBlock::numberOfRegExps const): Deleted. | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::visitChildren): | 
 |         (JSC::UnlinkedCodeBlock::shrinkToFit): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::addRegExp): Deleted. | 
 |         (JSC::UnlinkedCodeBlock::numberOfRegExps const): Deleted. | 
 |         (JSC::UnlinkedCodeBlock::regexp const): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitNewRegExp): | 
 |         (JSC::BytecodeGenerator::addRegExp): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_regexp): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * runtime/JSCJSValue.cpp: | 
 |         (JSC::JSValue::dumpInContextAssumingStructure const): | 
 |         * runtime/RegExp.cpp: | 
 |         (JSC::regexpToSourceString): | 
 |         (JSC::RegExp::dumpToStream): | 
 |         * runtime/RegExp.h: | 
 |  | 
 | 2018-07-09  Brian Burg  <bburg@apple.com> | 
 |  | 
 |         REGRESSION: Web Inspector no longer pauses in internal injected scripts like WDFindNodes.js | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187350 | 
 |         <rdar://problem/41728249> | 
 |  | 
 |         Reviewed by Matt Baker. | 
 |  | 
 |         Add a new command that toggles whether or not to blackbox internal scripts. | 
 |         If blackboxed, the scripts will not be shown to the frontend and the debugger will | 
 |         not pause in source frames from blackboxed scripts. Sometimes we want to break into | 
 |         those scripts when debugging Web Inspector, WebDriver, or other WebKit-internal code | 
 |         that injects scripts. | 
 |  | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: | 
 |         (Inspector::InspectorDebuggerAgent::setPauseForInternalScripts): | 
 |         (Inspector::InspectorDebuggerAgent::didParseSource): | 
 |         * inspector/agents/InspectorDebuggerAgent.h: | 
 |         * inspector/protocol/Debugger.json: | 
 |  | 
 | 2018-07-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Make some data members of UnlinkedCodeBlock private | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187467 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch makes m_numVars, m_numCalleeLocals, and m_numParameters of UnlinkedCodeBlock private. | 
 |         We also remove m_numCapturedVars since it is no longer used. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         * bytecode/CodeBlock.h: | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |  | 
 | 2018-07-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of AccessCase / ProxyableAccessCase to reduce size of ProxyableAccessCase | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187465 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         ProxyableAccessCase is allocated so frequently and it is persisted so long. Reducing the size | 
 |         of ProxyableAccessCase can reduce the footprint of many web sites including nytimes.com. | 
 |  | 
 |         This patch uses a bit complicated layout to reduce ProxyableAccessCase. We add unused bool member | 
 |         in AccessCase's padding, and use it in ProxyableAccessCase. By doing so, we can reduce the size | 
 |         of ProxyableAccessCase from 56 to 48. And it also reduces the size of GetterSetterAccessCase | 
 |         from 104 to 96 since it inherits ProxyableAccessCase. | 
 |  | 
 |         * bytecode/AccessCase.h: | 
 |         (JSC::AccessCase::viaProxy const): | 
 |         (JSC::AccessCase::AccessCase): | 
 |         * bytecode/ProxyableAccessCase.cpp: | 
 |         (JSC::ProxyableAccessCase::ProxyableAccessCase): | 
 |         * bytecode/ProxyableAccessCase.h: | 
 |  | 
 | 2018-07-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, build fix for debug builds after r233630 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187441 | 
 |  | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::frameRegisterCountFor): | 
 |         * llint/LLIntEntrypoint.cpp: | 
 |         (JSC::LLInt::frameRegisterCountFor): | 
 |  | 
 | 2018-07-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of CodeBlock to reduce padding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187441 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Arrange the order of members to reduce the size of CodeBlock from 552 to 544. | 
 |         We also make SourceCodeRepresentation 1 byte since CodeBlock has a vector of this, | 
 |         Vector<SourceCodeRepresentation> m_constantsSourceCodeRepresentation. | 
 |  | 
 |         We also move m_numCalleeLocals and m_numVars from `public` to `private` in CodeBlock. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBlock): | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::numVars const): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::numVars const): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::ByteCodeParser): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminalImpl): | 
 |         (JSC::DFG::ByteCodeParser::handleRecursiveTailCall): | 
 |         (JSC::DFG::ByteCodeParser::inlineCall): | 
 |         (JSC::DFG::ByteCodeParser::handleGetById): | 
 |         (JSC::DFG::ByteCodeParser::handlePutById): | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::forAllLocalsLiveInBytecode): | 
 |         * dfg/DFGOSREntrypointCreationPhase.cpp: | 
 |         (JSC::DFG::OSREntrypointCreationPhase::run): | 
 |         * dfg/DFGVariableEventStream.cpp: | 
 |         (JSC::DFG::VariableEventStream::reconstruct const): | 
 |         * ftl/FTLOSREntry.cpp: | 
 |         (JSC::FTL::prepareOSREntry): | 
 |         * ftl/FTLState.cpp: | 
 |         (JSC::FTL::State::State): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::dumpRegisters): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::frameRegisterCountFor): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_enter): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_enter): | 
 |         * jit/JITOperations.cpp: | 
 |         * llint/LLIntEntrypoint.cpp: | 
 |         (JSC::LLInt::frameRegisterCountFor): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::traceFunctionPrologue): | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * runtime/JSCJSValue.h: | 
 |  | 
 | 2018-07-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize padding of UnlinkedCodeBlock to shrink | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187448 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We optimize the size of CodeType and TriState. And we arrange the layout of UnlinkedCodeBlock. | 
 |         These optimizations reduce the size of UnlinkedCodeBlock from 304 to 288. | 
 |  | 
 |         * bytecode/CodeType.h: | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::codeType const): | 
 |         (JSC::UnlinkedCodeBlock::didOptimize const): | 
 |         (JSC::UnlinkedCodeBlock::setDidOptimize): | 
 |         * bytecode/VirtualRegister.h: | 
 |  | 
 | 2018-07-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize padding of InferredTypeTable by using cellLock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187447 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Use cellLock() in InferredTypeTable to guard changes of internal structures. | 
 |         This is the same usage to SparseArrayValueMap. By using cellLock(), we can | 
 |         reduce the size of InferredTypeTable from 40 to 32. | 
 |  | 
 |         * runtime/InferredTypeTable.cpp: | 
 |         (JSC::InferredTypeTable::visitChildren): | 
 |         (JSC::InferredTypeTable::get): | 
 |         (JSC::InferredTypeTable::willStoreValue): | 
 |         (JSC::InferredTypeTable::makeTop): | 
 |         * runtime/InferredTypeTable.h: | 
 |         Using enum class and using. And remove `isEmpty()` since it is not used. | 
 |  | 
 |         * runtime/Structure.h: | 
 |  | 
 | 2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of SourceProvider to reduce padding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187440 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Arrange members of SourceProvider to reduce the size from 80 to 72. | 
 |  | 
 |         * parser/SourceProvider.cpp: | 
 |         (JSC::SourceProvider::SourceProvider): | 
 |         * parser/SourceProvider.h: | 
 |  | 
 | 2018-07-08  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         PropertyTable::skipDeletedEntries() should guard against iterating past the table end. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187444 | 
 |         <rdar://problem/41282849> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         PropertyTable supports C++ iteration by offering begin() and end() methods, and | 
 |         an iterator class.  The begin() methods and the iterator operator++() method uses | 
 |         PropertyTable::skipDeletedEntries() to skip over deleted entries in the table. | 
 |         However, PropertyTable::skipDeletedEntries() does not prevent the iteration | 
 |         pointer from being incremented past the end of the table.  As a result, we can | 
 |         iterate past the end of the table.  Note that the C++ iteration protocol tests | 
 |         for the iterator not being equal to the end() value.  It does not do a <= test. | 
 |         If the iterator ever shoots past end, the loop will effectively not terminate. | 
 |  | 
 |         This issue can manifest if and only if the last entry in the table is a deleted | 
 |         one, and the key field of the PropertyMapEntry shaped space at the end of the | 
 |         table (the one beyond the last) contains a 1 (i.e. PROPERTY_MAP_DELETED_ENTRY_KEY) | 
 |         value. | 
 |  | 
 |         No test because manifesting this issue requires uncontrollable happenstance where | 
 |         memory just beyond the end of the table looks like a deleted entry. | 
 |  | 
 |         * runtime/PropertyMapHashTable.h: | 
 |         (JSC::PropertyTable::begin): | 
 |         (JSC::PropertyTable::end): | 
 |         (JSC::PropertyTable::begin const): | 
 |         (JSC::PropertyTable::end const): | 
 |         (JSC::PropertyTable::skipDeletedEntries): | 
 |  | 
 | 2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of SymbolTable to reduce padding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187437 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Arrange the layout of SymbolTable to reduce the size from 88 to 72. | 
 |  | 
 |         * runtime/SymbolTable.h: | 
 |  | 
 | 2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of RegExp to reduce padding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187438 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Reduce the size of RegExp from 168 to 144. | 
 |  | 
 |         * runtime/RegExp.cpp: | 
 |         (JSC::RegExp::RegExp): | 
 |         * runtime/RegExp.h: | 
 |         * runtime/RegExpKey.h: | 
 |         * yarr/YarrErrorCode.h: | 
 |  | 
 | 2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize layout of ValueProfile to reduce padding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187439 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Reduce the size of ValueProfile from 40 to 32 by reordering members. | 
 |  | 
 |         * bytecode/ValueProfile.h: | 
 |         (JSC::ValueProfileBase::ValueProfileBase): | 
 |  | 
 | 2018-07-05  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         ProgramExecutable may be collected as we checkSyntax on it | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187359 | 
 |         <rdar://problem/41832135> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The bug was we were passing in a reference to the SourceCode field on ProgramExecutable as | 
 |         the ProgramExecutable itself may be collected. The fix here is to make a copy | 
 |         of the field instead of passing in a reference inside of ParserError::toErrorObject. | 
 |          | 
 |         No new tests here as this was already caught by our iOS JSC testers. | 
 |  | 
 |         * parser/ParserError.h: | 
 |         (JSC::ParserError::toErrorObject): | 
 |  | 
 | 2018-07-04  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Introduce PLATFORM(IOSMAC) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187315 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-07-03  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         [32-bit JSC tests] ASSERTION FAILED: !getDirect(offset) || !JSValue::encode(getDirect(offset)). | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187255 | 
 |         <rdar://problem/41785257> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         The 32-bit JIT::emit_op_create_this() needs to initialize uninitialized properties | 
 |         too: basically, do what the 64-bit code is doing.  At present, this change only | 
 |         serves to pacify an assertion.  It is not needed for correctness because the | 
 |         concurrent GC is not used on 32-bit builds. | 
 |  | 
 |         This issue is already covered by the slowMicrobenchmarks/rest-parameter-allocation-elimination.js | 
 |         test. | 
 |  | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_create_this): | 
 |  | 
 | 2018-07-03  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Move slowDownAndWasteMemory function to JSArrayBufferView | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187290 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         slowDownAndWasteMemory is just overridden by typed arrays. Since they are limited, | 
 |         we do not need to add this function to MethodTable: just dispatching it in JSArrayBufferView | 
 |         is fine. And slowDownAndWasteMemory only requires the sizeof(element), which can be | 
 |         easily calculated from JSType. | 
 |         This patch removes slowDownAndWasteMemory from MethodTable, and moves it to JSArrayBufferView. | 
 |  | 
 |         * runtime/ClassInfo.h: | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::elementSize): | 
 |         (JSC::JSArrayBufferView::slowDownAndWasteMemory): | 
 |         * runtime/JSArrayBufferView.h: | 
 |         * runtime/JSArrayBufferViewInlines.h: | 
 |         (JSC::JSArrayBufferView::possiblySharedBuffer): | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::slowDownAndWasteMemory): Deleted. | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSDataView.cpp: | 
 |         (JSC::JSDataView::slowDownAndWasteMemory): Deleted. | 
 |         * runtime/JSDataView.h: | 
 |         * runtime/JSGenericTypedArrayView.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): Deleted. | 
 |  | 
 | 2018-07-02  Sukolsak Sakshuwong  <sukolsak@gmail.com> | 
 |  | 
 |         Regular expressions with ".?" expressions at the start and the end match the entire string | 
 |         https://bugs.webkit.org/show_bug.cgi?id=119191 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         r90962 optimized regular expressions in the form of /.*abc.*/ by looking | 
 |         for "abc" first and then processing the leading and trailing dot stars | 
 |         to find the beginning and the end of the match. However, it erroneously | 
 |         enabled this optimization for regular expressions whose leading or | 
 |         trailing dots had quantifiers that were not of arbitrary length, e.g., | 
 |         /.?abc.*/, /.*abc.?/, /.{0,4}abc.*/, etc. This caused the expression to | 
 |         match the entire string when it shouldn't. This patch disables the | 
 |         optimization for those cases. | 
 |  | 
 |         * yarr/YarrPattern.cpp: | 
 |         (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions): | 
 |  | 
 | 2018-07-02  Sukolsak Sakshuwong  <sukolsak@gmail.com> | 
 |  | 
 |         RegExp.exec returns wrong value with a long integer quantifier | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187042 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Prior to this patch, the Yarr parser checked for integer overflow when | 
 |         parsing quantifiers in regular expressions by adding one digit at a time | 
 |         to a number and checking if the result got larger. This is wrong; | 
 |         The parser would fail to detect overflow when parsing, for example, | 
 |         10,000,000,003 because (1000000000*10 + 3) % (2^32) = 1410065411 > 1000000000. | 
 |  | 
 |         Another issue was that once it detected overflow, it stopped consuming | 
 |         the remaining digits. Since it didn't find the closing bracket, it | 
 |         parsed the quantifier as a normal string instead. | 
 |  | 
 |         This patch fixes these issues by reading all the digits and checking for | 
 |         overflow with Checked<unsigned, RecordOverflow>. If it overflows, it | 
 |         returns the largest possible value (quantifyInfinite in this case). This | 
 |         matches Chrome [1], Firefox [2], and Edge [3]. | 
 |  | 
 |         [1] https://chromium.googlesource.com/v8/v8.git/+/23222f0a88599dcf302ccf395883944620b70fd5/src/regexp/regexp-parser.cc#1042 | 
 |         [2] https://dxr.mozilla.org/mozilla-central/rev/aea3f3457f1531706923b8d4c595a1f271de83da/js/src/irregexp/RegExpParser.cpp#1310 | 
 |         [3] https://github.com/Microsoft/ChakraCore/blob/fc08987381da141bb686b5d0c71d75da96f9eb8a/lib/Parser/RegexParser.cpp#L1149 | 
 |  | 
 |         * yarr/YarrParser.h: | 
 |         (JSC::Yarr::Parser::consumeNumber): | 
 |  | 
 | 2018-07-02  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         InstanceOf IC should do generic if the prototype is not an object. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187250 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The old code was wrong for two reasons. First, the AccessCase expected that | 
 |         the prototype value would be non-null. Second, we would end up returning | 
 |         false instead of throwing an exception. | 
 |  | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheInstanceOf): | 
 |  | 
 | 2018-07-01  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Builtins and host functions should get their own structures. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187211 | 
 |         <rdar://problem/41646336> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         JSFunctions do lazy reification of properties, but ordinary functions applies | 
 |         different rules of property reification than builtin and host functions.  Hence, | 
 |         we should give builtins and host functions their own structures. | 
 |  | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::selectStructureForNewFuncExp): | 
 |         (JSC::JSFunction::create): | 
 |         (JSC::JSFunction::getOwnPropertySlot): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::hostFunctionStructure const): | 
 |         (JSC::JSGlobalObject::arrowFunctionStructure const): | 
 |         (JSC::JSGlobalObject::sloppyFunctionStructure const): | 
 |         (JSC::JSGlobalObject::strictFunctionStructure const): | 
 |  | 
 | 2018-07-01  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         JavaScriptCore: Fix clang static analyzer warnings: Assigned value is garbage or undefined | 
 |         <https://webkit.org/b/187233> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * b3/air/AirEliminateDeadCode.cpp: | 
 |         (JSC::B3::Air::eliminateDeadCode): Initialize `changed`. | 
 |         * parser/ParserTokens.h: | 
 |         (JSC::JSTextPosition::JSTextPosition): Add struct member | 
 |         initialization. Simplify default constructor. | 
 |         (JSC::JSTokenLocation::JSTokenData): Move largest struct in the | 
 |         union to the beginning to make it easy to zero out all fields. | 
 |         (JSC::JSTokenLocation::JSTokenLocation): Add struct member | 
 |         initialization.  Simplify default constructor.  Note that | 
 |         `endOffset` was not being initialized previously. | 
 |         (JSC::JSTextPosition::JSToken): Add struct member initialization | 
 |         where necessary. | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::MatcherResult): Add struct member initialization. | 
 |  | 
 | 2018-06-23  Darin Adler  <darin@apple.com> | 
 |  | 
 |         [Cocoa] Improve ARC compatibility of more code in JavaScriptCore | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186973 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * API/JSContext.mm: | 
 |         (WeakContextRef::WeakContextRef): Deleted. | 
 |         (WeakContextRef::~WeakContextRef): Deleted. | 
 |         (WeakContextRef::get): Deleted. | 
 |         (WeakContextRef::set): Deleted. | 
 |  | 
 |         * API/JSContextInternal.h: Removed unneeded header guards since this is | 
 |         an Objective-C++ header. Removed unused WeakContextRef class. Removed declaration | 
 |         of method -[JSContext initWithGlobalContextRef:] and JSContext property wrapperMap | 
 |         since neither is used outside the class implementation. | 
 |  | 
 |         * API/JSManagedValue.mm: | 
 |         (-[JSManagedValue initWithValue:]): Use a bridging cast. | 
 |         (-[JSManagedValue dealloc]): Ditto. | 
 |         (-[JSManagedValue didAddOwner:]): Ditto. | 
 |         (-[JSManagedValue didRemoveOwner:]): Ditto. | 
 |         (JSManagedValueHandleOwner::isReachableFromOpaqueRoots): Ditto. | 
 |         (JSManagedValueHandleOwner::finalize): Ditto. | 
 |         * API/JSValue.mm: | 
 |         (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]): Ditto. | 
 |         (+[JSValue valueWithNewErrorFromMessage:inContext:]): Ditto. | 
 |         (-[JSValue valueForProperty:]): Ditto. | 
 |         (-[JSValue setValue:forProperty:]): Ditto. | 
 |         (-[JSValue deleteProperty:]): Ditto. | 
 |         (-[JSValue hasProperty:]): Ditto. | 
 |         (-[JSValue invokeMethod:withArguments:]): Ditto. | 
 |         (valueToObjectWithoutCopy): Ditto. Also removed unneeded explicit type names. | 
 |         (valueToArray): Ditto. | 
 |         (valueToDictionary): Ditto. | 
 |         (objectToValueWithoutCopy): Ditto. | 
 |         (objectToValue): Ditto. | 
 |         * API/JSVirtualMachine.mm: | 
 |         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): Ditto. | 
 |         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): Ditto. | 
 |         (-[JSVirtualMachine isOldExternalObject:]): Ditto. | 
 |         (-[JSVirtualMachine addManagedReference:withOwner:]): Ditto. | 
 |         (-[JSVirtualMachine removeManagedReference:withOwner:]): Ditto. | 
 |         (-[JSVirtualMachine contextForGlobalContextRef:]): Ditto. | 
 |         (-[JSVirtualMachine addContext:forGlobalContextRef:]): Ditto. | 
 |         (scanExternalObjectGraph): Ditto. | 
 |         (scanExternalRememberedSet): Ditto. | 
 |         * API/JSWrapperMap.mm: | 
 |         (makeWrapper): Ditto. | 
 |         (-[JSObjCClassInfo wrapperForObject:inContext:]): Ditto. | 
 |         (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]): Ditto. | 
 |         (tryUnwrapObjcObject): Ditto. | 
 |         * API/ObjCCallbackFunction.mm: | 
 |         (blockSignatureContainsClass): Ditto. | 
 |         (objCCallbackFunctionForMethod): Switched from retain to CFRetain, but not | 
 |         sure we will be keeping this the same way under ARC. | 
 |         (objCCallbackFunctionForBlock): Use a bridging cast. | 
 |  | 
 |         * API/ObjcRuntimeExtras.h: | 
 |         (protocolImplementsProtocol): Use a more specific type that includes the | 
 |         explicit __unsafe_unretained for copied protocol lists. | 
 |         (forEachProtocolImplementingProtocol): Ditto. | 
 |  | 
 |         * inspector/remote/cocoa/RemoteInspectorCocoa.mm: | 
 |         (Inspector::convertNSNullToNil): Added to replace the CONVERT_NSNULL_TO_NIL macro. | 
 |         (Inspector::RemoteInspector::receivedSetupMessage): Use convertNSNullToNil. | 
 |  | 
 |         * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm: Moved the | 
 |         CFXPCBridge SPI to a header named CFXPCBridgeSPI.h. | 
 |         (auditTokenHasEntitlement): Deleted. Moved to Entitlements.h/cpp in WTF. | 
 |         (Inspector::RemoteInspectorXPCConnection::handleEvent): Use WTF::hasEntitlement. | 
 |         (Inspector::RemoteInspectorXPCConnection::sendMessage): Use a bridging cast. | 
 |  | 
 | 2018-06-30  Adam Barth  <abarth@webkit.org> | 
 |  | 
 |         Port JavaScriptCore to OS(FUCHSIA) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187223 | 
 |  | 
 |         Reviewed by Daniel Bates. | 
 |  | 
 |         * assembler/ARM64Assembler.h: | 
 |         (JSC::ARM64Assembler::cacheFlush): Call zx_cache_flush to flush cache. | 
 |         * runtime/MachineContext.h: Fuchsia has the same mcontext_t as glibc. | 
 |         (JSC::MachineContext::stackPointerImpl): | 
 |         (JSC::MachineContext::framePointerImpl): | 
 |         (JSC::MachineContext::instructionPointerImpl): | 
 |         (JSC::MachineContext::argumentPointer<1>): | 
 |         (JSC::MachineContext::llintInstructionPointer): | 
 |  | 
 | 2018-06-30  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         Fix clang static analyzer warnings: Garbage return value | 
 |         <https://webkit.org/b/187224> | 
 |  | 
 |         Reviewed by Eric Carlson. | 
 |  | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): | 
 |         - Use brace initialization for local variables. | 
 |         * debugger/DebuggerCallFrame.cpp: | 
 |         (class JSC::LineAndColumnFunctor): | 
 |         - Use class member initialization for member variables. | 
 |  | 
 | 2018-06-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Unreviewed. Try to fix Windows build after r233377 | 
 |  | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::createExecutable): | 
 |  | 
 | 2018-06-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't use tracePoints in JS/Wasm entry | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187196 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This puts VM entry and Wasm entry tracePoints behind a runtime | 
 |         option. This is a ~4x speedup on a soon to be released Wasm | 
 |         benchmark. tracePoints should basically never run more than 50 | 
 |         times a second. Entering the VM and entering Wasm are user controlled, | 
 |         and can happen hundreds of thousands of times in a second. Depending | 
 |         on how the Wasm/JS code is structured, this can be disastrous for | 
 |         performance. | 
 |  | 
 |         * runtime/Options.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |         (JSC::VMEntryScope::~VMEntryScope): | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::compileFunctions): | 
 |         * wasm/js/WebAssemblyFunction.cpp: | 
 |         (JSC::callWebAssemblyFunction): | 
 |  | 
 | 2018-06-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         We shouldn't recurse into the parser when gathering metadata about various function offsets | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184074 | 
 |         <rdar://problem/37165897> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Prior to this patch, when we made a builtin, we had to make an UnlinkedFunctionExecutable | 
 |         for that builtin. This required calling into the parser. However, the parser | 
 |         may throw a stack overflow. We were not able to recover from that. The only | 
 |         reason we called into the parser here is that we were gathering text offsets | 
 |         and various metadata for things in the builtin function. This patch writes a | 
 |         mini parser that figures this information out without calling into the full | 
 |         parser. (I've also added a debug assert that verifies the mini parser stays in | 
 |         sync with the full parser.) The result of this is that BuiltinExecutbles::createExecutable | 
 |         always succeeds. | 
 |  | 
 |         * builtins/AsyncFromSyncIteratorPrototype.js: | 
 |         (globalPrivate.createAsyncFromSyncIterator): | 
 |         (globalPrivate.AsyncFromSyncIteratorConstructor): | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::createExecutable): | 
 |         * builtins/GlobalOperations.js: | 
 |         (globalPrivate.getter.overriddenName.string_appeared_here.speciesGetter): | 
 |         (globalPrivate.speciesConstructor): | 
 |         (globalPrivate.copyDataProperties): | 
 |         (globalPrivate.copyDataPropertiesNoExclusions): | 
 |         * builtins/PromiseOperations.js: | 
 |         (globalPrivate.newHandledRejectedPromise): | 
 |         * builtins/RegExpPrototype.js: | 
 |         (globalPrivate.hasObservableSideEffectsForRegExpMatch): | 
 |         (globalPrivate.hasObservableSideEffectsForRegExpSplit): | 
 |         * builtins/StringPrototype.js: | 
 |         (globalPrivate.hasObservableSideEffectsForStringReplace): | 
 |         (globalPrivate.getDefaultCollator): | 
 |         * parser/Nodes.cpp: | 
 |         (JSC::FunctionMetadataNode::FunctionMetadataNode): | 
 |         (JSC::FunctionMetadataNode::operator== const): | 
 |         (JSC::FunctionMetadataNode::dump const): | 
 |         * parser/Nodes.h: | 
 |         * parser/Parser.h: | 
 |         (JSC::parse): | 
 |         * parser/ParserError.h: | 
 |         (JSC::ParserError::type const): | 
 |         * parser/ParserTokens.h: | 
 |         (JSC::JSTextPosition::operator== const): | 
 |         (JSC::JSTextPosition::operator!= const): | 
 |         * parser/SourceCode.h: | 
 |         (JSC::SourceCode::operator== const): | 
 |         (JSC::SourceCode::operator!= const): | 
 |         (JSC::SourceCode::subExpression const): | 
 |         (JSC::SourceCode::subExpression): Deleted. | 
 |  | 
 | 2018-06-28  Michael Saboff  <msaboff@apple.com> | 
 |    | 
 |         IsoCellSet::sweepToFreeList() not safe when Full GC in process | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187157 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * heap/IsoCellSet.cpp: | 
 |         (JSC::IsoCellSet::sweepToFreeList): Changed the "stale marks logic" to match what | 
 |         is in MarkedBlock::Handle::specializedSweep where it takes into account whether | 
 |         or not we are in the process of marking during a full GC. | 
 |         * heap/MarkedBlock.h: | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::Handle::areMarksStaleForSweep): New helper. | 
 |  | 
 | 2018-06-27  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add some more register state information when we crash in repatchPutById | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187112 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This will help us gather info when we end up seeing a ObjectPropertyConditionSet | 
 |         with an offset that is different than what the put tells us. | 
 |  | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCachePutByID): | 
 |  | 
 | 2018-06-27  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Fix a bug in $vm.callFrame() and apply previously requested renaming of $vm.println to print. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187119 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         $vm.callFrame()'s JSDollarVMCallFrame::finishCreation() | 
 |         should be checking for codeBlock instead of !codeBlock | 
 |         before using the codeBlock. | 
 |  | 
 |         I also renamed some other "print" functions to use "dump" instead | 
 |         to match their underlying C++ code that they will call e.g. | 
 |         CodeBlock::dumpSource(). | 
 |  | 
 |         * tools/JSDollarVM.cpp: | 
 |         (WTF::JSDollarVMCallFrame::finishCreation): | 
 |         (JSC::functionDumpSourceFor): | 
 |         (JSC::functionDumpBytecodeFor): | 
 |         (JSC::doPrint): | 
 |         (JSC::functionDataLog): | 
 |         (JSC::functionPrint): | 
 |         (JSC::functionDumpCallFrame): | 
 |         (JSC::functionDumpStack): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |         (JSC::functionPrintSourceFor): Deleted. | 
 |         (JSC::functionPrintBytecodeFor): Deleted. | 
 |         (JSC::doPrintln): Deleted. | 
 |         (JSC::functionPrintln): Deleted. | 
 |         (JSC::functionPrintCallFrame): Deleted. | 
 |         (JSC::functionPrintStack): Deleted. | 
 |         * tools/VMInspector.cpp: | 
 |         (JSC::DumpFrameFunctor::DumpFrameFunctor): | 
 |         (JSC::DumpFrameFunctor::operator() const): | 
 |         (JSC::VMInspector::dumpCallFrame): | 
 |         (JSC::VMInspector::dumpStack): | 
 |         (JSC::VMInspector::dumpValue): | 
 |         (JSC::PrintFrameFunctor::PrintFrameFunctor): Deleted. | 
 |         (JSC::PrintFrameFunctor::operator() const): Deleted. | 
 |         (JSC::VMInspector::printCallFrame): Deleted. | 
 |         (JSC::VMInspector::printStack): Deleted. | 
 |         (JSC::VMInspector::printValue): Deleted. | 
 |         * tools/VMInspector.h: | 
 |  | 
 | 2018-06-27  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Add logging to try to diagnose where we get a null structure. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187106 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Add a logging to JSObject::toPrimitive to help diagnose a nullptr | 
 |         structure crash. | 
 |  | 
 |         This code should be removed when we fix <rdar://problem/33451840> | 
 |  | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::callToPrimitiveFunction): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::getPropertySlot): | 
 |  | 
 | 2018-06-27  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         DFG's compileReallocatePropertyStorage() and compileAllocatePropertyStorage() slow paths should also clear unused properties. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187091 | 
 |         <rdar://problem/41395624> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Previously, when compileReallocatePropertyStorage() and compileAllocatePropertyStorage() | 
 |         take their slow paths, the slow path would jump back to the fast path right after | 
 |         the emitted code which clears the unused property values.  As a result, the | 
 |         unused properties are not initialized.  We've fixed this by adding the slow path | 
 |         generators before we emit the code to clear the unused properties. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): | 
 |  | 
 | 2018-06-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] ArrayPatternNode::emitDirectBinding does not return assignment target value if dst is nullptr | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185943 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         ArrayPatternNode::emitDirectBinding should return a register with an assignment target instead of filling | 
 |         the result with undefined if `dst` is nullptr. While `dst == ignoredResult()` means we do not require | 
 |         the result, `dst == nullptr` just means "dst is required, but a register for dst is not allocated.". | 
 |         This patch fixes emitDirectBinding to return an appropriate value with an allocated register for dst. | 
 |  | 
 |         ArrayPatternNode::emitDirectBinding() should be removed later since it does not follow array spreading protocol, | 
 |         but it should be done in a separate patch since it would be performance sensitive. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayPatternNode::emitDirectBinding): | 
 |  | 
 | 2018-06-26  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Pass VM& to functions more | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186241 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch threads VM& to functions requiring VM& more. | 
 |  | 
 |         * API/JSObjectRef.cpp: | 
 |         (JSObjectIsConstructor): | 
 |         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp: | 
 |         (JSC::AdaptiveInferredPropertyValueWatchpointBase::install): | 
 |         (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire): | 
 |         (JSC::AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint::fireInternal): | 
 |         (JSC::AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint::fireInternal): | 
 |         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h: | 
 |         * bytecode/CodeBlockJettisoningWatchpoint.cpp: | 
 |         (JSC::CodeBlockJettisoningWatchpoint::fireInternal): | 
 |         * bytecode/CodeBlockJettisoningWatchpoint.h: | 
 |         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp: | 
 |         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::install): | 
 |         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal): | 
 |         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h: | 
 |         * bytecode/StructureStubClearingWatchpoint.cpp: | 
 |         (JSC::StructureStubClearingWatchpoint::fireInternal): | 
 |         * bytecode/StructureStubClearingWatchpoint.h: | 
 |         * bytecode/Watchpoint.cpp: | 
 |         (JSC::Watchpoint::fire): | 
 |         (JSC::WatchpointSet::fireAllWatchpoints): | 
 |         * bytecode/Watchpoint.h: | 
 |         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp: | 
 |         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::handleFire): | 
 |         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h: | 
 |         * dfg/DFGAdaptiveStructureWatchpoint.cpp: | 
 |         (JSC::DFG::AdaptiveStructureWatchpoint::install): | 
 |         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal): | 
 |         * dfg/DFGAdaptiveStructureWatchpoint.h: | 
 |         * dfg/DFGDesiredWatchpoints.cpp: | 
 |         (JSC::DFG::AdaptiveStructureWatchpointAdaptor::add): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::setupGetByIdPrototypeCache): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint): | 
 |         (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire): | 
 |         * runtime/ECMAScriptSpecInternalFunctions.cpp: | 
 |         (JSC::esSpecIsConstructor): | 
 |         * runtime/FunctionRareData.cpp: | 
 |         (JSC::FunctionRareData::AllocationProfileClearingWatchpoint::fireInternal): | 
 |         * runtime/FunctionRareData.h: | 
 |         * runtime/InferredStructureWatchpoint.cpp: | 
 |         (JSC::InferredStructureWatchpoint::fireInternal): | 
 |         * runtime/InferredStructureWatchpoint.h: | 
 |         * runtime/InternalFunction.cpp: | 
 |         (JSC::InternalFunction::createSubclassStructureSlow): | 
 |         * runtime/InternalFunction.h: | 
 |         (JSC::InternalFunction::createSubclassStructure): | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::isConstructor const): | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::isConstructor): | 
 |         (JSC::JSCell::methodTable const): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h: | 
 |         (JSC::ObjectPropertyChangeAdaptiveWatchpoint::ObjectPropertyChangeAdaptiveWatchpoint): | 
 |         * runtime/ProxyObject.cpp: | 
 |         (JSC::ProxyObject::finishCreation): | 
 |         * runtime/ReflectObject.cpp: | 
 |         (JSC::reflectObjectConstruct): | 
 |         * runtime/StructureRareData.cpp: | 
 |         (JSC::StructureRareData::setObjectToStringValue): | 
 |         (JSC::ObjectToStringAdaptiveStructureWatchpoint::install): | 
 |         (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal): | 
 |         (JSC::ObjectToStringAdaptiveInferredPropertyValueWatchpoint::handleFire): | 
 |  | 
 | 2018-06-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         eval() is wrong about the LiteralParser never throwing any exceptions. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187074 | 
 |         <rdar://problem/41461099> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Added the missing exception check, and removed an erroneous assertion. | 
 |  | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::eval): | 
 |  | 
 | 2018-06-26  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JSImmutableButterfly can't be allocated from a subspace with HeapCell::Kind::Auxiliary | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186878 | 
 |         <rdar://problem/40568659> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch fixes a bug in our JSImmutableButterfly implementation uncovered by | 
 |         our stress GC bots. Before this patch, JSImmutableButterfly was allocated | 
 |         with HeapCell::Kind::Auxiliary. This is wrong. Things that are JSCells can't | 
 |         be allocated from HeapCell::Kind::Auxiliary. This patch adds a new HeapCell::Kind | 
 |         called JSCellWithInteriorPointers. It behaves like JSCell in all ways, except | 
 |         conservative scan knows to treat it like a butterfly in when we we may be | 
 |         pointing into the middle of it. | 
 |          | 
 |         The way we were crashing on the stress GC bots is that our conservative marking | 
 |         won't do cell visiting for things that are Auxiliary. This meant that if the | 
 |         stack were the only thing pointing to a JSImmutableButterfly when a GC took place, | 
 |         that JSImmutableButterfly would not be visited. This is now fixed. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         * debugger/Debugger.cpp: | 
 |         * heap/ConservativeRoots.cpp: | 
 |         (JSC::ConservativeRoots::genericAddPointer): | 
 |         * heap/Heap.cpp: | 
 |         (JSC::GatherHeapSnapshotData::operator() const): | 
 |         (JSC::RemoveDeadHeapSnapshotNodes::operator() const): | 
 |         (JSC::Heap::globalObjectCount): | 
 |         (JSC::Heap::objectTypeCounts): | 
 |         (JSC::Heap::deleteAllCodeBlocks): | 
 |         * heap/HeapCell.cpp: | 
 |         (WTF::printInternal): | 
 |         * heap/HeapCell.h: | 
 |         (JSC::isJSCellKind): | 
 |         (JSC::hasInteriorPointers): | 
 |         * heap/HeapUtil.h: | 
 |         (JSC::HeapUtil::findGCObjectPointersForMarking): | 
 |         (JSC::HeapUtil::isPointerGCObjectJSCell): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::appendJSCellOrAuxiliary): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         * runtime/JSImmutableButterfly.h: | 
 |         (JSC::JSImmutableButterfly::subspaceFor): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * tools/CellProfile.h: | 
 |         (JSC::CellProfile::CellProfile): | 
 |         (JSC::CellProfile::isJSCell const): | 
 |         * tools/HeapVerifier.cpp: | 
 |         (JSC::HeapVerifier::validateCell): | 
 |  | 
 | 2018-06-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Skip some unnecessary work in Interpreter::getStackTrace(). | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187070 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::getStackTrace): | 
 |  | 
 | 2018-06-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         ASSERTION FAILED: length > butterfly->vectorLength() in JSObject::ensureLengthSlow(). | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187060 | 
 |         <rdar://problem/41452767> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         JSObject::ensureLengthSlow() may be called only because it needs to do a copy on | 
 |         write conversion.  Hence, we can return early after the conversion if the vector | 
 |         length is already sufficient to cover the requested length. | 
 |  | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::ensureLengthSlow): | 
 |  | 
 | 2018-06-26  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r233184. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187059 | 
 |  | 
 |         "It regressed JetStream between 5-8%" (Requested by saamyjoon | 
 |         on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "JSImmutableButterfly can't be allocated from a subspace with | 
 |         HeapCell::Kind::Auxiliary" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186878 | 
 |         https://trac.webkit.org/changeset/233184 | 
 |  | 
 | 2018-06-26  Carlos Alberto Lopez Perez  <clopez@igalia.com> | 
 |  | 
 |         REGRESSION(r233065): Build broken with clang-3.8 and libstdc++-5 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187051 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Revert r233065 changes over UnlinkedCodeBlock.h to allow | 
 |         clang-3.8 to be able to compile this back (with libstdc++5) | 
 |  | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::decompressArrayAllocationProfile): | 
 |  | 
 | 2018-06-26  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         Fix testapi build when DFG_JIT is disabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187038 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         r233158 added a new API and tests for configuring the number of JIT threads, but | 
 |         the API is only available when DFG_JIT is enabled and so should the tests. | 
 |  | 
 |         * API/tests/testapi.mm: | 
 |         (runJITThreadLimitTests): | 
 |  | 
 | 2018-06-25  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JSImmutableButterfly can't be allocated from a subspace with HeapCell::Kind::Auxiliary | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186878 | 
 |         <rdar://problem/40568659> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch fixes a bug in our JSImmutableButterfly implementation uncovered by | 
 |         our stress GC bots. Before this patch, JSImmutableButterfly was allocated | 
 |         with HeapCell::Kind::Auxiliary. This is wrong. Things that are JSCells must be | 
 |         allocated from HeapCell::Kind::JSCell. The way this broke on the stress GC | 
 |         bots is that our conservative marking won't do cell marking for things that | 
 |         are Auxiliary. This means that if the stack is the only thing pointing to a | 
 |         JSImmutableButterfly when a GC took place, that JSImmutableButterfly would | 
 |         not be visited. This patch fixes this bug. This patch also extends our conservative | 
 |         marking to understand that there may be interior pointers to things that are HeapCell::Kind::JSCell. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         * heap/HeapUtil.h: | 
 |         (JSC::HeapUtil::findGCObjectPointersForMarking): | 
 |         * runtime/JSImmutableButterfly.h: | 
 |         (JSC::JSImmutableButterfly::subspaceFor): | 
 |  | 
 | 2018-06-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         constructArray() should set m_numValuesInVector to the specified length. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187010 | 
 |         <rdar://problem/41392167> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Its client will fill in the storage vector with some values using initializeIndex() | 
 |         and expects m_numValuesInVector to be set to the length i.e. the number of values | 
 |         to be initialized. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::constructArray): | 
 |  | 
 | 2018-06-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add missing exception check in RegExpObjectInlines.h's collectMatches. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=187006 | 
 |         <rdar://problem/41418412> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * runtime/RegExpObjectInlines.h: | 
 |         (JSC::collectMatches): | 
 |  | 
 | 2018-06-25  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         Add API for configuring the number of threads used by DFG and FTL | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186859 | 
 |         <rdar://problem/41093519> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Add new private APIs for limiting the number of threads to be used by | 
 |         the DFG and FTL compilers. It was already possible to configure the | 
 |         limit through JSC Options, but now it can be changed at runtime, even | 
 |         in the case when the VM is already running. | 
 |  | 
 |         Add a test for both cases: when trying to configure the limit before | 
 |         and after the Worklist has been created, but in order to simulate the | 
 |         first scenario, we must guarantee that the test runs at the very | 
 |         beginning, so I also added a check for that. | 
 |  | 
 |         * API/JSVirtualMachine.mm: | 
 |         (+[JSVirtualMachine setNumberOfDFGCompilerThreads:]): | 
 |         (+[JSVirtualMachine setNumberOfFTLCompilerThreads:]): | 
 |         * API/JSVirtualMachinePrivate.h: | 
 |         * API/tests/testapi.mm: | 
 |         (runJITThreadLimitTests): | 
 |         (testObjectiveCAPIMain): | 
 |         * dfg/DFGWorklist.cpp: | 
 |         (JSC::DFG::Worklist::finishCreation): | 
 |         (JSC::DFG::Worklist::createNewThread): | 
 |         (JSC::DFG::Worklist::setNumberOfThreads): | 
 |         * dfg/DFGWorklist.h: | 
 |  | 
 | 2018-06-25  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove unnecessary PLATFORM guards | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186995 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * assembler/AssemblerCommon.h: | 
 |         (JSC::isIOS): | 
 |         Add constexpr. | 
 |  | 
 |         * inspector/JSGlobalObjectInspectorController.cpp: | 
 |         (Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace): | 
 |         StackFrame works in all the platforms. If StackFrame::demangle failed, | 
 |         it just returns std::nullopt. And it is correctly handled in this code. | 
 |  | 
 | 2018-06-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add more debugging features to $vm. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186947 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Adding the following features: | 
 |  | 
 |             // We now have println in addition to print. | 
 |             // println automatically adds a '\n' at the end. | 
 |             $vm.println("Hello"); | 
 |  | 
 |             // We can now capture some info about a stack frame. | 
 |             var currentFrame = $vm.callFrame(); // Same as $vm.callFrame(0); | 
 |             var callerCallerFrame = $vm.callFrame(2); | 
 |  | 
 |             // We can inspect the following values associated with the frame: | 
 |             if (currentFrame.valid) { | 
 |                 $vm.println("name is ", currentFrame.name)); | 
 |  | 
 |                 // Note: For a WASM frame, all of these will be undefined. | 
 |                 $vm.println("callee is ", $vm.value(currentFrame.callee)); | 
 |                 $vm.println("codeBlock is ", currentFrame.codeBlock); | 
 |                 $vm.println("unlinkedCodeBlock is ", currentFrame.unlinkedCodeBlock); | 
 |                 $vm.println("executable is ", currentFrame.executable); | 
 |             } | 
 |  | 
 |             // Note that callee is a JSObject.  I printed its $vm.value() because I wanted | 
 |             // to dataLog its JSValue instead of its toString() result. | 
 |  | 
 |             // Note that $vm.println() (and $vm.print()) can now print internal JSCells | 
 |             // (and Symbols) as JSValue dumps. It won't just fail on trying to do a | 
 |             // toString on a non-object. | 
 |  | 
 |             // Does what it says about enabling/disabling debugger mode. | 
 |             $vm.enableDebuggerModeWhenIdle(); | 
 |             $vm.disableDebuggerModeWhenIdle(); | 
 |  | 
 |         * tools/JSDollarVM.cpp: | 
 |         (WTF::JSDollarVMCallFrame::JSDollarVMCallFrame): | 
 |         (WTF::JSDollarVMCallFrame::createStructure): | 
 |         (WTF::JSDollarVMCallFrame::create): | 
 |         (WTF::JSDollarVMCallFrame::finishCreation): | 
 |         (WTF::JSDollarVMCallFrame::addProperty): | 
 |         (JSC::functionCallFrame): | 
 |         (JSC::functionCodeBlockForFrame): | 
 |         (JSC::codeBlockFromArg): | 
 |         (JSC::doPrintln): | 
 |         (JSC::functionPrint): | 
 |         (JSC::functionPrintln): | 
 |         (JSC::changeDebuggerModeWhenIdle): | 
 |         (JSC::functionEnableDebuggerModeWhenIdle): | 
 |         (JSC::functionDisableDebuggerModeWhenIdle): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-06-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         We need to have a getDirectConcurrently for use in the compilers | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186954 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         It used to be that the propertyStorage of an object never shrunk | 
 |         so if you called getDirect with some offset it would never be an | 
 |         OOB read. However, this property storage can shrink when calling | 
 |         flattenDictionaryStructure. Fortunately, flattenDictionaryStructure | 
 |         holds the Structure's ConcurrentJSLock while shrinking. This patch, | 
 |         adds a getDirectConcurrently that will safely try to load from the | 
 |         butterfly. | 
 |  | 
 |         * bytecode/ObjectPropertyConditionSet.cpp: | 
 |         * bytecode/PropertyCondition.cpp: | 
 |         (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const): | 
 |         (JSC::PropertyCondition::attemptToMakeEquivalenceWithoutBarrier const): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::tryGetConstantProperty): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::getDirectConcurrently const): | 
 |  | 
 | 2018-06-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Use Ref<> for the result type of non-failing factory functions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186920 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         * dfg/DFGWorklist.cpp: | 
 |         (JSC::DFG::Worklist::ThreadBody::ThreadBody): | 
 |         (JSC::DFG::Worklist::finishCreation): | 
 |         * dfg/DFGWorklist.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Thread::Thread): | 
 |         * heap/Heap.h: | 
 |         * jit/JITWorklist.cpp: | 
 |         (JSC::JITWorklist::Thread::Thread): | 
 |         * jit/JITWorklist.h: | 
 |         * runtime/VMTraps.cpp: | 
 |         * runtime/VMTraps.h: | 
 |         * wasm/WasmWorklist.cpp: | 
 |         * wasm/WasmWorklist.h: | 
 |  | 
 | 2018-06-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Add user-defined literal for ASCIILiteral | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186839 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         * API/JSCallbackObjectFunctions.h: | 
 |         (JSC::JSCallbackObject<Parent>::staticFunctionGetter): | 
 |         (JSC::JSCallbackObject<Parent>::callbackGetter): | 
 |         * API/JSObjectRef.cpp: | 
 |         (JSObjectMakeFunctionWithCallback): | 
 |         * API/JSTypedArray.cpp: | 
 |         (JSObjectGetArrayBufferBytesPtr): | 
 |         * API/JSValue.mm: | 
 |         (valueToArray): | 
 |         (valueToDictionary): | 
 |         * API/ObjCCallbackFunction.mm: | 
 |         (JSC::objCCallbackFunctionCallAsFunction): | 
 |         (JSC::objCCallbackFunctionCallAsConstructor): | 
 |         (JSC::ObjCCallbackFunctionImpl::call): | 
 |         * API/glib/JSCCallbackFunction.cpp: | 
 |         (JSC::JSCCallbackFunction::call): | 
 |         (JSC::JSCCallbackFunction::construct): | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jscContextJSValueToGValue): | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsc_value_object_define_property_accessor): | 
 |         (jscValueFunctionCreate): | 
 |         * builtins/BuiltinUtils.h: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::nameForRegister): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitEnumeration): | 
 |         (JSC::BytecodeGenerator::emitIteratorNext): | 
 |         (JSC::BytecodeGenerator::emitIteratorClose): | 
 |         (JSC::BytecodeGenerator::emitDelegateYield): | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::FunctionCallValueNode::emitBytecode): | 
 |         (JSC::PostfixNode::emitBytecode): | 
 |         (JSC::PrefixNode::emitBytecode): | 
 |         (JSC::AssignErrorNode::emitBytecode): | 
 |         (JSC::ForInNode::emitBytecode): | 
 |         (JSC::ForOfNode::emitBytecode): | 
 |         (JSC::ClassExprNode::emitBytecode): | 
 |         (JSC::ObjectPatternNode::bindValue const): | 
 |         * dfg/DFGDriver.cpp: | 
 |         (JSC::DFG::compileImpl): | 
 |         * dfg/DFGOperations.cpp: | 
 |         (JSC::DFG::newTypedArrayWithSize): | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         * inspector/ConsoleMessage.cpp: | 
 |         (Inspector::ConsoleMessage::addToFrontend): | 
 |         (Inspector::ConsoleMessage::clear): | 
 |         * inspector/ContentSearchUtilities.cpp: | 
 |         (Inspector::ContentSearchUtilities::findStylesheetSourceMapURL): | 
 |         * inspector/InjectedScript.cpp: | 
 |         (Inspector::InjectedScript::InjectedScript): | 
 |         (Inspector::InjectedScript::evaluate): | 
 |         (Inspector::InjectedScript::callFunctionOn): | 
 |         (Inspector::InjectedScript::evaluateOnCallFrame): | 
 |         (Inspector::InjectedScript::getFunctionDetails): | 
 |         (Inspector::InjectedScript::functionDetails): | 
 |         (Inspector::InjectedScript::getPreview): | 
 |         (Inspector::InjectedScript::getProperties): | 
 |         (Inspector::InjectedScript::getDisplayableProperties): | 
 |         (Inspector::InjectedScript::getInternalProperties): | 
 |         (Inspector::InjectedScript::getCollectionEntries): | 
 |         (Inspector::InjectedScript::saveResult): | 
 |         (Inspector::InjectedScript::wrapCallFrames const): | 
 |         (Inspector::InjectedScript::wrapObject const): | 
 |         (Inspector::InjectedScript::wrapJSONString const): | 
 |         (Inspector::InjectedScript::wrapTable const): | 
 |         (Inspector::InjectedScript::previewValue const): | 
 |         (Inspector::InjectedScript::setExceptionValue): | 
 |         (Inspector::InjectedScript::clearExceptionValue): | 
 |         (Inspector::InjectedScript::findObjectById const): | 
 |         (Inspector::InjectedScript::inspectObject): | 
 |         (Inspector::InjectedScript::releaseObject): | 
 |         (Inspector::InjectedScript::releaseObjectGroup): | 
 |         * inspector/InjectedScriptBase.cpp: | 
 |         (Inspector::InjectedScriptBase::makeEvalCall): | 
 |         * inspector/InjectedScriptManager.cpp: | 
 |         (Inspector::InjectedScriptManager::injectedScriptForObjectId): | 
 |         * inspector/InjectedScriptModule.cpp: | 
 |         (Inspector::InjectedScriptModule::ensureInjected): | 
 |         * inspector/InspectorBackendDispatcher.cpp: | 
 |         (Inspector::BackendDispatcher::dispatch): | 
 |         (Inspector::BackendDispatcher::sendResponse): | 
 |         (Inspector::BackendDispatcher::sendPendingErrors): | 
 |         * inspector/JSGlobalObjectConsoleClient.cpp: | 
 |         (Inspector::JSGlobalObjectConsoleClient::profile): | 
 |         (Inspector::JSGlobalObjectConsoleClient::profileEnd): | 
 |         (Inspector::JSGlobalObjectConsoleClient::timeStamp): | 
 |         * inspector/JSGlobalObjectInspectorController.cpp: | 
 |         (Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace): | 
 |         * inspector/JSInjectedScriptHost.cpp: | 
 |         (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension): | 
 |         (Inspector::JSInjectedScriptHost::subtype): | 
 |         (Inspector::JSInjectedScriptHost::getInternalProperties): | 
 |         * inspector/JSJavaScriptCallFrame.cpp: | 
 |         (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension): | 
 |         (Inspector::JSJavaScriptCallFrame::type const): | 
 |         * inspector/ScriptArguments.cpp: | 
 |         (Inspector::ScriptArguments::getFirstArgumentAsString): | 
 |         * inspector/ScriptCallStackFactory.cpp: | 
 |         (Inspector::extractSourceInformationFromException): | 
 |         * inspector/agents/InspectorAgent.cpp: | 
 |         (Inspector::InspectorAgent::InspectorAgent): | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: | 
 |         (Inspector::InspectorConsoleAgent::InspectorConsoleAgent): | 
 |         (Inspector::InspectorConsoleAgent::clearMessages): | 
 |         (Inspector::InspectorConsoleAgent::count): | 
 |         (Inspector::InspectorConsoleAgent::setLoggingChannelLevel): | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: | 
 |         (Inspector::InspectorDebuggerAgent::InspectorDebuggerAgent): | 
 |         (Inspector::InspectorDebuggerAgent::setAsyncStackTraceDepth): | 
 |         (Inspector::buildObjectForBreakpointCookie): | 
 |         (Inspector::InspectorDebuggerAgent::breakpointActionsFromProtocol): | 
 |         (Inspector::parseLocation): | 
 |         (Inspector::InspectorDebuggerAgent::setBreakpointByUrl): | 
 |         (Inspector::InspectorDebuggerAgent::setBreakpoint): | 
 |         (Inspector::InspectorDebuggerAgent::continueToLocation): | 
 |         (Inspector::InspectorDebuggerAgent::searchInContent): | 
 |         (Inspector::InspectorDebuggerAgent::getScriptSource): | 
 |         (Inspector::InspectorDebuggerAgent::getFunctionDetails): | 
 |         (Inspector::InspectorDebuggerAgent::resume): | 
 |         (Inspector::InspectorDebuggerAgent::setPauseOnExceptions): | 
 |         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame): | 
 |         (Inspector::InspectorDebuggerAgent::didParseSource): | 
 |         (Inspector::InspectorDebuggerAgent::assertPaused): | 
 |         * inspector/agents/InspectorHeapAgent.cpp: | 
 |         (Inspector::InspectorHeapAgent::InspectorHeapAgent): | 
 |         (Inspector::InspectorHeapAgent::nodeForHeapObjectIdentifier): | 
 |         (Inspector::InspectorHeapAgent::getPreview): | 
 |         (Inspector::InspectorHeapAgent::getRemoteObject): | 
 |         * inspector/agents/InspectorRuntimeAgent.cpp: | 
 |         (Inspector::InspectorRuntimeAgent::InspectorRuntimeAgent): | 
 |         (Inspector::InspectorRuntimeAgent::callFunctionOn): | 
 |         (Inspector::InspectorRuntimeAgent::getPreview): | 
 |         (Inspector::InspectorRuntimeAgent::getProperties): | 
 |         (Inspector::InspectorRuntimeAgent::getDisplayableProperties): | 
 |         (Inspector::InspectorRuntimeAgent::getCollectionEntries): | 
 |         (Inspector::InspectorRuntimeAgent::saveResult): | 
 |         (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets): | 
 |         (Inspector::InspectorRuntimeAgent::getBasicBlocks): | 
 |         * inspector/agents/InspectorScriptProfilerAgent.cpp: | 
 |         (Inspector::InspectorScriptProfilerAgent::InspectorScriptProfilerAgent): | 
 |         * inspector/agents/JSGlobalObjectDebuggerAgent.cpp: | 
 |         (Inspector::JSGlobalObjectDebuggerAgent::injectedScriptForEval): | 
 |         * inspector/agents/JSGlobalObjectRuntimeAgent.cpp: | 
 |         (Inspector::JSGlobalObjectRuntimeAgent::injectedScriptForEval): | 
 |         * inspector/scripts/codegen/cpp_generator_templates.py: | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py: | 
 |         (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain): | 
 |         (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command): | 
 |         * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py: | 
 |         (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_event): | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_header.py: | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py: | 
 |         (CppProtocolTypesImplementationGenerator): | 
 |         * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py: | 
 |         (ObjCBackendDispatcherImplementationGenerator._generate_success_block_for_command): | 
 |         (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command): | 
 |         * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py: | 
 |         (ObjCFrontendDispatcherImplementationGenerator._generate_event): | 
 |         (ObjCFrontendDispatcherImplementationGenerator._generate_event_out_parameters): | 
 |         * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py: | 
 |         (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_objc_to_protocol_string): | 
 |         * inspector/scripts/codegen/objc_generator_templates.py: | 
 |         * 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/generic/expected/worker-supported-domains.json-result: | 
 |         * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result: | 
 |         * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result: | 
 |         * interpreter/CallFrame.cpp: | 
 |         (JSC::CallFrame::friendlyFunctionName): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::execute): | 
 |         * interpreter/StackVisitor.cpp: | 
 |         (JSC::StackVisitor::Frame::functionName const): | 
 |         (JSC::StackVisitor::Frame::sourceURL const): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::doMainThreadPreparationBeforeCompile): | 
 |         * jit/JITOperations.cpp: | 
 |         * jsc.cpp: | 
 |         (resolvePath): | 
 |         (GlobalObject::moduleLoaderImportModule): | 
 |         (GlobalObject::moduleLoaderResolve): | 
 |         (functionDescribeArray): | 
 |         (functionRun): | 
 |         (functionLoad): | 
 |         (functionCheckSyntax): | 
 |         (functionDollarEvalScript): | 
 |         (functionDollarAgentStart): | 
 |         (functionDollarAgentReceiveBroadcast): | 
 |         (functionDollarAgentBroadcast): | 
 |         (functionTransferArrayBuffer): | 
 |         (functionLoadModule): | 
 |         (functionSamplingProfilerStackTraces): | 
 |         (functionAsyncTestStart): | 
 |         (functionWebAssemblyMemoryMode): | 
 |         (runWithOptions): | 
 |         * parser/Lexer.cpp: | 
 |         (JSC::Lexer<T>::invalidCharacterMessage const): | 
 |         (JSC::Lexer<T>::parseString): | 
 |         (JSC::Lexer<T>::parseComplexEscape): | 
 |         (JSC::Lexer<T>::parseStringSlowCase): | 
 |         (JSC::Lexer<T>::parseTemplateLiteral): | 
 |         (JSC::Lexer<T>::lex): | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseInner): | 
 |         * parser/Parser.h: | 
 |         (JSC::Parser::setErrorMessage): | 
 |         * runtime/AbstractModuleRecord.cpp: | 
 |         (JSC::AbstractModuleRecord::finishCreation): | 
 |         * runtime/ArrayBuffer.cpp: | 
 |         (JSC::errorMesasgeForTransfer): | 
 |         * runtime/ArrayBufferSharingMode.h: | 
 |         (JSC::arrayBufferSharingModeName): | 
 |         * runtime/ArrayConstructor.cpp: | 
 |         (JSC::constructArrayWithSizeQuirk): | 
 |         (JSC::isArraySlowInline): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::setLength): | 
 |         (JSC::shift): | 
 |         (JSC::unshift): | 
 |         (JSC::arrayProtoFuncPop): | 
 |         (JSC::arrayProtoFuncReverse): | 
 |         (JSC::arrayProtoFuncUnShift): | 
 |         * runtime/AtomicsObject.cpp: | 
 |         (JSC::atomicsFuncWait): | 
 |         (JSC::atomicsFuncWake): | 
 |         * runtime/BigIntConstructor.cpp: | 
 |         (JSC::BigIntConstructor::finishCreation): | 
 |         (JSC::toBigInt): | 
 |         (JSC::callBigIntConstructor): | 
 |         * runtime/BigIntObject.cpp: | 
 |         (JSC::BigIntObject::toStringName): | 
 |         * runtime/BigIntPrototype.cpp: | 
 |         (JSC::bigIntProtoFuncToString): | 
 |         (JSC::bigIntProtoFuncValueOf): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/ConsoleClient.cpp: | 
 |         (JSC::ConsoleClient::printConsoleMessageWithArguments): | 
 |         * runtime/ConsoleObject.cpp: | 
 |         (JSC::valueOrDefaultLabelString): | 
 |         (JSC::consoleProtoFuncTime): | 
 |         (JSC::consoleProtoFuncTimeEnd): | 
 |         * runtime/DatePrototype.cpp: | 
 |         (JSC::formatLocaleDate): | 
 |         (JSC::formateDateInstance): | 
 |         (JSC::DatePrototype::finishCreation): | 
 |         (JSC::dateProtoFuncToISOString): | 
 |         (JSC::dateProtoFuncToJSON): | 
 |         * runtime/Error.cpp: | 
 |         (JSC::createNotEnoughArgumentsError): | 
 |         (JSC::throwSyntaxError): | 
 |         (JSC::createTypeError): | 
 |         (JSC::createOutOfMemoryError): | 
 |         * runtime/Error.h: | 
 |         (JSC::throwVMError): | 
 |         * runtime/ErrorConstructor.cpp: | 
 |         (JSC::ErrorConstructor::finishCreation): | 
 |         * runtime/ErrorInstance.cpp: | 
 |         (JSC::ErrorInstance::sanitizedToString): | 
 |         * runtime/ErrorPrototype.cpp: | 
 |         (JSC::ErrorPrototype::finishCreation): | 
 |         (JSC::errorProtoFuncToString): | 
 |         * runtime/ExceptionFuzz.cpp: | 
 |         (JSC::doExceptionFuzzing): | 
 |         * runtime/ExceptionHelpers.cpp: | 
 |         (JSC::TerminatedExecutionError::defaultValue): | 
 |         (JSC::createStackOverflowError): | 
 |         (JSC::createNotAConstructorError): | 
 |         (JSC::createNotAFunctionError): | 
 |         (JSC::createNotAnObjectError): | 
 |         * runtime/GetterSetter.cpp: | 
 |         (JSC::callSetter): | 
 |         * runtime/IntlCollator.cpp: | 
 |         (JSC::sortLocaleData): | 
 |         (JSC::searchLocaleData): | 
 |         (JSC::IntlCollator::initializeCollator): | 
 |         (JSC::IntlCollator::compareStrings): | 
 |         (JSC::IntlCollator::usageString): | 
 |         (JSC::IntlCollator::sensitivityString): | 
 |         (JSC::IntlCollator::caseFirstString): | 
 |         (JSC::IntlCollator::resolvedOptions): | 
 |         * runtime/IntlCollator.h: | 
 |         * runtime/IntlCollatorConstructor.cpp: | 
 |         (JSC::IntlCollatorConstructor::finishCreation): | 
 |         * runtime/IntlCollatorPrototype.cpp: | 
 |         (JSC::IntlCollatorPrototypeGetterCompare): | 
 |         (JSC::IntlCollatorPrototypeFuncResolvedOptions): | 
 |         * runtime/IntlDateTimeFormat.cpp: | 
 |         (JSC::defaultTimeZone): | 
 |         (JSC::canonicalizeTimeZoneName): | 
 |         (JSC::IntlDTFInternal::localeData): | 
 |         (JSC::IntlDTFInternal::toDateTimeOptionsAnyDate): | 
 |         (JSC::IntlDateTimeFormat::initializeDateTimeFormat): | 
 |         (JSC::IntlDateTimeFormat::weekdayString): | 
 |         (JSC::IntlDateTimeFormat::eraString): | 
 |         (JSC::IntlDateTimeFormat::yearString): | 
 |         (JSC::IntlDateTimeFormat::monthString): | 
 |         (JSC::IntlDateTimeFormat::dayString): | 
 |         (JSC::IntlDateTimeFormat::hourString): | 
 |         (JSC::IntlDateTimeFormat::minuteString): | 
 |         (JSC::IntlDateTimeFormat::secondString): | 
 |         (JSC::IntlDateTimeFormat::timeZoneNameString): | 
 |         (JSC::IntlDateTimeFormat::resolvedOptions): | 
 |         (JSC::IntlDateTimeFormat::format): | 
 |         (JSC::IntlDateTimeFormat::partTypeString): | 
 |         (JSC::IntlDateTimeFormat::formatToParts): | 
 |         * runtime/IntlDateTimeFormat.h: | 
 |         * runtime/IntlDateTimeFormatConstructor.cpp: | 
 |         (JSC::IntlDateTimeFormatConstructor::finishCreation): | 
 |         * runtime/IntlDateTimeFormatPrototype.cpp: | 
 |         (JSC::IntlDateTimeFormatPrototypeGetterFormat): | 
 |         (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts): | 
 |         (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions): | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |         (JSC::IntlNumberFormat::formatNumber): | 
 |         (JSC::IntlNumberFormat::styleString): | 
 |         (JSC::IntlNumberFormat::currencyDisplayString): | 
 |         (JSC::IntlNumberFormat::resolvedOptions): | 
 |         (JSC::IntlNumberFormat::partTypeString): | 
 |         (JSC::IntlNumberFormat::formatToParts): | 
 |         * runtime/IntlNumberFormat.h: | 
 |         * runtime/IntlNumberFormatConstructor.cpp: | 
 |         (JSC::IntlNumberFormatConstructor::finishCreation): | 
 |         * runtime/IntlNumberFormatPrototype.cpp: | 
 |         (JSC::IntlNumberFormatPrototypeGetterFormat): | 
 |         (JSC::IntlNumberFormatPrototypeFuncFormatToParts): | 
 |         (JSC::IntlNumberFormatPrototypeFuncResolvedOptions): | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::grandfatheredLangTag): | 
 |         (JSC::canonicalizeLocaleList): | 
 |         (JSC::resolveLocale): | 
 |         (JSC::supportedLocales): | 
 |         * runtime/IntlPluralRules.cpp: | 
 |         (JSC::IntlPluralRules::initializePluralRules): | 
 |         (JSC::IntlPluralRules::resolvedOptions): | 
 |         (JSC::IntlPluralRules::select): | 
 |         * runtime/IntlPluralRulesConstructor.cpp: | 
 |         (JSC::IntlPluralRulesConstructor::finishCreation): | 
 |         * runtime/IntlPluralRulesPrototype.cpp: | 
 |         (JSC::IntlPluralRulesPrototypeFuncSelect): | 
 |         (JSC::IntlPluralRulesPrototypeFuncResolvedOptions): | 
 |         * runtime/IteratorOperations.cpp: | 
 |         (JSC::iteratorNext): | 
 |         (JSC::iteratorClose): | 
 |         (JSC::hasIteratorMethod): | 
 |         (JSC::iteratorMethod): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::defineOwnProperty): | 
 |         (JSC::JSArray::put): | 
 |         (JSC::JSArray::setLengthWithArrayStorage): | 
 |         (JSC::JSArray::appendMemcpy): | 
 |         (JSC::JSArray::pop): | 
 |         * runtime/JSArray.h: | 
 |         * runtime/JSArrayBufferConstructor.cpp: | 
 |         (JSC::JSArrayBufferConstructor::finishCreation): | 
 |         * runtime/JSArrayBufferPrototype.cpp: | 
 |         (JSC::arrayBufferProtoFuncSlice): | 
 |         (JSC::arrayBufferProtoGetterFuncByteLength): | 
 |         (JSC::sharedArrayBufferProtoGetterFuncByteLength): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::toStringName): | 
 |         * runtime/JSArrayInlines.h: | 
 |         (JSC::JSArray::pushInline): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::divide): | 
 |         (JSC::JSBigInt::remainder): | 
 |         (JSC::JSBigInt::toNumber const): | 
 |         * runtime/JSCJSValue.cpp: | 
 |         (JSC::JSValue::putToPrimitive): | 
 |         (JSC::JSValue::putToPrimitiveByIndex): | 
 |         (JSC::JSValue::toStringSlowCase const): | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::toPreferredPrimitiveType): | 
 |         * runtime/JSDataView.cpp: | 
 |         (JSC::JSDataView::create): | 
 |         (JSC::JSDataView::put): | 
 |         (JSC::JSDataView::defineOwnProperty): | 
 |         * runtime/JSDataViewPrototype.cpp: | 
 |         (JSC::getData): | 
 |         (JSC::setData): | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::callerGetter): | 
 |         (JSC::JSFunction::put): | 
 |         (JSC::JSFunction::defineOwnProperty): | 
 |         * runtime/JSGenericTypedArrayView.h: | 
 |         * runtime/JSGenericTypedArrayViewConstructorInlines.h: | 
 |         (JSC::constructGenericTypedArrayViewWithArguments): | 
 |         (JSC::constructGenericTypedArrayView): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty): | 
 |         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h: | 
 |         (JSC::speciesConstruct): | 
 |         (JSC::genericTypedArrayViewProtoFuncSet): | 
 |         (JSC::genericTypedArrayViewProtoFuncIndexOf): | 
 |         (JSC::genericTypedArrayViewProtoFuncLastIndexOf): | 
 |         (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSGlobalObjectDebuggable.cpp: | 
 |         (JSC::JSGlobalObjectDebuggable::name const): | 
 |         * runtime/JSGlobalObjectFunctions.cpp: | 
 |         (JSC::encode): | 
 |         (JSC::decode): | 
 |         (JSC::globalFuncProtoSetter): | 
 |         * runtime/JSGlobalObjectFunctions.h: | 
 |         * runtime/JSMap.cpp: | 
 |         (JSC::JSMap::toStringName): | 
 |         * runtime/JSModuleEnvironment.cpp: | 
 |         (JSC::JSModuleEnvironment::put): | 
 |         * runtime/JSModuleNamespaceObject.cpp: | 
 |         (JSC::JSModuleNamespaceObject::put): | 
 |         (JSC::JSModuleNamespaceObject::putByIndex): | 
 |         (JSC::JSModuleNamespaceObject::defineOwnProperty): | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::Stringifier::appendStringifiedValue): | 
 |         (JSC::JSONProtoFuncParse): | 
 |         (JSC::JSONProtoFuncStringify): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::getClassPropertyNames): | 
 |         (JSC::JSObject::calculatedClassName): | 
 |         (JSC::ordinarySetSlow): | 
 |         (JSC::JSObject::putInlineSlow): | 
 |         (JSC::JSObject::setPrototypeWithCycleCheck): | 
 |         (JSC::callToPrimitiveFunction): | 
 |         (JSC::JSObject::ordinaryToPrimitive const): | 
 |         (JSC::JSObject::defaultHasInstance): | 
 |         (JSC::JSObject::defineOwnIndexedProperty): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage): | 
 |         (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage): | 
 |         (JSC::validateAndApplyPropertyDescriptor): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putInlineForJSObject): | 
 |         * runtime/JSPromiseConstructor.cpp: | 
 |         (JSC::JSPromiseConstructor::finishCreation): | 
 |         * runtime/JSSet.cpp: | 
 |         (JSC::JSSet::toStringName): | 
 |         * runtime/JSSymbolTableObject.h: | 
 |         (JSC::symbolTablePut): | 
 |         * runtime/JSTypedArrayViewConstructor.cpp: | 
 |         (JSC::constructTypedArrayView): | 
 |         * runtime/JSTypedArrayViewPrototype.cpp: | 
 |         (JSC::typedArrayViewPrivateFuncLength): | 
 |         (JSC::typedArrayViewProtoFuncSet): | 
 |         (JSC::typedArrayViewProtoFuncCopyWithin): | 
 |         (JSC::typedArrayViewProtoFuncLastIndexOf): | 
 |         (JSC::typedArrayViewProtoFuncIndexOf): | 
 |         (JSC::typedArrayViewProtoFuncJoin): | 
 |         (JSC::typedArrayViewProtoGetterFuncBuffer): | 
 |         (JSC::typedArrayViewProtoGetterFuncLength): | 
 |         (JSC::typedArrayViewProtoGetterFuncByteLength): | 
 |         (JSC::typedArrayViewProtoGetterFuncByteOffset): | 
 |         (JSC::typedArrayViewProtoFuncReverse): | 
 |         (JSC::typedArrayViewPrivateFuncSubarrayCreate): | 
 |         (JSC::typedArrayViewProtoFuncSlice): | 
 |         (JSC::JSTypedArrayViewPrototype::finishCreation): | 
 |         * runtime/JSWeakMap.cpp: | 
 |         (JSC::JSWeakMap::toStringName): | 
 |         * runtime/JSWeakSet.cpp: | 
 |         (JSC::JSWeakSet::toStringName): | 
 |         * runtime/LiteralParser.cpp: | 
 |         (JSC::LiteralParser<CharType>::Lexer::lex): | 
 |         (JSC::LiteralParser<CharType>::Lexer::lexStringSlow): | 
 |         (JSC::LiteralParser<CharType>::Lexer::lexNumber): | 
 |         (JSC::LiteralParser<CharType>::parse): | 
 |         * runtime/LiteralParser.h: | 
 |         (JSC::LiteralParser::getErrorMessage): | 
 |         * runtime/Lookup.cpp: | 
 |         (JSC::reifyStaticAccessor): | 
 |         * runtime/Lookup.h: | 
 |         (JSC::putEntry): | 
 |         * runtime/MapPrototype.cpp: | 
 |         (JSC::getMap): | 
 |         * runtime/NullSetterFunction.cpp: | 
 |         (JSC::NullSetterFunctionInternal::callReturnUndefined): | 
 |         * runtime/NumberPrototype.cpp: | 
 |         (JSC::numberProtoFuncToExponential): | 
 |         (JSC::numberProtoFuncToFixed): | 
 |         (JSC::numberProtoFuncToPrecision): | 
 |         (JSC::extractToStringRadixArgument): | 
 |         * runtime/ObjectConstructor.cpp: | 
 |         (JSC::objectConstructorSetPrototypeOf): | 
 |         (JSC::objectConstructorAssign): | 
 |         (JSC::objectConstructorValues): | 
 |         (JSC::toPropertyDescriptor): | 
 |         (JSC::objectConstructorDefineProperty): | 
 |         (JSC::objectConstructorDefineProperties): | 
 |         (JSC::objectConstructorCreate): | 
 |         (JSC::objectConstructorSeal): | 
 |         (JSC::objectConstructorFreeze): | 
 |         * runtime/ObjectPrototype.cpp: | 
 |         (JSC::objectProtoFuncDefineGetter): | 
 |         (JSC::objectProtoFuncDefineSetter): | 
 |         * runtime/Operations.cpp: | 
 |         (JSC::jsAddSlowCase): | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsSub): | 
 |         (JSC::jsMul): | 
 |         * runtime/ProgramExecutable.cpp: | 
 |         (JSC::ProgramExecutable::initializeGlobalProperties): | 
 |         * runtime/ProxyConstructor.cpp: | 
 |         (JSC::makeRevocableProxy): | 
 |         (JSC::proxyRevocableConstructorThrowError): | 
 |         (JSC::ProxyConstructor::finishCreation): | 
 |         (JSC::constructProxyObject): | 
 |         * runtime/ProxyObject.cpp: | 
 |         (JSC::ProxyObject::toStringName): | 
 |         (JSC::ProxyObject::finishCreation): | 
 |         (JSC::performProxyGet): | 
 |         (JSC::ProxyObject::performInternalMethodGetOwnProperty): | 
 |         (JSC::ProxyObject::performHasProperty): | 
 |         (JSC::ProxyObject::performPut): | 
 |         (JSC::performProxyCall): | 
 |         (JSC::performProxyConstruct): | 
 |         (JSC::ProxyObject::performDelete): | 
 |         (JSC::ProxyObject::performPreventExtensions): | 
 |         (JSC::ProxyObject::performIsExtensible): | 
 |         (JSC::ProxyObject::performDefineOwnProperty): | 
 |         (JSC::ProxyObject::performGetOwnPropertyNames): | 
 |         (JSC::ProxyObject::performSetPrototype): | 
 |         (JSC::ProxyObject::performGetPrototype): | 
 |         * runtime/ReflectObject.cpp: | 
 |         (JSC::reflectObjectConstruct): | 
 |         (JSC::reflectObjectDefineProperty): | 
 |         (JSC::reflectObjectGet): | 
 |         (JSC::reflectObjectGetOwnPropertyDescriptor): | 
 |         (JSC::reflectObjectGetPrototypeOf): | 
 |         (JSC::reflectObjectIsExtensible): | 
 |         (JSC::reflectObjectOwnKeys): | 
 |         (JSC::reflectObjectPreventExtensions): | 
 |         (JSC::reflectObjectSet): | 
 |         (JSC::reflectObjectSetPrototypeOf): | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::RegExpConstructor::finishCreation): | 
 |         (JSC::toFlags): | 
 |         * runtime/RegExpObject.cpp: | 
 |         (JSC::RegExpObject::defineOwnProperty): | 
 |         * runtime/RegExpObject.h: | 
 |         * runtime/RegExpPrototype.cpp: | 
 |         (JSC::regExpProtoFuncCompile): | 
 |         (JSC::regExpProtoGetterGlobal): | 
 |         (JSC::regExpProtoGetterIgnoreCase): | 
 |         (JSC::regExpProtoGetterMultiline): | 
 |         (JSC::regExpProtoGetterDotAll): | 
 |         (JSC::regExpProtoGetterSticky): | 
 |         (JSC::regExpProtoGetterUnicode): | 
 |         (JSC::regExpProtoGetterFlags): | 
 |         (JSC::regExpProtoGetterSourceInternal): | 
 |         (JSC::regExpProtoGetterSource): | 
 |         * runtime/RuntimeType.cpp: | 
 |         (JSC::runtimeTypeAsString): | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::StackFrame::displayName): | 
 |         (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests): | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::prepareForExecutionImpl): | 
 |         * runtime/SetPrototype.cpp: | 
 |         (JSC::getSet): | 
 |         * runtime/SparseArrayValueMap.cpp: | 
 |         (JSC::SparseArrayValueMap::putEntry): | 
 |         (JSC::SparseArrayValueMap::putDirect): | 
 |         (JSC::SparseArrayEntry::put): | 
 |         * runtime/StackFrame.cpp: | 
 |         (JSC::StackFrame::sourceURL const): | 
 |         (JSC::StackFrame::functionName const): | 
 |         * runtime/StringConstructor.cpp: | 
 |         (JSC::stringFromCodePoint): | 
 |         * runtime/StringObject.cpp: | 
 |         (JSC::StringObject::put): | 
 |         (JSC::StringObject::putByIndex): | 
 |         * runtime/StringPrototype.cpp: | 
 |         (JSC::StringPrototype::finishCreation): | 
 |         (JSC::toLocaleCase): | 
 |         (JSC::stringProtoFuncNormalize): | 
 |         * runtime/Symbol.cpp: | 
 |         (JSC::Symbol::toNumber const): | 
 |         * runtime/SymbolConstructor.cpp: | 
 |         (JSC::symbolConstructorKeyFor): | 
 |         * runtime/SymbolObject.cpp: | 
 |         (JSC::SymbolObject::toStringName): | 
 |         * runtime/SymbolPrototype.cpp: | 
 |         (JSC::SymbolPrototype::finishCreation): | 
 |         * runtime/TypeSet.cpp: | 
 |         (JSC::TypeSet::dumpTypes const): | 
 |         (JSC::TypeSet::displayName const): | 
 |         (JSC::StructureShape::leastCommonAncestor): | 
 |         * runtime/TypeSet.h: | 
 |         (JSC::StructureShape::setConstructorName): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::dumpTypeProfilerData): | 
 |         * runtime/WeakMapPrototype.cpp: | 
 |         (JSC::getWeakMap): | 
 |         (JSC::protoFuncWeakMapSet): | 
 |         * runtime/WeakSetPrototype.cpp: | 
 |         (JSC::getWeakSet): | 
 |         (JSC::protoFuncWeakSetAdd): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (WTF::DOMJITGetterComplex::DOMJITAttribute::slowCall): | 
 |         (WTF::DOMJITGetterComplex::customGetter): | 
 |         (JSC::functionSetImpureGetterDelegate): | 
 |         (JSC::functionCreateElement): | 
 |         (JSC::functionGetHiddenValue): | 
 |         (JSC::functionSetHiddenValue): | 
 |         (JSC::functionFindTypeForExpression): | 
 |         (JSC::functionReturnTypeFor): | 
 |         (JSC::functionLoadGetterFromGetterSetter): | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::fail const): | 
 |         * wasm/WasmIndexOrName.cpp: | 
 |         (JSC::Wasm::makeString): | 
 |         * wasm/WasmParser.h: | 
 |         (JSC::Wasm::FailureHelper::makeString): | 
 |         (JSC::Wasm::Parser::fail const): | 
 |         * wasm/WasmPlan.cpp: | 
 |         (JSC::Wasm::Plan::tryRemoveContextAndCancelIfLast): | 
 |         * wasm/WasmValidate.cpp: | 
 |         (JSC::Wasm::Validate::fail const): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::toNonWrappingUint32): | 
 |         (JSC::getWasmBufferFromValue): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyMemory.cpp: | 
 |         (JSC::JSWebAssemblyMemory::grow): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         * wasm/js/WebAssemblyCompileErrorConstructor.cpp: | 
 |         (JSC::WebAssemblyCompileErrorConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyInstanceConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyInstance): | 
 |         (JSC::WebAssemblyInstanceConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyInstancePrototype.cpp: | 
 |         (JSC::getInstance): | 
 |         * wasm/js/WebAssemblyLinkErrorConstructor.cpp: | 
 |         (JSC::WebAssemblyLinkErrorConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyMemoryConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyMemory): | 
 |         (JSC::WebAssemblyMemoryConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyMemoryPrototype.cpp: | 
 |         (JSC::getMemory): | 
 |         * wasm/js/WebAssemblyModuleConstructor.cpp: | 
 |         (JSC::webAssemblyModuleCustomSections): | 
 |         (JSC::webAssemblyModuleImports): | 
 |         (JSC::webAssemblyModuleExports): | 
 |         (JSC::WebAssemblyModuleConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         (JSC::dataSegmentFail): | 
 |         (JSC::WebAssemblyModuleRecord::evaluate): | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::resolve): | 
 |         (JSC::webAssemblyInstantiateFunc): | 
 |         (JSC::webAssemblyInstantiateStreamingInternal): | 
 |         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: | 
 |         (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyTableConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyTable): | 
 |         (JSC::WebAssemblyTableConstructor::finishCreation): | 
 |         * wasm/js/WebAssemblyTablePrototype.cpp: | 
 |         (JSC::getTable): | 
 |         (JSC::webAssemblyTableProtoFuncGrow): | 
 |         (JSC::webAssemblyTableProtoFuncGet): | 
 |         (JSC::webAssemblyTableProtoFuncSet): | 
 |  | 
 | 2018-06-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         unshift should zero unused property storage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186960 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Also, this patch adds the zeroed unused property storage assertion | 
 |         to one more place it was missing. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::unshiftCountSlowCase): | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |  | 
 | 2018-06-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         PropertyCondition::isValidValueForAttributes() should also consider deleted values. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186943 | 
 |         <rdar://problem/41370337> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         PropertyCondition::isValidValueForAttributes() should check if the passed in value | 
 |         is a deleted one before it does a jsDynamicCast on it. | 
 |  | 
 |         * bytecode/PropertyCondition.cpp: | 
 |         (JSC::PropertyCondition::isValidValueForAttributes): | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         - removed an unnecessary #if. | 
 |  | 
 | 2018-06-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         performProxyCall should toThis the value passed to its handler | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186951 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/ProxyObject.cpp: | 
 |         (JSC::performProxyCall): | 
 |  | 
 | 2018-06-22  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         ensureWritableX should only convert away from CoW when it will succeed | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186898 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Otherwise, when we OSR exit, we'll end up profiling the array after | 
 |         it has been converted away from CoW. It's better for the ArrayProfile | 
 |         to see the array as it's still in CoW mode. | 
 |          | 
 |         This patch also renames ensureWritableX to tryMakeWritableX since these | 
 |         were never really "ensure" operations -- they may fail and return null. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::tryMakeWritableInt32Slow): | 
 |         (JSC::JSObject::tryMakeWritableDoubleSlow): | 
 |         (JSC::JSObject::tryMakeWritableContiguousSlow): | 
 |         (JSC::JSObject::ensureWritableInt32Slow): Deleted. | 
 |         (JSC::JSObject::ensureWritableDoubleSlow): Deleted. | 
 |         (JSC::JSObject::ensureWritableContiguousSlow): Deleted. | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::tryMakeWritableInt32): | 
 |         (JSC::JSObject::tryMakeWritableDouble): | 
 |         (JSC::JSObject::tryMakeWritableContiguous): | 
 |         (JSC::JSObject::ensureWritableInt32): Deleted. | 
 |         (JSC::JSObject::ensureWritableDouble): Deleted. | 
 |         (JSC::JSObject::ensureWritableContiguous): Deleted. | 
 |  | 
 | 2018-06-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         We should call visitChildren on Base not the exact typename | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186928 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         A lot of places were not properly calling visitChildren on their | 
 |         superclass. For most of them it didn't matter because they had | 
 |         immortal structures. If code changed in the future this might | 
 |         break things however. | 
 |  | 
 |         Also, block off more of the MethodTable for GetterSetter objects. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::visitChildren): | 
 |         * bytecode/ExecutableToCodeBlockEdge.cpp: | 
 |         (JSC::ExecutableToCodeBlockEdge::visitChildren): | 
 |         * debugger/DebuggerScope.cpp: | 
 |         (JSC::DebuggerScope::visitChildren): | 
 |         * runtime/EvalExecutable.cpp: | 
 |         (JSC::EvalExecutable::visitChildren): | 
 |         * runtime/FunctionExecutable.cpp: | 
 |         (JSC::FunctionExecutable::visitChildren): | 
 |         * runtime/FunctionRareData.cpp: | 
 |         (JSC::FunctionRareData::visitChildren): | 
 |         * runtime/GenericArgumentsInlines.h: | 
 |         (JSC::GenericArguments<Type>::visitChildren): | 
 |         * runtime/GetterSetter.cpp: | 
 |         (JSC::GetterSetter::visitChildren): | 
 |         * runtime/GetterSetter.h: | 
 |         * runtime/InferredType.cpp: | 
 |         (JSC::InferredType::visitChildren): | 
 |         * runtime/InferredTypeTable.cpp: | 
 |         (JSC::InferredTypeTable::visitChildren): | 
 |         * runtime/InferredValue.cpp: | 
 |         (JSC::InferredValue::visitChildren): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::visitChildren): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): | 
 |         * runtime/ModuleProgramExecutable.cpp: | 
 |         (JSC::ModuleProgramExecutable::visitChildren): | 
 |         * runtime/ProgramExecutable.cpp: | 
 |         (JSC::ProgramExecutable::visitChildren): | 
 |         * runtime/ScopedArguments.cpp: | 
 |         (JSC::ScopedArguments::visitChildren): | 
 |         * runtime/ScopedArguments.h: | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::visitChildren): | 
 |         * runtime/StructureRareData.cpp: | 
 |         (JSC::StructureRareData::visitChildren): | 
 |         * runtime/SymbolTable.cpp: | 
 |         (JSC::SymbolTable::visitChildren): | 
 |  | 
 | 2018-06-20  Darin Adler  <darin@apple.com> | 
 |  | 
 |         [Cocoa] Use the isDirectory: variants of NSURL methods more to eliminate unnecessary file system activity | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186875 | 
 |  | 
 |         Reviewed by Anders Carlsson. | 
 |  | 
 |         * API/tests/testapi.mm: | 
 |         (testObjectiveCAPIMain): Use isDirectory:NO when creating a URL for a JavaScript file. | 
 |  | 
 | 2018-06-22  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GTK] WebDriver: use a dictionary for session capabilities in StartAutomationSession message | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186915 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         Update StartAutomationSession message handling to receive a dictionary of session capabilities. | 
 |  | 
 |         * inspector/remote/glib/RemoteInspectorServer.cpp: | 
 |         (Inspector::processSessionCapabilities): Helper method to process the session capabilities. | 
 |  | 
 | 2018-06-21  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         WebKit (JavaScriptCore) compilation error with Clang ≥ 6. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185947 | 
 |         <rdar://problem/40131933> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Newer Clang versions (due to C++17 support) is not happy with how I implemented | 
 |         conversions between CodeLocation types.  We'll fix this by adding a conversion | 
 |         operator for converting between CodeLocation types. | 
 |  | 
 |         * assembler/CodeLocation.h: | 
 |         (JSC::CodeLocationCommon::operator T): | 
 |  | 
 | 2018-06-21  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Do some CoW cleanup | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186896 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::decompressArrayAllocationProfile): | 
 |         We don't need to WTFMove() ints | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         remove a TODO. | 
 |  | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::putByIndex): | 
 |         We were checking for isCopyOnWrite even after we converted away | 
 |         from CoW in above code. | 
 |         (JSC::JSObject::ensureWritableInt32Slow): | 
 |         Model this in the same way the other ensureWritableXSlow are modeled. | 
 |  | 
 | 2018-06-20  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         flattenDictionaryStruture needs to zero inline storage. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186869 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch also adds the assetion that unused property storage is | 
 |         zero or JSValue() to putDirectInternal. Additionally, functions | 
 |         have been added to $vm that flatten dictionary objects and return | 
 |         the inline capacity of an object. | 
 |  | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::flattenDictionaryStructure): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionInlineCapacity): | 
 |         (JSC::functionFlattenDictionaryObject): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-06-21  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Use IsoCellSets to track Executables with clearable code. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186877 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Here’s an example of the results that this fix may yield:  | 
 |         1. The workload: load cnn.com, wait for it to fully load, scroll down and up. | 
 |         2. Statistics on memory touched and memory freed by VM::deleteAllCode(): | 
 |  | 
 |            Visiting Executables: | 
 |                                                         Old             New | 
 |            Number of objects visited:                   70897           14264 | 
 |            Number of objects with deletable code:       14264 (20.1%)   14264 (100%) | 
 |            Number of memory pages visited:              3224            1602 | 
 |            Number of memory pages with deletable code:  1602 (49.7%)    1602 (100%) | 
 |  | 
 |            Visitng UnlinkedFunctionExecutables: | 
 |                                                         Old             New | 
 |            Number of objects visited:                   105454          17231 | 
 |            Number of objects with deletable code:       42319 (20.1%)   17231 (100%) ** | 
 |            Number of memory pages visited:              4796            1349 | 
 |            Number of memory pages with deletable code:  4013 (83.7%)    1349 (100%) | 
 |  | 
 |         ** The number of objects differ because the old code only visit unlinked | 
 |            executables indirectly via linked executables, whereas the new behavior visit | 
 |            all unlinked executables with deletable code directly.  This means: | 
 |  | 
 |            a. we used to not visit unlinked executables that have not been linked yet | 
 |               i.e. deleteAllCode() may not delete all code (especially code that is not | 
 |               used). | 
 |            b. we had to visit all linked executables to check if they of type | 
 |               FunctionExecutable, before going on to visit their unlinked executable, and | 
 |               this includes the ones that do not have deletable code.  This means that we | 
 |               would touch more memory in the process. | 
 |  | 
 |            Both of these these issues are now fixed with the new code. | 
 |  | 
 |         This code was tested with manually inserted instrumentation to track the above | 
 |         statistics.  It is not feasible to write an automated test for this without | 
 |         leaving a lot of invasive instrumentation in the code. | 
 |  | 
 |         * bytecode/UnlinkedFunctionExecutable.cpp: | 
 |         (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor): | 
 |         * bytecode/UnlinkedFunctionExecutable.h: | 
 |         * heap/CodeBlockSetInlines.h: | 
 |         (JSC::CodeBlockSet::iterateViaSubspaces): | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::deleteAllCodeBlocks): | 
 |         (JSC::Heap::deleteAllUnlinkedCodeBlocks): | 
 |         (JSC::Heap::deleteUnmarkedCompiledCode): | 
 |         (JSC::Heap::clearUnmarkedExecutables): Deleted. | 
 |         (JSC::Heap::addExecutable): Deleted. | 
 |         * heap/Heap.h: | 
 |         * runtime/DirectEvalExecutable.h: | 
 |  | 
 |         * runtime/ExecutableBase.cpp: | 
 |         (JSC::ExecutableBase::hasClearableCode const): | 
 |         - this is written based on the implementation of ExecutableBase::clearCode(). | 
 |  | 
 |         * runtime/ExecutableBase.h: | 
 |         * runtime/FunctionExecutable.h: | 
 |         * runtime/IndirectEvalExecutable.h: | 
 |         * runtime/ModuleProgramExecutable.h: | 
 |         * runtime/ProgramExecutable.h: | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::clearCode): | 
 |         (JSC::ScriptExecutable::installCode): | 
 |         * runtime/ScriptExecutable.h: | 
 |         (JSC::ScriptExecutable::finishCreation): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::ScriptExecutableSpaceAndSet::ScriptExecutableSpaceAndSet): | 
 |         (JSC::VM::ScriptExecutableSpaceAndSet::clearableCodeSetFor): | 
 |         (JSC::VM::forEachScriptExecutableSpace): | 
 |         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::UnlinkedFunctionExecutableSpaceAndSet): | 
 |         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::clearableCodeSetFor): | 
 |  | 
 | 2018-06-21  Zan Dobersek  <zdobersek@igalia.com> | 
 |  | 
 |         [GTK] WebDriver: allow applying host-specific TLS certificates for automated sessions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186884 | 
 |  | 
 |         Reviewed by Carlos Garcia Campos. | 
 |  | 
 |         Add a tuple array input parameter to the StartAutomationSession DBus | 
 |         message, representing a list of host-and-certificate pairs that have to | 
 |         be allowed for a given session. This array is then unpacked and used to | 
 |         fill out the certificates Vector object in the SessionCapabilities | 
 |         struct. | 
 |  | 
 |         * inspector/remote/RemoteInspector.h: Add a GLib-specific Vector of | 
 |         String pairs representing hosts and the certificate file paths. | 
 |         * inspector/remote/glib/RemoteInspectorServer.cpp: | 
 |  | 
 | 2018-06-20  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Expand concurrent GC assertion to accept JSValue() or 0 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186855 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         We tend to set unused property slots to either JSValue() or 0 | 
 |         depending on the context. On 64-bit these are the same but on | 
 |         32-bit JSValue() has a NaN tag. This patch makes it so we | 
 |         the accept either JSValue() or 0. | 
 |  | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::prepareToPutDirectWithoutTransition): | 
 |  | 
 | 2018-06-20  Guillaume Emont  <guijemont@igalia.com> | 
 |  | 
 |         [Armv7] Linkbuffer: executableOffsetFor() fails for location 2 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186765 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         This widens the check for 0 so that we handle that case more correctly. | 
 |  | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::executableOffsetFor): | 
 |  | 
 | 2018-06-19  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Fix broken assertion on 32-bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186830 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The assertion was intended to catch concurrent GC issues. We don't | 
 |         run them on 32-bit so we don't need this assertion there. The | 
 |         assertion was broken because zero is not JSValue() on 32-bit. | 
 |  | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::prepareToPutDirectWithoutTransition): | 
 |  | 
 | 2018-06-19  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         flattenDictionaryStructure needs to zero properties that have been compressed away | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186828 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch fixes a bunch of crashing Mozilla tests on the bots. | 
 |  | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::flattenDictionaryStructure): | 
 |  | 
 | 2018-06-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DirectArguments::create needs to initialize to undefined instead of the empty value | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186818 | 
 |         <rdar://problem/38415177> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         The bug here is that we will emit code that just loads from DirectArguments as | 
 |         long as the index is within the known capacity of the arguments object (op_get_from_arguments). | 
 |         The arguments object has at least enough capacity to hold the declared parameters. | 
 |         When we materialized this object in OSR exit, we initialized up to to the capacity | 
 |         with JSValue(). In OSR exit, though, we only filled up to the length of the | 
 |         object with actual values. So we'd end up with a DirectArguments object with | 
 |         capacity minus length slots of JSValue(). To fix this, we need initialize up to | 
 |         capacity with jsUndefined during construction. The invariant of this object is | 
 |         that the capacity minus length slots at the end are filled in with jsUndefined. | 
 |  | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::create): | 
 |  | 
 | 2018-06-19  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Crash in sanitizeStackForVMImpl sometimes when switching threads with same VM | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186827 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Need to set VM::lastStackTop before any possible calls to sanitizeStack(). | 
 |  | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::didAcquireLock): | 
 |  | 
 | 2018-06-19  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         ShadowChicken crashes with stack overflow in the LLInt | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186540 | 
 |         <rdar://problem/39682133> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Stack overflows in the LLInt were crashing in ShadowChicken when compiling | 
 |         with debug opcodes because it was accessing the scope of the incomplete top | 
 |         frame, which hadn't been set yet. Check that we have moved past the first | 
 |         opcode (enter) and that the scope is not undefined (enter will | 
 |         initialize it to undefined). | 
 |  | 
 |         * interpreter/ShadowChicken.cpp: | 
 |         (JSC::ShadowChicken::update): | 
 |  | 
 | 2018-06-19  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         constructArray variants should take the slow path for subclasses of Array | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186812 | 
 |  | 
 |         Reviewed by Saam Barati and Mark Lam. | 
 |  | 
 |         This patch fixes a crashing test in ObjectInitializationScope where we would | 
 |         allocate a new structure for an indexing type change while initializing | 
 |         a subclass of Array. Since the new array hasn't been fully initialized | 
 |         if the GC ran it would see garbage and we might crash. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::constructArray): | 
 |         (JSC::constructArrayNegativeIndexed): | 
 |         * runtime/JSArray.h: | 
 |         (JSC::constructArray): Deleted. | 
 |         (JSC::constructArrayNegativeIndexed): Deleted. | 
 |  | 
 | 2018-06-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Wasm: Any function argument of type Void should be a validation error | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186794 | 
 |         <rdar://problem/41140257> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * wasm/WasmModuleParser.cpp: | 
 |         (JSC::Wasm::ModuleParser::parseType): | 
 |  | 
 | 2018-06-18  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         JSImmutableButterfly should assert m_header is adjacent to the data | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186795 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/JSImmutableButterfly.cpp: | 
 |         * runtime/JSImmutableButterfly.h: | 
 |  | 
 | 2018-06-18  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, fix the build... | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |  | 
 | 2018-06-18  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, remove bad assertion. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |  | 
 | 2018-06-18  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Properly zero unused property storage offsets | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186692 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Since the concurrent GC might see a property slot before the mutator has actually | 
 |         stored the value there, we need to ensure that slot doesn't have garbage in it. | 
 |  | 
 |         Right now when calling constructConvertedArrayStorageWithoutCopyingElements | 
 |         or creating a RegExp matches array, we never cleared the unused | 
 |         property storage. ObjectIntializationScope has also been upgraded | 
 |         to look for our invariants around property storage. Additionally, | 
 |         a new assertion has been added to check for JSValue() when adding | 
 |         a new property. | 
 |  | 
 |         We used to put undefined into deleted property offsets. To | 
 |         make things simpler, this patch causes us to store JSValue() there | 
 |         instead. | 
 |  | 
 |         Lastly, this patch fixes an issue where we would initialize the | 
 |         array storage of RegExpMatchesArray twice. First with 0 and | 
 |         secondly with the actual result. Now we only zero memory between | 
 |         vector length and public length. | 
 |  | 
 |         * runtime/Butterfly.h: | 
 |         (JSC::Butterfly::offsetOfVectorLength): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::tryCreateUninitialized): | 
 |         (JSC::Butterfly::createUninitialized): | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::create): | 
 |         (JSC::Butterfly::createOrGrowPropertyStorage): | 
 |         (JSC::Butterfly::createOrGrowArrayRight): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         (JSC::Butterfly::resizeArray): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::createArrayButterflyInDictionaryIndexingMode): Deleted. | 
 |         * runtime/JSArray.h: | 
 |         (JSC::tryCreateArrayButterfly): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::createArrayStorageButterfly): | 
 |         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements): | 
 |         (JSC::JSObject::deleteProperty): | 
 |         (JSC::JSObject::shiftButterflyAfterFlattening): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::prepareToPutDirectWithoutTransition): | 
 |         * runtime/ObjectInitializationScope.cpp: | 
 |         (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized): | 
 |         * runtime/ObjectInitializationScope.h: | 
 |         (JSC::ObjectInitializationScope::release): | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         (JSC::createRegExpMatchesArray): | 
 |  | 
 |         * runtime/Butterfly.h: | 
 |         (JSC::Butterfly::offsetOfVectorLength): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::tryCreateUninitialized): | 
 |         (JSC::Butterfly::createUninitialized): | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::create): | 
 |         (JSC::Butterfly::createOrGrowPropertyStorage): | 
 |         (JSC::Butterfly::createOrGrowArrayRight): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         (JSC::Butterfly::resizeArray): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::createArrayButterflyInDictionaryIndexingMode): Deleted. | 
 |         * runtime/JSArray.h: | 
 |         (JSC::tryCreateArrayButterfly): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::createArrayStorageButterfly): | 
 |         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements): | 
 |         (JSC::JSObject::deleteProperty): | 
 |         (JSC::JSObject::shiftButterflyAfterFlattening): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::prepareToPutDirectWithoutTransition): | 
 |         * runtime/ObjectInitializationScope.cpp: | 
 |         (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized): | 
 |         * runtime/RegExpMatchesArray.cpp: | 
 |         (JSC::createEmptyRegExpMatchesArray): | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         (JSC::createRegExpMatchesArray): | 
 |  | 
 | 2018-06-18  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         Share structure across instances of classes exported through the ObjC API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186579 | 
 |         <rdar://problem/40969212> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         A new structure was being created for each instance of exported ObjC | 
 |         classes due to setting the prototype in the structure for every object, | 
 |         since prototype transitions are not cached by the structure. Cache the | 
 |         Structure in the JSObjcClassInfo to avoid the transition. | 
 |  | 
 |         * API/JSWrapperMap.mm: | 
 |         (-[JSObjCClassInfo wrapperForObject:inContext:]): | 
 |         (-[JSObjCClassInfo structureInContext:]): | 
 |         * API/tests/JSWrapperMapTests.h: Added. | 
 |         * API/tests/JSWrapperMapTests.mm: Added. | 
 |         (+[JSWrapperMapTests testStructureIdentity]): | 
 |         (runJSWrapperMapTests): | 
 |         * API/tests/testapi.mm: | 
 |         (testObjectiveCAPIMain): | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-06-18  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Support Unicode 11 in RegExp | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186685 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Updated the UCD tables used to generate RegExp property tables to version 11.0. | 
 |  | 
 |         * Scripts/generateYarrUnicodePropertyTables.py: | 
 |         * ucd/CaseFolding.txt: | 
 |         * ucd/DerivedBinaryProperties.txt: | 
 |         * ucd/DerivedCoreProperties.txt: | 
 |         * ucd/DerivedNormalizationProps.txt: | 
 |         * ucd/PropList.txt: | 
 |         * ucd/PropertyAliases.txt: | 
 |         * ucd/PropertyValueAliases.txt: | 
 |         * ucd/ScriptExtensions.txt: | 
 |         * ucd/Scripts.txt: | 
 |         * ucd/UnicodeData.txt: | 
 |         * ucd/emoji-data.txt: | 
 |  | 
 | 2018-06-18  Carlos Alberto Lopez Perez  <clopez@igalia.com> | 
 |  | 
 |         [WTF] Remove workarounds needed to support libstdc++-4 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186762 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Revert r226299, r226300 r226301 and r226302. | 
 |  | 
 |         * API/tests/TypedArrayCTest.cpp: | 
 |         (assertEqualsAsNumber): | 
 |  | 
 | 2018-06-16  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         REGRESSION(r227717): Hardcoded page size causing JSC crashes on platforms with page size bigger than 16 KB | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182923 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The blockSize used by MarkedBlock is incorrect on platforms with pages larger than 16 KB. | 
 |         Upstream Fedora's patch to use a safer 64 KB default. This fixes PowerPC and s390x. | 
 |  | 
 |         * heap/MarkedBlock.h: | 
 |  | 
 | 2018-06-16  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Inline JSArray::pushInline and Structure::nonPropertyTransition | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186723 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Now, CoW -> non-CoW transition is heavy path. We inline the part of Structure::nonPropertyTransition | 
 |         to catch the major path. And we also inline JSArray::pushInline well to spread this in operationArrayPushMultiple. | 
 |  | 
 |         This patch improves SixSpeed/spread-literal.es5. | 
 |  | 
 |                                      baseline                  patched | 
 |  | 
 |         spread-literal.es5      114.4140+-4.5146     ^    104.5475+-3.6157        ^ definitely 1.0944x faster | 
 |  | 
 |         * runtime/JSArrayInlines.h: | 
 |         (JSC::JSArray::pushInline): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::nonPropertyTransitionSlow): | 
 |         (JSC::Structure::nonPropertyTransition): Deleted. | 
 |         * runtime/Structure.h: | 
 |         * runtime/StructureInlines.h: | 
 |         (JSC::Structure::nonPropertyTransition): | 
 |  | 
 | 2018-06-16  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Reduce OSRExit for Kraken/crypto-aes due to CoW array | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186721 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         We still have several other OSRExits, but this patch reduces that. | 
 |  | 
 |         1. While ArraySlice code accepts CoW arrays, it always emits CheckStructure without CoW Array structures. | 
 |         So DFG emits ArraySlice onto CoW arrays, and always performs OSRExits. | 
 |  | 
 |         2. The CoW patch removed ArrayAllocationProfile updates. This makes allocated JSImmutableButterfly | 
 |         non-appropriate. | 
 |  | 
 |         These changes a bit fix Kraken/crypto-aes regression. | 
 |  | 
 |                                       baseline                  patched | 
 |  | 
 |         stanford-crypto-aes        63.718+-2.312      ^      56.140+-0.966         ^ definitely 1.1350x faster | 
 |  | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::operationMaterializeObjectInOSR): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |  | 
 | 2018-06-15  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] Spread onto PhantomNewArrayBuffer assumes JSFixedArray, but JSImmutableButterfly is returned | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186460 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Spread(PhantomNewArrayBuffer) returns JSImmutableButterfly. But it is wrong. | 
 |         We should return JSFixedArray for Spread. This patch adds a code generating | 
 |         a JSFixedArray from JSImmutableButterfly. | 
 |  | 
 |         Merging JSFixedArray into JSImmutableButterfly is possible future extension. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileSpread): | 
 |         * runtime/JSFixedArray.h: | 
 |  | 
 | 2018-06-15  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Annotate shrinkFootprintWhenIdle with NS_AVAILABLE | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186687 | 
 |         <rdar://problem/40071332> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * API/JSVirtualMachinePrivate.h: | 
 |  | 
 | 2018-06-15  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make ForceOSRExit CFG pruning in bytecode parser more aggressive by making the original block to ignore be the plan's osrEntryBytecodeIndex | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186648 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         This patch is neutral on SunSpider/bitops-bitwise-and. That test originally | 
 |         regressed with my first version of ForceOSRExit CFG pruning. This patch makes | 
 |         ForceOSRExit CFG pruning more aggressive by not ignoring everything that | 
 |         can reach any loop_hint, but only ignoring blocks that can reach a loop_hint | 
 |         if it's the plan's osr entry bytecode target. The goal is to get a speedometer | 
 |         2 speedup with this change on iOS. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |  | 
 | 2018-06-15  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         Unreviewed, rolling out r232816. | 
 |  | 
 |         Suggested by Caitlin: | 
 |         "this patch clearly does get some things wrong, and it's not | 
 |         easy to find what those things are" | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[LLInt] use loadp consistently for | 
 |         get_from_scope/put_to_scope" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=132333 | 
 |         https://trac.webkit.org/changeset/232816 | 
 |  | 
 | 2018-06-14  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION(232741): Crash running ARES-6 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186630 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         The de-duplicating work in r232741 caused a bug in breakCriticalEdge() where it | 
 |         treated edges between identical predecessor->successor pairs independently. | 
 |         This fixes the issue by handling such edges once, using the added intermediate | 
 |         pad for all instances of the edges between the same pairs. | 
 |  | 
 |         * dfg/DFGCriticalEdgeBreakingPhase.cpp: | 
 |         (JSC::DFG::CriticalEdgeBreakingPhase::run): | 
 |         (JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge): Deleted. | 
 |  | 
 | 2018-06-14  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186560 | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         Add SessionCapabilities struct to Client class and unify requestAutomationSession() methods into a single one | 
 |         that always receives the session capabilities. | 
 |  | 
 |         * inspector/remote/RemoteInspector.h: | 
 |         * inspector/remote/RemoteInspectorConstants.h: | 
 |         * inspector/remote/cocoa/RemoteInspectorCocoa.mm: | 
 |         (Inspector::RemoteInspector::receivedAutomationSessionRequestMessage): Move the parsing of mac capabilities from | 
 |         WebKit here and fill the SessionCapabilities instead. | 
 |         * inspector/remote/glib/RemoteInspectorGlib.cpp: | 
 |         (Inspector::RemoteInspector::requestAutomationSession): Pass SessionCapabilities to the client. | 
 |         * inspector/remote/glib/RemoteInspectorServer.cpp: | 
 |         (Inspector::RemoteInspectorServer::startAutomationSession): Process SessionCapabilities. | 
 |         * inspector/remote/glib/RemoteInspectorServer.h: | 
 |  | 
 | 2018-06-13  Adrian Perez de Castro  <aperez@igalia.com> | 
 |  | 
 |         [WPE] Trying to access the remote inspector hits an assertion in the UIProcess | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186588 | 
 |  | 
 |         Reviewed by Carlos Garcia Campos. | 
 |  | 
 |         Make both the WPE and GTK+ ports use /org/webkit/inspector as base prefix | 
 |         for resource paths, which avoids needing a switcheroo depending on the port. | 
 |  | 
 |         * inspector/remote/glib/RemoteInspectorUtils.cpp: | 
 |  | 
 | 2018-06-13  Caitlin Potter  <caitp@igalia.com> | 
 |  | 
 |         [LLInt] use loadp consistently for get_from_scope/put_to_scope | 
 |         https://bugs.webkit.org/show_bug.cgi?id=132333 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Using `loadis` for register indexes and `loadp` for constant scopes / | 
 |         symboltables makes sense, but is problematic for big-endian | 
 |         architectures. | 
 |  | 
 |         Consistently treating the operand as a pointer simplifies determining | 
 |         how to access the operand, and helps avoid bad accesses and crashes on | 
 |         big-endian ports. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecode/Instruction.h: | 
 |         * jit/JITOperations.cpp: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::tryCachePutToScopeGlobal): | 
 |         (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal): | 
 |  | 
 | 2018-06-13  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         AutomaticThread should have a way to provide a thread name | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186604 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Add names for JSC's automatic threads. | 
 |  | 
 |         * dfg/DFGWorklist.cpp: | 
 |         * heap/Heap.cpp: | 
 |         * jit/JITWorklist.cpp: | 
 |         * runtime/VMTraps.cpp: | 
 |         * wasm/WasmWorklist.cpp: | 
 |  | 
 | 2018-06-13  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         CFGSimplificationPhase should de-dupe jettisonedBlocks | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186583 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         When making the predecessors list unique in r232741, it revealed a bug inside | 
 |         of CFG simplification, where we try to remove the same predecessor more than | 
 |         once from a blocks predecessors list. We built the list of blocks to remove | 
 |         from the list of successors, which is not unique, causing us to try to remove | 
 |         the same predecessor more than once. The solution here is to just add to this | 
 |         list of blocks to remove only if the block is not already in the list. | 
 |  | 
 |         * dfg/DFGCFGSimplificationPhase.cpp: | 
 |         (JSC::DFG::CFGSimplificationPhase::run): | 
 |  | 
 | 2018-06-13  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Always use Nuke & Set procedure for x86 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186592 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         We always use nukeStructureAndStoreButterfly for Contiguous -> ArrayStorage conversion if the architecture is x86. | 
 |         By doing so, we can concurrently load structure and butterfly at least in x86 environment even in non-collector | 
 |         threads. | 
 |  | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::convertContiguousToArrayStorage): | 
 |  | 
 | 2018-06-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Remove JSVirtualMachine shrinkFootprint when clients move to shrinkFootprintWhenIdle | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186071 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * API/JSVirtualMachine.mm: | 
 |         (-[JSVirtualMachine shrinkFootprint]): Deleted. | 
 |         * API/JSVirtualMachinePrivate.h: | 
 |  | 
 | 2018-06-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Reduce graph size by replacing terminal nodes in blocks that have a ForceOSRExit with Unreachable | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181409 | 
 |         <rdar://problem/36383749> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This patch is me redoing r226655. This is a patch I wrote when | 
 |         profiling Speedometer. Fil rolled this change out in r230928. He | 
 |         showed this slowed down a sunspider tests by ~2x. This sunspider | 
 |         regression revealed a real performance bug in the original change: | 
 |         we would kill blocks that reached OSR entry targets, sometimes leading | 
 |         us to not do OSR entry into the DFG, since we could end up deleting | 
 |         entire loops from the CFG. The reason for this is that code that has run | 
 |         ~once and that reaches loops often has ForceOSRExits inside of it. The | 
 |         solution to this is to not perform this optimization on blocks that can | 
 |         reach OSR entry targets. | 
 |          | 
 |         The reason I'm redoing this patch is that it turns out Fil rolling | 
 |         out the change was a Speedometer 2 regression. | 
 |          | 
 |         This is a modified version of the original ChangeLog I wrote in r226655: | 
 |          | 
 |         When I was looking at profiler data for Speedometer, I noticed that one of | 
 |         the hottest functions in Speedometer is around 1100 bytecode operations long. | 
 |         Only about 100 of those bytecode ops ever execute. However, we ended up | 
 |         spending a lot of time compiling basic blocks that never executed. We often | 
 |         plant ForceOSRExit nodes when we parse bytecodes that have a null value profile. | 
 |         This is the case when such a node never executes. | 
 |          | 
 |         This patch makes it so that anytime a block has a ForceOSRExit, and that block | 
 |         can not reach an OSR entry target, we replace its terminal node with an Unreachable | 
 |         node, and remove all nodes after the ForceOSRExit. This cuts down the graph | 
 |         size since it removes control flow edges from the CFG. This allows us to get | 
 |         rid of huge chunks of the CFG in certain programs. When doing this transformation, | 
 |         we also insert Flushes/PhantomLocals to ensure we can recover values that are bytecode | 
 |         live-in to the ForceOSRExit. | 
 |          | 
 |         Using ForceOSRExit as the signal for this is a bit of a hack. It definitely | 
 |         does not get rid of all the CFG that it could. If we decide it's worth | 
 |         it, we could use additional inputs into this mechanism. For example, we could | 
 |         profile if a basic block ever executes inside the LLInt/Baseline, and | 
 |         remove parts of the CFG based on that. | 
 |          | 
 |         When running Speedometer with the concurrent JIT turned off, this patch | 
 |         improves DFG/FTL compile times by around 5%. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::addToGraph): | 
 |         (JSC::DFG::ByteCodeParser::inlineCall): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::blocksInPostOrder): | 
 |  | 
 | 2018-06-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         The NaturalLoops algorithm only works when the list of blocks in a loop is de-duplicated | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184829 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         This patch codifies that a BasicBlock's list of predecessors is de-duplicated. | 
 |         In B3/Air, this just meant writing a validation rule. In DFG, this meant | 
 |         ensuring this property when building up the predecessors list, and also adding | 
 |         a validation rule. The NaturalLoops algorithm relies on this property. | 
 |  | 
 |         * b3/B3Validate.cpp: | 
 |         * b3/air/AirValidate.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testLoopWithMultipleHeaderEdges): | 
 |         (JSC::B3::run): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::handleSuccessor): | 
 |         * dfg/DFGValidate.cpp: | 
 |  | 
 | 2018-06-11  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Loading cnn.com in MiniBrowser hits Structure::dump() under DFG::AdaptiveInferredPropertyValueWatchpoint::handleFire  which churns 65KB of memory | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186467 | 
 |  | 
 |         Reviewed by Simon Fraser. | 
 |  | 
 |         This patch adds a LazyFireDetail that wraps ScopedLambda so that | 
 |         we don't actually malloc any strings for firing unless those | 
 |         Strings are actually going to be printed. | 
 |  | 
 |         * bytecode/Watchpoint.h: | 
 |         (JSC::LazyFireDetail::LazyFireDetail): | 
 |         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp: | 
 |         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::handleFire): | 
 |         * dfg/DFGAdaptiveStructureWatchpoint.cpp: | 
 |         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire): | 
 |  | 
 | 2018-06-11  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add support for webkit-test-runner jscOptions in DumpRenderTree and WebKitTestRunner. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186451 | 
 |         <rdar://problem/40875792> | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         Enhance setOptions() to be able to take a comma separated options string in | 
 |         addition to white space separated options strings. | 
 |  | 
 |         * runtime/Options.cpp: | 
 |         (JSC::isSeparator): | 
 |         (JSC::Options::setOptions): | 
 |  | 
 | 2018-06-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         JavaScriptCore: Disable 32-bit JIT on Windows | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185989 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Fixed the CLOOP so it can work when COMPUTED_GOTOs are not supported. | 
 |  | 
 |         * llint/LLIntData.h: | 
 |         (JSC::LLInt::getCodePtr): Used a reinterpret_cast since Opcode could be an int. | 
 |         * llint/LowLevelInterpreter.cpp: Changed the definition of OFFLINE_ASM_GLOBAL_LABEL to not | 
 |         have a case label because these aren't opcodes. | 
 |         * runtime/Options.cpp: Made assembler related Windows conditional code also conditional | 
 |         on the JIT being enabled. | 
 |         (JSC::recomputeDependentOptions): | 
 |  | 
 | 2018-06-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Test js/regexp-zero-length-alternatives.html fails when RegExpJIT is disabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186477 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Fixed bug where we were using the wrong frame size for TypeParenthesesSubpatternTerminalBegin | 
 |         YARR interpreter nodes.  This caused us to overwrite other frame information. | 
 |  | 
 |         Added frame offset debugging code to YARR interpreter. | 
 |  | 
 |         * yarr/YarrInterpreter.cpp: | 
 |         (JSC::Yarr::ByteCompiler::emitDisjunction): | 
 |         (JSC::Yarr::ByteCompiler::dumpDisjunction): | 
 |  | 
 | 2018-06-10  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Array.prototype.sort should rejects null comparator | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186458 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This relaxed behavior is once introduced in r216169 to fix some pages by aligning | 
 |         the behavior to Chrome and Firefox. | 
 |  | 
 |         However, now Chrome, Firefox and Edge reject a null comparator. So only JavaScriptCore | 
 |         accepts it. This patch reverts r216169 to align JSC to the other engines and fix | 
 |         the spec issue. | 
 |  | 
 |         * builtins/ArrayPrototype.js: | 
 |         (sort): | 
 |  | 
 | 2018-06-09  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         [Xcode] Clean up and modernize some build setting definitions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186463 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         * Configurations/Base.xcconfig: Removed definition for macOS 10.11. Simplified the | 
 |           definition of WK_PRIVATE_FRAMEWORK_STUBS_DIR now that WK_XCODE_SUPPORTS_TEXT_BASED_STUBS | 
 |           is true for all supported Xcode versions. | 
 |         * Configurations/DebugRelease.xcconfig: Removed definition for macOS 10.11. | 
 |         * Configurations/FeatureDefines.xcconfig: Simplified the definitions of ENABLE_APPLE_PAY and | 
 |           ENABLE_VIDEO_PRESENTATION_MODE now macOS 10.12 is the earliest supported version. | 
 |         * Configurations/Version.xcconfig: Removed definition for macOS 10.11. | 
 |         * Configurations/WebKitTargetConditionals.xcconfig: Removed definitions for macOS 10.11. | 
 |  | 
 | 2018-06-09  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         Added missing file references to the Configuration group. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-06-08  Darin Adler  <darin@apple.com> | 
 |  | 
 |         [Cocoa] Remove all uses of NSAutoreleasePool as part of preparation for ARC | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186436 | 
 |  | 
 |         Reviewed by Anders Carlsson. | 
 |  | 
 |         * heap/Heap.cpp: Include FoundationSPI.h rather than directly including | 
 |         objc-internal.h and explicitly declaring the alternative. | 
 |  | 
 | 2018-06-08  Wenson Hsieh  <wenson_hsieh@apple.com> | 
 |  | 
 |         [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 1) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186442 | 
 |         <rdar://problem/40879364> | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-06-08  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         jumpTrueOrFalse only takes the fast path for boolean false on 64bit LLInt  | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186446 | 
 |         <rdar://problem/40949995> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         On 64bit LLInt, jumpTrueOrFalse did a mask check to take the fast path for | 
 |         boolean literals, but it would only work for false. Change it so that it | 
 |         takes the fast path for true, false, null and undefined. | 
 |  | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |  | 
 | 2018-06-08  Brian Burg  <bburg@apple.com> | 
 |  | 
 |         [Cocoa] Web Automation: include browser name and version in listing for automation targets | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186204 | 
 |         <rdar://problem/36950423> | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         Ask the client what the reported browser name and version should be, then | 
 |         send this as part of the listing for an automation target. | 
 |  | 
 |         * inspector/remote/RemoteInspectorConstants.h: | 
 |         * inspector/remote/cocoa/RemoteInspectorCocoa.mm: | 
 |         (Inspector::RemoteInspector::listingForAutomationTarget const): | 
 |  | 
 | 2018-06-07  Chris Dumez  <cdumez@apple.com> | 
 |  | 
 |         Add base class to get WeakPtrFactory member and avoid some boilerplate code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186407 | 
 |  | 
 |         Reviewed by Brent Fulgham. | 
 |  | 
 |         Add CanMakeWeakPtr base class to get WeakPtrFactory member and its getter, in | 
 |         order to avoid some boilerplate code in every class needing a WeakPtrFactory. | 
 |         This also gets rid of old-style createWeakPtr() methods in favor of the newer | 
 |         makeWeakPtr(). | 
 |  | 
 |         * wasm/WasmInstance.h: | 
 |         * wasm/WasmMemory.cpp: | 
 |         (JSC::Wasm::Memory::registerInstance): | 
 |  | 
 | 2018-06-07  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         Don't try to allocate JIT memory if we don't have the JIT entitlement | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182605 | 
 |         <rdar://problem/38271229> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Check that the current process has the correct entitlements before | 
 |         trying to allocate JIT memory to silence warnings. | 
 |  | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::allowJIT): Helper that checks entitlements on iOS and returns true in other platforms | 
 |         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): check allowJIT before trying to allocate | 
 |  | 
 | 2018-06-07  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         TierUpCheckInjectionPhase systematically never puts the outer-most loop in an inner loop's vector of outer loops | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186386 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This looks like an 8% speedup on Kraken's imaging-gaussian-blur subtest. | 
 |  | 
 |         * dfg/DFGTierUpCheckInjectionPhase.cpp: | 
 |         (JSC::DFG::TierUpCheckInjectionPhase::run): | 
 |  | 
 | 2018-06-02  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         FunctionRareData::m_objectAllocationProfileWatchpoint is racy | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186237 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We initialize it blind and let it go into auto-watch mode once the DFG adds a watchpoint, but | 
 |         that means that we never notice that it fired if it fires between when the DFG decides to | 
 |         watch it and when it actually adds the watchpoint. | 
 |          | 
 |         Most watchpoints are initialized watched for this purpose. This one had a somewhat good | 
 |         reason for being initialized blind: that's how we knew to ignore changes to the prototype | 
 |         before the first allocation. However, that functionality also arose out of the fact that the | 
 |         rare data is created lazily and usually won't exist until the first allocation. | 
 |          | 
 |         The fix here is to make the watchpoint go into watched mode as soon as we initialize the | 
 |         object allocation profile. | 
 |          | 
 |         It's hard to repro this race, however it started causing spurious test failures for me after | 
 |         bug 164904. | 
 |  | 
 |         * runtime/FunctionRareData.cpp: | 
 |         (JSC::FunctionRareData::FunctionRareData): | 
 |         (JSC::FunctionRareData::initializeObjectAllocationProfile): | 
 |  | 
 | 2018-06-07  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make DFG to FTL OSR entry code more sane by removing bad RELEASE_ASSERTS and making it trigger compiles in outer loops before inner ones | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186218 | 
 |         <rdar://problem/38449540> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch makes tierUpCommon a tad bit more sane. There are a few things | 
 |         that I did: | 
 |         - There were a few release asserts that were crashing. Those release asserts | 
 |         were incorrect. They were making assumptions about how the code and data | 
 |         structures were ordered that were wrong. This patch removes them. The code | 
 |         was using the loop hierarchy vector to make assumptions about which loop we | 
 |         were currently executing in, which is incorrect. The only information that | 
 |         can be used about where we're currently executing is the bytecode index we're | 
 |         at. | 
 |         - This makes it so that we go back to trying to compile outer loops before | 
 |         inner loops. JF accidentally reverted this behavior that Ben implemented. | 
 |         JF made it so that we just compiled the inner most loop. I make this | 
 |         functionality work by first triggering a compile for the outer most loop | 
 |         that the code is currently executing in and that can perform OSR entry. | 
 |         However, some programs can get stuck in inner loops. The code works by | 
 |         progressively asking inner loops to compile if program execution has not | 
 |         yet reached an outer loop. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |  | 
 | 2018-06-06  Guillaume Emont  <guijemont@igalia.com> | 
 |  | 
 |         ArityFixup should adjust SP first on 32-bit platforms too | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186351 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::arityFixupGenerator): | 
 |  | 
 | 2018-06-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Compare operations do not respect negative zeros | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183729 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Compare operations do not respect negative zeros. So propagating this can | 
 |         reduce the size of the produced code for negative zero case. This pattern | 
 |         can be seen in Kraken stanford-crypto-aes. | 
 |  | 
 |         This also causes an existing bug which converts CompareEq(Int32Only, NonIntAsdouble) to false. | 
 |         However, NonIntAsdouble includes negative zero, which can be equal to Int32 positive zero. | 
 |         This issue is covered by fold-based-on-int32-proof-mul-branch.js, and we fix this. | 
 |  | 
 |         * bytecode/SpeculatedType.cpp: | 
 |         (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations): | 
 |         SpecNonIntAsDouble includes negative zero (-0.0), which can be equal to 0 and 0.0. | 
 |         To emphasize this, we use SpecAnyIntAsDouble | SpecNonIntAsDouble directly instead of | 
 |         SpecDoubleReal. | 
 |  | 
 |         * dfg/DFGBackwardsPropagationPhase.cpp: | 
 |         (JSC::DFG::BackwardsPropagationPhase::propagate): | 
 |  | 
 | 2018-06-06  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         generateConditionsForInstanceOf needs to see if the object has a poly proto structure before assuming it has a constant prototype | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186363 | 
 |  | 
 |         Rubber-stamped by Filip Pizlo. | 
 |  | 
 |         The code was assuming that the object it was creating an OPC for always | 
 |         had a non-poly-proto structure. However, this assumption was wrong. For | 
 |         example, an object in the prototype chain could be poly proto. That type  | 
 |         of object graph would cause a crash in this code. This patch makes it so | 
 |         that we fail to generate an ObjectPropertyConditionSet if we see a poly proto | 
 |         object as we traverse the prototype chain. | 
 |  | 
 |         * bytecode/ObjectPropertyConditionSet.cpp: | 
 |         (JSC::generateConditionsForInstanceOf): | 
 |  | 
 | 2018-06-05  Brent Fulgham  <bfulgham@apple.com> | 
 |  | 
 |         Adjust compile and runtime flags to match shippable state of features | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186319 | 
 |         <rdar://problem/40352045> | 
 |  | 
 |         Reviewed by Maciej Stachowiak, Jon Lee, and others. | 
 |  | 
 |         This patch revises the compile time and runtime state for various features to match their | 
 |         suitability for end-user releases. | 
 |  | 
 |         * Configurations/DebugRelease.xcconfig: Update to match WebKit definition of | 
 |         WK_RELOCATABLE_FRAMEWORKS so that ENABLE(EXPERIMENTAL_FEATURES) is defined properly for | 
 |         Cocoa builds. | 
 |         * Configurations/FeatureDefines.xcconfig: Don't build ENABLE_INPUT_TYPE_COLOR | 
 |         or ENABLE_INPUT_TYPE_COLOR_POPOVER. | 
 |         * runtime/Options.h: Only enable INTL_NUMBER_FORMAT_TO_PARTS and INTL_PLURAL_RULES | 
 |         at runtime for non-production builds. | 
 |  | 
 | 2018-06-05  Brent Fulgham  <bfulgham@apple.com> | 
 |  | 
 |         Revise DEFAULT_EXPERIMENTAL_FEATURES_ENABLED to work properly on Apple builds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186286 | 
 |         <rdar://problem/40782992> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         Use the WK_RELOCATABLE_FRAMEWORKS flag (which is always defined for non-production builds) | 
 |         to define ENABLE(EXPERIMENTAL_FEATURES) so that we do not need to manually | 
 |         change this flag when preparing for a production release. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: Use WK_RELOCATABLE_FRAMEWORKS to determine | 
 |         whether experimental features should be enabled, and use it to properly define the | 
 |         feature flag. | 
 |  | 
 | 2018-06-05  Darin Adler  <darin@apple.com> | 
 |  | 
 |         [Cocoa] Update some JavaScriptCore code to be more ready for ARC | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186301 | 
 |  | 
 |         Reviewed by Anders Carlsson. | 
 |  | 
 |         * API/JSContext.mm: | 
 |         (-[JSContext evaluateScript:withSourceURL:]): Use __bridge for typecast. | 
 |         (-[JSContext setName:]): Removed unnecessary call to copy, since the | 
 |         JSStringCreateWithCFString function already reads the characters out | 
 |         of the string and does not retain the string, so there is no need to | 
 |         make an immutable copy. And used __bridge for typecast. | 
 |         * inspector/remote/cocoa/RemoteInspectorCocoa.mm: | 
 |         (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage): | 
 |         Ditto. | 
 |  | 
 |         * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm: | 
 |         (Inspector::RemoteInspectorXPCConnection::deserializeMessage): | 
 |         Use CFBridgingRelease instead of autorelease for a CF dictionary that | 
 |         we return as an NSDictionary. | 
 |  | 
 | 2018-06-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Remove missing files from JavaScriptCore Xcode project | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186297 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-06-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Add test for CoW conversions in the DFG/FTL | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186295 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Add a function to $vm that returns a JSString containing the | 
 |         dataLog dump of the indexingMode of an Object. | 
 |  | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionIndexingMode): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-06-04  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Set the activeLength of all ScratchBuffers to zero when exiting the VM | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186284 | 
 |         <rdar://problem/40780738> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Simon recently found instances where we leak global objects from the | 
 |         ScratchBuffer. Yusuke found that we forgot to set the active length | 
 |         back to zero when doing catch OSR entry in the DFG/FTL. His solution | 
 |         to this was adding a node that cleared the active length. This is | 
 |         a good node to have, but it's not a complete solution: the DFG/FTL | 
 |         could OSR exit before that node executes, which would cause us to leak | 
 |         the data in it. | 
 |          | 
 |         This patch makes it so that we set each scratch buffer's active length | 
 |         to zero on VM exit. This helps prevent leaks for JS code that eventually | 
 |         exits the VM (which is essentially all code on the web and all API users). | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::clearScratchBuffers): | 
 |         * runtime/VM.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::~VMEntryScope): | 
 |  | 
 | 2018-06-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         JSLock should clear last exception when releasing the lock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186277 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         If we don't clear the last exception we essentially leak the | 
 |         object and everything referenced by it until another exception is | 
 |         thrown. | 
 |  | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::willReleaseLock): | 
 |  | 
 | 2018-06-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Get rid of UnconditionalFinalizers and WeakReferenceHarvesters | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180248 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         As a final step, this patch removes ListableHandler from JSC. | 
 |         Nobody uses UnconditionalFinalizers and WeakReferenceHarvesters now. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * heap/Heap.h: | 
 |         * heap/ListableHandler.h: Removed. | 
 |  | 
 | 2018-06-03  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         LayoutTests/fast/css/parsing-css-matches-7.html always abandons its Document (disabling JIT fixes it) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186223 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         After preparing catchOSREntryBuffer, we do not clear the active length of this scratch buffer. | 
 |         It makes this buffer conservative GC root, and allows it to hold GC objects unnecessarily long. | 
 |  | 
 |         This patch introduces DFG ClearCatchLocals node, which clears catchOSREntryBuffer's active length. | 
 |         We model ExtractCatchLocal and ClearCatchLocals appropriately in DFG clobberize too to make | 
 |         this ClearCatchLocals valid. | 
 |  | 
 |         The existing tests for ExtractCatchLocal just pass. | 
 |  | 
 |         * dfg/DFGAbstractHeap.h: | 
 |         * 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/DFGMayExit.cpp: | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOSREntry.cpp: | 
 |         (JSC::DFG::prepareCatchOSREntry): | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileClearCatchLocals): | 
 |         * 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::compileClearCatchLocals): | 
 |  | 
 | 2018-06-02  Darin Adler  <darin@apple.com> | 
 |  | 
 |         [Cocoa] Update some code to be more ARC-compatible to prepare for future ARC adoption | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186227 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * API/JSContext.mm: | 
 |         (-[JSContext name]): Use CFBridgingRelease instead of autorelease. | 
 |         * API/JSValue.mm: | 
 |         (valueToObjectWithoutCopy): Use CFBridgingRelease instead of autorelease. | 
 |         (containerValueToObject): Use adoptCF instead of autorelease. This is not only more | 
 |         ARC-compatible, but more efficient. | 
 |         (valueToString): Use CFBridgingRelease instead of autorelease. | 
 |  | 
 | 2018-06-02  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for addition operations | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179002 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is implementing support to BigInt Operands into binary "+" | 
 |         and binary "-" operators. Right now, we have limited support to DFG | 
 |         and FTL JIT layers, but we plan to fix this support in future | 
 |         patches. | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::stringToBigInt): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::divide): | 
 |         (JSC::JSBigInt::remainder): | 
 |         (JSC::JSBigInt::add): | 
 |         (JSC::JSBigInt::sub): | 
 |         (JSC::JSBigInt::absoluteAdd): | 
 |         (JSC::JSBigInt::absoluteSub): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::toNumber const): | 
 |         (JSC::JSBigInt::getPrimitiveNumber const): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         * runtime/Operations.cpp: | 
 |         (JSC::jsAddSlowCase): | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsSub): | 
 |  | 
 | 2018-06-02  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r232439. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186238 | 
 |  | 
 |         It breaks gtk-linux-32-release (Requested by caiolima on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[ESNext][BigInt] Implement support for addition operations" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179002 | 
 |         https://trac.webkit.org/changeset/232439 | 
 |  | 
 | 2018-06-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Baseline op_jtrue emits an insane amount of code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185708 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         op_jtrue / op_jfalse bloats massive amount of code. This patch attempts to reduce the size of this code by, | 
 |  | 
 |         1. op_jtrue / op_jfalse immediately jumps if the condition met. We add AssemblyHelpers::branchIf{Truthy,Falsey} | 
 |            to jump directly. This tightens the code. | 
 |  | 
 |         2. Align our emitConvertValueToBoolean implementation to FTL's boolify function. It emits less code. | 
 |  | 
 |         This reduces the code size of op_jtrue in x64 from 220 bytes to 164 bytes. | 
 |  | 
 |         [  12] jtrue             arg1, 6(->18) | 
 |               0x7f233170162c: mov 0x30(%rbp), %rax | 
 |               0x7f2331701630: mov %rax, %rsi | 
 |               0x7f2331701633: xor $0x6, %rsi | 
 |               0x7f2331701637: test $0xfffffffffffffffe, %rsi | 
 |               0x7f233170163e: jnz 0x7f2331701654 | 
 |               0x7f2331701644: cmp $0x7, %eax | 
 |               0x7f2331701647: setz %sil | 
 |               0x7f233170164b: movzx %sil, %esi | 
 |               0x7f233170164f: jmp 0x7f2331701705 | 
 |               0x7f2331701654: test %rax, %r14 | 
 |               0x7f2331701657: jz 0x7f233170169c | 
 |               0x7f233170165d: cmp %r14, %rax | 
 |               0x7f2331701660: jb 0x7f2331701675 | 
 |               0x7f2331701666: test %eax, %eax | 
 |               0x7f2331701668: setnz %sil | 
 |               0x7f233170166c: movzx %sil, %esi | 
 |               0x7f2331701670: jmp 0x7f2331701705 | 
 |               0x7f2331701675: lea (%r14,%rax), %rsi | 
 |               0x7f2331701679: movq %rsi, %xmm0 | 
 |               0x7f233170167e: xorps %xmm1, %xmm1 | 
 |               0x7f2331701681: ucomisd %xmm1, %xmm0 | 
 |               0x7f2331701685: jz 0x7f2331701695 | 
 |               0x7f233170168b: mov $0x1, %esi | 
 |               0x7f2331701690: jmp 0x7f2331701705 | 
 |               0x7f2331701695: xor %esi, %esi | 
 |               0x7f2331701697: jmp 0x7f2331701705 | 
 |               0x7f233170169c: test %rax, %r15 | 
 |               0x7f233170169f: jnz 0x7f2331701703 | 
 |               0x7f23317016a5: cmp $0x1, 0x5(%rax) | 
 |               0x7f23317016a9: jnz 0x7f23317016c1 | 
 |               0x7f23317016af: mov 0x8(%rax), %esi | 
 |               0x7f23317016b2: test %esi, %esi | 
 |               0x7f23317016b4: setnz %sil | 
 |               0x7f23317016b8: movzx %sil, %esi | 
 |               0x7f23317016bc: jmp 0x7f2331701705 | 
 |               0x7f23317016c1: test $0x1, 0x6(%rax) | 
 |               0x7f23317016c5: jz 0x7f23317016f9 | 
 |               0x7f23317016cb: mov (%rax), %esi | 
 |               0x7f23317016cd: mov $0x7f23315000c8, %rdx | 
 |               0x7f23317016d7: mov (%rdx), %rdx | 
 |               0x7f23317016da: mov (%rdx,%rsi,8), %rsi | 
 |               0x7f23317016de: mov $0x7f2330de0000, %rdx | 
 |               0x7f23317016e8: cmp %rdx, 0x18(%rsi) | 
 |               0x7f23317016ec: jnz 0x7f23317016f9 | 
 |               0x7f23317016f2: xor %esi, %esi | 
 |               0x7f23317016f4: jmp 0x7f2331701705 | 
 |               0x7f23317016f9: mov $0x1, %esi | 
 |               0x7f23317016fe: jmp 0x7f2331701705 | 
 |               0x7f2331701703: xor %esi, %esi | 
 |               0x7f2331701705: test %esi, %esi | 
 |               0x7f2331701707: jnz 0x7f233170171b | 
 |  | 
 |         [  12] jtrue             arg1, 6(->18) | 
 |               0x7f6c8710156c: mov 0x30(%rbp), %rax | 
 |               0x7f6c87101570: test %rax, %r15 | 
 |               0x7f6c87101573: jnz 0x7f6c871015c8 | 
 |               0x7f6c87101579: cmp $0x1, 0x5(%rax) | 
 |               0x7f6c8710157d: jnz 0x7f6c87101592 | 
 |               0x7f6c87101583: cmp $0x0, 0x8(%rax) | 
 |               0x7f6c87101587: jnz 0x7f6c87101623 | 
 |               0x7f6c8710158d: jmp 0x7f6c87101615 | 
 |               0x7f6c87101592: test $0x1, 0x6(%rax) | 
 |               0x7f6c87101596: jz 0x7f6c87101623 | 
 |               0x7f6c8710159c: mov (%rax), %esi | 
 |               0x7f6c8710159e: mov $0x7f6c86f000e0, %rdx | 
 |               0x7f6c871015a8: mov (%rdx), %rdx | 
 |               0x7f6c871015ab: mov (%rdx,%rsi,8), %rsi | 
 |               0x7f6c871015af: mov $0x7f6c867e0000, %rdx | 
 |               0x7f6c871015b9: cmp %rdx, 0x18(%rsi) | 
 |               0x7f6c871015bd: jnz 0x7f6c87101623 | 
 |               0x7f6c871015c3: jmp 0x7f6c87101615 | 
 |               0x7f6c871015c8: cmp %r14, %rax | 
 |               0x7f6c871015cb: jb 0x7f6c871015de | 
 |               0x7f6c871015d1: test %eax, %eax | 
 |               0x7f6c871015d3: jnz 0x7f6c87101623 | 
 |               0x7f6c871015d9: jmp 0x7f6c87101615 | 
 |               0x7f6c871015de: test %rax, %r14 | 
 |               0x7f6c871015e1: jz 0x7f6c87101602 | 
 |               0x7f6c871015e7: lea (%r14,%rax), %rsi | 
 |               0x7f6c871015eb: movq %rsi, %xmm0 | 
 |               0x7f6c871015f0: xorps %xmm1, %xmm1 | 
 |               0x7f6c871015f3: ucomisd %xmm1, %xmm0 | 
 |               0x7f6c871015f7: jz 0x7f6c87101615 | 
 |               0x7f6c871015fd: jmp 0x7f6c87101623 | 
 |               0x7f6c87101602: mov $0x7, %r11 | 
 |               0x7f6c8710160c: cmp %r11, %rax | 
 |               0x7f6c8710160f: jz 0x7f6c87101623 | 
 |  | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitBranch): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitBranch): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitConvertValueToBoolean): | 
 |         (JSC::AssemblyHelpers::branchIfValue): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::branchIfTruthy): | 
 |         (JSC::AssemblyHelpers::branchIfFalsey): | 
 |         * jit/JIT.h: | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::addJump): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_jfalse): | 
 |         (JSC::JIT::emit_op_jtrue): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_jfalse): | 
 |         (JSC::JIT::emit_op_jtrue): | 
 |  | 
 | 2018-06-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove WeakReferenceHarvester | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186102 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         After several cleanups, now JSWeakMap becomes the last user of WeakReferenceHarvester. | 
 |         Since JSWeakMap is already managed in IsoSubspace, we can iterate marked JSWeakMap | 
 |         by using output constraints & Subspace iteration. | 
 |  | 
 |         This patch removes WeakReferenceHarvester. Instead of managing this linked-list, our | 
 |         output constraint set iterates marked JSWeakMap by using Subspace. | 
 |  | 
 |         And we also add locking for JSWeakMap's rehash and output constraint visiting. | 
 |  | 
 |         Attached microbenchmark does not show any regression. | 
 |  | 
 |         * API/JSAPIWrapperObject.h: | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::endMarking): | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         * heap/Heap.h: | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::addWeakReferenceHarvester): Deleted. | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/WeakReferenceHarvester.h: Removed. | 
 |         * runtime/WeakMapImpl.cpp: | 
 |         (JSC::WeakMapImpl<WeakMapBucket>::visitChildren): | 
 |         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKey>>::visitOutputConstraints): | 
 |         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints): | 
 |         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKey>>::visitWeakReferences): Deleted. | 
 |         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitWeakReferences): Deleted. | 
 |         * runtime/WeakMapImpl.h: | 
 |         (JSC::WeakMapImpl::WeakMapImpl): | 
 |         (JSC::WeakMapImpl::finishCreation): | 
 |         (JSC::WeakMapImpl::rehash): | 
 |         (JSC::WeakMapImpl::makeAndSetNewBuffer): | 
 |         (JSC::WeakMapImpl::DeadKeyCleaner::target): Deleted. | 
 |  | 
 | 2018-06-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Object.create should have intrinsic | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186200 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Object.create is used in various JS code. `Object.create(null)` is particularly used | 
 |         to create empty plain object with null [[Prototype]]. We can find `Object.create(null)` | 
 |         call in ARES-6/Babylon code. | 
 |  | 
 |         This patch adds ObjectCreateIntrinsic to JSC. DFG recognizes it and produces ObjectCreate | 
 |         DFG node. DFG AI and constant folding attempt to convert it to NewObject when prototype | 
 |         object is null. It offers significant performance boost for `Object.create(null)`. | 
 |  | 
 |                                                          baseline                  patched | 
 |  | 
 |         object-create-null                           53.7940+-1.5297     ^     19.8846+-0.6584        ^ definitely 2.7053x faster | 
 |         object-create-unknown-object-prototype       38.9977+-1.1364     ^     37.2207+-0.6143        ^ definitely 1.0477x faster | 
 |         object-create-untyped-prototype              22.5632+-0.6917           22.2539+-0.6876          might be 1.0139x faster | 
 |  | 
 |         * 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.h: | 
 |         (JSC::DFG::Node::convertToNewObject): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileObjectCreate): | 
 |         * 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::compileObjectCreate): | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::nullPrototypeObjectStructure const): | 
 |         * runtime/ObjectConstructor.cpp: | 
 |  | 
 | 2018-06-02  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for addition operations | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179002 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is implementing support to BigInt Operands into binary "+" | 
 |         and binary "-" operators. Right now, we have limited support to DFG | 
 |         and FTL JIT layers, but we plan to fix this support in future | 
 |         patches. | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::stringToBigInt): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::divide): | 
 |         (JSC::JSBigInt::remainder): | 
 |         (JSC::JSBigInt::add): | 
 |         (JSC::JSBigInt::sub): | 
 |         (JSC::JSBigInt::absoluteAdd): | 
 |         (JSC::JSBigInt::absoluteSub): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::toNumber const): | 
 |         (JSC::JSBigInt::getPrimitiveNumber const): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         * runtime/Operations.cpp: | 
 |         (JSC::jsAddSlowCase): | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsSub): | 
 |  | 
 | 2018-06-01  Wenson Hsieh  <wenson_hsieh@apple.com> | 
 |  | 
 |         Fix the watchOS build after r232385 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186203 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Add a missing header include for JSImmutableButterfly. | 
 |  | 
 |         * runtime/ArrayPrototype.cpp: | 
 |  | 
 | 2018-05-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add Symbol.prototype.description getter | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186053 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Symbol.prototype.description accessor  is now stage 3[1]. | 
 |         This adds a getter to retrieve [[Description]] value from Symbol. | 
 |         Previously, Symbol#toString() returns `Symbol(${description})` value. | 
 |         So users need to extract `description` part if they want it. | 
 |  | 
 |         [1]: https://tc39.github.io/proposal-Symbol-description/ | 
 |  | 
 |         * runtime/Symbol.cpp: | 
 |         (JSC::Symbol::description const): | 
 |         * runtime/Symbol.h: | 
 |         * runtime/SymbolPrototype.cpp: | 
 |         (JSC::tryExtractSymbol): | 
 |         (JSC::symbolProtoGetterDescription): | 
 |         (JSC::symbolProtoFuncToString): | 
 |         (JSC::symbolProtoFuncValueOf): | 
 |  | 
 | 2018-06-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Correct values and members of JSBigInt appropriately | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186196 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         This patch cleans up a bit to select more appropriate values and members of JSBigInt. | 
 |  | 
 |         1. JSBigInt's structure should be StructureIsImmortal. | 
 |         2. JSBigInt::allocationSize should be annotated with `inline`. | 
 |         3. Remove JSBigInt::visitChildren since it is completely the same to JSCell::visitChildren. | 
 |         4. Remove JSBigInt::finishCreation since it is completely the same to JSCell::finishCreation. | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::allocationSize): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::compareToDouble): | 
 |         (JSC::JSBigInt::visitChildren): Deleted. | 
 |         (JSC::JSBigInt::finishCreation): Deleted. | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] InById should be converted to MatchStructure | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185803 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         MatchStructure is introduced for instanceof optimization. But this node | 
 |         is also useful for InById node. This patch converts InById to MatchStructure | 
 |         node with CheckStructures if possible by using InByIdStatus. | 
 |  | 
 |         Added microbenchmarks show improvements. | 
 |  | 
 |                                    baseline                  patched | 
 |  | 
 |         in-by-id-removed       18.1196+-0.8108     ^     16.1702+-0.9773        ^ definitely 1.1206x faster | 
 |         in-by-id-match         16.3912+-0.2608     ^     15.2736+-0.8173        ^ definitely 1.0732x faster | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/InByIdStatus.cpp: Added. | 
 |         (JSC::InByIdStatus::appendVariant): | 
 |         (JSC::InByIdStatus::computeFor): | 
 |         (JSC::InByIdStatus::hasExitSite): | 
 |         (JSC::InByIdStatus::computeForStubInfo): | 
 |         (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback): | 
 |         (JSC::InByIdStatus::filter): | 
 |         (JSC::InByIdStatus::dump const): | 
 |         * bytecode/InByIdStatus.h: Added. | 
 |         (JSC::InByIdStatus::InByIdStatus): | 
 |         (JSC::InByIdStatus::state const): | 
 |         (JSC::InByIdStatus::isSet const): | 
 |         (JSC::InByIdStatus::operator bool const): | 
 |         (JSC::InByIdStatus::isSimple const): | 
 |         (JSC::InByIdStatus::numVariants const): | 
 |         (JSC::InByIdStatus::variants const): | 
 |         (JSC::InByIdStatus::at const): | 
 |         (JSC::InByIdStatus::operator[] const): | 
 |         (JSC::InByIdStatus::takesSlowPath const): | 
 |         * bytecode/InByIdVariant.cpp: Added. | 
 |         (JSC::InByIdVariant::InByIdVariant): | 
 |         (JSC::InByIdVariant::attemptToMerge): | 
 |         (JSC::InByIdVariant::dump const): | 
 |         (JSC::InByIdVariant::dumpInContext const): | 
 |         * bytecode/InByIdVariant.h: Added. | 
 |         (JSC::InByIdVariant::isSet const): | 
 |         (JSC::InByIdVariant::operator bool const): | 
 |         (JSC::InByIdVariant::structureSet const): | 
 |         (JSC::InByIdVariant::structureSet): | 
 |         (JSC::InByIdVariant::conditionSet const): | 
 |         (JSC::InByIdVariant::offset const): | 
 |         (JSC::InByIdVariant::isHit const): | 
 |         * bytecode/PolyProtoAccessChain.h: | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |  | 
 | 2018-06-01  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         move should only emit the move if it's actually needed | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186123 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch relpaces move with moveToDestinationIfNeeded. This | 
 |         will prevent us from emiting moves to the same location. The old | 
 |         move, has been renamed to emitMove and made private. | 
 |  | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::BytecodeGenerator): | 
 |         (JSC::BytecodeGenerator::emitMove): | 
 |         (JSC::BytecodeGenerator::emitGetGlobalPrivate): | 
 |         (JSC::BytecodeGenerator::emitGetAsyncIterator): | 
 |         (JSC::BytecodeGenerator::move): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         (JSC::BytecodeGenerator::move): | 
 |         (JSC::BytecodeGenerator::moveToDestinationIfNeeded): Deleted. | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ThisNode::emitBytecode): | 
 |         (JSC::SuperNode::emitBytecode): | 
 |         (JSC::NewTargetNode::emitBytecode): | 
 |         (JSC::ResolveNode::emitBytecode): | 
 |         (JSC::TaggedTemplateNode::emitBytecode): | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         (JSC::ObjectLiteralNode::emitBytecode): | 
 |         (JSC::EvalFunctionCallNode::emitBytecode): | 
 |         (JSC::FunctionCallResolveNode::emitBytecode): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByValDirect): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toNumber): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toString): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toObject): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_idWithProfile): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isJSArray): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isProxyObject): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isRegExpObject): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isObject): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isDerivedArray): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isMap): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isSet): | 
 |         (JSC::CallFunctionCallDotNode::emitBytecode): | 
 |         (JSC::ApplyFunctionCallDotNode::emitBytecode): | 
 |         (JSC::emitPostIncOrDec): | 
 |         (JSC::PostfixNode::emitBracket): | 
 |         (JSC::PostfixNode::emitDot): | 
 |         (JSC::PrefixNode::emitResolve): | 
 |         (JSC::PrefixNode::emitBracket): | 
 |         (JSC::PrefixNode::emitDot): | 
 |         (JSC::LogicalOpNode::emitBytecode): | 
 |         (JSC::ReadModifyResolveNode::emitBytecode): | 
 |         (JSC::AssignResolveNode::emitBytecode): | 
 |         (JSC::AssignDotNode::emitBytecode): | 
 |         (JSC::AssignBracketNode::emitBytecode): | 
 |         (JSC::FunctionNode::emitBytecode): | 
 |         (JSC::ClassExprNode::emitBytecode): | 
 |         (JSC::DestructuringAssignmentNode::emitBytecode): | 
 |         (JSC::ArrayPatternNode::emitDirectBinding): | 
 |         (JSC::ObjectPatternNode::bindValue const): | 
 |         (JSC::AssignmentElementNode::bindValue const): | 
 |         (JSC::ObjectSpreadExpressionNode::emitBytecode): | 
 |  | 
 | 2018-05-31  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [Baseline] Store constant directly in emit_op_mov | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186182 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         In the old code, we first move a constant to a register and store it to the specified address. | 
 |         But in 64bit JSC, we can directly store a constant to the specified address. This reduces the | 
 |         generated code size. Since the old code was emitting a constant in a code anyway, this change | 
 |         never increases the size of the generated code. | 
 |  | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitGetVirtualRegister): | 
 |         We remove this obsolete comment. Our OSR relies on the fact that values are stored and loaded | 
 |         from the stack. If we transfer values in registers without loading values from the stack, it | 
 |         breaks this assumption. | 
 |  | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_mov): | 
 |  | 
 | 2018-05-31  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "=<" and ">=" relational operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185929 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is introducing support to BigInt operands into ">=" and | 
 |         "<=" operators. | 
 |         Here we introduce ```bigIntCompareResult``` that is a helper function | 
 |         to reuse code between "less than" and "less than or equal" operators. | 
 |  | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/Operations.h: | 
 |         (JSC::bigIntCompareResult): | 
 |         (JSC::bigIntCompare): | 
 |         (JSC::jsLess): | 
 |         (JSC::jsLessEq): | 
 |         (JSC::bigIntCompareLess): Deleted. | 
 |  | 
 | 2018-05-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Cache toString results for CoW arrays | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186160 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This patch makes it so that we cache the result of toString on | 
 |         arrays with a CoW butterfly. This cache lives on Heap and is | 
 |         cleared after every GC. We only cache the toString result when | 
 |         the CoW butterfly doesn't have a hole (currently, all CoW arrays | 
 |         have a hole, but this isn't an invariant we want to rely on). The | 
 |         reason for this is that if there is a hole, the value may be loaded | 
 |         from the prototype, and the cache may produce a stale result. | 
 |          | 
 |         This is a ~4% speedup on the ML subtest in ARES. And is a ~1% overall | 
 |         progression on ARES. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalize): | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         * heap/Heap.h: | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::canUseFastJoin): | 
 |         (JSC::holesMustForwardToPrototype): | 
 |         (JSC::isHole): | 
 |         (JSC::containsHole): | 
 |         (JSC::fastJoin): | 
 |         (JSC::arrayProtoFuncToString): | 
 |  | 
 | 2018-05-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         PutStructure AI rule needs to call didFoldClobberStructures when the incoming value's structure set is clear | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186169 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         If we don't do this, the CFA validation rule about StructureID being | 
 |         clobbered but AI not clobbering or folding a clobber will cause us | 
 |         to crash. Simon was running into this yesterday on arstechnica.com. | 
 |         I couldn't come up with a test case for this, but it's obvious | 
 |         what the issue is by looking at the IR dump at the time of the crash. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |  | 
 | 2018-05-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JSImmutableButterfly should align its variable storage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186159 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         I'm also making the use of reinterpret_cast and bitwise_cast consistent | 
 |         inside of JSImmutableButterfly. I switched everything to use bitwise_cast. | 
 |  | 
 |         * runtime/JSImmutableButterfly.h: | 
 |         (JSC::JSImmutableButterfly::toButterfly const): | 
 |         (JSC::JSImmutableButterfly::fromButterfly): | 
 |         (JSC::JSImmutableButterfly::offsetOfData): | 
 |         (JSC::JSImmutableButterfly::allocationSize): | 
 |  | 
 | 2018-05-31  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         DFGArrayModes needs to know more about CoW arrays | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186162 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch fixes two issues in DFGArrayMode. | 
 |  | 
 |         1) fromObserved was missing switch cases for when the only observed ArrayModes are CopyOnWrite. | 
 |         2) DFGArrayModes needs to track if the ArrayClass is an OriginalCopyOnWriteArray in order | 
 |         to vend an accurate original structure. | 
 |  | 
 |         Additionally, this patch fixes some places in Bytecode parsing where we told the array mode | 
 |         we were doing a read but actually doing a write. Also, DFGArrayMode will now print the | 
 |         action it is expecting when being dumped. | 
 |  | 
 |         * bytecode/ArrayProfile.h: | 
 |         (JSC::hasSeenWritableArray): | 
 |         * dfg/DFGArrayMode.cpp: | 
 |         (JSC::DFG::ArrayMode::fromObserved): | 
 |         (JSC::DFG::ArrayMode::refine const): | 
 |         (JSC::DFG::ArrayMode::originalArrayStructure const): | 
 |         (JSC::DFG::arrayActionToString): | 
 |         (JSC::DFG::arrayClassToString): | 
 |         (JSC::DFG::ArrayMode::dump const): | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGArrayMode.h: | 
 |         (JSC::DFG::ArrayMode::withProfile const): | 
 |         (JSC::DFG::ArrayMode::isJSArray const): | 
 |         (JSC::DFG::ArrayMode::isJSArrayWithOriginalStructure const): | 
 |         (JSC::DFG::ArrayMode::arrayModesWithIndexingShape const): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForArrayify): | 
 |  | 
 | 2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Pass VM& parameter as much as possible | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186085 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         JSCell::vm() is slow compared to ExecState::vm(). That's why we have bunch of functions in JSCell/JSObject that take VM& as a parameter. | 
 |         For example, we have JSCell::structure() and JSCell::structure(VM&), the former retrieves VM& from the cell and invokes structure(VM&). | 
 |         If we can get VM& from ExecState* or the other place, it reduces the inlined code size. | 
 |         This patch attempts to pass VM& parameter to such functions as much as possible. | 
 |  | 
 |         * API/APICast.h: | 
 |         (toJS): | 
 |         (toJSForGC): | 
 |         * API/JSCallbackObjectFunctions.h: | 
 |         (JSC::JSCallbackObject<Parent>::getOwnPropertySlotByIndex): | 
 |         (JSC::JSCallbackObject<Parent>::deletePropertyByIndex): | 
 |         (JSC::JSCallbackObject<Parent>::staticFunctionGetter): | 
 |         * API/JSObjectRef.cpp: | 
 |         (JSObjectIsConstructor): | 
 |         * API/JSTypedArray.cpp: | 
 |         (JSObjectGetTypedArrayBuffer): | 
 |         * API/JSValueRef.cpp: | 
 |         (JSValueIsInstanceOfConstructor): | 
 |         * bindings/ScriptFunctionCall.cpp: | 
 |         (Deprecated::ScriptFunctionCall::call): | 
 |         * bindings/ScriptValue.cpp: | 
 |         (Inspector::jsToInspectorValue): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount): | 
 |         * bytecode/ObjectPropertyConditionSet.cpp: | 
 |         (JSC::generateConditionsForInstanceOf): | 
 |         * bytecode/PropertyCondition.cpp: | 
 |         (JSC::PropertyCondition::isWatchableWhenValid const): | 
 |         (JSC::PropertyCondition::attemptToMakeEquivalenceWithoutBarrier const): | 
 |         * bytecode/StructureStubClearingWatchpoint.cpp: | 
 |         (JSC::StructureStubClearingWatchpoint::fireInternal): | 
 |         * debugger/Debugger.cpp: | 
 |         (JSC::Debugger::detach): | 
 |         * debugger/DebuggerScope.cpp: | 
 |         (JSC::DebuggerScope::create): | 
 |         (JSC::DebuggerScope::put): | 
 |         (JSC::DebuggerScope::deleteProperty): | 
 |         (JSC::DebuggerScope::getOwnPropertyNames): | 
 |         (JSC::DebuggerScope::defineOwnProperty): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::mergeOSREntryValue): | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGArrayMode.cpp: | 
 |         (JSC::DFG::ArrayMode::refine const): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor): | 
 |         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction): | 
 |         (JSC::DFG::ByteCodeParser::check): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::tryGetConstantProperty): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnString): | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::operationPopulateObjectInOSR): | 
 |         * inspector/InjectedScriptManager.cpp: | 
 |         (Inspector::InjectedScriptManager::createInjectedScript): | 
 |         * inspector/JSJavaScriptCallFrame.cpp: | 
 |         (Inspector::JSJavaScriptCallFrame::caller const): | 
 |         (Inspector::JSJavaScriptCallFrame::scopeChain const): | 
 |         * interpreter/CallFrame.cpp: | 
 |         (JSC::CallFrame::wasmAwareLexicalGlobalObject): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::executeProgram): | 
 |         (JSC::Interpreter::executeCall): | 
 |         (JSC::Interpreter::executeConstruct): | 
 |         (JSC::Interpreter::execute): | 
 |         (JSC::Interpreter::executeModuleProgram): | 
 |         * jit/JITOperations.cpp: | 
 |         (JSC::getByVal): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheInByID): | 
 |         * jsc.cpp: | 
 |         (functionDollarAgentReceiveBroadcast): | 
 |         (functionHasCustomProperties): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::setupGetByIdPrototypeCache): | 
 |         (JSC::LLInt::getByVal): | 
 |         (JSC::LLInt::handleHostCall): | 
 |         (JSC::LLInt::llint_throw_stack_overflow_error): | 
 |         * runtime/AbstractModuleRecord.cpp: | 
 |         (JSC::AbstractModuleRecord::finishCreation): | 
 |         * runtime/ArrayConstructor.cpp: | 
 |         (JSC::constructArrayWithSizeQuirk): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::speciesWatchpointIsValid): | 
 |         (JSC::arrayProtoFuncToString): | 
 |         (JSC::arrayProtoFuncToLocaleString): | 
 |         (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint): | 
 |         * runtime/AsyncFunctionConstructor.cpp: | 
 |         (JSC::callAsyncFunctionConstructor): | 
 |         (JSC::constructAsyncFunctionConstructor): | 
 |         * runtime/AsyncGeneratorFunctionConstructor.cpp: | 
 |         (JSC::callAsyncGeneratorFunctionConstructor): | 
 |         (JSC::constructAsyncGeneratorFunctionConstructor): | 
 |         * runtime/BooleanConstructor.cpp: | 
 |         (JSC::constructWithBooleanConstructor): | 
 |         * runtime/ClonedArguments.cpp: | 
 |         (JSC::ClonedArguments::createEmpty): | 
 |         (JSC::ClonedArguments::createWithInlineFrame): | 
 |         (JSC::ClonedArguments::createWithMachineFrame): | 
 |         (JSC::ClonedArguments::createByCopyingFrom): | 
 |         (JSC::ClonedArguments::getOwnPropertySlot): | 
 |         (JSC::ClonedArguments::materializeSpecials): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::tryCachePutToScopeGlobal): | 
 |         (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal): | 
 |         (JSC::CommonSlowPaths::canAccessArgumentIndexQuickly): | 
 |         * runtime/ConstructData.cpp: | 
 |         (JSC::construct): | 
 |         * runtime/DateConstructor.cpp: | 
 |         (JSC::constructWithDateConstructor): | 
 |         * runtime/DatePrototype.cpp: | 
 |         (JSC::dateProtoFuncToJSON): | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::overrideThings): | 
 |         * runtime/Error.cpp: | 
 |         (JSC::getStackTrace): | 
 |         * runtime/ErrorConstructor.cpp: | 
 |         (JSC::Interpreter::constructWithErrorConstructor): | 
 |         (JSC::Interpreter::callErrorConstructor): | 
 |         * runtime/FunctionConstructor.cpp: | 
 |         (JSC::constructWithFunctionConstructor): | 
 |         (JSC::callFunctionConstructor): | 
 |         * runtime/GeneratorFunctionConstructor.cpp: | 
 |         (JSC::callGeneratorFunctionConstructor): | 
 |         (JSC::constructGeneratorFunctionConstructor): | 
 |         * runtime/GenericArgumentsInlines.h: | 
 |         (JSC::GenericArguments<Type>::getOwnPropertySlot): | 
 |         * runtime/InferredStructureWatchpoint.cpp: | 
 |         (JSC::InferredStructureWatchpoint::fireInternal): | 
 |         * runtime/InferredType.cpp: | 
 |         (JSC::InferredType::removeStructure): | 
 |         * runtime/InferredType.h: | 
 |         * runtime/InferredTypeInlines.h: | 
 |         (JSC::InferredType::finalizeUnconditionally): | 
 |         * runtime/IntlCollator.cpp: | 
 |         (JSC::IntlCollator::initializeCollator): | 
 |         * runtime/IntlCollatorConstructor.cpp: | 
 |         (JSC::IntlCollatorConstructorFuncSupportedLocalesOf): | 
 |         * runtime/IntlCollatorPrototype.cpp: | 
 |         (JSC::IntlCollatorPrototypeGetterCompare): | 
 |         * runtime/IntlDateTimeFormat.cpp: | 
 |         (JSC::IntlDateTimeFormat::initializeDateTimeFormat): | 
 |         (JSC::IntlDateTimeFormat::formatToParts): | 
 |         * runtime/IntlDateTimeFormatConstructor.cpp: | 
 |         (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf): | 
 |         * runtime/IntlDateTimeFormatPrototype.cpp: | 
 |         (JSC::IntlDateTimeFormatPrototypeGetterFormat): | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |         (JSC::IntlNumberFormat::formatToParts): | 
 |         * runtime/IntlNumberFormatConstructor.cpp: | 
 |         (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf): | 
 |         * runtime/IntlNumberFormatPrototype.cpp: | 
 |         (JSC::IntlNumberFormatPrototypeGetterFormat): | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::canonicalizeLocaleList): | 
 |         (JSC::defaultLocale): | 
 |         (JSC::lookupSupportedLocales): | 
 |         (JSC::intlObjectFuncGetCanonicalLocales): | 
 |         * runtime/IntlPluralRules.cpp: | 
 |         (JSC::IntlPluralRules::initializePluralRules): | 
 |         (JSC::IntlPluralRules::resolvedOptions): | 
 |         * runtime/IntlPluralRulesConstructor.cpp: | 
 |         (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf): | 
 |         * runtime/IteratorOperations.cpp: | 
 |         (JSC::iteratorNext): | 
 |         (JSC::iteratorClose): | 
 |         (JSC::iteratorForIterable): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::shiftCountWithArrayStorage): | 
 |         (JSC::JSArray::unshiftCountWithArrayStorage): | 
 |         (JSC::JSArray::isIteratorProtocolFastAndNonObservable): | 
 |         * runtime/JSArrayBufferConstructor.cpp: | 
 |         (JSC::JSArrayBufferConstructor::finishCreation): | 
 |         (JSC::constructArrayBuffer): | 
 |         * runtime/JSArrayBufferPrototype.cpp: | 
 |         (JSC::arrayBufferProtoFuncSlice): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::unsharedJSBuffer): | 
 |         (JSC::JSArrayBufferView::possiblySharedJSBuffer): | 
 |         * runtime/JSAsyncFunction.cpp: | 
 |         (JSC::JSAsyncFunction::createImpl): | 
 |         (JSC::JSAsyncFunction::create): | 
 |         (JSC::JSAsyncFunction::createWithInvalidatedReallocationWatchpoint): | 
 |         * runtime/JSAsyncGeneratorFunction.cpp: | 
 |         (JSC::JSAsyncGeneratorFunction::createImpl): | 
 |         (JSC::JSAsyncGeneratorFunction::create): | 
 |         (JSC::JSAsyncGeneratorFunction::createWithInvalidatedReallocationWatchpoint): | 
 |         * runtime/JSBoundFunction.cpp: | 
 |         (JSC::boundThisNoArgsFunctionCall): | 
 |         (JSC::boundFunctionCall): | 
 |         (JSC::boundThisNoArgsFunctionConstruct): | 
 |         (JSC::boundFunctionConstruct): | 
 |         (JSC::getBoundFunctionStructure): | 
 |         (JSC::JSBoundFunction::create): | 
 |         (JSC::JSBoundFunction::boundArgsCopy): | 
 |         * runtime/JSCJSValue.cpp: | 
 |         (JSC::JSValue::putToPrimitive): | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::setStructure): | 
 |         (JSC::JSCell::methodTable const): | 
 |         (JSC::JSCell::toBoolean const): | 
 |         * runtime/JSFunction.h: | 
 |         (JSC::JSFunction::createImpl): | 
 |         * runtime/JSGeneratorFunction.cpp: | 
 |         (JSC::JSGeneratorFunction::createImpl): | 
 |         (JSC::JSGeneratorFunction::create): | 
 |         (JSC::JSGeneratorFunction::createWithInvalidatedReallocationWatchpoint): | 
 |         * runtime/JSGenericTypedArrayViewConstructorInlines.h: | 
 |         (JSC::constructGenericTypedArrayViewWithArguments): | 
 |         (JSC::constructGenericTypedArrayView): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): | 
 |         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h: | 
 |         (JSC::genericTypedArrayViewProtoFuncSlice): | 
 |         (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::exposeDollarVM): | 
 |         (JSC::JSGlobalObject::finishCreation): | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/JSGlobalObjectFunctions.cpp: | 
 |         (JSC::globalFuncEval): | 
 |         * runtime/JSInternalPromise.cpp: | 
 |         (JSC::JSInternalPromise::then): | 
 |         * runtime/JSInternalPromiseConstructor.cpp: | 
 |         (JSC::constructPromise): | 
 |         * runtime/JSJob.cpp: | 
 |         (JSC::JSJobMicrotask::run): | 
 |         * runtime/JSLexicalEnvironment.cpp: | 
 |         (JSC::JSLexicalEnvironment::getOwnPropertySlot): | 
 |         (JSC::JSLexicalEnvironment::put): | 
 |         * runtime/JSMap.cpp: | 
 |         (JSC::JSMap::isIteratorProtocolFastAndNonObservable): | 
 |         * runtime/JSMapIterator.cpp: | 
 |         (JSC::JSMapIterator::createPair): | 
 |         * runtime/JSModuleLoader.cpp: | 
 |         (JSC::JSModuleLoader::provideFetch): | 
 |         (JSC::JSModuleLoader::loadAndEvaluateModule): | 
 |         (JSC::JSModuleLoader::loadModule): | 
 |         (JSC::JSModuleLoader::linkAndEvaluateModule): | 
 |         (JSC::JSModuleLoader::requestImportModule): | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::JSONProtoFuncParse): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::putInlineSlow): | 
 |         (JSC::JSObject::putByIndex): | 
 |         (JSC::JSObject::notifyPresenceOfIndexedAccessors): | 
 |         (JSC::JSObject::createInitialIndexedStorage): | 
 |         (JSC::JSObject::createArrayStorage): | 
 |         (JSC::JSObject::convertUndecidedToArrayStorage): | 
 |         (JSC::JSObject::convertInt32ToArrayStorage): | 
 |         (JSC::JSObject::convertDoubleToArrayStorage): | 
 |         (JSC::JSObject::convertContiguousToArrayStorage): | 
 |         (JSC::JSObject::convertFromCopyOnWrite): | 
 |         (JSC::JSObject::ensureWritableInt32Slow): | 
 |         (JSC::JSObject::ensureWritableDoubleSlow): | 
 |         (JSC::JSObject::ensureWritableContiguousSlow): | 
 |         (JSC::JSObject::ensureArrayStorageSlow): | 
 |         (JSC::JSObject::setPrototypeDirect): | 
 |         (JSC::JSObject::deleteProperty): | 
 |         (JSC::callToPrimitiveFunction): | 
 |         (JSC::JSObject::hasInstance): | 
 |         (JSC::JSObject::getOwnNonIndexPropertyNames): | 
 |         (JSC::JSObject::preventExtensions): | 
 |         (JSC::JSObject::isExtensible): | 
 |         (JSC::JSObject::reifyAllStaticProperties): | 
 |         (JSC::JSObject::fillGetterPropertySlot): | 
 |         (JSC::JSObject::defineOwnIndexedProperty): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLength): | 
 |         (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage): | 
 |         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength): | 
 |         (JSC::JSObject::getNewVectorLength): | 
 |         (JSC::JSObject::increaseVectorLength): | 
 |         (JSC::JSObject::reallocateAndShrinkButterfly): | 
 |         (JSC::JSObject::shiftButterflyAfterFlattening): | 
 |         (JSC::JSObject::anyObjectInChainMayInterceptIndexedAccesses const): | 
 |         (JSC::JSObject::prototypeChainMayInterceptStoreTo): | 
 |         (JSC::JSObject::needsSlowPutIndexing const): | 
 |         (JSC::JSObject::suggestedArrayStorageTransition const): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::mayInterceptIndexedAccesses): | 
 |         (JSC::JSObject::hasIndexingHeader const): | 
 |         (JSC::JSObject::hasCustomProperties): | 
 |         (JSC::JSObject::hasGetterSetterProperties): | 
 |         (JSC::JSObject::hasCustomGetterSetterProperties): | 
 |         (JSC::JSObject::isExtensibleImpl): | 
 |         (JSC::JSObject::isStructureExtensible): | 
 |         (JSC::JSObject::indexingShouldBeSparse): | 
 |         (JSC::JSObject::staticPropertiesReified): | 
 |         (JSC::JSObject::globalObject const): | 
 |         (JSC::JSObject::finishCreation): | 
 |         (JSC::JSNonFinalObject::finishCreation): | 
 |         (JSC::getCallData): | 
 |         (JSC::getConstructData): | 
 |         (JSC::JSObject::getOwnNonIndexPropertySlot): | 
 |         (JSC::JSObject::putOwnDataProperty): | 
 |         (JSC::JSObject::putOwnDataPropertyMayBeIndex): | 
 |         (JSC::JSObject::butterflyPreCapacity): | 
 |         (JSC::JSObject::butterflyTotalSize): | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |         * runtime/JSPromise.cpp: | 
 |         (JSC::JSPromise::initialize): | 
 |         (JSC::JSPromise::resolve): | 
 |         * runtime/JSPromiseConstructor.cpp: | 
 |         (JSC::constructPromise): | 
 |         * runtime/JSPromiseDeferred.cpp: | 
 |         (JSC::newPromiseCapability): | 
 |         (JSC::callFunction): | 
 |         * runtime/JSScope.cpp: | 
 |         (JSC::abstractAccess): | 
 |         * runtime/JSScope.h: | 
 |         (JSC::JSScope::globalObject): Deleted. | 
 |         Remove this JSScope::globalObject function since it is completely the same to JSObject::globalObject(). | 
 |  | 
 |         * runtime/JSSet.cpp: | 
 |         (JSC::JSSet::isIteratorProtocolFastAndNonObservable): | 
 |         * runtime/JSSetIterator.cpp: | 
 |         (JSC::JSSetIterator::createPair): | 
 |         * runtime/JSStringIterator.cpp: | 
 |         (JSC::JSStringIterator::clone): | 
 |         * runtime/Lookup.cpp: | 
 |         (JSC::reifyStaticAccessor): | 
 |         (JSC::setUpStaticFunctionSlot): | 
 |         * runtime/Lookup.h: | 
 |         (JSC::getStaticPropertySlotFromTable): | 
 |         (JSC::replaceStaticPropertySlot): | 
 |         (JSC::reifyStaticProperty): | 
 |         * runtime/MapConstructor.cpp: | 
 |         (JSC::constructMap): | 
 |         * runtime/NumberConstructor.cpp: | 
 |         (JSC::NumberConstructor::finishCreation): | 
 |         * runtime/ObjectConstructor.cpp: | 
 |         (JSC::constructObject): | 
 |         (JSC::objectConstructorAssign): | 
 |         (JSC::toPropertyDescriptor): | 
 |         * runtime/ObjectPrototype.cpp: | 
 |         (JSC::objectProtoFuncDefineGetter): | 
 |         (JSC::objectProtoFuncDefineSetter): | 
 |         (JSC::objectProtoFuncToLocaleString): | 
 |         * runtime/Operations.cpp: | 
 |         (JSC::jsIsFunctionType): Deleted. | 
 |         Replace it with JSValue::isFunction(VM&). | 
 |  | 
 |         * runtime/Operations.h: | 
 |         * runtime/ProgramExecutable.cpp: | 
 |         (JSC::ProgramExecutable::initializeGlobalProperties): | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::constructWithRegExpConstructor): | 
 |         (JSC::callRegExpConstructor): | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::processUnverifiedStackTraces): | 
 |         (JSC::SamplingProfiler::StackFrame::nameFromCallee): | 
 |         * runtime/ScopedArguments.cpp: | 
 |         (JSC::ScopedArguments::overrideThings): | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::newCodeBlockFor): | 
 |         (JSC::ScriptExecutable::prepareForExecutionImpl): | 
 |         * runtime/SetConstructor.cpp: | 
 |         (JSC::constructSet): | 
 |         * runtime/SparseArrayValueMap.cpp: | 
 |         (JSC::SparseArrayValueMap::putEntry): | 
 |         (JSC::SparseArrayValueMap::putDirect): | 
 |         * runtime/StringConstructor.cpp: | 
 |         (JSC::constructWithStringConstructor): | 
 |         * runtime/StringPrototype.cpp: | 
 |         (JSC::replaceUsingRegExpSearch): | 
 |         (JSC::replaceUsingStringSearch): | 
 |         (JSC::stringProtoFuncIterator): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::materializePropertyTable): | 
 |         (JSC::Structure::willStoreValueSlow): | 
 |         * runtime/StructureCache.cpp: | 
 |         (JSC::StructureCache::emptyStructureForPrototypeFromBaseStructure): | 
 |         * runtime/StructureInlines.h: | 
 |         (JSC::Structure::get): | 
 |         * runtime/WeakMapConstructor.cpp: | 
 |         (JSC::constructWeakMap): | 
 |         * runtime/WeakSetConstructor.cpp: | 
 |         (JSC::constructWeakSet): | 
 |         * tools/HeapVerifier.cpp: | 
 |         (JSC::HeapVerifier::reportCell): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionGlobalObjectForObject): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::finalizeCreation): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJSException): | 
 |         * wasm/js/WebAssemblyCompileErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyCompileError): | 
 |         (JSC::callJSWebAssemblyCompileError): | 
 |         * wasm/js/WebAssemblyLinkErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyLinkError): | 
 |         (JSC::callJSWebAssemblyLinkError): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::evaluate): | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::instantiate): | 
 |         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyRuntimeError): | 
 |         (JSC::callJSWebAssemblyRuntimeError): | 
 |         * wasm/js/WebAssemblyToJSCallee.cpp: | 
 |         (JSC::WebAssemblyToJSCallee::create): | 
 |  | 
 | 2018-05-30  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DFG combined liveness needs to say that the machine CodeBlock's arguments are live | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186121 | 
 |         <rdar://problem/39377796> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         DFG's combined liveness was reporting that the machine CodeBlock's |this| | 
 |         argument was dead at certain points in the program. However, a CodeBlock's | 
 |         arguments are considered live for the entire function. This fixes a bug | 
 |         where object allocation sinking phase skipped materializing an allocation | 
 |         because it thought that the argument it was associated with, |this|, was dead. | 
 |  | 
 |         * dfg/DFGCombinedLiveness.cpp: | 
 |         (JSC::DFG::liveNodesAtHead): | 
 |  | 
 | 2018-05-30  Daniel Bates  <dabates@apple.com> | 
 |  | 
 |         Web Inspector: Annotate Same-Site cookies | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184897 | 
 |         <rdar://problem/35178209> | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         Update protocol to include cookie Same-Site policy. | 
 |  | 
 |         * inspector/protocol/Page.json: | 
 |  | 
 | 2018-05-29  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Error instances should not strongly hold onto StackFrames | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185996 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Previously, we would hold onto all the StackFrames until the the user | 
 |         looked at one of the properties on the Error object. This patch makes us | 
 |         only weakly retain the StackFrames and collect all the information | 
 |         if we are about to collect any frame. | 
 |  | 
 |         This patch also adds a method to $vm that returns the heaps count | 
 |         of live global objects. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::stackTraceAsString): | 
 |         * interpreter/Interpreter.h: | 
 |         * runtime/Error.cpp: | 
 |         (JSC::addErrorInfo): | 
 |         * runtime/ErrorInstance.cpp: | 
 |         (JSC::ErrorInstance::finalizeUnconditionally): | 
 |         (JSC::ErrorInstance::computeErrorInfo): | 
 |         (JSC::ErrorInstance::materializeErrorInfoIfNeeded): | 
 |         (JSC::ErrorInstance::visitChildren): Deleted. | 
 |         * runtime/ErrorInstance.h: | 
 |         (JSC::ErrorInstance::subspaceFor): | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::getCalculatedDisplayName): | 
 |         * runtime/StackFrame.h: | 
 |         (JSC::StackFrame::isMarked const): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionGlobalObjectCount): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-05-30  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         LLInt get_by_id prototype caching doesn't properly handle changes | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186112 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         The caching would sometimes fail to track that a prototype had changed | 
 |         and wouldn't update its set of watchpoints. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finalizeLLIntInlineCaches): | 
 |         * bytecode/CodeBlock.h: | 
 |         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h: | 
 |         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const): | 
 |         * bytecode/ObjectPropertyConditionSet.h: | 
 |         (JSC::ObjectPropertyConditionSet::size const): | 
 |         * bytecode/Watchpoint.h: | 
 |         (JSC::Watchpoint::Watchpoint): Deleted. | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::setupGetByIdPrototypeCache): | 
 |  | 
 | 2018-05-30  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "%" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184327 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         We are introducing the support of BigInt into remainder (a.k.a mod) | 
 |         operation. | 
 |  | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::remainder): | 
 |         (JSC::JSBigInt::rightTrim): | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-05-30  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         AI for Atomics.load() is too conservative in always clobbering world | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185738 | 
 |         <rdar://problem/40342214> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         It fails the assertion that Fil added for catching disagreements between | 
 |         AI and clobberize. This patch fixes that. You'd run into this if you | 
 |         manually enabled SAB in a build and ran any SAB tests. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |  | 
 | 2018-05-30  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION(r232212): Broke Win32 Builds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186061 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Changed Windows builds with the JIT disabled to generate and use LLIntAssembly.h | 
 |         instead of LowLevelInterpreterWin.asm. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-05-30  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Fix build on MIPS32r1 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185944 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Only use instructions on MIPS32r2 or later. mthc1 and mfhc1 are not supported | 
 |         on MIPS32r1. | 
 |  | 
 |         * offlineasm/mips.rb: | 
 |  | 
 | 2018-05-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add a version of JSVirtualMachine shrinkFootprint that runs when the VM goes idle | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186064 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         shrinkFootprint was implemented as: | 
 |         ``` | 
 |         sanitizeStackForVM(this); | 
 |         deleteAllCode(DeleteAllCodeIfNotCollecting); | 
 |         heap.collectNow(Synchronousness::Sync); | 
 |         WTF::releaseFastMallocFreeMemory(); | 
 |         ``` | 
 |          | 
 |         However, for correctness reasons, deleteAllCode is implemented to do | 
 |         work when the VM is idle: no JS is running on the stack. This means | 
 |         that if shrinkFootprint is called when JS is running on the stack, it | 
 |         ends up freeing less memory than it could have if it waited to run until | 
 |         the VM goes idle. | 
 |          | 
 |         This patch makes it so we wait until idle before doing work. I'm seeing a | 
 |         10% footprint progression when testing this against a client of the JSC SPI. | 
 |          | 
 |         Because this is a semantic change in how the SPI works, this patch | 
 |         adds new SPI named shrinkFootprintWhenIdle. The plan is to move | 
 |         all clients of the shrinkFootprint SPI to shrinkFootprintWhenIdle. | 
 |         Once that happens, we will delete shrinkFootprint. Until then, | 
 |         we make shrinkFootprint do exactly what shrinkFootprintWhenIdle does. | 
 |  | 
 |         * API/JSVirtualMachine.mm: | 
 |         (-[JSVirtualMachine shrinkFootprint]): | 
 |         (-[JSVirtualMachine shrinkFootprintWhenIdle]): | 
 |         * API/JSVirtualMachinePrivate.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::shrinkFootprintWhenIdle): | 
 |         (JSC::VM::shrinkFootprint): Deleted. | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         shrinkFootprint needs to request a full collection | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186069 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::shrinkFootprint): | 
 |  | 
 | 2018-05-29  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "<" and ">" relational operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185379 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is changing the ``jsLess``` operation to follow the | 
 |         semantics of Abstract Relational Comparison[1] that supports BigInt. | 
 |         For that, we create 2 new helper functions ```bigIntCompareLess``` and | 
 |         ```toPrimitiveNumeric``` that considers BigInt as a valid type to be | 
 |         compared. | 
 |  | 
 |         [1] - https://tc39.github.io/proposal-bigint/#sec-abstract-relational-comparison | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::unequalSign): | 
 |         (JSC::JSBigInt::absoluteGreater): | 
 |         (JSC::JSBigInt::absoluteLess): | 
 |         (JSC::JSBigInt::compare): | 
 |         (JSC::JSBigInt::absoluteCompare): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::isPrimitive const): | 
 |         * runtime/Operations.h: | 
 |         (JSC::bigIntCompareLess): | 
 |         (JSC::toPrimitiveNumeric): | 
 |         (JSC::jsLess): | 
 |  | 
 | 2018-05-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [Baseline] Merge loading functionalities | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185907 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch unifies emitXXXLoad functions in 32bit and 64bit. | 
 |  | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitDoubleGetByVal): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitDoubleLoad): | 
 |         (JSC::JIT::emitContiguousLoad): | 
 |         (JSC::JIT::emitArrayStorageLoad): | 
 |         (JSC::JIT::emitIntTypedArrayGetByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayGetByVal): | 
 |         Define register usage first, and share the same code in 32bit and 64bit. | 
 |  | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         Now C-stack is always enabled in JIT platform and temporary registers increases from 5 to 6 in x86. | 
 |         We can remove this special handling. | 
 |  | 
 |         (JSC::JIT::emitContiguousLoad): Deleted. | 
 |         (JSC::JIT::emitDoubleLoad): Deleted. | 
 |         (JSC::JIT::emitArrayStorageLoad): Deleted. | 
 |  | 
 | 2018-05-29  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JSC should put bmalloc's scavenger into mini mode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185988 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         When we InitializeThreading, we'll now enable bmalloc's mini mode | 
 |         if the VM is in mini mode. This is an 8-10% progression on the footprint | 
 |         at end score in run-testmem, making it a 4-5% memory score progression. | 
 |         It's between a 0-1% regression in its time score. | 
 |  | 
 |         * runtime/InitializeThreading.cpp: | 
 |         (JSC::initializeThreading): | 
 |  | 
 | 2018-05-29  Caitlin Potter  <caitp@igalia.com> | 
 |  | 
 |         [JSC] Fix Array.prototype.concat fast case when single argument is Proxy | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184267 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Before this patch, the fast case for Array.prototype.concat was taken if | 
 |         there was a single argument passed to the function, which is either a | 
 |         non-JSCell, or an ObjectType JSCell not marked as concat-spreadable. | 
 |         This incorrectly prevented Proxy objects from being spread when | 
 |         they were the only argument passed to A.prototype.concat(), violating ECMA-262. | 
 |  | 
 |         * builtins/ArrayPrototype.js: | 
 |         (concat): | 
 |  | 
 | 2018-05-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] JSBigInt::digitDiv has undefined behavior which causes test failures | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186022 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         digitDiv performs Value64Bit >> 64 / Value32Bit >> 32, which is undefined behavior. And zero mask | 
 |         creation has an issue (`s` should be casted to signed one before negating). They cause test failures | 
 |         in non x86 / x86_64 environments. x86 and x86_64 work well since they have a fast path written | 
 |         in asm. | 
 |  | 
 |         This patch fixes digitDiv by carefully avoiding undefined behaviors. We mask the left value of the | 
 |         rshift with `digitBits - 1`, which makes `digitBits` 0 while it keeps 0 <= n < digitBits values. | 
 |         This makes the target rshift well-defined in C++. While produced value by the rshift covers 0 <= `s` < 64 (32 | 
 |         in 32bit envirnoment) cases, this rshift does not shift if `s` is 0. sZeroMask clears the value | 
 |         if `s` is 0, so that `s == 0` case is also covered. Note that `s == 64` never happens since `divisor` | 
 |         is never 0 here. We add assertion for that. We also fixes `sZeroMask` calculation. | 
 |  | 
 |         This patch also fixes naming convention for constant values. | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::digitMul): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-05-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Add clz32 / clz64 for MSVC | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186023 | 
 |  | 
 |         Reviewed by Daniel Bates. | 
 |  | 
 |         Move clz32 and clz64 to WTF. | 
 |  | 
 |         * runtime/MathCommon.h: | 
 |         (JSC::clz32): Deleted. | 
 |         (JSC::clz64): Deleted. | 
 |  | 
 | 2018-05-27  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement "+" and "-" unary operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182214 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This Patch is implementing support to "-" unary operation on BigInt. | 
 |         It is also changing the logic of ASTBuilder::makeNegateNode to | 
 |         calculate BigInt literals with properly sign, avoiding | 
 |         unecessary operation. It required a refactoring into | 
 |         JSBigInt::parseInt to consider the sign as parameter. | 
 |  | 
 |         We are also introducing a new DFG Node called ValueNegate to handle BigInt negate | 
 |         operations. With the introduction of BigInt, it is not true | 
 |         that every negate operation returns a Number. As ArithNegate is a | 
 |         node that considers its result is always a Number, like all other | 
 |         Arith<Operation>, we decided to keep this consistency and use ValueNegate when | 
 |         speculation indicates that the operand is a BigInt. | 
 |         This design is following the same distinction between ArithAdd and | 
 |         ValueAdd. Also, this new node will make simpler the introduction of | 
 |         optimizations when we create speculation paths for BigInt in future | 
 |         patches. | 
 |  | 
 |         In the case of "+" unary operation on BigInt, the current semantic we already have | 
 |         is correctly, since it needs to throw TypeError because of ToNumber call[1]. | 
 |         In such case, we are adding tests to verify other edge cases. | 
 |  | 
 |         [1] - https://tc39.github.io/proposal-bigint/#sec-unary-plus-operator | 
 |  | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::addBigIntConstant): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::BigIntNode::jsValue const): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * 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::fixupNode): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::arithNodeFlags): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileValueNegate): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithNegate): | 
 |         * 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::compileValueNegate): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate): | 
 |         * jit/JITOperations.cpp: | 
 |         * parser/ASTBuilder.h: | 
 |         (JSC::ASTBuilder::createBigIntWithSign): | 
 |         (JSC::ASTBuilder::createBigIntFromUnaryOperation): | 
 |         (JSC::ASTBuilder::makeNegateNode): | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::BigIntNode::BigIntNode): | 
 |         * parser/Nodes.h: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::updateArithProfileForUnaryArithOp): | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::parseInt): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::strictEqualSlowCaseInline): | 
 |  | 
 | 2018-05-27  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         Tried to fix the 32-bit !ASSERT_DISABLED build after r232211. | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |  | 
 | 2018-05-26  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Rename Array#flatten to flat | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186012 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Rename Array#flatten to Array#flat. This rename is done in TC39 since flatten | 
 |         conflicts with the mootools' function name. | 
 |  | 
 |         * builtins/ArrayPrototype.js: | 
 |         (globalPrivate.flatIntoArray): | 
 |         (flat): | 
 |         (globalPrivate.flatIntoArrayWithCallback): | 
 |         (flatMap): | 
 |         (globalPrivate.flattenIntoArray): Deleted. | 
 |         (flatten): Deleted. | 
 |         (globalPrivate.flattenIntoArrayWithCallback): Deleted. | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::ArrayPrototype::finishCreation): | 
 |  | 
 | 2018-05-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         for-in loops should preserve and restore the TDZ stack for each of its internal loops. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185995 | 
 |         <rdar://problem/40173142> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This is because there's no guarantee that any of the loop bodies will be | 
 |         executed.  Hence, there's no guarantee that the TDZ variables will have been | 
 |         initialized after each loop body. | 
 |  | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::preserveTDZStack): | 
 |         (JSC::BytecodeGenerator::restoreTDZStack): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ForInNode::emitBytecode): | 
 |  | 
 | 2018-05-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         MachineContext's instructionPointer() should handle null PCs correctly. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=186004 | 
 |         <rdar://problem/40570067> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         instructionPointer() returns a MacroAssemblerCodePtr<CFunctionPtrTag>.  However, | 
 |         MacroAssemblerCodePtr's constructor does not accept a null pointer value and will | 
 |         assert accordingly with a debug ASSERT.  This is inconsequential for release | 
 |         builds, but to avoid this assertion failure, we should check for a null PC and | 
 |         return MacroAssemblerCodePtr<CFunctionPtrTag>(nullptr) instead (which uses the | 
 |         MacroAssemblerCodePtr(std::nullptr_t) version of the constructor instead). | 
 |  | 
 |         Alternatively, we can change all of MacroAssemblerCodePtr's constructors to check | 
 |         for null pointers, but I rather not do that yet.  In general, | 
 |         MacroAssemblerCodePtrs are constructed with non-null pointers, and I prefer to | 
 |         leave it that way for now. | 
 |  | 
 |         Note: this assertion failure only manifests when we have signal traps enabled, | 
 |         and encounter a null pointer deref. | 
 |  | 
 |         * runtime/MachineContext.h: | 
 |         (JSC::MachineContext::instructionPointer): | 
 |  | 
 | 2018-05-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Enforce invariant that GetterSetter objects are invariant. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185968 | 
 |         <rdar://problem/40541416> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         The code already assumes the invariant that GetterSetter objects are immutable. | 
 |         For example, the use of @tryGetById in builtins expect this invariant to be true. | 
 |         The existing code mostly enforces this except for one case: JSObject's | 
 |         validateAndApplyPropertyDescriptor, where it will re-use the same GetterSetter | 
 |         object. | 
 |  | 
 |         This patch enforces this invariant by removing the setGetter and setSetter methods | 
 |         of GetterSetter, and requiring the getter/setter callback functions to be | 
 |         specified at construction time. | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * runtime/GetterSetter.cpp: | 
 |         (JSC::GetterSetter::withGetter): Deleted. | 
 |         (JSC::GetterSetter::withSetter): Deleted. | 
 |         * runtime/GetterSetter.h: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::putIndexedDescriptor): | 
 |         (JSC::JSObject::putDirectNativeIntrinsicGetter): | 
 |         (JSC::putDescriptor): | 
 |         (JSC::validateAndApplyPropertyDescriptor): | 
 |         * runtime/JSTypedArrayViewPrototype.cpp: | 
 |         (JSC::JSTypedArrayViewPrototype::finishCreation): | 
 |         * runtime/Lookup.cpp: | 
 |         (JSC::reifyStaticAccessor): | 
 |         * runtime/PropertyDescriptor.cpp: | 
 |         (JSC::PropertyDescriptor::slowGetterSetter): | 
 |  | 
 | 2018-05-25  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make JSC have a mini mode that kicks in when the JIT is disabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185931 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch makes JSC have a mini VM mode. This currently only kicks in | 
 |         when the process can't JIT. Mini VM now means a few things: | 
 |         - We always use a 1.27x heap growth factor. This number was the best tradeoff | 
 |           between memory use progression and time regression in run-testmem. We may | 
 |           want to tune this more in the future as we make other mini VM changes. | 
 |         - We always sweep synchronously. | 
 |         - We disable generational GC. | 
 |          | 
 |         I'm going to continue to extend what mini VM mode means in future changes. | 
 |          | 
 |         This patch is a 50% memory progression and an ~8-9% time regression | 
 |         on run-testmem when running in mini VM mode with the JIT disabled. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::collectNow): | 
 |         (JSC::Heap::finalize): | 
 |         (JSC::Heap::useGenerationalGC): | 
 |         (JSC::Heap::shouldSweepSynchronously): | 
 |         (JSC::Heap::shouldDoFullCollection): | 
 |         * heap/Heap.h: | 
 |         * runtime/Options.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::isInMiniMode): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-25  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Have a memory test where we can validate JSCs mini memory mode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185932 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch adds the testmem CLI. It takes as input a file to run | 
 |         and the number of iterations to run it (by default it runs it | 
 |         20 times). Each iteration runs in a new JSContext. Each JSContext | 
 |         belongs to a VM that is created once. When finished, the CLI dumps | 
 |         out the peak memory usage of the process, the memory usage at the end | 
 |         of running all the iterations of the process, and the total time it | 
 |         took to run all the iterations. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * testmem: Added. | 
 |         * testmem/testmem.mm: Added. | 
 |         (description): | 
 |         (Footprint::now): | 
 |         (main): | 
 |  | 
 | 2018-05-25  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         Fix issues with -dealloc methods found by clang static analyzer | 
 |         <https://webkit.org/b/185887> | 
 |  | 
 |         Reviewed by Joseph Pecoraro. | 
 |  | 
 |         * API/JSValue.mm: | 
 |         (-[JSValue dealloc]): | 
 |         (-[JSValue description]): | 
 |         - Move method implementations from (Internal) category to the | 
 |           main category since these are public API.  This fixes the | 
 |           false positive warning about a missing -dealloc method. | 
 |  | 
 | 2018-05-24  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [Baseline] Remove a hack for DCE removal of NewFunction | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185945 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This `undefined` check in baseline is originally introduced in r177871. The problem was, | 
 |         when NewFunction is removed in DFG DCE, its referencing scope DFG node  is also removed. | 
 |         While op_new_func_xxx want to have scope for function creation, DFG OSR exit cannot | 
 |         retrieve this into the stack since the scope is not referenced from anywhere. | 
 |  | 
 |         In r177871, we fixed this by accepting `undefined` scope in the baseline op_new_func_xxx | 
 |         implementation. But rather than that, just emitting `Phantom` for this scope is clean | 
 |         and consistent to the other DFG nodes like GetClosureVar. | 
 |  | 
 |         This patch emits Phantom instead, and removes unnecessary `undefined` check in baseline. | 
 |         While we emit Phantom, it is not testable since NewFunction is guarded by MovHint which | 
 |         is not removed in DFG. And in FTL, NewFunction will be converted to PhantomNewFunction | 
 |         if it is not referenced. And scope node is kept by PutHint. But emitting Phantom is nice | 
 |         since it conservatively guards the scope, and it does not introduce any additional overhead | 
 |         compared to the current status. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emitNewFuncExprCommon): | 
 |  | 
 | 2018-05-23  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Expose $vm if window.internals is exposed | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185900 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This is useful for testing vm internals when running LayoutTests. | 
 |  | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         (JSC::JSGlobalObject::exposeDollarVM): | 
 |         * runtime/JSGlobalObject.h: | 
 |  | 
 | 2018-05-23  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Define length on CoW array should properly convert to writable | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185927 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::setLength): | 
 |  | 
 | 2018-05-23  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         InPlaceAbstractState should filter variables at the tail from a GetLocal by their flush format | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185923 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Previously, we could confuse AI by overly broadening a type. This happens when a block in a | 
 |         loop has a local mutated following a GetLocal but never SetLocaled to the stack. For example, | 
 |  | 
 |         Block 1: | 
 |         @1: GetLocal(loc42, FlushedInt32); | 
 |         @2: PutStructure(Check: Cell: @1); | 
 |         @3: Jump(Block 1); | 
 |  | 
 |         Would cause us to claim that loc42 could be either an int32 or a some cell. However, | 
 |         the type of an local cannot change without writing to it. | 
 |  | 
 |         This fixes a crash in destructuring-rest-element.js | 
 |  | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::endBasicBlock): | 
 |  | 
 | 2018-05-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Speed up JetStream/base64 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185914 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         Make allocation fast paths ALWAYS_INLINE. | 
 |          | 
 |         This is a 1% speed-up on SunSpider, mostly because of base64. It also speeds up pdfjs by | 
 |         ~6%. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * heap/AllocatorInlines.h: | 
 |         (JSC::Allocator::allocate const): | 
 |         * heap/CompleteSubspace.cpp: | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): Deleted. | 
 |         * heap/CompleteSubspace.h: | 
 |         * heap/CompleteSubspaceInlines.h: Added. | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): | 
 |         * heap/FreeListInlines.h: | 
 |         (JSC::FreeList::allocate): | 
 |         * heap/IsoSubspace.cpp: | 
 |         (JSC::IsoSubspace::allocateNonVirtual): Deleted. | 
 |         * heap/IsoSubspace.h: | 
 |         (JSC::IsoSubspace::allocatorForNonVirtual): | 
 |         * heap/IsoSubspaceInlines.h: Added. | 
 |         (JSC::IsoSubspace::allocateNonVirtual): | 
 |         * runtime/JSCellInlines.h: | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-23  Rick Waldron  <waldron.rick@gmail.com> | 
 |  | 
 |         Conversion misspelled "Convertion" in error message string | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185436 | 
 |  | 
 |         Reviewed by Saam Barati, Michael Saboff | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::toNumber const): | 
 |  | 
 | 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Clean up stringGetByValStubGenerator | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185864 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We clean up stringGetByValStubGenerator. | 
 |  | 
 |         1. Unify 32bit and 64bit implementations. | 
 |         2. Rename stringGetByValStubGenerator to stringGetByValGenerator, move it to ThunkGenerators.cpp. | 
 |         3. Remove string type check since this code is invoked only when we know regT0 is JSString*. | 
 |         4. Do not tag Cell in stringGetByValGenerator side. 32bit code stores Cell with tag in JITPropertyAccess32_64 side. | 
 |         5. Fix invalid use of loadPtr for StringImpl::flags. Should use load32. | 
 |  | 
 |         * jit/JIT.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::stringGetByValStubGenerator): Deleted. | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_get_by_val): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::stringGetByValStubGenerator): Deleted. | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::stringGetByValGenerator): | 
 |         * jit/ThunkGenerators.h: | 
 |  | 
 | 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Use branchIfString/branchIfNotString instead of structure checkings | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185810 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Let's use branchIfString/branchIfNotString helper functions instead of | 
 |         checking structure with jsString's structure. It's easy to read. And | 
 |         it emits less code since we do not need to embed string structure's | 
 |         raw pointer in 32bit environment. | 
 |  | 
 |         * jit/JIT.h: | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitLoadCharacterString): | 
 |         (JSC::JIT::checkStructure): Deleted. | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_eq): | 
 |         (JSC::JIT::compileOpEqJumpSlow): | 
 |         (JSC::JIT::emitSlow_op_neq): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitByValIdentifierCheck): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         * jit/JSInterfaceJIT.h: | 
 |         (JSC::ThunkHelpers::jsStringLengthOffset): Deleted. | 
 |         (JSC::ThunkHelpers::jsStringValueOffset): Deleted. | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::loadJSStringArgument): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::stringCharLoad): | 
 |         (JSC::charCodeAtThunkGenerator): | 
 |         (JSC::charAtThunkGenerator): | 
 |         * runtime/JSString.h: | 
 |  | 
 | 2018-05-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         BytecodeGeneratorification shouldn't add a ValueProfile if the JIT is disabled. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185896 | 
 |         <rdar://problem/40471403> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * bytecode/BytecodeGeneratorification.cpp: | 
 |         (JSC::BytecodeGeneratorification::run): | 
 |  | 
 | 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Fix CachedCall's argument count if RegExp has named captures | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185587 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         If the given RegExp has named captures, the argument count of CachedCall in String#replace | 
 |         should be increased by one. This causes crash with assertion in test262. This patch corrects | 
 |         the argument count. | 
 |  | 
 |         This patch also unifies source.is8Bit()/!source.is8Bit() code since they are now completely | 
 |         the same. | 
 |  | 
 |         * runtime/StringPrototype.cpp: | 
 |         (JSC::replaceUsingRegExpSearch): | 
 |  | 
 | 2018-05-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         StringImpl utf8 conversion should not fail silently. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185888 | 
 |         <rdar://problem/40464506> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * dfg/DFGLazyJSValue.cpp: | 
 |         (JSC::DFG::LazyJSValue::dumpInContext const): | 
 |         * runtime/DateConstructor.cpp: | 
 |         (JSC::constructDate): | 
 |         (JSC::dateParse): | 
 |         * runtime/JSDateMath.cpp: | 
 |         (JSC::parseDate): | 
 |         * runtime/JSDateMath.h: | 
 |  | 
 | 2018-05-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Remove the UnconditionalFinalizer class | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185881 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         The only remaining user of this API is | 
 |         JSWebAssemblyCodeBlock. This patch changes, JSWebAssemblyCodeBlock | 
 |         to use the newer template based API and removes the old class. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/CodeBlock.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         * heap/Heap.h: | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted. | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/UnconditionalFinalizer.h: Removed. | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         (JSC::JSWebAssemblyCodeBlock::visitChildren): | 
 |         (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally): | 
 |         (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted. | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/CodeBlock.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         * heap/Heap.h: | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted. | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/UnconditionalFinalizer.h: Removed. | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         (JSC::JSWebAssemblyCodeBlock::visitChildren): | 
 |         (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally): | 
 |         (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted. | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |  | 
 | 2018-05-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, fix internal build. | 
 |  | 
 |         * runtime/JSImmutableButterfly.cpp: | 
 |  | 
 | 2018-05-22  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DFG::LICMPhase should attempt to hoist edge type checks if hoisting the whole node fails | 
 |         https://bugs.webkit.org/show_bug.cgi?id=144525 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch teaches LICM to fall back to hoisting a node's type checks when | 
 |         hoisting the entire node fails. | 
 |          | 
 |         This patch follow the same principles we use when deciding to hoist nodes in general: | 
 |         - If the pre header is control equivalent to where the current check is, we | 
 |         go ahead and hoist the check. | 
 |         - Otherwise, if hoisting hasn't failed before, we go ahead and gamble and | 
 |         hoist the check. If hoisting failed in the past, we will not hoist the check. | 
 |  | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGUseKind.h: | 
 |         (JSC::DFG::checkMayCrashIfInputIsEmpty): | 
 |  | 
 | 2018-05-21  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Get rid of TLCs | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185846 | 
 |  | 
 |         Rubber stamped by Geoffrey Garen. | 
 |          | 
 |         This removes support for thread-local caches from the GC in order to speed up allocation a | 
 |         bit. | 
 |          | 
 |         We added TLCs as part of Spectre mitigations, which we have since removed. | 
 |          | 
 |         We will want some kind of TLCs eventually, since they allow us to: | 
 |          | 
 |         - have a global GC, which may be a perf optimization at some point. | 
 |         - allocate objects from JIT threads, which we've been wanting to do for a while. | 
 |          | 
 |         This change keeps the most interesting aspect of TLCs, which is the | 
 |         LocalAllocator/BlockDirectory separation. This means that it ought to be easy to implement | 
 |         TLCs again in the future if we wanted this feature. | 
 |          | 
 |         This change removes the part of TLCs that causes a perf regression, namely that Allocator is | 
 |         an offset that requires a bounds check and lookup that makes the rest of the allocation fast | 
 |         path dependent on the load of the TLC. Now, Allocator is really just a LocalAllocator*, so | 
 |         you can directly use it to allocate. This removes two loads and a check from the allocation | 
 |         fast path. In hindsight, I probably could have made that whole thing more efficient, had I | 
 |         allowed us to have a statically known set of LocalAllocators. This would have removed the | 
 |         bounds check (one load and one branch) and it would have made it possible to CSE the load of | 
 |         the TLC data structure, since that would no longer resize. But that's a harder change that | 
 |         this patch, and we don't need it right now. | 
 |          | 
 |         While reviewing the allocation hot paths, I found that CreateThis had an unnecessary branch | 
 |         to check if the allocator is null. I removed that check. AssemblyHelpers::emitAllocate() does | 
 |         that check already. Previously, the TLC bounds check doubled as this check. | 
 |          | 
 |         This is a 1% speed-up on Octane and a 2.3% speed-up on TailBench. However, the Octane | 
 |         speed-up on my machine includes an 8% regexp speed-up. I've found that sometimes regexp | 
 |         speeds up or slows down by 8% depending on which path I build JSC from. Without that 8%, this | 
 |         is still an Octane speed-up due to 2-4% speed-ups in earley, boyer, raytrace, and splay. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize): | 
 |         * heap/Allocator.cpp: | 
 |         (JSC::Allocator::cellSize const): | 
 |         * heap/Allocator.h: | 
 |         (JSC::Allocator::Allocator): | 
 |         (JSC::Allocator::localAllocator const): | 
 |         (JSC::Allocator::operator== const): | 
 |         (JSC::Allocator::offset const): Deleted. | 
 |         * heap/AllocatorInlines.h: | 
 |         (JSC::Allocator::allocate const): | 
 |         (JSC::Allocator::tryAllocate const): Deleted. | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::BlockDirectory): | 
 |         (JSC::BlockDirectory::~BlockDirectory): | 
 |         * heap/BlockDirectory.h: | 
 |         (JSC::BlockDirectory::allocator const): Deleted. | 
 |         * heap/CompleteSubspace.cpp: | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): | 
 |         (JSC::CompleteSubspace::allocatorForSlow): | 
 |         (JSC::CompleteSubspace::tryAllocateSlow): | 
 |         * heap/CompleteSubspace.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Heap): | 
 |         * heap/Heap.h: | 
 |         (JSC::Heap::threadLocalCacheLayout): Deleted. | 
 |         * heap/IsoSubspace.cpp: | 
 |         (JSC::IsoSubspace::IsoSubspace): | 
 |         (JSC::IsoSubspace::allocateNonVirtual): | 
 |         * heap/IsoSubspace.h: | 
 |         (JSC::IsoSubspace::allocatorForNonVirtual): | 
 |         * heap/LocalAllocator.cpp: | 
 |         (JSC::LocalAllocator::LocalAllocator): | 
 |         (JSC::LocalAllocator::~LocalAllocator): | 
 |         * heap/LocalAllocator.h: | 
 |         (JSC::LocalAllocator::cellSize const): | 
 |         (JSC::LocalAllocator::tlc const): Deleted. | 
 |         * heap/ThreadLocalCache.cpp: Removed. | 
 |         * heap/ThreadLocalCache.h: Removed. | 
 |         * heap/ThreadLocalCacheInlines.h: Removed. | 
 |         * heap/ThreadLocalCacheLayout.cpp: Removed. | 
 |         * heap/ThreadLocalCacheLayout.h: Removed. | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |         (JSC::AssemblyHelpers::emitAllocate): | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSized): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::didAcquireLock): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         (JSC::VM::~VM): | 
 |         * runtime/VM.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::~VMEntryScope): | 
 |         * runtime/VMEntryScope.h: | 
 |  | 
 | 2018-05-22  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         We should have a CoW storage for NewArrayBuffer arrays. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185003 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch adds copy on write storage for new array buffers. In | 
 |         order to do this there needed to be significant changes to the | 
 |         layout of IndexingType. The new indexing type has the following | 
 |         shape: | 
 |  | 
 |         struct IndexingTypeAndMisc { | 
 |             struct IndexingModeIncludingHistory { | 
 |                 struct IndexingMode { | 
 |                     struct IndexingType { | 
 |                         uint8_t isArray:1;          // bit 0 | 
 |                         uint8_t shape:3;            // bit 1 - 3 | 
 |                     }; | 
 |                     uint8_t copyOnWrite:1;          // bit 4 | 
 |                 }; | 
 |                 uint8_t mayHaveIndexedAccessors:1;  // bit 5 | 
 |             }; | 
 |             uint8_t cellLockBits:2;                 // bit 6 - 7 | 
 |         }; | 
 |  | 
 |         For simplicity ArrayStorage shapes cannot be CoW. So the only | 
 |         valid CoW indexing shapes are ArrayWithInt32, ArrayWithDouble, and | 
 |         ArrayWithContiguous. | 
 |  | 
 |         The backing store for a CoW array is a new class | 
 |         JSImmutableButterfly, which looks exactly the same as a normal | 
 |         butterfly except that it has a JSCell header. Like other | 
 |         butterflies, JSImmutableButterfies are allocated out of the | 
 |         Auxiliary Gigacage and are pointed to by JSCells in the same | 
 |         way. However, when marking JSImmutableButterflies they are marked | 
 |         as if they were a property. | 
 |  | 
 |         With CoW arrays, the new_array_buffer bytecode will reallocate the | 
 |         shared JSImmutableButterfly if it sees from the allocation profile | 
 |         that the last array it allocated has transitioned to a different | 
 |         indexing type. From then on, all arrays created by that | 
 |         new_array_buffer bytecode will have the promoted indexing | 
 |         type. This is more or less the same as what we used to do. The | 
 |         only difference is that we don't promote all the way to array | 
 |         storage even if we have seen it before. | 
 |  | 
 |         Transitioning from a CoW indexing mode occurs whenever someone | 
 |         tries to store to an element, grow the array, or add properties. | 
 |         Storing or growing the array will call into code that does the | 
 |         stupid thing of copying the butterfly then continue into the old | 
 |         code. This doesn't end up costing us as future allocations will | 
 |         use any upgraded indexing shape.  We get adding properties for | 
 |         free by just changing the indexing mode on transition (our C++ | 
 |         code always updates the indexing mode). | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/ArrayAllocationProfile.cpp: | 
 |         (JSC::ArrayAllocationProfile::updateProfile): | 
 |         * bytecode/ArrayAllocationProfile.h: | 
 |         (JSC::ArrayAllocationProfile::initializeIndexingMode): | 
 |         * bytecode/ArrayProfile.cpp: | 
 |         (JSC::dumpArrayModes): | 
 |         (JSC::ArrayProfile::briefDescriptionWithoutUpdating): | 
 |         * bytecode/ArrayProfile.h: | 
 |         (JSC::asArrayModes): | 
 |         (JSC::arrayModeFromStructure): | 
 |         (JSC::arrayModesInclude): | 
 |         (JSC::hasSeenCopyOnWriteArray): | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::generateArrayLength): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): | 
 |         (JSC::UnlinkedCodeBlock::decompressArrayAllocationProfile): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::newArrayAllocationProfile): | 
 |         (JSC::BytecodeGenerator::emitNewArrayBuffer): | 
 |         (JSC::BytecodeGenerator::emitNewArray): | 
 |         (JSC::BytecodeGenerator::emitNewArrayWithSize): | 
 |         (JSC::BytecodeGenerator::emitExpectedFunctionSnippet): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         (JSC::ArrayPatternNode::bindValue const): | 
 |         (JSC::ArrayPatternNode::emitDirectBinding): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGArgumentsUtilities.cpp: | 
 |         (JSC::DFG::emitCodeToGetArgumentsArrayLength): | 
 |         * dfg/DFGArrayMode.cpp: | 
 |         (JSC::DFG::ArrayMode::fromObserved): | 
 |         (JSC::DFG::ArrayMode::refine const): | 
 |         (JSC::DFG::ArrayMode::alreadyChecked const): | 
 |         * dfg/DFGArrayMode.h: | 
 |         (JSC::DFG::ArrayMode::ArrayMode): | 
 |         (JSC::DFG::ArrayMode::action const): | 
 |         (JSC::DFG::ArrayMode::withSpeculation const): | 
 |         (JSC::DFG::ArrayMode::withArrayClass const): | 
 |         (JSC::DFG::ArrayMode::withType const): | 
 |         (JSC::DFG::ArrayMode::withConversion const): | 
 |         (JSC::DFG::ArrayMode::withTypeAndConversion const): | 
 |         (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const): | 
 |         (JSC::DFG::ArrayMode::arrayModesWithIndexingShape const): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicGetter): | 
 |         (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::attemptToForceStringArrayModeByToStringConversion): | 
 |         (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::dump): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::indexingType): | 
 |         (JSC::DFG::Node::indexingMode): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::compileExit): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): | 
 |         (JSC::DFG::SpeculativeJIT::arrayify): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnString): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetArrayLength): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateRest): | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewArrayBuffer): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGValidate.cpp: | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::storeStructure): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForArrayify): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::operationMaterializeObjectInOSR): | 
 |         * generate-bytecode-files: | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::sizeOfVarargs): | 
 |         (JSC::loadVarargs): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_put_by_val): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCachePutByID): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/Butterfly.h: | 
 |         (JSC::ContiguousData::Data::Data): | 
 |         (JSC::ContiguousData::Data::operator bool const): | 
 |         (JSC::ContiguousData::Data::operator=): | 
 |         (JSC::ContiguousData::Data::operator const T& const): | 
 |         (JSC::ContiguousData::Data::set): | 
 |         (JSC::ContiguousData::Data::setWithoutWriteBarrier): | 
 |         (JSC::ContiguousData::Data::clear): | 
 |         (JSC::ContiguousData::Data::get const): | 
 |         (JSC::ContiguousData::atUnsafe): | 
 |         (JSC::ContiguousData::at const): Deleted. | 
 |         (JSC::ContiguousData::at): Deleted. | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::ContiguousData<T>::at const): | 
 |         (JSC::ContiguousData<T>::at): | 
 |         * runtime/ClonedArguments.cpp: | 
 |         (JSC::ClonedArguments::createEmpty): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::allocateNewArrayBuffer): | 
 |         * runtime/IndexingType.cpp: | 
 |         (JSC::leastUpperBoundOfIndexingTypeAndType): | 
 |         (JSC::leastUpperBoundOfIndexingTypeAndValue): | 
 |         (JSC::dumpIndexingType): | 
 |         * runtime/IndexingType.h: | 
 |         (JSC::hasIndexedProperties): | 
 |         (JSC::hasUndecided): | 
 |         (JSC::hasInt32): | 
 |         (JSC::hasDouble): | 
 |         (JSC::hasContiguous): | 
 |         (JSC::hasArrayStorage): | 
 |         (JSC::hasAnyArrayStorage): | 
 |         (JSC::hasSlowPutArrayStorage): | 
 |         (JSC::shouldUseSlowPut): | 
 |         (JSC::isCopyOnWrite): | 
 |         (JSC::arrayIndexFromIndexingType): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::put): | 
 |         (JSC::JSArray::appendMemcpy): | 
 |         (JSC::JSArray::setLength): | 
 |         (JSC::JSArray::pop): | 
 |         (JSC::JSArray::fastSlice): | 
 |         (JSC::JSArray::shiftCountWithAnyIndexingType): | 
 |         (JSC::JSArray::unshiftCountWithAnyIndexingType): | 
 |         (JSC::JSArray::fillArgList): | 
 |         (JSC::JSArray::copyToArguments): | 
 |         * runtime/JSArrayInlines.h: | 
 |         (JSC::JSArray::pushInline): | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::JSCell): | 
 |         (JSC::JSCell::finishCreation): | 
 |         (JSC::JSCell::indexingType const): | 
 |         (JSC::JSCell::indexingMode const): | 
 |         (JSC::JSCell::setStructure): | 
 |         * runtime/JSFixedArray.h: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::haveABadTime): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::originalArrayStructureForIndexingType const): | 
 |         (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation const): | 
 |         (JSC::JSGlobalObject::isOriginalArrayStructure): | 
 |         * runtime/JSImmutableButterfly.cpp: Added. | 
 |         (JSC::JSImmutableButterfly::visitChildren): | 
 |         (JSC::JSImmutableButterfly::copyToArguments): | 
 |         * runtime/JSImmutableButterfly.h: Added. | 
 |         (JSC::JSImmutableButterfly::createStructure): | 
 |         (JSC::JSImmutableButterfly::tryCreate): | 
 |         (JSC::JSImmutableButterfly::create): | 
 |         (JSC::JSImmutableButterfly::publicLength const): | 
 |         (JSC::JSImmutableButterfly::vectorLength const): | 
 |         (JSC::JSImmutableButterfly::length const): | 
 |         (JSC::JSImmutableButterfly::toButterfly const): | 
 |         (JSC::JSImmutableButterfly::fromButterfly): | 
 |         (JSC::JSImmutableButterfly::get const): | 
 |         (JSC::JSImmutableButterfly::subspaceFor): | 
 |         (JSC::JSImmutableButterfly::setIndex): | 
 |         (JSC::JSImmutableButterfly::allocationSize): | 
 |         (JSC::JSImmutableButterfly::JSImmutableButterfly): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::markAuxiliaryAndVisitOutOfLineProperties): | 
 |         (JSC::JSObject::visitButterflyImpl): | 
 |         (JSC::JSObject::getOwnPropertySlotByIndex): | 
 |         (JSC::JSObject::putByIndex): | 
 |         (JSC::JSObject::createInitialInt32): | 
 |         (JSC::JSObject::createInitialDouble): | 
 |         (JSC::JSObject::createInitialContiguous): | 
 |         (JSC::JSObject::convertUndecidedToInt32): | 
 |         (JSC::JSObject::convertUndecidedToDouble): | 
 |         (JSC::JSObject::convertUndecidedToContiguous): | 
 |         (JSC::JSObject::convertInt32ToDouble): | 
 |         (JSC::JSObject::convertInt32ToArrayStorage): | 
 |         (JSC::JSObject::convertDoubleToContiguous): | 
 |         (JSC::JSObject::convertDoubleToArrayStorage): | 
 |         (JSC::JSObject::convertContiguousToArrayStorage): | 
 |         (JSC::JSObject::createInitialForValueAndSet): | 
 |         (JSC::JSObject::convertInt32ForValue): | 
 |         (JSC::JSObject::convertFromCopyOnWrite): | 
 |         (JSC::JSObject::ensureWritableInt32Slow): | 
 |         (JSC::JSObject::ensureWritableDoubleSlow): | 
 |         (JSC::JSObject::ensureWritableContiguousSlow): | 
 |         (JSC::JSObject::ensureArrayStorageSlow): | 
 |         (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode): | 
 |         (JSC::JSObject::switchToSlowPutArrayStorage): | 
 |         (JSC::JSObject::deletePropertyByIndex): | 
 |         (JSC::JSObject::getOwnPropertyNames): | 
 |         (JSC::canDoFastPutDirectIndex): | 
 |         (JSC::JSObject::defineOwnIndexedProperty): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLength): | 
 |         (JSC::JSObject::countElements): | 
 |         (JSC::JSObject::ensureLengthSlow): | 
 |         (JSC::JSObject::getEnumerableLength): | 
 |         (JSC::JSObject::ensureInt32Slow): Deleted. | 
 |         (JSC::JSObject::ensureDoubleSlow): Deleted. | 
 |         (JSC::JSObject::ensureContiguousSlow): Deleted. | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::putDirectIndex): | 
 |         (JSC::JSObject::canGetIndexQuickly): | 
 |         (JSC::JSObject::getIndexQuickly): | 
 |         (JSC::JSObject::tryGetIndexQuickly const): | 
 |         (JSC::JSObject::canSetIndexQuickly): | 
 |         (JSC::JSObject::setIndexQuickly): | 
 |         (JSC::JSObject::initializeIndex): | 
 |         (JSC::JSObject::initializeIndexWithoutBarrier): | 
 |         (JSC::JSObject::ensureWritableInt32): | 
 |         (JSC::JSObject::ensureWritableDouble): | 
 |         (JSC::JSObject::ensureWritableContiguous): | 
 |         (JSC::JSObject::ensureLength): | 
 |         (JSC::JSObject::ensureInt32): Deleted. | 
 |         (JSC::JSObject::ensureDouble): Deleted. | 
 |         (JSC::JSObject::ensureContiguous): Deleted. | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |         * runtime/JSType.h: | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::Structure): | 
 |         (JSC::Structure::addNewPropertyTransition): | 
 |         (JSC::Structure::nonPropertyTransition): | 
 |         * runtime/Structure.h: | 
 |         * runtime/StructureIDBlob.h: | 
 |         (JSC::StructureIDBlob::StructureIDBlob): | 
 |         (JSC::StructureIDBlob::indexingModeIncludingHistory const): | 
 |         (JSC::StructureIDBlob::setIndexingModeIncludingHistory): | 
 |         (JSC::StructureIDBlob::indexingModeIncludingHistoryOffset): | 
 |         (JSC::StructureIDBlob::indexingTypeIncludingHistory const): Deleted. | 
 |         (JSC::StructureIDBlob::setIndexingTypeIncludingHistory): Deleted. | 
 |         (JSC::StructureIDBlob::indexingTypeIncludingHistoryOffset): Deleted. | 
 |         * runtime/StructureTransitionTable.h: | 
 |         (JSC::newIndexingType): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-22  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r232052. | 
 |  | 
 |         Breaks internal builds. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Use more C++17" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185176 | 
 |         https://trac.webkit.org/changeset/232052 | 
 |  | 
 | 2018-05-22  Alberto Garcia  <berto@igalia.com> | 
 |  | 
 |         [CMake] Properly detect compiler flags, needed libs, and fallbacks for usage of 64-bit atomic operations | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182622 | 
 |         <rdar://problem/40292317> | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         We were linking JavaScriptCore against libatomic in MIPS because | 
 |         in that architecture __atomic_fetch_add_8() is not a compiler | 
 |         intrinsic and is provided by that library instead. However other | 
 |         architectures (e.g armel) are in the same situation, so we need a | 
 |         generic test. | 
 |  | 
 |         That test already exists in WebKit/CMakeLists.txt, so we just have | 
 |         to move it to a common file (WebKitCompilerFlags.cmake) and use | 
 |         its result (ATOMIC_INT64_REQUIRES_LIBATOMIC) here. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-05-22  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         Unreviewed, rolling out r231843. | 
 |  | 
 |         Broke cross build | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[CMake] Properly detect compiler flags, needed libs, and | 
 |         fallbacks for usage of 64-bit atomic operations" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182622 | 
 |         https://trac.webkit.org/changeset/231843 | 
 |  | 
 | 2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Use more C++17 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185176 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |  | 
 | 2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove duplicate methods in JSInterfaceJIT | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185813 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Some methods of JSInterfaceJIT are duplicate with AssemblyHelpers' ones. | 
 |         This patch removes these ones and use AssemblyHelpers' ones instead. | 
 |  | 
 |         This patch also a bit cleans up ThunkGenerators' unnecessary ifdefs. | 
 |  | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::tagFor): | 
 |         (JSC::AssemblyHelpers::payloadFor): | 
 |         * jit/JIT.h: | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emit_op_unsigned): | 
 |         (JSC::JIT::emit_compareUnsigned): | 
 |         (JSC::JIT::emit_op_inc): | 
 |         (JSC::JIT::emit_op_dec): | 
 |         (JSC::JIT::emit_op_mod): | 
 |         * jit/JITCall32_64.cpp: | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitPutIntToCallFrameHeader): | 
 |         (JSC::JIT::updateTopCallFrame): | 
 |         (JSC::JIT::emitInitRegister): | 
 |         (JSC::JIT::emitLoad): | 
 |         (JSC::JIT::emitStore): | 
 |         (JSC::JIT::emitStoreInt32): | 
 |         (JSC::JIT::emitStoreCell): | 
 |         (JSC::JIT::emitStoreBool): | 
 |         (JSC::JIT::emitGetVirtualRegister): | 
 |         (JSC::JIT::emitPutVirtualRegister): | 
 |         (JSC::JIT::emitTagBool): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_overrides_has_instance): | 
 |         (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_eq): | 
 |         (JSC::JIT::emit_op_neq): | 
 |         (JSC::JIT::compileOpStrictEq): | 
 |         (JSC::JIT::emit_op_eq_null): | 
 |         (JSC::JIT::emit_op_neq_null): | 
 |         (JSC::JIT::emitSlow_op_eq): | 
 |         (JSC::JIT::emitSlow_op_neq): | 
 |         (JSC::JIT::emitSlow_op_instanceof_custom): | 
 |         (JSC::JIT::emitNewFuncExprCommon): | 
 |         * jit/JSInterfaceJIT.h: | 
 |         (JSC::JSInterfaceJIT::emitLoadInt32): | 
 |         (JSC::JSInterfaceJIT::emitLoadDouble): | 
 |         (JSC::JSInterfaceJIT::emitPutToCallFrameHeader): | 
 |         (JSC::JSInterfaceJIT::emitPutCellToCallFrameHeader): | 
 |         (JSC::JSInterfaceJIT::tagFor): Deleted. | 
 |         (JSC::JSInterfaceJIT::payloadFor): Deleted. | 
 |         (JSC::JSInterfaceJIT::intPayloadFor): Deleted. | 
 |         (JSC::JSInterfaceJIT::intTagFor): Deleted. | 
 |         (JSC::JSInterfaceJIT::emitTagInt): Deleted. | 
 |         (JSC::JSInterfaceJIT::addressFor): Deleted. | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::returnDouble): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::arityFixupGenerator): | 
 |  | 
 | 2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, reland InById cache | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185682 | 
 |  | 
 |         Includes Dominik's 32bit fix. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::fromStructureStubInfo): | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::printInByIdCacheStatus): | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeDumper.h: | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::generateSelfInAccess): | 
 |         * bytecode/InlineAccess.h: | 
 |         * bytecode/StructureStubInfo.cpp: | 
 |         (JSC::StructureStubInfo::initInByIdSelf): | 
 |         (JSC::StructureStubInfo::deref): | 
 |         (JSC::StructureStubInfo::aboutToDie): | 
 |         (JSC::StructureStubInfo::reset): | 
 |         (JSC::StructureStubInfo::visitWeakReferences): | 
 |         (JSC::StructureStubInfo::propagateTransitions): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::patchableJump): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitInByVal): | 
 |         (JSC::BytecodeGenerator::emitInById): | 
 |         (JSC::BytecodeGenerator::emitIn): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::InNode::emitBytecode): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::addInById): | 
 |         (JSC::DFG::InRecord::InRecord): Deleted. | 
 |         (JSC::DFG::JITCompiler::addIn): Deleted. | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToInById): | 
 |         (JSC::DFG::Node::hasIdentifier): | 
 |         (JSC::DFG::Node::hasArrayMode): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileInById): | 
 |         (JSC::DFG::SpeculativeJIT::compileInByVal): | 
 |         (JSC::DFG::SpeculativeJIT::compileIn): Deleted. | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): Deleted. | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::boxBoolean): | 
 |         * jit/ICStats.h: | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::JIT): | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         (JSC::JIT::link): | 
 |         * jit/JIT.h: | 
 |         * jit/JITInlineCacheGenerator.cpp: | 
 |         (JSC::JITInByIdGenerator::JITInByIdGenerator): | 
 |         (JSC::JITInByIdGenerator::generateFastPath): | 
 |         * jit/JITInlineCacheGenerator.h: | 
 |         (JSC::JITInByIdGenerator::JITInByIdGenerator): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_in_by_id): | 
 |         (JSC::JIT::emitSlow_op_in_by_id): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_in_by_id): | 
 |         (JSC::JIT::emitSlow_op_in_by_id): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheInByID): | 
 |         (JSC::repatchInByID): | 
 |         (JSC::resetInByID): | 
 |         (JSC::tryCacheIn): Deleted. | 
 |         (JSC::repatchIn): Deleted. | 
 |         (JSC::resetIn): Deleted. | 
 |         * jit/Repatch.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::InNode::InNode): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::opInByVal): | 
 |         (JSC::CommonSlowPaths::opIn): Deleted. | 
 |  | 
 | 2018-05-21  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231998 and r232017. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185842 | 
 |  | 
 |         causes crashes on 32 JSC bot (Requested by realdawei on | 
 |         #webkit). | 
 |  | 
 |         Reverted changesets: | 
 |  | 
 |         "[JSC] JSC should have consistent InById IC" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185682 | 
 |         https://trac.webkit.org/changeset/231998 | 
 |  | 
 |         "Unreviewed, fix 32bit and scope release" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185682 | 
 |         https://trac.webkit.org/changeset/232017 | 
 |  | 
 | 2018-05-21  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         Complete fix for enabling modern EME by default | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185770 | 
 |         <rdar://problem/40368220> | 
 |  | 
 |         Reviewed by Eric Carlson. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix 32bit and scope release | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185682 | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_in_by_id): | 
 |  | 
 | 2018-05-20  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Revert the B3 compiler pipeline's treatment of taildup | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185808 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         While trying to implement path specialization (bug 185060), I reorganized the B3 pass pipeline. | 
 |         But then path specialization turned out to be a negative result. This reverts the pipeline to the | 
 |         way it was before that work. | 
 |          | 
 |         1.5% progression on V8Spider-CompileTime. | 
 |  | 
 |         * b3/B3Generate.cpp: | 
 |         (JSC::B3::generateToAir): | 
 |  | 
 | 2018-05-20  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] CheckTypeInfoFlags should say `eliminated` if it is removed in constant folding phase | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185802 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |  | 
 | 2018-05-18  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG should inline InstanceOf ICs | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185695 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         This teaches the DFG how to inline InstanceOf ICs into a MatchStructure node. This can then | 
 |         be folded to a CheckStructure + JSConstant. | 
 |          | 
 |         In the process of testing this, I found a bug where LICM was not hoisting things that | 
 |         depended on ExtraOSREntryLocal because that might return SpecEmpty. I fixed that by teaching | 
 |         LICM how to materialize CheckNotEmpty on demand whenever !HoistingFailed. | 
 |          | 
 |         This is a ~5% speed-up on boyer. | 
 |          | 
 |         ~2x speed-up on the instanceof-always-hit-one, instanceof-always-hit-two, and | 
 |         instanceof-sometimes-hit microbenchmarks. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::appendVariant): | 
 |         (JSC::GetByIdStatus::filter): | 
 |         * bytecode/GetByIdStatus.h: | 
 |         (JSC::GetByIdStatus::operator bool const): | 
 |         (JSC::GetByIdStatus::operator! const): Deleted. | 
 |         * bytecode/GetByIdVariant.h: | 
 |         (JSC::GetByIdVariant::operator bool const): | 
 |         (JSC::GetByIdVariant::operator! const): Deleted. | 
 |         * bytecode/ICStatusUtils.h: Added. | 
 |         (JSC::appendICStatusVariant): | 
 |         (JSC::filterICStatusVariants): | 
 |         * bytecode/InstanceOfStatus.cpp: Added. | 
 |         (JSC::InstanceOfStatus::appendVariant): | 
 |         (JSC::InstanceOfStatus::computeFor): | 
 |         (JSC::InstanceOfStatus::computeForStubInfo): | 
 |         (JSC::InstanceOfStatus::commonPrototype const): | 
 |         (JSC::InstanceOfStatus::filter): | 
 |         * bytecode/InstanceOfStatus.h: Added. | 
 |         (JSC::InstanceOfStatus::InstanceOfStatus): | 
 |         (JSC::InstanceOfStatus::state const): | 
 |         (JSC::InstanceOfStatus::isSet const): | 
 |         (JSC::InstanceOfStatus::operator bool const): | 
 |         (JSC::InstanceOfStatus::isSimple const): | 
 |         (JSC::InstanceOfStatus::takesSlowPath const): | 
 |         (JSC::InstanceOfStatus::numVariants const): | 
 |         (JSC::InstanceOfStatus::variants const): | 
 |         (JSC::InstanceOfStatus::at const): | 
 |         (JSC::InstanceOfStatus::operator[] const): | 
 |         * bytecode/InstanceOfVariant.cpp: Added. | 
 |         (JSC::InstanceOfVariant::InstanceOfVariant): | 
 |         (JSC::InstanceOfVariant::attemptToMerge): | 
 |         (JSC::InstanceOfVariant::dump const): | 
 |         (JSC::InstanceOfVariant::dumpInContext const): | 
 |         * bytecode/InstanceOfVariant.h: Added. | 
 |         (JSC::InstanceOfVariant::InstanceOfVariant): | 
 |         (JSC::InstanceOfVariant::operator bool const): | 
 |         (JSC::InstanceOfVariant::structureSet const): | 
 |         (JSC::InstanceOfVariant::structureSet): | 
 |         (JSC::InstanceOfVariant::conditionSet const): | 
 |         (JSC::InstanceOfVariant::prototype const): | 
 |         (JSC::InstanceOfVariant::isHit const): | 
 |         * bytecode/StructureStubInfo.cpp: | 
 |         (JSC::StructureStubInfo::StructureStubInfo): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::considerCaching): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::dump): | 
 |         * dfg/DFGGraph.h: | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::remove): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasMatchStructureData): | 
 |         (JSC::DFG::Node::matchStructureData): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileMatchStructure): | 
 |         * 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::compileMatchStructure): | 
 |  | 
 | 2018-05-19  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] JSC should have consistent InById IC | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185682 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Current our op_in IC is adhoc: It is only emitted in DFG and FTL layers, | 
 |         when we found that DFG::In's parameter is constant string. We should | 
 |         align this IC to the other ById ICs to clean up and remove adhoc code | 
 |         in DFG and FTL. | 
 |  | 
 |         This patch cleans up our "In" IC by aligning it to the other ById ICs. | 
 |         We split op_in bytecode to op_in_by_id and op_in_by_val. op_in_by_val | 
 |         is the same to the original op_in. For op_in_by_id, we use JITInByIdGenerator | 
 |         to emit InById IC code. In addition, our JITInByIdGenerator and op_in_by_id | 
 |         has a inline access cache for own property case, which is the same to | 
 |         JITGetByIdGenerator. | 
 |  | 
 |         And we split DFG::In to DFG::InById and DFG::InByVal. InByVal is the same | 
 |         to the original In DFG node. DFG AI attempts to lower InByVal to InById | 
 |         if AI figured out that the property name is a constant string. And in | 
 |         InById node, we use JITInByIdGenerator code. | 
 |  | 
 |         This patch cleans up DFG and FTL's adhoc In IC code. | 
 |  | 
 |         In a subsequent patch, we should introduce InByIdStatus to optimize | 
 |         InById in DFG and FTL. We would like to have a new InByIdStatus instead of | 
 |         reusing GetByIdStatus since GetByIdStatus becomes too complicated, and | 
 |         AccessCase::Types are different from them (AccessCase::InHit / InMiss). | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::fromStructureStubInfo): | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::printInByIdCacheStatus): | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeDumper.h: | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::generateSelfInAccess): | 
 |         * bytecode/InlineAccess.h: | 
 |         * bytecode/StructureStubInfo.cpp: | 
 |         (JSC::StructureStubInfo::initInByIdSelf): | 
 |         (JSC::StructureStubInfo::deref): | 
 |         (JSC::StructureStubInfo::aboutToDie): | 
 |         (JSC::StructureStubInfo::reset): | 
 |         (JSC::StructureStubInfo::visitWeakReferences): | 
 |         (JSC::StructureStubInfo::propagateTransitions): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::patchableJump): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitInByVal): | 
 |         (JSC::BytecodeGenerator::emitInById): | 
 |         (JSC::BytecodeGenerator::emitIn): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::InNode::emitBytecode): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::addInById): | 
 |         (JSC::DFG::InRecord::InRecord): Deleted. | 
 |         (JSC::DFG::JITCompiler::addIn): Deleted. | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToInById): | 
 |         (JSC::DFG::Node::hasIdentifier): | 
 |         (JSC::DFG::Node::hasArrayMode): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileInById): | 
 |         (JSC::DFG::SpeculativeJIT::compileInByVal): | 
 |         (JSC::DFG::SpeculativeJIT::compileIn): Deleted. | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): Deleted. | 
 |         * jit/ICStats.h: | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::JIT): | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         (JSC::JIT::link): | 
 |         * jit/JIT.h: | 
 |         * jit/JITInlineCacheGenerator.cpp: | 
 |         (JSC::JITInByIdGenerator::JITInByIdGenerator): | 
 |         (JSC::JITInByIdGenerator::generateFastPath): | 
 |         * jit/JITInlineCacheGenerator.h: | 
 |         (JSC::JITInByIdGenerator::JITInByIdGenerator): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_in_by_id): | 
 |         (JSC::JIT::emitSlow_op_in_by_id): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_in_by_id): | 
 |         (JSC::JIT::emitSlow_op_in_by_id): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheInByID): | 
 |         (JSC::repatchInByID): | 
 |         (JSC::resetInByID): | 
 |         (JSC::tryCacheIn): Deleted. | 
 |         (JSC::repatchIn): Deleted. | 
 |         (JSC::resetIn): Deleted. | 
 |         * jit/Repatch.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::InNode::InNode): | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::opInByVal): | 
 |         (JSC::CommonSlowPaths::opIn): Deleted. | 
 |  | 
 | 2018-05-18  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231982. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185793 | 
 |  | 
 |         Caused layout test failures (Requested by realdawei on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Complete fix for enabling modern EME by default" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185770 | 
 |         https://trac.webkit.org/changeset/231982 | 
 |  | 
 | 2018-05-18  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         op_in should mark if it sees out of bounds accesses | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185792 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This would used to cause us to OSR loop since we would always speculate | 
 |         we were in bounds in HasIndexedProperty. | 
 |  | 
 |         * bytecode/ArrayProfile.cpp: | 
 |         (JSC::ArrayProfile::observeIndexedRead): | 
 |         * bytecode/ArrayProfile.h: | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::opIn): | 
 |  | 
 | 2018-05-18  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add missing exception check. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185786 | 
 |         <rdar://problem/35686560> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * runtime/JSPropertyNameEnumerator.h: | 
 |         (JSC::propertyNameEnumerator): | 
 |  | 
 | 2018-05-18  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         Complete fix for enabling modern EME by default | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185770 | 
 |         <rdar://problem/40368220> | 
 |  | 
 |         Reviewed by Eric Carlson. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-05-18  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix exception checking, part 2 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185350 | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         (JSC::DFG::putByValInternal): | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::putDirectAccessorWithReify): | 
 |  | 
 | 2018-05-16  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC should have InstanceOf inline caching | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185652 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This adds a polymorphic inline cache for instanceof. It caches hits and misses. It uses the | 
 |         existing PolymorphicAccess IC machinery along with all of its heuristics. If we ever generate | 
 |         too many cases, we emit the generic instanceof implementation instead. | 
 |          | 
 |         All of the JIT tiers use the same InstanceOf IC. It uses the existing JITInlineCacheGenerator | 
 |         abstraction. | 
 |          | 
 |         This is a ~40% speed-up on instanceof microbenchmarks. It's a *tiny* (~1%) speed-up on | 
 |         Octane/boyer. I think I can make that speed-up bigger by inlining the inline cache. | 
 |  | 
 |         * API/tests/testapi.mm: | 
 |         (testObjectiveCAPIMain): | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * b3/B3Effects.h: | 
 |         (JSC::B3::Effects::forReadOnlyCall): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::guardedByStructureCheck const): | 
 |         (JSC::AccessCase::canReplace const): | 
 |         (JSC::AccessCase::visitWeak const): | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCase.h: | 
 |         * bytecode/InstanceOfAccessCase.cpp: Added. | 
 |         (JSC::InstanceOfAccessCase::create): | 
 |         (JSC::InstanceOfAccessCase::dumpImpl const): | 
 |         (JSC::InstanceOfAccessCase::clone const): | 
 |         (JSC::InstanceOfAccessCase::~InstanceOfAccessCase): | 
 |         (JSC::InstanceOfAccessCase::InstanceOfAccessCase): | 
 |         * bytecode/InstanceOfAccessCase.h: Added. | 
 |         (JSC::InstanceOfAccessCase::prototype const): | 
 |         * bytecode/ObjectPropertyCondition.h: | 
 |         (JSC::ObjectPropertyCondition::hasPrototypeWithoutBarrier): | 
 |         (JSC::ObjectPropertyCondition::hasPrototype): | 
 |         * bytecode/ObjectPropertyConditionSet.cpp: | 
 |         (JSC::generateConditionsForInstanceOf): | 
 |         * bytecode/ObjectPropertyConditionSet.h: | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::PolymorphicAccess::addCases): | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         (WTF::printInternal): | 
 |         * bytecode/PropertyCondition.cpp: | 
 |         (JSC::PropertyCondition::dumpInContext const): | 
 |         (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const): | 
 |         (JSC::PropertyCondition::validityRequiresImpurePropertyWatchpoint const): | 
 |         (WTF::printInternal): | 
 |         * bytecode/PropertyCondition.h: | 
 |         (JSC::PropertyCondition::absenceWithoutBarrier): | 
 |         (JSC::PropertyCondition::absenceOfSetEffectWithoutBarrier): | 
 |         (JSC::PropertyCondition::hasPrototypeWithoutBarrier): | 
 |         (JSC::PropertyCondition::hasPrototype): | 
 |         (JSC::PropertyCondition::hasPrototype const): | 
 |         (JSC::PropertyCondition::prototype const): | 
 |         (JSC::PropertyCondition::hash const): | 
 |         (JSC::PropertyCondition::operator== const): | 
 |         * bytecode/StructureStubInfo.cpp: | 
 |         (JSC::StructureStubInfo::StructureStubInfo): | 
 |         (JSC::StructureStubInfo::reset): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::considerCaching): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGInlineCacheWrapper.h: | 
 |         * dfg/DFGInlineCacheWrapperInlines.h: | 
 |         (JSC::DFG::InlineCacheWrapper<GeneratorType>::finalize): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::addInstanceOf): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::usedRegisters): | 
 |         (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): | 
 |         (JSC::DFG::SpeculativeJIT::compileInstanceOf): | 
 |         (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): Deleted. | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileAssertNotEmpty): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNumberIsInteger): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOf): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::getById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis): | 
 |         * jit/ICStats.h: | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         (JSC::JIT::link): | 
 |         * jit/JIT.h: | 
 |         * jit/JITInlineCacheGenerator.cpp: | 
 |         (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): | 
 |         (JSC::JITInlineCacheGenerator::finalize): | 
 |         (JSC::JITByIdGenerator::JITByIdGenerator): | 
 |         (JSC::JITByIdGenerator::finalize): | 
 |         (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): | 
 |         (JSC::JITInstanceOfGenerator::generateFastPath): | 
 |         (JSC::JITInstanceOfGenerator::finalize): | 
 |         * jit/JITInlineCacheGenerator.h: | 
 |         (JSC::JITInlineCacheGenerator::reportSlowPathCall): | 
 |         (JSC::JITInlineCacheGenerator::slowPathBegin const): | 
 |         (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): | 
 |         (JSC::finalizeInlineCaches): | 
 |         (JSC::JITByIdGenerator::reportSlowPathCall): Deleted. | 
 |         (JSC::JITByIdGenerator::slowPathBegin const): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_instanceof): | 
 |         (JSC::JIT::emitSlow_op_instanceof): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/RegisterSet.cpp: | 
 |         (JSC::RegisterSet::stubUnavailableRegisters): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheIn): | 
 |         (JSC::tryCacheInstanceOf): | 
 |         (JSC::repatchInstanceOf): | 
 |         (JSC::resetPatchableJump): | 
 |         (JSC::resetIn): | 
 |         (JSC::resetInstanceOf): | 
 |         * jit/Repatch.h: | 
 |         * runtime/Options.h: | 
 |         * runtime/Structure.h: | 
 |  | 
 | 2018-05-18  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix exception checking | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185350 | 
 |  | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::putDirectWithReify): | 
 |         (JSC::CommonSlowPaths::putDirectAccessorWithReify): | 
 |  | 
 | 2018-05-17  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         We don't throw SyntaxErrors for runtime generated regular expressions with errors | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185755 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Added a new helper that creates the correct exception to throw for each type of error when | 
 |         compiling a RegExp.  Using that new helper, added missing checks for RegExp for the cases | 
 |         where we create a new RegExp from an existing one.  Also refactored other places that we | 
 |         throw SyntaxErrors after a failed RegExp compile to use the new helper. | 
 |  | 
 |         * runtime/RegExp.h: | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::regExpCreate): | 
 |         (JSC::constructRegExp): | 
 |         * runtime/RegExpPrototype.cpp: | 
 |         (JSC::regExpProtoFuncCompile): | 
 |         * yarr/YarrErrorCode.cpp: | 
 |         (JSC::Yarr::errorToThrow): | 
 |         * yarr/YarrErrorCode.h: | 
 |  | 
 | 2018-05-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Remove shrinkFootprint test from apitests since it's flaky | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185754 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This test is flaky as it keeps failing on certain people's machines. | 
 |         Having a test about OS footprint seems like it'll forever be doomed | 
 |         to being flaky. | 
 |  | 
 |         * API/tests/testapi.mm: | 
 |         (testObjectiveCAPIMain): | 
 |  | 
 | 2018-05-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         defaultConstructorSourceCode needs to makeSource every time it's called | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185753 | 
 |  | 
 |         Rubber-stamped by Mark Lam. | 
 |  | 
 |         The bug here is multiple VMs can be running concurrently to one another | 
 |         in the same process. They may each ref/deref something that isn't ThreadSafeRefCounted | 
 |         if we copy a static SourceCode. instead, we create a new one each time | 
 |         this function is called. | 
 |  | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::defaultConstructorSourceCode): | 
 |  | 
 | 2018-05-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Use AssemblyHelpers' type checking functions as much as possible | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185730 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Let's use AssemblyHelpers' type checking functions as much as possible. This hides the complex | 
 |         bit and register operations for type tagging of JSValue. It is really useful when we would like | 
 |         to tweak type tagging representation since the code is collected into AssemblyHelpers. And | 
 |         the named function is more readable than some branching operations. | 
 |  | 
 |         We also remove unnecessary branching functions in JIT / JSInterfaceJIT. Some of them are duplicate | 
 |         to AssemblyHelpers' one. | 
 |  | 
 |         We add several new type checking functions to AssemblyHelpers. Moreover, we add branchIfXXX(GPRReg) | 
 |         functions even for 32bit environment. In 32bit environment, this function takes tag register. This | 
 |         semantics is aligned to the existing branchIfCell / branchIfNotCell. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileValueToInt32): | 
 |         (JSC::DFG::SpeculativeJIT::compileDoubleRep): | 
 |         (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileSpread): | 
 |         (JSC::DFG::SpeculativeJIT::speculateCellTypeWithoutTypeFiltering): | 
 |         (JSC::DFG::SpeculativeJIT::speculateCellType): | 
 |         (JSC::DFG::SpeculativeJIT::speculateNumber): | 
 |         (JSC::DFG::SpeculativeJIT::speculateMisc): | 
 |         (JSC::DFG::SpeculativeJIT::compileExtractValueFromWeakMapGet): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetPrototypeOf): | 
 |         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitCall): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): | 
 |         (JSC::DFG::SpeculativeJIT::emitCall): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::convertAnyInt): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileAssertNotEmpty): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::branchIfInt32): | 
 |         (JSC::AssemblyHelpers::branchIfNotInt32): | 
 |         (JSC::AssemblyHelpers::branchIfNumber): | 
 |         (JSC::AssemblyHelpers::branchIfNotNumber): | 
 |         (JSC::AssemblyHelpers::branchIfBoolean): | 
 |         (JSC::AssemblyHelpers::branchIfNotBoolean): | 
 |         (JSC::AssemblyHelpers::branchIfEmpty): | 
 |         (JSC::AssemblyHelpers::branchIfNotEmpty): | 
 |         (JSC::AssemblyHelpers::branchIfUndefined): | 
 |         (JSC::AssemblyHelpers::branchIfNotUndefined): | 
 |         (JSC::AssemblyHelpers::branchIfNull): | 
 |         (JSC::AssemblyHelpers::branchIfNotNull): | 
 |         * jit/JIT.h: | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emit_compareAndJump): | 
 |         (JSC::JIT::emit_compareAndJumpSlow): | 
 |         * jit/JITArithmetic32_64.cpp: | 
 |         (JSC::JIT::emit_compareAndJump): | 
 |         (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::compileCallEval): | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/JITCall32_64.cpp: | 
 |         (JSC::JIT::compileCallEval): | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitJumpSlowCaseIfNotJSCell): | 
 |         (JSC::JIT::emitJumpIfBothJSCells): | 
 |         (JSC::JIT::emitJumpSlowCaseIfJSCell): | 
 |         (JSC::JIT::emitJumpIfNotInt): | 
 |         (JSC::JIT::emitJumpSlowCaseIfNotInt): | 
 |         (JSC::JIT::emitJumpSlowCaseIfNotNumber): | 
 |         (JSC::JIT::emitJumpIfCellObject): Deleted. | 
 |         (JSC::JIT::emitJumpIfCellNotObject): Deleted. | 
 |         (JSC::JIT::emitJumpIfJSCell): Deleted. | 
 |         (JSC::JIT::emitJumpIfInt): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_instanceof): | 
 |         (JSC::JIT::emit_op_is_undefined): | 
 |         (JSC::JIT::emit_op_is_cell_with_type): | 
 |         (JSC::JIT::emit_op_is_object): | 
 |         (JSC::JIT::emit_op_to_primitive): | 
 |         (JSC::JIT::emit_op_jeq_null): | 
 |         (JSC::JIT::emit_op_jneq_null): | 
 |         (JSC::JIT::compileOpStrictEq): | 
 |         (JSC::JIT::compileOpStrictEqJump): | 
 |         (JSC::JIT::emit_op_to_number): | 
 |         (JSC::JIT::emit_op_to_string): | 
 |         (JSC::JIT::emit_op_to_object): | 
 |         (JSC::JIT::emit_op_eq_null): | 
 |         (JSC::JIT::emit_op_neq_null): | 
 |         (JSC::JIT::emit_op_to_this): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         (JSC::JIT::emit_op_check_tdz): | 
 |         (JSC::JIT::emitNewFuncExprCommon): | 
 |         (JSC::JIT::emit_op_profile_type): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_instanceof): | 
 |         (JSC::JIT::emit_op_is_undefined): | 
 |         (JSC::JIT::emit_op_is_cell_with_type): | 
 |         (JSC::JIT::emit_op_is_object): | 
 |         (JSC::JIT::emit_op_to_primitive): | 
 |         (JSC::JIT::emit_op_not): | 
 |         (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_neq): | 
 |         (JSC::JIT::emit_op_jneq): | 
 |         (JSC::JIT::compileOpStrictEq): | 
 |         (JSC::JIT::compileOpStrictEqJump): | 
 |         (JSC::JIT::emit_op_eq_null): | 
 |         (JSC::JIT::emit_op_neq_null): | 
 |         (JSC::JIT::emit_op_to_number): | 
 |         (JSC::JIT::emit_op_to_string): | 
 |         (JSC::JIT::emit_op_to_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         (JSC::JIT::emit_op_to_this): | 
 |         (JSC::JIT::emit_op_check_tdz): | 
 |         (JSC::JIT::emit_op_profile_type): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_get_by_val): | 
 |         (JSC::JIT::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitGenericContiguousPutByVal): | 
 |         (JSC::JIT::emitPutByValWithCachedId): | 
 |         (JSC::JIT::emit_op_get_from_scope): | 
 |         (JSC::JIT::emit_op_put_to_scope): | 
 |         (JSC::JIT::emitWriteBarrier): | 
 |         (JSC::JIT::emitIntTypedArrayPutByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayPutByVal): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_get_by_val): | 
 |         (JSC::JIT::emitContiguousLoad): | 
 |         (JSC::JIT::emitArrayStorageLoad): | 
 |         (JSC::JIT::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitGenericContiguousPutByVal): | 
 |         (JSC::JIT::emitPutByValWithCachedId): | 
 |         (JSC::JIT::emit_op_get_from_scope): | 
 |         (JSC::JIT::emit_op_put_to_scope): | 
 |         * jit/JSInterfaceJIT.h: | 
 |         (JSC::JSInterfaceJIT::emitLoadJSCell): | 
 |         (JSC::JSInterfaceJIT::emitLoadInt32): | 
 |         (JSC::JSInterfaceJIT::emitLoadDouble): | 
 |         (JSC::JSInterfaceJIT::emitJumpIfNumber): Deleted. | 
 |         (JSC::JSInterfaceJIT::emitJumpIfNotNumber): Deleted. | 
 |         (JSC::JSInterfaceJIT::emitJumpIfNotType): Deleted. | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::absThunkGenerator): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (WTF::DOMJITNode::checkSubClassSnippet): | 
 |         (WTF::DOMJITFunctionObject::checkSubClassSnippet): | 
 |  | 
 | 2018-05-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Unreviewed. Fix the build after my attempted build fix broke the build. | 
 |  | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::defaultConstructorSourceCode): | 
 |         (JSC::BuiltinExecutables::createDefaultConstructor): | 
 |         * builtins/BuiltinExecutables.h: | 
 |  | 
 | 2018-05-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove reifyPropertyNameIfNeeded | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185350 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         reifyPropertyNameIfNeeded is in the middle of putDirectInternal, which is super critical path. | 
 |         This is a virtual call, and it is only used by JSFunction right now. Since this causes too much | 
 |         cost, we should remove this from the critical path. | 
 |  | 
 |         This patch removes this function call from the critical path. And in our slow paths, we call | 
 |         helper functions which calls reifyLazyPropertyIfNeeded if the given value is a JSFunction. | 
 |         While putDirect is a bit raw API, our slow paths just call it. This helper wraps this calls | 
 |         and care the edge cases. The other callsites of putDirect should know the type of the given | 
 |         object and the name of the property (And avoid these edge cases). | 
 |  | 
 |         This improves SixSpeed/object-assign.es6 by ~4% on MacBook Pro. And this patch does not cause | 
 |         regressions of the existing tests. | 
 |  | 
 |                                            baseline                  patched | 
 |         Kraken: | 
 |             json-parse-financial        35.522+-0.069      ^      34.708+-0.097         ^ definitely 1.0234x faster | 
 |  | 
 |         SixSpeed: | 
 |             object-assign.es6         145.8779+-0.2838     ^    140.1019+-0.8007        ^ definitely 1.0412x faster | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         (JSC::DFG::putByValInternal): | 
 |         (JSC::DFG::putByValCellInternal): | 
 |         * jit/JITOperations.cpp: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * runtime/ClassInfo.h: | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::putDirectWithReify): | 
 |         (JSC::CommonSlowPaths::putDirectAccessorWithReify): | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::reifyPropertyNameIfNeeded): Deleted. | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::reifyPropertyNameIfNeeded): Deleted. | 
 |         * runtime/JSFunction.h: | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::putDirectAccessor): | 
 |         (JSC::JSObject::putDirectNonIndexAccessor): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |  | 
 | 2018-05-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Unreviewed. Try to fix windows build. | 
 |  | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::defaultConstructorSourceCode): | 
 |  | 
 | 2018-05-16  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         UnlinkedFunctionExecutable doesn't need a parent source override field since it's only used for default class constructors | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185637 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         We had this general mechanism for overriding an UnlinkedFunctionExecutable's parent | 
 |         source code. However, we were only using this for default class constructors. There | 
 |         are only two types of default class constructors. This patch makes it so that | 
 |         we just store this information inside of a single bit, and ask for the source | 
 |         code as needed instead of holding it in a nullable field that is 24 bytes in size. | 
 |          | 
 |         This brings UnlinkedFunctionExecutable's size down from 184 bytes to 160 bytes. | 
 |         This has the consequence of making it allocated out of a 160 byte size class | 
 |         instead of a 224 byte size class. This should bring down its memory footprint | 
 |         by ~40%. | 
 |  | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::defaultConstructorSourceCode): | 
 |         (JSC::BuiltinExecutables::createDefaultConstructor): | 
 |         (JSC::BuiltinExecutables::createExecutable): | 
 |         * builtins/BuiltinExecutables.h: | 
 |         * bytecode/UnlinkedFunctionExecutable.cpp: | 
 |         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): | 
 |         (JSC::UnlinkedFunctionExecutable::link): | 
 |         * bytecode/UnlinkedFunctionExecutable.h: | 
 |         * runtime/CodeCache.cpp: | 
 |         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable): | 
 |  | 
 | 2018-05-16  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         VM::shrinkFootprint should call collectNow(Sync) instead of collectSync so it also eagerly sweeps | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185707 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::shrinkFootprint): | 
 |  | 
 | 2018-05-16  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "/" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183996 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is introducing the support for BigInt into divide | 
 |         operation int LLInt and JIT layers. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::divide): | 
 |         (JSC::JSBigInt::copy): | 
 |         (JSC::JSBigInt::unaryMinus): | 
 |         (JSC::JSBigInt::absoluteCompare): | 
 |         (JSC::JSBigInt::absoluteDivLarge): | 
 |         (JSC::JSBigInt::productGreaterThan): | 
 |         (JSC::JSBigInt::inplaceAdd): | 
 |         (JSC::JSBigInt::inplaceSub): | 
 |         (JSC::JSBigInt::inplaceRightShift): | 
 |         (JSC::JSBigInt::specialLeftShift): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-05-16  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Constant fold CheckTypeInfoFlags on ImplementsDefaultHasInstance | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185670 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch makes it so that we constant fold CheckTypeInfoFlags for | 
 |         ImplementsDefaultHasInstance inside of AI/constant folding. We constant | 
 |         fold in three ways: | 
 |         - When the incoming value is a constant, we just look at its inline type | 
 |         flags. Since those flags never change after an object is created, this | 
 |         is sound. | 
 |         - Based on the incoming value having a finite structure set. We just iterate | 
 |         all structures and ensure they have the bit set. | 
 |         - Based on speculated type. To do this, I split up SpecFunction into two | 
 |         subheaps where one is for functions that have the bit set, and one for | 
 |         functions that don't have the bit set. The latter is currently only comprised | 
 |         of JSBoundFunctions. To constant fold, we check that the incoming | 
 |         value only has the SpecFunction type with ImplementsDefaultHasInstance set. | 
 |  | 
 |         * bytecode/SpeculatedType.cpp: | 
 |         (JSC::speculationFromClassInfo): | 
 |         * bytecode/SpeculatedType.h: | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCheckTypeInfoFlags): | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::JSFunction): | 
 |         (JSC::JSFunction::assertTypeInfoFlagInvariants): | 
 |         * runtime/JSFunction.h: | 
 |         (JSC::JSFunction::assertTypeInfoFlagInvariants): | 
 |         * runtime/JSFunctionInlines.h: | 
 |         (JSC::JSFunction::JSFunction): | 
 |  | 
 | 2018-05-16  Devin Rousso  <webkit@devinrousso.com> | 
 |  | 
 |         Web Inspector: create a navigation item for toggling the overlay rulers/guides | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185644 | 
 |  | 
 |         Reviewed by Matt Baker. | 
 |  | 
 |         * inspector/protocol/OverlayTypes.json: | 
 |         * inspector/protocol/Page.json: | 
 |  | 
 | 2018-05-16  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231845. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185702 | 
 |  | 
 |         it is breaking Apple High Sierra 32-bit JSC bot (Requested by | 
 |         caiolima on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[ESNext][BigInt] Implement support for "/" operation" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183996 | 
 |         https://trac.webkit.org/changeset/231845 | 
 |  | 
 | 2018-05-16  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG models InstanceOf incorrectly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185694 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |          | 
 |         Proxies mean that InstanceOf can have effects. Exceptions mean that it's illegal to DCE it or | 
 |         hoist it. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGHeapLocation.cpp: | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGHeapLocation.h: | 
 |         * dfg/DFGNodeType.h: | 
 |  | 
 | 2018-05-16  Andy VanWagoner  <andy@vanwagoner.family> | 
 |  | 
 |         Add support for Intl NumberFormat formatToParts | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185375 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Add flag for NumberFormat formatToParts. Implement formatToParts using | 
 |         unum_formatDoubleForFields. Because the fields are nested and come back | 
 |         in no guaranteed order, the simple algorithm to convert them to the | 
 |         desired format is roughly O(n^2). However, even with Number.MAX_VALUE | 
 |         it appears to perform well enough for the initial implementation. Another | 
 |         issue has been created to improve this algorithm. | 
 |  | 
 |         This requires ICU v59+ for unum_formatDoubleForFields, so it is disabled | 
 |         on macOS, since only v57 is available. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::UFieldPositionIteratorDeleter::operator() const): | 
 |         (JSC::IntlNumberFormat::partTypeString): | 
 |         (JSC::IntlNumberFormat::formatToParts): | 
 |         * runtime/IntlNumberFormat.h: | 
 |         * runtime/IntlNumberFormatPrototype.cpp: | 
 |         (JSC::IntlNumberFormatPrototype::create): | 
 |         (JSC::IntlNumberFormatPrototype::finishCreation): | 
 |         (JSC::IntlNumberFormatPrototypeFuncFormatToParts): | 
 |         * runtime/IntlNumberFormatPrototype.h: | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-05-16  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "/" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183996 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is introducing the support for BigInt into divide | 
 |         operation int LLInt and JIT layers. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::divide): | 
 |         (JSC::JSBigInt::copy): | 
 |         (JSC::JSBigInt::unaryMinus): | 
 |         (JSC::JSBigInt::absoluteCompare): | 
 |         (JSC::JSBigInt::absoluteDivLarge): | 
 |         (JSC::JSBigInt::productGreaterThan): | 
 |         (JSC::JSBigInt::inplaceAdd): | 
 |         (JSC::JSBigInt::inplaceSub): | 
 |         (JSC::JSBigInt::inplaceRightShift): | 
 |         (JSC::JSBigInt::specialLeftShift): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-05-16  Alberto Garcia  <berto@igalia.com> | 
 |  | 
 |         [CMake] Properly detect compiler flags, needed libs, and fallbacks for usage of 64-bit atomic operations | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182622 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         We were linking JavaScriptCore against libatomic in MIPS because | 
 |         in that architecture __atomic_fetch_add_8() is not a compiler | 
 |         intrinsic and is provided by that library instead. However other | 
 |         architectures (e.g armel) are in the same situation, so we need a | 
 |         generic test. | 
 |  | 
 |         That test already exists in WebKit/CMakeLists.txt, so we just have | 
 |         to move it to a common file (WebKitCompilerFlags.cmake) and use | 
 |         its result (ATOMIC_INT64_REQUIRES_LIBATOMIC) here. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-05-15  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Check TypeInfo first before calling getCallData when we would like to check whether given object is a function | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185601 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Rename TypeOfShouldCallGetCallData to OverridesGetCallData. And check OverridesGetCallData | 
 |         before calling getCallData when we would like to check whether a given object is callable | 
 |         since getCallData is a virtual call. When we call the object anyway, directly calling getCallData | 
 |         is fine. But if we would like to check whether the object is callable, we can have non | 
 |         callable objects frequently. In that case, we should not call getCallData if we can avoid it. | 
 |  | 
 |         To do this cleanly, we refactor JSValue::{isFunction,isCallable}. We add JSCell::{isFunction,isCallable} | 
 |         and JSValue ones call into these functions. Inside JSCell::{isFunction,isCallable}, we perform | 
 |         OverridesGetCallData checking before calling getCallData. | 
 |  | 
 |         We found that this virtual call exists in JSON.stringify's critial path. Checking | 
 |         OverridesGetCallData improves Kraken/json-stringify-tinderbox by 2-4%. | 
 |  | 
 |                                                baseline                  patched | 
 |  | 
 |             json-stringify-tinderbox        38.807+-0.350      ^      37.216+-0.337         ^ definitely 1.0427x faster | 
 |  | 
 |         In addition to that, we also add OverridesGetCallData flag to JSFunction while we keep JSFunctionType checking fast path | 
 |         since major cases are covered by this fast JSFunctionType checking. | 
 |  | 
 |         * API/JSCallbackObject.h: | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileIsObjectOrNull): | 
 |         (JSC::DFG::SpeculativeJIT::compileIsFunction): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isExoticForTypeof): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::emitTypeOf): | 
 |         * runtime/ExceptionHelpers.cpp: | 
 |         (JSC::createError): | 
 |         (JSC::createInvalidFunctionApplyParameterError): | 
 |         * runtime/FunctionPrototype.cpp: | 
 |         (JSC::functionProtoFuncToString): | 
 |         * runtime/InternalFunction.h: | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::isFunction const): | 
 |         (JSC::JSValue::isCallable const): | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::isFunction): | 
 |         ALWAYS_INLINE works well for my environment. | 
 |         (JSC::JSCell::isCallable): | 
 |         * runtime/JSFunction.h: | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::Stringifier::toJSON): | 
 |         (JSC::Stringifier::toJSONImpl): | 
 |         (JSC::Stringifier::appendStringifiedValue): | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::createListFromArrayLike): | 
 |         * runtime/JSTypeInfo.h: | 
 |         (JSC::TypeInfo::overridesGetCallData const): | 
 |         (JSC::TypeInfo::typeOfShouldCallGetCallData const): Deleted. | 
 |         * runtime/Operations.cpp: | 
 |         (JSC::jsTypeStringForValue): | 
 |         (JSC::jsIsObjectTypeOrNull): | 
 |         * runtime/ProxyObject.h: | 
 |         * runtime/RuntimeType.cpp: | 
 |         (JSC::runtimeTypeForValue): | 
 |         * runtime/RuntimeType.h: | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::Structure): | 
 |         * runtime/TypeProfilerLog.cpp: | 
 |         (JSC::TypeProfilerLog::TypeProfilerLog): | 
 |         (JSC::TypeProfilerLog::processLogEntries): | 
 |         * runtime/TypeProfilerLog.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::enableTypeProfiler): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionFindTypeForExpression): | 
 |         (JSC::functionReturnTypeFor): | 
 |         (JSC::functionHasBasicBlockExecuted): | 
 |         (JSC::functionBasicBlockExecutionCount): | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::getWasmBufferFromValue): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/WebAssemblyFunction.cpp: | 
 |         (JSC::callWebAssemblyFunction): | 
 |         * wasm/js/WebAssemblyInstanceConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyInstance): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::webAssemblyInstantiateFunc): | 
 |         (JSC::webAssemblyInstantiateStreamingInternal): | 
 |         * wasm/js/WebAssemblyWrapperFunction.cpp: | 
 |         (JSC::WebAssemblyWrapperFunction::finishCreation): | 
 |  | 
 | 2018-05-15  Devin Rousso  <webkit@devinrousso.com> | 
 |  | 
 |         Web Inspector: Add rulers and guides | 
 |         https://bugs.webkit.org/show_bug.cgi?id=32263 | 
 |         <rdar://problem/19281564> | 
 |  | 
 |         Reviewed by Matt Baker. | 
 |  | 
 |         * inspector/protocol/OverlayTypes.json: | 
 |  | 
 | 2018-05-14  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Remove butterflyMask from DFGAbstractHeap | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185640 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We don't have a butterfly indexing mask anymore so we don't need | 
 |         the abstract heap information for it anymore. | 
 |  | 
 |         * dfg/DFGAbstractHeap.h: | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-05-14  Andy VanWagoner  <andy@vanwagoner.family> | 
 |  | 
 |         [INTL] Handle error in defineProperty for supported locales length | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185623 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Adds the missing RETURN_IF_EXCEPTION after defineOwnProperty for the | 
 |         length of the supported locales array. | 
 |  | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::supportedLocales): | 
 |  | 
 | 2018-05-14  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Tweak LiteralParser to improve lexing performance | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185541 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch attemps to improve LiteralParser performance. | 
 |  | 
 |         This patch improves Kraken/json-parse-financial by roughly ~10%. | 
 |                                            baseline                  patched | 
 |  | 
 |             json-parse-financial        65.810+-1.591      ^      59.943+-1.784         ^ definitely 1.0979x faster | 
 |  | 
 |         * parser/Lexer.cpp: | 
 |         (JSC::Lexer<T>::Lexer): | 
 |         * runtime/ArgList.h: | 
 |         (JSC::MarkedArgumentBuffer::takeLast): | 
 |         Add takeLast() for idiomatic last() + removeLast() calls. | 
 |  | 
 |         * runtime/LiteralParser.cpp: | 
 |         (JSC::LiteralParser<CharType>::Lexer::lex): | 
 |         Do not have mode in its template parameter. While lex function is large, this mode is not used in a critical path. | 
 |         We should not include this mode in its template parameter to reduce the code size. | 
 |         And we do not use template parameter for a terminator since duplicating ' and " code for lexString is not good. | 
 |         Also, we construct TokenType table to remove bunch of unnecessary switch cases. | 
 |  | 
 |         (JSC::LiteralParser<CharType>::Lexer::next): | 
 |         (JSC::isSafeStringCharacter): | 
 |         Take mode in its template parameter. But do not take terminator character in its template parameter. | 
 |  | 
 |         (JSC::LiteralParser<CharType>::Lexer::lexString): | 
 |         (JSC::LiteralParser<CharType>::Lexer::lexStringSlow): | 
 |         Duplicate while statements manually since this is a critical path. | 
 |  | 
 |         (JSC::LiteralParser<CharType>::parse): | 
 |         Use takeLast(). | 
 |  | 
 |         * runtime/LiteralParser.h: | 
 |  | 
 | 2018-05-14  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Use btpz to compare against 0 instead of bpeq | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185607 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Fixes build on MIPS since MIPS doesn't have an instruction to | 
 |         compare a register against an immediate. Since the immediate is just 0 | 
 |         in this case the simplest solution is just to use btpz instead of bpeq | 
 |         to compare to 0. | 
 |  | 
 |         * llint/LowLevelInterpreter.asm: | 
 |  | 
 | 2018-05-12  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         CachedCall::call() should be faster | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185583 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         CachedCall is an optimization for String.prototype.replace(r, f) where f is a function. | 
 |         Unfortunately, because of a combination of abstraction and assertions, this code path had a | 
 |         lot of overhead. This patch reduces this overhead by: | 
 |          | 
 |         - Turning off some assertions. These assertions don't look to have security value; they're | 
 |           mostly for sanity. I turned off stack alignment checks and VM state checks having to do | 
 |           with whether the JSLock is held. The JSLock checks are not relevant when doing a cached | 
 |           call, considering that the caller would have already been strongly assuming that the JSLock | 
 |           is held. | 
 |          | 
 |         - Making more things inlineable. | 
 |          | 
 |         This looks like a small (4% ish) speed-up on SunSpider/string-unpack-code. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * interpreter/CachedCall.h: | 
 |         (JSC::CachedCall::call): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::checkedReturn): Deleted. | 
 |         * interpreter/Interpreter.h: | 
 |         (JSC::Interpreter::checkedReturn): | 
 |         * interpreter/InterpreterInlines.h: | 
 |         (JSC::Interpreter::execute): | 
 |         * jit/JITCode.cpp: | 
 |         (JSC::JITCode::execute): Deleted. | 
 |         * jit/JITCodeInlines.h: Added. | 
 |         (JSC::JITCode::execute): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/StringPrototype.cpp: | 
 |  | 
 | 2018-05-13  Andy VanWagoner  <andy@vanwagoner.family> | 
 |  | 
 |         [INTL] Improve spec & test262 compliance for Intl APIs | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185578 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Use putDirectIndex over push for lists to arrays. | 
 |         Update default options to construct with a null prototype. | 
 |         Define constructor and toStringTag on prototypes. | 
 |         Add proper time clipping. | 
 |         Remove some outdated comment spec text, use url instead. | 
 |  | 
 |         * runtime/IntlCollator.cpp: | 
 |         (JSC::IntlCollator::initializeCollator): | 
 |         * runtime/IntlCollatorConstructor.cpp: | 
 |         (JSC::IntlCollatorConstructor::finishCreation): | 
 |         * runtime/IntlCollatorPrototype.cpp: | 
 |         (JSC::IntlCollatorPrototype::finishCreation): | 
 |         * runtime/IntlDateTimeFormatConstructor.cpp: | 
 |         (JSC::IntlDateTimeFormatConstructor::finishCreation): | 
 |         * runtime/IntlDateTimeFormatPrototype.cpp: | 
 |         (JSC::IntlDateTimeFormatPrototype::finishCreation): | 
 |         (JSC::IntlDateTimeFormatFuncFormatDateTime): | 
 |         (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts): | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |         * runtime/IntlNumberFormatConstructor.cpp: | 
 |         (JSC::IntlNumberFormatConstructor::finishCreation): | 
 |         * runtime/IntlNumberFormatPrototype.cpp: | 
 |         (JSC::IntlNumberFormatPrototype::finishCreation): | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::lookupSupportedLocales): | 
 |         (JSC::supportedLocales): | 
 |         (JSC::intlObjectFuncGetCanonicalLocales): | 
 |         * runtime/IntlPluralRules.cpp: | 
 |         (JSC::IntlPluralRules::resolvedOptions): | 
 |         * runtime/IntlPluralRulesConstructor.cpp: | 
 |         (JSC::IntlPluralRulesConstructor::finishCreation): | 
 |  | 
 | 2018-05-11  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "*" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Added BigInt support into times binary operator into LLInt and on | 
 |         JITOperations profiledMul and unprofiledMul. We are also replacing all | 
 |         uses of int to unsigned when there is no negative values for | 
 |         variables. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::JSBigInt): | 
 |         (JSC::JSBigInt::allocationSize): | 
 |         (JSC::JSBigInt::createWithLength): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         (JSC::JSBigInt::internalMultiplyAdd): | 
 |         (JSC::JSBigInt::multiplyAccumulate): | 
 |         (JSC::JSBigInt::equals): | 
 |         (JSC::JSBigInt::absoluteDivSmall): | 
 |         (JSC::JSBigInt::calculateMaximumCharactersRequired): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::rightTrim): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::toNumeric const): | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsMul): | 
 |  | 
 | 2018-05-11  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231316 and r231332. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185564 | 
 |  | 
 |         Appears to be a Speedometer2/MotionMark regression (Requested | 
 |         by keith_miller on #webkit). | 
 |  | 
 |         Reverted changesets: | 
 |  | 
 |         "Remove the prototype caching for get_by_id in the LLInt" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185226 | 
 |         https://trac.webkit.org/changeset/231316 | 
 |  | 
 |         "Unreviewed, fix 32-bit profile offset for change in bytecode" | 
 |         https://trac.webkit.org/changeset/231332 | 
 |  | 
 | 2018-05-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         [DFG] Compiler uses incorrect output register for NumberIsInteger operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185328 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Fixed a typo from when this code was added in r228968 where resultGPR | 
 |         was assigned the input register instead of the result.gpr(). | 
 |  | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |  | 
 | 2018-05-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't use inferred types when the JIT is disabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185539 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         There are many JSC API clients that run with the JIT disabled. They were | 
 |         all allocating and tracking inferred types for no benefit. Inferred types | 
 |         only benefit programs when they make it to the DFG/FTL. I was seeing cases | 
 |         where the inferred type machinery used ~0.5MB. This patch makes is so we | 
 |         don't allocate that machinery when the JIT is disabled. | 
 |  | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::willStoreValueSlow): | 
 |         * runtime/Structure.h: | 
 |  | 
 | 2018-05-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't allocate value profiles when the JIT is disabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185525 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         There are many JSC API clients that run with the JIT disabled. We were | 
 |         still allocating a ton of value profiles in this use case even though | 
 |         these clients get no benefit from doing value profiling. This patch makes | 
 |         it so that we don't allocate value profiles or argument value profiles | 
 |         when we're not using the JIT. We now just make all value profiles in | 
 |         the instruction stream point to a global value profile that the VM owns. | 
 |         And we make the argument value profile array have zero length and teach | 
 |         the LLInt how to handle that. Heap clears the global value profile on each GC. | 
 |  | 
 |         In an app that I'm testing this against, this saves ~1MB of memory. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         (JSC::CodeBlock::setNumParameters): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::numberOfArgumentValueProfiles): | 
 |         (JSC::CodeBlock::valueProfileForArgument): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitProfiledOpcode): | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::runEndPhase): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-10  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [JSC][GLIB] Add introspectable alternatives to functions using vargars | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185508 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         * API/glib/JSCClass.cpp: | 
 |         (jscClassCreateConstructor): | 
 |         (jsc_class_add_constructor): | 
 |         (jsc_class_add_constructorv): | 
 |         (jscClassAddMethod): | 
 |         (jsc_class_add_method): | 
 |         (jsc_class_add_methodv): | 
 |         * API/glib/JSCClass.h: | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsObjectCall): | 
 |         (jscValueCallFunction): | 
 |         (jsc_value_object_invoke_methodv): | 
 |         (jscValueFunctionCreate): | 
 |         (jsc_value_new_function): | 
 |         (jsc_value_new_functionv): | 
 |         (jsc_value_function_callv): | 
 |         (jsc_value_constructor_callv): | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-05-10  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Make return types of construction functions tight | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185509 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Array and Object construction functions should return strict types instead of returning JSObject*/JSValue. | 
 |  | 
 |         * runtime/ArrayConstructor.cpp: | 
 |         (JSC::constructArrayWithSizeQuirk): | 
 |         * runtime/ArrayConstructor.h: | 
 |         * runtime/ObjectConstructor.h: | 
 |         (JSC::constructEmptyObject): | 
 |  | 
 | 2018-05-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Object.assign for final objects should be faster | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185348 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Object.assign is so heavily used to clone an object. For example, speedometer react-redux can be significantly | 
 |         improved if Object.assign becomes fast. It is worth adding a complex fast path to accelerate the major use cases. | 
 |  | 
 |         If enumerating properties of source objects and putting properties to target object are non observable, | 
 |         we can avoid hash table looking up of source object properties. We can enumerate object property entries, | 
 |         and put them to target object. This patch adds this fast path to Object.assign implementation. | 
 |  | 
 |         When enumerating properties, we need to ensure that the given |source| object does not include "__proto__" | 
 |         property since we cannot perform fast [[Put]] for the |target| object. We add a new flag | 
 |         "HasUnderscoreProtoPropertyExcludingOriginalProto" to Structure to track this state. | 
 |  | 
 |         This improves object-assign.es6 by 1.85x. | 
 |  | 
 |                                         baseline                  patched | 
 |  | 
 |             object-assign.es6      368.6132+-8.3508     ^    198.8775+-4.9042        ^ definitely 1.8535x faster | 
 |  | 
 |         And Speedometer2.0 React-Redux-TodoMVC's total time is improved from 490ms to 431ms. | 
 |  | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::canPerformFastPutInlineExcludingProto): | 
 |         (JSC::JSObject::canPerformFastPutInline): | 
 |         * runtime/ObjectConstructor.cpp: | 
 |         (JSC::objectConstructorAssign): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::Structure): | 
 |         * runtime/Structure.h: | 
 |         * runtime/StructureInlines.h: | 
 |         (JSC::Structure::forEachProperty): | 
 |         (JSC::Structure::add): | 
 |  | 
 | 2018-05-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG CFA should pick the right time to inject OSR entry data | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185530 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         Previously, we would do a bonus run of CFA to inject OSR entry data. This patch makes us inject | 
 |         OSR entry data as part of the normal flow of CFA, which reduces the total number of CFA | 
 |         reexecutions while minimizing the likelihood that we have CFA execute constants in paths that | 
 |         would eventually LUB to non-constant. | 
 |          | 
 |         This looks like almost a 1% speed-up on SunSpider-CompileTime. All of the logic for preventing | 
 |         execution over constants is for V8Spider-CompileTime/regexp, which would otherwise do a lot of | 
 |         useless regexp/string execution in the compiler. | 
 |  | 
 |         * dfg/DFGBlockSet.h: | 
 |         (JSC::DFG::BlockSet::remove): | 
 |         * dfg/DFGCFAPhase.cpp: | 
 |         (JSC::DFG::CFAPhase::run): | 
 |         (JSC::DFG::CFAPhase::injectOSR): | 
 |         (JSC::DFG::CFAPhase::performBlockCFA): | 
 |  | 
 | 2018-05-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         InPlaceAbstractState::beginBasicBlock shouldn't copy all m_variables every time | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185452 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         We were spending a lot of time in beginBasicBlock() just copying the state of all variables | 
 |         from the block head to InPlaceAbstractState::m_variables. It is necessary for | 
 |         InPlaceAbstractState to have its own copy since we need to mutate it separately from | 
 |         block->valuesAtHead. But most variables are untouched by most basic blocks, so this was a lot | 
 |         of superfluous work. | 
 |          | 
 |         This change adds a bitvector called m_activeVariables that tracks which variables have been | 
 |         copied. We lazily copy the variables on first use. Variables that were never copied also have | 
 |         a simplified merging path, which just needs to consider if the variable got clobbered between | 
 |         head and tail. | 
 |          | 
 |         This is a 1.5% speed-up on SunSpider-CompileTime and a 1.7% speed-up on V8Spider-CompileTime. | 
 |  | 
 |         * bytecode/Operands.h: | 
 |         (JSC::Operands::argumentIndex const): | 
 |         (JSC::Operands::localIndex const): | 
 |         (JSC::Operands::argument): | 
 |         (JSC::Operands::argument const): | 
 |         (JSC::Operands::local): | 
 |         (JSC::Operands::local const): | 
 |         (JSC::Operands::operandIndex const): | 
 |         * dfg/DFGAbstractValue.h: | 
 |         (JSC::DFG::AbstractValue::fastForwardFromTo): | 
 |         * dfg/DFGCFAPhase.cpp: | 
 |         (JSC::DFG::CFAPhase::performForwardCFA): | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::beginBasicBlock): | 
 |         (JSC::DFG::InPlaceAbstractState::variablesForDebugging): | 
 |         (JSC::DFG::InPlaceAbstractState::activateAllVariables): | 
 |         (JSC::DFG::InPlaceAbstractState::endBasicBlock): | 
 |         (JSC::DFG::InPlaceAbstractState::activateVariable): | 
 |         (JSC::DFG::InPlaceAbstractState::mergeStateAtTail): Deleted. | 
 |         * dfg/DFGInPlaceAbstractState.h: | 
 |         (JSC::DFG::InPlaceAbstractState::variableAt): | 
 |         (JSC::DFG::InPlaceAbstractState::operand): | 
 |         (JSC::DFG::InPlaceAbstractState::local): | 
 |         (JSC::DFG::InPlaceAbstractState::argument): | 
 |         (JSC::DFG::InPlaceAbstractState::activateVariableIfNecessary): | 
 |         (JSC::DFG::InPlaceAbstractState::variablesForDebugging): Deleted. | 
 |  | 
 | 2018-05-09  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "==" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184474 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is implementing support of BigInt for equals operator | 
 |         following the spec semantics[1]. | 
 |  | 
 |         [1] - https://tc39.github.io/proposal-bigint/#sec-abstract-equality-comparison | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::stringToBigInt): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         (JSC::JSBigInt::equalsToNumber): | 
 |         (JSC::JSBigInt::compareToDouble): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::equalSlowCaseInline): | 
 |  | 
 | 2018-05-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Speed up AbstractInterpreter::executeEdges | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185457 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch started out with the desire to make executeEdges() faster by making filtering faster. | 
 |         However, when I studied the disassembly, I found that there are many opportunities for | 
 |         improvement and I implemented all of them: | 
 |          | 
 |         - Filtering itself now has an inline fast path for when the filtering didn't change the value or | 
 |           for non-cells. | 
 |          | 
 |         - Edge execution doesn't fast-forward anything if the filtering fast path would have succeeded, | 
 |           since fast-forwarding is only interesting for cells and only if we have a clobbered value. | 
 |          | 
 |         - Similarly, edge verification doesn't need to fast-forward in the common case. | 
 |          | 
 |         - A bunch of stuff related to Graph::doToChildren is now inlined properly. | 
 |          | 
 |         - The edge doesn't even have to be considered for execution if it's UntypedUse. | 
 |          | 
 |         That last bit was the trickiest. We had gotten into a bad habit of using SpecFullNumber in the | 
 |         abstract interpreter. It's not correct to use SpecFullNumber in the abstract interpreter, because | 
 |         it means proving that the value could either be formatted as a double (with impure NaN values), | 
 |         or as any JSValue, or as an Int52. There is no value that could possibly hold all of those | 
 |         states. This "worked" before because UntypedUse would filter this down to SpecBytecodeNumber. To | 
 |         make it work again, I needed to fix all of those uses of SpecFullNumber. In the future, we need | 
 |         to be careful about picking either SpecFullDouble (if returning a DoubleRep) or | 
 |         SpecBytecodeNumber (if returning a JSValueRep). | 
 |          | 
 |         But that fix revealed an amazing timeout in | 
 |         stress/keep-checks-when-converting-to-lazy-js-constant-in-strength-reduction.js. We were getting | 
 |         stuck in an OSR loop (baseline->DFG->FTL->baseline), all involving the same bytecode, without | 
 |         ever realizing that we should jettison something. The problem was with how | 
 |         triggerReoptimizationNow was getting the optimizedCodeBlock. It was trying to guess it by using | 
 |         baselineCodeBlock->replacement(), but that's wrong for FTL-for-OSR-entry code blocks. | 
 |          | 
 |         This is a 1% improvement in V8Spider-CompileTime. | 
 |  | 
 |         * bytecode/ExitKind.cpp: | 
 |         (JSC::exitKindMayJettison): | 
 |         * dfg/DFGAbstractInterpreter.h: | 
 |         (JSC::DFG::AbstractInterpreter::filterEdgeByUse): | 
 |         (JSC::DFG::AbstractInterpreter::filterByType): Deleted. | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreterExecuteEdgesFunc::AbstractInterpreterExecuteEdgesFunc): | 
 |         (JSC::DFG::AbstractInterpreterExecuteEdgesFunc::operator() const): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEdges): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::filterByType): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::verifyEdge): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::filterSlow): | 
 |         (JSC::DFG::AbstractValue::fastForwardToAndFilterSlow): | 
 |         * dfg/DFGAbstractValue.h: | 
 |         (JSC::DFG::AbstractValue::filter): | 
 |         (JSC::DFG::AbstractValue::fastForwardToAndFilter): | 
 |         (JSC::DFG::AbstractValue::fastForwardToAndFilterUnproven): | 
 |         (JSC::DFG::AbstractValue::makeTop): | 
 |         * dfg/DFGAtTailAbstractState.h: | 
 |         (JSC::DFG::AtTailAbstractState::fastForward): | 
 |         (JSC::DFG::AtTailAbstractState::forNodeWithoutFastForward): | 
 |         (JSC::DFG::AtTailAbstractState::fastForwardAndFilterUnproven): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::doToChildren): | 
 |         * dfg/DFGInPlaceAbstractState.h: | 
 |         (JSC::DFG::InPlaceAbstractState::fastForward): | 
 |         (JSC::DFG::InPlaceAbstractState::fastForwardAndFilterUnproven): | 
 |         (JSC::DFG::InPlaceAbstractState::forNodeWithoutFastForward): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::executeOSRExit): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::handleExitCounts): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |  | 
 | 2018-05-09  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add JSVirtualMachine SPI to shrink the memory footprint of the VM | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185441 | 
 |         <rdar://problem/39999414> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This patch adds JSVirtualMachine SPI to release as much memory as possible. | 
 |         The SPI does: | 
 |         - Deletes all code caches. | 
 |         - Synchronous GC. | 
 |         - Run the scavenger. | 
 |  | 
 |         * API/JSVirtualMachine.mm: | 
 |         (-[JSVirtualMachine shrinkFootprint]): | 
 |         * API/JSVirtualMachinePrivate.h: Added. | 
 |         * API/tests/testapi.mm: | 
 |         (testObjectiveCAPIMain): | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::shrinkFootprint): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-09  Leo Balter  <leonardo.balter@gmail.com> | 
 |  | 
 |         [JSC] Fix ArraySpeciesCreate to return a new Array when the given object is not an array | 
 |         Error found in the following Test262 tests: | 
 |  | 
 |         - test/built-ins/Array/prototype/slice/create-non-array-invalid-len.js | 
 |         - test/built-ins/Array/prototype/slice/create-proxied-array-invalid-len.js | 
 |         - test/built-ins/Array/prototype/splice/create-species-undef-invalid-len.js | 
 |  | 
 |         The ArraySpeciesCreate should throw a RangeError with non-Array custom objects | 
 |         presenting a length > 2**32-1 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185476 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * runtime/ArrayPrototype.cpp: | 
 |  | 
 | 2018-05-09  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         [WPE] Build cleanly with GCC 8 and ICU 60 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185462 | 
 |  | 
 |         Reviewed by Carlos Alberto Lopez Perez. | 
 |  | 
 |         * API/glib/JSCClass.cpp: Silence many -Wcast-function-type warnings. | 
 |         (jsc_class_add_constructor): | 
 |         (jsc_class_add_method): | 
 |         * API/glib/JSCValue.cpp: Silence many -Wcast-function-type warnings. | 
 |         (jsc_value_object_define_property_accessor): | 
 |         (jsc_value_new_function): | 
 |         * CMakeLists.txt: Build BuiltinNames.cpp with -fno-var-tracking-assignments. This was a | 
 |         problem with GCC 7 too, but might as well fix it now. | 
 |         * assembler/ProbeContext.h: | 
 |         (JSC::Probe::CPUState::gpr const): Silence a -Wclass-memaccess warning. | 
 |         (JSC::Probe::CPUState::spr const): Ditto. Assume std::remove_const is safe to clobber. | 
 |         * b3/air/AirArg.h: | 
 |         (JSC::B3::Air::Arg::isRepresentableAs): Silence -Wfallthrough warning. | 
 |         * builtins/BuiltinNames.cpp: | 
 |         (JSC::BuiltinNames::BuiltinNames): Moved from BuiltinNames.h so we can use a special flag. | 
 |         * builtins/BuiltinNames.h: | 
 |         (JSC::BuiltinNames::BuiltinNames): Moved to BuiltinNames.cpp. | 
 |         * dfg/DFGDoubleFormatState.h: | 
 |         (JSC::DFG::mergeDoubleFormatStates): Silence -Wfallthrough warnings. | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::Handle::finishSweepKnowingHeapCellType): Silence -Wfallthrough warnings. | 
 |         * runtime/ConfigFile.cpp: | 
 |         (JSC::ConfigFile::canonicalizePaths): Here GCC found a genuine mistake, strncat is called | 
 |         with the wrong length parameter and the result is not null-terminated. Also, silence a | 
 |         -Wstringop-truncation warning as we intentionally truncate filenames that exceed PATH_MAX. | 
 |         * runtime/IntlDateTimeFormat.cpp: | 
 |         (JSC::IntlDateTimeFormat::partTypeString): Avoid an ICU deprecation warning. | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): We were unconditionally running some BigInt code by accident. | 
 |         (JSC::JSGlobalObject::visitChildren): Probably a serious bug? Fixed. | 
 |  | 
 | 2018-05-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [ARMv7] Drop ARMv7 disassembler in favor of capstone | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185423 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         This patch removes ARMv7Disassembler in our tree. | 
 |         We already adopted Capstone, and it is already used in ARMv7 JIT environments. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * disassembler/ARMv7/ARMv7DOpcode.cpp: Removed. | 
 |         * disassembler/ARMv7/ARMv7DOpcode.h: Removed. | 
 |         * disassembler/ARMv7Disassembler.cpp: Removed. | 
 |  | 
 | 2018-05-09  Srdjan Lazarevic  <srdjan.lazarevic@rt-rk.com> | 
 |  | 
 |         [MIPS] Optimize generated JIT code using r2 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184584 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         EXT and MFHC1 instructions from MIPSR2 implemented and used where it is possible. | 
 |         Also, done some code size optimizations that were discovered in meantime. | 
 |  | 
 |         * assembler/MIPSAssembler.h: | 
 |         (JSC::MIPSAssembler::ext): | 
 |         (JSC::MIPSAssembler::mfhc1): | 
 |         * assembler/MacroAssemblerMIPS.cpp: | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::isPowerOf2): | 
 |         (JSC::MacroAssemblerMIPS::bitPosition): | 
 |         (JSC::MacroAssemblerMIPS::loadAddress): | 
 |         (JSC::MacroAssemblerMIPS::getEffectiveAddress): | 
 |         (JSC::MacroAssemblerMIPS::load8): | 
 |         (JSC::MacroAssemblerMIPS::load8SignedExtendTo32): | 
 |         (JSC::MacroAssemblerMIPS::load32): | 
 |         (JSC::MacroAssemblerMIPS::load16Unaligned): | 
 |         (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords): | 
 |         (JSC::MacroAssemblerMIPS::load16): | 
 |         (JSC::MacroAssemblerMIPS::load16SignedExtendTo32): | 
 |         (JSC::MacroAssemblerMIPS::store8): | 
 |         (JSC::MacroAssemblerMIPS::store16): | 
 |         (JSC::MacroAssemblerMIPS::store32): | 
 |         (JSC::MacroAssemblerMIPS::branchTest32): | 
 |         (JSC::MacroAssemblerMIPS::loadFloat): | 
 |         (JSC::MacroAssemblerMIPS::loadDouble): | 
 |         (JSC::MacroAssemblerMIPS::storeFloat): | 
 |         (JSC::MacroAssemblerMIPS::storeDouble): | 
 |  | 
 | 2018-05-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC][GTK][JSCONLY] Use capstone disassembler | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185283 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Instead of adding MIPS disassembler baked by ourselves, we import capstone disassembler. | 
 |         And use capstone disassembler for MIPS, ARM, and ARMv7 in GTK, WPE, WinCairo and JSCOnly ports. | 
 |  | 
 |         And we remove ARM LLVM disassembler. | 
 |  | 
 |         Capstone is licensed under 3-clause BSD, which is acceptable in WebKit tree. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * Sources.txt: | 
 |         * disassembler/ARMLLVMDisassembler.cpp: Removed. | 
 |         * disassembler/CapstoneDisassembler.cpp: Added. | 
 |         (JSC::tryToDisassemble): | 
 |  | 
 | 2018-05-09  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Use mfhc1 and mthc1 to fix assembler error | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185464 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         The binutils-assembler started to report failures for copying words between | 
 |         GP and FP registers for odd FP register indices. Use mfhc1 and mthc1 instead | 
 |         of mfc1 and mtc1 for conversion. | 
 |  | 
 |         * offlineasm/mips.rb: | 
 |  | 
 | 2018-05-08  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Collect callee-saved register using inline assembly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185428 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         MIPS used setjmp instead of collecting registers with inline assembly like | 
 |         other architectures. | 
 |  | 
 |         * heap/RegisterState.h: | 
 |  | 
 | 2018-05-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [BigInt] Simplifying JSBigInt by using bool addition | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185374 | 
 |  | 
 |         Reviewed by Alex Christensen. | 
 |  | 
 |         Since using TWO_DIGIT does not produce good code, we remove this part from digitAdd and digitSub. | 
 |         Just adding overflow flag to carry/borrow produces setb + add in x86. | 
 |  | 
 |         Also we annotate small helper functions and accessors with `inline` not to call these functions | 
 |         inside internalMultiplyAdd loop. | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::isZero): | 
 |         (JSC::JSBigInt::inplaceMultiplyAdd): | 
 |         (JSC::JSBigInt::digitAdd): | 
 |         (JSC::JSBigInt::digitSub): | 
 |         (JSC::JSBigInt::digitMul): | 
 |         (JSC::JSBigInt::digitPow): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         (JSC::JSBigInt::offsetOfData): | 
 |         (JSC::JSBigInt::dataStorage): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |  | 
 | 2018-05-08  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Replace multiple Watchpoint Set fireAll() methods with templates | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185456 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Refactored to minimize duplicate code. | 
 |  | 
 |         * bytecode/Watchpoint.h: | 
 |         (JSC::WatchpointSet::fireAll): | 
 |         (JSC::InlineWatchpointSet::fireAll): | 
 |  | 
 | 2018-05-08  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG::FlowMap::resize() shouldn't resize the shadow map unless we're in SSA | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185453 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         Tiny improvement for compile times. | 
 |  | 
 |         * dfg/DFGFlowMap.h: | 
 |         (JSC::DFG::FlowMap::resize): Remove one Vector::resize() when we're not in SSA. | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::beginBasicBlock): Record some data about how long we spend in different parts of this and add a FIXME linking bug 185452. | 
 |  | 
 | 2018-05-08  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Deferred firing of structure transition watchpoints is racy | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185438 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Changed DeferredStructureTransitionWatchpointFire to take the watchpoints to fire | 
 |         and fire them in the destructor.  When the watchpoints are taken from the | 
 |         original WatchpointSet, that WatchpointSet if marked invalid. | 
 |  | 
 |         * bytecode/Watchpoint.cpp: | 
 |         (JSC::WatchpointSet::fireAllSlow): | 
 |         (JSC::WatchpointSet::take): | 
 |         (JSC::DeferredWatchpointFire::DeferredWatchpointFire): | 
 |         (JSC::DeferredWatchpointFire::~DeferredWatchpointFire): | 
 |         (JSC::DeferredWatchpointFire::fireAll): | 
 |         (JSC::DeferredWatchpointFire::takeWatchpointsToFire): | 
 |         * bytecode/Watchpoint.h: | 
 |         (JSC::WatchpointSet::fireAll): | 
 |         (JSC::InlineWatchpointSet::fireAll): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::setPrototypeDirect): | 
 |         (JSC::JSObject::convertToDictionary): | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::Structure): | 
 |         (JSC::DeferredStructureTransitionWatchpointFire::DeferredStructureTransitionWatchpointFire): | 
 |         (JSC::DeferredStructureTransitionWatchpointFire::~DeferredStructureTransitionWatchpointFire): | 
 |         (JSC::DeferredStructureTransitionWatchpointFire::dump const): | 
 |         (JSC::Structure::didTransitionFromThisStructure const): | 
 |         (JSC::DeferredStructureTransitionWatchpointFire::add): Deleted. | 
 |         * runtime/Structure.h: | 
 |         (JSC::DeferredStructureTransitionWatchpointFire::structure const): | 
 |  | 
 | 2018-05-08  Eric Carlson  <eric.carlson@apple.com> | 
 |  | 
 |         Consecutive messages logged as JSON are coalesced | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185432 | 
 |  | 
 |         Reviewed by Joseph Pecoraro. | 
 |  | 
 |         * inspector/ConsoleMessage.cpp: | 
 |         (Inspector::ConsoleMessage::isEqual const): Messages with JSON arguments are not equal. | 
 |  | 
 | 2018-05-06  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         InPlaceAbstractState::beginBasicBlock shouldn't have to clear any abstract values | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185365 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This patch does three things to improve compile times: | 
 |          | 
 |         - Fixes some inlining goofs. | 
 |          | 
 |         - Adds the ability to measure compile times with run-jsc-benchmarks. | 
 |          | 
 |         - Dramatically improves the performance of InPlaceAbstractState::beginBasicBlock by removing the | 
 |           code that clears abstract values. It turns out that on constant folding "needed" this, in the | 
 |           sense that this was the only thing protecting it from loading the abstract value of a no-result | 
 |           node and then concluding that because it had a non-empty m_value, it could be constant-folded. | 
 |           Any node that produces a result will explicitly set its abstract value, so this problem can | 
 |           also be guarded by just having constant folding check if the node it wants to fold returns any | 
 |           result. | 
 |          | 
 |         Solid 0.96% compile time speed-up across SunSpider-CompileTime and V8Spider-CompileTime. | 
 |          | 
 |         Rolling back in after fixing cloop build. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::set): | 
 |         * dfg/DFGAbstractValue.h: | 
 |         (JSC::DFG::AbstractValue::merge): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::doToChildrenWithNode): | 
 |         (JSC::DFG::Graph::doToChildren): | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::beginBasicBlock): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::totalCompileTime): | 
 |         * jit/JIT.h: | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionTotalCompileTime): | 
 |  | 
 | 2018-05-08  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r231468. | 
 |  | 
 |         Broke the CLoop build | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "InPlaceAbstractState::beginBasicBlock shouldn't have to clear | 
 |         any abstract values" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185365 | 
 |         https://trac.webkit.org/changeset/231468 | 
 |  | 
 | 2018-05-07  Daniel Bates  <dabates@apple.com> | 
 |  | 
 |         Check X-Frame-Options and CSP frame-ancestors in network process | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185410 | 
 |         <rdar://problem/37733934> | 
 |  | 
 |         Reviewed by Ryosuke Niwa. | 
 |  | 
 |         Add enum traits for MessageSource and MessageLevel so that we can encode and decode them for IPC. | 
 |  | 
 |         * runtime/ConsoleTypes.h: | 
 |  | 
 | 2018-05-07  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make a compact version of VariableEnvironment that UnlinkedFunctionExecutable stores and hash-cons these compact environments as we make them | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185329 | 
 |         <rdar://problem/39961536> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         I was made aware of a memory goof inside of JSC where we would inefficiently | 
 |         use space to represent an UnlinkedFunctionExecutable's parent TDZ variables. | 
 |          | 
 |         We did two things badly: | 
 |         1. We used a HashMap instead of a Vector to represent the environment. Having | 
 |         a HashMap is useful when looking things up when generating bytecode, but it's | 
 |         space inefficient. Because UnlinkedFunctionExecutables live a long time because | 
 |         of the code cache, we should have them store this information efficiently | 
 |         inside of a Vector. | 
 |          | 
 |         2. We didn't hash-cons these environments together. If you think about how | 
 |         some programs are structured, hash-consing these together is hugely profitable. | 
 |         Consider some code like this: | 
 |         ``` | 
 |         const/let V_1 = ...; | 
 |         const/let V_2 = ...; | 
 |         ... | 
 |         const/let V_n = ...; | 
 |          | 
 |         function f_1() { ... }; | 
 |         function f_2() { ... }; | 
 |         ... | 
 |         function f_n() { ... }; | 
 |         ``` | 
 |          | 
 |         Each f_i would store an identical hash map for its parent TDZ variables | 
 |         consisting of {V_1, ..., V_n}. This was incredibly dumb. With hash-consing, | 
 |         each f_i just holds onto a reference to the environment. | 
 |          | 
 |         I benchmarked this change against an app that made heavy use of the | 
 |         above code pattern and it reduced its peak memory footprint from ~220MB | 
 |         to ~160MB. | 
 |  | 
 |         * bytecode/UnlinkedFunctionExecutable.cpp: | 
 |         (JSC::generateUnlinkedFunctionCodeBlock): | 
 |         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): | 
 |         * bytecode/UnlinkedFunctionExecutable.h: | 
 |         * parser/VariableEnvironment.cpp: | 
 |         (JSC::CompactVariableEnvironment::CompactVariableEnvironment): | 
 |         (JSC::CompactVariableEnvironment::operator== const): | 
 |         (JSC::CompactVariableEnvironment::toVariableEnvironment const): | 
 |         (JSC::CompactVariableMap::get): | 
 |         (JSC::CompactVariableMap::Handle::~Handle): | 
 |         * parser/VariableEnvironment.h: | 
 |         (JSC::VariableEnvironmentEntry::bits const): | 
 |         (JSC::VariableEnvironmentEntry::operator== const): | 
 |         (JSC::VariableEnvironment::isEverythingCaptured const): | 
 |         (JSC::CompactVariableEnvironment::hash const): | 
 |         (JSC::CompactVariableMapKey::CompactVariableMapKey): | 
 |         (JSC::CompactVariableMapKey::hash): | 
 |         (JSC::CompactVariableMapKey::equal): | 
 |         (JSC::CompactVariableMapKey::makeDeletedValue): | 
 |         (JSC::CompactVariableMapKey::isHashTableDeletedValue const): | 
 |         (JSC::CompactVariableMapKey::isHashTableEmptyValue const): | 
 |         (JSC::CompactVariableMapKey::environment): | 
 |         (WTF::HashTraits<JSC::CompactVariableMapKey>::emptyValue): | 
 |         (WTF::HashTraits<JSC::CompactVariableMapKey>::isEmptyValue): | 
 |         (WTF::HashTraits<JSC::CompactVariableMapKey>::constructDeletedValue): | 
 |         (WTF::HashTraits<JSC::CompactVariableMapKey>::isDeletedValue): | 
 |         (JSC::CompactVariableMap::Handle::Handle): | 
 |         (JSC::CompactVariableMap::Handle::environment const): | 
 |         (JSC::VariableEnvironment::VariableEnvironment): Deleted. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-05-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][MIPS] Simplify DFG code by increasing MIPS temporary registers | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185371 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Since MIPS GPRInfo claims it has only 7 registers, some of DFG code exhausts registers. | 
 |         As a result, we need to maintain separated code for MIPS. This increases DFG maintenance burden, | 
 |         but actually MIPS have much more registers. | 
 |  | 
 |         This patch adds $a0 - $a3 to temporary registers. This is OK since our temporary registers can be overlapped with | 
 |         argument registers (see ARM, X86 implementations). These registers are caller-save ones, so we do not need to | 
 |         have extra mechanism. | 
 |  | 
 |         Then, we remove several unnecessary MIPS code in our JIT infrastructure. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * jit/CCallHelpers.h: | 
 |         * jit/GPRInfo.h: | 
 |         (JSC::GPRInfo::toRegister): | 
 |         (JSC::GPRInfo::toIndex): | 
 |         * offlineasm/mips.rb: | 
 |  | 
 | 2018-05-05  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG AI should have O(1) clobbering | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185287 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This fixes an old scalability probem in AI. Previously, if we did clobberWorld(), then we | 
 |         would traverse all of the state available to the AI at that time and clobber it. | 
 |          | 
 |         This changes clobberWorld() to be O(1). It just does some math to a clobber epoch. | 
 |          | 
 |         This is a ~1% speed-up for compile times. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * dfg/DFGAbstractInterpreter.h: | 
 |         (JSC::DFG::AbstractInterpreter::forNode): | 
 |         (JSC::DFG::AbstractInterpreter::setForNode): | 
 |         (JSC::DFG::AbstractInterpreter::clearForNode): | 
 |         (JSC::DFG::AbstractInterpreter::variables): Deleted. | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberWorld): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberStructures): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::fastForwardToSlow): | 
 |         * dfg/DFGAbstractValue.h: | 
 |         (JSC::DFG::AbstractValue::fastForwardTo): | 
 |         (JSC::DFG::AbstractValue::clobberStructuresFor): Deleted. | 
 |         (JSC::DFG::AbstractValue::observeInvalidationPoint): Deleted. | 
 |         (JSC::DFG::AbstractValue::observeInvalidationPointFor): Deleted. | 
 |         * dfg/DFGAbstractValueClobberEpoch.cpp: Added. | 
 |         (JSC::DFG::AbstractValueClobberEpoch::dump const): | 
 |         * dfg/DFGAbstractValueClobberEpoch.h: Added. | 
 |         (JSC::DFG::AbstractValueClobberEpoch::AbstractValueClobberEpoch): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::first): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::clobber): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::observeInvalidationPoint): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::operator== const): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::operator!= const): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::structureClobberState const): | 
 |         (JSC::DFG::AbstractValueClobberEpoch::clobberEpoch const): | 
 |         * dfg/DFGAtTailAbstractState.h: | 
 |         (JSC::DFG::AtTailAbstractState::setForNode): | 
 |         (JSC::DFG::AtTailAbstractState::clearForNode): | 
 |         (JSC::DFG::AtTailAbstractState::numberOfArguments const): | 
 |         (JSC::DFG::AtTailAbstractState::numberOfLocals const): | 
 |         (JSC::DFG::AtTailAbstractState::operand): | 
 |         (JSC::DFG::AtTailAbstractState::local): | 
 |         (JSC::DFG::AtTailAbstractState::argument): | 
 |         (JSC::DFG::AtTailAbstractState::clobberStructures): | 
 |         (JSC::DFG::AtTailAbstractState::observeInvalidationPoint): | 
 |         (JSC::DFG::AtTailAbstractState::variables): Deleted. | 
 |         * dfg/DFGCFAPhase.cpp: | 
 |         (JSC::DFG::CFAPhase::performBlockCFA): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGFlowMap.h: | 
 |         (JSC::DFG::FlowMap::at): | 
 |         (JSC::DFG::FlowMap::atShadow): | 
 |         (JSC::DFG::FlowMap::at const): | 
 |         (JSC::DFG::FlowMap::atShadow const): | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::beginBasicBlock): | 
 |         (JSC::DFG::InPlaceAbstractState::endBasicBlock): | 
 |         * dfg/DFGInPlaceAbstractState.h: | 
 |         (JSC::DFG::InPlaceAbstractState::forNode): | 
 |         (JSC::DFG::InPlaceAbstractState::setForNode): | 
 |         (JSC::DFG::InPlaceAbstractState::clearForNode): | 
 |         (JSC::DFG::InPlaceAbstractState::variablesForDebugging): | 
 |         (JSC::DFG::InPlaceAbstractState::numberOfArguments const): | 
 |         (JSC::DFG::InPlaceAbstractState::numberOfLocals const): | 
 |         (JSC::DFG::InPlaceAbstractState::operand): | 
 |         (JSC::DFG::InPlaceAbstractState::local): | 
 |         (JSC::DFG::InPlaceAbstractState::argument): | 
 |         (JSC::DFG::InPlaceAbstractState::variableAt): | 
 |         (JSC::DFG::InPlaceAbstractState::clobberStructures): | 
 |         (JSC::DFG::InPlaceAbstractState::observeInvalidationPoint): | 
 |         (JSC::DFG::InPlaceAbstractState::fastForward): | 
 |         (JSC::DFG::InPlaceAbstractState::variables): Deleted. | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetStack): | 
 |  | 
 | 2018-05-06  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         InPlaceAbstractState::beginBasicBlock shouldn't have to clear any abstract values | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185365 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This patch does three things to improve compile times: | 
 |          | 
 |         - Fixes some inlining goofs. | 
 |          | 
 |         - Adds the ability to measure compile times with run-jsc-benchmarks. | 
 |          | 
 |         - Dramatically improves the performance of InPlaceAbstractState::beginBasicBlock by removing the | 
 |           code that clears abstract values. It turns out that on constant folding "needed" this, in the | 
 |           sense that this was the only thing protecting it from loading the abstract value of a no-result | 
 |           node and then concluding that because it had a non-empty m_value, it could be constant-folded. | 
 |           Any node that produces a result will explicitly set its abstract value, so this problem can | 
 |           also be guarded by just having constant folding check if the node it wants to fold returns any | 
 |           result. | 
 |          | 
 |         Solid 0.96% compile time speed-up across SunSpider-CompileTime and V8Spider-CompileTime. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::set): | 
 |         * dfg/DFGAbstractValue.h: | 
 |         (JSC::DFG::AbstractValue::merge): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::doToChildrenWithNode): | 
 |         (JSC::DFG::Graph::doToChildren): | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::beginBasicBlock): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::totalCompileTime): | 
 |         * jit/JIT.h: | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionTotalCompileTime): | 
 |  | 
 | 2018-05-05  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG AI doesn't need to merge valuesAtTail - it can just assign them | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185355 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |          | 
 |         This is a further attempt to improve compile times. Assigning AbstractValue ought to always | 
 |         be faster than merging. There's no need to merge valuesAtTail. In most cases, assigning and | 
 |         merging will get the same answer because the value computed this time will be either the same | 
 |         as or more general than the value computed last time. If the value does change for some | 
 |         reason, then valuesAtHead are already merged, which ensures monotonicity. Also, if the value | 
 |         changes, then we have no reason to believe that this new value is less right than the last | 
 |         one we computed. Finally, the one client of valuesAtTail (AtTailAbstractState) doesn't care | 
 |         if it's getting the merged valuesAtTail or just some correct answer for valuesAtTail. | 
 |  | 
 |         * dfg/DFGInPlaceAbstractState.cpp: | 
 |         (JSC::DFG::InPlaceAbstractState::endBasicBlock): | 
 |  | 
 | 2018-05-07  Andy VanWagoner  <andy@vanwagoner.family> | 
 |  | 
 |         Remove defunct email address | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185396 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The email address thetalecrafter@gmail.com is no longer valid, as the | 
 |         associated google account has been closed. This updates the email | 
 |         address so questions about these Intl contributions go to the right | 
 |         place. | 
 |  | 
 |         * builtins/DatePrototype.js: | 
 |         * builtins/NumberPrototype.js: | 
 |         * builtins/StringPrototype.js: | 
 |         * runtime/IntlCollator.cpp: | 
 |         * runtime/IntlCollator.h: | 
 |         * runtime/IntlCollatorConstructor.cpp: | 
 |         * runtime/IntlCollatorConstructor.h: | 
 |         * runtime/IntlCollatorPrototype.cpp: | 
 |         * runtime/IntlCollatorPrototype.h: | 
 |         * runtime/IntlDateTimeFormat.cpp: | 
 |         * runtime/IntlDateTimeFormat.h: | 
 |         * runtime/IntlDateTimeFormatConstructor.cpp: | 
 |         * runtime/IntlDateTimeFormatConstructor.h: | 
 |         * runtime/IntlDateTimeFormatPrototype.cpp: | 
 |         * runtime/IntlDateTimeFormatPrototype.h: | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         * runtime/IntlNumberFormat.h: | 
 |         * runtime/IntlNumberFormatConstructor.cpp: | 
 |         * runtime/IntlNumberFormatConstructor.h: | 
 |         * runtime/IntlNumberFormatPrototype.cpp: | 
 |         * runtime/IntlNumberFormatPrototype.h: | 
 |         * runtime/IntlObject.cpp: | 
 |         * runtime/IntlObject.h: | 
 |         * runtime/IntlPluralRules.cpp: | 
 |         * runtime/IntlPluralRules.h: | 
 |         * runtime/IntlPluralRulesConstructor.cpp: | 
 |         * runtime/IntlPluralRulesConstructor.h: | 
 |         * runtime/IntlPluralRulesPrototype.cpp: | 
 |         * runtime/IntlPluralRulesPrototype.h: | 
 |  | 
 | 2018-05-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove "using namespace std;" from JSC, bmalloc, WTF | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185362 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         "namespace std" may include many names. It can conflict with names defined by our code, | 
 |         and the other platform provided headers. For example, std::byte conflicts with Windows' | 
 |         ::byte. | 
 |         This patch removes "using namespace std;" from JSC and bmalloc. | 
 |  | 
 |         * API/JSClassRef.cpp: | 
 |         (OpaqueJSClass::create): | 
 |         * bytecode/Opcode.cpp: | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::newRegister): | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::updateAllocationLimits): | 
 |         * interpreter/Interpreter.cpp: | 
 |         * jit/JIT.cpp: | 
 |         * parser/Parser.cpp: | 
 |         * runtime/JSArray.cpp: | 
 |         * runtime/JSLexicalEnvironment.cpp: | 
 |         * runtime/JSModuleEnvironment.cpp: | 
 |         * runtime/Structure.cpp: | 
 |         * shell/DLLLauncherMain.cpp: | 
 |         (getStringValue): | 
 |         (applePathFromRegistry): | 
 |         (appleApplicationSupportDirectory): | 
 |         (copyEnvironmentVariable): | 
 |         (prependPath): | 
 |         (fatalError): | 
 |         (directoryExists): | 
 |         (modifyPath): | 
 |         (getLastErrorString): | 
 |         (wWinMain): | 
 |  | 
 | 2018-05-05  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG CFA phase should only do clobber asserts in debug | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185354 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         Clobber asserts are responsible for 1% of compile time. That's too much. This disables them | 
 |         unless asserts are enabled. | 
 |  | 
 |         * dfg/DFGCFAPhase.cpp: | 
 |         (JSC::DFG::CFAPhase::performBlockCFA): | 
 |  | 
 | 2018-05-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         isCacheableArrayLength should return true for undecided arrays | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185309 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         Undecided arrays have butterflies so there is no reason why we | 
 |         should not be able to cache their length. | 
 |  | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::isCacheableArrayLength): | 
 |  | 
 | 2018-05-03  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Remove std::random_shuffle | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185292 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         std::random_shuffle is deprecated in C++14 and removed in C++17, | 
 |         since std::random_shuffle relies on rand and srand. | 
 |         Use std::shuffle instead. | 
 |  | 
 |         * jit/BinarySwitch.cpp: | 
 |         (JSC::RandomNumberGenerator::RandomNumberGenerator): | 
 |         (JSC::RandomNumberGenerator::operator()): | 
 |         (JSC::RandomNumberGenerator::min): | 
 |         (JSC::RandomNumberGenerator::max): | 
 |         (JSC::BinarySwitch::build): | 
 |  | 
 | 2018-05-03  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't prevent CreateThis being folded to NewObject when the structure is poly proto | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185177 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch teaches the DFG/FTL how to constant fold CreateThis with | 
 |         a known poly proto Structure to NewObject. We do it by emitting a NewObject | 
 |         followed by a PutByOffset for the prototype value. | 
 |          | 
 |         We make it so that ObjectAllocationProfile holds the prototype value. | 
 |         This is sound because JSFunction clears that profile when its 'prototype' | 
 |         field changes. | 
 |          | 
 |         This patch also renames underscoreProtoPrivateName to polyProtoName since | 
 |         that name was nonsensical: it was only used for poly proto. | 
 |          | 
 |         This is a 2x speedup on the get_callee_polymorphic microbenchmark. I had | 
 |         regressed that benchmark when I first introduced poly proto. | 
 |  | 
 |         * builtins/BuiltinNames.cpp: | 
 |         * builtins/BuiltinNames.h: | 
 |         (JSC::BuiltinNames::BuiltinNames): | 
 |         (JSC::BuiltinNames::polyProtoName const): | 
 |         (JSC::BuiltinNames::underscoreProtoPrivateName const): Deleted. | 
 |         * bytecode/ObjectAllocationProfile.h: | 
 |         (JSC::ObjectAllocationProfile::prototype): | 
 |         (JSC::ObjectAllocationProfile::clear): | 
 |         (JSC::ObjectAllocationProfile::visitAggregate): | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/FunctionRareData.h: | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::create): | 
 |  | 
 | 2018-05-03  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         OSR entry pruning of Program Bytecodes doesn't take into account try/catch | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185281 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         When we compute bytecode block reachability, we need to take into account blocks | 
 |         containing try/catch. | 
 |  | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |  | 
 | 2018-05-03  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         ARM: Wrong offset for operand rt in disassembler | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184083 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * disassembler/ARMv7/ARMv7DOpcode.h: | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVMOVDoublePrecision::rt): | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVMOVSinglePrecision::rt): | 
 |  | 
 | 2018-05-03  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         ARM: Support vstr in disassembler | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184084 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * disassembler/ARMv7/ARMv7DOpcode.cpp: | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDRSTR::format): | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::format): Deleted. | 
 |         * disassembler/ARMv7/ARMv7DOpcode.h: | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDRSTR::opName): | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::condition): Deleted. | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::uBit): Deleted. | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::rn): Deleted. | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::vd): Deleted. | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::doubleReg): Deleted. | 
 |         (JSC::ARMv7Disassembler::ARMv7DOpcodeVLDR::immediate8): Deleted. | 
 |  | 
 | 2018-05-03  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         Invoke ensureArrayStorage for all arguments | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185247 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         ensureArrayStorage was only invoked for first argument in each loop iteration. | 
 |  | 
 |         * jsc.cpp: | 
 |         (functionEnsureArrayStorage): | 
 |  | 
 | 2018-05-03  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Make it easy to log compile times for all optimizing tiers | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185270 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |          | 
 |         This makes --logPhaseTimes=true enable logging of phase times for DFG and B3 using a common | 
 |         helper class, CompilerTimingScope. This used to be called B3::TimingScope and only B3 used | 
 |         it. | 
 |          | 
 |         This should help us reduce compile times by telling us where to look. So, far, it looks like | 
 |         CFA is the worst. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * b3/B3Common.cpp: | 
 |         (JSC::B3::shouldMeasurePhaseTiming): Deleted. | 
 |         * b3/B3Common.h: | 
 |         * b3/B3TimingScope.cpp: Removed. | 
 |         * b3/B3TimingScope.h: | 
 |         (JSC::B3::TimingScope::TimingScope): | 
 |         * dfg/DFGPhase.h: | 
 |         (JSC::DFG::runAndLog): | 
 |         * dfg/DFGPlan.cpp: | 
 |         (JSC::DFG::Plan::compileInThread): | 
 |         * tools/CompilerTimingScope.cpp: Added. | 
 |         (JSC::CompilerTimingScope::CompilerTimingScope): | 
 |         (JSC::CompilerTimingScope::~CompilerTimingScope): | 
 |         * tools/CompilerTimingScope.h: Added. | 
 |         * runtime/Options.cpp: | 
 |         (JSC::recomputeDependentOptions): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-05-03  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Strings should not be allocated in a gigacage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185218 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         * runtime/JSString.cpp: | 
 |         (JSC::JSRopeString::resolveRopeToAtomicString const): | 
 |         (JSC::JSRopeString::resolveRope const): | 
 |         * runtime/JSString.h: | 
 |         (JSC::JSString::create): | 
 |         (JSC::JSString::createHasOtherOwner): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::gigacageAuxiliarySpace): | 
 |  | 
 | 2018-05-03  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, fix 32-bit profile offset for change in bytecode | 
 |         length of the get_by_id and get_array_length opcodes. | 
 |  | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |  | 
 | 2018-05-03  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         WebContent crash loading page on seas.upenn.edu @ JavaScriptCore: vmEntryToJavaScript | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185231 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We weren't clearing the scratch register cache when switching back and forth between  | 
 |         allowing scratch register usage.  We disallow scratch register usage when we are in | 
 |         code that will freely allocate and use any register.  Such usage can change the | 
 |         contents of scratch registers.  For ARM64, where we cache the contents of scratch | 
 |         registers to reuse some or all of the contained values, we need to invalidate these | 
 |         caches.  We do this when re-enabling scratch register usage, that is when we transition | 
 |         from disallow to allow scratch register usage. | 
 |  | 
 |         Added a new Air regression test. | 
 |  | 
 |         * assembler/AllowMacroScratchRegisterUsage.h: | 
 |         (JSC::AllowMacroScratchRegisterUsage::AllowMacroScratchRegisterUsage): | 
 |         * assembler/AllowMacroScratchRegisterUsageIf.h: | 
 |         (JSC::AllowMacroScratchRegisterUsageIf::AllowMacroScratchRegisterUsageIf): | 
 |         * assembler/DisallowMacroScratchRegisterUsage.h: | 
 |         (JSC::DisallowMacroScratchRegisterUsage::~DisallowMacroScratchRegisterUsage): | 
 |         * b3/air/testair.cpp: | 
 |  | 
 | 2018-05-03  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Remove the prototype caching for get_by_id in the LLInt | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185226 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         There is no evidence that this is actually a speedup and we keep | 
 |         getting bugs with it. At this point it seems like we should just | 
 |         remove this code. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::printGetByIdOp): | 
 |         (JSC::BytecodeDumper<Block>::printGetByIdCacheStatus): | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finalizeLLIntInlineCaches): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted. | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::computeFromLLInt): | 
 |         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp: Removed. | 
 |         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h: Removed. | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitGetById): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::setupGetByIdPrototypeCache): Deleted. | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-05-03  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r231197. | 
 |  | 
 |         The test added with this change crashes on the 32-bit JSC bot. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Correctly detect string overflow when using the 'Function' | 
 |         constructor" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184883 | 
 |         https://trac.webkit.org/changeset/231197 | 
 |  | 
 | 2018-05-03  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         Disable usage of fused multiply-add instructions for JSC with compiler flag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184909 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Adds -ffp-contract as compiler flag for building JSC. This ensures that functions | 
 |         like parseInt() do not return slightly different results depending on whether the | 
 |         compiler was able to use fused multiply-add instructions or not. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix build failure in ARM, ARMv7 and MIPS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185192 | 
 |  | 
 |         compareDouble relies on MacroAssembler::invert function. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::compareDouble): | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::compareDouble): Deleted. | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::compareDouble): Deleted. | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::compareDouble): Deleted. | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add MacroAssembler::and16 and store16 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185188 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         r231129 requires and16(ImplicitAddress, RegisterID) and store16(RegisterID, ImplicitAddress) implementations. | 
 |         This patch adds these methods for ARM. | 
 |  | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::and16): | 
 |         (JSC::MacroAssemblerARM::store16): | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Unify compare related code in 32bit and 64bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185189 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch unifies some part of compare related code in 32bit and 64bit | 
 |         to reduce the size of 32bit specific DFG code. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileInt32Compare): | 
 |         (JSC::DFG::SpeculativeJIT::compileDoubleCompare): | 
 |         (JSC::DFG::SpeculativeJIT::compileObjectEquality): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileObjectEquality): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileInt32Compare): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileDoubleCompare): Deleted. | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileObjectEquality): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileInt32Compare): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileDoubleCompare): Deleted. | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add compareDouble and compareFloat for ARM64, X86, and X86_64 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185192 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Now Object.is starts using compareDouble. So we would like to have | 
 |         efficient implementation for compareDouble and compareFloat for | 
 |         major architectures, ARM64, X86, and X86_64. | 
 |  | 
 |         This patch adds compareDouble and compareFloat implementations for | 
 |         these architectures. And generic implementation is moved to each | 
 |         architecture's MacroAssembler implementation. | 
 |  | 
 |         We also add tests for them in testmasm. To implement this test | 
 |         easily, we also add loadFloat(TrustedImmPtr, FPRegisterID) for the | 
 |         major architectures. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::compareDouble): Deleted. | 
 |         (JSC::MacroAssembler::compareFloat): Deleted. | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::compareDouble): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::compareDouble): | 
 |         (JSC::MacroAssemblerARM64::compareFloat): | 
 |         (JSC::MacroAssemblerARM64::loadFloat): | 
 |         (JSC::MacroAssemblerARM64::floatingPointCompare): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::compareDouble): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::compareDouble): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::loadFloat): | 
 |         (JSC::MacroAssemblerX86Common::compareDouble): | 
 |         (JSC::MacroAssemblerX86Common::compareFloat): | 
 |         (JSC::MacroAssemblerX86Common::floatingPointCompare): | 
 |         * assembler/X86Assembler.h: | 
 |         (JSC::X86Assembler::movss_mr): | 
 |         (JSC::X86Assembler::movss_rm): | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::floatOperands): | 
 |         (JSC::testCompareFloat): | 
 |         (JSC::run): | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix 32bit DFG code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185065 | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileSameValue): | 
 |  | 
 | 2018-05-02  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC should know how to cache custom getter accesses on the prototype chain | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185213 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This was a simple fix after the work I did for bug 185174. >4x speed-up on the new get-custom-getter.js test. | 
 |  | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheGetByID): | 
 |  | 
 | 2018-05-01  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC should be able to cache custom setter calls on the prototype chain | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185174 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We broke custom-setter-on-the-prototype-chain caching when we fixed a bug involving the conditionSet.isEmpty() | 
 |         condition being used to determine if we have an alternateBase. The fix in r222671 incorrectly tried to add | 
 |         impossible-to-validate conditions to the conditionSet by calling generateConditionsForPrototypePropertyHit() instead | 
 |         of generateConditionsForPrototypePropertyHitCustom(). The problem is that the former function will always fail for | 
 |         custom accessors because it won't find the custom property in the structure. | 
 |  | 
 |         The fix is to add a virtual hasAlternateBase() function and use that instead of conditionSet.isEmpty(). | 
 |  | 
 |         This is a 4x speed-up on assign-custom-setter.js. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::hasAlternateBase const): | 
 |         (JSC::AccessCase::alternateBase const): | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCase.h: | 
 |         (JSC::AccessCase::alternateBase const): Deleted. | 
 |         * bytecode/GetterSetterAccessCase.cpp: | 
 |         (JSC::GetterSetterAccessCase::hasAlternateBase const): | 
 |         (JSC::GetterSetterAccessCase::alternateBase const): | 
 |         * bytecode/GetterSetterAccessCase.h: | 
 |         * bytecode/ObjectPropertyConditionSet.cpp: | 
 |         (JSC::generateConditionsForPrototypePropertyHitCustom): | 
 |         * bytecode/ObjectPropertyConditionSet.h: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheGetByID): | 
 |         (JSC::tryCachePutByID): | 
 |  | 
 | 2018-05-02  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Implement and16 and store16 for MacroAssemblerMIPS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185195 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This implements the given function for MIPS, such that it builds again. | 
 |  | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::and16): | 
 |         (JSC::MacroAssemblerMIPS::store16): | 
 |  | 
 | 2018-05-02  Rick Waldron  <waldron.rick@gmail.com> | 
 |  | 
 |         Expose "$262.agent.monotonicNow()" for use in testing Atomic operation timeouts | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185043 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionDollarAgentMonotonicNow): | 
 |  | 
 | 2018-05-02  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] Implement and16 and store16 for MacroAssemblerARMv7 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185196 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This implements and16 and store16 for MacroAssemblerARMv7 such that JSC builds again. | 
 |  | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::and16): | 
 |         (JSC::MacroAssemblerARMv7::store16): | 
 |  | 
 | 2018-05-02  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         emitCodeToGetArgumentsArrayLength should not crash on PhantomNewArrayWithSpread | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183172 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         DFGArgumentsEliminationPhase.cpp currently believes that allocations of NewArrayWithSpread can be deleted if they are only used by GetArrayLength, | 
 |         but when it then calls emitCodeToGetArgumentsArrayLength, the latter has no idea what to do with GetArrayLength. | 
 |  | 
 |         I fix the problem by teaching emitCodeToGetArgumentsArrayLength how to deal with GetArrayLength. | 
 |         Because this requires emitting an Add that can overflow and thus exit, we also tell DFGArgumentsEliminationPhase to give up on eliminating | 
 |         a NewArrayWithSpread when it is used by a GetArrayLength that is not allowed to exit. | 
 |  | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGArgumentsUtilities.cpp: | 
 |         (JSC::DFG::emitCodeToGetArgumentsArrayLength): | 
 |  | 
 | 2018-05-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, stackPointer signature is different from declaration | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184790 | 
 |  | 
 |         * runtime/MachineContext.h: | 
 |         (JSC::MachineContext::stackPointer): | 
 |  | 
 | 2018-05-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add SameValue DFG node | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185065 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds Object.is handling in DFG and FTL. Object.is is converted to SameValue DFG node. | 
 |         And DFG fixup phase attempts to convert SameValue node to CompareStrictEq with type filter edges | 
 |         if possible. Since SameValue(Untyped, Untyped) and SameValue(Double, Double) have different semantics | 
 |         from CompareStrictEq, we do not convert SameValue to CompareStrictEq for them. DFG and FTL have | 
 |         implementations for these SameValue nodes. | 
 |  | 
 |         This old MacroAssemblerX86Common::compareDouble was dead code since the derived class, "MacroAssembler" | 
 |         has a generalized compareDouble, which just uses branchDouble. Since this was not used, this function | 
 |         was broken. This patch fixes issues and move compareDouble to MacroAssemblerX86Common, and remove a | 
 |         generalized compareDouble for x86 arch to use this specialized efficient version instead. The fixes are | 
 |         correctly using set32 to zero-extending the result, and setting the initial value of `dest` register | 
 |         correctly for DoubleEqual and DoubleNotEqualOrUnordered cases. | 
 |  | 
 |         Added microbenchmark shows performance improvement. | 
 |  | 
 |             object-is           651.0053+-38.8204    ^    241.3467+-15.8753       ^ definitely 2.6974x faster | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::compareDouble): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::compareDouble): Deleted. | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::doubleOperands): | 
 |         (JSC::testCompareDouble): | 
 |         (JSC::run): | 
 |         * 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): | 
 |         (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileSameValue): | 
 |         * 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::compileSameValue): | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * runtime/ObjectConstructor.cpp: | 
 |  | 
 | 2018-04-30  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         B3::demoteValues should be able to handle patchpoint terminals | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185151 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         If we try to demote a patchpoint terminal then prior to this change we would append a Set to | 
 |         the basic block that the patchpoint terminated. That's wrong because then the terminal is no | 
 |         longer the last thing in the block. | 
 |          | 
 |         Air encounters this problem in spilling and solves it by doing a fixup afterwards. We can't | 
 |         really do that because demotion happens as a prerequisite to other transformations. | 
 |          | 
 |         One solution might have been to make demoteValues insert a basic block whenever it encounters | 
 |         this problem. But that would break clients that do CFG analysis before demoteValues and use | 
 |         the results of the CFG analysis after demoteValues. Taildup does this. Fortunately, taildup | 
 |         also runs breakCriticalEdges. Probably anyone using demoteValues will use breakCriticalEdges, | 
 |         so it's not bad to introduce that requirement. | 
 |          | 
 |         So, this patch solves the problem by ensuring that breakCriticalEdges treats any patchpoint | 
 |         terminal as if it had multiple successors. This means that a patchpoint terminal's successors | 
 |         will only have it as their predecessor. Then, demoteValues just prepends the Set to the | 
 |         successors of the patchpoint terminal. | 
 |          | 
 |         This was probably asymptomatic. It's hard to write a JS test that triggers this, so I added | 
 |         a unit test in testb3. | 
 |  | 
 |         * b3/B3BreakCriticalEdges.cpp: | 
 |         (JSC::B3::breakCriticalEdges): | 
 |         * b3/B3BreakCriticalEdges.h: | 
 |         * b3/B3FixSSA.cpp: | 
 |         (JSC::B3::demoteValues): | 
 |         (JSC::B3::fixSSA): | 
 |         * b3/B3FixSSA.h: | 
 |         * b3/B3Value.cpp: | 
 |         (JSC::B3::Value::foldIdentity const): | 
 |         (JSC::B3::Value::performSubstitution): | 
 |         * b3/B3Value.h: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testDemotePatchpointTerminal): | 
 |         (JSC::B3::run): | 
 |  | 
 | 2018-05-01  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Use CheckedArithmetic for length computation in JSArray::unshiftCountWithAnyIndexingType | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184772 | 
 |         <rdar://problem/39146327> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Related to https://bugs.webkit.org/show_bug.cgi?id=183657 (<rdar://problem/38464399), where a check was missing. | 
 |         This patch now makes sure that the check correctly detects if there is an integer overflow. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::unshiftCountWithAnyIndexingType): | 
 |  | 
 | 2018-05-01  Robin Morisset  <rmorisset@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 Filip Pizlo. | 
 |  | 
 |         The 'Function' constructor creates a string containing the source code of the new function through repeated string concatenation. | 
 |         Because there was no way for the string concatenation routines in WTF to return an error, they just crashed in that case. | 
 |  | 
 |         I added new tryAppend methods alongside the old append methods, that return a boolean (true means success, false means an overflow happened). | 
 |         In this way, it becomes possible for the Function constructor to just throw a proper JS exception when asked to create a string > 4GB. | 
 |         I made new methods instead of just adapting the existing ones (and reverted such a change on appendQuotedJSONString) so that callers that rely on the old behaviour (a hard CRASH() on overflow) don't silently start failing. | 
 |  | 
 |         * runtime/FunctionConstructor.cpp: | 
 |         (JSC::constructFunctionSkippingEvalEnabledCheck): | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::Stringifier::appendStringifiedValue): | 
 |  | 
 | 2018-05-01  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         IntlObject.cpp::removeUnicodeLocaleExtension() should not touch locales that end in '-u' | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185162 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::removeUnicodeLocaleExtension): | 
 |  | 
 | 2018-05-01  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         Add SetCallee as DFG-Operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184582 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         For recursive tail calls not only the argument count can change but also the | 
 |         callee. Add SetCallee to DFG that sets the callee slot in the current call frame. | 
 |         Also update the callee when optimizing a recursive tail call. | 
 |         Enable recursive tail call optimization also for closures. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleRecursiveTailCall): | 
 |         (JSC::DFG::ByteCodeParser::handleCallVariant): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGMayExit.cpp: | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileSetCallee): | 
 |         * 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::compileSetCallee): | 
 |  | 
 | 2018-05-01  Oleksandr Skachkov  <gskachkov@gmail.com> | 
 |  | 
 |         WebAssembly: add support for stream APIs - JavaScript API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183442 | 
 |  | 
 |         Reviewed by Yusuke Suzuki and JF Bastien. | 
 |  | 
 |         Add WebAssembly stream API. Current patch only add functions | 
 |         WebAssembly.compileStreaming and WebAssembly.instantiateStreaming but, | 
 |         does not add streaming way of the implementation. So in current version it | 
 |         only wait for load whole module, than start to parse. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         * DerivedSources.make: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * builtins/BuiltinNames.h: | 
 |         * builtins/WebAssemblyPrototype.js: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h. | 
 |         (compileStreaming): | 
 |         (instantiateStreaming): | 
 |         * jsc.cpp: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/Options.h: | 
 |         * runtime/PromiseDeferredTimer.cpp: | 
 |         (JSC::PromiseDeferredTimer::hasPendingPromise): | 
 |         (JSC::PromiseDeferredTimer::hasDependancyInPendingPromise): | 
 |         * runtime/PromiseDeferredTimer.h: | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::webAssemblyModuleValidateAsyncInternal): | 
 |         (JSC::webAssemblyCompileFunc): | 
 |         (JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsync): | 
 |         (JSC::webAssemblyModuleInstantinateAsyncInternal): | 
 |         (JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsync): | 
 |         (JSC::webAssemblyCompileStreamingInternal): | 
 |         (JSC::webAssemblyInstantiateStreamingInternal): | 
 |         (JSC::WebAssemblyPrototype::create): | 
 |         (JSC::WebAssemblyPrototype::finishCreation): | 
 |         * wasm/js/WebAssemblyPrototype.h: | 
 |  | 
 | 2018-04-30  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         ToString constant folds without preserving checks, causing us to break assumptions that the code would OSR exit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185149 | 
 |         <rdar://problem/39455917> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         The bug was that we were deleting checks that we shouldn't have deleted. | 
 |         This patch makes a helper inside strength reduction that converts to | 
 |         a LazyJSConstant while maintaining checks, and switches users of the | 
 |         node API inside strength reduction to instead call the helper function. | 
 |          | 
 |         This patch also fixes a potential bug where StringReplace and | 
 |         StringReplaceRegExp may not preserve all their checks. | 
 |  | 
 |  | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         (JSC::DFG::StrengthReductionPhase::convertToLazyJSValue): | 
 |  | 
 | 2018-04-29  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         LICM shouldn't hoist nodes if hoisted nodes exited in that code block | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185126 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This change is just restoring functionality that we've already had for a while. It had been | 
 |         accidentally broken due to an unrelated CodeBlock refactoring. | 
 |  | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |  | 
 | 2018-04-30  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Apply PtrTags to the MetaAllocator and friends. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185110 | 
 |         <rdar://problem/39533895> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         1. LinkBuffer now takes a MacroAssemblerCodePtr instead of a void* pointer. | 
 |         2. Apply pointer tagging to the boundary pointers of the FixedExecutableMemoryPool, | 
 |            and add a sanity check to verify that allocated code buffers are within those | 
 |            bounds. | 
 |  | 
 |         * assembler/LinkBuffer.cpp: | 
 |         (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): | 
 |         (JSC::LinkBuffer::copyCompactAndLinkCode): | 
 |         (JSC::LinkBuffer::linkCode): | 
 |         (JSC::LinkBuffer::allocate): | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::LinkBuffer): | 
 |         (JSC::LinkBuffer::debugAddress): | 
 |         (JSC::LinkBuffer::code): | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::linkCodeInline): | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * dfg/DFGJITCode.cpp: | 
 |         (JSC::DFG::JITCode::findPC): | 
 |         * ftl/FTLJITCode.cpp: | 
 |         (JSC::FTL::JITCode::findPC): | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): | 
 |         (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): | 
 |         (JSC::ExecutableAllocator::allocate): | 
 |         * jit/ExecutableAllocator.h: | 
 |         (JSC::isJITPC): | 
 |         (JSC::performJITMemcpy): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::link): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * runtime/JSCPtrTag.h: | 
 |         * wasm/WasmCallee.cpp: | 
 |         (JSC::Wasm::Callee::Callee): | 
 |         * wasm/WasmFaultSignalHandler.cpp: | 
 |         (JSC::Wasm::trapHandler): | 
 |  | 
 | 2018-04-30  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Move the MayBePrototype JSCell header bit to InlineTypeFlags | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185143 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/IndexingType.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::setStructure): | 
 |         (JSC::JSCell::mayBePrototype const): | 
 |         (JSC::JSCell::didBecomePrototype): | 
 |         * runtime/JSTypeInfo.h: | 
 |         (JSC::TypeInfo::mayBePrototype): | 
 |         (JSC::TypeInfo::mergeInlineTypeFlags): | 
 |  | 
 | 2018-04-30  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Remove unneeded exception check from String.fromCharCode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185083 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/StringConstructor.cpp: | 
 |         (JSC::stringFromCharCode): | 
 |  | 
 | 2018-04-30  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Move StructureIsImmortal to out of line flags. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185101 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This will free up a bit in the inline flags where we can move the | 
 |         isPrototype bit to. This will, in turn, free a bit for use in | 
 |         implementing copy on write butterflies. | 
 |  | 
 |         Also, this patch removes an assertion from Structure::typeInfo() | 
 |         that inadvertently makes the function invalid to call while | 
 |         cleaning up the vm. | 
 |  | 
 |         * heap/HeapCellType.cpp: | 
 |         (JSC::DefaultDestroyFunc::operator() const): | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::callDestructor): Deleted. | 
 |         * runtime/JSTypeInfo.h: | 
 |         (JSC::TypeInfo::hasStaticPropertyTable): | 
 |         (JSC::TypeInfo::structureIsImmortal const): | 
 |         * runtime/Structure.h: | 
 |  | 
 | 2018-04-30  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove arity fixup check if the number of parameters is 1 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183984 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         If the number of parameters is one (|this|), we never hit arity fixup check. | 
 |         We do not need to emit arity fixup check code. | 
 |  | 
 |         * dfg/DFGDriver.cpp: | 
 |         (JSC::DFG::compileImpl): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         * ftl/FTLLink.cpp: | 
 |         (JSC::FTL::link): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |  | 
 | 2018-04-30  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Use WordLock instead of std::mutex for Threading | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185121 | 
 |  | 
 |         Reviewed by Geoffrey Garen. | 
 |  | 
 |         ThreadGroup starts using WordLock. | 
 |  | 
 |         * heap/MachineStackMarker.h: | 
 |         (JSC::MachineThreads::getLock): | 
 |  | 
 | 2018-04-29  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         B3 should run tail duplication at the bitter end | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185123 | 
 |  | 
 |         Reviewed by Geoffrey Garen. | 
 |          | 
 |         Also added an option to disable taildup. This appears to be a 1% AsmBench speed-up. It's neutral | 
 |         everywhere else. | 
 |          | 
 |         The goal of this change is to allow us to run path specialization after switch lowering but | 
 |         before tail duplication. | 
 |  | 
 |         * b3/B3Generate.cpp: | 
 |         (JSC::B3::generateToAir): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-04-29  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231137. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185118 | 
 |  | 
 |         It is breaking Test262 language/expressions/multiplication | 
 |         /order-of-evaluation.js (Requested by caiolima on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[ESNext][BigInt] Implement support for "*" operation" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |         https://trac.webkit.org/changeset/231137 | 
 |  | 
 | 2018-04-28  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         We don't model regexp effects properly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185059 | 
 |         <rdar://problem/39736150> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         RegExp exec/test can do arbitrary effects when toNumbering the lastIndex if | 
 |         the regexp is global. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-04-28  Rick Waldron  <waldron.rick@gmail.com> | 
 |  | 
 |         Token misspelled "tocken" in error message string | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185030 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * parser/Parser.cpp: Fix typo "tocken" => "token" in SyntaxError message string | 
 |         (JSC::Parser<LexerType>::Parser): | 
 |         (JSC::Parser<LexerType>::didFinishParsing): | 
 |         (JSC::Parser<LexerType>::parseSourceElements): | 
 |         (JSC::Parser<LexerType>::parseAsyncGeneratorFunctionSourceElements): | 
 |         (JSC::Parser<LexerType>::parseVariableDeclaration): | 
 |         (JSC::Parser<LexerType>::parseWhileStatement): | 
 |         (JSC::Parser<LexerType>::parseVariableDeclarationList): | 
 |         (JSC::Parser<LexerType>::createBindingPattern): | 
 |         (JSC::Parser<LexerType>::parseArrowFunctionSingleExpressionBodySourceElements): | 
 |         (JSC::Parser<LexerType>::parseObjectRestElement): | 
 |         (JSC::Parser<LexerType>::parseDestructuringPattern): | 
 |         (JSC::Parser<LexerType>::parseForStatement): | 
 |         (JSC::Parser<LexerType>::parseBreakStatement): | 
 |         (JSC::Parser<LexerType>::parseContinueStatement): | 
 |         (JSC::Parser<LexerType>::parseThrowStatement): | 
 |         (JSC::Parser<LexerType>::parseWithStatement): | 
 |         (JSC::Parser<LexerType>::parseSwitchStatement): | 
 |         (JSC::Parser<LexerType>::parseSwitchClauses): | 
 |         (JSC::Parser<LexerType>::parseTryStatement): | 
 |         (JSC::Parser<LexerType>::parseBlockStatement): | 
 |         (JSC::Parser<LexerType>::parseFormalParameters): | 
 |         (JSC::Parser<LexerType>::parseFunctionParameters): | 
 |         (JSC::Parser<LexerType>::parseFunctionInfo): | 
 |         (JSC::Parser<LexerType>::parseExpressionOrLabelStatement): | 
 |         (JSC::Parser<LexerType>::parseExpressionStatement): | 
 |         (JSC::Parser<LexerType>::parseIfStatement): | 
 |         (JSC::Parser<LexerType>::parseAssignmentExpression): | 
 |         (JSC::Parser<LexerType>::parseConditionalExpression): | 
 |         (JSC::Parser<LexerType>::parseBinaryExpression): | 
 |         (JSC::Parser<LexerType>::parseObjectLiteral): | 
 |         (JSC::Parser<LexerType>::parseStrictObjectLiteral): | 
 |         (JSC::Parser<LexerType>::parseArrayLiteral): | 
 |         (JSC::Parser<LexerType>::parseArguments): | 
 |         (JSC::Parser<LexerType>::parseMemberExpression): | 
 |         (JSC::operatorString): | 
 |         (JSC::Parser<LexerType>::parseUnaryExpression): | 
 |         (JSC::Parser<LexerType>::printUnexpectedTokenText): | 
 |  | 
 | 2018-04-28  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "*" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Added BigInt support into times binary operator into LLInt and on | 
 |         JITOperations profiledMul and unprofiledMul. We are also replacing all | 
 |         uses of int to unsigned when there is no negative values for | 
 |         variables. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::JSBigInt): | 
 |         (JSC::JSBigInt::allocationSize): | 
 |         (JSC::JSBigInt::createWithLength): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         (JSC::JSBigInt::internalMultiplyAdd): | 
 |         (JSC::JSBigInt::multiplyAccumulate): | 
 |         (JSC::JSBigInt::equals): | 
 |         (JSC::JSBigInt::absoluteDivSmall): | 
 |         (JSC::JSBigInt::calculateMaximumCharactersRequired): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::rightTrim): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsMul): | 
 |  | 
 | 2018-04-28  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r231131. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185112 | 
 |  | 
 |         It is breaking Debug build due to unchecked exception | 
 |         (Requested by caiolima on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[ESNext][BigInt] Implement support for "*" operation" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |         https://trac.webkit.org/changeset/231131 | 
 |  | 
 | 2018-04-27  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "*" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Added BigInt support into times binary operator into LLInt and on | 
 |         JITOperations profiledMul and unprofiledMul. We are also replacing all | 
 |         uses of int to unsigned when there is no negative values for | 
 |         variables. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::JSBigInt): | 
 |         (JSC::JSBigInt::allocationSize): | 
 |         (JSC::JSBigInt::createWithLength): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         (JSC::JSBigInt::internalMultiplyAdd): | 
 |         (JSC::JSBigInt::multiplyAccumulate): | 
 |         (JSC::JSBigInt::equals): | 
 |         (JSC::JSBigInt::absoluteDivSmall): | 
 |         (JSC::JSBigInt::calculateMaximumCharactersRequired): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::rightTrim): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsMul): | 
 |  | 
 | 2018-04-27  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Make the first 64 bits of JSString look like a double JSValue | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185081 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         We can be clever about how we lay out JSString so that, were it | 
 |         reinterpreted as a JSValue, it would look like a double. | 
 |  | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::and16): | 
 |         * assembler/X86Assembler.h: | 
 |         (JSC::X86Assembler::andw_mr): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileMakeRope): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): | 
 |         * ftl/FTLOutput.h: | 
 |         (JSC::FTL::Output::store32As8): | 
 |         (JSC::FTL::Output::store32As16): | 
 |         * runtime/JSString.h: | 
 |         (JSC::JSString::JSString): | 
 |  | 
 | 2018-04-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC][ARM64][Linux] Add collectCPUFeatures using auxiliary vector | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185055 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch is paving the way to emitting jscvt instruction if possible. | 
 |         To do that, we need to determine jscvt instruction is supported in the | 
 |         given CPU. | 
 |  | 
 |         We add a function collectCPUFeatures, which is responsible to collect | 
 |         CPU features if necessary. In Linux, we can use auxiliary vector to get | 
 |         the information without parsing /proc/cpuinfo. | 
 |  | 
 |         Currently, nobody calls this function. It is later called when we emit | 
 |         jscvt instruction. To make it possible, we also need to add disassembler | 
 |         support too. | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         * assembler/MacroAssemblerARM64.cpp: | 
 |         (JSC::MacroAssemblerARM64::collectCPUFeatures): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |  | 
 | 2018-04-26  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Also run foldPathConstants before mussing up SSA | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185069 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This isn't needed now, but will be once I implement the phase in bug 185060. | 
 |          | 
 |         This could be a speed-up, or a slow-down, independent of that phase. Most likely it's neutral. | 
 |         Local testing seems to suggest that it's neutral. Anyway, whatever it ends up being, I want it to | 
 |         be landed separately and measured separately from that phase. | 
 |          | 
 |         It's probably nice for sanity to have this and reduceStrength run before tail duplication and | 
 |         another round of reduceStrength, since that make for something that is closer to a fixpoint. But | 
 |         it will increase FTL compile times. So, there's no way to guess if this change is good, bad, or | 
 |         neutral. It all depends on what programs typically look like. | 
 |  | 
 |         * b3/B3Generate.cpp: | 
 |         (JSC::B3::generateToAir): | 
 |  | 
 | 2018-04-27  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r231086. | 
 |  | 
 |         Caused JSC test failures due to an unchecked exception. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[ESNext][BigInt] Implement support for "*" operation" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |         https://trac.webkit.org/changeset/231086 | 
 |  | 
 | 2018-04-26  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement support for "*" operation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183721 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Added BigInt support into times binary operator into LLInt and on | 
 |         JITOperations profiledMul and unprofiledMul. We are also replacing all | 
 |         uses of int to unsigned when there is no negative values for | 
 |         variables. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * jit/JITOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::JSBigInt): | 
 |         (JSC::JSBigInt::allocationSize): | 
 |         (JSC::JSBigInt::createWithLength): | 
 |         (JSC::JSBigInt::toString): | 
 |         (JSC::JSBigInt::multiply): | 
 |         (JSC::JSBigInt::digitDiv): | 
 |         (JSC::JSBigInt::internalMultiplyAdd): | 
 |         (JSC::JSBigInt::multiplyAccumulate): | 
 |         (JSC::JSBigInt::equals): | 
 |         (JSC::JSBigInt::absoluteDivSmall): | 
 |         (JSC::JSBigInt::calculateMaximumCharactersRequired): | 
 |         (JSC::JSBigInt::toStringGeneric): | 
 |         (JSC::JSBigInt::rightTrim): | 
 |         (JSC::JSBigInt::allocateFor): | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::digit): | 
 |         (JSC::JSBigInt::setDigit): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/Operations.h: | 
 |         (JSC::jsMul): | 
 |  | 
 | 2018-04-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: Speculative build fix for Windows. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184976 | 
 |         <rdar://problem/39723901> | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/JSCPtrTag.h: | 
 |  | 
 | 2018-04-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: Windows build fix. | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/Options.cpp: | 
 |  | 
 | 2018-04-26  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         WK_COCOA_TOUCH all the things. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185006 | 
 |         <rdar://problem/39736025> | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |  | 
 | 2018-04-26  Per Arne Vollan  <pvollan@apple.com> | 
 |  | 
 |         Disable content filtering in minimal simulator mode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185027 | 
 |         <rdar://problem/39736091> | 
 |  | 
 |         Reviewed by Jer Noble. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-04-26  Andy VanWagoner  <thetalecrafter@gmail.com> | 
 |  | 
 |         [INTL] Implement Intl.PluralRules | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184312 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         Use UNumberFormat to enforce formatting, and then UPluralRules to find | 
 |         the correct plural rule for the given number. Relies on ICU v59+ for | 
 |         resolvedOptions().pluralCategories and trailing 0 detection. | 
 |         Behind the useIntlPluralRules option and INTL_PLURAL_RULES flag. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         * DerivedSources.make: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * builtins/BuiltinNames.h: | 
 |         * runtime/BigIntObject.cpp: | 
 |         (JSC::BigIntObject::create): Moved to ensure complete JSGlobalObject definition. | 
 |         * runtime/BigIntObject.h: | 
 |         * runtime/CommonIdentifiers.h: | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::IntlObject::finishCreation): | 
 |         * runtime/IntlObject.h: | 
 |         * runtime/IntlPluralRules.cpp: Added. | 
 |         (JSC::IntlPluralRules::UPluralRulesDeleter::operator() const): | 
 |         (JSC::IntlPluralRules::UNumberFormatDeleter::operator() const): | 
 |         (JSC::UEnumerationDeleter::operator() const): | 
 |         (JSC::IntlPluralRules::create): | 
 |         (JSC::IntlPluralRules::createStructure): | 
 |         (JSC::IntlPluralRules::IntlPluralRules): | 
 |         (JSC::IntlPluralRules::finishCreation): | 
 |         (JSC::IntlPluralRules::destroy): | 
 |         (JSC::IntlPluralRules::visitChildren): | 
 |         (JSC::IntlPRInternal::localeData): | 
 |         (JSC::IntlPluralRules::initializePluralRules): | 
 |         (JSC::IntlPluralRules::resolvedOptions): | 
 |         (JSC::IntlPluralRules::select): | 
 |         * runtime/IntlPluralRules.h: Added. | 
 |         * runtime/IntlPluralRulesConstructor.cpp: Added. | 
 |         (JSC::IntlPluralRulesConstructor::create): | 
 |         (JSC::IntlPluralRulesConstructor::createStructure): | 
 |         (JSC::IntlPluralRulesConstructor::IntlPluralRulesConstructor): | 
 |         (JSC::IntlPluralRulesConstructor::finishCreation): | 
 |         (JSC::constructIntlPluralRules): | 
 |         (JSC::callIntlPluralRules): | 
 |         (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf): | 
 |         (JSC::IntlPluralRulesConstructor::visitChildren): | 
 |         * runtime/IntlPluralRulesConstructor.h: Added. | 
 |         * runtime/IntlPluralRulesPrototype.cpp: Added. | 
 |         (JSC::IntlPluralRulesPrototype::create): | 
 |         (JSC::IntlPluralRulesPrototype::createStructure): | 
 |         (JSC::IntlPluralRulesPrototype::IntlPluralRulesPrototype): | 
 |         (JSC::IntlPluralRulesPrototype::finishCreation): | 
 |         (JSC::IntlPluralRulesPrototypeFuncSelect): | 
 |         (JSC::IntlPluralRulesPrototypeFuncResolvedOptions): | 
 |         * runtime/IntlPluralRulesPrototype.h: Added. | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::intlPluralRulesAvailableLocales): | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/Options.h: | 
 |         * runtime/RegExpPrototype.cpp: Added inlines header. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-04-26  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [MIPS] Fix branch offsets in branchNeg32 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=185025 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Two nops were removed in branch(Not)Equal in #183130 but the offset wasn't adjusted. | 
 |  | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::branchNeg32): | 
 |  | 
 | 2018-04-25  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         In FTLLowerDFGToB3.cpp::compileCreateRest, always use a contiguous array as the indexing type when under isWatchingHavingABadTimeWatchpoint | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184773 | 
 |         <rdar://problem/37773612> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         We were calling restParameterStructure(), which returns arrayStructureForIndexingTypeDuringAllocation(ArrayWithContiguous). | 
 |         arrayStructureForIndexingTypeDuringAllocation uses m_arrayStructureForIndexingShapeDuringAllocation, which is set to SlowPutArrayStorage when we are 'having a bad time'. | 
 |         This is problematic, because the structure is then passed to allocateUninitializedContiguousJSArray, which ASSERTs that the indexing type is contiguous (or int32). | 
 |         We solve the problem by using originalArrayStructureForIndexingType which always returns a structure with the right indexing type (contiguous), even if we are having a bad time. | 
 |         This is safe, as we are under isWatchingHavingABadTimeWatchpoint, so if we have a bad time, the code we generate will never be installed. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest): | 
 |  | 
 | 2018-04-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Push the definition of PtrTag down to the WTF layer. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184976 | 
 |         <rdar://problem/39723901> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * assembler/ARM64Assembler.h: | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         * assembler/MacroAssemblerCodeRef.cpp: | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         * b3/B3MathExtras.cpp: | 
 |         * bytecode/LLIntCallLinkInfo.h: | 
 |         * disassembler/Disassembler.h: | 
 |         * ftl/FTLJITCode.cpp: | 
 |         * interpreter/InterpreterInlines.h: | 
 |         * jit/ExecutableAllocator.h: | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/ThunkGenerator.h: | 
 |         * jit/ThunkGenerators.h: | 
 |         * llint/LLIntOffsetsExtractor.cpp: | 
 |         * llint/LLIntPCRanges.h: | 
 |         * runtime/JSCPtrTag.h: Added. | 
 |         * runtime/NativeFunction.h: | 
 |         * runtime/PtrTag.h: Removed. | 
 |         * runtime/VMTraps.cpp: | 
 |  | 
 | 2018-04-25  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         getUnlinkedGlobalFunctionExecutable should only save things to the code cache if the option is set | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184998 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/CodeCache.cpp: | 
 |         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable): | 
 |  | 
 | 2018-04-25  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Add missing scope release to functionProtoFuncToString | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184995 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/FunctionPrototype.cpp: | 
 |         (JSC::functionProtoFuncToString): | 
 |  | 
 | 2018-04-25  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         REGRESSION(r230748) [GTK][ARM] no matching function for call to 'JSC::CCallHelpers::swap(JSC::ARMRegisters::FPRegisterID&, JSC::ARMRegisters::FPRegisterID&)' | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184730 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Add swap(FPRegisterID, FPRegisterID) implementation using ARMRegisters::SD0 (temporary register in MacroAssemblerARM). | 
 |         And we now use dataTempRegister, addressTempRegister, and fpTempRegister instead of using S0, S1, and SD0. | 
 |  | 
 |         We also change swap(RegisterID, RegisterID) implementation to use moves and temporaries simply. This is aligned to | 
 |         ARMv7 implementation. | 
 |  | 
 |         * assembler/ARMAssembler.h: | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::add32): | 
 |         (JSC::MacroAssemblerARM::and32): | 
 |         (JSC::MacroAssemblerARM::lshift32): | 
 |         (JSC::MacroAssemblerARM::mul32): | 
 |         (JSC::MacroAssemblerARM::or32): | 
 |         (JSC::MacroAssemblerARM::rshift32): | 
 |         (JSC::MacroAssemblerARM::urshift32): | 
 |         (JSC::MacroAssemblerARM::sub32): | 
 |         (JSC::MacroAssemblerARM::xor32): | 
 |         (JSC::MacroAssemblerARM::load8): | 
 |         (JSC::MacroAssemblerARM::abortWithReason): | 
 |         (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM::store8): | 
 |         (JSC::MacroAssemblerARM::store32): | 
 |         (JSC::MacroAssemblerARM::push): | 
 |         (JSC::MacroAssemblerARM::swap): | 
 |         (JSC::MacroAssemblerARM::branch8): | 
 |         (JSC::MacroAssemblerARM::branchPtr): | 
 |         (JSC::MacroAssemblerARM::branch32): | 
 |         (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords): | 
 |         (JSC::MacroAssemblerARM::branchTest8): | 
 |         (JSC::MacroAssemblerARM::branchTest32): | 
 |         (JSC::MacroAssemblerARM::jump): | 
 |         (JSC::MacroAssemblerARM::branchAdd32): | 
 |         (JSC::MacroAssemblerARM::mull32): | 
 |         (JSC::MacroAssemblerARM::branchMul32): | 
 |         (JSC::MacroAssemblerARM::patchableBranch32): | 
 |         (JSC::MacroAssemblerARM::nearCall): | 
 |         (JSC::MacroAssemblerARM::compare32): | 
 |         (JSC::MacroAssemblerARM::compare8): | 
 |         (JSC::MacroAssemblerARM::test32): | 
 |         (JSC::MacroAssemblerARM::test8): | 
 |         (JSC::MacroAssemblerARM::add64): | 
 |         (JSC::MacroAssemblerARM::load32): | 
 |         (JSC::MacroAssemblerARM::call): | 
 |         (JSC::MacroAssemblerARM::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM::branch32WithPatch): | 
 |         (JSC::MacroAssemblerARM::storePtrWithPatch): | 
 |         (JSC::MacroAssemblerARM::loadDouble): | 
 |         (JSC::MacroAssemblerARM::storeDouble): | 
 |         (JSC::MacroAssemblerARM::addDouble): | 
 |         (JSC::MacroAssemblerARM::divDouble): | 
 |         (JSC::MacroAssemblerARM::subDouble): | 
 |         (JSC::MacroAssemblerARM::mulDouble): | 
 |         (JSC::MacroAssemblerARM::convertInt32ToDouble): | 
 |         (JSC::MacroAssemblerARM::branchDouble): | 
 |         (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32): | 
 |         (JSC::MacroAssemblerARM::truncateDoubleToInt32): | 
 |         (JSC::MacroAssemblerARM::truncateDoubleToUint32): | 
 |         (JSC::MacroAssemblerARM::branchConvertDoubleToInt32): | 
 |         (JSC::MacroAssemblerARM::branchDoubleNonZero): | 
 |         (JSC::MacroAssemblerARM::branchDoubleZeroOrNaN): | 
 |         (JSC::MacroAssemblerARM::call32): | 
 |         (JSC::MacroAssemblerARM::internalCompare32): | 
 |  | 
 | 2018-04-25  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         [WinCairo] Fix js/regexp-unicode.html crash. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184891 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         On Win64, register RDI is "considered nonvolatile and must be saved and restored by a function that uses [it]". | 
 |         RDI is being used as a scratch register for JIT_UNICODE_EXPRESSIONS, not just YARR_JIT_ALL_PARENS_EXPRESSIONS. | 
 |  | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |         (JSC::Yarr::YarrGenerator::generateReturn): | 
 |         Unconditionally save and restore RDI on 64-bit Windows. | 
 |  | 
 | 2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         [GTK] Miscellaneous build cleanups | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184399 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         * PlatformGTK.cmake: | 
 |  | 
 | 2018-04-24  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         fromCharCode is missing some exception checks | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184952 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         I also removed the pointless slow path function and moved it into the | 
 |         main function. | 
 |  | 
 |         * runtime/StringConstructor.cpp: | 
 |         (JSC::stringFromCharCode): | 
 |         (JSC::stringFromCharCodeSlowCase): Deleted. | 
 |  | 
 | 2018-04-24  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         MultiByOffset should emit one fewer branches in the case that the set of structures is proved already | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184923 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         If we have a MultiGetByOffset or MultiPutByOffset over a structure set that we've already proved | 
 |         (i.e. we know that the object has one of those structures), then previously we would still emit a | 
 |         switch with a case per structure along with a default case. That would mean one extra redundant | 
 |         branch to check that whatever structure we wound up with belongs to the set. In that case, we | 
 |         were already making the default case be an Oops. | 
 |          | 
 |         One possible solution would be to say that the default case being Oops means that B3 doesn't need | 
 |         to emit the extra branch. But that would require having B3 exploit the fact that Oops is known to | 
 |         be unreachable. Although B3 IR semantics (webkit.org/docs/b3/intermediate-representation.html) | 
 |         seem to allow this, I don't particularly like that style of optimization. I like Oops to mean | 
 |         trap. | 
 |          | 
 |         So, this patch makes FTL lowering turn one of the cases into the default, explicitly removing the | 
 |         extra branch. | 
 |          | 
 |         This is not a speed-up. But it makes the B3 IR for MultiByOffset a lot simpler, which should make | 
 |         it easier to implement B3-level optimizations for MultiByOffset. It also makes the IR easier to | 
 |         read. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMultiGetByOffset): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::emitSwitchForMultiByOffset): | 
 |  | 
 | 2018-04-24  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG CSE should know how to decay a MultiGetByOffset | 
 |         https://bugs.webkit.org/show_bug.cgi?id=159859 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |          | 
 |         This teaches Node::remove() how to decay a MultiGetByOffset to a CheckStructure, so that | 
 |         clobberize() can report a def() for MultiGetByOffset. | 
 |          | 
 |         This is a slight improvement to codegen in splay because splay is a heavy user of | 
 |         MultiGetByOffset. It uses it redundantly in one of its hot functions (the function called | 
 |         "splay_"). I don't see a net speed-up in the benchmark. However, this is just a first step to | 
 |         removing MultiXByOffset-related redundancies, which by my estimates account for 16% of | 
 |         splay's time. | 
 |  | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::remove): | 
 |         (JSC::DFG::Node::removeWithoutChecks): | 
 |         (JSC::DFG::Node::replaceWith): | 
 |         (JSC::DFG::Node::replaceWithWithoutChecks): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToMultiGetByOffset): | 
 |         (JSC::DFG::Node::replaceWith): Deleted. | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |  | 
 | 2018-04-24  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Update API docs with information on which run loop the VM will use | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184900 | 
 |         <rdar://problem/39166054> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * API/JSContextRef.h: | 
 |         * API/JSVirtualMachine.h: | 
 |  | 
 | 2018-04-24  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         $vm.totalGCTime() should be a thing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184916 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |          | 
 |         When debugging regressions in tests that are GC heavy, it's nice to be able to query the total | 
 |         time spent in GC to determine if the regression is because the GC got slower. | 
 |          | 
 |         This adds $vm.totalGCTime(), which tells you the total time spent in GC, in seconds. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::runEndPhase): | 
 |         * heap/Heap.h: | 
 |         (JSC::Heap::totalGCTime const): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionTotalGCTime): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-04-23  Zalan Bujtas  <zalan@apple.com> | 
 |  | 
 |         [LayoutFormattingContext] Initial commit. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184896 | 
 |  | 
 |         Reviewed by Antti Koivisto. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-04-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Unreviewed, revert accidental change to verbose flag. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |  | 
 | 2018-04-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Roll out r226655 because it broke OSR entry when the pre-header is inadequately profiled. | 
 |  | 
 |         Rubber stamped by Saam Barati. | 
 |          | 
 |         This is a >2x speed-up in SunSpider/bitops-bitwise-and. We don't really care about SunSpider | 
 |         anymore, but r226655 didn't result in any benchmark wins and just regressed this test by a lot. | 
 |         Seems sensible to just roll it out. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::addToGraph): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |  | 
 | 2018-04-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove ModuleLoaderPrototype | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184784 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         When we introduce ModuleLoaderPrototype, ModuleLoader may be created by users and exposed to users. | 
 |         However, the loader spec is abandoned. So we do not need to have ModuleLoaderPrototype and JSModuleLoader. | 
 |         This patch merges ModuleLoaderPrototype's functionality into JSModuleLoader. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * DerivedSources.make: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * builtins/ModuleLoader.js: Renamed from Source/JavaScriptCore/builtins/ModuleLoaderPrototype.js. | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::proxyRevokeStructure const): | 
 |         (JSC::JSGlobalObject::moduleLoaderStructure const): Deleted. | 
 |         * runtime/JSModuleLoader.cpp: | 
 |         (JSC::moduleLoaderParseModule): | 
 |         (JSC::moduleLoaderRequestedModules): | 
 |         (JSC::moduleLoaderModuleDeclarationInstantiation): | 
 |         (JSC::moduleLoaderResolve): | 
 |         (JSC::moduleLoaderResolveSync): | 
 |         (JSC::moduleLoaderFetch): | 
 |         (JSC::moduleLoaderGetModuleNamespaceObject): | 
 |         (JSC::moduleLoaderEvaluate): | 
 |         * runtime/JSModuleLoader.h: | 
 |         * runtime/ModuleLoaderPrototype.cpp: Removed. | 
 |         * runtime/ModuleLoaderPrototype.h: Removed. | 
 |  | 
 | 2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] All API tests fail in debug builds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184813 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This is because of a conflict of ExceptionHandler class used in tests and ExceptionHandler struct defined in | 
 |         JSCContext.cpp. This patch renames the ExceptionHandler struct as JSCContextExceptionHandler. | 
 |  | 
 |         * API/glib/JSCContext.cpp: | 
 |         (JSCContextExceptionHandler::JSCContextExceptionHandler): | 
 |         (JSCContextExceptionHandler::~JSCContextExceptionHandler): | 
 |         (jscContextConstructed): | 
 |         (ExceptionHandler::ExceptionHandler): Deleted. | 
 |         (ExceptionHandler::~ExceptionHandler): Deleted. | 
 |  | 
 | 2018-04-20  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Adjust geolocation feature flag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184856 | 
 |  | 
 |         Reviewed by Wenson Hsieh. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-04-20  Brian Burg  <bburg@apple.com> | 
 |  | 
 |         Web Inspector: remove some dead code in IdentifiersFactory | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184839 | 
 |  | 
 |         Reviewed by Timothy Hatcher. | 
 |  | 
 |         This was never used on non-Chrome ports, so the identifier always has a | 
 |         prefix of '0.'. We may change this in the future, but for now remove this. | 
 |         Using a PID for this purpose is problematic anyway. | 
 |  | 
 |         * inspector/IdentifiersFactory.cpp: | 
 |         (Inspector::addPrefixToIdentifier): | 
 |         (Inspector::IdentifiersFactory::createIdentifier): | 
 |         (Inspector::IdentifiersFactory::requestId): | 
 |         (Inspector::IdentifiersFactory::addProcessIdPrefixTo): Deleted. | 
 |         * inspector/IdentifiersFactory.h: | 
 |  | 
 | 2018-04-20  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add the ability to use a hash for setting PtrTag enum values. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184852 | 
 |         <rdar://problem/39613891> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/PtrTag.h: | 
 |  | 
 | 2018-04-20  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Some JSEntryPtrTags should actually be JSInternalPtrTags. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184712 | 
 |         <rdar://problem/39507381> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         1. Convert some uses of JSEntryPtrTag into JSInternalPtrTags. | 
 |         2. Tag all LLInt bytecodes consistently with BytecodePtrTag now and retag them | 
 |            only when needed. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/ByValInfo.h: | 
 |         (JSC::ByValInfo::ByValInfo): | 
 |         * bytecode/CallLinkInfo.cpp: | 
 |         (JSC::CallLinkInfo::callReturnLocation): | 
 |         (JSC::CallLinkInfo::patchableJump): | 
 |         (JSC::CallLinkInfo::hotPathBegin): | 
 |         (JSC::CallLinkInfo::slowPathStart): | 
 |         * bytecode/CallLinkInfo.h: | 
 |         (JSC::CallLinkInfo::setCallLocations): | 
 |         (JSC::CallLinkInfo::hotPathOther): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::doneLocation): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::initialize): | 
 |         * ftl/FTLLazySlowPath.h: | 
 |         (JSC::FTL::LazySlowPath::done const): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::link): | 
 |         * jit/JITExceptions.cpp: | 
 |         (JSC::genericUnwind): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         (JSC::LLInt::getCodePtr): | 
 |         (JSC::LLInt::getExecutableAddress): Deleted. | 
 |         * llint/LLIntExceptions.cpp: | 
 |         (JSC::LLInt::callToThrow): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::wasmToJS): | 
 |  | 
 | 2018-04-18  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184762 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-04-20  Daniel Bates  <dabates@apple.com> | 
 |  | 
 |         Remove code for compilers that did not support NSDMI for aggregates | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184599 | 
 |  | 
 |         Reviewed by Per Arne Vollan. | 
 |  | 
 |         Remove workaround for earlier Visual Studio versions that did not support non-static data | 
 |         member initializers (NSDMI) for aggregates. We have since updated all the build.webkit.org | 
 |         and EWS bots to a newer version that supports this feature. | 
 |  | 
 |         * domjit/DOMJITEffect.h: | 
 |         (JSC::DOMJIT::Effect::Effect): Deleted. | 
 |         * runtime/HasOwnPropertyCache.h: | 
 |         (JSC::HasOwnPropertyCache::Entry::Entry): Deleted. | 
 |         * wasm/WasmFormat.h: | 
 |         (JSC::Wasm::WasmToWasmImportableFunction::WasmToWasmImportableFunction): Deleted. | 
 |  | 
 | 2018-04-20  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Build fix for internal builds after r230826. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184790 | 
 |         <rdar://problem/39301369> | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/Options.cpp: | 
 |         (JSC::overrideDefaults): | 
 |         * tools/SigillCrashAnalyzer.cpp: | 
 |         (JSC::SignalContext::dump): | 
 |  | 
 | 2018-04-19  Tadeu Zagallo  <tzagallo@apple.com> | 
 |  | 
 |         REGRESSION(r227340): ArrayBuffers were not being serialized when sent via MessagePorts | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184254 | 
 |         <rdar://problem/39140200> | 
 |  | 
 |         Reviewed by Daniel Bates. | 
 |  | 
 |         Expose an extra constructor of ArrayBufferContents in order to be able to decode SerializedScriptValues. | 
 |  | 
 |         * runtime/ArrayBuffer.h: | 
 |         (JSC::ArrayBufferContents::ArrayBufferContents): | 
 |  | 
 | 2018-04-19  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Apply pointer profiling to Signal pointers. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184790 | 
 |         <rdar://problem/39301369> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         1. Change stackPointer, framePointer, and instructionPointer accessors to | 
 |            be a pair of getter/setter functions. | 
 |         2. Add support for USE(PLATFORM_REGISTERS_WITH_PROFILE) to allow use of a | 
 |            a pointer profiling variants of these accessors. | 
 |         3. Also add a linkRegister accessor only for ARM64 on OS(DARWIN). | 
 |  | 
 |         * JavaScriptCorePrefix.h: | 
 |         * runtime/MachineContext.h: | 
 |         (JSC::MachineContext::stackPointerImpl): | 
 |         (JSC::MachineContext::stackPointer): | 
 |         (JSC::MachineContext::setStackPointer): | 
 |         (JSC::MachineContext::framePointerImpl): | 
 |         (JSC::MachineContext::framePointer): | 
 |         (JSC::MachineContext::setFramePointer): | 
 |         (JSC::MachineContext::instructionPointerImpl): | 
 |         (JSC::MachineContext::instructionPointer): | 
 |         (JSC::MachineContext::setInstructionPointer): | 
 |         (JSC::MachineContext::linkRegisterImpl): | 
 |         (JSC::MachineContext::linkRegister): | 
 |         (JSC::MachineContext::setLinkRegister): | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::takeSample): | 
 |         * runtime/VMTraps.cpp: | 
 |         (JSC::SignalContext::SignalContext): | 
 |         (JSC::VMTraps::tryInstallTrapBreakpoints): | 
 |         * tools/CodeProfiling.cpp: | 
 |         (JSC::profilingTimer): | 
 |         * tools/SigillCrashAnalyzer.cpp: | 
 |         (JSC::SignalContext::dump): | 
 |         (JSC::installCrashHandler): | 
 |         (JSC::SigillCrashAnalyzer::analyze): | 
 |         * wasm/WasmFaultSignalHandler.cpp: | 
 |         (JSC::Wasm::trapHandler): | 
 |  | 
 | 2018-04-19  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         Enable Objective-C weak references | 
 |         <https://webkit.org/b/184789> | 
 |         <rdar://problem/39571716> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |         (CLANG_ENABLE_OBJC_WEAK): Enable. | 
 |         * Configurations/ToolExecutable.xcconfig: | 
 |         (CLANG_ENABLE_OBJC_ARC): Simplify. | 
 |  | 
 | 2018-04-17  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         The InternalFunction hierarchy should be in IsoSubspaces | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184721 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This moves InternalFunction into a IsoSubspace. It also moves all subclasses into IsoSubspaces, | 
 |         but 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. | 
 |  | 
 |         * API/JSBase.h: | 
 |         * API/JSCallbackFunction.h: | 
 |         * API/ObjCCallbackFunction.h: | 
 |         (JSC::ObjCCallbackFunction::subspaceFor): | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * heap/IsoSubspacePerVM.cpp: Added. | 
 |         (JSC::IsoSubspacePerVM::AutoremovingIsoSubspace::AutoremovingIsoSubspace): | 
 |         (JSC::IsoSubspacePerVM::AutoremovingIsoSubspace::~AutoremovingIsoSubspace): | 
 |         (JSC::IsoSubspacePerVM::IsoSubspacePerVM): | 
 |         (JSC::IsoSubspacePerVM::~IsoSubspacePerVM): | 
 |         (JSC::IsoSubspacePerVM::forVM): | 
 |         * heap/IsoSubspacePerVM.h: Added. | 
 |         (JSC::IsoSubspacePerVM::SubspaceParameters::SubspaceParameters): | 
 |         * runtime/Error.h: | 
 |         * runtime/ErrorConstructor.h: | 
 |         * runtime/InternalFunction.h: | 
 |         (JSC::InternalFunction::subspaceFor): | 
 |         * runtime/IntlCollatorConstructor.h: | 
 |         * runtime/IntlDateTimeFormatConstructor.h: | 
 |         * runtime/IntlNumberFormatConstructor.h: | 
 |         * runtime/JSArrayBufferConstructor.h: | 
 |         * runtime/NativeErrorConstructor.h: | 
 |         * runtime/ProxyRevoke.h: | 
 |         * runtime/RegExpConstructor.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-04-19  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, Fix jsc shell | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184600 | 
 |  | 
 |         WebAssembly module loading does not finish with drainMicrotasks(). | 
 |         So JSNativeStdFunction's capturing variables become invalid. | 
 |         This patch fixes this issue. | 
 |  | 
 |         * jsc.cpp: | 
 |         (functionDollarAgentStart): | 
 |         (runWithOptions): | 
 |         (runJSC): | 
 |         (jscmain): | 
 |  | 
 | 2018-04-18  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         REGRESSION(r230748) [WinCairo] 'JSC::JIT::appendCallWithSlowPathReturnType': function does not take 1 arguments | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184725 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * jit/JIT.h: | 
 |  | 
 | 2018-04-18  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WebAssembly][Modules] Import tables in wasm modules | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184738 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch simply allows wasm modules to import table from wasm modules / js re-exporting. | 
 |         Basically moving JSWebAssemblyInstance's table linking code to WebAssemblyModuleRecord::link | 
 |         just works. | 
 |  | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |  | 
 | 2018-04-18  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] Fix build error and crash after PtrTag change | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184732 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Do not pass NoPtrTag in callOperation and fix misspelled JSEntryPtrTag. Use | 
 |         MacroAssemblerCodePtr::createFromExecutableAddress to avoid tagging a pointer | 
 |         twice with ARM-Thumb2. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |  | 
 | 2018-04-18  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WebAssembly][Modules] Import globals from wasm modules | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184736 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch implements a feature importing globals to/from wasm modules. | 
 |         Since we are not supporting mutable globals now, we can just copy the | 
 |         global data when importing. Currently we do not support importing/exporting | 
 |         i64 globals. This will be supported once (1) mutable global bindings are | 
 |         specified and (2) BigInt based i64 importing/exporting is specified. | 
 |  | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |  | 
 | 2018-04-18  Tomas Popela  <tpopela@redhat.com> | 
 |  | 
 |         Unreviewed, fix build on ARM | 
 |  | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::readCallTarget): | 
 |  | 
 | 2018-04-18  Tomas Popela  <tpopela@redhat.com> | 
 |  | 
 |         Unreviewed, fix build with GCC | 
 |  | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::finalizeCodeWithDisassembly): | 
 |  | 
 | 2018-04-18  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, reland r230697, r230720, and r230724. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184600 | 
 |  | 
 |         With CatchScope check. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * builtins/ModuleLoaderPrototype.js: | 
 |         (globalPrivate.newRegistryEntry): | 
 |         (requestInstantiate): | 
 |         (link): | 
 |         * jsc.cpp: | 
 |         (convertShebangToJSComment): | 
 |         (fillBufferWithContentsOfFile): | 
 |         (fetchModuleFromLocalFileSystem): | 
 |         (GlobalObject::moduleLoaderFetch): | 
 |         (functionDollarAgentStart): | 
 |         (checkException): | 
 |         (runWithOptions): | 
 |         * parser/NodesAnalyzeModule.cpp: | 
 |         (JSC::ImportDeclarationNode::analyzeModule): | 
 |         * parser/SourceProvider.h: | 
 |         (JSC::WebAssemblySourceProvider::create): | 
 |         (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider): | 
 |         * runtime/AbstractModuleRecord.cpp: | 
 |         (JSC::AbstractModuleRecord::hostResolveImportedModule): | 
 |         (JSC::AbstractModuleRecord::resolveImport): | 
 |         (JSC::AbstractModuleRecord::link): | 
 |         (JSC::AbstractModuleRecord::evaluate): | 
 |         (JSC::identifierToJSValue): Deleted. | 
 |         * runtime/AbstractModuleRecord.h: | 
 |         (JSC::AbstractModuleRecord::moduleEnvironmentMayBeNull): | 
 |         (JSC::AbstractModuleRecord::ImportEntry::isNamespace const): Deleted. | 
 |         * runtime/JSModuleEnvironment.cpp: | 
 |         (JSC::JSModuleEnvironment::getOwnNonIndexPropertyNames): | 
 |         * runtime/JSModuleLoader.cpp: | 
 |         (JSC::JSModuleLoader::evaluate): | 
 |         * runtime/JSModuleRecord.cpp: | 
 |         (JSC::JSModuleRecord::link): | 
 |         (JSC::JSModuleRecord::instantiateDeclarations): | 
 |         * runtime/JSModuleRecord.h: | 
 |         * runtime/ModuleLoaderPrototype.cpp: | 
 |         (JSC::moduleLoaderPrototypeParseModule): | 
 |         (JSC::moduleLoaderPrototypeRequestedModules): | 
 |         (JSC::moduleLoaderPrototypeModuleDeclarationInstantiation): | 
 |         * wasm/WasmCreationMode.h: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h. | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::getWasmBufferFromValue): | 
 |         (JSC::createSourceBufferFromValue): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::finalizeCreation): | 
 |         (JSC::JSWebAssemblyInstance::createPrivateModuleKey): | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         * wasm/js/WebAssemblyInstanceConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyInstance): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::prepareLink): | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::resolve): | 
 |         (JSC::instantiate): | 
 |         (JSC::compileAndInstantiate): | 
 |         (JSC::WebAssemblyPrototype::instantiate): | 
 |         (JSC::webAssemblyInstantiateFunc): | 
 |         (JSC::webAssemblyValidateFunc): | 
 |         * wasm/js/WebAssemblyPrototype.h: | 
 |  | 
 | 2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Make it possible to handle JSCClass external properties not added to the prototype | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184687 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add JSCClassVTable that can be optionally passed to jsc_context_register_class() to provide implmentations for | 
 |         JSClassDefinition. This is required to implement dynamic properties that can't be added with | 
 |         jsc_class_add_property() for example to implement something like imports object in seed/gjs. | 
 |  | 
 |         * API/glib/JSCClass.cpp: | 
 |         (VTableExceptionHandler::VTableExceptionHandler): Helper class to handle the exceptions in vtable functions that | 
 |         can throw exceptions. | 
 |         (VTableExceptionHandler::~VTableExceptionHandler): | 
 |         (getProperty): Iterate the class chain to call get_property function. | 
 |         (setProperty): Iterate the class chain to call set_property function. | 
 |         (hasProperty): Iterate the class chain to call has_property function. | 
 |         (deleteProperty): Iterate the class chain to call delete_property function. | 
 |         (getPropertyNames): Iterate the class chain to call enumerate_properties function. | 
 |         (jsc_class_class_init): Remove constructed implementation, since we need to initialize the JSClassDefinition in | 
 |         jscClassCreate now. | 
 |         (jscClassCreate): Receive an optional JSCClassVTable that is used to initialize the JSClassDefinition. | 
 |         * API/glib/JSCClass.h: | 
 |         * API/glib/JSCClassPrivate.h: | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jscContextGetRegisteredClass): Helper to get the JSCClass for a given JSClassRef. | 
 |         (jsc_context_register_class): Add JSCClassVTable parameter. | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/JSCContextPrivate.h: | 
 |         * API/glib/JSCWrapperMap.cpp: | 
 |         (JSC::WrapperMap::registeredClass const): Get the JSCClass for a given JSClassRef. | 
 |         * API/glib/JSCWrapperMap.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: Add new symbols. | 
 |  | 
 | 2018-04-17  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Templatize CodePtr/Refs/FunctionPtrs with PtrTags. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184702 | 
 |         <rdar://problem/35391681> | 
 |  | 
 |         Reviewed by Filip Pizlo and Saam Barati. | 
 |  | 
 |         1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants | 
 |            to take a PtrTag template argument. | 
 |         2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): | 
 |         (JSC::AbstractMacroAssembler::linkJump): | 
 |         (JSC::AbstractMacroAssembler::linkPointer): | 
 |         (JSC::AbstractMacroAssembler::getLinkerAddress): | 
 |         (JSC::AbstractMacroAssembler::repatchJump): | 
 |         (JSC::AbstractMacroAssembler::repatchJumpToNop): | 
 |         (JSC::AbstractMacroAssembler::repatchNearCall): | 
 |         (JSC::AbstractMacroAssembler::repatchCompact): | 
 |         (JSC::AbstractMacroAssembler::repatchInt32): | 
 |         (JSC::AbstractMacroAssembler::repatchPointer): | 
 |         (JSC::AbstractMacroAssembler::readPointer): | 
 |         (JSC::AbstractMacroAssembler::replaceWithLoad): | 
 |         (JSC::AbstractMacroAssembler::replaceWithAddressComputation): | 
 |         * assembler/CodeLocation.h: | 
 |         (JSC::CodeLocationCommon:: const): | 
 |         (JSC::CodeLocationCommon::CodeLocationCommon): | 
 |         (JSC::CodeLocationInstruction::CodeLocationInstruction): | 
 |         (JSC::CodeLocationLabel::CodeLocationLabel): | 
 |         (JSC::CodeLocationLabel::retagged): | 
 |         (JSC::CodeLocationLabel:: const): | 
 |         (JSC::CodeLocationJump::CodeLocationJump): | 
 |         (JSC::CodeLocationJump::retagged): | 
 |         (JSC::CodeLocationCall::CodeLocationCall): | 
 |         (JSC::CodeLocationCall::retagged): | 
 |         (JSC::CodeLocationNearCall::CodeLocationNearCall): | 
 |         (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): | 
 |         (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): | 
 |         (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): | 
 |         (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): | 
 |         (JSC::CodeLocationCommon<tag>::instructionAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::labelAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::jumpAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::callAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::nearCallAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): | 
 |         (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): | 
 |         (JSC::CodeLocationCommon::instructionAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::labelAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::jumpAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::callAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. | 
 |         (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. | 
 |         * assembler/LinkBuffer.cpp: | 
 |         (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): | 
 |         (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): | 
 |         (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. | 
 |         (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::link): | 
 |         (JSC::LinkBuffer::patch): | 
 |         (JSC::LinkBuffer::entrypoint): | 
 |         (JSC::LinkBuffer::locationOf): | 
 |         (JSC::LinkBuffer::locationOfNearCall): | 
 |         (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): | 
 |         (JSC::LinkBuffer::finalizeCodeWithDisassembly): | 
 |         (JSC::LinkBuffer::trampolineAt): | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::readCallTarget): | 
 |         (JSC::MacroAssemblerARM::replaceWithJump): | 
 |         (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM::repatchCall): | 
 |         (JSC::MacroAssemblerARM::linkCall): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::readCallTarget): | 
 |         (JSC::MacroAssemblerARM64::replaceWithVMHalt): | 
 |         (JSC::MacroAssemblerARM64::replaceWithJump): | 
 |         (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerARM64::repatchCall): | 
 |         (JSC::MacroAssemblerARM64::linkCall): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::replaceWithJump): | 
 |         (JSC::MacroAssemblerARMv7::readCallTarget): | 
 |         (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerARMv7::repatchCall): | 
 |         (JSC::MacroAssemblerARMv7::linkCall): | 
 |         * assembler/MacroAssemblerCodeRef.cpp: | 
 |         (JSC::MacroAssemblerCodePtrBase::dumpWithName): | 
 |         (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): | 
 |         (JSC::MacroAssemblerCodeRefBase::disassembly): | 
 |         (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. | 
 |         (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. | 
 |         (JSC::MacroAssemblerCodePtr::dump const): Deleted. | 
 |         (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. | 
 |         (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. | 
 |         (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. | 
 |         (JSC::MacroAssemblerCodeRef::dump const): Deleted. | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::FunctionPtr::FunctionPtr): | 
 |         (JSC::FunctionPtr::retagged const): | 
 |         (JSC::FunctionPtr::retaggedExecutableAddress const): | 
 |         (JSC::FunctionPtr::operator== const): | 
 |         (JSC::FunctionPtr::operator!= const): | 
 |         (JSC::ReturnAddressPtr::ReturnAddressPtr): | 
 |         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): | 
 |         (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): | 
 |         (JSC::MacroAssemblerCodePtr::retagged const): | 
 |         (JSC::MacroAssemblerCodePtr:: const): | 
 |         (JSC::MacroAssemblerCodePtr::dumpWithName const): | 
 |         (JSC::MacroAssemblerCodePtr::dump const): | 
 |         (JSC::MacroAssemblerCodePtrHash::hash): | 
 |         (JSC::MacroAssemblerCodePtrHash::equal): | 
 |         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): | 
 |         (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): | 
 |         (JSC::MacroAssemblerCodeRef::code const): | 
 |         (JSC::MacroAssemblerCodeRef::retaggedCode const): | 
 |         (JSC::MacroAssemblerCodeRef::retagged const): | 
 |         (JSC::MacroAssemblerCodeRef::tryToDisassemble const): | 
 |         (JSC::MacroAssemblerCodeRef::disassembly const): | 
 |         (JSC::MacroAssemblerCodeRef::dump const): | 
 |         (JSC::FunctionPtr<tag>::FunctionPtr): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::readCallTarget): | 
 |         (JSC::MacroAssemblerMIPS::replaceWithJump): | 
 |         (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerMIPS::repatchCall): | 
 |         (JSC::MacroAssemblerMIPS::linkCall): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::readCallTarget): | 
 |         (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerX86::repatchCall): | 
 |         (JSC::MacroAssemblerX86::linkCall): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::repatchCompact): | 
 |         (JSC::MacroAssemblerX86Common::replaceWithVMHalt): | 
 |         (JSC::MacroAssemblerX86Common::replaceWithJump): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::readCallTarget): | 
 |         (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): | 
 |         (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): | 
 |         (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): | 
 |         (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): | 
 |         (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): | 
 |         (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerX86_64::repatchCall): | 
 |         (JSC::MacroAssemblerX86_64::linkCall): | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::compile): | 
 |         (JSC::invoke): | 
 |         (JSC::testProbeModifiesProgramCounter): | 
 |         * b3/B3Compilation.cpp: | 
 |         (JSC::B3::Compilation::Compilation): | 
 |         * b3/B3Compilation.h: | 
 |         (JSC::B3::Compilation::code const): | 
 |         (JSC::B3::Compilation::codeRef const): | 
 |         * b3/B3Compile.cpp: | 
 |         (JSC::B3::compile): | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/air/AirDisassembler.cpp: | 
 |         (JSC::B3::Air::Disassembler::dump): | 
 |         * b3/air/testair.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::invoke): | 
 |         (JSC::B3::testInterpreter): | 
 |         (JSC::B3::testEntrySwitchSimple): | 
 |         (JSC::B3::testEntrySwitchNoEntrySwitch): | 
 |         (JSC::B3::testEntrySwitchWithCommonPaths): | 
 |         (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): | 
 |         (JSC::B3::testEntrySwitchLoop): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCaseSnippetParams.cpp: | 
 |         (JSC::SlowPathCallGeneratorWithArguments::generateImpl): | 
 |         * bytecode/ByValInfo.h: | 
 |         (JSC::ByValInfo::ByValInfo): | 
 |         * bytecode/CallLinkInfo.cpp: | 
 |         (JSC::CallLinkInfo::callReturnLocation): | 
 |         (JSC::CallLinkInfo::patchableJump): | 
 |         (JSC::CallLinkInfo::hotPathBegin): | 
 |         (JSC::CallLinkInfo::slowPathStart): | 
 |         * bytecode/CallLinkInfo.h: | 
 |         (JSC::CallLinkInfo::setCallLocations): | 
 |         (JSC::CallLinkInfo::hotPathOther): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): | 
 |         * bytecode/GetByIdVariant.cpp: | 
 |         (JSC::GetByIdVariant::GetByIdVariant): | 
 |         (JSC::GetByIdVariant::dumpInContext const): | 
 |         * bytecode/GetByIdVariant.h: | 
 |         (JSC::GetByIdVariant::customAccessorGetter const): | 
 |         * bytecode/GetterSetterAccessCase.cpp: | 
 |         (JSC::GetterSetterAccessCase::create): | 
 |         (JSC::GetterSetterAccessCase::GetterSetterAccessCase): | 
 |         (JSC::GetterSetterAccessCase::dumpImpl const): | 
 |         * bytecode/GetterSetterAccessCase.h: | 
 |         (JSC::GetterSetterAccessCase::customAccessor const): | 
 |         (): Deleted. | 
 |         * bytecode/HandlerInfo.h: | 
 |         (JSC::HandlerInfo::initialize): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::linkCodeInline): | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * bytecode/InlineAccess.h: | 
 |         * bytecode/JumpTable.h: | 
 |         (JSC::StringJumpTable::ctiForValue): | 
 |         (JSC::SimpleJumpTable::ctiForValue): | 
 |         * bytecode/LLIntCallLinkInfo.h: | 
 |         (JSC::LLIntCallLinkInfo::unlink): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::AccessGenerationState::emitExplicitExceptionHandler): | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * bytecode/PolymorphicAccess.h: | 
 |         (JSC::AccessGenerationResult::AccessGenerationResult): | 
 |         (JSC::AccessGenerationResult::code const): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::StructureStubInfo::slowPathCallLocation): | 
 |         (JSC::StructureStubInfo::doneLocation): | 
 |         (JSC::StructureStubInfo::slowPathStartLocation): | 
 |         (JSC::StructureStubInfo::patchableJumpForIn): | 
 |         * dfg/DFGCommonData.h: | 
 |         (JSC::DFG::CommonData::appendCatchEntrypoint): | 
 |         * dfg/DFGDisassembler.cpp: | 
 |         (JSC::DFG::Disassembler::dumpDisassembly): | 
 |         * dfg/DFGDriver.h: | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::linkOSRExits): | 
 |         (JSC::DFG::JITCompiler::compileExceptionHandlers): | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         (JSC::DFG::JITCompiler::noticeCatchEntrypoint): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::CallLinkRecord::CallLinkRecord): | 
 |         (JSC::DFG::JITCompiler::appendCall): | 
 |         (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): | 
 |         (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): | 
 |         (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): | 
 |         * dfg/DFGJITFinalizer.cpp: | 
 |         (JSC::DFG::JITFinalizer::JITFinalizer): | 
 |         (JSC::DFG::JITFinalizer::finalize): | 
 |         (JSC::DFG::JITFinalizer::finalizeFunction): | 
 |         * dfg/DFGJITFinalizer.h: | 
 |         * dfg/DFGJumpReplacement.h: | 
 |         (JSC::DFG::JumpReplacement::JumpReplacement): | 
 |         * dfg/DFGNode.h: | 
 |         * dfg/DFGOSREntry.cpp: | 
 |         (JSC::DFG::prepareOSREntry): | 
 |         (JSC::DFG::prepareCatchOSREntry): | 
 |         * dfg/DFGOSREntry.h: | 
 |         (JSC::DFG::prepareOSREntry): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::executeOSRExit): | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         (JSC::DFG::OSRExit::codeLocationForRepatch const): | 
 |         (JSC::DFG::OSRExit::emitRestoreArguments): | 
 |         (JSC::DFG::OSRExit::compileOSRExit): | 
 |         * dfg/DFGOSRExit.h: | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::handleExitCounts): | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         (JSC::DFG::osrWriteBarrier): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGSlowPathGenerator.h: | 
 |         (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): | 
 |         (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): | 
 |         (JSC::DFG::slowPathCall): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileMathIC): | 
 |         (JSC::DFG::SpeculativeJIT::compileCallDOM): | 
 |         (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchImm): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): | 
 |         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetDirectPname): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         (JSC::DFG::SpeculativeJIT::appendCall): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallSetResult): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrExitThunkGenerator): | 
 |         (JSC::DFG::osrExitGenerationThunkGenerator): | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * dfg/DFGThunks.h: | 
 |         * disassembler/ARM64Disassembler.cpp: | 
 |         (JSC::tryToDisassemble): | 
 |         * disassembler/ARMv7Disassembler.cpp: | 
 |         (JSC::tryToDisassemble): | 
 |         * disassembler/Disassembler.cpp: | 
 |         (JSC::disassemble): | 
 |         (JSC::disassembleAsynchronously): | 
 |         * disassembler/Disassembler.h: | 
 |         (JSC::tryToDisassemble): | 
 |         * disassembler/UDis86Disassembler.cpp: | 
 |         (JSC::tryToDisassembleWithUDis86): | 
 |         * disassembler/UDis86Disassembler.h: | 
 |         (JSC::tryToDisassembleWithUDis86): | 
 |         * disassembler/X86Disassembler.cpp: | 
 |         (JSC::tryToDisassemble): | 
 |         * ftl/FTLCompile.cpp: | 
 |         (JSC::FTL::compile): | 
 |         * ftl/FTLExceptionTarget.cpp: | 
 |         (JSC::FTL::ExceptionTarget::label): | 
 |         (JSC::FTL::ExceptionTarget::jumps): | 
 |         * ftl/FTLExceptionTarget.h: | 
 |         * ftl/FTLGeneratedFunction.h: | 
 |         * ftl/FTLJITCode.cpp: | 
 |         (JSC::FTL::JITCode::initializeB3Code): | 
 |         (JSC::FTL::JITCode::initializeAddressForCall): | 
 |         (JSC::FTL::JITCode::initializeArityCheckEntrypoint): | 
 |         (JSC::FTL::JITCode::addressForCall): | 
 |         (JSC::FTL::JITCode::executableAddressAtOffset): | 
 |         * ftl/FTLJITCode.h: | 
 |         (JSC::FTL::JITCode::b3Code const): | 
 |         * ftl/FTLJITFinalizer.cpp: | 
 |         (JSC::FTL::JITFinalizer::finalizeCommon): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::initialize): | 
 |         (JSC::FTL::LazySlowPath::generate): | 
 |         * ftl/FTLLazySlowPath.h: | 
 |         (JSC::FTL::LazySlowPath::patchableJump const): | 
 |         (JSC::FTL::LazySlowPath::done const): | 
 |         (JSC::FTL::LazySlowPath::stub const): | 
 |         * ftl/FTLLazySlowPathCall.h: | 
 |         (JSC::FTL::createLazyCallGenerator): | 
 |         * ftl/FTLLink.cpp: | 
 |         (JSC::FTL::link): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lower): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): | 
 |         * ftl/FTLOSRExit.cpp: | 
 |         (JSC::FTL::OSRExit::codeLocationForRepatch const): | 
 |         * ftl/FTLOSRExit.h: | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileStub): | 
 |         (JSC::FTL::compileFTLOSRExit): | 
 |         * ftl/FTLOSRExitHandle.cpp: | 
 |         (JSC::FTL::OSRExitHandle::emitExitThunk): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::compileFTLLazySlowPath): | 
 |         * ftl/FTLPatchpointExceptionHandle.cpp: | 
 |         (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): | 
 |         * ftl/FTLSlowPathCall.cpp: | 
 |         (JSC::FTL::SlowPathCallContext::keyWithTarget const): | 
 |         (JSC::FTL::SlowPathCallContext::makeCall): | 
 |         * ftl/FTLSlowPathCall.h: | 
 |         (JSC::FTL::callOperation): | 
 |         * ftl/FTLSlowPathCallKey.cpp: | 
 |         (JSC::FTL::SlowPathCallKey::dump const): | 
 |         * ftl/FTLSlowPathCallKey.h: | 
 |         (JSC::FTL::SlowPathCallKey::SlowPathCallKey): | 
 |         (JSC::FTL::SlowPathCallKey::callTarget const): | 
 |         (JSC::FTL::SlowPathCallKey::withCallTarget): | 
 |         (JSC::FTL::SlowPathCallKey::hash const): | 
 |         (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. | 
 |         * ftl/FTLState.cpp: | 
 |         (JSC::FTL::State::State): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::genericGenerationThunkGenerator): | 
 |         (JSC::FTL::osrExitGenerationThunkGenerator): | 
 |         (JSC::FTL::lazySlowPathGenerationThunkGenerator): | 
 |         (JSC::FTL::slowPathCallThunkGenerator): | 
 |         * ftl/FTLThunks.h: | 
 |         (JSC::FTL::generateIfNecessary): | 
 |         (JSC::FTL::keyForThunk): | 
 |         (JSC::FTL::Thunks::getSlowPathCallThunk): | 
 |         (JSC::FTL::Thunks::keyForSlowPathCallThunk): | 
 |         * interpreter/InterpreterInlines.h: | 
 |         (JSC::Interpreter::getOpcodeID): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::callExceptionFuzz): | 
 |         (JSC::AssemblyHelpers::emitDumbVirtualCall): | 
 |         (JSC::AssemblyHelpers::debugCall): | 
 |         * jit/CCallHelpers.cpp: | 
 |         (JSC::CCallHelpers::ensureShadowChickenPacket): | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): | 
 |         (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): | 
 |         * jit/ExecutableAllocator.h: | 
 |         (JSC::performJITMemcpy): | 
 |         * jit/GCAwareJITStubRoutine.cpp: | 
 |         (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): | 
 |         (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): | 
 |         (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): | 
 |         (JSC::createJITStubRoutine): | 
 |         * jit/GCAwareJITStubRoutine.h: | 
 |         (JSC::createJITStubRoutine): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::ctiPatchCallByReturnAddress): | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         (JSC::JIT::link): | 
 |         (JSC::JIT::privateCompileExceptionHandlers): | 
 |         * jit/JIT.h: | 
 |         (JSC::CallRecord::CallRecord): | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emitMathICFast): | 
 |         (JSC::JIT::emitMathICSlow): | 
 |         * jit/JITCall.cpp: | 
 |         (JSC::JIT::compileOpCallSlowCase): | 
 |         * jit/JITCall32_64.cpp: | 
 |         (JSC::JIT::compileOpCallSlowCase): | 
 |         * jit/JITCode.cpp: | 
 |         (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): | 
 |         (JSC::JITCodeWithCodeRef::executableAddressAtOffset): | 
 |         (JSC::DirectJITCode::DirectJITCode): | 
 |         (JSC::DirectJITCode::initializeCodeRef): | 
 |         (JSC::DirectJITCode::addressForCall): | 
 |         (JSC::NativeJITCode::NativeJITCode): | 
 |         (JSC::NativeJITCode::initializeCodeRef): | 
 |         (JSC::NativeJITCode::addressForCall): | 
 |         * jit/JITCode.h: | 
 |         * jit/JITCodeMap.h: | 
 |         (JSC::JITCodeMap::Entry::Entry): | 
 |         (JSC::JITCodeMap::Entry::codeLocation): | 
 |         (JSC::JITCodeMap::append): | 
 |         (JSC::JITCodeMap::find const): | 
 |         * jit/JITDisassembler.cpp: | 
 |         (JSC::JITDisassembler::dumpDisassembly): | 
 |         * jit/JITExceptions.cpp: | 
 |         (JSC::genericUnwind): | 
 |         * jit/JITInlineCacheGenerator.cpp: | 
 |         (JSC::JITByIdGenerator::finalize): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitNakedCall): | 
 |         (JSC::JIT::emitNakedTailCall): | 
 |         (JSC::JIT::appendCallWithExceptionCheck): | 
 |         (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): | 
 |         (JSC::JIT::appendCallWithCallFrameRollbackOnException): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_catch): | 
 |         (JSC::JIT::emit_op_switch_imm): | 
 |         (JSC::JIT::emit_op_switch_char): | 
 |         (JSC::JIT::emit_op_switch_string): | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         (JSC::JIT::emitSlow_op_has_indexed_property): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITOperations.cpp: | 
 |         (JSC::getByVal): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitPutByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         (JSC::JIT::emitSlow_op_try_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_direct): | 
 |         (JSC::JIT::emitSlow_op_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_with_this): | 
 |         (JSC::JIT::emitSlow_op_put_by_id): | 
 |         (JSC::JIT::privateCompileGetByVal): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         * jit/JITStubRoutine.h: | 
 |         (JSC::JITStubRoutine::JITStubRoutine): | 
 |         (JSC::JITStubRoutine::createSelfManagedRoutine): | 
 |         (JSC::JITStubRoutine::code const): | 
 |         (JSC::JITStubRoutine::asCodePtr): | 
 |         * jit/JITThunks.cpp: | 
 |         (JSC::JITThunks::ctiNativeCall): | 
 |         (JSC::JITThunks::ctiNativeConstruct): | 
 |         (JSC::JITThunks::ctiNativeTailCall): | 
 |         (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): | 
 |         (JSC::JITThunks::ctiInternalFunctionCall): | 
 |         (JSC::JITThunks::ctiInternalFunctionConstruct): | 
 |         (JSC::JITThunks::ctiStub): | 
 |         (JSC::JITThunks::existingCTIStub): | 
 |         (JSC::JITThunks::hostFunctionStub): | 
 |         * jit/JITThunks.h: | 
 |         * jit/PCToCodeOriginMap.cpp: | 
 |         (JSC::PCToCodeOriginMap::PCToCodeOriginMap): | 
 |         * jit/PCToCodeOriginMap.h: | 
 |         * jit/PolymorphicCallStubRoutine.cpp: | 
 |         (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): | 
 |         * jit/PolymorphicCallStubRoutine.h: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::readPutICCallTarget): | 
 |         (JSC::ftlThunkAwareRepatchCall): | 
 |         (JSC::appropriateOptimizingGetByIdFunction): | 
 |         (JSC::appropriateGetByIdFunction): | 
 |         (JSC::tryCacheGetByID): | 
 |         (JSC::repatchGetByID): | 
 |         (JSC::tryCachePutByID): | 
 |         (JSC::repatchPutByID): | 
 |         (JSC::tryCacheIn): | 
 |         (JSC::repatchIn): | 
 |         (JSC::linkSlowFor): | 
 |         (JSC::linkFor): | 
 |         (JSC::linkDirectFor): | 
 |         (JSC::revertCall): | 
 |         (JSC::unlinkFor): | 
 |         (JSC::linkVirtualFor): | 
 |         (JSC::linkPolymorphicCall): | 
 |         (JSC::resetGetByID): | 
 |         (JSC::resetPutByID): | 
 |         * jit/Repatch.h: | 
 |         * jit/SlowPathCall.h: | 
 |         (JSC::JITSlowPathCall::call): | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::finalize): | 
 |         (JSC::SpecializedThunkJIT::callDoubleToDouble): | 
 |         (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): | 
 |         * jit/ThunkGenerator.h: | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::slowPathFor): | 
 |         (JSC::linkCallThunkGenerator): | 
 |         (JSC::linkPolymorphicCallThunkGenerator): | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::nativeCallGenerator): | 
 |         (JSC::nativeTailCallGenerator): | 
 |         (JSC::nativeTailCallWithoutSavedTagsGenerator): | 
 |         (JSC::nativeConstructGenerator): | 
 |         (JSC::internalFunctionCallGenerator): | 
 |         (JSC::internalFunctionConstructGenerator): | 
 |         (JSC::arityFixupGenerator): | 
 |         (JSC::unreachableGenerator): | 
 |         (JSC::charCodeAtThunkGenerator): | 
 |         (JSC::charAtThunkGenerator): | 
 |         (JSC::fromCharCodeThunkGenerator): | 
 |         (JSC::clz32ThunkGenerator): | 
 |         (JSC::sqrtThunkGenerator): | 
 |         (JSC::floorThunkGenerator): | 
 |         (JSC::ceilThunkGenerator): | 
 |         (JSC::truncThunkGenerator): | 
 |         (JSC::roundThunkGenerator): | 
 |         (JSC::expThunkGenerator): | 
 |         (JSC::logThunkGenerator): | 
 |         (JSC::absThunkGenerator): | 
 |         (JSC::imulThunkGenerator): | 
 |         (JSC::randomThunkGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * jit/ThunkGenerators.h: | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         (JSC::LLInt::getExecutableAddress): | 
 |         (JSC::LLInt::getCodePtr): | 
 |         (JSC::LLInt::getCodeRef): | 
 |         (JSC::LLInt::getCodeFunctionPtr): | 
 |         * llint/LLIntEntrypoint.cpp: | 
 |         (JSC::LLInt::setFunctionEntrypoint): | 
 |         (JSC::LLInt::setEvalEntrypoint): | 
 |         (JSC::LLInt::setProgramEntrypoint): | 
 |         (JSC::LLInt::setModuleProgramEntrypoint): | 
 |         * llint/LLIntExceptions.cpp: | 
 |         (JSC::LLInt::callToThrow): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LLIntThunks.cpp: | 
 |         (JSC::vmEntryToWasm): | 
 |         (JSC::LLInt::generateThunkWithJumpTo): | 
 |         (JSC::LLInt::functionForCallEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForCallArityCheckThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructArityCheckThunkGenerator): | 
 |         (JSC::LLInt::evalEntryThunkGenerator): | 
 |         (JSC::LLInt::programEntryThunkGenerator): | 
 |         (JSC::LLInt::moduleProgramEntryThunkGenerator): | 
 |         * llint/LLIntThunks.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * profiler/ProfilerCompilation.cpp: | 
 |         (JSC::Profiler::Compilation::addOSRExitSite): | 
 |         * profiler/ProfilerCompilation.h: | 
 |         * profiler/ProfilerOSRExitSite.cpp: | 
 |         (JSC::Profiler::OSRExitSite::toJS const): | 
 |         * profiler/ProfilerOSRExitSite.h: | 
 |         (JSC::Profiler::OSRExitSite::OSRExitSite): | 
 |         (JSC::Profiler::OSRExitSite::codeAddress const): | 
 |         (JSC::Profiler::OSRExitSite:: const): Deleted. | 
 |         * runtime/ExecutableBase.cpp: | 
 |         (JSC::ExecutableBase::clearCode): | 
 |         * runtime/ExecutableBase.h: | 
 |         (JSC::ExecutableBase::entrypointFor): | 
 |         * runtime/NativeExecutable.cpp: | 
 |         (JSC::NativeExecutable::finishCreation): | 
 |         * runtime/NativeFunction.h: | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |         (JSC::TaggedNativeFunction::operator NativeFunction): | 
 |         * runtime/PtrTag.h: | 
 |         (JSC::tagCodePtr): | 
 |         (JSC::untagCodePtr): | 
 |         (JSC::retagCodePtr): | 
 |         (JSC::tagCFunctionPtr): | 
 |         (JSC::untagCFunctionPtr): | 
 |         (JSC::nextPtrTagID): Deleted. | 
 |         * runtime/PutPropertySlot.h: | 
 |         (JSC::PutPropertySlot::PutPropertySlot): | 
 |         (JSC::PutPropertySlot::setCustomValue): | 
 |         (JSC::PutPropertySlot::setCustomAccessor): | 
 |         (JSC::PutPropertySlot::customSetter const): | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::installCode): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::getHostFunction): | 
 |         (JSC::VM::getCTIInternalFunctionTrampolineFor): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::getCTIStub): | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::B3IRGenerator): | 
 |         (JSC::Wasm::B3IRGenerator::emitExceptionCheck): | 
 |         (JSC::Wasm::B3IRGenerator::emitTierUpCheck): | 
 |         (JSC::Wasm::B3IRGenerator::addCall): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::prepare): | 
 |         (JSC::Wasm::BBQPlan::complete): | 
 |         * wasm/WasmBBQPlan.h: | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmBinding.h: | 
 |         * wasm/WasmCallee.h: | 
 |         (JSC::Wasm::Callee::entrypoint const): | 
 |         * wasm/WasmCallingConvention.h: | 
 |         (JSC::Wasm::CallingConvention::setupFrameInPrologue const): | 
 |         * wasm/WasmCodeBlock.h: | 
 |         (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): | 
 |         * wasm/WasmFaultSignalHandler.cpp: | 
 |         (JSC::Wasm::trapHandler): | 
 |         * wasm/WasmFormat.h: | 
 |         * wasm/WasmInstance.h: | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::throwExceptionFromWasmThunkGenerator): | 
 |         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |         (JSC::Wasm::Thunks::stub): | 
 |         (JSC::Wasm::Thunks::existingStub): | 
 |         * wasm/WasmThunks.h: | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * wasm/js/WasmToJS.h: | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): | 
 |         (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |         * yarr/YarrJIT.h: | 
 |         (JSC::Yarr::YarrCodeBlock::set8BitCode): | 
 |         (JSC::Yarr::YarrCodeBlock::set16BitCode): | 
 |         (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): | 
 |         (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): | 
 |         (JSC::Yarr::YarrCodeBlock::execute): | 
 |         (JSC::Yarr::YarrCodeBlock::clear): | 
 |  | 
 | 2018-04-17  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r230697, r230720, and r230724. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184717 | 
 |  | 
 |         These caused multiple failures on the Test262 testers. | 
 |         (Requested by mlewis13 on #webkit). | 
 |  | 
 |         Reverted changesets: | 
 |  | 
 |         "[WebAssembly][Modules] Prototype wasm import" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184600 | 
 |         https://trac.webkit.org/changeset/230697 | 
 |  | 
 |         "[WebAssembly][Modules] Implement function import from wasm | 
 |         modules" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184689 | 
 |         https://trac.webkit.org/changeset/230720 | 
 |  | 
 |         "[JSC] Rename runWebAssembly to runWebAssemblySuite" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184703 | 
 |         https://trac.webkit.org/changeset/230724 | 
 |  | 
 | 2018-04-17  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         A put is not an ExistingProperty put when we transition a structure because of an attributes change | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184706 | 
 |         <rdar://problem/38871451> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         When putting a property on a structure and the slot is a different | 
 |         type, the slot can't be said to have already been existing. | 
 |  | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::putDirectInternal): | 
 |  | 
 | 2018-04-17  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSGenericTypedArrayView<>::visitChildren has a race condition reading m_mode and m_vector | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184705 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         My old multisocket Mac Pro is amazing at catching race conditions in the GC. Earlier today | 
 |         while testing an unrelated patch, a concurrent GC thread crashed inside | 
 |         JSGenericTypedArrayView<>::visitChildren() calling markAuxiliary(). I'm pretty sure it's | 
 |         because a typed array became wasteful concurrently to the GC. So, visitChildren() read one | 
 |         mode and another vector. | 
 |          | 
 |         The fix is to lock inside visitChildren and anyone who changes those fields. | 
 |          | 
 |         I'm not even going to try to write a test. I think it's super lucky that my Mac Pro caught | 
 |         this. | 
 |  | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::neuter): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): | 
 |  | 
 | 2018-04-16  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         PutStackSinkingPhase should know that KillStack means ConflictingFlush | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184672 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         We've had a long history of KillStack and PutStackSinkingPhase having problems. We kept changing the meaning of | 
 |         KillStack, and at some point we removed reasoning about KillStack from PutStackSinkingPhase. I tried doing some | 
 |         archeology - but I'm still not sure why that phase ignores KillStack entirely. Maybe it's an oversight or maybe it's | 
 |         intentional - I don't know. | 
 |  | 
 |         Whatever the history, it's clear from the attached test case that ignoring KillStack is not correct. The outcome of | 
 |         doing so is that we will sometimes sink a PutStack below a KillStack. That's wrong because then, OSR exit will use | 
 |         the value from the PutStack instead of using the value from the MovHint that is associated with the KillStack. So, | 
 |         KillStack must be seen as a special kind of clobber of the stack slot. OSRAvailabiity uses ConflictingFlush. I think | 
 |         that's correct here, too. If we used DeadFlush and that was merged with another control flow path that had a | 
 |         specific flush format, then we would think that we could sink the flush from that path. That's not right, since that | 
 |         could still lead to sinking a PutStack past the KillStack in the sense that a PutStack will appear after the | 
 |         KillStack along one path through the CFG. Also, the definition of DeadFlush and ConflictingFlush in the comment | 
 |         inside PutStackSinkingPhase seems to suggest that KillStack is a ConflictingFlush, since DeadFlush means that we | 
 |         have done some PutStack and their values are still valid. KillStack is not a PutStack and it means that previous | 
 |         values are not valid. The definition of ConflictingFlush is that "we know, via forward flow, that there isn't any | 
 |         value in the given local that anyone should have been relying on" - which exactly matches KillStack's definition. | 
 |  | 
 |         This also means that we cannot eliminate arguments allocations that are live over KillStacks, since if we eliminated | 
 |         them then we would have a GetStack after a KillStack. One easy way to fix this is to say that KillStack writes to | 
 |         its stack slot for the purpose of clobberize. | 
 |  | 
 |         * dfg/DFGClobberize.h: KillStack "writes" to its stack slot. | 
 |         * dfg/DFGPutStackSinkingPhase.cpp: Fix the bug. | 
 |         * ftl/FTLLowerDFGToB3.cpp: Add better assertion failure. | 
 |         (JSC::FTL::DFG::LowerDFGToB3::buildExitArguments): | 
 |  | 
 | 2018-04-17  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSWebAssemblyCodeBlock should be in an IsoSubspace | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184704 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |          | 
 |         Previously it was in a CompleteSubspace, which is pretty good, but also quite wasteful. | 
 |         CompleteSubspace means about 4KB of data to track the size-allocator mapping. IsoSubspace | 
 |         shortcircuits this. Also, IsoSubspace uses the iso allocator, so it provides stronger UAF | 
 |         protection. | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |  | 
 | 2018-04-17  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         Only enable useSeparatedWXHeap on ARM64. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184697 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/Options.cpp: | 
 |         (JSC::recomputeDependentOptions): | 
 |  | 
 | 2018-04-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WebAssembly][Modules] Implement function import from wasm modules | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184689 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch implements function import from wasm modules. We move function importing part | 
 |         from JSWebAssemblyInstance's creation function to WebAssemblyModuleRecord::link. This | 
 |         is because linking these functions requires that all the dependent modules are created. | 
 |         While we want to move all the linking functionality from JSWebAssemblyInstance to | 
 |         WebAssemblyModuleRecord::link, we do not that in this patch.  In this patch, we move only | 
 |         function importing part because efficient compilation of WebAssembly needs to know | 
 |         the type of WebAssemblyMemory (signaling or bound checking). This needs to know imported | 
 |         or attached WebAssembly memory object. So we cannot defer this linking to | 
 |         WebAssemblyModuleRecord::link now. | 
 |  | 
 |         The largest difference from JS module linking is that WebAssembly module linking links | 
 |         function from the module by snapshotting. When you have a cyclic module graph like this, | 
 |  | 
 |         -> JS1 (export "fun") -> Wasm1 (import "fun from JS1) -+ | 
 |             ^                                                  | | 
 |             +--------------------------------------------------+ | 
 |  | 
 |         we fail to link this since "fun" is not instantiated when Wasm1 is first linked. This behavior | 
 |         is described in [1], and tested in this patch. | 
 |  | 
 |         [1]: https://github.com/WebAssembly/esm-integration/tree/master/proposals/esm-integration#js---wasm-cycle-where-js-is-higher-in-the-module-graph | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * jsc.cpp: | 
 |         (functionDollarAgentStart): | 
 |         (checkException): | 
 |         (runWithOptions): | 
 |         Small fixes for wasm module loading. | 
 |  | 
 |         * parser/NodesAnalyzeModule.cpp: | 
 |         (JSC::ImportDeclarationNode::analyzeModule): | 
 |         * runtime/AbstractModuleRecord.cpp: | 
 |         (JSC::AbstractModuleRecord::resolveImport): | 
 |         (JSC::AbstractModuleRecord::link): | 
 |         * runtime/AbstractModuleRecord.h: | 
 |         (JSC::AbstractModuleRecord::moduleEnvironmentMayBeNull): | 
 |         (JSC::AbstractModuleRecord::ImportEntry::isNamespace const): Deleted. | 
 |         Now, wasm modules can have import which is named "*". So this function does not work. | 
 |         Since wasm modules never have namespace importing, we check this in JS's module analyzer. | 
 |  | 
 |         * runtime/JSModuleEnvironment.cpp: | 
 |         (JSC::JSModuleEnvironment::getOwnNonIndexPropertyNames): | 
 |         * runtime/JSModuleRecord.cpp: | 
 |         (JSC::JSModuleRecord::instantiateDeclarations): | 
 |         * wasm/WasmCreationMode.h: Added. | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::finalizeCreation): | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         * wasm/js/WebAssemblyInstanceConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyInstance): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::resolve): | 
 |         (JSC::instantiate): | 
 |         (JSC::compileAndInstantiate): | 
 |         (JSC::WebAssemblyPrototype::instantiate): | 
 |         (JSC::webAssemblyInstantiateFunc): | 
 |  | 
 | 2018-04-17  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         Implement setupArgumentsImpl for ARM and MIPS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183786 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Implement setupArgumentsImpl for ARM (hardfp and softfp) and MIPS calling convention. Added | 
 |         numCrossSources and extraGPRArgs to ArgCollection to keep track of extra | 
 |         registers used for 64-bit values on 32-bit architectures. numCrossSources | 
 |         keeps track of assignments from FPR to GPR registers as happens e.g. on MIPS. | 
 |  | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::moveDouble): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::moveDouble): | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::setupStubCrossArgs): | 
 |         (JSC::CCallHelpers::ArgCollection::ArgCollection): | 
 |         (JSC::CCallHelpers::ArgCollection::pushRegArg): | 
 |         (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addGPRArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addStackArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addPoke): | 
 |         (JSC::CCallHelpers::ArgCollection::argCount): | 
 |         (JSC::CCallHelpers::calculatePokeOffset): | 
 |         (JSC::CCallHelpers::pokeForArgument): | 
 |         (JSC::CCallHelpers::stackAligned): | 
 |         (JSC::CCallHelpers::marshallArgumentRegister): | 
 |         (JSC::CCallHelpers::setupArgumentsImpl): | 
 |         (JSC::CCallHelpers::pokeArgumentsAligned): | 
 |         (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): | 
 |         (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): | 
 |         (JSC::CCallHelpers::setupArguments): | 
 |         * jit/FPRInfo.h: | 
 |         (JSC::FPRInfo::toArgumentRegister): | 
 |  | 
 | 2018-04-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add system trace points for process launch and for initializeWebProcess | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184669 | 
 |  | 
 |         Reviewed by Simon Fraser. | 
 |  | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |         (JSC::VMEntryScope::~VMEntryScope): | 
 |  | 
 | 2018-04-17  Jer Noble  <jer.noble@apple.com> | 
 |  | 
 |         Fix duplicate symbol errors when building JavaScriptCore with non-empty WK_ALTERNATE_WEBKIT_SDK_PATH | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184602 | 
 |  | 
 |         Reviewed by Beth Dakin. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add API to clear JSCContext uncaught exception | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184685 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         Add jsc_context_clear_exception() to clear any possible uncaught exception in a JSCContext. | 
 |  | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jsc_context_clear_exception): | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-04-17  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add API to query, delete and enumerate properties | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184647 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add jsc_value_object_has_property(), jsc_value_object_delete_property() and jsc_value_object_enumerate_properties(). | 
 |  | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsc_value_object_has_property): | 
 |         (jsc_value_object_delete_property): | 
 |         (jsc_value_object_enumerate_properties): | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-04-16  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WebAssembly][Modules] Prototype wasm import | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184600 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch is an initial attempt to implement Wasm loading in module pipeline. | 
 |         Currently, | 
 |  | 
 |         1. We only support Wasm loading in the JSC shell. Once loading mechanism is specified | 
 |            in whatwg HTML, we should integrate this into WebCore. | 
 |  | 
 |         2. We only support exporting values from Wasm. Wasm module cannot import anything from | 
 |            the other modules now. | 
 |  | 
 |         When loading a file, JSC shell checks wasm magic. If the wasm magic is found, JSC shell | 
 |         loads the file with WebAssemblySourceProvider. It is wrapped into JSSourceCode and | 
 |         module loader pipeline just handles it as the same to JS. When parsing a module, we | 
 |         checks the type of JSSourceCode. If the source code is Wasm source code, we create a | 
 |         WebAssemblyModuleRecord instead of JSModuleRecord. Our module pipeline handles | 
 |         AbstractModuleRecord and Wasm module is instantiated, linked, and evaluated. | 
 |  | 
 |         * builtins/ModuleLoaderPrototype.js: | 
 |         (globalPrivate.newRegistryEntry): | 
 |         (requestInstantiate): | 
 |         (link): | 
 |         * jsc.cpp: | 
 |         (convertShebangToJSComment): | 
 |         (fillBufferWithContentsOfFile): | 
 |         (fetchModuleFromLocalFileSystem): | 
 |         (GlobalObject::moduleLoaderFetch): | 
 |         * parser/SourceProvider.h: | 
 |         (JSC::WebAssemblySourceProvider::create): | 
 |         (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider): | 
 |         * runtime/AbstractModuleRecord.cpp: | 
 |         (JSC::AbstractModuleRecord::hostResolveImportedModule): | 
 |         (JSC::AbstractModuleRecord::link): | 
 |         (JSC::AbstractModuleRecord::evaluate): | 
 |         (JSC::identifierToJSValue): Deleted. | 
 |         * runtime/AbstractModuleRecord.h: | 
 |         * runtime/JSModuleLoader.cpp: | 
 |         (JSC::JSModuleLoader::evaluate): | 
 |         * runtime/JSModuleRecord.cpp: | 
 |         (JSC::JSModuleRecord::link): | 
 |         (JSC::JSModuleRecord::instantiateDeclarations): | 
 |         * runtime/JSModuleRecord.h: | 
 |         * runtime/ModuleLoaderPrototype.cpp: | 
 |         (JSC::moduleLoaderPrototypeParseModule): | 
 |         (JSC::moduleLoaderPrototypeRequestedModules): | 
 |         (JSC::moduleLoaderPrototypeModuleDeclarationInstantiation): | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::getWasmBufferFromValue): | 
 |         (JSC::createSourceBufferFromValue): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::finalizeCreation): | 
 |         (JSC::JSWebAssemblyInstance::createPrivateModuleKey): | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         * wasm/js/WebAssemblyInstanceConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyInstance): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::prepareLink): | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::resolve): | 
 |         (JSC::instantiate): | 
 |         (JSC::compileAndInstantiate): | 
 |         (JSC::WebAssemblyPrototype::instantiate): | 
 |         (JSC::webAssemblyInstantiateFunc): | 
 |         (JSC::webAssemblyValidateFunc): | 
 |         * wasm/js/WebAssemblyPrototype.h: | 
 |  | 
 | 2018-04-14  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Function.prototype.caller shouldn't return generator bodies | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184630 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         Function.prototype.caller no longer returns generator bodies. Those are meant to be | 
 |         private. | 
 |          | 
 |         Also added some builtin debugging tools so that it's easier to do the investigation that I | 
 |         did. | 
 |  | 
 |         * builtins/BuiltinNames.h: | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::callerGetter): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSGlobalObjectFunctions.cpp: | 
 |         (JSC::globalFuncBuiltinDescribe): | 
 |         * runtime/JSGlobalObjectFunctions.h: | 
 |  | 
 | 2018-04-13  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Remove duplicate 32bit ProfileType implementation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184536 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch removes duplicate 32bit ProfileType implementation by unifying 32/64 implementations. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileProfileType): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::branchIfUndefined): | 
 |         (JSC::AssemblyHelpers::branchIfNull): | 
 |  | 
 | 2018-04-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Consolidate some PtrTags. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184552 | 
 |         <rdar://problem/39389404> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Consolidate CodeEntryPtrTag and CodeEntryWithArityCheckPtrTag into CodePtrTag. | 
 |         Consolidate NearCallPtrTag and NearJumpPtrTag into NearCodePtrTag. | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::repatchNearCall): | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::readCallTarget): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::readCallTarget): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::readCallTarget): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::readCallTarget): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::readCallTarget): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::linkOSRExits): | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         * dfg/DFGJITFinalizer.cpp: | 
 |         (JSC::DFG::JITFinalizer::finalize): | 
 |         (JSC::DFG::JITFinalizer::finalizeFunction): | 
 |         * dfg/DFGOSREntry.cpp: | 
 |         (JSC::DFG::prepareOSREntry): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::executeOSRExit): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         (JSC::DFG::OSRExit::compileOSRExit): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * ftl/FTLJITCode.cpp: | 
 |         (JSC::FTL::JITCode::executableAddressAtOffset): | 
 |         * ftl/FTLJITFinalizer.cpp: | 
 |         (JSC::FTL::JITFinalizer::finalizeCommon): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::generate): | 
 |         * ftl/FTLLink.cpp: | 
 |         (JSC::FTL::link): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileFTLOSRExit): | 
 |         * ftl/FTLOSRExitHandle.cpp: | 
 |         (JSC::FTL::OSRExitHandle::emitExitThunk): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitDumbVirtualCall): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         (JSC::JIT::link): | 
 |         * jit/JITCall.cpp: | 
 |         (JSC::JIT::compileOpCallSlowCase): | 
 |         * jit/JITCode.cpp: | 
 |         (JSC::JITCodeWithCodeRef::executableAddressAtOffset): | 
 |         (JSC::NativeJITCode::addressForCall): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitNakedCall): | 
 |         (JSC::JIT::emitNakedTailCall): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::privateCompileGetByVal): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITThunks.cpp: | 
 |         (JSC::JITThunks::hostFunctionStub): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkSlowFor): | 
 |         (JSC::linkFor): | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::finalize): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntEntrypoint.cpp: | 
 |         (JSC::LLInt::setEvalEntrypoint): | 
 |         (JSC::LLInt::setProgramEntrypoint): | 
 |         (JSC::LLInt::setModuleProgramEntrypoint): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LLIntThunks.cpp: | 
 |         (JSC::LLInt::generateThunkWithJumpTo): | 
 |         (JSC::LLInt::functionForCallEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForCallArityCheckThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructArityCheckThunkGenerator): | 
 |         (JSC::LLInt::evalEntryThunkGenerator): | 
 |         (JSC::LLInt::programEntryThunkGenerator): | 
 |         (JSC::LLInt::moduleProgramEntryThunkGenerator): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/NativeExecutable.cpp: | 
 |         (JSC::NativeExecutable::finishCreation): | 
 |         * runtime/NativeFunction.h: | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |         (JSC::TaggedNativeFunction::operator NativeFunction): | 
 |         * runtime/PtrTag.h: | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::complete): | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::throwExceptionFromWasmThunkGenerator): | 
 |         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |  | 
 | 2018-04-12  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         [WPE] Move libWPEWebInspectorResources.so to pkglibdir | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184379 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         Load the module from the new location. | 
 |  | 
 |         * PlatformWPE.cmake: | 
 |         * inspector/remote/glib/RemoteInspectorUtils.cpp: | 
 |         (Inspector::backendCommands): | 
 |  | 
 | 2018-04-12  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Remove compileBigIntEquality in DFG 32bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184535 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We can have the unified implementation for compileBigIntEquality. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileBigIntEquality): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileBigIntEquality): Deleted. | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileBigIntEquality): Deleted. | 
 |  | 
 | 2018-04-12  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         [WPE] Improve include hierarchy | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184376 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         Install JSC headers under /usr/include/wpe-webkit-0.1/jsc instead of | 
 |         /usr/include/wpe-0.1/WPE/jsc. | 
 |  | 
 |         * PlatformWPE.cmake: | 
 |  | 
 | 2018-04-11  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Handle strings containing null characters | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184450 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         We should be able to evaluate scripts containing null characters and to handle strings that contains them | 
 |         too. In JavaScript strings are not null-terminated, they can contain null characters. This patch adds a length | 
 |         parameter to jsc_context_valuate() to pass the script length (or -1 if it's null terminated), and new functions | 
 |         jsc_value_new_string_from_bytes() and jsc_value_to_string_as_bytes() using GBytes to store strings that might | 
 |         contain null characters. | 
 |  | 
 |         * API/OpaqueJSString.cpp: | 
 |         (OpaqueJSString::create): Add a create constructor that takes the String. | 
 |         * API/OpaqueJSString.h: | 
 |         (OpaqueJSString::OpaqueJSString): Add a constructor that takes the String. | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jsc_context_evaluate): Add length parameter. | 
 |         (jsc_context_evaluate_with_source_uri): Ditto. | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jsc_value_new_string_from_bytes): | 
 |         (jsc_value_to_string): | 
 |         (jsc_value_to_string_as_bytes): | 
 |         (jsc_value_object_is_instance_of): Pass length to evaluate. | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |  | 
 | 2018-04-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add CCallHelpers::CellValue to wrap JSCell GPR to convert it to EncodedJSValue | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184500 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Instead of passing JSValue::JSCellTag to callOperation meta-program to convert | 
 |         JSCell GPR to EncodedJSValue in 32bit code, we add CallHelpers::CellValue. | 
 |         It is a wrapper for GPRReg, like TrustedImmPtr for pointer value. When poking | 
 |         CellValue, 32bit code emits JSValue::CellTag automatically. In 64bit, we just | 
 |         poke held GPR. The benefit from this CellValue is that we can use the same code | 
 |         for 32bit and 64bit. This patch removes several ifdefs. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetDirectPname): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::CellValue::CellValue): | 
 |         (JSC::CCallHelpers::CellValue::gpr const): | 
 |         (JSC::CCallHelpers::setupArgumentsImpl): | 
 |  | 
 | 2018-04-11  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         [Build fix] Replace CompactJITCodeMap with JITCodeMap. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184512 | 
 |         <rdar://problem/35391728> | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * bytecode/CodeBlock.h: | 
 |         * jit/JITCodeMap.h: | 
 |  | 
 | 2018-04-11  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Replace CompactJITCodeMap with JITCodeMap. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184512 | 
 |         <rdar://problem/35391728> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::setJITCodeMap): | 
 |         (JSC::CodeBlock::jitCodeMap const): | 
 |         (JSC::CodeBlock::jitCodeMap): Deleted. | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::executeOSRExit): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::decodedCodeMapFor): Deleted. | 
 |         * jit/AssemblyHelpers.h: | 
 |         * jit/CompactJITCodeMap.h: Removed. | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::link): | 
 |         * jit/JITCodeMap.h: Added. | 
 |         (JSC::JITCodeMap::Entry::Entry): | 
 |         (JSC::JITCodeMap::Entry::bytecodeIndex const): | 
 |         (JSC::JITCodeMap::Entry::codeLocation): | 
 |         (JSC::JITCodeMap::append): | 
 |         (JSC::JITCodeMap::finish): | 
 |         (JSC::JITCodeMap::find const): | 
 |         (JSC::JITCodeMap::operator bool const): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |  | 
 | 2018-04-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Remove CompareSlowPathGenerator | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184492 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Now CompareSlowPathGenerator is just calling a specified function. | 
 |         This can be altered with slowPathCall. This patch removes CompareSlowPathGenerator. | 
 |  | 
 |         We also remove some of unnecessary USE(JSVALUE32_64) / USE(JSVALUE64) ifdefs by | 
 |         introducing a new constructor for GPRTemporary. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * dfg/DFGCompareSlowPathGenerator.h: Removed. | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::GPRTemporary::GPRTemporary): | 
 |         (JSC::DFG::SpeculativeJIT::compileIsCellWithType): | 
 |         (JSC::DFG::SpeculativeJIT::compileIsTypedArrayView): | 
 |         (JSC::DFG::SpeculativeJIT::compileToObjectOrCallObjectConstructor): | 
 |         (JSC::DFG::SpeculativeJIT::compileIsObject): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::GPRTemporary::GPRTemporary): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): | 
 |  | 
 | 2018-04-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, build fix for 32bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184236 | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetDirectPname): | 
 |  | 
 | 2018-04-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Remove duplicate 32bit code more | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184236 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Remove duplicate 32bit code more aggressively part 2. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * dfg/DFGCompareSlowPathGenerator.h: Added. | 
 |         (JSC::DFG::CompareSlowPathGenerator::CompareSlowPathGenerator): | 
 |         Drop boxing part. Use unblessedBooleanResult in DFGSpeculativeJIT side instead. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileOverridesHasInstance): | 
 |         (JSC::DFG::SpeculativeJIT::compileLoadVarargs): | 
 |         (JSC::DFG::SpeculativeJIT::compileIsObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileCheckNotEmpty): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutById): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewArrayWithSize): | 
 |         (JSC::DFG::SpeculativeJIT::compileMiscStrictEq): | 
 |         (JSC::DFG::SpeculativeJIT::emitInitializeButterfly): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): | 
 |         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetDirectPname): | 
 |         (JSC::DFG::SpeculativeJIT::compileExtractCatchLocal): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare): Deleted. | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::selectScratchGPR): Deleted. | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): Deleted. | 
 |         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator): Deleted. | 
 |         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileMiscStrictEq): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::emitInitializeButterfly): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): Deleted. | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): Deleted. | 
 |         (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator): Deleted. | 
 |         (): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileMiscStrictEq): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::emitInitializeButterfly): Deleted. | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): Deleted. | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty): | 
 |         operationHasIndexedPropertyByInt starts returning unblessed boolean with size_t. | 
 |  | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::loadValue): | 
 |         (JSC::AssemblyHelpers::selectScratchGPR): | 
 |         (JSC::AssemblyHelpers::constructRegisterSet): | 
 |         * jit/RegisterSet.h: | 
 |         (JSC::RegisterSet::setAny): | 
 |         Clean up selectScratchGPR code to pass JSValueRegs. | 
 |  | 
 | 2018-04-10  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Add support for BigInt in SpeculatedType | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182470 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch introduces the SpecBigInt type to DFG to enable BigInt | 
 |         speculation into DFG and FTL. | 
 |  | 
 |         With SpecBigInt introduction, we can then specialize "===" operations | 
 |         to BigInts. As we are doing for some cells, we first check if operands | 
 |         are pointing to the same JSCell, and if it is false, we | 
 |         fallback to "operationCompareStrictEqCell". The idea in further | 
 |         patches is to implement BigInt equality check directly in | 
 |         assembly. | 
 |  | 
 |         We are also adding support for BigInt constant folding into | 
 |         TypeOf operation. | 
 |  | 
 |         * bytecode/SpeculatedType.cpp: | 
 |         (JSC::dumpSpeculation): | 
 |         (JSC::speculationFromClassInfo): | 
 |         (JSC::speculationFromStructure): | 
 |         (JSC::speculationFromJSType): | 
 |         (JSC::speculationFromString): | 
 |         * bytecode/SpeculatedType.h: | 
 |         (JSC::isBigIntSpeculation): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGAbstractValue.cpp: | 
 |         (JSC::DFG::AbstractValue::set): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         (JSC::DFG::FixupPhase::fixupToThis): | 
 |         (JSC::DFG::FixupPhase::observeUseKindOnNode): | 
 |         * dfg/DFGInferredTypeCheck.cpp: | 
 |         (JSC::DFG::insertInferredTypeCheck): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::shouldSpeculateBigInt): | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::SafeToExecuteEdge::operator()): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileStrictEq): | 
 |         (JSC::DFG::SpeculativeJIT::speculateBigInt): | 
 |         (JSC::DFG::SpeculativeJIT::speculate): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileBigIntEquality): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileBigIntEquality): | 
 |         * dfg/DFGUseKind.cpp: | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGUseKind.h: | 
 |         (JSC::DFG::typeFilterFor): | 
 |         (JSC::DFG::isCell): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::checkInferredType): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculate): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculateBigInt): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::branchIfNotType): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::branchIfBigInt): | 
 |         (JSC::AssemblyHelpers::branchIfNotBigInt): | 
 |         * runtime/InferredType.cpp: | 
 |         (JSC::InferredType::Descriptor::forValue): | 
 |         (JSC::InferredType::Descriptor::putByIdFlags const): | 
 |         (JSC::InferredType::Descriptor::merge): | 
 |         (WTF::printInternal): | 
 |         * runtime/InferredType.h: | 
 |         * runtime/JSBigInt.h: | 
 |  | 
 | 2018-04-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Unreviewed, fix cloop build. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterClobberState.cpp: | 
 |  | 
 | 2018-04-10  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Make the ASSERT in MarkedSpace::sizeClassToIndex() a RELEASE_ASSERT. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184464 | 
 |         <rdar://problem/39323947> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * heap/MarkedSpace.h: | 
 |         (JSC::MarkedSpace::sizeClassToIndex): | 
 |  | 
 | 2018-04-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG AI and clobberize should agree with each other | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184440 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         One way to fix bugs involving underapproximation in AI or clobberize is to assert that they | 
 |         agree with each other. That's what this patch does: it adds an assertion that AI's structure | 
 |         state tracking must be equivalent to JSCell_structureID being clobbered. | 
 |          | 
 |         One subtlety is that AI sometimes folds away structure clobbering using information that | 
 |         clobberize doesn't have. So, we track this wuth special kinds of AI states (FoldedClobber and | 
 |         ObservedTransitions). | 
 |          | 
 |         This fixes a bunch of cases of AI missing clobberStructures/clobberWorld and one case of | 
 |         clobberize missing a write(Heap). | 
 |          | 
 |         This also makes some cases more precise in order to appease the assertion. Making things more | 
 |         precise might make things faster, but I didn't measure it because that wasn't the goal. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * dfg/DFGAbstractInterpreter.h: | 
 |         * dfg/DFGAbstractInterpreterClobberState.cpp: Added. | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGAbstractInterpreterClobberState.h: Added. | 
 |         (JSC::DFG::mergeClobberStates): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::startExecuting): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::didFoldClobberWorld): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::clobberStructures): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::didFoldClobberStructures): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransition): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransitions): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::setDidClobber): Deleted. | 
 |         * dfg/DFGAtTailAbstractState.h: | 
 |         (JSC::DFG::AtTailAbstractState::setClobberState): | 
 |         (JSC::DFG::AtTailAbstractState::mergeClobberState): | 
 |         (JSC::DFG::AtTailAbstractState::setDidClobber): Deleted. | 
 |         * dfg/DFGCFAPhase.cpp: | 
 |         (JSC::DFG::CFAPhase::performBlockCFA): | 
 |         * dfg/DFGClobberSet.cpp: | 
 |         (JSC::DFG::writeSet): | 
 |         * dfg/DFGClobberSet.h: | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGInPlaceAbstractState.h: | 
 |         (JSC::DFG::InPlaceAbstractState::clobberState const): | 
 |         (JSC::DFG::InPlaceAbstractState::didClobberOrFolded const): | 
 |         (JSC::DFG::InPlaceAbstractState::didClobber const): | 
 |         (JSC::DFG::InPlaceAbstractState::setClobberState): | 
 |         (JSC::DFG::InPlaceAbstractState::mergeClobberState): | 
 |         (JSC::DFG::InPlaceAbstractState::setDidClobber): Deleted. | 
 |  | 
 | 2018-04-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         ExecutableToCodeBlockEdge::visitChildren() should be cool with m_codeBlock being null since we clear it in finalizeUnconditionally() | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184460 | 
 |         <rdar://problem/37610966> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * bytecode/ExecutableToCodeBlockEdge.cpp: | 
 |         (JSC::ExecutableToCodeBlockEdge::visitChildren): | 
 |  | 
 | 2018-04-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         REGRESSION(r227341 and r227742): AI and clobberize should be precise and consistent about the effectfulness of CompareEq | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184455 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         LICM is sort of an assertion that AI is as precise as clobberize about effects. If clobberize | 
 |         says that something is not effectful, then LICM will try to hoist it. But LICM's AI hack | 
 |         (AtTailAbstractState) cannot handle hoisting of things that have effects. So, if AI thinks that | 
 |         the thing being hoisted does have effects, then we get a crash. | 
 |          | 
 |         In r227341, we incorrectly told AI that CompareEq(Untyped:, _) is effectful. In fact, only | 
 |         ComapreEq(Untyped:, Untyped:) is effectful, and clobberize knew this already. As a result, LICM | 
 |         would blow up if we hoisted CompareEq(Untyped:, Other:), which clobberize knew wasn't | 
 |         effectful. | 
 |          | 
 |         Instead of fixing this by making AI precise, in r227742 we made matters worse by then breaking | 
 |         clobberize to also think that CompareEq(Untyped:, _) is effectful. | 
 |          | 
 |         This fixes the whole situation by teaching both clobberize and AI that the only effectful form | 
 |         of CompareEq is ComapreEq(Untyped:, Untyped:). | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-04-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Executing known edge types may reveal a contradiction causing us to emit an exit at a node that is not allowed to exit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184372 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         We do a pretty good job of not emitting checks for KnownBlah edges, since those mean that we | 
 |         have already proved, using techniques that are more precise than AI, that the edge has type | 
 |         Blah. Unfortunately, we do not handle this case gracefully when AI state becomes bottom, | 
 |         because we have a bad habit of treating terminate/terminateSpeculativeExecution as something | 
 |         other than a check - so we think we can call those just because we should have already | 
 |         bailed. It's better to think of them as the result of folding a check. Therefore, we should | 
 |         only do it if there had been a check to begin with. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateCell): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowInt32): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowInt52): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowBoolean): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowDouble): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculate): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculateCellOrOther): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculateStringOrOther): | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Introduce @putByIdDirectPrivate | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184400 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds @putByIdDirectPrivate() to use it for builtin JS. | 
 |         @getByIdDirectPrivate and @putByIdDirectPrivate are pair of intrinsics | 
 |         accessing to ECMAScript internal fields. | 
 |  | 
 |         This change removes accidental [[Put]] operation to an object whose [[Prototype]] | 
 |         has internal fields (not direct properties). By using @getByIdDirectPrivate() and | 
 |         @putByIdDirectPrivate(), we strongly keep the semantics of the ECMAScript internal | 
 |         fields that accessing to the internal fields does not traverse prototype chains. | 
 |  | 
 |         * builtins/ArrayIteratorPrototype.js: | 
 |         (globalPrivate.arrayIteratorValueNext): | 
 |         (globalPrivate.arrayIteratorKeyNext): | 
 |         (globalPrivate.arrayIteratorKeyValueNext): | 
 |         * builtins/ArrayPrototype.js: | 
 |         (globalPrivate.createArrayIterator): | 
 |         * builtins/AsyncFromSyncIteratorPrototype.js: | 
 |         (globalPrivate.AsyncFromSyncIteratorConstructor): | 
 |         * builtins/AsyncFunctionPrototype.js: | 
 |         (globalPrivate.asyncFunctionResume): | 
 |         * builtins/AsyncGeneratorPrototype.js: | 
 |         (globalPrivate.asyncGeneratorQueueEnqueue): | 
 |         (globalPrivate.asyncGeneratorQueueDequeue): | 
 |         (asyncGeneratorYieldAwaited): | 
 |         (globalPrivate.asyncGeneratorYield): | 
 |         (globalPrivate.doAsyncGeneratorBodyCall): | 
 |         (globalPrivate.asyncGeneratorResumeNext): | 
 |         * builtins/GeneratorPrototype.js: | 
 |         (globalPrivate.generatorResume): | 
 |         * builtins/MapIteratorPrototype.js: | 
 |         (globalPrivate.mapIteratorNext): | 
 |         * builtins/MapPrototype.js: | 
 |         (globalPrivate.createMapIterator): | 
 |         * builtins/ModuleLoaderPrototype.js: | 
 |         (forceFulfillPromise): | 
 |         * builtins/PromiseOperations.js: | 
 |         (globalPrivate.newHandledRejectedPromise): | 
 |         (globalPrivate.rejectPromise): | 
 |         (globalPrivate.fulfillPromise): | 
 |         (globalPrivate.initializePromise): | 
 |         * builtins/PromisePrototype.js: | 
 |         (then): | 
 |         * builtins/SetIteratorPrototype.js: | 
 |         (globalPrivate.setIteratorNext): | 
 |         * builtins/SetPrototype.js: | 
 |         (globalPrivate.createSetIterator): | 
 |         * builtins/StringIteratorPrototype.js: | 
 |         (next): | 
 |         * bytecode/BytecodeIntrinsicRegistry.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate): | 
 |  | 
 | 2018-04-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Decorate method table entries to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184430 | 
 |         <rdar://problem/39296190> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * runtime/ClassInfo.h: | 
 |  | 
 | 2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         [WPE] Don't install JSC C API headers | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184375 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         None of the functions declared in these headers are exported in WPE. Use the new jsc API | 
 |         instead. | 
 |  | 
 |         * PlatformWPE.cmake: | 
 |  | 
 | 2018-04-08  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add pointer profiling to the FTL and supporting code. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184395 | 
 |         <rdar://problem/39264019> | 
 |  | 
 |         Reviewed by Michael Saboff and Filip Pizlo. | 
 |  | 
 |         * assembler/CodeLocation.h: | 
 |         (JSC::CodeLocationLabel::retagged): | 
 |         (JSC::CodeLocationJump::retagged): | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::locationOf): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::linkOSRExits): | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         * ftl/FTLCompile.cpp: | 
 |         (JSC::FTL::compile): | 
 |         * ftl/FTLExceptionTarget.cpp: | 
 |         (JSC::FTL::ExceptionTarget::label): | 
 |         (JSC::FTL::ExceptionTarget::jumps): | 
 |         * ftl/FTLExceptionTarget.h: | 
 |         * ftl/FTLJITCode.cpp: | 
 |         (JSC::FTL::JITCode::executableAddressAtOffset): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::~LazySlowPath): | 
 |         (JSC::FTL::LazySlowPath::initialize): | 
 |         (JSC::FTL::LazySlowPath::generate): | 
 |         (JSC::FTL::LazySlowPath::LazySlowPath): Deleted. | 
 |         * ftl/FTLLazySlowPath.h: | 
 |         * ftl/FTLLink.cpp: | 
 |         (JSC::FTL::link): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lower): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileStub): | 
 |         (JSC::FTL::compileFTLOSRExit): | 
 |         * ftl/FTLOSRExitHandle.cpp: | 
 |         (JSC::FTL::OSRExitHandle::emitExitThunk): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::compileFTLLazySlowPath): | 
 |         * ftl/FTLOutput.h: | 
 |         (JSC::FTL::Output::callWithoutSideEffects): | 
 |         (JSC::FTL::Output::operation): | 
 |         * ftl/FTLPatchpointExceptionHandle.cpp: | 
 |         (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): | 
 |         * ftl/FTLSlowPathCall.cpp: | 
 |         (JSC::FTL::SlowPathCallContext::makeCall): | 
 |         * ftl/FTLSlowPathCallKey.h: | 
 |         (JSC::FTL::SlowPathCallKey::withCallTarget): | 
 |         (JSC::FTL::SlowPathCallKey::callPtrTag const): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::genericGenerationThunkGenerator): | 
 |         (JSC::FTL::osrExitGenerationThunkGenerator): | 
 |         (JSC::FTL::lazySlowPathGenerationThunkGenerator): | 
 |         (JSC::FTL::slowPathCallThunkGenerator): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::readPutICCallTarget): | 
 |         (JSC::ftlThunkAwareRepatchCall): | 
 |         (JSC::tryCacheGetByID): | 
 |         (JSC::repatchGetByID): | 
 |         (JSC::tryCachePutByID): | 
 |         (JSC::repatchPutByID): | 
 |         (JSC::repatchIn): | 
 |         (JSC::resetGetByID): | 
 |         (JSC::resetPutByID): | 
 |         (JSC::readCallTarget): Deleted. | 
 |         * jit/Repatch.h: | 
 |         * runtime/PtrTag.h: | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, attempt to fix Windows build | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183508 | 
 |  | 
 |         * jit/JIT.h: | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, build fix for Windows by suppressing padding warning for JIT | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183508 | 
 |  | 
 |         * jit/JIT.h: | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Use alignas instead of compiler-specific attributes | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183508 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Use C++11 alignas specifier. It is portable compared to compiler-specific aligned attributes. | 
 |  | 
 |         * heap/RegisterState.h: | 
 |         * jit/JIT.h: | 
 |         (JSC::JIT::compile): Deleted. | 
 |         (JSC::JIT::compileGetByVal): Deleted. | 
 |         (JSC::JIT::compileGetByValWithCachedId): Deleted. | 
 |         (JSC::JIT::compilePutByVal): Deleted. | 
 |         (JSC::JIT::compileDirectPutByVal): Deleted. | 
 |         (JSC::JIT::compilePutByValWithCachedId): Deleted. | 
 |         (JSC::JIT::compileHasIndexedProperty): Deleted. | 
 |         (JSC::JIT::appendCall): Deleted. | 
 |         (JSC::JIT::appendCallWithSlowPathReturnType): Deleted. | 
 |         (JSC::JIT::exceptionCheck): Deleted. | 
 |         (JSC::JIT::exceptionCheckWithCallFrameRollback): Deleted. | 
 |         (JSC::JIT::emitInt32Load): Deleted. | 
 |         (JSC::JIT::emitInt32GetByVal): Deleted. | 
 |         (JSC::JIT::emitInt32PutByVal): Deleted. | 
 |         (JSC::JIT::emitDoublePutByVal): Deleted. | 
 |         (JSC::JIT::emitContiguousPutByVal): Deleted. | 
 |         (JSC::JIT::emitStoreCell): Deleted. | 
 |         (JSC::JIT::getSlowCase): Deleted. | 
 |         (JSC::JIT::linkSlowCase): Deleted. | 
 |         (JSC::JIT::linkDummySlowCase): Deleted. | 
 |         (JSC::JIT::linkAllSlowCases): Deleted. | 
 |         (JSC::JIT::callOperation): Deleted. | 
 |         (JSC::JIT::callOperationWithProfile): Deleted. | 
 |         (JSC::JIT::callOperationWithResult): Deleted. | 
 |         (JSC::JIT::callOperationNoExceptionCheck): Deleted. | 
 |         (JSC::JIT::callOperationWithCallFrameRollbackOnException): Deleted. | 
 |         (JSC::JIT::emitEnterOptimizationCheck): Deleted. | 
 |         (JSC::JIT::sampleCodeBlock): Deleted. | 
 |         (JSC::JIT::canBeOptimized): Deleted. | 
 |         (JSC::JIT::canBeOptimizedOrInlined): Deleted. | 
 |         (JSC::JIT::shouldEmitProfiling): Deleted. | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, follow-up patch for DFG 32bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183970 | 
 |  | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Fix incorrect assertion for VM's regexp buffer lock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184398 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         isLocked check before taking a lock is incorrect. | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::acquireRegExpPatternContexBuffer): | 
 |  | 
 | 2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Introduce op_get_by_id_direct | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183970 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch introduces op_get_by_id_direct bytecode. This is super similar to op_get_by_id. | 
 |         But it just performs [[GetOwnProperty]] operation instead of [[Get]]. We support this | 
 |         in all the tiers, so using this opcode does not lead to inefficiency. | 
 |  | 
 |         Main purpose of this op_get_by_id_direct is using it for private properties. We are using | 
 |         properties indexed with private symbols to implement ECMAScript internal fields. Before this | 
 |         patch, we just use get and put operations. However, it is not the correct semantics: accessing | 
 |         to the internal fields should not traverse prototype chain, which is specified in the spec. | 
 |         We use op_get_by_id_direct to access to properties which are used internal fields, so that | 
 |         prototype chains are not traversed. | 
 |  | 
 |         To emit op_get_by_id_direct, we introduce a new bytecode intrinsic @getByIdDirectPrivate(). | 
 |         When you write `@getByIdDirectPrivate(object, "name")`, the bytecode generator emits the | 
 |         bytecode `op_get_by_id_direct, object, @name`. | 
 |  | 
 |         * builtins/ArrayIteratorPrototype.js: | 
 |         (next): | 
 |         (globalPrivate.arrayIteratorValueNext): | 
 |         (globalPrivate.arrayIteratorKeyNext): | 
 |         (globalPrivate.arrayIteratorKeyValueNext): | 
 |         * builtins/AsyncFromSyncIteratorPrototype.js: | 
 |         * builtins/AsyncFunctionPrototype.js: | 
 |         (globalPrivate.asyncFunctionResume): | 
 |         * builtins/AsyncGeneratorPrototype.js: | 
 |         (globalPrivate.asyncGeneratorQueueIsEmpty): | 
 |         (globalPrivate.asyncGeneratorQueueEnqueue): | 
 |         (globalPrivate.asyncGeneratorQueueDequeue): | 
 |         (globalPrivate.asyncGeneratorDequeue): | 
 |         (globalPrivate.isExecutionState): | 
 |         (globalPrivate.isSuspendYieldState): | 
 |         (globalPrivate.asyncGeneratorReject): | 
 |         (globalPrivate.asyncGeneratorResolve): | 
 |         (globalPrivate.doAsyncGeneratorBodyCall): | 
 |         (globalPrivate.asyncGeneratorEnqueue): | 
 |         * builtins/GeneratorPrototype.js: | 
 |         (globalPrivate.generatorResume): | 
 |         (next): | 
 |         (return): | 
 |         (throw): | 
 |         * builtins/MapIteratorPrototype.js: | 
 |         (next): | 
 |         * builtins/PromiseOperations.js: | 
 |         (globalPrivate.isPromise): | 
 |         (globalPrivate.rejectPromise): | 
 |         (globalPrivate.fulfillPromise): | 
 |         * builtins/PromisePrototype.js: | 
 |         (then): | 
 |         * builtins/SetIteratorPrototype.js: | 
 |         (next): | 
 |         * builtins/StringIteratorPrototype.js: | 
 |         (next): | 
 |         * builtins/TypedArrayConstructor.js: | 
 |         (of): | 
 |         (from): | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeIntrinsicRegistry.h: | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         (JSC::CodeBlock::finalizeLLIntInlineCaches): | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::computeFromLLInt): | 
 |         (JSC::GetByIdStatus::computeFor): | 
 |         * bytecode/StructureStubInfo.cpp: | 
 |         (JSC::StructureStubInfo::reset): | 
 |         * bytecode/StructureStubInfo.h: | 
 |         (JSC::appropriateOptimizingGetByIdFunction): | 
 |         (JSC::appropriateGenericGetByIdFunction): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitDirectGetById): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirect): | 
 |         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate): | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleGetById): | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToGetByOffset): | 
 |         (JSC::DFG::Node::convertToMultiGetByOffset): | 
 |         (JSC::DFG::Node::hasIdentifier): | 
 |         (JSC::DFG::Node::hasHeapPrediction): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetById): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): | 
 |         (JSC::DFG::SpeculativeJIT::compileTryGetById): Deleted. | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::getById): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         * jit/JIT.h: | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_get_by_id_direct): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_direct): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_get_by_id_direct): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_direct): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::appropriateOptimizingGetByIdFunction): | 
 |         (JSC::appropriateGetByIdFunction): | 
 |         (JSC::tryCacheGetByID): | 
 |         (JSC::repatchGetByID): | 
 |         (JSC::appropriateGenericGetByIdFunction): Deleted. | 
 |         * jit/Repatch.h: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * llint/LLIntSlowPaths.h: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::getOwnPropertySlot const): | 
 |         * runtime/JSObject.h: | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::getOwnPropertySlotInline): | 
 |  | 
 | 2018-04-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove several asXXX functions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184355 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         Remove asActivation, asInternalFunction, and asGetterSetter. | 
 |         Use jsCast<> / jsDynamicCast<> consistently. | 
 |  | 
 |         * runtime/ArrayConstructor.cpp: | 
 |         (JSC::constructArrayWithSizeQuirk): | 
 |         * runtime/AsyncFunctionConstructor.cpp: | 
 |         (JSC::callAsyncFunctionConstructor): | 
 |         (JSC::constructAsyncFunctionConstructor): | 
 |         * runtime/AsyncGeneratorFunctionConstructor.cpp: | 
 |         (JSC::callAsyncGeneratorFunctionConstructor): | 
 |         (JSC::constructAsyncGeneratorFunctionConstructor): | 
 |         * runtime/BooleanConstructor.cpp: | 
 |         (JSC::constructWithBooleanConstructor): | 
 |         * runtime/DateConstructor.cpp: | 
 |         (JSC::constructWithDateConstructor): | 
 |         * runtime/ErrorConstructor.cpp: | 
 |         (JSC::Interpreter::constructWithErrorConstructor): | 
 |         (JSC::Interpreter::callErrorConstructor): | 
 |         * runtime/FunctionConstructor.cpp: | 
 |         (JSC::constructWithFunctionConstructor): | 
 |         (JSC::callFunctionConstructor): | 
 |         * runtime/FunctionPrototype.cpp: | 
 |         (JSC::functionProtoFuncToString): | 
 |         * runtime/GeneratorFunctionConstructor.cpp: | 
 |         (JSC::callGeneratorFunctionConstructor): | 
 |         (JSC::constructGeneratorFunctionConstructor): | 
 |         * runtime/GetterSetter.h: | 
 |         (JSC::asGetterSetter): Deleted. | 
 |         * runtime/InternalFunction.h: | 
 |         (JSC::asInternalFunction): Deleted. | 
 |         * runtime/JSGenericTypedArrayViewConstructorInlines.h: | 
 |         (JSC::constructGenericTypedArrayView): | 
 |         * runtime/JSLexicalEnvironment.h: | 
 |         (JSC::asActivation): Deleted. | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::validateAndApplyPropertyDescriptor): | 
 |         * runtime/MapConstructor.cpp: | 
 |         (JSC::constructMap): | 
 |         * runtime/PropertyDescriptor.cpp: | 
 |         (JSC::PropertyDescriptor::setDescriptor): | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::constructWithRegExpConstructor): | 
 |         (JSC::callRegExpConstructor): | 
 |         * runtime/SetConstructor.cpp: | 
 |         (JSC::constructSet): | 
 |         * runtime/StringConstructor.cpp: | 
 |         (JSC::constructWithStringConstructor): | 
 |         * runtime/WeakMapConstructor.cpp: | 
 |         (JSC::constructWeakMap): | 
 |         * runtime/WeakSetConstructor.cpp: | 
 |         (JSC::constructWeakSet): | 
 |         * wasm/js/WebAssemblyCompileErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyCompileError): | 
 |         (JSC::callJSWebAssemblyCompileError): | 
 |         * wasm/js/WebAssemblyLinkErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyLinkError): | 
 |         (JSC::callJSWebAssemblyLinkError): | 
 |         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: | 
 |         (JSC::constructJSWebAssemblyRuntimeError): | 
 |         (JSC::callJSWebAssemblyRuntimeError): | 
 |  | 
 | 2018-04-05  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         MacroAssemblerCodePtr::retagged() should not re-decorate the pointer on ARMv7. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184347 | 
 |         <rdar://problem/39183165> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): | 
 |         (JSC::MacroAssemblerCodePtr::retagged const): | 
 |  | 
 | 2018-04-05  Stanislav Ocovaj  <stanislav.ocovaj@rt-rk.com> | 
 |  | 
 |         [MIPS] Optimize generated JIT code for branches | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183130 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         The patch https://bugs.webkit.org/show_bug.cgi?id=101328 added two nop instructions to | 
 |         branchEqual() and branchNotEqual() in order to allow the code generated by branchPtrWithPatch() | 
 |         to be reverted back to branchPtrWithPatch after replacing it with a 4-instruction jump. | 
 |         However, this adds a significant overhead for all other types of branches. Since these nop's | 
 |         protect the code that is generated by branchPtrWithPatch, this function seems like a better | 
 |         place to add them. | 
 |  | 
 |         * assembler/MIPSAssembler.h: | 
 |         (JSC::MIPSAssembler::repatchInt32): | 
 |         (JSC::MIPSAssembler::revertJumpToMove): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::branchAdd32): | 
 |         (JSC::MacroAssemblerMIPS::branchMul32): | 
 |         (JSC::MacroAssemblerMIPS::branchSub32): | 
 |         (JSC::MacroAssemblerMIPS::branchNeg32): | 
 |         (JSC::MacroAssemblerMIPS::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerMIPS::branchEqual): | 
 |         (JSC::MacroAssemblerMIPS::branchNotEqual): | 
 |  | 
 | 2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Remove StaticLock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184332 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * API/JSValue.mm: | 
 |         (handerForStructTag): | 
 |         * API/JSVirtualMachine.mm: | 
 |         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): | 
 |         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): | 
 |         * API/glib/JSCVirtualMachine.cpp: | 
 |         (addWrapper): | 
 |         (removeWrapper): | 
 |         * assembler/testmasm.cpp: | 
 |         * b3/air/testair.cpp: | 
 |         * b3/testb3.cpp: | 
 |         * bytecode/SuperSampler.cpp: | 
 |         * dfg/DFGCommon.cpp: | 
 |         * dfg/DFGCommonData.cpp: | 
 |         * dynbench.cpp: | 
 |         * heap/MachineStackMarker.cpp: | 
 |         (JSC::MachineThreads::tryCopyOtherThreadStacks): | 
 |         * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm: | 
 |         (Inspector::RemoteTargetHandleRunSourceGlobal): | 
 |         (Inspector::RemoteTargetQueueTaskOnGlobalQueue): | 
 |         * interpreter/CLoopStack.cpp: | 
 |         * parser/SourceProvider.cpp: | 
 |         * profiler/ProfilerDatabase.cpp: | 
 |         * profiler/ProfilerUID.cpp: | 
 |         (JSC::Profiler::UID::create): | 
 |         * runtime/IntlObject.cpp: | 
 |         (JSC::numberingSystemsForLocale): | 
 |         * runtime/JSLock.cpp: | 
 |         * runtime/JSLock.h: | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::registerForReportAtExit): | 
 |         * runtime/VM.cpp: | 
 |         * wasm/WasmFaultSignalHandler.cpp: | 
 |  | 
 | 2018-04-04  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add pointer profiling support to the DFG and supporting files. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184316 | 
 |         <rdar://problem/39188524> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         1. Profile lots of pointers with PtrTags. | 
 |  | 
 |         2. Remove PtrTag.cpp and make ptrTagName() into an inline function.  It's only | 
 |            used for debugging anyway, and not normally called in the code.  Making it | 
 |            an inline function prevents it from taking up code space in builds when not in | 
 |            use. | 
 |  | 
 |         3. Change the call to the the arityFixupThunk in DFG code to be a near call. | 
 |            It doesn't need to be a far call. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::testProbeModifiesProgramCounter): | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/air/AirCCallSpecial.cpp: | 
 |         (JSC::B3::Air::CCallSpecial::generate): | 
 |         * b3/air/AirCCallSpecial.h: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testInterpreter): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/HandlerInfo.h: | 
 |         (JSC::HandlerInfo::initialize): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::compileExceptionHandlers): | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         (JSC::DFG::JITCompiler::noticeCatchEntrypoint): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::appendCall): | 
 |         * dfg/DFGOSREntry.cpp: | 
 |         (JSC::DFG::prepareOSREntry): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         (JSC::DFG::OSRExit::emitRestoreArguments): | 
 |         (JSC::DFG::OSRExit::compileOSRExit): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::handleExitCounts): | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         (JSC::DFG::osrWriteBarrier): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGSlowPathGenerator.h: | 
 |         (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): | 
 |         (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): | 
 |         (JSC::DFG::slowPathCall): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileMathIC): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         (JSC::DFG::SpeculativeJIT::appendCall): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallSetResult): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrExitThunkGenerator): | 
 |         (JSC::DFG::osrExitGenerationThunkGenerator): | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitDumbVirtualCall): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::emitEnterOptimizationCheck): | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         * jit/JITCall.cpp: | 
 |         (JSC::JIT::compileOpCallSlowCase): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_catch): | 
 |         (JSC::JIT::emitSlow_op_loop_hint): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkSlowFor): | 
 |         (JSC::linkFor): | 
 |         (JSC::revertCall): | 
 |         (JSC::unlinkFor): | 
 |         (JSC::linkVirtualFor): | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::linkCallThunkGenerator): | 
 |         (JSC::linkPolymorphicCallThunkGenerator): | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::arityFixupGenerator): | 
 |         (JSC::unreachableGenerator): | 
 |         * runtime/PtrTag.cpp: Removed. | 
 |         * runtime/PtrTag.h: | 
 |         (JSC::ptrTagName): | 
 |         * runtime/VMEntryScope.cpp: | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::wasmToJS): | 
 |  | 
 | 2018-04-04  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         REGRESSION(r222563): removed DoubleReal type check causes tons of crashes because CSE has never known how to handle SaneChain | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184319 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         In r222581, we replaced type checks about DoubleReal in ArrayPush in the DFG/FTL backends with | 
 |         assertions. That's correct because FixupPhase was emitting those checks as Check(DoubleRealRep:) before | 
 |         the ArrayPush. | 
 |  | 
 |         But this revealed a longstanding CSE bug: CSE will happily match a SaneChain GetByVal with a InBounds | 
 |         GetByVal. SaneChain can return NaN while InBounds cannot. This means that if we first use AI to | 
 |         eliminate the Check(DoubleRealRep:) based on the input being a GetByVal(InBounds) but then replace that | 
 |         with a GetByVal(SaneChain), then we will hit the assertion. | 
 |  | 
 |         This teaches CSE to not replace GetByVal(InBounds) with GetByVal(SaneChain) and vice versa. That gets | 
 |         tricky because PutByVal can match either. So, we use the fact that it's legal for a store to def() more | 
 |         than once: PutByVal now defs() a HeapLocation for InBounds and a HeapLocation for SaneChain. | 
 |  | 
 |         * dfg/DFGCSEPhase.cpp: | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGHeapLocation.cpp: | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGHeapLocation.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileArrayPush): | 
 |  | 
 | 2018-04-04  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Remove poisoning of typed array vector | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184313 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::checkArray): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotNeutered): | 
 |         * jit/IntrinsicEmitter.cpp: | 
 |         (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitIntTypedArrayGetByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayGetByVal): | 
 |         (JSC::JIT::emitIntTypedArrayPutByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayPutByVal): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/arm64.rb: | 
 |         * offlineasm/x86.rb: | 
 |         * runtime/CagedBarrierPtr.h: | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::JSArrayBufferView): | 
 |         (JSC::JSArrayBufferView::finalize): | 
 |         (JSC::JSArrayBufferView::neuter): | 
 |         * runtime/JSArrayBufferView.h: | 
 |         (JSC::JSArrayBufferView::vector const): | 
 |         (JSC::JSArrayBufferView::offsetOfVector): | 
 |         (JSC::JSArrayBufferView::offsetOfPoisonedVector): Deleted. | 
 |         (JSC::JSArrayBufferView::poisonFor): Deleted. | 
 |         (JSC::JSArrayBufferView::Poison::key): Deleted. | 
 |         * runtime/JSCPoison.cpp: | 
 |         (JSC::initializePoison): | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::estimatedSize): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): | 
 |         * runtime/JSObject.h: | 
 |  | 
 | 2018-04-03  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Don't do index masking or poisoning for DirectArguments | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184280 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h: | 
 |         (JSC::DFG::CallCreateDirectArgumentsSlowPathGenerator::CallCreateDirectArgumentsSlowPathGenerator): | 
 |         * dfg/DFGCallCreateDirectArgumentsWithKnownLengthSlowPathGenerator.h: Removed. | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetArrayLength): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetFromArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutToArguments): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetFromArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutToArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoison): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnLoadedType): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnType): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedHeapCell): Deleted. | 
 |         * heap/SecurityKind.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_get_from_arguments): | 
 |         (JSC::JIT::emit_op_put_to_arguments): | 
 |         (JSC::JIT::emitDirectArgumentsGetByVal): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_get_from_arguments): | 
 |         (JSC::JIT::emit_op_put_to_arguments): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::DirectArguments): | 
 |         (JSC::DirectArguments::createUninitialized): | 
 |         (JSC::DirectArguments::create): | 
 |         (JSC::DirectArguments::createByCopying): | 
 |         (JSC::DirectArguments::estimatedSize): | 
 |         (JSC::DirectArguments::visitChildren): | 
 |         (JSC::DirectArguments::overrideThings): | 
 |         (JSC::DirectArguments::copyToArguments): | 
 |         (JSC::DirectArguments::mappedArgumentsSize): | 
 |         * runtime/DirectArguments.h: | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSLexicalEnvironment.h: | 
 |         * runtime/JSSymbolTableObject.h: | 
 |  | 
 | 2018-04-03  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSArray::appendMemcpy seems to be missing a barrier | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184290 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |          | 
 |         If you write to an array that may contain pointers and you didn't just allocate it, then you need to | 
 |         barrier right after. | 
 |          | 
 |         I don't know if this is really a bug - it's possible that all callers of appendMemcpy do things that | 
 |         obviate the need for this barrier. But these barriers are cheap, so we should do them if in doubt. | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::appendMemcpy): | 
 |  | 
 | 2018-04-03  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         GC shouldn't do object distancing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184195 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This rolls out SecurityKind/SecurityOriginToken, but keeps the TLC infrastructure. It seems | 
 |         to be a small speed-up. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::findBlockForAllocation): | 
 |         (JSC::BlockDirectory::addBlock): | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/CellAttributes.cpp: | 
 |         (JSC::CellAttributes::dump const): | 
 |         * heap/CellAttributes.h: | 
 |         (JSC::CellAttributes::CellAttributes): | 
 |         * heap/LocalAllocator.cpp: | 
 |         (JSC::LocalAllocator::allocateSlowCase): | 
 |         (JSC::LocalAllocator::tryAllocateWithoutCollecting): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::Handle::securityOriginToken const): Deleted. | 
 |         * heap/SecurityKind.cpp: Removed. | 
 |         * heap/SecurityKind.h: Removed. | 
 |         * heap/SecurityOriginToken.cpp: Removed. | 
 |         * heap/SecurityOriginToken.h: Removed. | 
 |         * heap/ThreadLocalCache.cpp: | 
 |         (JSC::ThreadLocalCache::create): | 
 |         (JSC::ThreadLocalCache::ThreadLocalCache): | 
 |         * heap/ThreadLocalCache.h: | 
 |         (JSC::ThreadLocalCache::securityOriginToken const): Deleted. | 
 |         * runtime/JSDestructibleObjectHeapCellType.cpp: | 
 |         (JSC::JSDestructibleObjectHeapCellType::JSDestructibleObjectHeapCellType): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::threadLocalCache const): Deleted. | 
 |         * runtime/JSSegmentedVariableObjectHeapCellType.cpp: | 
 |         (JSC::JSSegmentedVariableObjectHeapCellType::JSSegmentedVariableObjectHeapCellType): | 
 |         * runtime/JSStringHeapCellType.cpp: | 
 |         (JSC::JSStringHeapCellType::JSStringHeapCellType): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |         * wasm/js/JSWebAssemblyCodeBlockHeapCellType.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlockHeapCellType::JSWebAssemblyCodeBlockHeapCellType): | 
 |  | 
 | 2018-04-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         bmalloc should compute its own estimate of its footprint | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184121 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * heap/IsoAlignedMemoryAllocator.cpp: | 
 |         (JSC::IsoAlignedMemoryAllocator::~IsoAlignedMemoryAllocator): | 
 |         (JSC::IsoAlignedMemoryAllocator::tryAllocateAlignedMemory): | 
 |         (JSC::IsoAlignedMemoryAllocator::freeAlignedMemory): | 
 |  | 
 | 2018-04-02  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         We should not trash the stack pointer on OSR entry. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184243 | 
 |         <rdar://problem/39114319> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         In the DFG OSR entry path, we momentarily over-write the stack pointer with | 
 |         returnValueGPR2.  returnValueGPR2 contains a pointer to a side buffer we malloc'ed. | 
 |         Hence, this assignment is wrong, and it turns out to be unnecessary as well. | 
 |         The stack pointer does get corrected later in the thunk (generated by | 
 |         osrEntryThunkGenerator()) that we jump to.  This is why we don't see ill-effects | 
 |         so far. | 
 |  | 
 |         This bug only poses an issue if interrupts use the user stack for their stack | 
 |         frame (e.g. linux), and when we do stack alignment tests during debugging. | 
 |  | 
 |         The fix is simply to remove the assignment. | 
 |  | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::emitEnterOptimizationCheck): | 
 |  | 
 | 2018-04-02  Stanislav Ocovaj  <stanislav.ocovaj@rt-rk.com> | 
 |  | 
 |         [MIPS] Optimize JIT code generated by methods with TrustedImm32 operand | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183740 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         In many macro assembler methods with TrustedImm32 operand a move imm, immTemp (pseudo)instruction is | 
 |         first generated and a register operand variant of the same method is called to generate the rest | 
 |         of the code. If the immediate value can fit in 16 bits then we can skip the move instruction and | 
 |         generate more efficient code using MIPS instructions with immediate operand. | 
 |  | 
 |         * assembler/MIPSAssembler.h: | 
 |         (JSC::MIPSAssembler::slti): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::lshift32): | 
 |         (JSC::MacroAssemblerMIPS::xor32): | 
 |         (JSC::MacroAssemblerMIPS::branch8): | 
 |         (JSC::MacroAssemblerMIPS::compare8): | 
 |         (JSC::MacroAssemblerMIPS::branch32): | 
 |         (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords): | 
 |         (JSC::MacroAssemblerMIPS::branchTest32): | 
 |         (JSC::MacroAssemblerMIPS::mask8OnTest): | 
 |         (JSC::MacroAssemblerMIPS::branchTest8): | 
 |         (JSC::MacroAssemblerMIPS::branchAdd32): | 
 |         (JSC::MacroAssemblerMIPS::branchNeg32): | 
 |         (JSC::MacroAssemblerMIPS::compare32): | 
 |         (JSC::MacroAssemblerMIPS::test8): | 
 |  | 
 | 2018-04-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] More aggressive removal of duplicate 32bit DFG code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184089 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch more aggressively removes duplicate 32bit DFG code | 
 |         by leveraging JSValueRegs and meta-programmed callOperation. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValWithThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithMinMax): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileCheckCell): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetGlobalVariable): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutGlobalVariable): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetClosureVar): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutClosureVar): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByOffset): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutByOffset): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetExecutable): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewArrayBuffer): | 
 |         (JSC::DFG::SpeculativeJIT::compileToThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileIdentity): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |  | 
 | 2018-04-01  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Raise the for-call inlining threshold to 190 to fix JetStream/richards regression | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184228 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-03-31  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSObject shouldn't do index masking | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184194 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         Remove index masking, because it's not the way we'll mitigate Spectre. | 
 |  | 
 |         * API/tests/JSObjectGetProxyTargetTest.cpp: | 
 |         (testJSObjectGetProxyTarget): | 
 |         * b3/B3LowerToAir.cpp: | 
 |         * b3/B3Validate.cpp: | 
 |         * b3/B3WasmBoundsCheckValue.cpp: | 
 |         (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue): | 
 |         (JSC::B3::WasmBoundsCheckValue::dumpMeta const): | 
 |         * b3/B3WasmBoundsCheckValue.h: | 
 |         (JSC::B3::WasmBoundsCheckValue::bounds const): | 
 |         (JSC::B3::WasmBoundsCheckValue::pinnedIndexingMask const): Deleted. | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testWasmBoundsCheck): | 
 |         (JSC::B3::run): | 
 |         * 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/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSSALoweringPhase.cpp: | 
 |         (JSC::DFG::SSALoweringPhase::handleNode): | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::SpeculativeJIT): | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::loadFromIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateActivation): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewStringObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewRegexp): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewObject): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewStringObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::pointerIntoTypedArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayMask): Deleted. | 
 |         (JSC::FTL::DFG::LowerDFGToB3::maskedIndex): Deleted. | 
 |         (JSC::FTL::DFG::LowerDFGToB3::computeButterflyIndexingMask): Deleted. | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObject): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): | 
 |         (JSC::AssemblyHelpers::emitAllocateDestructibleObject): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitDoubleLoad): | 
 |         (JSC::JIT::emitContiguousLoad): | 
 |         (JSC::JIT::emitArrayStorageLoad): | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/Butterfly.h: | 
 |         (JSC::ContiguousData::at const): | 
 |         (JSC::ContiguousData::at): | 
 |         (JSC::Butterfly::computeIndexingMask const): Deleted. | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::ContiguousData<T>::at const): Deleted. | 
 |         (JSC::ContiguousData<T>::at): Deleted. | 
 |         * runtime/ClonedArguments.cpp: | 
 |         (JSC::ClonedArguments::createEmpty): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::appendMemcpy): | 
 |         (JSC::JSArray::setLength): | 
 |         (JSC::JSArray::pop): | 
 |         (JSC::JSArray::shiftCountWithAnyIndexingType): | 
 |         (JSC::JSArray::unshiftCountWithAnyIndexingType): | 
 |         (JSC::JSArray::fillArgList): | 
 |         (JSC::JSArray::copyToArguments): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::JSArrayBufferView): | 
 |         * runtime/JSArrayInlines.h: | 
 |         (JSC::JSArray::pushInline): | 
 |         * runtime/JSFixedArray.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::getOwnPropertySlotByIndex): | 
 |         (JSC::JSObject::putByIndex): | 
 |         (JSC::JSObject::createInitialUndecided): | 
 |         (JSC::JSObject::createInitialInt32): | 
 |         (JSC::JSObject::createInitialDouble): | 
 |         (JSC::JSObject::createInitialContiguous): | 
 |         (JSC::JSObject::createArrayStorage): | 
 |         (JSC::JSObject::convertUndecidedToInt32): | 
 |         (JSC::JSObject::convertUndecidedToDouble): | 
 |         (JSC::JSObject::convertUndecidedToContiguous): | 
 |         (JSC::JSObject::convertUndecidedToArrayStorage): | 
 |         (JSC::JSObject::convertInt32ToDouble): | 
 |         (JSC::JSObject::convertInt32ToArrayStorage): | 
 |         (JSC::JSObject::convertDoubleToContiguous): | 
 |         (JSC::JSObject::convertDoubleToArrayStorage): | 
 |         (JSC::JSObject::convertContiguousToArrayStorage): | 
 |         (JSC::JSObject::createInitialForValueAndSet): | 
 |         (JSC::JSObject::deletePropertyByIndex): | 
 |         (JSC::JSObject::getOwnPropertyNames): | 
 |         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): | 
 |         (JSC::JSObject::countElements): | 
 |         (JSC::JSObject::increaseVectorLength): | 
 |         (JSC::JSObject::ensureLengthSlow): | 
 |         (JSC::JSObject::reallocateAndShrinkButterfly): | 
 |         (JSC::JSObject::getEnumerableLength): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::canGetIndexQuickly): | 
 |         (JSC::JSObject::getIndexQuickly): | 
 |         (JSC::JSObject::tryGetIndexQuickly const): | 
 |         (JSC::JSObject::setIndexQuickly): | 
 |         (JSC::JSObject::initializeIndex): | 
 |         (JSC::JSObject::initializeIndexWithoutBarrier): | 
 |         (JSC::JSObject::butterflyOffset): | 
 |         (JSC::JSObject::setButterfly): | 
 |         (JSC::JSObject::nukeStructureAndSetButterfly): | 
 |         (JSC::JSObject::JSObject): | 
 |         (JSC::JSObject::butterflyIndexingMaskOffset): Deleted. | 
 |         (JSC::JSObject::butterflyIndexingMask const): Deleted. | 
 |         (JSC::JSObject::setButterflyWithIndexingMask): Deleted. | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::prepareToPutDirectWithoutTransition): | 
 |         (JSC::JSObject::putDirectInternal): | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::flattenDictionaryStructure): | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::B3IRGenerator): | 
 |         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState): | 
 |         (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer): | 
 |         (JSC::Wasm::B3IRGenerator::load): | 
 |         (JSC::Wasm::B3IRGenerator::store): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmInstance.h: | 
 |         (JSC::Wasm::Instance::updateCachedMemory): | 
 |         (JSC::Wasm::Instance::offsetOfCachedMemorySize): | 
 |         (JSC::Wasm::Instance::offsetOfCachedIndexingMask): Deleted. | 
 |         * wasm/WasmMemory.cpp: | 
 |         (JSC::Wasm::Memory::Memory): | 
 |         (JSC::Wasm::Memory::grow): | 
 |         * wasm/WasmMemory.h: | 
 |         (JSC::Wasm::Memory::size const): | 
 |         (JSC::Wasm::Memory::offsetOfSize): | 
 |         (JSC::Wasm::Memory::indexingMask): Deleted. | 
 |         (JSC::Wasm::Memory::offsetOfIndexingMask): Deleted. | 
 |         * wasm/WasmMemoryInformation.cpp: | 
 |         (JSC::Wasm::PinnedRegisterInfo::get): | 
 |         (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo): | 
 |         * wasm/WasmMemoryInformation.h: | 
 |         (JSC::Wasm::PinnedRegisterInfo::toSave const): | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |  | 
 | 2018-03-31  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC crash in JIT code with for-of loop and Array/Set iterators | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183174 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): Fix the bug by making GetByOffset and friends verify that they are getting the type proof they want at the desired hoisting site. | 
 |  | 
 | 2018-03-30  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Strings and Vectors shouldn't do index masking | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184193 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnString): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharCodeAt): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::stringCharLoad): | 
 |  | 
 | 2018-03-30  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add pointer profiling support in baseline JIT and supporting files. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184200 | 
 |         <rdar://problem/39057300> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         1. To simplify pointer profiling support, vmEntryToJavaScript() now always enters | 
 |            the code via the arity check entry. | 
 |         2. To accommodate (1), all JITCode must now populate their arity check entry code | 
 |            pointers as well.  For native code, programs, evals, and modules that don't | 
 |            do arity check, we set the normal entry as the arity check entry (though with | 
 |            the CodeEntryWithArityCheckPtrTag profile instead). | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::locationOfNearCall): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::readCallTarget): | 
 |         (JSC::MacroAssemblerARM64::linkCall): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCaseSnippetParams.cpp: | 
 |         (JSC::SlowPathCallGeneratorWithArguments::generateImpl): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::addJITAddIC): | 
 |         (JSC::CodeBlock::addJITMulIC): | 
 |         (JSC::CodeBlock::addJITSubIC): | 
 |         (JSC::CodeBlock::addJITNegIC): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::addMathIC): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * bytecode/LLIntCallLinkInfo.h: | 
 |         (JSC::LLIntCallLinkInfo::unlink): | 
 |         (): Deleted. | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::AccessGenerationState::emitExplicitExceptionHandler): | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * dfg/DFGJITFinalizer.cpp: | 
 |         (JSC::DFG::JITFinalizer::finalize): | 
 |         (JSC::DFG::JITFinalizer::finalizeFunction): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileValueAdd): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithSub): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithNegate): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithMul): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchImm): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): | 
 |         * disassembler/ARM64Disassembler.cpp: | 
 |         (JSC::tryToDisassemble): | 
 |         * ftl/FTLJITFinalizer.cpp: | 
 |         (JSC::FTL::JITFinalizer::finalizeCommon): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithMul): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate): | 
 |         * heap/JITStubRoutineSet.h: | 
 |         (JSC::JITStubRoutineSet::mark): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::callExceptionFuzz): | 
 |         (JSC::AssemblyHelpers::debugCall): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::emitFunctionPrologue): | 
 |         * jit/CCallHelpers.cpp: | 
 |         (JSC::CCallHelpers::ensureShadowChickenPacket): | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::prepareForTailCallSlow): | 
 |         * jit/CallFrameShuffler.cpp: | 
 |         (JSC::CallFrameShuffler::prepareForTailCall): | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): | 
 |         * jit/ExecutableAllocator.h: | 
 |         (JSC::performJITMemcpy): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         (JSC::JIT::link): | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emit_op_negate): | 
 |         (JSC::JIT::emit_op_add): | 
 |         (JSC::JIT::emitMathICFast): | 
 |         (JSC::JIT::emitMathICSlow): | 
 |         (JSC::JIT::emit_op_mul): | 
 |         (JSC::JIT::emit_op_sub): | 
 |         * jit/JITCode.cpp: | 
 |         (JSC::JITCode::execute): | 
 |         (JSC::JITCodeWithCodeRef::executableAddressAtOffset): | 
 |         (JSC::DirectJITCode::DirectJITCode): | 
 |         (JSC::DirectJITCode::initializeCodeRef): | 
 |         (JSC::NativeJITCode::addressForCall): | 
 |         * jit/JITExceptions.cpp: | 
 |         (JSC::genericUnwind): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         (JSC::JITBinaryMathIC::JITBinaryMathIC): | 
 |         (JSC::JITUnaryMathIC::JITUnaryMathIC): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_switch_imm): | 
 |         (JSC::JIT::emit_op_switch_char): | 
 |         (JSC::JIT::emit_op_switch_string): | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         (JSC::JIT::emitSlow_op_has_indexed_property): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITOperations.cpp: | 
 |         (JSC::getByVal): | 
 |         (JSC::tryGetByValOptimize): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitPutByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         (JSC::JIT::emitSlow_op_try_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_with_this): | 
 |         (JSC::JIT::emitSlow_op_put_by_id): | 
 |         (JSC::JIT::privateCompileGetByVal): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITThunks.cpp: | 
 |         (JSC::JITThunks::hostFunctionStub): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheGetByID): | 
 |         (JSC::repatchGetByID): | 
 |         (JSC::appropriateOptimizingPutByIdFunction): | 
 |         (JSC::tryCachePutByID): | 
 |         (JSC::repatchPutByID): | 
 |         (JSC::linkFor): | 
 |         (JSC::revertCall): | 
 |         (JSC::linkPolymorphicCall): | 
 |         (JSC::resetGetByID): | 
 |         (JSC::resetPutByID): | 
 |         * jit/Repatch.h: | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::finalize): | 
 |         (JSC::SpecializedThunkJIT::callDoubleToDouble): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::emitPointerValidation): | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::slowPathFor): | 
 |         (JSC::linkCallThunkGenerator): Deleted. | 
 |         (JSC::linkPolymorphicCallThunkGenerator): Deleted. | 
 |         (JSC::virtualThunkFor): Deleted. | 
 |         (JSC::nativeForGenerator): Deleted. | 
 |         (JSC::nativeCallGenerator): Deleted. | 
 |         (JSC::nativeTailCallGenerator): Deleted. | 
 |         (JSC::nativeTailCallWithoutSavedTagsGenerator): Deleted. | 
 |         (JSC::nativeConstructGenerator): Deleted. | 
 |         (JSC::internalFunctionCallGenerator): Deleted. | 
 |         (JSC::internalFunctionConstructGenerator): Deleted. | 
 |         (JSC::arityFixupGenerator): Deleted. | 
 |         (JSC::unreachableGenerator): Deleted. | 
 |         (JSC::stringCharLoad): Deleted. | 
 |         (JSC::charToString): Deleted. | 
 |         (JSC::charCodeAtThunkGenerator): Deleted. | 
 |         (JSC::charAtThunkGenerator): Deleted. | 
 |         (JSC::fromCharCodeThunkGenerator): Deleted. | 
 |         (JSC::clz32ThunkGenerator): Deleted. | 
 |         (JSC::sqrtThunkGenerator): Deleted. | 
 |         (JSC::floorThunkGenerator): Deleted. | 
 |         (JSC::ceilThunkGenerator): Deleted. | 
 |         (JSC::truncThunkGenerator): Deleted. | 
 |         (JSC::roundThunkGenerator): Deleted. | 
 |         (JSC::expThunkGenerator): Deleted. | 
 |         (JSC::logThunkGenerator): Deleted. | 
 |         (JSC::absThunkGenerator): Deleted. | 
 |         (JSC::imulThunkGenerator): Deleted. | 
 |         (JSC::randomThunkGenerator): Deleted. | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): Deleted. | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         (JSC::LLInt::getCodePtr): | 
 |         * llint/LLIntEntrypoint.cpp: | 
 |         (JSC::LLInt::setEvalEntrypoint): | 
 |         (JSC::LLInt::setProgramEntrypoint): | 
 |         (JSC::LLInt::setModuleProgramEntrypoint): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LLIntThunks.cpp: | 
 |         (JSC::LLInt::generateThunkWithJumpTo): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/ExecutableBase.h: | 
 |         * runtime/NativeExecutable.cpp: | 
 |         (JSC::NativeExecutable::finishCreation): | 
 |         * runtime/NativeFunction.h: | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |         (JSC::TaggedNativeFunction::operator NativeFunction): | 
 |         * runtime/PropertySlot.h: | 
 |         (JSC::PropertySlot::setCustom): | 
 |         (JSC::PropertySlot::setCacheableCustom): | 
 |         * runtime/PtrTag.h: | 
 |         * runtime/PutPropertySlot.h: | 
 |         (JSC::PutPropertySlot::setCustomValue): | 
 |         (JSC::PutPropertySlot::setCustomAccessor): | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::takeSample): | 
 |         * runtime/VMTraps.cpp: | 
 |         (JSC::SignalContext::SignalContext): | 
 |         (JSC::VMTraps::tryInstallTrapBreakpoints): | 
 |         * tools/SigillCrashAnalyzer.cpp: | 
 |         (JSC::installCrashHandler): | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generateTryReadUnicodeCharacterHelper): | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |  | 
 | 2018-03-30  Devin Rousso  <webkit@devinrousso.com> | 
 |  | 
 |         Web Inspector: tint all pixels drawn by shader program when hovering ShaderProgramTreeElement | 
 |         https://bugs.webkit.org/show_bug.cgi?id=175223 | 
 |  | 
 |         Reviewed by Matt Baker. | 
 |  | 
 |         * inspector/protocol/Canvas.json: | 
 |         Add `setShaderProgramHighlighted` command that will cause a blend to be applied to the | 
 |         canvas if the given shader program is active immediately before `drawArrays` or `drawElements` | 
 |         is called. The blend is removed and the previous value is applied once the draw is complete. | 
 |  | 
 | 2018-03-30  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         WebAssembly: support DataView compilation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183342 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Compiling a module from a DataView was incorrectly dealing with | 
 |         DataView's offset. | 
 |  | 
 |         * wasm/WasmModuleParser.cpp: | 
 |         (JSC::Wasm::ModuleParser::parse): | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::getWasmBufferFromValue): | 
 |         (JSC::createSourceBufferFromValue): | 
 |         * wasm/js/WebAssemblyPrototype.cpp: | 
 |         (JSC::webAssemblyValidateFunc): | 
 |  | 
 | 2018-03-30  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Bytecode generator should not get_from_scope something that may be a hole into a variable that is already live | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184189 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ResolveNode::emitBytecode): | 
 |  | 
 | 2018-03-30  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add pointer profiling support to Wasm. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184175 | 
 |         <rdar://problem/39027923> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * runtime/PtrTag.h: | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::addGrowMemory): | 
 |         (JSC::Wasm::B3IRGenerator::addCall): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Popcnt>): | 
 |         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Popcnt>): | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::prepare): | 
 |         (JSC::Wasm::BBQPlan::complete): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmBinding.h: | 
 |         * wasm/WasmFaultSignalHandler.cpp: | 
 |         (JSC::Wasm::trapHandler): | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::throwExceptionFromWasmThunkGenerator): | 
 |         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * wasm/js/WebAssemblyFunction.cpp: | 
 |         (JSC::callWebAssemblyFunction): | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |  | 
 | 2018-03-30  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r230102. | 
 |  | 
 |         Caused assertion failures on JSC bots. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "A stack overflow in the parsing of a builtin (called by | 
 |         createExecutable) cause a crash instead of a catchable js | 
 |         exception" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184074 | 
 |         https://trac.webkit.org/changeset/230102 | 
 |  | 
 | 2018-03-30  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Inlining of a function that ends in op_unreachable in a non-tail position triggers an ASSERT | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183812 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         The fix I landed for https://bugs.webkit.org/show_bug.cgi?id=181027 was flawed: I tried setting the bytecodeIndex for the new block on line 1679 (at the end of inlineCall), but it is going to be reset on line 6612 (in parseCodeBlock). | 
 |         The fix is simply to make the block untargetable by default, and let parseCodeBlock make it targetable afterwards if it is a jump target. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::allocateTargetableBlock): | 
 |         (JSC::DFG::ByteCodeParser::inlineCall): | 
 |  | 
 | 2018-03-30  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         A stack overflow in the parsing of a builtin (called by createExecutable) cause a crash instead of a catchable js exception | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184074 | 
 |         <rdar://problem/37165897> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Fixing this requires getting the ParserError (with information about the failure) and an ExecState* (to throw an exception) in the same place. | 
 |         It is surprisingly painful, with quite a long call stack between the last function with an access to an ExecState* and the first function with the ParserError. | 
 |         Even worse, many of these functions are generated by macros, themselves generated by a maze of python scripts. | 
 |         As a result, this patch is grotesquely large, while all it does is adding enough plumbing to throw a proper exception in this specific case. | 
 |  | 
 |         There are now bare calls to '.value()' on several paths that may crash. It is not a problem in my opinion, since we previously crashed in every case regardless of the path that took us to createExecutable when encountering a stack overflow. | 
 |         If we ever find an example that can cause these calls to fail, it should be doable to throw a proper exception there too. | 
 |  | 
 |         Two other minor changes: | 
 |         - I removed BuiltinExecutableCreator.{cpp, h} as it was nearly empty, and only used in one place. That place now includes BuiltinExecutables.h directly instead. | 
 |         - I moved code from ParserError.h into a newly created ParserError.cpp, as I see no need to inline functions that are only used when encountering a parser error, and ParserError.h is now included in quite a few places. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Scripts/builtins/builtins_generate_combined_header.py: | 
 |         (BuiltinsCombinedHeaderGenerator.generate_forward_declarations): | 
 |         (ParserError): | 
 |         (generate_section_for_object): Deleted. | 
 |         (generate_externs_for_object): Deleted. | 
 |         (generate_macros_for_object): Deleted. | 
 |         (generate_section_for_code_table_macro): Deleted. | 
 |         (generate_section_for_code_name_macro): Deleted. | 
 |         (generate_section_for_global_private_code_name_macro): Deleted. | 
 |         * Scripts/builtins/builtins_generate_separate_header.py: | 
 |         (generate_secondary_header_includes): | 
 |         * Scripts/builtins/builtins_templates.py: | 
 |         * Sources.txt: | 
 |         * builtins/BuiltinExecutableCreator.cpp: Removed. | 
 |         * builtins/BuiltinExecutableCreator.h: Removed. | 
 |         * builtins/BuiltinExecutables.cpp: | 
 |         (JSC::BuiltinExecutables::createDefaultConstructor): | 
 |         (JSC::BuiltinExecutables::createBuiltinExecutable): | 
 |         (JSC::createBuiltinExecutable): | 
 |         (JSC::BuiltinExecutables::createExecutableOrCrash): | 
 |         (JSC::BuiltinExecutables::createExecutable): | 
 |         * builtins/BuiltinExecutables.h: | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * parser/ParserError.cpp: Added. | 
 |         (JSC::ParserError::toErrorObject): | 
 |         (JSC::ParserError::throwStackOverflowOrOutOfMemory): | 
 |         (WTF::printInternal): | 
 |         * parser/ParserError.h: | 
 |         (JSC::ParserError::toErrorObject): Deleted. | 
 |         (WTF::printInternal): Deleted. | 
 |         * runtime/AsyncIteratorPrototype.cpp: | 
 |         (JSC::AsyncIteratorPrototype::finishCreation): | 
 |         * runtime/FunctionPrototype.cpp: | 
 |         (JSC::FunctionPrototype::addFunctionProperties): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::getOwnStaticPropertySlot): | 
 |         (JSC::JSObject::reifyAllStaticProperties): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::getOwnNonIndexPropertySlot): | 
 |         (JSC::JSObject::getOwnPropertySlot): | 
 |         (JSC::JSObject::getPropertySlot): | 
 |         * runtime/JSObjectInlines.h: | 
 |         (JSC::JSObject::getNonIndexPropertySlot): | 
 |         * runtime/JSTypedArrayViewPrototype.cpp: | 
 |         (JSC::JSTypedArrayViewPrototype::finishCreation): | 
 |         * runtime/Lookup.cpp: | 
 |         (JSC::reifyStaticAccessor): | 
 |         (JSC::setUpStaticFunctionSlot): | 
 |         * runtime/Lookup.h: | 
 |         (JSC::getStaticPropertySlotFromTable): | 
 |         (JSC::reifyStaticProperty): | 
 |         * runtime/MapPrototype.cpp: | 
 |         (JSC::MapPrototype::finishCreation): | 
 |         * runtime/SetPrototype.cpp: | 
 |         (JSC::SetPrototype::finishCreation): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionCreateBuiltin): | 
 |  | 
 | 2018-03-30  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Out-of-bounds accesses due to a missing check for MAX_STORAGE_VECTOR_LENGTH in unshiftCountForAnyIndexingType | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183657 | 
 |         <rdar://problem/38464399> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         There was just a missing check in unshiftCountForIndexingType. | 
 |         I've also replaced 'return false' by 'return true' in the case of an 'out-of-memory' exception, because 'return false' means 'please continue to the slow path', | 
 |         and the slow path has an assert that there is no unhandled exception (line 360 of ArrayPrototype.cpp). | 
 |         Finally, I made the assert in ensureLength a release assert as it would have caught this bug and prevented it from being a security risk. | 
 |  | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::unshift): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::unshiftCountWithAnyIndexingType): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::ensureLength): | 
 |  | 
 | 2018-03-29  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add some pointer profiling support to B3 and Air. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184165 | 
 |         <rdar://problem/39022125> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/B3LowerMacrosAfterOptimizations.cpp: | 
 |         * b3/B3MathExtras.cpp: | 
 |         * b3/B3ReduceStrength.cpp: | 
 |         * b3/air/AirCCallSpecial.cpp: | 
 |         (JSC::B3::Air::CCallSpecial::generate): | 
 |         * b3/air/AirCCallSpecial.h: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testCallSimple): | 
 |         (JSC::B3::testCallRare): | 
 |         (JSC::B3::testCallRareLive): | 
 |         (JSC::B3::testCallSimplePure): | 
 |         (JSC::B3::testCallFunctionWithHellaArguments): | 
 |         (JSC::B3::testCallFunctionWithHellaArguments2): | 
 |         (JSC::B3::testCallFunctionWithHellaArguments3): | 
 |         (JSC::B3::testCallSimpleDouble): | 
 |         (JSC::B3::testCallSimpleFloat): | 
 |         (JSC::B3::testCallFunctionWithHellaDoubleArguments): | 
 |         (JSC::B3::testCallFunctionWithHellaFloatArguments): | 
 |         (JSC::B3::testLinearScanWithCalleeOnStack): | 
 |         (JSC::B3::testInterpreter): | 
 |         (JSC::B3::testLICMPure): | 
 |         (JSC::B3::testLICMPureSideExits): | 
 |         (JSC::B3::testLICMPureWritesPinned): | 
 |         (JSC::B3::testLICMPureWrites): | 
 |         (JSC::B3::testLICMReadsLocalState): | 
 |         (JSC::B3::testLICMReadsPinned): | 
 |         (JSC::B3::testLICMReads): | 
 |         (JSC::B3::testLICMPureNotBackwardsDominant): | 
 |         (JSC::B3::testLICMPureFoiledByChild): | 
 |         (JSC::B3::testLICMPureNotBackwardsDominantFoiledByChild): | 
 |         (JSC::B3::testLICMExitsSideways): | 
 |         (JSC::B3::testLICMWritesLocalState): | 
 |         (JSC::B3::testLICMWrites): | 
 |         (JSC::B3::testLICMFence): | 
 |         (JSC::B3::testLICMWritesPinned): | 
 |         (JSC::B3::testLICMControlDependent): | 
 |         (JSC::B3::testLICMControlDependentNotBackwardsDominant): | 
 |         (JSC::B3::testLICMControlDependentSideExits): | 
 |         (JSC::B3::testLICMReadsPinnedWritesPinned): | 
 |         (JSC::B3::testLICMReadsWritesDifferentHeaps): | 
 |         (JSC::B3::testLICMReadsWritesOverlappingHeaps): | 
 |         (JSC::B3::testLICMDefaultCall): | 
 |         (JSC::B3::testShuffleDoesntTrashCalleeSaves): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): | 
 |         * jit/GPRInfo.h: | 
 |         * runtime/PtrTag.h: | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |  | 
 | 2018-03-29  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Use Forward.h instead of forward-declaring WTF::String | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184172 | 
 |         <rdar://problem/39026146> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         As part of #184164 I'm changing WTF::String, and the forward | 
 |         declarations are just wrong because I'm making it templated. We | 
 |         should use Forward.h anyways, so do that instead. | 
 |  | 
 |         * runtime/DateConversion.h: | 
 |  | 
 | 2018-03-29  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Use MacroAssemblerCodePtr in Wasm code for code pointers instead of void*. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184163 | 
 |         <rdar://problem/39020397> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         With the use of MacroAssemblerCodePtr, we now get poisoning for Wasm code pointers. | 
 |  | 
 |         Also renamed some structs, methods, and variable names to be more accurate. | 
 |         Previously, there is some confusion between a code pointer and the address of a | 
 |         code pointer (sometimes referred to in the code as a "LoadLocation").  We now name | 
 |         the LoadLocation variables appropriately to distinguish them from code pointers. | 
 |  | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::addCall): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmCodeBlock.cpp: | 
 |         (JSC::Wasm::CodeBlock::CodeBlock): | 
 |         * wasm/WasmCodeBlock.h: | 
 |         (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): | 
 |         (JSC::Wasm::CodeBlock::wasmEntrypointLoadLocationFromFunctionIndexSpace): Deleted. | 
 |         * wasm/WasmFormat.h: | 
 |         (JSC::Wasm::WasmToWasmImportableFunction::WasmToWasmImportableFunction): | 
 |         (JSC::Wasm::WasmToWasmImportableFunction::offsetOfEntrypointLoadLocation): | 
 |         (JSC::Wasm::CallableFunction::CallableFunction): Deleted. | 
 |         (JSC::Wasm::CallableFunction::offsetOfWasmEntrypointLoadLocation): Deleted. | 
 |         * wasm/WasmInstance.h: | 
 |         (JSC::Wasm::Instance::offsetOfWasmEntrypointLoadLocation): | 
 |         (JSC::Wasm::Instance::offsetOfWasmToEmbedderStub): | 
 |         (JSC::Wasm::Instance::offsetOfWasmEntrypoint): Deleted. | 
 |         (JSC::Wasm::Instance::offsetOfWasmToEmbedderStubExecutableAddress): Deleted. | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmTable.cpp: | 
 |         (JSC::Wasm::Table::Table): | 
 |         (JSC::Wasm::Table::grow): | 
 |         (JSC::Wasm::Table::clearFunction): | 
 |         (JSC::Wasm::Table::setFunction): | 
 |         * wasm/WasmTable.h: | 
 |         (JSC::Wasm::Table::offsetOfFunctions): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::finalizeCreation): | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyTable.cpp: | 
 |         (JSC::JSWebAssemblyTable::setFunction): | 
 |         * wasm/js/WebAssemblyFunction.cpp: | 
 |         (JSC::WebAssemblyFunction::create): | 
 |         (JSC::WebAssemblyFunction::WebAssemblyFunction): | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::link): | 
 |         (JSC::WebAssemblyModuleRecord::evaluate): | 
 |         * wasm/js/WebAssemblyWrapperFunction.cpp: | 
 |         (JSC::WebAssemblyWrapperFunction::WebAssemblyWrapperFunction): | 
 |         (JSC::WebAssemblyWrapperFunction::create): | 
 |         * wasm/js/WebAssemblyWrapperFunction.h: | 
 |  | 
 | 2018-03-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Remove WTF_EXPORTDATA and JS_EXPORTDATA | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184170 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         Replace WTF_EXPORTDATA and JS_EXPORTDATA with | 
 |         WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE respectively. | 
 |  | 
 |         * heap/WriteBarrierSupport.h: | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         * jit/ExecutableAllocator.h: | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSExportMacros.h: | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/JSObject.h: | 
 |         * runtime/Options.h: | 
 |         * runtime/PropertyDescriptor.h: | 
 |         * runtime/PropertyMapHashTable.h: | 
 |         * runtime/SamplingCounter.h: | 
 |  | 
 | 2018-03-29  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         MSVC __forceinline slows down JSC release build fivefold after r229391 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184062 | 
 |  | 
 |         Reviewed by Alex Christensen. | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::marshallArgumentRegister): | 
 |         Exempt MSVC from a single forced inline used within recursive templates. | 
 |  | 
 | 2018-03-29  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         ArrayMode should not try to get the DFG to think it can convert TypedArrays | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184137 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * dfg/DFGArrayMode.cpp: | 
 |         (JSC::DFG::ArrayMode::fromObserved): | 
 |  | 
 | 2018-03-29  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r230062. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184128 | 
 |  | 
 |         Broke mac port. web content process crashes while loading any | 
 |         web page (Requested by rniwa on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "MSVC __forceinline slows down JSC release build fivefold | 
 |         after r229391" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184062 | 
 |         https://trac.webkit.org/changeset/230062 | 
 |  | 
 | 2018-03-28  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         MSVC __forceinline slows down JSC release build fivefold after r229391 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184062 | 
 |  | 
 |         Reviewed by Alex Christensen. | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::marshallArgumentRegister): | 
 |         Exempt MSVC from a single forced inline used within recursive templates. | 
 |  | 
 | 2018-03-28  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Enhance ARM64 probe to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184069 | 
 |         <rdar://problem/38939879> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.cpp: | 
 |         (JSC::MacroAssembler::probe): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::popPair): | 
 |         (JSC::MacroAssemblerX86Common::pushPair): | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::testProbeReadsArgumentRegisters): | 
 |         (JSC::testProbeWritesArgumentRegisters): | 
 |         * runtime/PtrTag.h: | 
 |         (JSC::tagForPtr): | 
 |  | 
 | 2018-03-28  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         appendQuotedJSONString stops on arithmetic overflow instead of propagating it upwards | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183894 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Use the return value of appendQuotedJSONString to fail more gracefully when given a string that is too large to handle. | 
 |  | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::Stringifier::appendStringifiedValue): | 
 |  | 
 | 2018-03-28  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [JSC] Move WeakValueRef class to its own file and use it from Objc and GLib | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184073 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         We currently have duplicated code in Obj and GLib implementations. | 
 |  | 
 |         * API/JSManagedValue.mm: | 
 |         (managedValueHandleOwner): | 
 |         (-[JSManagedValue initWithValue:]): | 
 |         * API/JSWeakValue.cpp: Added. | 
 |         (JSC::JSWeakValue::~JSWeakValue): | 
 |         (JSC::JSWeakValue::clear): | 
 |         (JSC::JSWeakValue::isClear const): | 
 |         (JSC::JSWeakValue::setPrimitive): | 
 |         (JSC::JSWeakValue::setObject): | 
 |         (JSC::JSWeakValue::setString): | 
 |         * API/JSWeakValue.h: Added. | 
 |         (JSC::JSWeakValue::isSet const): | 
 |         (JSC::JSWeakValue::isPrimitive const): | 
 |         (JSC::JSWeakValue::isObject const): | 
 |         (JSC::JSWeakValue::isString const): | 
 |         (JSC::JSWeakValue::object const): | 
 |         (JSC::JSWeakValue::primitive const): | 
 |         (JSC::JSWeakValue::string const): | 
 |         * API/glib/JSCWeakValue.cpp: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |  | 
 | 2018-03-27  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GLIB] Add JSCWeakValue to JavaScriptCore GLib API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184041 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         This allows to keep a reference to a JavaSCript value without protecting it, and without having a strong | 
 |         reference of the context. When the value is cleared the JSCWeakValue::cleared signal is emitted and | 
 |         jsc_weak_value_get_value() will always return nullptr. | 
 |  | 
 |         * API/glib/JSCWeakValue.cpp: Added. | 
 |         (WeakValueRef::~WeakValueRef): | 
 |         (WeakValueRef::clear): | 
 |         (WeakValueRef::isClear const): | 
 |         (WeakValueRef::isSet const): | 
 |         (WeakValueRef::isPrimitive const): | 
 |         (WeakValueRef::isObject const): | 
 |         (WeakValueRef::isString const): | 
 |         (WeakValueRef::setPrimitive): | 
 |         (WeakValueRef::setObject): | 
 |         (WeakValueRef::setString): | 
 |         (WeakValueRef::object const): | 
 |         (WeakValueRef::primitive const): | 
 |         (WeakValueRef::string const): | 
 |         (weakValueHandleOwner): | 
 |         (jscWeakValueInitialize): | 
 |         (jscWeakValueSetProperty): | 
 |         (jscWeakValueDispose): | 
 |         (jsc_weak_value_class_init): | 
 |         (jsc_weak_value_new): | 
 |         (jsc_weak_value_get_value): | 
 |         * API/glib/JSCWeakValue.h: Added. | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: | 
 |         * API/glib/docs/jsc-glib-docs.sgml: | 
 |         * API/glib/jsc.h: | 
 |         * GLib.cmake: | 
 |  | 
 | 2018-03-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Remove unnecessary USE(JSVALUE32_64) / USE(JSVALUE64) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181292 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         By using JSValueRegs abstraction, we can simplify DFGSpeculativeJIT.cpp code. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateRest): | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchImm): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutDynamicVar): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutAccessorByVal): | 
 |  | 
 | 2018-03-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Add Load16Z for B3 and use it in WebAssembly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=165884 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         We already support Load16Z in B3. Use it for i32.load16_u / i64.load16_u in WebAssembly. | 
 |         spec-tests/memory.wast.js already covered this change. | 
 |  | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::emitLoadOp): | 
 |  | 
 | 2018-03-24  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove repeated iteration of ElementNode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183987 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         BytecodeGenerator repeatedly iterates ElementNode to emit the efficient code. | 
 |         While it is OK for small arrays, this repeated iteration takes much time | 
 |         if the array is very large. For example, Kraken's initialization code includes | 
 |         very large array with numeric literals. This makes bytecode compiling so long. | 
 |  | 
 |         This patch carefully removes unnecessary iteration when emitting arrays. | 
 |         This reduces one of Kraken/imaging-darkroom's bytecode compiling from 13.169856 ms | 
 |         to 9.988050 ms. | 
 |  | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitNewArrayBuffer): | 
 |         (JSC::BytecodeGenerator::emitNewArray): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         (JSC::ArrayPatternNode::bindValue const): | 
 |         (JSC::ArrayPatternNode::emitDirectBinding): | 
 |  | 
 | 2018-03-26  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         JIT callOperation() needs to support operations that return SlowPathReturnType differently on Windows. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183655 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::ArgCollection::argCount): | 
 |         (JSC::CCallHelpers::marshallArgumentRegister): | 
 |         (JSC::CCallHelpers::setupArgumentsImpl): | 
 |         On Win64, ensure that argCount always includes GPRs and FPRs and that counting starts from 1 for SlowPathReturnType. | 
 |  | 
 |         * jit/JIT.h: | 
 |         (JSC::JIT::callOperation): | 
 |         (JSC::JIT::is64BitType): | 
 |         (JSC::JIT::is64BitType<void>): | 
 |         On Win64, ensure special call is used for SlowPathReturnType. | 
 |  | 
 |         * jit/JITOperations.h: | 
 |         Update changed type. | 
 |  | 
 | 2018-03-26  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         We should have SSE4 detection in the X86 MacroAssembler. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=165363 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This patch adds popcnt support to WASM in x86_64 environment. | 
 |         To use it, we refactor our CPUID feature detection in MacroAssemblerX86Common. | 
 |         Our spec-tests already cover popcnt. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::supportsCountPopulation): | 
 |         * assembler/MacroAssemblerX86Common.cpp: | 
 |         (JSC::MacroAssemblerX86Common::getCPUID): | 
 |         (JSC::MacroAssemblerX86Common::getCPUIDEx): | 
 |         (JSC::MacroAssemblerX86Common::collectCPUFeatures): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::countPopulation32): | 
 |         (JSC::MacroAssemblerX86Common::supportsFloatingPointRounding): | 
 |         (JSC::MacroAssemblerX86Common::supportsCountPopulation): | 
 |         (JSC::MacroAssemblerX86Common::supportsAVX): | 
 |         (JSC::MacroAssemblerX86Common::supportsLZCNT): | 
 |         (JSC::MacroAssemblerX86Common::supportsBMI1): | 
 |         (JSC::MacroAssemblerX86Common::isSSE2Present): | 
 |         (JSC::MacroAssemblerX86Common::updateEax1EcxFlags): Deleted. | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::countPopulation64): | 
 |         * assembler/X86Assembler.h: | 
 |         (JSC::X86Assembler::popcnt_rr): | 
 |         (JSC::X86Assembler::popcnt_mr): | 
 |         (JSC::X86Assembler::popcntq_rr): | 
 |         (JSC::X86Assembler::popcntq_mr): | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Popcnt>): | 
 |         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Popcnt>): | 
 |  | 
 | 2018-03-26  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG should know that CreateThis can be effectful | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184013 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         As shown in the tests added in JSTests, CreateThis can be effectful if the constructor this | 
 |         is a proxy. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-03-25  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Fix typo in JSC option name | 
 |         https://bugs.webkit.org/show_bug.cgi?id=184001 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         enableJITDebugAssetions => enableJITDebugAssertions. | 
 |  | 
 |         * assembler/MacroAssembler.cpp: | 
 |         (JSC::MacroAssembler::jitAssert): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-03-25  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         r228149 accidentally removed code that resets m_emptyCursor at the end of a GC | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183995 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         The removal of this line of code was unintended and happened during some | 
 |         refactoring Fil was doing. The consequence of removing this line of code | 
 |         is that the m_emptyCursor became a monotonically increasing integer, leading | 
 |         the cursor to usually being out of bounds of the block range (depending on | 
 |         what the program is doing). This made the functionality of finding an empty | 
 |         block to steal almost always fail. | 
 |  | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::prepareForAllocation): | 
 |  | 
 | 2018-03-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Introduces fused compare and jump | 
 |         https://bugs.webkit.org/show_bug.cgi?id=177100 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch introduces op_jeq, op_jneq, op_jstricteq, and op_jnstricteq. | 
 |         It offers 3 benefit. | 
 |  | 
 |         1. They are introduced due to the similar purpose to op_jless etc. It aligns | 
 |         op_eq families to op_jless families. | 
 |  | 
 |         2. It reduces the size of bytecode to represent the typical code sequence. | 
 |  | 
 |         3. It offers the way to fuse check and jump in DFG code generation. Since | 
 |         we have MovHint between Branch and CompareEq/CompareStrictEq previously, | 
 |         we cannot do this optimization. It reduces the machine code size in DFG too. | 
 |  | 
 |         It slightly improves Octane/boyer. | 
 |  | 
 |             boyer  6.18038+-0.05002    ^     6.06990+-0.04176       ^ definitely 1.0182x faster | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecode/Opcode.h: | 
 |         (JSC::isBranch): | 
 |         * bytecode/PreciseJumpTargetsInlines.h: | 
 |         (JSC::extractStoredJumpTargetsForBytecodeOffset): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitJumpIfTrue): | 
 |         (JSC::BytecodeGenerator::emitJumpIfFalse): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileStrictEq): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         * jit/JIT.h: | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_jeq): | 
 |         (JSC::JIT::emit_op_neq): | 
 |         (JSC::JIT::emit_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::emitSlow_op_jeq): | 
 |         (JSC::JIT::emitSlow_op_jneq): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_eq): | 
 |         (JSC::JIT::emit_op_jeq): | 
 |         (JSC::JIT::compileOpEqJumpSlow): | 
 |         (JSC::JIT::emitSlow_op_jeq): | 
 |         (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): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * llint/LLIntSlowPaths.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |  | 
 | 2018-03-24  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Improve constants and add comments for CodeBlockHash | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183982 | 
 |  | 
 |         Rubber-stamped by Mark Lam. | 
 |  | 
 |         * bytecode/CodeBlockHash.cpp: | 
 |         (JSC::CodeBlockHash::CodeBlockHash): | 
 |         * bytecode/ParseHash.cpp: | 
 |         (JSC::ParseHash::ParseHash): | 
 |  | 
 | 2018-03-24  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add options to report parsing and bytecode compiling times | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183982 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch adds reportParseTimes and reportBytecodeCompileTimes options. | 
 |         When they are enabled, JSC reports times consumed for parsing and bytecode | 
 |         compiling. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/ParseHash.cpp: Added. | 
 |         (JSC::ParseHash::ParseHash): | 
 |         * bytecode/ParseHash.h: Added. | 
 |         (JSC::ParseHash::hashForCall const): | 
 |         (JSC::ParseHash::hashForConstruct const): | 
 |         * bytecode/UnlinkedFunctionExecutable.cpp: | 
 |         (JSC::generateUnlinkedFunctionCodeBlock): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         (JSC::BytecodeGenerator::generate): | 
 |         * parser/Parser.h: | 
 |         (JSC::parse): | 
 |         * runtime/CodeCache.h: | 
 |         (JSC::generateUnlinkedCodeBlock): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-03-24  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JIT] Drop ENABLE_JIT_VERBOSE flag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183983 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Just use JITInternal::verbose value. | 
 |  | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         (JSC::JIT::privateCompileSlowCases): | 
 |         (JSC::JIT::link): | 
 |  | 
 | 2018-03-23  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Fix the build with no pasteboard | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183973 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         LLInt TypeArray pointer poisoning should not pick its poison dynamically. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183942 | 
 |         <rdar://problem/38798018> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         1. Move the LLInt TypedArray unpoisoning to just before the array access after | 
 |            all the branches. | 
 |         2. Renamed FirstArrayType to FirstTypedArrayType to match the symbol in C++ code. | 
 |         3. Remove a useless instruction in the implementation of emitX86Lea for a global | 
 |            label. | 
 |  | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/x86.rb: | 
 |  | 
 | 2018-03-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add more support for pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183943 | 
 |         <rdar://problem/38799068> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * assembler/ARM64Assembler.h: | 
 |         (JSC::ARM64Assembler::linkJumpOrCall): | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::repatchNearCall): | 
 |         (JSC::AbstractMacroAssembler::tagReturnAddress): | 
 |         (JSC::AbstractMacroAssembler::untagReturnAddress): | 
 |  | 
 | 2018-03-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Add standard containers with FastAllocator specialization | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183789 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         * b3/air/testair.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testDoubleLiteralComparison): | 
 |         (JSC::B3::testFloatEqualOrUnorderedFoldingNaN): | 
 |         * dfg/DFGGraph.h: | 
 |         * dfg/DFGIntegerCheckCombiningPhase.cpp: | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow): | 
 |         * runtime/FunctionHasExecutedCache.h: | 
 |         * runtime/TypeLocationCache.h: | 
 |  | 
 | 2018-03-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Fix ArrayPush(ArrayStorage)'s abstract heap | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182960 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch fixes ArrayPush(ArrayStorage)'s abstract heap. | 
 |         It should always touch ArrayStorage_vector. To unify | 
 |         vector setting code for the real ArrayStorage_vector and | 
 |         ScratchBuffer, we use ArrayStorage_vector.atAnyIndex() to | 
 |         annotate this. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush): | 
 |  | 
 | 2018-03-23  Zan Dobersek  <zdobersek@igalia.com> | 
 |  | 
 |         Unreviewed build fix for GCC 4.9 builds. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: std::is_trivially_copyable<> isn't | 
 |         supported in 4.9 libstdc++, so wrap the static assert using it in a | 
 |         COMPILER_SUPPORTS() macro, and use __is_trivially_copyable() builtin, | 
 |         as is done in bitwise_cast() in StdLibExtras.h. | 
 |  | 
 | 2018-03-22  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Adopt WK_ALTERNATE_FRAMEWORKS_DIR in WebCore | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183930 | 
 |         <rdar://problem/38782249> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-03-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add placeholder call and jump MacroAssembler emitters that take PtrTag in a register. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183914 | 
 |         <rdar://problem/38763536> | 
 |  | 
 |         Reviewed by Saam Barati and JF Bastien. | 
 |  | 
 |         This is in preparation for supporting pointer profiling work. | 
 |  | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::jump): | 
 |         (JSC::MacroAssemblerARM::call): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::call): | 
 |         (JSC::MacroAssemblerARM64::jump): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::jump): | 
 |         (JSC::MacroAssemblerARMv7::call): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::jump): | 
 |         (JSC::MacroAssemblerMIPS::call): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::call): | 
 |         (JSC::MacroAssemblerX86::jump): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::jump): | 
 |         (JSC::MacroAssemblerX86Common::call): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::call): | 
 |         (JSC::MacroAssemblerX86_64::jump): | 
 |  | 
 | 2018-03-22  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Improve readability of WebCore's OTHER_LDFLAGS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183909 | 
 |         <rdar://problem/38760992> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-22  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] Thumb: Do not decorate bottom bit twice | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183906 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Use MacroAssemblerCodePtr::createFromExecutableAddress instead of | 
 |         MacroAssemblerCodePtr(void*) to avoid decorating the pointer twice as | 
 |         a thumb pointer. | 
 |  | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |  | 
 | 2018-03-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Clear MustGenerate for ToString(Number) converted from NumberToStringWithRadix | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183559 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         When converting NumberToStringWithRadix to ToString(Int52/Int32/Double), we forget | 
 |         to clear NodeMustGenerate for this ToString. It should be since it does not have | 
 |         any user-observable side effect. This patch clears NodeMustGenerate. | 
 |  | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |  | 
 | 2018-03-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] List up all candidates in DFGCapabilities and FTLCapabilities | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183897 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         We should not use `default:` clause here since it accidentally catches | 
 |         the opcode and DFG nodes which should be optimized. For example, | 
 |         op_super_sampler_begin and op_super_sampler_end are not listed while | 
 |         they have DFG and FTL backend. | 
 |  | 
 |         This patch lists up all candiates in DFGCapabilities and FTLCapabilities. | 
 |         And we also clean up unnecessary checks in FTLCapabilities. Since we | 
 |         already handles all the possible array types for these nodes (which can | 
 |         be checked in DFG's code), we do not need to check array types. | 
 |  | 
 |         We also fix FTLLowerDFGToB3' PutByVal code to use modeForPut. | 
 |  | 
 |         * dfg/DFGCapabilities.cpp: | 
 |         (JSC::DFG::capabilityLevel): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal): | 
 |  | 
 | 2018-03-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Drop op_put_by_index | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183899 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch drops op_put_by_index. | 
 |  | 
 |         1. This functionality can be just covered by direct put_by_val. | 
 |         2. put_by_index is not well optimized. It is just calling a C | 
 |         function. And it does not have DFG handling. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/BytecodeUseDef.h: | 
 |         (JSC::computeUsesForBytecodeOffset): | 
 |         (JSC::computeDefsForBytecodeOffset): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::emitPutByIndex): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ArrayNode::emitBytecode): | 
 |         (JSC::ArrayPatternNode::emitDirectBinding): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         * jit/JIT.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_put_by_index): Deleted. | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_put_by_index): Deleted. | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         * llint/LLIntSlowPaths.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |  | 
 | 2018-03-22  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Race Condition in arrayProtoFuncReverse() causes wrong results or crash | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183901 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Added write barriers to ensure the reversed contents are properly marked. | 
 |  | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::arrayProtoFuncReverse): | 
 |  | 
 | 2018-03-21  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         ScopedArguments should do poisoning and index masking | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183863 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |          | 
 |         This outlines the ScopedArguments overflow storage and adds poisoning. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetArrayLength): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitScopedArgumentsGetByVal): | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/ScopedArguments.cpp: | 
 |         (JSC::ScopedArguments::ScopedArguments): | 
 |         (JSC::ScopedArguments::createUninitialized): | 
 |         (JSC::ScopedArguments::visitChildren): | 
 |         * runtime/ScopedArguments.h: | 
 |  | 
 | 2018-03-21  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Refactor the PtrTag list as a macro so that we can auto-generate code that enumerates each PtrTag. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183861 | 
 |         <rdar://problem/38716822> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Also added ptrTagName() to aid debugging.  ptrTagName() is implemented using this | 
 |         new PtrTag macro list. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * runtime/PtrTag.cpp: Added. | 
 |         (JSC::ptrTagName): | 
 |         * runtime/PtrTag.h: | 
 |  | 
 | 2018-03-21  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Use CodeBlock::instructions()[] and CodeBlock::bytecodeOffset() instead of doing own pointer math. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183857 | 
 |         <rdar://problem/38712184> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         We should avoid doing pointer math with CodeBlock::instructions().begin(). | 
 |         Instead, we should use the operator[] that comes with CodeBlock::instructions() | 
 |         for computing an Instruction*, and use CodeBlock::bytecodeOffset() for computing | 
 |         the bytecode offset of a given Instruction*.  These methods will do assertions | 
 |         which helps catch bugs sooner, plus they are more descriptive of the operation | 
 |         we're trying to do. | 
 |  | 
 |         * bytecode/BytecodeKills.h: | 
 |         (JSC::BytecodeKills::operandIsKilled const): | 
 |         (JSC::BytecodeKills::forEachOperandKilledAt const): | 
 |         * bytecode/CallLinkStatus.cpp: | 
 |         (JSC::CallLinkStatus::computeFromLLInt): | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::dumpBytecode): | 
 |         (JSC::CodeBlock::arithProfileForBytecodeOffset): | 
 |         (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::computeFromLLInt): | 
 |         * bytecode/PutByIdStatus.cpp: | 
 |         (JSC::PutByIdStatus::computeFromLLInt): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::reifyInlinedCallFrames): | 
 |         * interpreter/CallFrame.cpp: | 
 |         (JSC::CallFrame::callSiteBitsAsBytecodeOffset const): | 
 |         (JSC::CallFrame::currentVPC const): | 
 |         (JSC::CallFrame::setCurrentVPC): | 
 |         * jit/JITCall.cpp: | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::updateTopCallFrame): | 
 |         (JSC::JIT::copiedInstruction): | 
 |         * 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): | 
 |         * jit/SlowPathCall.h: | 
 |         (JSC::JITSlowPathCall::call): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::llint_trace_operand): | 
 |         (JSC::LLInt::llint_trace_value): | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::setupGetByIdPrototypeCache): Deleted. | 
 |         (JSC::LLInt::getByVal): Deleted. | 
 |         (JSC::LLInt::handleHostCall): Deleted. | 
 |         (JSC::LLInt::setUpCall): Deleted. | 
 |         (JSC::LLInt::genericCall): Deleted. | 
 |         (JSC::LLInt::varargsSetup): Deleted. | 
 |         (JSC::LLInt::llint_throw_stack_overflow_error): Deleted. | 
 |         (JSC::LLInt::llint_stack_check_at_vm_entry): Deleted. | 
 |         (JSC::LLInt::llint_write_barrier_slow): Deleted. | 
 |         (JSC::LLInt::llint_crash): Deleted. | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::tryGetBytecodeIndex): | 
 |  | 
 | 2018-03-21  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         btjs should print the bytecode offset in the stack trace for JS frames | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183856 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * interpreter/CallFrame.cpp: | 
 |         (JSC::CallFrame::bytecodeOffset): | 
 |         (JSC::CallFrame::dump): | 
 |  | 
 | 2018-03-21  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         Unreviewed. Fix GTK and WPE debug build after r229798. | 
 |  | 
 |         Fix a typo in an ASSERT. Also convert several RELEASE_ASSERT to ASSERT that I forgot to do before landing. | 
 |  | 
 |         * API/glib/JSCCallbackFunction.cpp: | 
 |         (JSC::JSCCallbackFunction::JSCCallbackFunction): | 
 |         * API/glib/JSCContext.cpp: | 
 |         (jscContextSetVirtualMachine): | 
 |         (jscContextGetJSContext): | 
 |         (wrapperMap): | 
 |         (jscContextHandleExceptionIfNeeded): | 
 |         * API/glib/JSCValue.cpp: | 
 |         (jscValueCallFunction): | 
 |         * API/glib/JSCVirtualMachine.cpp: | 
 |         (addWrapper): | 
 |         (removeWrapper): | 
 |         (jscVirtualMachineSetContextGroup): | 
 |         (jscVirtualMachineAddContext): | 
 |         (jscVirtualMachineRemoveContext): | 
 |         * API/glib/JSCWrapperMap.cpp: | 
 |         (JSC::WrapperMap::gobjectWrapper): | 
 |         (JSC::WrapperMap::unwrap): | 
 |         (JSC::WrapperMap::registerClass): | 
 |         (JSC::WrapperMap::createJSWrappper): | 
 |         (JSC::WrapperMap::wrappedObject const): | 
 |  | 
 | 2018-03-21  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GTK][WPE] JSC bindings not introspectable | 
 |         https://bugs.webkit.org/show_bug.cgi?id=136989 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Make it possible to include individual headers when building WebKit layer. | 
 |  | 
 |         * API/glib/JSCAutocleanups.h: | 
 |         * API/glib/JSCClass.h: | 
 |         * API/glib/JSCContext.h: | 
 |         * API/glib/JSCException.h: | 
 |         * API/glib/JSCValue.h: | 
 |         * API/glib/JSCVersion.h.in: | 
 |         * API/glib/JSCVirtualMachine.h: | 
 |  | 
 | 2018-03-21  Carlos Garcia Campos  <cgarcia@igalia.com> | 
 |  | 
 |         [GTK][WPE] Initial implementation of JavaScriptCore glib bindings | 
 |         https://bugs.webkit.org/show_bug.cgi?id=164061 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Add initial GLib API for JavaScriptCore. | 
 |  | 
 |         * API/JSAPIWrapperObject.h: | 
 |         * API/glib/JSAPIWrapperObjectGLib.cpp: Added. | 
 |         (jsAPIWrapperObjectHandleOwner): | 
 |         (JSAPIWrapperObjectHandleOwner::finalize): | 
 |         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots): | 
 |         (JSC::JSCallbackObject<JSAPIWrapperObject>::createStructure): | 
 |         (JSC::JSAPIWrapperObject::JSAPIWrapperObject): | 
 |         (JSC::JSAPIWrapperObject::finishCreation): | 
 |         (JSC::JSAPIWrapperObject::setWrappedObject): | 
 |         (JSC::JSAPIWrapperObject::visitChildren): | 
 |         * API/glib/JSCAutocleanups.h: Added. | 
 |         * API/glib/JSCCallbackFunction.cpp: Added. | 
 |         (JSC::callAsFunction): | 
 |         (JSC::callAsConstructor): | 
 |         (JSC::JSCCallbackFunction::create): | 
 |         (JSC::JSCCallbackFunction::JSCCallbackFunction): | 
 |         (JSC::JSCCallbackFunction::call): | 
 |         (JSC::JSCCallbackFunction::construct): | 
 |         (JSC::JSCCallbackFunction::destroy): | 
 |         * API/glib/JSCCallbackFunction.h: Added. | 
 |         (JSC::JSCCallbackFunction::createStructure): | 
 |         (JSC::JSCCallbackFunction::functionCallback): | 
 |         (JSC::JSCCallbackFunction::constructCallback): | 
 |         * API/glib/JSCClass.cpp: Added. | 
 |         (jscClassGetProperty): | 
 |         (jscClassSetProperty): | 
 |         (jscClassDispose): | 
 |         (jscClassConstructed): | 
 |         (jsc_class_class_init): | 
 |         (jscClassCreate): | 
 |         (jscClassGetJSClass): | 
 |         (jscClassGetOrCreateJSWrapper): | 
 |         (jscClassInvalidate): | 
 |         (jsc_class_get_name): | 
 |         (jsc_class_get_parent): | 
 |         (jsc_class_add_constructor): | 
 |         (jsc_class_add_method): | 
 |         (jsc_class_add_property): | 
 |         * API/glib/JSCClass.h: Added. | 
 |         * API/glib/JSCClassPrivate.h: Added. | 
 |         * API/glib/JSCContext.cpp: Added. | 
 |         (ExceptionHandler::ExceptionHandler): | 
 |         (ExceptionHandler::~ExceptionHandler): | 
 |         (jscContextSetVirtualMachine): | 
 |         (jscContextGetProperty): | 
 |         (jscContextSetProperty): | 
 |         (jscContextConstructed): | 
 |         (jscContextDispose): | 
 |         (jsc_context_class_init): | 
 |         (jscContextGetOrCreate): | 
 |         (jscContextGetJSContext): | 
 |         (wrapperMap): | 
 |         (jscContextGetOrCreateValue): | 
 |         (jscContextValueDestroyed): | 
 |         (jscContextGetJSWrapper): | 
 |         (jscContextGetOrCreateJSWrapper): | 
 |         (jscContextWrappedObject): | 
 |         (jscContextPushCallback): | 
 |         (jscContextPopCallback): | 
 |         (jscContextGArrayToJSArray): | 
 |         (jscContextJSArrayToGArray): | 
 |         (jscContextGValueToJSValue): | 
 |         (jscContextJSValueToGValue): | 
 |         (jsc_context_new): | 
 |         (jsc_context_new_with_virtual_machine): | 
 |         (jsc_context_get_virtual_machine): | 
 |         (jsc_context_get_exception): | 
 |         (jsc_context_throw): | 
 |         (jsc_context_throw_exception): | 
 |         (jsc_context_push_exception_handler): | 
 |         (jsc_context_pop_exception_handler): | 
 |         (jscContextHandleExceptionIfNeeded): | 
 |         (jsc_context_get_current): | 
 |         (jsc_context_evaluate): | 
 |         (jsc_context_evaluate_with_source_uri): | 
 |         (jsc_context_set_value): | 
 |         (jsc_context_get_value): | 
 |         (jsc_context_register_class): | 
 |         * API/glib/JSCContext.h: Added. | 
 |         * API/glib/JSCContextPrivate.h: Added. | 
 |         * API/glib/JSCDefines.h: Copied from Source/JavaScriptCore/API/JSAPIWrapperObject.h. | 
 |         * API/glib/JSCException.cpp: Added. | 
 |         (jscExceptionDispose): | 
 |         (jsc_exception_class_init): | 
 |         (jscExceptionCreate): | 
 |         (jscExceptionGetJSValue): | 
 |         (jscExceptionEnsureProperties): | 
 |         (jsc_exception_new): | 
 |         (jsc_exception_get_message): | 
 |         (jsc_exception_get_line_number): | 
 |         (jsc_exception_get_source_uri): | 
 |         * API/glib/JSCException.h: Added. | 
 |         * API/glib/JSCExceptionPrivate.h: Added. | 
 |         * API/glib/JSCGLibWrapperObject.h: Added. | 
 |         (JSC::JSCGLibWrapperObject::JSCGLibWrapperObject): | 
 |         (JSC::JSCGLibWrapperObject::~JSCGLibWrapperObject): | 
 |         (JSC::JSCGLibWrapperObject::object const): | 
 |         * API/glib/JSCValue.cpp: Added. | 
 |         (jscValueGetProperty): | 
 |         (jscValueSetProperty): | 
 |         (jscValueDispose): | 
 |         (jsc_value_class_init): | 
 |         (jscValueGetJSValue): | 
 |         (jscValueCreate): | 
 |         (jsc_value_get_context): | 
 |         (jsc_value_new_undefined): | 
 |         (jsc_value_is_undefined): | 
 |         (jsc_value_new_null): | 
 |         (jsc_value_is_null): | 
 |         (jsc_value_new_number): | 
 |         (jsc_value_is_number): | 
 |         (jsc_value_to_double): | 
 |         (jsc_value_to_int32): | 
 |         (jsc_value_new_boolean): | 
 |         (jsc_value_is_boolean): | 
 |         (jsc_value_to_boolean): | 
 |         (jsc_value_new_string): | 
 |         (jsc_value_is_string): | 
 |         (jsc_value_to_string): | 
 |         (jsc_value_new_array): | 
 |         (jsc_value_new_array_from_garray): | 
 |         (jsc_value_is_array): | 
 |         (jsc_value_new_object): | 
 |         (jsc_value_is_object): | 
 |         (jsc_value_object_is_instance_of): | 
 |         (jsc_value_object_set_property): | 
 |         (jsc_value_object_get_property): | 
 |         (jsc_value_object_set_property_at_index): | 
 |         (jsc_value_object_get_property_at_index): | 
 |         (jscValueCallFunction): | 
 |         (jsc_value_object_invoke_method): | 
 |         (jsc_value_object_define_property_data): | 
 |         (jsc_value_object_define_property_accessor): | 
 |         (jsc_value_new_function): | 
 |         (jsc_value_is_function): | 
 |         (jsc_value_function_call): | 
 |         (jsc_value_is_constructor): | 
 |         (jsc_value_constructor_call): | 
 |         * API/glib/JSCValue.h: Added. | 
 |         * API/glib/JSCValuePrivate.h: Added. | 
 |         * API/glib/JSCVersion.cpp: Added. | 
 |         (jsc_get_major_version): | 
 |         (jsc_get_minor_version): | 
 |         (jsc_get_micro_version): | 
 |         * API/glib/JSCVersion.h.in: Added. | 
 |         * API/glib/JSCVirtualMachine.cpp: Added. | 
 |         (addWrapper): | 
 |         (removeWrapper): | 
 |         (jscVirtualMachineSetContextGroup): | 
 |         (jscVirtualMachineEnsureContextGroup): | 
 |         (jscVirtualMachineDispose): | 
 |         (jsc_virtual_machine_class_init): | 
 |         (jscVirtualMachineGetOrCreate): | 
 |         (jscVirtualMachineGetContextGroup): | 
 |         (jscVirtualMachineAddContext): | 
 |         (jscVirtualMachineRemoveContext): | 
 |         (jscVirtualMachineGetContext): | 
 |         (jsc_virtual_machine_new): | 
 |         * API/glib/JSCVirtualMachine.h: Added. | 
 |         * API/glib/JSCVirtualMachinePrivate.h: Added. | 
 |         * API/glib/JSCWrapperMap.cpp: Added. | 
 |         (JSC::WrapperMap::WrapperMap): | 
 |         (JSC::WrapperMap::~WrapperMap): | 
 |         (JSC::WrapperMap::gobjectWrapper): | 
 |         (JSC::WrapperMap::unwrap): | 
 |         (JSC::WrapperMap::registerClass): | 
 |         (JSC::WrapperMap::createJSWrappper): | 
 |         (JSC::WrapperMap::jsWrapper const): | 
 |         (JSC::WrapperMap::wrappedObject const): | 
 |         * API/glib/JSCWrapperMap.h: Added. | 
 |         * API/glib/docs/jsc-glib-4.0-sections.txt: Added. | 
 |         * API/glib/docs/jsc-glib-4.0.types: Added. | 
 |         * API/glib/docs/jsc-glib-docs.sgml: Added. | 
 |         * API/glib/jsc.h: Added. | 
 |         * CMakeLists.txt: | 
 |         * GLib.cmake: Added. | 
 |         * JavaScriptCore.gir.in: Removed. | 
 |         * PlatformGTK.cmake: | 
 |         * PlatformWPE.cmake: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::releaseDelayedReleasedObjects): | 
 |         * heap/Heap.h: | 
 |         * heap/HeapInlines.h: | 
 |         (JSC::Heap::releaseSoon): | 
 |         * javascriptcoregtk.pc.in: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         (JSC::JSGlobalObject::setWrapperMap): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::glibCallbackFunctionStructure const): | 
 |         (JSC::JSGlobalObject::glibWrapperObjectStructure const): | 
 |         (JSC::JSGlobalObject::wrapperMap const): | 
 |  | 
 | 2018-03-21  Christopher Reid  <chris.reid@sony.com> | 
 |  | 
 |         Windows 64-bit build fix after r229767 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183810 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Removing an extra parameter in the call to m_assember::call. | 
 |  | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |  | 
 | 2018-03-20  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         [Xcode] JSVALUE_MODEL is unused | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183809 | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         * Configurations/JavaScriptCore.xcconfig: Removed the unused definition. | 
 |  | 
 | 2018-03-20  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Update the install name for JavaScriptCore when built with WK_ALTERNATE_FRAMEWORKS_DIR | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183808 | 
 |         <rdar://problem/38692079> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/JavaScriptCore.xcconfig: | 
 |  | 
 | 2018-03-20  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Enable the minimal simulator feature flag when appropriate | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183807 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-20  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         We need to do proper bookkeeping of exitOK when inserting constants when sinking NewArrayBuffer | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183795 | 
 |         <rdar://problem/38298694> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         We were just assuming that the constants we were inserting were | 
 |         always exitOK=true. However, this breaks validation. The exitOK | 
 |         we emit for the constants in the NewArrayBuffer should respect | 
 |         the current exit state of the IR we've emitted. This is just IR | 
 |         bookkeeping since JSConstant is a non-exiting node. | 
 |  | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |  | 
 | 2018-03-20  Guillaume Emont  <guijemont@igalia.com> | 
 |  | 
 |         MIPS+Armv7 builds are broken since r229391 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183474 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Add missing armv7 and mips operations and fix arguments to a call to | 
 |         operationGetByValCell. This should fix compilation on MIPS and Armv7 | 
 |         (though it does not implement the missing setupArguments stuff in | 
 |         CCallHelpers). | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::swap): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::swap): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * jit/FPRInfo.h: | 
 |  | 
 | 2018-03-20  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Add and adopt WK_PLATFORM_NAME and adjust default feature defines | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183758 | 
 |         <rdar://problem/38017644> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-20  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Improve FunctionPtr and use it in the JIT CallRecord. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183756 | 
 |         <rdar://problem/38641335> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         1. FunctionPtr hold a C/C++ function pointer by default.  Change its default | 
 |            PtrTag to reflect that. | 
 |  | 
 |         2. Delete the FunctionPtr::value() method.  It is effectively a duplicate of | 
 |            executableAddress(). | 
 |  | 
 |         3. Fix the FunctionPtr constructor that takes arbitrary pointers to be able to | 
 |            take "any" pointer.  "any" in this case means that the pointer may not be typed | 
 |            as a C/C++ function to the C++ compiler (due to upstream casting or usage of | 
 |            void* as a storage type), but it is still expected to be pointing to a C/C++ | 
 |            function. | 
 |  | 
 |         4. Added a FunctionPtr constructor that takes another FunctionPtr.  This is a | 
 |            convenience constructor that lets us retag the underlying pointer.  The other | 
 |            FunctionPtr is still expected to point to a C/C++ function. | 
 |  | 
 |         5. Added PtrTag assertion placeholder functions to be implemented later. | 
 |  | 
 |         6. Change the JIT CallRecord to embed a FunctionPtr callee instead of a void* to | 
 |            pointer.  This improves type safety, and assists in getting pointer tagging | 
 |            right later. | 
 |  | 
 |         7. Added versions of JIT callOperations methods that will take a PtrTag. | 
 |            This is preparation for more more pointer tagging work later. | 
 |  | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::linkCall): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::linkCall): | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::FunctionPtr::FunctionPtr): | 
 |         (JSC::FunctionPtr::operator bool const): | 
 |         (JSC::FunctionPtr::operator! const): | 
 |         (JSC::ReturnAddressPtr::ReturnAddressPtr): | 
 |         (JSC::MacroAssemblerCodePtr::retagged const): | 
 |         (JSC::MacroAssemblerCodeRef::retaggedCode const): | 
 |         (JSC::FunctionPtr::value const): Deleted. | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::linkCall): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::linkCall): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::callWithSlowPathReturnType): | 
 |         (JSC::MacroAssemblerX86_64::linkCall): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * ftl/FTLSlowPathCall.cpp: | 
 |         (JSC::FTL::SlowPathCallContext::makeCall): | 
 |         * ftl/FTLSlowPathCall.h: | 
 |         (JSC::FTL::callOperation): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::osrExitGenerationThunkGenerator): | 
 |         (JSC::FTL::lazySlowPathGenerationThunkGenerator): | 
 |         (JSC::FTL::slowPathCallThunkGenerator): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::link): | 
 |         (JSC::JIT::privateCompileExceptionHandlers): | 
 |         * jit/JIT.h: | 
 |         (JSC::CallRecord::CallRecord): | 
 |         (JSC::JIT::appendCall): | 
 |         (JSC::JIT::appendCallWithSlowPathReturnType): | 
 |         (JSC::JIT::callOperation): | 
 |         (JSC::JIT::callOperationWithProfile): | 
 |         (JSC::JIT::callOperationWithResult): | 
 |         (JSC::JIT::callOperationNoExceptionCheck): | 
 |         (JSC::JIT::callOperationWithCallFrameRollbackOnException): | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emitMathICFast): | 
 |         (JSC::JIT::emitMathICSlow): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::emitNakedCall): | 
 |         (JSC::JIT::emitNakedTailCall): | 
 |         (JSC::JIT::appendCallWithExceptionCheck): | 
 |         (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): | 
 |         (JSC::JIT::appendCallWithCallFrameRollbackOnException): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jit/SlowPathCall.h: | 
 |         (JSC::JITSlowPathCall::JITSlowPathCall): | 
 |         (JSC::JITSlowPathCall::call): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::nativeForGenerator): | 
 |         * runtime/PtrTag.h: | 
 |         (JSC::nextPtrTagID): | 
 |         (JSC::assertIsCFunctionPtr): | 
 |         (JSC::assertIsNullOrCFunctionPtr): | 
 |         (JSC::assertIsNotTagged): | 
 |         (JSC::assertIsTagged): | 
 |         (JSC::assertIsNullOrTagged): | 
 |         (JSC::assertIsTaggedWith): | 
 |         (JSC::assertIsNullOrTaggedWith): | 
 |         (JSC::uniquePtrTagID): Deleted. | 
 |  | 
 | 2018-03-20  Stanislav Ocovaj  <stanislav.ocovaj@rt-rk.com> | 
 |  | 
 |         [MIPS] Optimize generated JIT code for loads/stores | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183243 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         JIT generates three MIPS instructions for a load/store from/to an absolute address: | 
 |  | 
 |           lui adrTmpReg, address >> 16 | 
 |           ori adrTmpReg, address & 0xffff | 
 |           lw dataReg, 0(adrTmpReg) | 
 |  | 
 |         Since load/store instructions on MIPS have a 16-bit offset, lower 16 bits of the address can | 
 |         be encoded into the load/store and ori instruction can be removed: | 
 |  | 
 |           lui adrTmpReg, (address + 0x8000) >> 16 | 
 |           lw dataReg, (address & 0xffff)(adrTmpReg) | 
 |  | 
 |         Also, in loads/stores with BaseIndex address, the left shift can be omitted if address.scale is 0. | 
 |  | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::add32): | 
 |         (JSC::MacroAssemblerMIPS::add64): | 
 |         (JSC::MacroAssemblerMIPS::or32): | 
 |         (JSC::MacroAssemblerMIPS::sub32): | 
 |         (JSC::MacroAssemblerMIPS::convertibleLoadPtr): | 
 |         (JSC::MacroAssemblerMIPS::load8): | 
 |         (JSC::MacroAssemblerMIPS::load8SignedExtendTo32): | 
 |         (JSC::MacroAssemblerMIPS::load32): | 
 |         (JSC::MacroAssemblerMIPS::store8): | 
 |         (JSC::MacroAssemblerMIPS::store32): | 
 |         (JSC::MacroAssemblerMIPS::branchTest8): | 
 |         (JSC::MacroAssemblerMIPS::branchAdd32): | 
 |         (JSC::MacroAssemblerMIPS::loadDouble): | 
 |         (JSC::MacroAssemblerMIPS::storeDouble): | 
 |  | 
 | 2018-03-16  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] Add vectorLengthHint for NewArray | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183694 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         While the following code is a common, it is not so efficient. | 
 |  | 
 |         var array = []; | 
 |         for (...) { | 
 |             ... | 
 |             array.push(...); | 
 |         } | 
 |  | 
 |         The array is always allocated with 0 vector length. And it is eventually grown. | 
 |  | 
 |         We have ArrayAllocationProfile, and it tells us that the vector length hint for | 
 |         the allocated arrays. This hint is already used for NewArrayBuffer. This patch | 
 |         extends this support for NewArray DFG node. | 
 |  | 
 |         This patch improves Kraken/stanford-crypto-aes 4%. | 
 |  | 
 |                                       baseline                  patched | 
 |  | 
 |         stanford-crypto-aes        64.069+-1.352             61.589+-1.274           might be 1.0403x faster | 
 |  | 
 |         NewArray can be optimized. | 
 |  | 
 |                                                        baseline                  patched | 
 |  | 
 |         vector-length-hint-new-array               21.8157+-0.0882     ^     13.1764+-0.0942        ^ definitely 1.6557x faster | 
 |         vector-length-hint-array-constructor       21.9076+-0.0987     ?     22.1168+-0.4814        ? | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction): | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasVectorLengthHint): | 
 |         (JSC::DFG::Node::vectorLengthHint): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewArray): | 
 |  | 
 | 2018-03-13  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] Make ArraySlice(0) code tight | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183590 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch tightens ArraySlice code, in particular, startIndex = 0 case. | 
 |  | 
 |         1. We support array.slice() call. This is a well-used way to clone array. | 
 |         For example, underscore.js uses this technique. | 
 |  | 
 |         2. We remove several checks if the given index value is a proven constant. | 
 |  | 
 |         * dfg/DFGBackwardsPropagationPhase.cpp: | 
 |         (JSC::DFG::BackwardsPropagationPhase::propagate): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitPopulateSliceIndex): | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |         We can skip some of checks if the given value is a proven constant. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice): | 
 |         Change below to belowOrEqual. It does not change meaning in the code. But it allows us | 
 |         to fold BelowEqual(0, x) to true. | 
 |  | 
 | 2018-03-19  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Drop s_exceptionInstructions static initializer | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183732 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         Make Instruction constructor constexpr to drop the static constructor | 
 |         of LLInt::Data::s_exceptionInstructions. | 
 |  | 
 |         * bytecode/Instruction.h: | 
 |         (JSC::Instruction::Instruction): | 
 |  | 
 | 2018-03-19  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         Investigate why __cpu_indicator_init is used | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183736 | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         __cpu_indicator_init, which is a global initializer, was included in JavaScriptCore because | 
 |         we were passing the -all_load option to the linker, causing it to bring in all members of | 
 |         every static library being linked in, including the compiler runtime library. We only need | 
 |         to load all members of WTF. The linker option for doing that is -force_load, and it requires | 
 |         a path to the library. To support building against libWTF.a built locally as well as against | 
 |         the copy that is in the SDK, we add a script build phase that palces a symbolic link to the | 
 |         appropriate libWTF.a under the DerivedSources directory, and pass the path to that symlink | 
 |         to the linker. Also, while cleaning up linker flags, make OTHER_LDFLAGS_HIDE_SYMBOLS less | 
 |         verbose by eliminating every other -Wl, remove redundant -lobjc (libobjc is already listed | 
 |         in the Link Binary With Libraries build phase), remove long-unsupported -Y,3, and stop | 
 |         reexporting libobjc. | 
 |  | 
 |         * Configurations/JavaScriptCore.xcconfig: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-03-19  Jiewen Tan  <jiewen_tan@apple.com> | 
 |  | 
 |         Unreviewed, another quick fix for r229699 | 
 |  | 
 |         Restricts ENABLE_WEB_AUTHN to only macOS and iOS. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-19  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         FunctionPtr should be passed by value. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183746 | 
 |         <rdar://problem/38625311> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         It's meant to be an encapsulation of a C/C++ function pointer.  There are cases | 
 |         where we use it to pass JIT compiled code (e.g. the VM thunks/stubs), but they are | 
 |         treated as if they are C/C++ functions. | 
 |  | 
 |         Regardless, there's no need to pass it by reference. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::appendCall): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::appendCall): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): | 
 |         (JSC::DFG::SpeculativeJIT::appendCallSetResult): | 
 |         * jit/JIT.h: | 
 |         (JSC::JIT::appendCall): | 
 |         (JSC::JIT::appendCallWithSlowPathReturnType): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::appendCallWithExceptionCheck): | 
 |         (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): | 
 |         (JSC::JIT::appendCallWithCallFrameRollbackOnException): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): | 
 |         (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): | 
 |  | 
 | 2018-03-15  Ross Kirsling  <ross.kirsling@sony.com> | 
 |  | 
 |         Fix MSVC run-time check after r229391.  | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183673 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Replaces attempted fix from r229424/r229432. | 
 |         Apparently MSVC doesn't like it when a zero-length std::array is defined without explicit braces. | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::clampArrayToSize): | 
 |  | 
 | 2018-03-15  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in ANGLE | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183675 | 
 |         <rdar://problem/38515281> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         Don't install the JSC alias if we're installing to an alternate location. | 
 |         This should have been a part of r229637. | 
 |  | 
 | 2018-03-15  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in JavaScriptCore | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183649 | 
 |         <rdar://problem/38480526> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |  | 
 | 2018-03-14  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Enhance the MacroAssembler and LinkBuffer to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183623 | 
 |         <rdar://problem/38443314> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         1. Added a PtrTag argument to indirect call() and indirect jump() MacroAssembler | 
 |            emitters to support pointer profiling. | 
 |  | 
 |         2. Also added tagPtr(), untagPtr(), and removePtrTag() placeholder methods. | 
 |  | 
 |         3. Added a PtrTag to LinkBuffer finalizeCodeWithoutDisassembly() and clients. | 
 |  | 
 |         4. Updated clients to pass a PtrTag.  For the most part, I just apply NoPtrTag as | 
 |            a placeholder until we have time to analyze what pointer profile each client | 
 |            site has later. | 
 |      | 
 |         5. Apply PtrTags to the YarrJIT. | 
 |  | 
 |         * assembler/ARM64Assembler.h: | 
 |         (JSC::ARM64Assembler::linkJumpOrCall): | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::getLinkerAddress): | 
 |         (JSC::AbstractMacroAssembler::tagPtr): | 
 |         (JSC::AbstractMacroAssembler::untagPtr): | 
 |         (JSC::AbstractMacroAssembler::removePtrTag): | 
 |         * assembler/LinkBuffer.cpp: | 
 |         (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): | 
 |         (JSC::LinkBuffer::finalizeCodeWithDisassembly): | 
 |         * assembler/LinkBuffer.h: | 
 |         (JSC::LinkBuffer::link): | 
 |         (JSC::LinkBuffer::locationOfNearCall): | 
 |         (JSC::LinkBuffer::locationOf): | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::jump): | 
 |         (JSC::MacroAssemblerARM::call): | 
 |         (JSC::MacroAssemblerARM::readCallTarget): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::call): | 
 |         (JSC::MacroAssemblerARM64::jump): | 
 |         (JSC::MacroAssemblerARM64::readCallTarget): | 
 |         (JSC::MacroAssemblerARM64::linkCall): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::jump): | 
 |         (JSC::MacroAssemblerARMv7::relativeTableJump): | 
 |         (JSC::MacroAssemblerARMv7::call): | 
 |         (JSC::MacroAssemblerARMv7::readCallTarget): | 
 |         * assembler/MacroAssemblerCodeRef.cpp: | 
 |         (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): | 
 |         (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::FunctionPtr::FunctionPtr): | 
 |         (JSC::FunctionPtr::value const): | 
 |         (JSC::MacroAssemblerCodePtr:: const): | 
 |         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): | 
 |         (JSC::MacroAssemblerCodeRef::retaggedCode const): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::jump): | 
 |         (JSC::MacroAssemblerMIPS::call): | 
 |         (JSC::MacroAssemblerMIPS::readCallTarget): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::call): | 
 |         (JSC::MacroAssemblerX86::jump): | 
 |         (JSC::MacroAssemblerX86::readCallTarget): | 
 |         * assembler/MacroAssemblerX86Common.cpp: | 
 |         (JSC::MacroAssembler::probe): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::jump): | 
 |         (JSC::MacroAssemblerX86Common::call): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::call): | 
 |         (JSC::MacroAssemblerX86_64::jump): | 
 |         (JSC::MacroAssemblerX86_64::readCallTarget): | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::compile): | 
 |         (JSC::invoke): | 
 |         * b3/B3Compile.cpp: | 
 |         (JSC::B3::compile): | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/air/AirCCallSpecial.cpp: | 
 |         (JSC::B3::Air::CCallSpecial::generate): | 
 |         * b3/air/testair.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::invoke): | 
 |         (JSC::B3::testInterpreter): | 
 |         (JSC::B3::testEntrySwitchSimple): | 
 |         (JSC::B3::testEntrySwitchNoEntrySwitch): | 
 |         (JSC::B3::testEntrySwitchWithCommonPaths): | 
 |         (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): | 
 |         (JSC::B3::testEntrySwitchLoop): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCaseSnippetParams.cpp: | 
 |         (JSC::SlowPathCallGeneratorWithArguments::generateImpl): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::linkCodeInline): | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::AccessGenerationState::emitExplicitExceptionHandler): | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::compileExceptionHandlers): | 
 |         (JSC::DFG::JITCompiler::link): | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         (JSC::DFG::JITCompiler::noticeCatchEntrypoint): | 
 |         * dfg/DFGJITCompiler.h: | 
 |         (JSC::DFG::JITCompiler::appendCall): | 
 |         * dfg/DFGJITFinalizer.cpp: | 
 |         (JSC::DFG::JITFinalizer::finalize): | 
 |         (JSC::DFG::JITFinalizer::finalizeFunction): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::emitRestoreArguments): | 
 |         (JSC::DFG::OSRExit::compileOSRExit): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::handleExitCounts): | 
 |         (JSC::DFG::osrWriteBarrier): | 
 |         (JSC::DFG::adjustAndJumpToTarget): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchImm): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrExitThunkGenerator): | 
 |         (JSC::DFG::osrExitGenerationThunkGenerator): | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * ftl/FTLCompile.cpp: | 
 |         (JSC::FTL::compile): | 
 |         * ftl/FTLJITFinalizer.cpp: | 
 |         (JSC::FTL::JITFinalizer::finalizeCommon): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::generate): | 
 |         * ftl/FTLLink.cpp: | 
 |         (JSC::FTL::link): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lower): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileStub): | 
 |         (JSC::FTL::compileFTLOSRExit): | 
 |         * ftl/FTLSlowPathCall.cpp: | 
 |         (JSC::FTL::SlowPathCallContext::makeCall): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::genericGenerationThunkGenerator): | 
 |         (JSC::FTL::osrExitGenerationThunkGenerator): | 
 |         (JSC::FTL::lazySlowPathGenerationThunkGenerator): | 
 |         (JSC::FTL::slowPathCallThunkGenerator): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::callExceptionFuzz): | 
 |         (JSC::AssemblyHelpers::debugCall): | 
 |         * jit/CCallHelpers.cpp: | 
 |         (JSC::CCallHelpers::ensureShadowChickenPacket): | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::jumpToExceptionHandler): | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::emitEnterOptimizationCheck): | 
 |         (JSC::JIT::link): | 
 |         (JSC::JIT::privateCompileExceptionHandlers): | 
 |         * jit/JIT.h: | 
 |         (JSC::JIT::appendCall): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_catch): | 
 |         (JSC::JIT::emit_op_switch_imm): | 
 |         (JSC::JIT::emit_op_switch_char): | 
 |         (JSC::JIT::emit_op_switch_string): | 
 |         (JSC::JIT::emitSlow_op_loop_hint): | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_catch): | 
 |         (JSC::JIT::emit_op_switch_imm): | 
 |         (JSC::JIT::emit_op_switch_char): | 
 |         (JSC::JIT::emit_op_switch_string): | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::privateCompileGetByVal): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         * jit/JITStubRoutine.h: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::readCallTarget): | 
 |         (JSC::appropriateOptimizingPutByIdFunction): | 
 |         (JSC::linkPolymorphicCall): | 
 |         (JSC::resetPutByID): | 
 |         * jit/SlowPathCall.h: | 
 |         (JSC::JITSlowPathCall::call): | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::finalize): | 
 |         (JSC::SpecializedThunkJIT::callDoubleToDouble): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::slowPathFor): | 
 |         (JSC::linkCallThunkGenerator): | 
 |         (JSC::linkPolymorphicCallThunkGenerator): | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::arityFixupGenerator): | 
 |         (JSC::unreachableGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * llint/LLIntThunks.cpp: | 
 |         (JSC::LLInt::generateThunkWithJumpTo): | 
 |         (JSC::LLInt::functionForCallEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructEntryThunkGenerator): | 
 |         (JSC::LLInt::functionForCallArityCheckThunkGenerator): | 
 |         (JSC::LLInt::functionForConstructArityCheckThunkGenerator): | 
 |         (JSC::LLInt::evalEntryThunkGenerator): | 
 |         (JSC::LLInt::programEntryThunkGenerator): | 
 |         (JSC::LLInt::moduleProgramEntryThunkGenerator): | 
 |         * runtime/PtrTag.h: | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::addCall): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::complete): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::throwExceptionFromWasmThunkGenerator): | 
 |         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): | 
 |         (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): | 
 |         (JSC::Yarr::YarrGenerator::generateTryReadUnicodeCharacterHelper): | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |         (JSC::Yarr::YarrGenerator::YarrGenerator): | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |         (JSC::Yarr::jitCompile): | 
 |         * yarr/YarrJIT.h: | 
 |         (JSC::Yarr::YarrCodeBlock::execute): | 
 |  | 
 | 2018-03-14  Caitlin Potter  <caitp@igalia.com> | 
 |  | 
 |         [JSC] fix order of evaluation for ClassDefinitionEvaluation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183523 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Computed property names need to be evaluated in source order during class | 
 |         definition evaluation, as it's observable (and specified to work this way). | 
 |  | 
 |         This change improves compatibility with Chromium. | 
 |  | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         (JSC::BytecodeGenerator::emitDefineClassElements): | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::PropertyListNode::emitBytecode): | 
 |         (JSC::ClassExprNode::emitBytecode): | 
 |         * parser/ASTBuilder.h: | 
 |         (JSC::ASTBuilder::createClassExpr): | 
 |         (JSC::ASTBuilder::createGetterOrSetterProperty): | 
 |         (JSC::ASTBuilder::createProperty): | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::PropertyNode::PropertyNode): | 
 |         (JSC::ClassExprNode::ClassExprNode): | 
 |         * parser/Nodes.cpp: | 
 |         (JSC::PropertyListNode::hasStaticallyNamedProperty): | 
 |         * parser/Nodes.h: | 
 |         (JSC::PropertyNode::isClassProperty const): | 
 |         (JSC::PropertyNode::isStaticClassProperty const): | 
 |         (JSC::PropertyNode::isInstanceClassProperty const): | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseClass): | 
 |         (JSC::Parser<LexerType>::parseProperty): | 
 |         (JSC::Parser<LexerType>::parseGetterSetter): | 
 |         * parser/Parser.h: | 
 |         * parser/SyntaxChecker.h: | 
 |         (JSC::SyntaxChecker::createClassExpr): | 
 |         (JSC::SyntaxChecker::createProperty): | 
 |         (JSC::SyntaxChecker::createGetterOrSetterProperty): | 
 |  | 
 | 2018-03-14  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Move jsc CLI breakpoint function to $vm | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183512 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionBreakpoint): Deleted. | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionBreakpoint): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-03-14  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Fix the build after r229567 | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: speculative build fix for WinCairo. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183573 | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/NativeFunction.h: | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |  | 
 | 2018-03-12  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix obsolete ASSERT | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183310 | 
 |  | 
 |         Now NewObject can be conereted from CallObjectConstructor and CreateThis. | 
 |  | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToNewObject): | 
 |  | 
 | 2018-03-12  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Stop using SDK conditionals to control feature definitions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183430 | 
 |         <rdar://problem/38251619> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         * Configurations/WebKitTargetConditionals.xcconfig: Renamed. | 
 |  | 
 | 2018-03-12  Yoav Weiss  <yoav@yoav.ws> | 
 |  | 
 |         Runtime flag for link prefetch and remove link subresource. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183540 | 
 |  | 
 |         Reviewed by Chris Dumez. | 
 |  | 
 |         Remove the LINK_PREFETCH build time flag. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: speculative build fix for Windows. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183573 | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/NativeFunction.h: | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |  | 
 | 2018-03-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add another PtrTag. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183580 | 
 |         <rdar://problem/38390584> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * runtime/PtrTag.h: | 
 |  | 
 | 2018-03-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Make a NativeFunction into a class to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183573 | 
 |         <rdar://problem/38384697> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         1. NativeFunction is now a class, and introducing RawNativeFunction and | 
 |            TaggedNativeFunction. | 
 |  | 
 |            RawNativeFunction is the raw pointer type (equivalent | 
 |            to the old definition of NativeFunction).  This is mainly used for underlying | 
 |            storage inside the NativeFunction class, and also for global data tables that | 
 |            cannot embed non-trivially constructed objects. | 
 |  | 
 |            NativeFunction's role is mainly to encapsulate a pointer to a C function that | 
 |            we pass into the VM. | 
 |  | 
 |            TaggedNativeFunction encapsulates the tagged version of a pointer to a C | 
 |            function that we track in the VM. | 
 |  | 
 |         2. Added a convenience constructor for TrustedImmPtr so that we don't have to | 
 |            cast function pointers to void* anymore when constructing a TrustedImmPtr. | 
 |  | 
 |         3. Removed the unused CALL_RETURN macro in CommonSlowPaths.cpp. | 
 |  | 
 |         4. Added more PtrTag utility functions. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr): | 
 |         * create_hash_table: | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::executeCall): | 
 |         (JSC::Interpreter::executeConstruct): | 
 |         * interpreter/InterpreterInlines.h: | 
 |         (JSC::Interpreter::getOpcodeID): | 
 |         * jit/JITThunks.cpp: | 
 |         (JSC::JITThunks::hostFunctionStub): | 
 |         * jit/JITThunks.h: | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter.cpp: | 
 |         (JSC::CLoop::execute): | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/ast.rb: | 
 |         * runtime/CallData.h: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         * runtime/ConstructData.h: | 
 |         * runtime/InternalFunction.h: | 
 |         (JSC::InternalFunction::nativeFunctionFor): | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::getCallData): | 
 |         (JSC::JSCell::getConstructData): | 
 |         * runtime/JSFunction.h: | 
 |         * runtime/JSFunctionInlines.h: | 
 |         (JSC::JSFunction::nativeFunction): | 
 |         (JSC::JSFunction::nativeConstructor): | 
 |         (JSC::isHostFunction): | 
 |         * runtime/Lookup.h: | 
 |         (JSC::HashTableValue::function const): | 
 |         (JSC::HashTableValue::accessorGetter const): | 
 |         (JSC::HashTableValue::accessorSetter const): | 
 |         (JSC::nonCachingStaticFunctionGetter): | 
 |         * runtime/NativeExecutable.cpp: | 
 |         (JSC::NativeExecutable::create): | 
 |         (JSC::NativeExecutable::NativeExecutable): | 
 |         * runtime/NativeExecutable.h: | 
 |         * runtime/NativeFunction.h: Added. | 
 |         (JSC::NativeFunction::NativeFunction): | 
 |         (JSC::NativeFunction::operator intptr_t const): | 
 |         (JSC::NativeFunction::operator bool const): | 
 |         (JSC::NativeFunction::operator! const): | 
 |         (JSC::NativeFunction::operator== const): | 
 |         (JSC::NativeFunction::operator!= const): | 
 |         (JSC::NativeFunction::operator()): | 
 |         (JSC::NativeFunction::rawPointer const): | 
 |         (JSC::NativeFunctionHash::hash): | 
 |         (JSC::NativeFunctionHash::equal): | 
 |         (JSC::TaggedNativeFunction::TaggedNativeFunction): | 
 |         (JSC::TaggedNativeFunction::operator bool const): | 
 |         (JSC::TaggedNativeFunction::operator! const): | 
 |         (JSC::TaggedNativeFunction::operator== const): | 
 |         (JSC::TaggedNativeFunction::operator!= const): | 
 |         (JSC::TaggedNativeFunction::operator()): | 
 |         (JSC::TaggedNativeFunction::operator NativeFunction): | 
 |         (JSC::TaggedNativeFunction::rawPointer const): | 
 |         (JSC::TaggedNativeFunctionHash::hash): | 
 |         (JSC::TaggedNativeFunctionHash::equal): | 
 |         * runtime/PtrTag.h: | 
 |         (JSC::tagCFunctionPtr): | 
 |         (JSC::untagCFunctionPtr): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::targetMachinePCForThrowOffset): Deleted. | 
 |  | 
 | 2018-03-12  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Unreviewed, fix simple goof that was causing 32-bit DFG crashes. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): | 
 |  | 
 | 2018-03-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] AI should convert CreateThis to NewObject if the prototype object is proved | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183310 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch implements CreateThis -> NewObject conversion in AI if the given function is constant. | 
 |         This contributes to 6% win in Octane/raytrace. | 
 |  | 
 |                                         baseline                  patched | 
 |  | 
 |             raytrace       x2       1.19915+-0.01862    ^     1.13156+-0.01589       ^ definitely 1.0597x faster | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |  | 
 | 2018-03-11  Wenson Hsieh  <wenson_hsieh@apple.com> | 
 |  | 
 |         Disable Sigill crash analyzer on watchOS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183548 | 
 |         <rdar://problem/38338032> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Sigill is not supported on watchOS. | 
 |  | 
 |         * runtime/Options.cpp: | 
 |         (JSC::overrideDefaults): | 
 |  | 
 | 2018-03-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Split DirectArguments into JSValueOOB and JSValueStrict parts | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183458 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |          | 
 |         Our Spectre plan for JSValue objects is to allow inline JSValue stores and loads guarded by | 
 |         unmitigated structure checks. This works because objects reachable from JSValues (i.e. JSValue | 
 |         objects, like String, Symbol, and any descendant of JSObject) will only contain fields that it's OK | 
 |         to read and write within a Spectre mitigation window. Writes are important, because within the | 
 |         window, a write could appear to be made speculatively and rolled out later. This means that: | 
 |          | 
 |         - JSValue objects cannot have lengths, masks, or anything else inline. | 
 |          | 
 |         - JSValue objects cannot have an inline type that is used as part of a Spectre mitigation for a type | 
 |           check, unless that type is in the form of a poison key. | 
 |          | 
 |         This means that the dynamic poisoning that I previously landed for DirectArguments is wrong. It also | 
 |         means that it's wrong for DirectArguments to have an inline length. | 
 |          | 
 |         This changes DirectArguments to use poisoning according to the universal formula: | 
 |          | 
 |         - The random accessed portions are out-of-line, pointed to by a poisoned pointer. | 
 |          | 
 |         - No inline length. | 
 |          | 
 |         Surprisingly, this is perf-neutral. It's probably perf-neutral because our compiler optimizations | 
 |         amortize whatever cost there was. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateWithGuard): | 
 |         * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h: | 
 |         (JSC::DFG::CallCreateDirectArgumentsSlowPathGenerator::CallCreateDirectArgumentsSlowPathGenerator): | 
 |         * dfg/DFGCallCreateDirectArgumentsWithKnownLengthSlowPathGenerator.h: Added. | 
 |         (JSC::DFG::CallCreateDirectArgumentsWithKnownLengthSlowPathGenerator::CallCreateDirectArgumentsWithKnownLengthSlowPathGenerator): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetArrayLength): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetFromArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compilePutToArguments): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetFromArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutToArguments): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedHeapCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoison): Deleted. | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnLoadedType): Deleted. | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnType): Deleted. | 
 |         * heap/SecurityKind.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_get_from_arguments): | 
 |         (JSC::JIT::emit_op_put_to_arguments): | 
 |         (JSC::JIT::emitDirectArgumentsGetByVal): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_get_from_arguments): | 
 |         (JSC::JIT::emit_op_put_to_arguments): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::DirectArguments): | 
 |         (JSC::DirectArguments::createUninitialized): | 
 |         (JSC::DirectArguments::create): | 
 |         (JSC::DirectArguments::createByCopying): | 
 |         (JSC::DirectArguments::estimatedSize): | 
 |         (JSC::DirectArguments::visitChildren): | 
 |         (JSC::DirectArguments::overrideThings): | 
 |         (JSC::DirectArguments::copyToArguments): | 
 |         (JSC::DirectArguments::mappedArgumentsSize): | 
 |         * runtime/DirectArguments.h: | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSLexicalEnvironment.h: | 
 |         * runtime/JSSymbolTableObject.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-03-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [B3] Above/Below should be strength-reduced for comparison with 0 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183543 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Above(0, x) and BelowEqual(0, x) can be converted to constants false and true respectively. | 
 |         This can be seen in ArraySlice(0) case: `Select(Above(0, length), length, 0)` this should | 
 |         be converted to `0`. This patch adds such a folding to comparisons. | 
 |  | 
 |         We also fix B3ReduceStrength issue creating an orphan value. If a flipped value is folded to | 
 |         a constant, we do not insert flipped value and make it an orphan. This issue causes JSC test | 
 |         failure with this B3Const32/64Value change. With this patch, we create a flipped value only | 
 |         when we fail to fold it to a constant. | 
 |  | 
 |         * b3/B3Const32Value.cpp: | 
 |         (JSC::B3::Const32Value::lessThanConstant const): | 
 |         (JSC::B3::Const32Value::greaterThanConstant const): | 
 |         (JSC::B3::Const32Value::lessEqualConstant const): | 
 |         (JSC::B3::Const32Value::greaterEqualConstant const): | 
 |         (JSC::B3::Const32Value::aboveConstant const): | 
 |         (JSC::B3::Const32Value::belowConstant const): | 
 |         (JSC::B3::Const32Value::aboveEqualConstant const): | 
 |         (JSC::B3::Const32Value::belowEqualConstant const): | 
 |         * b3/B3Const64Value.cpp: | 
 |         (JSC::B3::Const64Value::lessThanConstant const): | 
 |         (JSC::B3::Const64Value::greaterThanConstant const): | 
 |         (JSC::B3::Const64Value::lessEqualConstant const): | 
 |         (JSC::B3::Const64Value::greaterEqualConstant const): | 
 |         (JSC::B3::Const64Value::aboveConstant const): | 
 |         (JSC::B3::Const64Value::belowConstant const): | 
 |         (JSC::B3::Const64Value::aboveEqualConstant const): | 
 |         (JSC::B3::Const64Value::belowEqualConstant const): | 
 |         * b3/B3ReduceStrength.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::int64Operands): | 
 |         (JSC::B3::int32Operands): | 
 |  | 
 | 2018-03-10  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Drop NewRegexp for String.prototype.match with RegExp + global flag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181848 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         In r181535, we support `string.match(/nonglobal/)` code. However, `string.match(/global/g)` is not | 
 |         optimized since it sets `lastIndex` value before performing RegExp operation. | 
 |  | 
 |         This patch optimizes the above "with a global flag" case by emitting `SetRegExpObjectLastIndex` properly. | 
 |         RegExpMatchFast is converted to SetRegExpObjectLastIndex and RegExpMatchFastGlobal. The latter node | 
 |         just holds RegExp (not RegExpObject) cell so that it can offer a chance to make NewRegexp PhantomNewRegexp | 
 |         in object allocation sinking phase. | 
 |  | 
 |         Added microbenchmarks shows that this patch makes NewRegexp PhantomNewRegexp even if the given RegExp | 
 |         has a global flag. And it improves the performance. | 
 |  | 
 |                                       baseline                  patched | 
 |  | 
 |         regexp-u-global-es5       44.1298+-4.6128     ^     33.7920+-2.0110        ^ definitely 1.3059x faster | 
 |         regexp-u-global-es6      182.3272+-2.2861     ^    154.3414+-7.6769        ^ definitely 1.1813x faster | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGMayExit.cpp: | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::convertToRegExpMatchFastGlobal): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasHeapPrediction): | 
 |         (JSC::DFG::Node::hasCellOperand): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileRegExpMatchFastGlobal): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * 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::compileRegExpMatchFastGlobal): | 
 |         * runtime/RegExpObject.cpp: | 
 |         (JSC::collectMatches): Deleted. | 
 |         * runtime/RegExpObject.h: | 
 |         * runtime/RegExpObjectInlines.h: | 
 |         (JSC::RegExpObject::execInline): | 
 |         (JSC::RegExpObject::matchInline): | 
 |         (JSC::advanceStringUnicode): | 
 |         (JSC::collectMatches): | 
 |         (JSC::RegExpObject::advanceStringUnicode): Deleted. | 
 |         * runtime/RegExpPrototype.cpp: | 
 |         (JSC::advanceStringIndex): | 
 |  | 
 | 2018-03-10  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         B3::reduceStrength should canonicalize integer comparisons | 
 |         https://bugs.webkit.org/show_bug.cgi?id=150958 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch sorts operands of comparisons by flipping opcode. For example, `Above(0, @2)` is | 
 |         converted to `Below(@2, 0)`. This sorting is the same to handleCommutativity rule. Since we | 
 |         canonicalize comparisons to have constant value at least on the right hand side, we can | 
 |         remove pattern matchings checking leftImm in B3LowerToAir. | 
 |  | 
 |         Since this flipping changes the opcode of the value, to achieve safely, we just create a | 
 |         new value which has flipped opcode and swapped operands. If we can fold it to a constant, | 
 |         we replace m_value with this constant. If we fail to fold it to constant, we replace | 
 |         m_value with the flipped one. | 
 |  | 
 |         These comparisons are already handled in testb3. | 
 |  | 
 |         * b3/B3LowerToAir.cpp: | 
 |         * b3/B3ReduceStrength.cpp: | 
 |  | 
 | 2018-03-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         offlineasm should reset the Assembler's working state before doing another pass for a new target. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183538 | 
 |         <rdar://problem/38325955> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * llint/LowLevelInterpreter.cpp: | 
 |         * offlineasm/asm.rb: | 
 |         * offlineasm/cloop.rb: | 
 |  | 
 | 2018-03-09  Brian Burg  <bburg@apple.com> | 
 |  | 
 |         Web Inspector: there should only be one way for async backend commands to send failure | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183524 | 
 |  | 
 |         Reviewed by Timothy Hatcher. | 
 |  | 
 |         If this is an async command, errors should be reported with BackendDispatcher::CallbackBase::sendFailure. | 
 |         To avoid mixups, don't include the ErrorString out-parameter in generated async command signatures. | 
 |         This change only affects interfaces generated for C++ backend dispatchers. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py: | 
 |         (CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command): | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py: | 
 |         (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command): | 
 |         * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result: | 
 |  | 
 | 2018-03-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Build fix after r229476. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183488 | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * runtime/StackAlignment.h: | 
 |  | 
 | 2018-03-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         [Re-landing] Add support for ARM64E. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183398 | 
 |         <rdar://problem/38212621> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/backends.rb: | 
 |  | 
 | 2018-03-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         [Re-landing] Prepare LLInt code to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183387 | 
 |         <rdar://problem/38199678> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         1. Introduced PtrTag enums for supporting pointer profiling later. | 
 |  | 
 |         2. Also introduced tagging, untagging, retagging, and tag removal placeholder | 
 |            template functions for the same purpose. | 
 |  | 
 |         3. Prepare the offlineasm for supporting pointer profiling later. | 
 |  | 
 |         4. Tagged some pointers in LLInt asm code.  Currently, these should have no | 
 |            effect on behavior. | 
 |  | 
 |         5. Removed returnToThrowForThrownException() because it is not used anywhere. | 
 |  | 
 |         6. Added the offlineasm folder to JavaScriptCore Xcode project so that it's | 
 |            easier to view and edit these files in Xcode. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/LLIntCallLinkInfo.h: | 
 |         (JSC::LLIntCallLinkInfo::unlink): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         * llint/LLIntExceptions.cpp: | 
 |         (JSC::LLInt::returnToThrowForThrownException): Deleted. | 
 |         * llint/LLIntExceptions.h: | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LLIntOffsetsExtractor.cpp: | 
 |         * llint/LLIntPCRanges.h: | 
 |         (JSC::LLInt::isLLIntPC): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::handleHostCall): | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/ast.rb: | 
 |         * offlineasm/instructions.rb: | 
 |         * offlineasm/risc.rb: | 
 |         * runtime/PtrTag.h: Added. | 
 |         (JSC::uniquePtrTagID): | 
 |         (JSC::ptrTag): | 
 |         (JSC::tagCodePtr): | 
 |         (JSC::untagCodePtr): | 
 |         (JSC::retagCodePtr): | 
 |         (JSC::removeCodePtrTag): | 
 |  | 
 | 2018-03-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Remove unused LLINT_STATS feature. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183522 | 
 |         <rdar://problem/38313139> | 
 |  | 
 |         Rubber-stamped by Keith Miller. | 
 |  | 
 |         We haven't used this in a while, and it is one more option that makes offlineasm | 
 |         build slower.  We can always re-introduce this later if we need it. | 
 |  | 
 |         * jsc.cpp: | 
 |         * llint/LLIntCommon.h: | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         (JSC::LLInt::Data::finalizeStats): Deleted. | 
 |         (JSC::LLInt::compareStats): Deleted. | 
 |         (JSC::LLInt::Data::dumpStats): Deleted. | 
 |         (JSC::LLInt::Data::ensureStats): Deleted. | 
 |         (JSC::LLInt::Data::loadStats): Deleted. | 
 |         (JSC::LLInt::Data::resetStats): Deleted. | 
 |         (JSC::LLInt::Data::saveStats): Deleted. | 
 |         * llint/LLIntData.h: | 
 |         (): Deleted. | 
 |         (JSC::LLInt::Data::opcodeStats): Deleted. | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         * llint/LLIntSlowPaths.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/Options.cpp: | 
 |         (JSC::Options::isAvailable): | 
 |         (JSC::recomputeDependentOptions): | 
 |         * runtime/Options.h: | 
 |         * runtime/TestRunnerUtils.cpp: | 
 |         (JSC::finalizeStatsAtEndOfTesting): | 
 |  | 
 | 2018-03-09  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Relanding "testmasm crashes in testBranchTruncateDoubleToInt32() on ARM64" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183488 | 
 |  | 
 |         It applied and built just fine locally. | 
 |  | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::testBranchTruncateDoubleToInt32): | 
 |  | 
 | 2018-03-09  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, remove WebAssemblyFunctionType | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183429 | 
 |  | 
 |         Drop WebAssemblyFunctionType since it is no longer used. This breaks | 
 |         JSCast assumption that all the derived classes of JSFunction use | 
 |         JSFunctionType. We also add ASSERT for JSFunction::finishCreation. | 
 |  | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::finishCreation): | 
 |         * runtime/JSType.h: | 
 |         * wasm/js/WebAssemblyFunction.cpp: | 
 |         (JSC::WebAssemblyFunction::createStructure): | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |  | 
 | 2018-03-09  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r229446. | 
 |  | 
 |         This change relies on changes that have been rolled out. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "testmasm crashes in testBranchTruncateDoubleToInt32() on | 
 |         ARM64" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183488 | 
 |         https://trac.webkit.org/changeset/229446 | 
 |  | 
 | 2018-03-08  Chris Dumez  <cdumez@apple.com> | 
 |  | 
 |         Safari not handling undefined global variables with same name as element Id correctly. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183087 | 
 |         <rdar://problem/37927596> | 
 |  | 
 |         Reviewed by Ryosuke Niwa. | 
 |  | 
 |         global variables (var foo;) should not be hidden by: | 
 |         - Named properties | 
 |         - Properties on the prototype chain | 
 |  | 
 |         Therefore, we now have JSGlobalObject::addVar() call JSGlobalObject::addGlobalVar() | 
 |         if !hasOwnProperty() instead of !hasProperty. | 
 |  | 
 |         This aligns our behavior with Chrome and Firefox. | 
 |  | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::addVar): | 
 |  | 
 | 2018-03-08  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r229354 and r229364. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183492 | 
 |  | 
 |         Breaks internal builds (Requested by ryanhaddad on #webkit). | 
 |  | 
 |         Reverted changesets: | 
 |  | 
 |         "Prepare LLInt code to support pointer profiling." | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183387 | 
 |         https://trac.webkit.org/changeset/229354 | 
 |  | 
 |         "Add support for ARM64E." | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183398 | 
 |         https://trac.webkit.org/changeset/229364 | 
 |  | 
 | 2018-03-08  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         testmasm crashes in testBranchTruncateDoubleToInt32() on ARM64 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183488 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Using stackAlignmentBytes() will keep the stack properly aligned. | 
 |  | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::testBranchTruncateDoubleToInt32): | 
 |  | 
 | 2018-03-08  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Emit code to zero the stack frame on function entry | 
 |         Nhttps://bugs.webkit.org/show_bug.cgi?id=183391 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Added code to zero incoming stack frame behind a new JSC option, zeroStackFrame. | 
 |         The default setting of the option is off. | 
 |  | 
 |         Did some minor refactoring of the YarrJIT stack alignment code. | 
 |  | 
 |         * b3/air/AirCode.cpp: | 
 |         (JSC::B3::Air::defaultPrologueGenerator): | 
 |         * dfg/DFGJITCompiler.cpp: | 
 |         (JSC::DFG::JITCompiler::compile): | 
 |         (JSC::DFG::JITCompiler::compileFunction): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCurrentBlock): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lower): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::clearStackFrame): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/Options.h: | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::ialignCallFrameSizeInBytesnitCallFrame): | 
 |         (JSC::Yarr::YarrGenerator::initCallFrame): | 
 |         (JSC::Yarr::YarrGenerator::removeCallFrame): | 
 |  | 
 | 2018-03-08  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, another attempt at fixing the Windows build. | 
 |         I guess the pragma must be outside the function... | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::clampArrayToSize): | 
 |  | 
 | 2018-03-08  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, one last try at fixing the windows build before rollout. | 
 |  | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::clampArrayToSize): | 
 |  | 
 | 2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Optimize inherits<T> if T is final type | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183435 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         If the type T is a final type (`std::is_final<T>::value == true`), there is no | 
 |         classes which is derived from T. It means that `jsDynamicCast<T>` only needs | 
 |         to check the given cell's `classInfo(vm)` is `T::info()`. | 
 |  | 
 |         This patch adds a new specialization for jsDynamicCast<T> / inherits<T> for a | 
 |         final type. And we also add `final` annotations to JS cell types in JSC. This | 
 |         offers, | 
 |  | 
 |         1. Readability. If the given class is annotated with `final`, we do not need to | 
 |         consider about the derived classes of T. | 
 |  | 
 |         2. Static Checking. If your class is not intended to be used as a base class, attaching | 
 |         `final` can ensure this invariant. | 
 |  | 
 |         3. Performance. jsDynamicCast<T> and inherits<T> can be optimized and the code size should | 
 |         be smaller. | 
 |  | 
 |         * API/JSCallbackConstructor.h: | 
 |         (JSC::JSCallbackConstructor::create): Deleted. | 
 |         (JSC::JSCallbackConstructor::classRef const): Deleted. | 
 |         (JSC::JSCallbackConstructor::callback const): Deleted. | 
 |         (JSC::JSCallbackConstructor::createStructure): Deleted. | 
 |         (JSC::JSCallbackConstructor::constructCallback): Deleted. | 
 |         * API/JSCallbackFunction.h: | 
 |         (JSC::JSCallbackFunction::createStructure): Deleted. | 
 |         (JSC::JSCallbackFunction::functionCallback): Deleted. | 
 |         * API/JSCallbackObject.h: | 
 |         (JSC::JSCallbackObject::create): Deleted. | 
 |         (JSC::JSCallbackObject::destroy): Deleted. | 
 |         (JSC::JSCallbackObject::classRef const): Deleted. | 
 |         (JSC::JSCallbackObject::getPrivateProperty const): Deleted. | 
 |         (JSC::JSCallbackObject::setPrivateProperty): Deleted. | 
 |         (JSC::JSCallbackObject::deletePrivateProperty): Deleted. | 
 |         (JSC::JSCallbackObject::visitChildren): Deleted. | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::setConstantRegisters): | 
 |         * bytecode/ExecutableToCodeBlockEdge.h: | 
 |         (JSC::ExecutableToCodeBlockEdge::subspaceFor): Deleted. | 
 |         (JSC::ExecutableToCodeBlockEdge::codeBlock const): Deleted. | 
 |         (JSC::ExecutableToCodeBlockEdge::unwrap): Deleted. | 
 |         * bytecode/FunctionCodeBlock.h: | 
 |         (JSC::FunctionCodeBlock::subspaceFor): Deleted. | 
 |         (JSC::FunctionCodeBlock::create): Deleted. | 
 |         (JSC::FunctionCodeBlock::createStructure): Deleted. | 
 |         (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted. | 
 |         * debugger/DebuggerScope.h: | 
 |         (JSC::DebuggerScope::createStructure): Deleted. | 
 |         (JSC::DebuggerScope::iterator::iterator): Deleted. | 
 |         (JSC::DebuggerScope::iterator::get): Deleted. | 
 |         (JSC::DebuggerScope::iterator::operator++): Deleted. | 
 |         (JSC::DebuggerScope::iterator::operator== const): Deleted. | 
 |         (JSC::DebuggerScope::iterator::operator!= const): Deleted. | 
 |         (JSC::DebuggerScope::isValid const): Deleted. | 
 |         (JSC::DebuggerScope::jsScope const): Deleted. | 
 |         * inspector/JSInjectedScriptHost.h: | 
 |         (Inspector::JSInjectedScriptHost::createStructure): Deleted. | 
 |         (Inspector::JSInjectedScriptHost::create): Deleted. | 
 |         (Inspector::JSInjectedScriptHost::impl const): Deleted. | 
 |         * inspector/JSInjectedScriptHostPrototype.h: | 
 |         (Inspector::JSInjectedScriptHostPrototype::create): Deleted. | 
 |         (Inspector::JSInjectedScriptHostPrototype::createStructure): Deleted. | 
 |         (Inspector::JSInjectedScriptHostPrototype::JSInjectedScriptHostPrototype): Deleted. | 
 |         * inspector/JSJavaScriptCallFrame.h: | 
 |         (Inspector::JSJavaScriptCallFrame::createStructure): Deleted. | 
 |         (Inspector::JSJavaScriptCallFrame::create): Deleted. | 
 |         (Inspector::JSJavaScriptCallFrame::impl const): Deleted. | 
 |         * inspector/JSJavaScriptCallFramePrototype.h: | 
 |         (Inspector::JSJavaScriptCallFramePrototype::create): Deleted. | 
 |         (Inspector::JSJavaScriptCallFramePrototype::createStructure): Deleted. | 
 |         (Inspector::JSJavaScriptCallFramePrototype::JSJavaScriptCallFramePrototype): Deleted. | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::tryCacheGetByID): | 
 |         * runtime/ArrayConstructor.h: | 
 |         (JSC::ArrayConstructor::create): Deleted. | 
 |         (JSC::ArrayConstructor::createStructure): Deleted. | 
 |         * runtime/ArrayIteratorPrototype.h: | 
 |         (JSC::ArrayIteratorPrototype::create): Deleted. | 
 |         (JSC::ArrayIteratorPrototype::createStructure): Deleted. | 
 |         (JSC::ArrayIteratorPrototype::ArrayIteratorPrototype): Deleted. | 
 |         * runtime/ArrayPrototype.h: | 
 |         (JSC::ArrayPrototype::createStructure): Deleted. | 
 |         * runtime/AsyncFromSyncIteratorPrototype.h: | 
 |         (JSC::AsyncFromSyncIteratorPrototype::createStructure): Deleted. | 
 |         * runtime/AsyncFunctionConstructor.h: | 
 |         (JSC::AsyncFunctionConstructor::create): Deleted. | 
 |         (JSC::AsyncFunctionConstructor::createStructure): Deleted. | 
 |         * runtime/AsyncFunctionPrototype.h: | 
 |         (JSC::AsyncFunctionPrototype::create): Deleted. | 
 |         (JSC::AsyncFunctionPrototype::createStructure): Deleted. | 
 |         * runtime/AsyncGeneratorFunctionConstructor.h: | 
 |         (JSC::AsyncGeneratorFunctionConstructor::create): Deleted. | 
 |         (JSC::AsyncGeneratorFunctionConstructor::createStructure): Deleted. | 
 |         * runtime/AsyncGeneratorFunctionPrototype.h: | 
 |         (JSC::AsyncGeneratorFunctionPrototype::create): Deleted. | 
 |         (JSC::AsyncGeneratorFunctionPrototype::createStructure): Deleted. | 
 |         * runtime/AsyncGeneratorPrototype.h: | 
 |         (JSC::AsyncGeneratorPrototype::create): Deleted. | 
 |         (JSC::AsyncGeneratorPrototype::createStructure): Deleted. | 
 |         (JSC::AsyncGeneratorPrototype::AsyncGeneratorPrototype): Deleted. | 
 |         * runtime/AsyncIteratorPrototype.h: | 
 |         (JSC::AsyncIteratorPrototype::create): Deleted. | 
 |         (JSC::AsyncIteratorPrototype::createStructure): Deleted. | 
 |         (JSC::AsyncIteratorPrototype::AsyncIteratorPrototype): Deleted. | 
 |         * runtime/AtomicsObject.h: | 
 |         * runtime/BigIntConstructor.h: | 
 |         (JSC::BigIntConstructor::create): Deleted. | 
 |         (JSC::BigIntConstructor::createStructure): Deleted. | 
 |         * runtime/BigIntObject.h: | 
 |         (JSC::BigIntObject::create): Deleted. | 
 |         (JSC::BigIntObject::internalValue const): Deleted. | 
 |         (JSC::BigIntObject::createStructure): Deleted. | 
 |         * runtime/BigIntPrototype.h: | 
 |         (JSC::BigIntPrototype::create): Deleted. | 
 |         (JSC::BigIntPrototype::createStructure): Deleted. | 
 |         * runtime/BooleanConstructor.h: | 
 |         (JSC::BooleanConstructor::create): Deleted. | 
 |         (JSC::BooleanConstructor::createStructure): Deleted. | 
 |         * runtime/BooleanPrototype.h: | 
 |         (JSC::BooleanPrototype::create): Deleted. | 
 |         (JSC::BooleanPrototype::createStructure): Deleted. | 
 |         * runtime/ConsoleObject.h: | 
 |         (JSC::ConsoleObject::create): Deleted. | 
 |         (JSC::ConsoleObject::createStructure): Deleted. | 
 |         * runtime/DOMAttributeGetterSetter.h: | 
 |         (JSC::isDOMAttributeGetterSetter): Deleted. | 
 |         * runtime/DateConstructor.h: | 
 |         (JSC::DateConstructor::create): Deleted. | 
 |         (JSC::DateConstructor::createStructure): Deleted. | 
 |         * runtime/DateInstance.h: | 
 |         (JSC::DateInstance::create): Deleted. | 
 |         (JSC::DateInstance::internalNumber const): Deleted. | 
 |         (JSC::DateInstance::gregorianDateTime const): Deleted. | 
 |         (JSC::DateInstance::gregorianDateTimeUTC const): Deleted. | 
 |         (JSC::DateInstance::createStructure): Deleted. | 
 |         * runtime/DatePrototype.h: | 
 |         (JSC::DatePrototype::create): Deleted. | 
 |         (JSC::DatePrototype::createStructure): Deleted. | 
 |         * runtime/Error.h: | 
 |         (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): Deleted. | 
 |         (JSC::StrictModeTypeErrorFunction::create): Deleted. | 
 |         (JSC::StrictModeTypeErrorFunction::constructThrowTypeError): Deleted. | 
 |         (JSC::StrictModeTypeErrorFunction::callThrowTypeError): Deleted. | 
 |         (JSC::StrictModeTypeErrorFunction::createStructure): Deleted. | 
 |         * runtime/ErrorConstructor.h: | 
 |         (JSC::ErrorConstructor::create): Deleted. | 
 |         (JSC::ErrorConstructor::createStructure): Deleted. | 
 |         (JSC::ErrorConstructor::stackTraceLimit const): Deleted. | 
 |         * runtime/Exception.h: | 
 |         (JSC::Exception::valueOffset): Deleted. | 
 |         (JSC::Exception::value const): Deleted. | 
 |         (JSC::Exception::stack const): Deleted. | 
 |         (JSC::Exception::didNotifyInspectorOfThrow const): Deleted. | 
 |         (JSC::Exception::setDidNotifyInspectorOfThrow): Deleted. | 
 |         * runtime/FunctionConstructor.h: | 
 |         (JSC::FunctionConstructor::create): Deleted. | 
 |         (JSC::FunctionConstructor::createStructure): Deleted. | 
 |         * runtime/FunctionPrototype.h: | 
 |         (JSC::FunctionPrototype::create): Deleted. | 
 |         (JSC::FunctionPrototype::createStructure): Deleted. | 
 |         * runtime/FunctionRareData.h: | 
 |         (JSC::FunctionRareData::offsetOfObjectAllocationProfile): Deleted. | 
 |         (JSC::FunctionRareData::objectAllocationProfile): Deleted. | 
 |         (JSC::FunctionRareData::objectAllocationStructure): Deleted. | 
 |         (JSC::FunctionRareData::allocationProfileWatchpointSet): Deleted. | 
 |         (JSC::FunctionRareData::isObjectAllocationProfileInitialized): Deleted. | 
 |         (JSC::FunctionRareData::internalFunctionAllocationStructure): Deleted. | 
 |         (JSC::FunctionRareData::createInternalFunctionAllocationStructureFromBase): Deleted. | 
 |         (JSC::FunctionRareData::clearInternalFunctionAllocationProfile): Deleted. | 
 |         (JSC::FunctionRareData::getBoundFunctionStructure): Deleted. | 
 |         (JSC::FunctionRareData::setBoundFunctionStructure): Deleted. | 
 |         (JSC::FunctionRareData::hasReifiedLength const): Deleted. | 
 |         (JSC::FunctionRareData::setHasReifiedLength): Deleted. | 
 |         (JSC::FunctionRareData::hasReifiedName const): Deleted. | 
 |         (JSC::FunctionRareData::setHasReifiedName): Deleted. | 
 |         (JSC::FunctionRareData::hasAllocationProfileClearingWatchpoint const): Deleted. | 
 |         (JSC::FunctionRareData::createAllocationProfileClearingWatchpoint): Deleted. | 
 |         (JSC::FunctionRareData::AllocationProfileClearingWatchpoint::AllocationProfileClearingWatchpoint): Deleted. | 
 |         * runtime/GeneratorFunctionConstructor.h: | 
 |         (JSC::GeneratorFunctionConstructor::create): Deleted. | 
 |         (JSC::GeneratorFunctionConstructor::createStructure): Deleted. | 
 |         * runtime/GeneratorFunctionPrototype.h: | 
 |         (JSC::GeneratorFunctionPrototype::create): Deleted. | 
 |         (JSC::GeneratorFunctionPrototype::createStructure): Deleted. | 
 |         * runtime/GeneratorPrototype.h: | 
 |         (JSC::GeneratorPrototype::create): Deleted. | 
 |         (JSC::GeneratorPrototype::createStructure): Deleted. | 
 |         (JSC::GeneratorPrototype::GeneratorPrototype): Deleted. | 
 |         * runtime/InferredValue.h: | 
 |         (JSC::InferredValue::subspaceFor): Deleted. | 
 |         (JSC::InferredValue::inferredValue): Deleted. | 
 |         (JSC::InferredValue::state const): Deleted. | 
 |         (JSC::InferredValue::isStillValid const): Deleted. | 
 |         (JSC::InferredValue::hasBeenInvalidated const): Deleted. | 
 |         (JSC::InferredValue::add): Deleted. | 
 |         (JSC::InferredValue::notifyWrite): Deleted. | 
 |         (JSC::InferredValue::invalidate): Deleted. | 
 |         * runtime/InspectorInstrumentationObject.h: | 
 |         (JSC::InspectorInstrumentationObject::create): Deleted. | 
 |         (JSC::InspectorInstrumentationObject::createStructure): Deleted. | 
 |         * runtime/IntlCollator.h: | 
 |         (JSC::IntlCollator::boundCompare const): Deleted. | 
 |         * runtime/IntlCollatorConstructor.h: | 
 |         (JSC::IntlCollatorConstructor::collatorStructure const): Deleted. | 
 |         * runtime/IntlCollatorPrototype.h: | 
 |         * runtime/IntlDateTimeFormat.h: | 
 |         (JSC::IntlDateTimeFormat::boundFormat const): Deleted. | 
 |         * runtime/IntlDateTimeFormatConstructor.h: | 
 |         (JSC::IntlDateTimeFormatConstructor::dateTimeFormatStructure const): Deleted. | 
 |         * runtime/IntlDateTimeFormatPrototype.h: | 
 |         * runtime/IntlNumberFormat.h: | 
 |         (JSC::IntlNumberFormat::boundFormat const): Deleted. | 
 |         * runtime/IntlNumberFormatConstructor.h: | 
 |         (JSC::IntlNumberFormatConstructor::numberFormatStructure const): Deleted. | 
 |         * runtime/IntlNumberFormatPrototype.h: | 
 |         * runtime/IntlObject.h: | 
 |         * runtime/IteratorPrototype.h: | 
 |         (JSC::IteratorPrototype::create): Deleted. | 
 |         (JSC::IteratorPrototype::createStructure): Deleted. | 
 |         (JSC::IteratorPrototype::IteratorPrototype): Deleted. | 
 |         * runtime/JSAPIValueWrapper.h: | 
 |         (JSC::JSAPIValueWrapper::value const): Deleted. | 
 |         (JSC::JSAPIValueWrapper::createStructure): Deleted. | 
 |         (JSC::JSAPIValueWrapper::create): Deleted. | 
 |         (JSC::JSAPIValueWrapper::finishCreation): Deleted. | 
 |         (JSC::JSAPIValueWrapper::JSAPIValueWrapper): Deleted. | 
 |         * runtime/JSArrayBufferConstructor.h: | 
 |         (JSC::JSArrayBufferConstructor::sharingMode const): Deleted. | 
 |         * runtime/JSArrayBufferPrototype.h: | 
 |         * runtime/JSAsyncFunction.h: | 
 |         (JSC::JSAsyncFunction::subspaceFor): Deleted. | 
 |         (JSC::JSAsyncFunction::allocationSize): Deleted. | 
 |         (JSC::JSAsyncFunction::createStructure): Deleted. | 
 |         * runtime/JSAsyncGeneratorFunction.h: | 
 |         (JSC::JSAsyncGeneratorFunction::subspaceFor): Deleted. | 
 |         (JSC::JSAsyncGeneratorFunction::allocationSize): Deleted. | 
 |         (JSC::JSAsyncGeneratorFunction::createStructure): Deleted. | 
 |         * runtime/JSBigInt.h: | 
 |         (JSC::JSBigInt::setSign): Deleted. | 
 |         (JSC::JSBigInt::sign const): Deleted. | 
 |         (JSC::JSBigInt::setLength): Deleted. | 
 |         (JSC::JSBigInt::length const): Deleted. | 
 |         * runtime/JSBoundFunction.h: | 
 |         (JSC::JSBoundFunction::subspaceFor): Deleted. | 
 |         (JSC::JSBoundFunction::targetFunction): Deleted. | 
 |         (JSC::JSBoundFunction::boundThis): Deleted. | 
 |         (JSC::JSBoundFunction::boundArgs): Deleted. | 
 |         (JSC::JSBoundFunction::createStructure): Deleted. | 
 |         (JSC::JSBoundFunction::offsetOfTargetFunction): Deleted. | 
 |         (JSC::JSBoundFunction::offsetOfBoundThis): Deleted. | 
 |         * runtime/JSCast.h: | 
 |         (JSC::JSCastingHelpers::FinalTypeDispatcher::inheritsGeneric): | 
 |         (JSC::JSCastingHelpers::inheritsJSTypeImpl): | 
 |         (JSC::JSCastingHelpers::InheritsTraits::inherits): | 
 |         (JSC::JSCastingHelpers::inheritsGenericImpl): Deleted. | 
 |         * runtime/JSCustomGetterSetterFunction.cpp: | 
 |         (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall): | 
 |         * runtime/JSCustomGetterSetterFunction.h: | 
 |         (JSC::JSCustomGetterSetterFunction::subspaceFor): Deleted. | 
 |         (JSC::JSCustomGetterSetterFunction::createStructure): Deleted. | 
 |         (JSC::JSCustomGetterSetterFunction::customGetterSetter const): Deleted. | 
 |         (JSC::JSCustomGetterSetterFunction::isSetter const): Deleted. | 
 |         (JSC::JSCustomGetterSetterFunction::propertyName const): Deleted. | 
 |         * runtime/JSDataView.h: | 
 |         (JSC::JSDataView::possiblySharedBuffer const): Deleted. | 
 |         (JSC::JSDataView::unsharedBuffer const): Deleted. | 
 |         * runtime/JSDataViewPrototype.h: | 
 |         * runtime/JSFixedArray.h: | 
 |         (JSC::JSFixedArray::createStructure): Deleted. | 
 |         (JSC::JSFixedArray::tryCreate): Deleted. | 
 |         (JSC::JSFixedArray::create): Deleted. | 
 |         (JSC::JSFixedArray::createFromArray): Deleted. | 
 |         (JSC::JSFixedArray::get const): Deleted. | 
 |         (JSC::JSFixedArray::set): Deleted. | 
 |         (JSC::JSFixedArray::buffer): Deleted. | 
 |         (JSC::JSFixedArray::buffer const): Deleted. | 
 |         (JSC::JSFixedArray::values const): Deleted. | 
 |         (JSC::JSFixedArray::size const): Deleted. | 
 |         (JSC::JSFixedArray::length const): Deleted. | 
 |         (JSC::JSFixedArray::offsetOfSize): Deleted. | 
 |         (JSC::JSFixedArray::offsetOfData): Deleted. | 
 |         (JSC::JSFixedArray::JSFixedArray): Deleted. | 
 |         (JSC::JSFixedArray::allocationSize): Deleted. | 
 |         * runtime/JSGeneratorFunction.h: | 
 |         (JSC::JSGeneratorFunction::subspaceFor): Deleted. | 
 |         (JSC::JSGeneratorFunction::allocationSize): Deleted. | 
 |         (JSC::JSGeneratorFunction::createStructure): Deleted. | 
 |         * runtime/JSGenericTypedArrayView.h: | 
 |         (JSC::JSGenericTypedArrayView::byteLength const): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::byteSize const): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::typedVector const): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::typedVector): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::canGetIndexQuickly): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::canSetIndexQuickly): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::getIndexQuicklyAsNativeValue): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::getIndexQuicklyAsDouble): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::getIndexQuickly): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::setIndexQuicklyToNativeValue): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::setIndexQuicklyToDouble): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::setIndexQuickly): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::setIndex): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::toAdaptorNativeFromValue): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::toAdaptorNativeFromValueWithoutCoercion): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::sort): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::canAccessRangeQuickly): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::createStructure): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::info): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::purifyArray): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::sortComparison): Deleted. | 
 |         (JSC::JSGenericTypedArrayView::sortFloat): Deleted. | 
 |         * runtime/JSGenericTypedArrayViewConstructor.h: | 
 |         * runtime/JSGenericTypedArrayViewPrototype.h: | 
 |         * runtime/JSInternalPromise.h: | 
 |         * runtime/JSInternalPromiseConstructor.h: | 
 |         * runtime/JSInternalPromisePrototype.h: | 
 |         * runtime/JSMapIterator.h: | 
 |         (JSC::JSMapIterator::createStructure): Deleted. | 
 |         (JSC::JSMapIterator::create): Deleted. | 
 |         (JSC::JSMapIterator::advanceIter): Deleted. | 
 |         (JSC::JSMapIterator::next): Deleted. | 
 |         (JSC::JSMapIterator::nextKeyValue): Deleted. | 
 |         (JSC::JSMapIterator::kind const): Deleted. | 
 |         (JSC::JSMapIterator::iteratedValue const): Deleted. | 
 |         (JSC::JSMapIterator::JSMapIterator): Deleted. | 
 |         (JSC::JSMapIterator::setIterator): Deleted. | 
 |         * runtime/JSModuleLoader.h: | 
 |         (JSC::JSModuleLoader::create): Deleted. | 
 |         (JSC::JSModuleLoader::createStructure): Deleted. | 
 |         * runtime/JSModuleNamespaceObject.h: | 
 |         (JSC::isJSModuleNamespaceObject): Deleted. | 
 |         * runtime/JSModuleRecord.h: | 
 |         (JSC::JSModuleRecord::sourceCode const): Deleted. | 
 |         (JSC::JSModuleRecord::declaredVariables const): Deleted. | 
 |         (JSC::JSModuleRecord::lexicalVariables const): Deleted. | 
 |         * runtime/JSNativeStdFunction.h: | 
 |         (JSC::JSNativeStdFunction::subspaceFor): Deleted. | 
 |         (JSC::JSNativeStdFunction::createStructure): Deleted. | 
 |         (JSC::JSNativeStdFunction::nativeStdFunctionCell): Deleted. | 
 |         * runtime/JSONObject.h: | 
 |         (JSC::JSONObject::create): Deleted. | 
 |         (JSC::JSONObject::createStructure): Deleted. | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::fillCustomGetterPropertySlot): | 
 |         * runtime/JSScriptFetchParameters.h: | 
 |         (JSC::JSScriptFetchParameters::createStructure): Deleted. | 
 |         (JSC::JSScriptFetchParameters::create): Deleted. | 
 |         (JSC::JSScriptFetchParameters::parameters const): Deleted. | 
 |         (JSC::JSScriptFetchParameters::JSScriptFetchParameters): Deleted. | 
 |         * runtime/JSScriptFetcher.h: | 
 |         (JSC::JSScriptFetcher::createStructure): Deleted. | 
 |         (JSC::JSScriptFetcher::create): Deleted. | 
 |         (JSC::JSScriptFetcher::fetcher const): Deleted. | 
 |         (JSC::JSScriptFetcher::JSScriptFetcher): Deleted. | 
 |         * runtime/JSSetIterator.h: | 
 |         (JSC::JSSetIterator::createStructure): Deleted. | 
 |         (JSC::JSSetIterator::create): Deleted. | 
 |         (JSC::JSSetIterator::advanceIter): Deleted. | 
 |         (JSC::JSSetIterator::next): Deleted. | 
 |         (JSC::JSSetIterator::kind const): Deleted. | 
 |         (JSC::JSSetIterator::iteratedValue const): Deleted. | 
 |         (JSC::JSSetIterator::JSSetIterator): Deleted. | 
 |         (JSC::JSSetIterator::setIterator): Deleted. | 
 |         * runtime/JSSourceCode.h: | 
 |         (JSC::JSSourceCode::createStructure): Deleted. | 
 |         (JSC::JSSourceCode::create): Deleted. | 
 |         (JSC::JSSourceCode::sourceCode const): Deleted. | 
 |         (JSC::JSSourceCode::JSSourceCode): Deleted. | 
 |         * runtime/JSStringIterator.h: | 
 |         (JSC::JSStringIterator::createStructure): Deleted. | 
 |         (JSC::JSStringIterator::create): Deleted. | 
 |         (JSC::JSStringIterator::JSStringIterator): Deleted. | 
 |         * runtime/JSTemplateObjectDescriptor.h: | 
 |         (JSC::isTemplateObjectDescriptor): Deleted. | 
 |         * runtime/JSTypedArrayViewConstructor.h: | 
 |         (JSC::JSTypedArrayViewConstructor::create): Deleted. | 
 |         * runtime/JSTypedArrayViewPrototype.h: | 
 |         * runtime/MapConstructor.h: | 
 |         (JSC::MapConstructor::create): Deleted. | 
 |         (JSC::MapConstructor::createStructure): Deleted. | 
 |         * runtime/MapIteratorPrototype.h: | 
 |         (JSC::MapIteratorPrototype::create): Deleted. | 
 |         (JSC::MapIteratorPrototype::createStructure): Deleted. | 
 |         (JSC::MapIteratorPrototype::MapIteratorPrototype): Deleted. | 
 |         * runtime/MapPrototype.h: | 
 |         (JSC::MapPrototype::create): Deleted. | 
 |         (JSC::MapPrototype::createStructure): Deleted. | 
 |         (JSC::MapPrototype::MapPrototype): Deleted. | 
 |         * runtime/MathObject.h: | 
 |         (JSC::MathObject::create): Deleted. | 
 |         (JSC::MathObject::createStructure): Deleted. | 
 |         * runtime/ModuleLoaderPrototype.h: | 
 |         (JSC::ModuleLoaderPrototype::create): Deleted. | 
 |         (JSC::ModuleLoaderPrototype::createStructure): Deleted. | 
 |         * runtime/NativeErrorConstructor.h: | 
 |         (JSC::NativeErrorConstructor::create): Deleted. | 
 |         (JSC::NativeErrorConstructor::createStructure): Deleted. | 
 |         (JSC::NativeErrorConstructor::errorStructure): Deleted. | 
 |         * runtime/NativeErrorPrototype.h: | 
 |         (JSC::NativeErrorPrototype::create): Deleted. | 
 |         * runtime/NativeStdFunctionCell.h: | 
 |         (JSC::NativeStdFunctionCell::createStructure): Deleted. | 
 |         (JSC::NativeStdFunctionCell::function const): Deleted. | 
 |         * runtime/NullGetterFunction.h: | 
 |         (JSC::NullGetterFunction::create): Deleted. | 
 |         (JSC::NullGetterFunction::createStructure): Deleted. | 
 |         * runtime/NullSetterFunction.h: | 
 |         (JSC::NullSetterFunction::create): Deleted. | 
 |         (JSC::NullSetterFunction::createStructure): Deleted. | 
 |         * runtime/NumberConstructor.h: | 
 |         (JSC::NumberConstructor::create): Deleted. | 
 |         (JSC::NumberConstructor::createStructure): Deleted. | 
 |         (JSC::NumberConstructor::isIntegerImpl): Deleted. | 
 |         * runtime/NumberPrototype.h: | 
 |         (JSC::NumberPrototype::create): Deleted. | 
 |         (JSC::NumberPrototype::createStructure): Deleted. | 
 |         * runtime/ObjectConstructor.h: | 
 |         (JSC::ObjectConstructor::create): Deleted. | 
 |         (JSC::ObjectConstructor::createStructure): Deleted. | 
 |         * runtime/ObjectPrototype.h: | 
 |         (JSC::ObjectPrototype::createStructure): Deleted. | 
 |         * runtime/ProxyConstructor.h: | 
 |         (JSC::ProxyConstructor::createStructure): Deleted. | 
 |         * runtime/ProxyRevoke.h: | 
 |         (JSC::ProxyRevoke::createStructure): Deleted. | 
 |         (JSC::ProxyRevoke::proxy): Deleted. | 
 |         (JSC::ProxyRevoke::setProxyToNull): Deleted. | 
 |         * runtime/ReflectObject.h: | 
 |         (JSC::ReflectObject::create): Deleted. | 
 |         (JSC::ReflectObject::createStructure): Deleted. | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::regExpConstructorDollar): | 
 |         (JSC::regExpConstructorInput): | 
 |         (JSC::regExpConstructorMultiline): | 
 |         (JSC::regExpConstructorLastMatch): | 
 |         (JSC::regExpConstructorLastParen): | 
 |         (JSC::regExpConstructorLeftContext): | 
 |         (JSC::regExpConstructorRightContext): | 
 |         * runtime/RegExpConstructor.h: | 
 |         (JSC::RegExpConstructor::create): Deleted. | 
 |         (JSC::RegExpConstructor::createStructure): Deleted. | 
 |         (JSC::RegExpConstructor::setMultiline): Deleted. | 
 |         (JSC::RegExpConstructor::multiline const): Deleted. | 
 |         (JSC::RegExpConstructor::setInput): Deleted. | 
 |         (JSC::RegExpConstructor::input): Deleted. | 
 |         (JSC::RegExpConstructor::offsetOfCachedResult): Deleted. | 
 |         (JSC::asRegExpConstructor): Deleted. | 
 |         * runtime/RegExpPrototype.h: | 
 |         (JSC::RegExpPrototype::create): Deleted. | 
 |         (JSC::RegExpPrototype::createStructure): Deleted. | 
 |         (JSC::RegExpPrototype::emptyRegExp const): Deleted. | 
 |         * runtime/SetConstructor.h: | 
 |         (JSC::SetConstructor::create): Deleted. | 
 |         (JSC::SetConstructor::createStructure): Deleted. | 
 |         * runtime/SetIteratorPrototype.h: | 
 |         (JSC::SetIteratorPrototype::create): Deleted. | 
 |         (JSC::SetIteratorPrototype::createStructure): Deleted. | 
 |         (JSC::SetIteratorPrototype::SetIteratorPrototype): Deleted. | 
 |         * runtime/SetPrototype.h: | 
 |         (JSC::SetPrototype::create): Deleted. | 
 |         (JSC::SetPrototype::createStructure): Deleted. | 
 |         (JSC::SetPrototype::SetPrototype): Deleted. | 
 |         * runtime/StringConstructor.h: | 
 |         (JSC::StringConstructor::create): Deleted. | 
 |         (JSC::StringConstructor::createStructure): Deleted. | 
 |         * runtime/StringIteratorPrototype.h: | 
 |         (JSC::StringIteratorPrototype::create): Deleted. | 
 |         (JSC::StringIteratorPrototype::createStructure): Deleted. | 
 |         (JSC::StringIteratorPrototype::StringIteratorPrototype): Deleted. | 
 |         * runtime/StringPrototype.h: | 
 |         (JSC::StringPrototype::createStructure): Deleted. | 
 |         * runtime/SymbolConstructor.h: | 
 |         (JSC::SymbolConstructor::create): Deleted. | 
 |         (JSC::SymbolConstructor::createStructure): Deleted. | 
 |         * runtime/SymbolObject.h: | 
 |         (JSC::SymbolObject::create): Deleted. | 
 |         (JSC::SymbolObject::internalValue const): Deleted. | 
 |         (JSC::SymbolObject::createStructure): Deleted. | 
 |         * runtime/SymbolPrototype.h: | 
 |         (JSC::SymbolPrototype::create): Deleted. | 
 |         (JSC::SymbolPrototype::createStructure): Deleted. | 
 |         * runtime/WeakMapConstructor.h: | 
 |         (JSC::WeakMapConstructor::create): Deleted. | 
 |         (JSC::WeakMapConstructor::createStructure): Deleted. | 
 |         * runtime/WeakMapPrototype.h: | 
 |         (JSC::WeakMapPrototype::create): Deleted. | 
 |         (JSC::WeakMapPrototype::createStructure): Deleted. | 
 |         (JSC::WeakMapPrototype::WeakMapPrototype): Deleted. | 
 |         * runtime/WeakSetConstructor.h: | 
 |         (JSC::WeakSetConstructor::create): Deleted. | 
 |         (JSC::WeakSetConstructor::createStructure): Deleted. | 
 |         * runtime/WeakSetPrototype.h: | 
 |         (JSC::WeakSetPrototype::create): Deleted. | 
 |         (JSC::WeakSetPrototype::createStructure): Deleted. | 
 |         (JSC::WeakSetPrototype::WeakSetPrototype): Deleted. | 
 |         * tools/JSDollarVM.h: | 
 |         (JSC::JSDollarVM::createStructure): Deleted. | 
 |         (JSC::JSDollarVM::create): Deleted. | 
 |         (JSC::JSDollarVM::JSDollarVM): Deleted. | 
 |         * wasm/js/JSWebAssembly.h: | 
 |         * wasm/js/JSWebAssemblyCompileError.h: | 
 |         (JSC::JSWebAssemblyCompileError::create): Deleted. | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         (JSC::JSWebAssemblyInstance::instance): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::moduleNamespaceObject): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::webAssemblyToJSCallee): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::memory): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::setMemory): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::memoryMode): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::table): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::setTable): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::offsetOfPoisonedInstance): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::offsetOfPoisonedCallee): Deleted. | 
 |         (JSC::JSWebAssemblyInstance::module const): Deleted. | 
 |         * wasm/js/JSWebAssemblyLinkError.h: | 
 |         (JSC::JSWebAssemblyLinkError::create): Deleted. | 
 |         * wasm/js/JSWebAssemblyMemory.h: | 
 |         (JSC::JSWebAssemblyMemory::subspaceFor): Deleted. | 
 |         (JSC::JSWebAssemblyMemory::memory): Deleted. | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |         * wasm/js/JSWebAssemblyRuntimeError.h: | 
 |         (JSC::JSWebAssemblyRuntimeError::create): Deleted. | 
 |         * wasm/js/JSWebAssemblyTable.h: | 
 |         (JSC::JSWebAssemblyTable::isValidLength): Deleted. | 
 |         (JSC::JSWebAssemblyTable::maximum const): Deleted. | 
 |         (JSC::JSWebAssemblyTable::length const): Deleted. | 
 |         (JSC::JSWebAssemblyTable::allocatedLength const): Deleted. | 
 |         (JSC::JSWebAssemblyTable::table): Deleted. | 
 |         * wasm/js/WebAssemblyCompileErrorConstructor.h: | 
 |         * wasm/js/WebAssemblyCompileErrorPrototype.h: | 
 |         * wasm/js/WebAssemblyInstanceConstructor.h: | 
 |         * wasm/js/WebAssemblyInstancePrototype.h: | 
 |         * wasm/js/WebAssemblyLinkErrorConstructor.h: | 
 |         * wasm/js/WebAssemblyLinkErrorPrototype.h: | 
 |         * wasm/js/WebAssemblyMemoryConstructor.h: | 
 |         * wasm/js/WebAssemblyMemoryPrototype.h: | 
 |         * wasm/js/WebAssemblyModuleConstructor.h: | 
 |         * wasm/js/WebAssemblyModulePrototype.h: | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyPrototype.h: | 
 |         * wasm/js/WebAssemblyRuntimeErrorConstructor.h: | 
 |         * wasm/js/WebAssemblyRuntimeErrorPrototype.h: | 
 |         * wasm/js/WebAssemblyTableConstructor.h: | 
 |         * wasm/js/WebAssemblyTablePrototype.h: | 
 |  | 
 | 2018-03-07  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Make it possible to randomize register allocation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183416 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |          | 
 |         This is disabled by default for now, because it reveals a regalloc bug in wasm. | 
 |  | 
 |         * b3/air/AirCode.cpp: | 
 |         (JSC::B3::Air::Code::Code): | 
 |         * b3/air/AirCode.h: | 
 |         (JSC::B3::Air::Code::weakRandom): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add inherits<T>(VM&) leveraging JSCast fast path | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183429 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Add new member function, JSCell::inherits<T>(VM&) and JSValue::inherits<T>(VM&). | 
 |         They depends on jsDynamicCast<T> implementation and leverage JSType-based fast | 
 |         paths defined in JSCast.h. We extract checking part as `JSCastingHelpers::inherit` | 
 |         and construct jsDynamicCast and JSCell::inherits based on this. | 
 |  | 
 |         And we remove several unnecessary casting functions (asRegExpObject, asDateInstance etc.). | 
 |         In addition, we add jsDynamicCast fast path for RegExpObject by using existing RegExpObjectType. | 
 |  | 
 |         We also fix the implementation of jsDynamicCast for JSObject since it uses LastJSCObjectType. | 
 |         The embedder can add their extended object types after that. | 
 |  | 
 |         * API/JSObjectRef.cpp: | 
 |         (JSObjectGetPrivateProperty): | 
 |         (JSObjectSetPrivateProperty): | 
 |         (JSObjectDeletePrivateProperty): | 
 |         * API/JSValue.mm: | 
 |         (isDate): | 
 |         (isArray): | 
 |         * API/JSValueRef.cpp: | 
 |         (JSValueIsArray): | 
 |         (JSValueIsDate): | 
 |         (JSValueIsObjectOfClass): | 
 |         * API/JSWeakObjectMapRefPrivate.cpp: | 
 |         * API/JSWrapperMap.mm: | 
 |         (tryUnwrapObjcObject): | 
 |         * API/ObjCCallbackFunction.mm: | 
 |         (tryUnwrapConstructor): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileOverridesHasInstance): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::operationMaterializeObjectInOSR): | 
 |         * inspector/JSInjectedScriptHost.cpp: | 
 |         (Inspector::JSInjectedScriptHost::subtype): | 
 |         (Inspector::JSInjectedScriptHost::functionDetails): | 
 |         * inspector/agents/InspectorHeapAgent.cpp: | 
 |         (Inspector::InspectorHeapAgent::getPreview): | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::notifyDebuggerOfUnwinding): | 
 |         * interpreter/ShadowChicken.cpp: | 
 |         (JSC::ShadowChicken::update): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::privateCompileMainPass): | 
 |         * jit/JITOperations.cpp: | 
 |         (JSC::operationNewFunctionCommon): | 
 |         * jsc.cpp: | 
 |         (checkException): | 
 |         * runtime/BooleanObject.h: | 
 |         (JSC::asBooleanObject): Deleted. | 
 |         * runtime/BooleanPrototype.cpp: | 
 |         (JSC::booleanProtoFuncToString): | 
 |         (JSC::booleanProtoFuncValueOf): | 
 |         * runtime/DateConstructor.cpp: | 
 |         (JSC::constructDate): | 
 |         * runtime/DateInstance.h: | 
 |         (JSC::asDateInstance): Deleted. | 
 |         * runtime/DatePrototype.cpp: | 
 |         (JSC::formateDateInstance): | 
 |         (JSC::dateProtoFuncToISOString): | 
 |         (JSC::dateProtoFuncToLocaleString): | 
 |         (JSC::dateProtoFuncToLocaleDateString): | 
 |         (JSC::dateProtoFuncToLocaleTimeString): | 
 |         (JSC::dateProtoFuncGetTime): | 
 |         (JSC::dateProtoFuncGetFullYear): | 
 |         (JSC::dateProtoFuncGetUTCFullYear): | 
 |         (JSC::dateProtoFuncGetMonth): | 
 |         (JSC::dateProtoFuncGetUTCMonth): | 
 |         (JSC::dateProtoFuncGetDate): | 
 |         (JSC::dateProtoFuncGetUTCDate): | 
 |         (JSC::dateProtoFuncGetDay): | 
 |         (JSC::dateProtoFuncGetUTCDay): | 
 |         (JSC::dateProtoFuncGetHours): | 
 |         (JSC::dateProtoFuncGetUTCHours): | 
 |         (JSC::dateProtoFuncGetMinutes): | 
 |         (JSC::dateProtoFuncGetUTCMinutes): | 
 |         (JSC::dateProtoFuncGetSeconds): | 
 |         (JSC::dateProtoFuncGetUTCSeconds): | 
 |         (JSC::dateProtoFuncGetMilliSeconds): | 
 |         (JSC::dateProtoFuncGetUTCMilliseconds): | 
 |         (JSC::dateProtoFuncGetTimezoneOffset): | 
 |         (JSC::dateProtoFuncSetTime): | 
 |         (JSC::setNewValueFromTimeArgs): | 
 |         (JSC::setNewValueFromDateArgs): | 
 |         (JSC::dateProtoFuncSetYear): | 
 |         (JSC::dateProtoFuncGetYear): | 
 |         * runtime/ExceptionHelpers.cpp: | 
 |         (JSC::isTerminatedExecutionException): | 
 |         * runtime/FunctionPrototype.cpp: | 
 |         (JSC::functionProtoFuncToString): | 
 |         * runtime/InternalFunction.h: | 
 |         (JSC::asInternalFunction): | 
 |         * runtime/JSArray.h: | 
 |         (JSC::asArray): | 
 |         * runtime/JSCJSValue.cpp: | 
 |         (JSC::JSValue::dumpForBacktrace const): | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCJSValueInlines.h: | 
 |         (JSC::JSValue::inherits const): | 
 |         * runtime/JSCast.h: | 
 |         (JSC::JSCastingHelpers::inheritsGenericImpl): | 
 |         (JSC::JSCastingHelpers::inheritsJSTypeImpl): | 
 |         (JSC::JSCastingHelpers::InheritsTraits::inherits): | 
 |         (JSC::JSCastingHelpers::inherits): | 
 |         (JSC::jsDynamicCast): | 
 |         (JSC::JSCastingHelpers::jsDynamicCastGenericImpl): Deleted. | 
 |         (JSC::JSCastingHelpers::jsDynamicCastJSTypeImpl): Deleted. | 
 |         (JSC::JSCastingHelpers::JSDynamicCastTraits::cast): Deleted. | 
 |         * runtime/JSCell.h: | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::inherits const): | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::RetrieveCallerFunctionFunctor::operator() const): | 
 |         (JSC::JSFunction::callerGetter): | 
 |         (JSC::JSFunction::getOwnNonIndexPropertyNames): | 
 |         (JSC::JSFunction::reifyLazyBoundNameIfNeeded): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::enqueueJob): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::asGlobalObject): Deleted. | 
 |         * runtime/JSInternalPromiseDeferred.cpp: | 
 |         (JSC::JSInternalPromiseDeferred::create): | 
 |         * runtime/JSLexicalEnvironment.h: | 
 |         (JSC::asActivation): | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::unwrapBoxedPrimitive): | 
 |         (JSC::Stringifier::Stringifier): | 
 |         (JSC::Walker::walk): | 
 |         * runtime/JSPromise.cpp: | 
 |         (JSC::JSPromise::resolve): | 
 |         * runtime/JSPromiseDeferred.cpp: | 
 |         (JSC::JSPromiseDeferred::create): | 
 |         * runtime/JSType.h: | 
 |         * runtime/ProxyObject.h: | 
 |         (JSC::ProxyObject::create): Deleted. | 
 |         (JSC::ProxyObject::createStructure): Deleted. | 
 |         (JSC::ProxyObject::target const): Deleted. | 
 |         (JSC::ProxyObject::handler const): Deleted. | 
 |         * runtime/RegExpConstructor.cpp: | 
 |         (JSC::constructRegExp): | 
 |         * runtime/RegExpConstructor.h: | 
 |         (JSC::asRegExpConstructor): | 
 |         (JSC::isRegExp): | 
 |         * runtime/RegExpObject.cpp: | 
 |         (JSC::RegExpObject::finishCreation): | 
 |         (JSC::RegExpObject::getOwnPropertySlot): | 
 |         (JSC::RegExpObject::defineOwnProperty): | 
 |         (JSC::regExpObjectSetLastIndexStrict): | 
 |         (JSC::regExpObjectSetLastIndexNonStrict): | 
 |         (JSC::RegExpObject::put): | 
 |         * runtime/RegExpObject.h: | 
 |         (JSC::RegExpObject::create): Deleted. | 
 |         (JSC::RegExpObject::setRegExp): Deleted. | 
 |         (JSC::RegExpObject::regExp const): Deleted. | 
 |         (JSC::RegExpObject::setLastIndex): Deleted. | 
 |         (JSC::RegExpObject::getLastIndex const): Deleted. | 
 |         (JSC::RegExpObject::test): Deleted. | 
 |         (JSC::RegExpObject::testInline): Deleted. | 
 |         (JSC::RegExpObject::createStructure): Deleted. | 
 |         (JSC::RegExpObject::offsetOfRegExp): Deleted. | 
 |         (JSC::RegExpObject::offsetOfLastIndex): Deleted. | 
 |         (JSC::RegExpObject::offsetOfLastIndexIsWritable): Deleted. | 
 |         (JSC::RegExpObject::allocationSize): Deleted. | 
 |         (JSC::asRegExpObject): Deleted. | 
 |         * runtime/RegExpPrototype.cpp: | 
 |         (JSC::regExpProtoFuncTestFast): | 
 |         (JSC::regExpProtoFuncExec): | 
 |         (JSC::regExpProtoFuncMatchFast): | 
 |         (JSC::regExpProtoFuncCompile): | 
 |         (JSC::regExpProtoGetterGlobal): | 
 |         (JSC::regExpProtoGetterIgnoreCase): | 
 |         (JSC::regExpProtoGetterMultiline): | 
 |         (JSC::regExpProtoGetterDotAll): | 
 |         (JSC::regExpProtoGetterSticky): | 
 |         (JSC::regExpProtoGetterUnicode): | 
 |         (JSC::regExpProtoGetterSource): | 
 |         (JSC::regExpProtoFuncSearchFast): | 
 |         (JSC::regExpProtoFuncSplitFast): | 
 |         * runtime/StringObject.h: | 
 |         (JSC::asStringObject): Deleted. | 
 |         * runtime/StringPrototype.cpp: | 
 |         (JSC::replaceUsingRegExpSearch): | 
 |         (JSC::replace): | 
 |         (JSC::stringProtoFuncReplaceUsingRegExp): | 
 |         (JSC::stringProtoFuncToString): | 
 |         * runtime/SymbolPrototype.cpp: | 
 |         (JSC::symbolProtoFuncToString): | 
 |         (JSC::symbolProtoFuncValueOf): | 
 |         * tools/JSDollarVM.cpp: | 
 |         (WTF::customGetValue): | 
 |         (WTF::customSetValue): | 
 |         * wasm/js/JSWebAssemblyHelpers.h: | 
 |         (JSC::isWebAssemblyHostFunction): | 
 |         * wasm/js/WebAssemblyWrapperFunction.cpp: | 
 |         (JSC::WebAssemblyWrapperFunction::create): | 
 |  | 
 | 2018-03-07  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Sort and separate FeatureDefines.xcconfig | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183427 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         Sort and split FeatureDefines into paragraphs | 
 |         (to make it easier to sort later). | 
 |  | 
 | 2018-03-07  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Unreviewed, fix 32-bit build. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): | 
 |  | 
 | 2018-03-07  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Meta-program setupArguments and callOperation | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183263 | 
 |  | 
 |         Rubber-stamped by Filip Pizlo. | 
 |  | 
 |         This patch removes all the custom overrides of callOperation and setupArguments | 
 |         throughout the JITs. In their place there is a new setupArguments that marshalls | 
 |         the arguments into place based on the type of the operation's function pointer. | 
 |         There were a couple of design choices in the implementation of setupArguments: | 
 |  | 
 |         1) We assume that no TrustedImm floating point values are passed. | 
 |         2) If ExecState* is the first argument the callFrameRegister should be marshalled implicitly. | 
 |         3) Types should not be implicitly converted (with the exception of DFG::RegisteredStructure -> Structure*) | 
 |  | 
 |         The new callOperation/setupArguments do their best to make sure | 
 |         it's hard to call a function with the wrong parameters. They will | 
 |         only try to pattern match if the types match up with the next | 
 |         passed argument. Additionally, the base case should static_assert | 
 |         of the number of inferred arguments does not match the arity of | 
 |         the operation's function pointer. | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr): | 
 |         (JSC::AbstractMacroAssembler::TrustedImmPtr::asPtr): | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::poke): | 
 |         (JSC::MacroAssembler::move): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::swap): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::storeDouble): | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::loadDouble): | 
 |         (JSC::MacroAssemblerX86Common::swap): | 
 |         (JSC::MacroAssemblerX86Common::move): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/AccessCaseSnippetParams.cpp: | 
 |         (JSC::SlowPathCallGeneratorWithArguments::generateImpl): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::AccessGenerationState::emitExplicitExceptionHandler): | 
 |         * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: | 
 |         * dfg/DFGNode.h: | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::emitRestoreArguments): | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::osrWriteBarrier): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGSlowPathGenerator.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileArithDoubleUnaryOp): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithMod): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithRounding): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithSqrt): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateActivation): | 
 |         (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::TrustedImmPtr): | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::operator MacroAssembler::TrustedImm const): | 
 |         (JSC::DFG::SpeculativeJIT::initConstantInfo): | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         (JSC::DFG::SpeculativeJIT::callOperationWithCallFrameRollbackOnException): | 
 |         (JSC::DFG::SpeculativeJIT::callCustomGetter): Deleted. | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetById): | 
 |         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): | 
 |         (JSC::DFG::SpeculativeJIT::cachedPutById): | 
 |         (JSC::DFG::SpeculativeJIT::emitCall): | 
 |         (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitCall): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileStub): | 
 |         * ftl/FTLSlowPathCall.h: | 
 |         (JSC::FTL::callOperation): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo): | 
 |         * jit/CCallHelpers.cpp: | 
 |         (JSC::CCallHelpers::ensureShadowChickenPacket): | 
 |         * jit/CCallHelpers.h: | 
 |         (JSC::CCallHelpers::setupArgument): | 
 |         (JSC::CCallHelpers::setupStubArgs): | 
 |         (JSC::CCallHelpers::ArgCollection::ArgCollection): | 
 |         (JSC::CCallHelpers::ArgCollection::pushRegArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addGPRArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addStackArg): | 
 |         (JSC::CCallHelpers::ArgCollection::addPoke): | 
 |         (JSC::CCallHelpers::ArgCollection::argCount): | 
 |         (JSC::CCallHelpers::clampArrayToSize): | 
 |         (JSC::CCallHelpers::pokeForArgument): | 
 |         (JSC::CCallHelpers::marshallArgumentRegister): | 
 |         (JSC::CCallHelpers::setupArgumentsImpl): | 
 |         (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): | 
 |         (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): | 
 |         (JSC::CCallHelpers::setupArguments): | 
 |         (JSC::CCallHelpers::prepareForTailCallSlow): | 
 |         (JSC::CCallHelpers::setupArgumentsWithExecState): Deleted. | 
 |         (JSC::CCallHelpers::resetCallArguments): Deleted. | 
 |         (JSC::CCallHelpers::addCallArgument): Deleted. | 
 |         (JSC::CCallHelpers::setupArgumentsExecState): Deleted. | 
 |         (JSC::CCallHelpers::setupTwoStubArgsGPR): Deleted. | 
 |         (JSC::CCallHelpers::setupThreeStubArgsGPR): Deleted. | 
 |         (JSC::CCallHelpers::setupFourStubArgsGPR): Deleted. | 
 |         (JSC::CCallHelpers::setupFiveStubArgsGPR): Deleted. | 
 |         (JSC::CCallHelpers::setupTwoStubArgsFPR): Deleted. | 
 |         (JSC::CCallHelpers::setupStubArguments): Deleted. | 
 |         (JSC::CCallHelpers::setupArgumentsWithExecStateForCallWithSlowPathReturnType): Deleted. | 
 |         (JSC::CCallHelpers::setupStubArguments134): Deleted. | 
 |         (JSC::CCallHelpers::setupStubArgsGPR): Deleted. | 
 |         * jit/FPRInfo.h: | 
 |         (JSC::toInfoFromReg): | 
 |         * jit/GPRInfo.h: | 
 |         (JSC::JSValueRegs::JSValueRegs): | 
 |         (JSC::toInfoFromReg): | 
 |         * jit/JIT.h: | 
 |         (JSC::JIT::callOperation): | 
 |         (JSC::JIT::callOperationWithProfile): | 
 |         (JSC::JIT::callOperationWithResult): | 
 |         (JSC::JIT::callOperationNoExceptionCheck): | 
 |         (JSC::JIT::callOperationWithCallFrameRollbackOnException): | 
 |         * jit/JITArithmetic.cpp: | 
 |         (JSC::JIT::emitMathICFast): | 
 |         (JSC::JIT::emitMathICSlow): | 
 |         * jit/JITArithmetic32_64.cpp: | 
 |         (JSC::JIT::emit_compareAndJumpSlow): | 
 |         * jit/JITCall32_64.cpp: | 
 |         (JSC::JIT::compileSetupVarargsFrame): | 
 |         * jit/JITInlines.h: | 
 |         (JSC::JIT::callOperation): Deleted. | 
 |         (JSC::JIT::callOperationNoExceptionCheck): Deleted. | 
 |         (JSC::JIT::callOperationWithCallFrameRollbackOnException): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_array_with_size): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emitSlow_op_instanceof): | 
 |         (JSC::JIT::emitSlow_op_instanceof_custom): | 
 |         (JSC::JIT::emit_op_set_function_name): | 
 |         (JSC::JIT::emitSlow_op_eq): | 
 |         (JSC::JIT::emitSlow_op_neq): | 
 |         (JSC::JIT::emit_op_throw): | 
 |         (JSC::JIT::emit_op_switch_imm): | 
 |         (JSC::JIT::emit_op_switch_char): | 
 |         (JSC::JIT::emit_op_switch_string): | 
 |         (JSC::JIT::emitSlow_op_has_indexed_property): | 
 |         * jit/JITOperations.cpp: | 
 |         * jit/JITOperations.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_with_this): | 
 |         (JSC::JIT::emitSlow_op_get_from_scope): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::emit_op_put_by_index): | 
 |         (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::emitGetByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_get_by_val): | 
 |         (JSC::JIT::emitPutByValWithCachedId): | 
 |         (JSC::JIT::emitSlow_op_put_by_val): | 
 |         (JSC::JIT::emitSlow_op_try_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_by_id_with_this): | 
 |         (JSC::JIT::emitSlow_op_put_by_id): | 
 |         (JSC::JIT::emitSlow_op_get_from_scope): | 
 |         * jit/RegisterSet.h: | 
 |         (JSC::RegisterSet::RegisterSet): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::slowPathFor): | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionBreakpoint): | 
 |         * runtime/JSCJSValue.h: | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::wasmToJS): | 
 |  | 
 | 2018-03-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Rename ProtoCallFrame::arityMissMatch to hasArityMismatch. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183414 | 
 |         <rdar://problem/38231678> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * interpreter/ProtoCallFrame.cpp: | 
 |         (JSC::ProtoCallFrame::init): | 
 |         * interpreter/ProtoCallFrame.h: | 
 |  | 
 | 2018-03-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Simplify the variants of FunctionPtr constructors. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183399 | 
 |         <rdar://problem/38212980> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::FunctionPtr::FunctionPtr): | 
 |  | 
 | 2018-03-06  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         MarkedArgumentsBuffer should allocate from the JSValue Gigacage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183377 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |          | 
 |         That prevents it from being used to pivot UAF on malloc memory into corruption in the JS heap. | 
 |  | 
 |         * runtime/ArgList.cpp: | 
 |         (JSC::MarkedArgumentBuffer::expandCapacity): | 
 |  | 
 | 2018-03-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add support for ARM64E. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183398 | 
 |         <rdar://problem/38212621> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/backends.rb: | 
 |  | 
 | 2018-03-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         HTML `pattern` attribute should set `u` flag for regular expressions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=151598 | 
 |  | 
 |         Reviewed by Chris Dumez. | 
 |  | 
 |         Add UnicodeMode for JSC::Yarr::RegularExpression. | 
 |  | 
 |         * yarr/RegularExpression.cpp: | 
 |         (JSC::Yarr::RegularExpression::Private::create): | 
 |         (JSC::Yarr::RegularExpression::Private::Private): | 
 |         (JSC::Yarr::RegularExpression::Private::compile): | 
 |         (JSC::Yarr::RegularExpression::RegularExpression): | 
 |         * yarr/RegularExpression.h: | 
 |  | 
 | 2018-03-07  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Add more JSType based fast path for jsDynamicCast | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183403 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         We add more JSType based fast path for jsDynamicCast. Basically, we add miscellaneous JSTypes which | 
 |         are used for jsDynamicCast in JSC, arguments types, and scope types. | 
 |  | 
 |         We also add ClassInfo to JSScope and JSSegmentedVariableObject since they are used with jsDynamicCast. | 
 |  | 
 |         * jit/JITOperations.cpp: | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::setUpCall): | 
 |         * runtime/ClonedArguments.h: | 
 |         (JSC::ClonedArguments::specialsMaterialized const): Deleted. | 
 |         * runtime/DirectArguments.h: | 
 |         (JSC::DirectArguments::subspaceFor): Deleted. | 
 |         (JSC::DirectArguments::internalLength const): Deleted. | 
 |         (JSC::DirectArguments::length const): Deleted. | 
 |         (JSC::DirectArguments::isMappedArgument const): Deleted. | 
 |         (JSC::DirectArguments::isMappedArgumentInDFG const): Deleted. | 
 |         (JSC::DirectArguments::getIndexQuickly const): Deleted. | 
 |         (JSC::DirectArguments::setIndexQuickly): Deleted. | 
 |         (JSC::DirectArguments::callee): Deleted. | 
 |         (JSC::DirectArguments::argument): Deleted. | 
 |         (JSC::DirectArguments::overrodeThings const): Deleted. | 
 |         (JSC::DirectArguments::initModifiedArgumentsDescriptorIfNecessary): Deleted. | 
 |         (JSC::DirectArguments::setModifiedArgumentDescriptor): Deleted. | 
 |         (JSC::DirectArguments::isModifiedArgumentDescriptor): Deleted. | 
 |         (JSC::DirectArguments::offsetOfCallee): Deleted. | 
 |         (JSC::DirectArguments::offsetOfLength): Deleted. | 
 |         (JSC::DirectArguments::offsetOfMinCapacity): Deleted. | 
 |         (JSC::DirectArguments::offsetOfMappedArguments): Deleted. | 
 |         (JSC::DirectArguments::offsetOfModifiedArgumentsDescriptor): Deleted. | 
 |         (JSC::DirectArguments::storageOffset): Deleted. | 
 |         (JSC::DirectArguments::offsetOfSlot): Deleted. | 
 |         (JSC::DirectArguments::allocationSize): Deleted. | 
 |         (JSC::DirectArguments::storage): Deleted. | 
 |         * runtime/JSCast.h: | 
 |         * runtime/JSGlobalLexicalEnvironment.h: | 
 |         (JSC::JSGlobalLexicalEnvironment::create): Deleted. | 
 |         (JSC::JSGlobalLexicalEnvironment::isEmpty const): Deleted. | 
 |         (JSC::JSGlobalLexicalEnvironment::createStructure): Deleted. | 
 |         (JSC::JSGlobalLexicalEnvironment::JSGlobalLexicalEnvironment): Deleted. | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::finishCreation): | 
 |         * runtime/JSMap.h: | 
 |         (JSC::isJSMap): Deleted. | 
 |         * runtime/JSModuleEnvironment.h: | 
 |         (JSC::JSModuleEnvironment::create): Deleted. | 
 |         (JSC::JSModuleEnvironment::createStructure): Deleted. | 
 |         (JSC::JSModuleEnvironment::offsetOfModuleRecord): Deleted. | 
 |         (JSC::JSModuleEnvironment::allocationSize): Deleted. | 
 |         (JSC::JSModuleEnvironment::moduleRecord): Deleted. | 
 |         (JSC::JSModuleEnvironment::moduleRecordSlot): Deleted. | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::canDoFastPutDirectIndex): | 
 |         (JSC::JSObject::defineOwnIndexedProperty): | 
 |         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSFinalObject::allocationSize): Deleted. | 
 |         (JSC::JSFinalObject::typeInfo): Deleted. | 
 |         (JSC::JSFinalObject::defaultInlineCapacity): Deleted. | 
 |         (JSC::JSFinalObject::maxInlineCapacity): Deleted. | 
 |         (JSC::JSFinalObject::createStructure): Deleted. | 
 |         (JSC::JSFinalObject::finishCreation): Deleted. | 
 |         (JSC::JSFinalObject::JSFinalObject): Deleted. | 
 |         (JSC::isJSFinalObject): Deleted. | 
 |         * runtime/JSScope.cpp: | 
 |         * runtime/JSScope.h: | 
 |         * runtime/JSSegmentedVariableObject.cpp: | 
 |         * runtime/JSSegmentedVariableObject.h: | 
 |         * runtime/JSSet.h: | 
 |         (JSC::isJSSet): Deleted. | 
 |         * runtime/JSType.h: | 
 |         * runtime/JSWeakMap.h: | 
 |         (JSC::isJSWeakMap): Deleted. | 
 |         * runtime/JSWeakSet.h: | 
 |         (JSC::isJSWeakSet): Deleted. | 
 |         * runtime/JSWithScope.h: | 
 |         (JSC::JSWithScope::object): Deleted. | 
 |         * runtime/MapConstructor.cpp: | 
 |         (JSC::constructMap): | 
 |         (JSC::mapPrivateFuncMapBucketHead): | 
 |         * runtime/MapPrototype.cpp: | 
 |         (JSC::getMap): | 
 |         * runtime/NumberObject.cpp: | 
 |         (JSC::NumberObject::finishCreation): | 
 |         * runtime/NumberPrototype.cpp: | 
 |         (JSC::toThisNumber): | 
 |         (JSC::numberProtoFuncToExponential): | 
 |         (JSC::numberProtoFuncToFixed): | 
 |         (JSC::numberProtoFuncToPrecision): | 
 |         (JSC::numberProtoFuncToString): | 
 |         (JSC::numberProtoFuncToLocaleString): | 
 |         (JSC::numberProtoFuncValueOf): | 
 |         * runtime/ObjectConstructor.cpp: | 
 |         (JSC::objectConstructorSeal): | 
 |         (JSC::objectConstructorFreeze): | 
 |         (JSC::objectConstructorIsSealed): | 
 |         (JSC::objectConstructorIsFrozen): | 
 |         * runtime/ProxyObject.cpp: | 
 |         (JSC::ProxyObject::finishCreation): | 
 |         * runtime/ScopedArguments.h: | 
 |         (JSC::ScopedArguments::subspaceFor): Deleted. | 
 |         (JSC::ScopedArguments::internalLength const): Deleted. | 
 |         (JSC::ScopedArguments::length const): Deleted. | 
 |         (JSC::ScopedArguments::isMappedArgument const): Deleted. | 
 |         (JSC::ScopedArguments::isMappedArgumentInDFG const): Deleted. | 
 |         (JSC::ScopedArguments::getIndexQuickly const): Deleted. | 
 |         (JSC::ScopedArguments::setIndexQuickly): Deleted. | 
 |         (JSC::ScopedArguments::callee): Deleted. | 
 |         (JSC::ScopedArguments::overrodeThings const): Deleted. | 
 |         (JSC::ScopedArguments::initModifiedArgumentsDescriptorIfNecessary): Deleted. | 
 |         (JSC::ScopedArguments::setModifiedArgumentDescriptor): Deleted. | 
 |         (JSC::ScopedArguments::isModifiedArgumentDescriptor): Deleted. | 
 |         (JSC::ScopedArguments::offsetOfOverrodeThings): Deleted. | 
 |         (JSC::ScopedArguments::offsetOfTotalLength): Deleted. | 
 |         (JSC::ScopedArguments::offsetOfTable): Deleted. | 
 |         (JSC::ScopedArguments::offsetOfScope): Deleted. | 
 |         (JSC::ScopedArguments::overflowStorageOffset): Deleted. | 
 |         (JSC::ScopedArguments::allocationSize): Deleted. | 
 |         (JSC::ScopedArguments::overflowStorage const): Deleted. | 
 |         * runtime/SetConstructor.cpp: | 
 |         (JSC::constructSet): | 
 |         (JSC::setPrivateFuncSetBucketHead): | 
 |         * runtime/SetPrototype.cpp: | 
 |         (JSC::getSet): | 
 |         * runtime/StrictEvalActivation.h: | 
 |         (JSC::StrictEvalActivation::create): Deleted. | 
 |         (JSC::StrictEvalActivation::createStructure): Deleted. | 
 |         * runtime/WeakMapPrototype.cpp: | 
 |         (JSC::getWeakMap): | 
 |         * runtime/WeakSetPrototype.cpp: | 
 |         (JSC::getWeakSet): | 
 |  | 
 | 2018-03-07  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] offlineasm: fix indentation in armOpcodeReversedOperands | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183400 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * offlineasm/arm.rb: | 
 |  | 
 | 2018-03-06  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Prepare LLInt code to support pointer profiling. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183387 | 
 |         <rdar://problem/38199678> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         1. Introduced PtrTag enums for supporting pointer profiling later. | 
 |  | 
 |         2. Also introduced tagging, untagging, retagging, and tag removal placeholder | 
 |            template functions for the same purpose. | 
 |  | 
 |         3. Prepare the offlineasm for supporting pointer profiling later. | 
 |  | 
 |         4. Tagged some pointers in LLInt asm code.  Currently, these should have no | 
 |            effect on behavior. | 
 |  | 
 |         5. Removed returnToThrowForThrownException() because it is not used anywhere. | 
 |  | 
 |         6. Added the offlineasm folder to JavaScriptCore Xcode project so that it's | 
 |            easier to view and edit these files in Xcode. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/LLIntCallLinkInfo.h: | 
 |         (JSC::LLIntCallLinkInfo::unlink): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         * llint/LLIntExceptions.cpp: | 
 |         (JSC::LLInt::returnToThrowForThrownException): Deleted. | 
 |         * llint/LLIntExceptions.h: | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LLIntOffsetsExtractor.cpp: | 
 |         * llint/LLIntPCRanges.h: | 
 |         (JSC::LLInt::isLLIntPC): | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         (JSC::LLInt::handleHostCall): | 
 |         (JSC::LLInt::setUpCall): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/ast.rb: | 
 |         * offlineasm/instructions.rb: | 
 |         * offlineasm/risc.rb: | 
 |         * runtime/PtrTag.h: Added. | 
 |         (JSC::uniquePtrTagID): | 
 |         (JSC::ptrTag): | 
 |         (JSC::tagCodePtr): | 
 |         (JSC::untagCodePtr): | 
 |         (JSC::retagCodePtr): | 
 |         (JSC::removeCodePtrTag): | 
 |  | 
 | 2018-03-06  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] Assembler warnings: "use of r13 is deprecated" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183286 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Usage of sp/r13 as operand Rm is deprecated on ARM. offlineasm | 
 |         sometimes generates assembly code that triggers this warning. Prevent | 
 |         this by simply switching operands. | 
 |  | 
 |         * offlineasm/arm.rb: | 
 |  | 
 | 2018-03-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix incorrect assertion after r229309 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182975 | 
 |  | 
 |         * runtime/TypeProfilerLog.cpp: | 
 |         (JSC::TypeProfilerLog::TypeProfilerLog): | 
 |  | 
 | 2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Fix std::make_unique / new[] using system malloc | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182975 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         Use Vector, FAST_ALLOCATED, or UniqueArray instead. | 
 |  | 
 |         * API/JSStringRefCF.cpp: | 
 |         (JSStringCreateWithCFString): | 
 |         * bytecode/BytecodeKills.h: | 
 |         * bytecode/BytecodeLivenessAnalysis.cpp: | 
 |         (JSC::BytecodeLivenessAnalysis::computeKills): | 
 |         * dfg/DFGDisassembler.cpp: | 
 |         (JSC::DFG::Disassembler::dumpDisassembly): | 
 |         * jit/PolymorphicCallStubRoutine.cpp: | 
 |         (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): | 
 |         * jit/PolymorphicCallStubRoutine.h: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jsc.cpp: | 
 |         (currentWorkingDirectory): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::initialize): | 
 |         * llint/LLIntData.h: | 
 |         * runtime/ArgList.h: | 
 |         * runtime/StructureChain.h: | 
 |         * runtime/StructureIDTable.cpp: | 
 |         (JSC::StructureIDTable::StructureIDTable): | 
 |         (JSC::StructureIDTable::resize): | 
 |         * runtime/StructureIDTable.h: | 
 |         * runtime/TypeProfilerLog.cpp: | 
 |         (JSC::TypeProfilerLog::TypeProfilerLog): | 
 |         (JSC::TypeProfilerLog::initializeLog): Deleted. | 
 |         * runtime/TypeProfilerLog.h: | 
 |         (JSC::TypeProfilerLog::TypeProfilerLog): Deleted. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::~VM): | 
 |         (JSC::VM::acquireRegExpPatternContexBuffer): | 
 |         * runtime/VM.h: | 
 |         * testRegExp.cpp: | 
 |         (runFromFiles): | 
 |         * tools/HeapVerifier.cpp: | 
 |         (JSC::HeapVerifier::HeapVerifier): | 
 |         * tools/HeapVerifier.h: | 
 |  | 
 | 2018-03-05  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         JITThunk functions should only be called when the JIT is enabled. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183351 | 
 |         <rdar://problem/38160091> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * jit/JITThunks.cpp: | 
 |         (JSC::JITThunks::ctiNativeCall): | 
 |         (JSC::JITThunks::ctiNativeConstruct): | 
 |         (JSC::JITThunks::ctiInternalFunctionCall): | 
 |         (JSC::JITThunks::ctiInternalFunctionConstruct): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         (JSC::VM::getCTIInternalFunctionTrampolineFor): | 
 |  | 
 | 2018-03-05  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: build fix. | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * interpreter/AbstractPC.h: | 
 |         (JSC::AbstractPC::AbstractPC): | 
 |  | 
 | 2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Use WTF::ArithmeticOperations for CLoop overflow operations | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183324 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         We have WTF::ArithmeticOperations which has operations with overflow checking. | 
 |         This is suitable for CLoop's overflow checking operations. This patch emits | 
 |         WTF::ArithmeticOperations for CLoop's overflow checking operations. And it is | 
 |         lowered to optimized code using CPU's overflow flag. | 
 |  | 
 |         * offlineasm/cloop.rb: | 
 |  | 
 | 2018-03-05  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         [CMake] Split JSC header copying into public and private targets | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183251 | 
 |  | 
 |         Reviewed by Konstantin Tokarev. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [WTF] Move currentCPUTime and sleep(Seconds) to CPUTime.h and Seconds.h respectively | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183312 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Remove wtf/CurrentTime.h include pragma. | 
 |  | 
 |         * API/tests/ExecutionTimeLimitTest.cpp: | 
 |         (currentCPUTimeAsJSFunctionCallback): | 
 |         (testExecutionTimeLimit): | 
 |         * bytecode/SuperSampler.cpp: | 
 |         * dfg/DFGPlan.cpp: | 
 |         * heap/BlockDirectory.cpp: | 
 |         * heap/Heap.cpp: | 
 |         * heap/IncrementalSweeper.cpp: | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: | 
 |         * inspector/agents/InspectorRuntimeAgent.cpp: | 
 |         * profiler/ProfilerDatabase.cpp: | 
 |         * runtime/CodeCache.h: | 
 |         * runtime/JSDateMath.cpp: | 
 |         * runtime/TypeProfilerLog.cpp: | 
 |         * runtime/VM.cpp: | 
 |         * runtime/Watchdog.cpp: | 
 |         (JSC::Watchdog::shouldTerminate): | 
 |         (JSC::Watchdog::startTimer): | 
 |         * testRegExp.cpp: | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |  | 
 | 2018-03-04  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Make !ENABLE(DATA_DETECTION) iOS build actually succeed | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183283 | 
 |         <rdar://problem/38062148> | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-03-02  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Make the LLInt probe work for ARM64. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183298 | 
 |         <rdar://problem/38077413> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * llint/LowLevelInterpreter.asm: | 
 |  | 
 | 2018-03-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Annotate more classes with WTF_MAKE_FAST_ALLOCATED | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183279 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * bytecode/BytecodeIntrinsicRegistry.h: | 
 |         * ftl/FTLThunks.h: | 
 |         * heap/CodeBlockSet.h: | 
 |         * heap/GCSegmentedArray.h: | 
 |         * heap/MachineStackMarker.h: | 
 |         * heap/MarkingConstraintSet.h: | 
 |  | 
 | 2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Remove monotonicallyIncreasingTime | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182911 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         * debugger/Debugger.cpp: | 
 |         (JSC::Debugger::willEvaluateScript): | 
 |         (JSC::Debugger::didEvaluateScript): | 
 |         * debugger/Debugger.h: | 
 |         * debugger/ScriptProfilingScope.h: | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: | 
 |         (Inspector::InspectorDebuggerAgent::breakpointActionProbe): | 
 |         * inspector/agents/InspectorHeapAgent.cpp: | 
 |         (Inspector::InspectorHeapAgent::snapshot): | 
 |         (Inspector::InspectorHeapAgent::didGarbageCollect): | 
 |         (Inspector::InspectorHeapAgent::dispatchGarbageCollectedEvent): | 
 |         * inspector/agents/InspectorHeapAgent.h: | 
 |         * inspector/agents/InspectorScriptProfilerAgent.cpp: | 
 |         (Inspector::InspectorScriptProfilerAgent::startTracking): | 
 |         (Inspector::InspectorScriptProfilerAgent::willEvaluateScript): | 
 |         (Inspector::InspectorScriptProfilerAgent::didEvaluateScript): | 
 |         (Inspector::InspectorScriptProfilerAgent::addEvent): | 
 |         (Inspector::buildSamples): | 
 |         * inspector/agents/InspectorScriptProfilerAgent.h: | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::takeSample): | 
 |         * runtime/SamplingProfiler.h: | 
 |  | 
 | 2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         ASSERTION FAILED: matchContextualKeyword(m_vm->propertyNames->async) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183173 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Classifier could propagate an error which does not occur at the first token | 
 |         of the given expression. We should check whether the given token is "async" | 
 |         instead of assertion. | 
 |  | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseAssignmentExpression): | 
 |  | 
 | 2018-03-01  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         We need to clear cached structures when having a bad time | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183256 | 
 |         <rdar://problem/36245022> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch makes both InternalFunctionAllocationProfile and the VM's | 
 |         structure cache having-a-bad-time aware. For InternalFunctionAllocationProfile, | 
 |         we clear them when they'd produce an object with a bad indexing type. | 
 |         For the VM's Structure cache, we conservatively clear the entire cache  | 
 |         since it may be housing Structures with bad indexing types. | 
 |  | 
 |         * runtime/FunctionRareData.h: | 
 |         (JSC::FunctionRareData::clearInternalFunctionAllocationProfile): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::haveABadTime): | 
 |         * runtime/StructureCache.h: | 
 |         (JSC::StructureCache::clear): | 
 |  | 
 | 2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, fix exception check for ExceptionScope | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183175 | 
 |  | 
 |         * jsc.cpp: | 
 |         (GlobalObject::moduleLoaderFetch): | 
 |  | 
 | 2018-02-28  Dominik Infuehr  <dinfuehr@igalia.com> | 
 |  | 
 |         [ARM] Fix compile error in debug builds by invoking unpoisoned(). | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): Fix compile error. | 
 |         (JSC::MacroAssemblerCodePtr::createFromExecutableAddress()): Ditto. | 
 |         (JSC::MacroAssemblerCodePtr::dataLocation()): Ditto. | 
 |         * yarr/YarrInterpreter.cpp: | 
 |         (JSC::Yarr::ByteCompiler::dumpDisjunction): use %zu for printf'ing size_t. | 
 |  | 
 | 2018-02-28  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         GC should sweep code block before deleting | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183229 | 
 |         <rdar://problem/32767615> | 
 |  | 
 |         Reviewed by Saam Barati, Fil Pizlo. | 
 |  | 
 |         Stub routines shouldn't get deleted before codeblocks have been | 
 |         swept, otherwise there's a small race window where the codeblock | 
 |         thinks it's still reachable. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::deleteUnmarkedCompiledCode): | 
 |         (JSC::Heap::sweepInFinalize): | 
 |  | 
 | 2018-02-28  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         JSC crash with `import("")` | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183175 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Add file existence and file type check for module loader implementation in jsc.cpp. | 
 |         This is not safe for TOCTOU, but it is OK since this functionality is used for the | 
 |         JSC shell (jsc.cpp): testing purpose. | 
 |  | 
 |         * jsc.cpp: | 
 |         (fillBufferWithContentsOfFile): | 
 |         (fetchModuleFromLocalFileSystem): | 
 |  | 
 | 2018-02-27  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Replace TrustedImmPtr(0) with TrustedImmPtr(nullptr) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183195 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * assembler/AbstractMacroAssembler.h: | 
 |         (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr): | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::patchableBranchPtr): | 
 |         (JSC::MacroAssembler::patchableBranchPtrWithPatch): | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         (JSC::MacroAssemblerARM::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM::storePtrWithPatch): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::call): | 
 |         (JSC::MacroAssemblerARM64::tailRecursiveCall): | 
 |         (JSC::MacroAssemblerARM64::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM64::patchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARM64::storePtrWithPatch): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         (JSC::MacroAssemblerARMv7::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARMv7::patchableBranchPtr): | 
 |         (JSC::MacroAssemblerARMv7::patchableBranchPtrWithPatch): | 
 |         (JSC::MacroAssemblerARMv7::storePtrWithPatch): | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         (JSC::MacroAssemblerMIPS::branchPtrWithPatch): | 
 |         (JSC::MacroAssemblerMIPS::storePtrWithPatch): | 
 |         * assembler/MacroAssemblerX86.h: | 
 |         (JSC::MacroAssemblerX86::branchPtrWithPatch): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::callWithSlowPathReturnType): | 
 |         (JSC::MacroAssemblerX86_64::call): | 
 |         (JSC::MacroAssemblerX86_64::tailRecursiveCall): | 
 |         (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): | 
 |         (JSC::MacroAssemblerX86_64::branchPtrWithPatch): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileToLowerCase): | 
 |         (JSC::DFG::SpeculativeJIT::compileMakeRope): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread): | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::TrustedImmPtr): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitCall): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrExitGenerationThunkGenerator): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::genericGenerationThunkGenerator): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::debugCall): | 
 |         (JSC::AssemblyHelpers::sanitizeStackInline): | 
 |         * jit/IntrinsicEmitter.cpp: | 
 |         (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter): | 
 |         * jit/JITCall.cpp: | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/JITCall32_64.cpp: | 
 |         (JSC::JIT::compileOpCall): | 
 |         * jit/ScratchRegisterAllocator.cpp: | 
 |         (JSC::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBufferForCall): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::initParenContextFreeList): | 
 |         (JSC::Yarr::YarrGenerator::storeToFrameWithPatch): | 
 |         (JSC::Yarr::YarrGenerator::generate): | 
 |  | 
 | 2018-02-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Modernize FINALIZE_CODE and peer macros to use __VA_ARGS__ arguments. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183159 | 
 |         <rdar://problem/37930837> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * assembler/LinkBuffer.h: | 
 |         * assembler/testmasm.cpp: | 
 |         (JSC::compile): | 
 |         * b3/B3Compile.cpp: | 
 |         (JSC::B3::compile): | 
 |         * b3/air/testair.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testEntrySwitchSimple): | 
 |         (JSC::B3::testEntrySwitchNoEntrySwitch): | 
 |         (JSC::B3::testEntrySwitchWithCommonPaths): | 
 |         (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): | 
 |         (JSC::B3::testEntrySwitchLoop): | 
 |         * bytecode/InlineAccess.cpp: | 
 |         (JSC::linkCodeInline): | 
 |         (JSC::InlineAccess::rewireStubAsJump): | 
 |         * bytecode/PolymorphicAccess.cpp: | 
 |         (JSC::PolymorphicAccess::regenerate): | 
 |         * dfg/DFGJITFinalizer.cpp: | 
 |         (JSC::DFG::JITFinalizer::finalize): | 
 |         (JSC::DFG::JITFinalizer::finalizeFunction): | 
 |         * dfg/DFGOSRExit.cpp: | 
 |         (JSC::DFG::OSRExit::compileOSRExit): | 
 |         * dfg/DFGThunks.cpp: | 
 |         (JSC::DFG::osrExitThunkGenerator): | 
 |         (JSC::DFG::osrExitGenerationThunkGenerator): | 
 |         (JSC::DFG::osrEntryThunkGenerator): | 
 |         * ftl/FTLJITFinalizer.cpp: | 
 |         (JSC::FTL::JITFinalizer::finalizeCommon): | 
 |         * ftl/FTLLazySlowPath.cpp: | 
 |         (JSC::FTL::LazySlowPath::generate): | 
 |         * ftl/FTLOSRExitCompiler.cpp: | 
 |         (JSC::FTL::compileStub): | 
 |         * ftl/FTLThunks.cpp: | 
 |         (JSC::FTL::genericGenerationThunkGenerator): | 
 |         (JSC::FTL::slowPathCallThunkGenerator): | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::link): | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::privateCompileHasIndexedProperty): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         (JSC::JIT::privateCompileGetByVal): | 
 |         (JSC::JIT::privateCompileGetByValWithCachedId): | 
 |         (JSC::JIT::privateCompilePutByVal): | 
 |         (JSC::JIT::privateCompilePutByValWithCachedId): | 
 |         * jit/JITPropertyAccess32_64.cpp: | 
 |         (JSC::JIT::stringGetByValStubGenerator): | 
 |         * jit/JITStubRoutine.h: | 
 |         * jit/Repatch.cpp: | 
 |         (JSC::linkPolymorphicCall): | 
 |         * jit/SpecializedThunkJIT.h: | 
 |         (JSC::SpecializedThunkJIT::finalize): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::throwExceptionFromCallSlowPathGenerator): | 
 |         (JSC::linkCallThunkGenerator): | 
 |         (JSC::linkPolymorphicCallThunkGenerator): | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::arityFixupGenerator): | 
 |         (JSC::unreachableGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * llint/LLIntThunks.cpp: | 
 |         (JSC::LLInt::generateThunkWithJumpTo): | 
 |         * wasm/WasmBBQPlan.cpp: | 
 |         (JSC::Wasm::BBQPlan::complete): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmOMGPlan.cpp: | 
 |         (JSC::Wasm::OMGPlan::work): | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::throwExceptionFromWasmThunkGenerator): | 
 |         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |  | 
 | 2018-02-25  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Support PutByVal(ArrayStorage/SlowPutArrayStorage) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182965 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch extends FTL coverage for PutByVal by adding ArrayStorage and SlwoPutArrayStorage support. | 
 |         Basically large part of the patch is porting from DFG code. Since PutByVal already emits CheckInBounds | 
 |         for InBounds case, we do not have OutOfBounds check for that case. | 
 |         This is the last change for FTL to support all the types of DFG nodes except for CreateThis. | 
 |  | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::contiguousPutByValOutOfBounds): | 
 |         For consistency, we use operationPutByValXXX and operationPutByValDirectXXX. | 
 |         But except for SlowPutArrayStorage case, basically it is meaningless since | 
 |         we do not have indexed accessors. | 
 |  | 
 | 2018-02-26  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         validateStackAccess should not validate if the offset is within the stack bounds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183067 | 
 |         <rdar://problem/37749988> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         The validation rule was saying that any load from the stack must be | 
 |         within the stack bounds of the frame. However, it's natural for a user | 
 |         of B3 to emit code that may be outside of B3's stack bounds, but guard | 
 |         such a load with a branch. The FTL does exactly this with GetMyArgumentByVal. | 
 |         B3 is wrong to assert that this is a static property about all stack loads. | 
 |  | 
 |         * b3/B3Validate.cpp: | 
 |  | 
 | 2018-02-23  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make Number.isInteger an intrinsic | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183088 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         When profiling the ML subtest in ARES, I noticed it was spending some | 
 |         time in Number.isInteger. This patch makes that operation an intrinsic | 
 |         in the DFG/FTL. It might be a speedup by 1% or so on that subtest, but | 
 |         it's likely not an aggregate speedup on ARES. However, it is definitely | 
 |         faster than calling into a builtin function, so we might as well have | 
 |         it as an intrinsic. | 
 |  | 
 |         * 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): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNumberIsInteger): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::unboxDouble): | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * runtime/NumberConstructor.cpp: | 
 |         (JSC::NumberConstructor::finishCreation): | 
 |         (JSC::numberConstructorFuncIsInteger): | 
 |         * runtime/NumberConstructor.h: | 
 |         (JSC::NumberConstructor::isIntegerImpl): | 
 |  | 
 | 2018-02-23  Oleksandr Skachkov  <gskachkov@gmail.com> | 
 |  | 
 |         WebAssembly: cache memory address / size on instance | 
 |         https://bugs.webkit.org/show_bug.cgi?id=177305 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         Cache memory address/size in wasm:Instance to avoid load wasm:Memory  | 
 |         object during access to memory and memory size property in JiT | 
 |  | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState): | 
 |         (JSC::Wasm::B3IRGenerator::addCurrentMemory): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmInstance.h: | 
 |         (JSC::Wasm::Instance::cachedMemory const): | 
 |         (JSC::Wasm::Instance::cachedMemorySize const): | 
 |         (JSC::Wasm::Instance::createWeakPtr): | 
 |         (JSC::Wasm::Instance::setMemory): | 
 |         (JSC::Wasm::Instance::updateCachedMemory): | 
 |         (JSC::Wasm::Instance::offsetOfCachedMemory): | 
 |         (JSC::Wasm::Instance::offsetOfCachedMemorySize): | 
 |         (JSC::Wasm::Instance::offsetOfCachedIndexingMask): | 
 |         (JSC::Wasm::Instance::allocationSize): | 
 |         * wasm/WasmMemory.cpp: | 
 |         (JSC::Wasm::Memory::grow): | 
 |         (JSC::Wasm::Memory::registerInstance): | 
 |         * wasm/WasmMemory.h: | 
 |         (JSC::Wasm::Memory::indexingMask): | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::evaluate): | 
 |  | 
 | 2018-02-23  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         ArgumentsEliminationPhase has a branch on GetByOffset that should be an assert | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182982 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         I don't know why this check was not always an assert. When we see | 
 |         a GetByOffset on an eliminated allocation, that allocation *must* | 
 |         be a PhantomClonedArguments. If it weren't, the GetByOffset would | 
 |         have escaped it. Because this transformation happens by visiting | 
 |         blocks in pre-order, and by visiting nodes in a block starting from | 
 |         index zero to index block->size() - 1, we're guaranteed that eliminated | 
 |         allocations get transformed before users of it, since we visit nodes | 
 |         in dominator order. | 
 |  | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |  | 
 | 2018-02-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Implement $vm.ftlTrue function for FTL testing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183071 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Add $vm.ftlTrue, which becomes true if the caller is compiled in FTL. | 
 |         This is useful for testing whether the caller function is compiled in FTL. | 
 |  | 
 |         We also remove duplicate DFGTrue function in jsc.cpp. We have $vm.dfgTrue. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionFalse1): | 
 |         (functionFalse2): Deleted. | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionFTLTrue): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Support HasIndexedProperty for ArrayStorage and SlowPutArrayStorage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182792 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch adds HasIndexedProperty for ArrayStorage and SlowPutArrayStorage in FTL. | 
 |         HasIndexedProperty with ArrayStorage frequently causes FTL compilation failures | 
 |         in web-tooling-benchmarks. | 
 |  | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty): | 
 |  | 
 | 2018-02-22  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Refactor MacroAssembler code to improve reuse and extensibility. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183054 | 
 |         <rdar://problem/37797337> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * assembler/ARM64Assembler.h: | 
 |         * assembler/MacroAssembler.cpp: | 
 |         * assembler/MacroAssembler.h: | 
 |         * assembler/MacroAssemblerARM.h: | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::canCompact): | 
 |         (JSC::MacroAssemblerARM64::computeJumpType): | 
 |         (JSC::MacroAssemblerARM64::jumpSizeDelta): | 
 |         (JSC::MacroAssemblerARM64::link): | 
 |         (JSC::MacroAssemblerARM64::load64): | 
 |         (JSC::MacroAssemblerARM64::load64WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM64::load32): | 
 |         (JSC::MacroAssemblerARM64::load32WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM64::load16): | 
 |         (JSC::MacroAssemblerARM64::load16SignedExtendTo32): | 
 |         (JSC::MacroAssemblerARM64::load8): | 
 |         (JSC::MacroAssemblerARM64::load8SignedExtendTo32): | 
 |         (JSC::MacroAssemblerARM64::store64): | 
 |         (JSC::MacroAssemblerARM64::store64WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM64::store32): | 
 |         (JSC::MacroAssemblerARM64::store32WithAddressOffsetPatch): | 
 |         (JSC::MacroAssemblerARM64::store16): | 
 |         (JSC::MacroAssemblerARM64::store8): | 
 |         (JSC::MacroAssemblerARM64::getEffectiveAddress): | 
 |         (JSC::MacroAssemblerARM64::branchDoubleNonZero): | 
 |         (JSC::MacroAssemblerARM64::branchDoubleZeroOrNaN): | 
 |         (JSC::MacroAssemblerARM64::branchTruncateDoubleToInt32): | 
 |         (JSC::MacroAssemblerARM64::loadDouble): | 
 |         (JSC::MacroAssemblerARM64::loadFloat): | 
 |         (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare): | 
 |         (JSC::MacroAssemblerARM64::moveDoubleConditionallyAfterFloatingPointCompare): | 
 |         (JSC::MacroAssemblerARM64::storeDouble): | 
 |         (JSC::MacroAssemblerARM64::storeFloat): | 
 |         (JSC::MacroAssemblerARM64::call): | 
 |         (JSC::MacroAssemblerARM64::jump): | 
 |         (JSC::MacroAssemblerARM64::tailRecursiveCall): | 
 |         (JSC::MacroAssemblerARM64::setCarry): | 
 |         (JSC::MacroAssemblerARM64::reemitInitialMoveWithPatch): | 
 |         (JSC::MacroAssemblerARM64::isBreakpoint): | 
 |         (JSC::MacroAssemblerARM64::invert): | 
 |         (JSC::MacroAssemblerARM64::readCallTarget): | 
 |         (JSC::MacroAssemblerARM64::replaceWithVMHalt): | 
 |         (JSC::MacroAssemblerARM64::replaceWithJump): | 
 |         (JSC::MacroAssemblerARM64::maxJumpReplacementSize): | 
 |         (JSC::MacroAssemblerARM64::patchableJumpSize): | 
 |         (JSC::MacroAssemblerARM64::repatchCall): | 
 |         (JSC::MacroAssemblerARM64::makeBranch): | 
 |         (JSC::MacroAssemblerARM64::makeCompareAndBranch): | 
 |         (JSC::MacroAssemblerARM64::makeTestBitAndBranch): | 
 |         (JSC::MacroAssemblerARM64::ARM64Condition): | 
 |         (JSC::MacroAssemblerARM64::moveWithFixedWidth): | 
 |         (JSC::MacroAssemblerARM64::load): | 
 |         (JSC::MacroAssemblerARM64::store): | 
 |         (JSC::MacroAssemblerARM64::tryLoadWithOffset): | 
 |         (JSC::MacroAssemblerARM64::tryLoadSignedWithOffset): | 
 |         (JSC::MacroAssemblerARM64::tryStoreWithOffset): | 
 |         (JSC::MacroAssemblerARM64::jumpAfterFloatingPointCompare): | 
 |         (JSC::MacroAssemblerARM64::linkCall): | 
 |         * assembler/MacroAssemblerARMv7.h: | 
 |         * assembler/MacroAssemblerMIPS.h: | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         * assembler/ProbeStack.h: | 
 |         - Removed a forward declaration of an obsolete class. | 
 |  | 
 | 2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Remove sleep(double) and sleepMS(double) interfaces | 
 |         https://bugs.webkit.org/show_bug.cgi?id=183038 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * bytecode/SuperSampler.cpp: | 
 |         (JSC::initializeSuperSampler): | 
 |  | 
 | 2018-02-21  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         [CMake] Split declaration of JSC headers into public and private | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182980 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * PlatformGTK.cmake: | 
 |         * PlatformMac.cmake: | 
 |         * PlatformWPE.cmake: | 
 |         * PlatformWin.cmake: | 
 |  | 
 | 2018-02-20  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DFG::VarargsForwardingPhase should eliminate getting argument length | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182959 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This patch teaches the DFG VarargsForwardingPhase to not treat | 
 |         length accesses on Cloned/Direct Arguments objects as escapes. | 
 |         It teaches this phase to materialize the length in the same | 
 |         way the ArgumentsEliminationPhase does. | 
 |          | 
 |         This is around a 0.5-1% speedup on ARES6 on my iMac. It speeds | 
 |         up the ML subtest by 2-4%. | 
 |          | 
 |         This patch also extends compileGetArgumentCountIncludingThis to take | 
 |         a parameter that is the inline call frame to load from (in the case | 
 |         where the inline call frame is a varargs frame). This allows the | 
 |         the emitCodeToGetArgumentsArrayLength helper function to just emit | 
 |         a GetArgumentCountIncludingThis node instead of a GetLocal. If we | 
 |         emitted a GetLocal, we'd need to rerun CPS rethreading. | 
 |  | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGArgumentsUtilities.cpp: | 
 |         (JSC::DFG::emitCodeToGetArgumentsArrayLength): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::getArgumentCount): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::argumentsInlineCallFrame): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetArgumentCountIncludingThis): | 
 |         * dfg/DFGVarargsForwardingPhase.cpp: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArgumentCountIncludingThis): | 
 |  | 
 | 2018-02-14  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Support ArrayPush for ArrayStorage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182782 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds support for ArrayPush(ArrayStorage). We just port ArrayPush(ArrayStorage) in DFG to FTL. | 
 |  | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush): | 
 |  | 
 | 2018-02-14  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Support ArrayPop for ArrayStorage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182783 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds ArrayPop(ArrayStorage) support to FTL. We port the implementation in DFG to FTL. | 
 |  | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop): | 
 |  | 
 | 2018-02-14  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Add Arrayify for ArrayStorage and SlowPutArrayStorage | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182731 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds support for Arrayify(ArrayStorage/SlowPutArrayStorage) to FTL. | 
 |         Due to ArrayifyToStructure and CheckArray changes, necessary changes for | 
 |         supporting Arrayify in FTL are already done. Just allowing it in FTLCapabilities.cpp | 
 |         is enough. | 
 |  | 
 |         We fix FTL's CheckArray logic. Previously, CheckArray(SlowPutArrayStorage) does not pass | 
 |         ArrayStorage in FTL. But now it passes this as DFG does. Moreover, we fix DFG's CheckArray | 
 |         where CheckArray(ArrayStorage+NonArray) can pass ArrayStorage+Array. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::silentFill): | 
 |         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForArrayify): | 
 |  | 
 | 2018-02-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't use JSFunction's allocation profile when getting the prototype can be effectful | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182942 | 
 |         <rdar://problem/37584764> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Prior to this patch, the create_this implementation assumed that anything | 
 |         that is a JSFunction can use the object allocation profile and go down the | 
 |         fast path to allocate the |this| object. Implied by this approach is that | 
 |         accessing the 'prototype' property of the incoming function is not an | 
 |         effectful operation. This is inherent to the ObjectAllocationProfile  | 
 |         data structure: it caches the prototype field. However, getting the | 
 |         'prototype' property might be an effectful operation, e.g, it could | 
 |         be a getter. Many variants of functions in JS have the 'prototype' property | 
 |         as non-configurable. However, some functions, like bound functions, do not | 
 |         have the 'prototype' field with these attributes. | 
 |          | 
 |         This patch adds the notion of 'canUseAllocationProfile' to JSFunction | 
 |         and threads it through so that we only go down the fast path and use | 
 |         the allocation profile when the prototype property is non-configurable. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::ClassExprNode::emitBytecode): | 
 |         * dfg/DFGOperations.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::prototypeForConstruction): | 
 |         (JSC::JSFunction::allocateAndInitializeRareData): | 
 |         (JSC::JSFunction::initializeRareData): | 
 |         (JSC::JSFunction::getOwnPropertySlot): | 
 |         (JSC::JSFunction::canUseAllocationProfileNonInline): | 
 |         * runtime/JSFunction.h: | 
 |         (JSC::JSFunction::ensureRareDataAndAllocationProfile): | 
 |         * runtime/JSFunctionInlines.h: | 
 |         (JSC::JSFunction::canUseAllocationProfile): | 
 |  | 
 | 2018-02-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Don't mark an array profile out of bounds for the cases where the DFG will convert the access to SaneChain | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182912 | 
 |         <rdar://problem/37685083> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         In the baseline JIT and LLInt, when we loading a hole from an original array, | 
 |         with the array prototype chain being normal, we end up marking the ArrayProfile | 
 |         for that GetByVal as out of bounds. However, the DFG knows exactly how to | 
 |         optimize this case by returning undefined when loading from a hole. Currently, | 
 |         it only does this for Contiguous arrays (and sometimes Double arrays). | 
 |         This patch just makes sure to not mark the ArrayProfile as out of bounds | 
 |         in this scenario for Contiguous arrays, since the DFG will always optimize | 
 |         this case. | 
 |          | 
 |         However, we should extend this by profiling when a GetByVal loads a hole. By | 
 |         doing so, we can optimize this for Int32, ArrayStorage, and maybe even Double | 
 |         arrays. That work will happen in: | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182940 | 
 |          | 
 |         This patch is a 30-50%  speedup on JetStream's hash-map test. This patch | 
 |         speeds up JetStream by 1% when testing on my iMac. | 
 |  | 
 |         * dfg/DFGArrayMode.cpp: | 
 |         (JSC::DFG::ArrayMode::refine const): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * jit/JITOperations.cpp: | 
 |         (JSC::getByVal): | 
 |         (JSC::canAccessArgumentIndexQuickly): Deleted. | 
 |         * llint/LLIntSlowPaths.cpp: | 
 |         (JSC::LLInt::getByVal): | 
 |         (JSC::LLInt::LLINT_SLOW_PATH_DECL): | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::canAccessArgumentIndexQuickly): | 
 |  | 
 | 2018-02-17  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         GetArrayMask should support constant folding | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182907 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         Implement constant folding for GetArrayMask. This revealed a bug in tryGetFoldableView, where it was | 
 |         ignoring the result of a jsDynamicCast<>(). This wasn't a bug before because it would have been | 
 |         impossible for that function to get called with a non-null value if the value was not an array view, | 
 |         due to type filtering in CheckArray, the fact that CheckArray had to dominate GetArrayLength, and | 
 |         the fact that the other tryGetFoldableView overload made sure that the array mode was some typed | 
 |         array. | 
 |          | 
 |         This isn't a measurable progression, but it does save a register in the codegen for typed array | 
 |         accesses. Hopefully these improvements add up. | 
 |  | 
 |         * assembler/AssemblerBuffer.h: | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::tryGetFoldableView): | 
 |  | 
 | 2018-02-18  Dominik Inführ  <dominik.infuehr@gmail.com> | 
 |  | 
 |         Offlineasm/MIPS: immediates need to be within 16-bit signed values | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182890 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         In Sequence.getModifiedListMIPS(), we allow immediate values within | 
 |         the range -0xffff..0xffff for immediates (addresses and other | 
 |         immediates), but then in Immediate.mipsOperand() and | 
 |         Address.mipsOperand() we raise if immediate values are not within | 
 |         -0x7fff..0x7fff. This is inconsistent, and broke compilation on mips | 
 |         since r228552 made the VM structure bigger meaning we address values | 
 |         with bigger offsets in llint. This change restricts the allowed range, | 
 |         so that a separate load of the value is done for values outside of | 
 |         that range. | 
 |  | 
 |         * offlineasm/mips.rb: | 
 |  | 
 | 2018-02-17  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Web Inspector: get rid of remaining uses of OptOutput<T> | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180607 | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         * inspector/AsyncStackTrace.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |         * inspector/AsyncStackTrace.h: Ditto. | 
 |         * inspector/ConsoleMessage.cpp: Ditto. | 
 |  | 
 |         * inspector/ContentSearchUtilities.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::ContentSearchUtilities::getRegularExpressionMatchesByLines): Use a | 
 |         Vector instead of a unique_ptr<Vector>. | 
 |         (Inspector::ContentSearchUtilities::lineEndings): Ditto. | 
 |         (Inspector::ContentSearchUtilities::stylesheetCommentPattern): Deleted. | 
 |         (Inspector::ContentSearchUtilities::findMagicComment): Use std::array instead of | 
 |         a Vector for a fixed size array; also got rid of reinterpret_cast. | 
 |         (Inspector::ContentSearchUtilities::findStylesheetSourceMapURL): Moved the regular | 
 |         expression here since it's the only place it was used. | 
 |  | 
 |         * inspector/ContentSearchUtilities.h: Cut down on unneeded includes. | 
 |  | 
 |         * inspector/InjectedScript.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |  | 
 |         * inspector/InspectorProtocolTypes.h: Removed OptOutput. Simplified assertions. | 
 |         Removed base template for BindingTraits; we only need the specializations. | 
 |  | 
 |         * inspector/ScriptCallFrame.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |         * inspector/ScriptCallFrame.h: Ditto. | 
 |         * inspector/ScriptCallStack.cpp: Ditto. | 
 |         * inspector/ScriptCallStack.h: Ditto. | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: Ditto. | 
 |         * inspector/agents/InspectorConsoleAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame): Use std::optional& intead of | 
 |         OptOutput* for out arguments. | 
 |         * inspector/agents/InspectorDebuggerAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorHeapAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorHeapAgent::getPreview): Use std::optional& intead of OptOutput* | 
 |         for out arguments. | 
 |         * inspector/agents/InspectorHeapAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorRuntimeAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorRuntimeAgent::parse): Use std::optional& intead of OptOutput* | 
 |         for out arguments. | 
 |         (Inspector::InspectorRuntimeAgent::evaluate): Ditto. | 
 |         (Inspector::InspectorRuntimeAgent::callFunctionOn): Ditto. | 
 |         (Inspector::InspectorRuntimeAgent::saveResult): Ditto. | 
 |         * inspector/agents/InspectorRuntimeAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorScriptProfilerAgent.cpp: More Inspector namespace removal | 
 |         and removed some bogus const. | 
 |         * inspector/agents/InspectorScriptProfilerAgent.h: Ditto. | 
 |  | 
 |         * inspector/scripts/codegen/cpp_generator.py: | 
 |         (CppGenerator.cpp_type_for_unchecked_formal_in_parameter): Removed some bogus const. | 
 |         (CppGenerator.cpp_type_for_type_with_name): Ditto. | 
 |         (CppGenerator.cpp_type_for_formal_out_parameter): Use std::optional& instead of | 
 |         Inspector::Protocol::OptOutput*. | 
 |         (CppGenerator.cpp_type_for_formal_async_parameter): Ditto. | 
 |         (CppGenerator.cpp_type_for_stack_in_parameter): Ditto. | 
 |         (CppGenerator.cpp_type_for_stack_out_parameter): Ditto. | 
 |  | 
 |         * inspector/scripts/codegen/cpp_generator_templates.py: Removed ASSERT_DISABLED | 
 |         conditional around assertion code which will now compile to nothing if ASSERT is disabled. | 
 |         Build strings more simply in a few cases. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py: | 
 |         (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain): | 
 |         Use has_value instead of isAssigned and * operator instead of getValue() since std::optional | 
 |         replace OptOutput here. | 
 |         (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command): | 
 |         Pass by reference instead of pointer now. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_header.py: | 
 |         Removed ASSERT_DISABLED conditional around assertion code which will now compile to nothing | 
 |         if ASSERT is disabled. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py: | 
 |         (CppProtocolTypesImplementationGenerator._generate_assertion_for_object_declaration): Generate | 
 |         the assertion function unconditionally, but leave out the assertions if ASSERT_DISABLED is true. | 
 |         (CppProtocolTypesImplementationGenerator): Use auto instead of writing out JSON::Object::iterator. | 
 |  | 
 |         * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py: | 
 |         (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command): Build strings | 
 |         more simply. | 
 |  | 
 |         * 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/events-with-optional-parameters.json-result: | 
 |         * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result: | 
 |         Rebaselined. | 
 |  | 
 | 2018-02-16  Matt Lewis  <jlewis3@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r228318. | 
 |  | 
 |         The patch that this attempted to fix was rolled out already. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Fix build on ARMv7 traditional JSCOnly bot after r228306" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182563 | 
 |         https://trac.webkit.org/changeset/228318 | 
 |  | 
 | 2018-02-16  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Unreviewed, roll out r228306 (custom memcpy/memset) because the bots say that it was not a | 
 |         progression. | 
 |  | 
 |         * assembler/AssemblerBuffer.h: | 
 |         (JSC::AssemblerBuffer::append): | 
 |         * heap/LargeAllocation.cpp: | 
 |         (JSC::LargeAllocation::tryCreate): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         * runtime/ArrayBuffer.cpp: | 
 |         (JSC::ArrayBufferContents::tryAllocate): | 
 |         (JSC::ArrayBufferContents::copyTo): | 
 |         (JSC::ArrayBuffer::createInternal): | 
 |         * runtime/ArrayBufferView.h: | 
 |         (JSC::ArrayBufferView::zeroRangeImpl): | 
 |         * runtime/ArrayConventions.cpp: | 
 |         (JSC::clearArrayMemset): | 
 |         * runtime/ArrayConventions.h: | 
 |         (JSC::clearArray): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::arrayProtoPrivateFuncConcatMemcpy): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::createOrGrowPropertyStorage): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         (JSC::Butterfly::resizeArray): | 
 |         * runtime/GenericTypedArrayViewInlines.h: | 
 |         (JSC::GenericTypedArrayView<Adaptor>::create): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::appendMemcpy): | 
 |         (JSC::JSArray::fastSlice): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::set): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements): | 
 |         (JSC::JSObject::shiftButterflyAfterFlattening): | 
 |         * runtime/PropertyTable.cpp: | 
 |         (JSC::PropertyTable::PropertyTable): | 
 |  | 
 | 2018-02-16  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Fix bugs from r228411 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182851 | 
 |         <rdar://problem/37577732> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         There was a bug from r228411 where inside the constant folding phase, | 
 |         we used an insertCheck method that didn't handle varargs. This would | 
 |         lead to a crash. When thinking about the fix for that function, I realized | 
 |         a made a couple of mistakes in r228411. One is probably a security bug, and | 
 |         the other is a performance bug because it'll prevent CSE for certain flavors | 
 |         of GetByVal nodes. Both blunders are similar in nature. | 
 |          | 
 |         In r228411, I added code in LICM that inserted a CheckVarargs node with children | 
 |         of another varargs node. However, to construct this new node's children, | 
 |         I just copied the AdjacencyList. This does a shallow copy. What we needed | 
 |         was a deep copy. We needed to create a new vararg AdjacencyList that points | 
 |         to edges that are deep copies of the original varargs children. This patch | 
 |         fixes this goof in LICM. | 
 |          | 
 |         r228411 made it so that PureValue over a varargs node would just compare actual | 
 |         AdjacencyLists structs. So, if you had two GetByVals that had equal santized | 
 |         children, their actual AdjacencyList structs are *not* bitwise equal, since they'll | 
 |         have different firstChild values. Instead, we need to do a deep compare of their | 
 |         adjacency lists. This patch teaches PureValue how to do that. | 
 |  | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::copyVarargChildren): | 
 |         * dfg/DFGInsertionSet.h: | 
 |         (JSC::DFG::InsertionSet::insertCheck): | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGPureValue.cpp: | 
 |         (JSC::DFG::PureValue::dump const): | 
 |         * dfg/DFGPureValue.h: | 
 |         (JSC::DFG::PureValue::PureValue): | 
 |         (JSC::DFG::PureValue::op const): | 
 |         (JSC::DFG::PureValue::hash const): | 
 |         (JSC::DFG::PureValue::operator== const): | 
 |         (JSC::DFG::PureValue::isVarargs const): | 
 |         (JSC::DFG::PureValue::children const): Deleted. | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild): | 
 |  | 
 | 2018-02-16  Matt Lewis  <jlewis3@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r228546. | 
 |  | 
 |         This caused a consistent crash on all macOS WK2 platforms. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Web Inspector: get rid of remaining uses of OptOutput<T>" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180607 | 
 |         https://trac.webkit.org/changeset/228546 | 
 |  | 
 | 2018-02-16  Fujii Hironori  <Hironori.Fujii@sony.com> | 
 |  | 
 |         fast/frames/sandboxed-iframe-navigation-top-denied.html is crashing in Inspector::createScriptCallStackForConsole::Exec for GTK | 
 |         https://bugs.webkit.org/show_bug.cgi?id=172952 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         Null dereference of VM::topCallFrame happens in | 
 |         Inspector::createScriptCallStackForConsole if the ExecState has no | 
 |         call frames. | 
 |  | 
 |         * inspector/ScriptCallStackFactory.cpp: | 
 |         (Inspector::createScriptCallStack): Do null check of topCallFrame. | 
 |         (Inspector::createScriptCallStackForConsole): Ditto. | 
 |  | 
 | 2018-02-15  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Objects that contain dangerous things should be allocated far away from objects that can do OOB | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182843 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         To complete our object distancing plan, we need to put objects that can contain unpoisoned data | 
 |         far away from objects that cannot. Objects referenceable from JSValues cannot contain | 
 |         unpoisoned data, but auxiliary data can. This further divides auxiliary data that is meant for | 
 |         storing mostly JSValues from data that is meant for storing anything. | 
 |          | 
 |         This is achieved by having three SecurityKinds that are used for MarkedBlock selection and | 
 |         zeroing sort of the same way SecurityOriginToken already was. | 
 |          | 
 |         This change shouldn't make anything slower. If anything, it will be a small speed-up because it | 
 |         removes some cases of MarkedBlock zeroing since we don't need to zero blocks used for two of | 
 |         the SecurityKinds. | 
 |  | 
 |         * Sources.txt: | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::addBlock): | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/CellAttributes.cpp: | 
 |         (JSC::CellAttributes::dump const): | 
 |         * heap/CellAttributes.h: | 
 |         (JSC::CellAttributes::CellAttributes): | 
 |         * heap/LocalAllocator.cpp: | 
 |         (JSC::LocalAllocator::allocateSlowCase): | 
 |         (JSC::LocalAllocator::tryAllocateWithoutCollecting): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         (JSC::MarkedBlock::Handle::associateWithOrigin): Deleted. | 
 |         * heap/MarkedBlock.h: | 
 |         * heap/SecurityKind.cpp: Added. | 
 |         (WTF::printInternal): | 
 |         * heap/SecurityKind.h: Added. | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::JSCell::subspaceFor): | 
 |         * runtime/JSDestructibleObjectHeapCellType.cpp: | 
 |         (JSC::JSDestructibleObjectHeapCellType::JSDestructibleObjectHeapCellType): | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::subspaceFor): | 
 |         * runtime/JSSegmentedVariableObjectHeapCellType.cpp: | 
 |         (JSC::JSSegmentedVariableObjectHeapCellType::JSSegmentedVariableObjectHeapCellType): | 
 |         * runtime/JSStringHeapCellType.cpp: | 
 |         (JSC::JSStringHeapCellType::JSStringHeapCellType): | 
 |         * runtime/Symbol.h: | 
 |         (JSC::Symbol::subspaceFor): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * wasm/js/JSWebAssemblyCodeBlockHeapCellType.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlockHeapCellType::JSWebAssemblyCodeBlockHeapCellType): | 
 |  | 
 | 2018-02-15  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Web Inspector: get rid of remaining uses of OptOutput<T> | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180607 | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         * inspector/AsyncStackTrace.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |         * inspector/AsyncStackTrace.h: Ditto. | 
 |         * inspector/ConsoleMessage.cpp: Ditto. | 
 |  | 
 |         * inspector/ContentSearchUtilities.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::ContentSearchUtilities::getRegularExpressionMatchesByLines): Use a | 
 |         Vector instead of a unique_ptr<Vector>. | 
 |         (Inspector::ContentSearchUtilities::lineEndings): Ditto. | 
 |         (Inspector::ContentSearchUtilities::stylesheetCommentPattern): Deleted. | 
 |         (Inspector::ContentSearchUtilities::findMagicComment): Use std::array instead of | 
 |         a Vector for a fixed size array; also got rid of reinterpret_cast. | 
 |         (Inspector::ContentSearchUtilities::findStylesheetSourceMapURL): Moved the regular | 
 |         expression here since it's the only place it was used. | 
 |  | 
 |         * inspector/ContentSearchUtilities.h: Cut down on unneeded includes. | 
 |  | 
 |         * inspector/InjectedScript.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |  | 
 |         * inspector/InspectorProtocolTypes.h: Removed OptOutput. Simplified assertions. | 
 |         Removed base template for BindingTraits; we only need the specializations. | 
 |  | 
 |         * inspector/ScriptCallFrame.cpp: Removed explicit Inspector prefix from code that | 
 |         is inside the Inspector namespace already. Also use auto a bit. | 
 |         * inspector/ScriptCallFrame.h: Ditto. | 
 |         * inspector/ScriptCallStack.cpp: Ditto. | 
 |         * inspector/ScriptCallStack.h: Ditto. | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: Ditto. | 
 |         * inspector/agents/InspectorConsoleAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame): Use std::optional& intead of | 
 |         OptOutput* for out arguments. | 
 |         * inspector/agents/InspectorDebuggerAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorHeapAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorHeapAgent::getPreview): Use std::optional& intead of OptOutput* | 
 |         for out arguments. | 
 |         * inspector/agents/InspectorHeapAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorRuntimeAgent.cpp: More Inspector namespace removal and ... | 
 |         (Inspector::InspectorRuntimeAgent::parse): Use std::optional& intead of OptOutput* | 
 |         for out arguments. | 
 |         (Inspector::InspectorRuntimeAgent::evaluate): Ditto. | 
 |         (Inspector::InspectorRuntimeAgent::callFunctionOn): Ditto. | 
 |         (Inspector::InspectorRuntimeAgent::saveResult): Ditto. | 
 |         * inspector/agents/InspectorRuntimeAgent.h: Ditto. | 
 |  | 
 |         * inspector/agents/InspectorScriptProfilerAgent.cpp: More Inspector namespace removal | 
 |         and removed some bogus const. | 
 |         * inspector/agents/InspectorScriptProfilerAgent.h: Ditto. | 
 |  | 
 |         * inspector/scripts/codegen/cpp_generator.py: | 
 |         (CppGenerator.cpp_type_for_unchecked_formal_in_parameter): Removed some bogus const. | 
 |         (CppGenerator.cpp_type_for_type_with_name): Ditto. | 
 |         (CppGenerator.cpp_type_for_formal_out_parameter): Use std::optional& instead of | 
 |         Inspector::Protocol::OptOutput*. | 
 |         (CppGenerator.cpp_type_for_formal_async_parameter): Ditto. | 
 |         (CppGenerator.cpp_type_for_stack_in_parameter): Ditto. | 
 |         (CppGenerator.cpp_type_for_stack_out_parameter): Ditto. | 
 |  | 
 |         * inspector/scripts/codegen/cpp_generator_templates.py: Removed ASSERT_DISABLED | 
 |         conditional around assertion code which will now compile to nothing if ASSERT is disabled. | 
 |         Build strings more simply in a few cases. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py: | 
 |         (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain): | 
 |         Use has_value instead of isAssigned and * operator instead of getValue() since std::optional | 
 |         replace OptOutput here. | 
 |         (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command): | 
 |         Pass by reference instead of pointer now. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_header.py: | 
 |         Removed ASSERT_DISABLED conditional around assertion code which will now compile to nothing | 
 |         if ASSERT is disabled. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py: | 
 |         (CppProtocolTypesImplementationGenerator._generate_assertion_for_object_declaration): Generate | 
 |         the assertion function unconditionally, but leave out the assertions if ASSERT_DISABLED is true. | 
 |         (CppProtocolTypesImplementationGenerator): Use auto instead of writing out JSON::Object::iterator. | 
 |  | 
 |         * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py: | 
 |         (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command): Build strings | 
 |         more simply. | 
 |  | 
 |         * 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/events-with-optional-parameters.json-result: | 
 |         * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result: | 
 |         Rebaselined. | 
 |  | 
 | 2018-02-15  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Unreviewed, roll out r228366 since it did not progress anything. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         * runtime/ErrorInstance.cpp: | 
 |         (JSC::ErrorInstance::visitChildren): | 
 |         (JSC::ErrorInstance::finalizeUnconditionally): Deleted. | 
 |         * runtime/ErrorInstance.h: | 
 |         (JSC::ErrorInstance::stackTrace): | 
 |         (JSC::ErrorInstance::subspaceFor): Deleted. | 
 |         * runtime/Exception.cpp: | 
 |         (JSC::Exception::visitChildren): | 
 |         (JSC::Exception::finalizeUnconditionally): Deleted. | 
 |         * runtime/Exception.h: | 
 |         * runtime/StackFrame.cpp: | 
 |         (JSC::StackFrame::visitChildren): | 
 |         (JSC::StackFrame::isFinalizationCandidate): Deleted. | 
 |         (JSC::StackFrame::finalizeUnconditionally): Deleted. | 
 |         * runtime/StackFrame.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-02-15  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove monotonicallyIncreasingTime and currentTime | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182793 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We would like to drop monotonicallyIncreasingTime and currentTime from our tree by | 
 |         replacing them with MonotonicTime and WallTime, which are well-typed alternatives, | 
 |         compared to double. | 
 |         This patch removes monotonicallyIncreasingTime and currentTime in JSC. | 
 |  | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testComplex): | 
 |         * dfg/DFGPhase.h: | 
 |         (JSC::DFG::runAndLog): | 
 |         * dfg/DFGPlan.cpp: | 
 |         (JSC::DFG::Plan::compileInThread): | 
 |         (JSC::DFG::Plan::compileInThreadImpl): | 
 |         * dfg/DFGPlan.h: | 
 |         * dynbench.cpp: | 
 |         (JSC::benchmarkImpl): | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::isPagedOut): | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/FullGCActivityCallback.cpp: | 
 |         (JSC::FullGCActivityCallback::doCollection): | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::isPagedOut): | 
 |         (JSC::Heap::sweepSynchronously): | 
 |         * heap/Heap.h: | 
 |         * heap/MarkedSpace.cpp: | 
 |         (JSC::MarkedSpace::isPagedOut): | 
 |         * heap/MarkedSpace.h: | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: | 
 |         (Inspector::InspectorConsoleAgent::startTiming): | 
 |         (Inspector::InspectorConsoleAgent::stopTiming): | 
 |         * inspector/agents/InspectorConsoleAgent.h: | 
 |         * inspector/agents/InspectorRuntimeAgent.cpp: | 
 |         (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::compileWithoutLinking): | 
 |         (JSC::JIT::compileTimeStats): | 
 |         * jit/JIT.h: | 
 |         * jsc.cpp: | 
 |         (StopWatch::start): | 
 |         (StopWatch::stop): | 
 |         (StopWatch::getElapsedMS): | 
 |         (functionPreciseTime): | 
 |         (runJSC): | 
 |         * profiler/ProfilerDatabase.cpp: | 
 |         (JSC::Profiler::Database::logEvent): | 
 |         * profiler/ProfilerEvent.cpp: | 
 |         (JSC::Profiler::Event::toJS const): | 
 |         * profiler/ProfilerEvent.h: | 
 |         (JSC::Profiler::Event::Event): | 
 |         (JSC::Profiler::Event::time const): | 
 |         * runtime/CodeCache.cpp: | 
 |         (JSC::CodeCacheMap::pruneSlowCase): | 
 |         * runtime/CodeCache.h: | 
 |         (JSC::CodeCacheMap::CodeCacheMap): | 
 |         (JSC::CodeCacheMap::prune): | 
 |         * runtime/DateConstructor.cpp: | 
 |         (JSC::callDate): | 
 |         * runtime/TypeProfilerLog.cpp: | 
 |         (JSC::TypeProfilerLog::processLogEntries): | 
 |         * testRegExp.cpp: | 
 |         (StopWatch::start): | 
 |         (StopWatch::stop): | 
 |         (StopWatch::getElapsedMS): | 
 |  | 
 | 2018-02-14  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         We should be able to jsDynamicCast from JSType when possible | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182804 | 
 |  | 
 |         Reviewed by Filip Pizlo and Mark Lam. | 
 |  | 
 |         This patch beefs up jsDynamicCast in some of the cases where we | 
 |         can use the JSType to quickly determine if a cell is a subclass of | 
 |         the desired type. Since all JSCells have a range of JSTypes they support, | 
 |         if there is a range exclusive to a class and all subclasses we can use | 
 |         that range to quickly determine if the cast should be successful. | 
 |  | 
 |         Additionally, the JSValue versions of jsCast and jsDynamicCast now | 
 |         call the JSCell version after checking the value is a cell. | 
 |  | 
 |         Finally, the casting functions have been moved to a new header, | 
 |         JSCast.h | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * bytecode/CallVariant.h: | 
 |         * bytecode/CodeBlock.h: | 
 |         * bytecode/ExecutableToCodeBlockEdge.h: | 
 |         * bytecode/TrackedReferences.h: | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         * bytecode/UnlinkedFunctionExecutable.h: | 
 |         * dfg/DFGAbstractValue.h: | 
 |         * dfg/DFGCommonData.h: | 
 |         * dfg/DFGFrozenValue.h: | 
 |         * dfg/DFGStructureAbstractValue.h: | 
 |         * heap/CellContainerInlines.h: | 
 |         * heap/ConservativeRoots.cpp: | 
 |         * heap/GCLogging.cpp: | 
 |         * heap/HeapInlines.h: | 
 |         * heap/HeapSnapshotBuilder.cpp: | 
 |         * heap/MarkedBlock.cpp: | 
 |         * heap/MarkedBlockInlines.h: | 
 |         * heap/SubspaceInlines.h: | 
 |         * heap/WeakInlines.h: | 
 |         * jit/JITOpcodes.cpp: | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         * llint/LLIntOffsetsExtractor.cpp: | 
 |         * runtime/ArrayBufferNeuteringWatchpoint.h: | 
 |         * runtime/BigIntPrototype.cpp: | 
 |         * runtime/ClassInfo.h: | 
 |         * runtime/CustomGetterSetter.h: | 
 |         * runtime/FunctionRareData.h: | 
 |         * runtime/GetterSetter.h: | 
 |         * runtime/InferredType.h: | 
 |         * runtime/InferredTypeTable.h: | 
 |         * runtime/InferredValue.h: | 
 |         * runtime/InternalFunction.cpp: | 
 |         (JSC::InternalFunction::finishCreation): | 
 |         * runtime/JSAPIValueWrapper.h: | 
 |         * runtime/JSArray.h: | 
 |         (JSC::JSArray::finishCreation): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::finishCreation): | 
 |         * runtime/JSCast.h: Added. | 
 |         (JSC::jsCast): | 
 |         (JSC::JSCastingHelpers::jsDynamicCastGenericImpl): | 
 |         (JSC::JSCastingHelpers::jsDynamicCastJSTypeImpl): | 
 |         (JSC::JSCastingHelpers::JSDynamicCastTraits::cast): | 
 |         (JSC::jsDynamicCast): | 
 |         * runtime/JSCell.cpp: | 
 |         * runtime/JSCell.h: | 
 |         (JSC::jsCast): Deleted. | 
 |         (JSC::jsDynamicCast): Deleted. | 
 |         * runtime/JSCellInlines.h: | 
 |         * runtime/JSFunction.cpp: | 
 |         (JSC::JSFunction::finishCreation): | 
 |         * runtime/JSJob.h: | 
 |         * runtime/JSObject.h: | 
 |         (JSC::JSObject::finishCreation): | 
 |         * runtime/JSPromiseDeferred.h: | 
 |         * runtime/JSPropertyNameEnumerator.h: | 
 |         * runtime/NativeStdFunctionCell.h: | 
 |         * runtime/ScopedArgumentsTable.h: | 
 |         * runtime/SparseArrayValueMap.h: | 
 |         * runtime/Structure.h: | 
 |         * runtime/StructureChain.h: | 
 |         * runtime/StructureRareData.h: | 
 |         * tools/CellProfile.h: | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |  | 
 | 2018-02-14  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Crash: triggerOMGTierUpThunkGenerator() doesn't align the stack pointer before calling C++ code | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182808 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Set up a proper frame with a prologue and epilogue to align the stack pointer for the rest of the | 
 |         thunk. | 
 |  | 
 |         * wasm/WasmThunks.cpp: | 
 |         (JSC::Wasm::triggerOMGTierUpThunkGenerator): | 
 |  | 
 | 2018-02-14  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Setting a VMTrap shouldn't look at topCallFrame since that may imply we're in C code and holding the malloc lock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182801 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         VMTraps would sometimes install traps when it paused the JS thread when it | 
 |         was in C code. This is wrong, as installing traps mallocs, and the JS thread | 
 |         may have been holding the malloc lock while in C code. This could lead to a | 
 |         deadlock when C code was holding the malloc lock. | 
 |          | 
 |         This patch makes it so that we only install traps when we've proven the PC | 
 |         is in JIT or LLInt code. If we're in JIT/LLInt code, we are guaranteed that | 
 |         we're not holding the malloc lock. | 
 |  | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (functionMallocInALoop): | 
 |         * runtime/VMTraps.cpp: | 
 |         (JSC::VMTraps::tryInstallTrapBreakpoints): | 
 |  | 
 | 2018-02-14  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION(225695) : com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::RegExp::match + 630 :: stack overflow | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182705 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Moved the pattern context buffer used by YARR JIT'ed code from a stack local to a lazily allocated | 
 |         buffer on the VM.  Exposed when the buffer is needed to reduce likelihood that we'd allocated it. | 
 |         Guarded use of the buffer with a lock since the DFG compiler may call into YARR JIT'ed code on a | 
 |         compilation thread. | 
 |  | 
 |         * runtime/RegExpInlines.h: | 
 |         (JSC::RegExp::matchInline): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::~VM): | 
 |         (JSC::VM::acquireRegExpPatternContexBuffer): | 
 |         (JSC::VM::releaseRegExpPatternContexBuffer): | 
 |         * runtime/VM.h: | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generate): | 
 |         (JSC::Yarr::YarrGenerator::backtrack): | 
 |         (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern): | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |         (JSC::Yarr::YarrGenerator::generateReturn): | 
 |         (JSC::Yarr::YarrGenerator::YarrGenerator): | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |         * yarr/YarrJIT.h: | 
 |         (JSC::Yarr::YarrCodeBlock::usesPatternContextBuffer): | 
 |         (JSC::Yarr::YarrCodeBlock::setUsesPaternContextBuffer): | 
 |  | 
 | 2018-02-13  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         putDirectIndexSlowOrBeyondVectorLength needs to convert to dictionary indexing mode always if attributes are present | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182755 | 
 |         <rdar://problem/37080864> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         putDirectIndexSlowOrBeyondVectorLength with non-zero attributes only converted | 
 |         the object in question to a dictionary indexing mode when the index is less than | 
 |         the vector length. This makes no sense. If we're defining a getter, setter, or read | 
 |         only property, we must always enter the dictionary indexing mode irrespective | 
 |         of the index in relation to the vector length. | 
 |  | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength): | 
 |  | 
 | 2018-02-13  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Follup fix to r228411 for 32-bit builds. I missed a place where we used non vararg getter for child2(). | 
 |  | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |  | 
 | 2018-02-13  Guillaume Emont  <guijemont@igalia.com> | 
 |  | 
 |         [YarrJIT][ARM] We need to save r8 as it is the initial start register | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182157 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Register r8 is the initial start register since r224172, so we need to | 
 |         save it. We still need to save r6 as well even though it is not the | 
 |         initial start register any more, since it is used by the | 
 |         MacroAssembler which we use (we get crashes in some situations if we | 
 |         don't save r6). This issue was discovered because | 
 |         stress/regress-174044.js crashes on a raspberry pi 2 when compiled in | 
 |         -O2. | 
 |  | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |         (JSC::Yarr::YarrGenerator::generateReturn): | 
 |  | 
 | 2018-02-13  Caitlin Potter  <caitp@igalia.com> | 
 |  | 
 |         [JSC] cache TaggedTemplate arrays by callsite rather than by contents | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182717 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         https://github.com/tc39/ecma262/pull/890 imposes a change to template | 
 |         literals, to allow template callsite arrays to be collected when the | 
 |         code containing the tagged template call is collected. This spec change | 
 |         has received concensus and been ratified. | 
 |  | 
 |         This change eliminates the eternal map associating template contents | 
 |         with arrays. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::setConstantRegisters): | 
 |         * bytecode/DirectEvalCodeCache.cpp: | 
 |         (JSC::DirectEvalCodeCache::setSlow): | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::allowDirectEvalCache const): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::addTemplateObjectConstant): | 
 |         (JSC::BytecodeGenerator::emitGetTemplateObject): | 
 |         (JSC::BytecodeGenerator::addTemplateRegistryKeyConstant): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseInner): | 
 |         (JSC::Parser<LexerType>::parseMemberExpression): | 
 |         * parser/Parser.h: | 
 |         * parser/ParserModes.h: | 
 |         * runtime/EvalExecutable.h: | 
 |         (JSC::EvalExecutable::allowDirectEvalCache const): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::templateRegistry): Deleted. | 
 |         * runtime/JSTemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistry.cpp. | 
 |         (JSC::JSTemplateObjectDescriptor::JSTemplateObjectDescriptor): | 
 |         (JSC::JSTemplateObjectDescriptor::create): | 
 |         (JSC::JSTemplateObjectDescriptor::destroy): | 
 |         (JSC::JSTemplateObjectDescriptor::createTemplateObject): | 
 |         * runtime/JSTemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/JSTemplateRegistryKey.h. | 
 |         (JSC::isTemplateObjectDescriptor): | 
 |         * runtime/JSTemplateRegistryKey.cpp: Removed. | 
 |         * runtime/TemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.cpp. | 
 |         (JSC::TemplateObjectDescriptor::~TemplateObjectDescriptor): | 
 |         * runtime/TemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.h. | 
 |         (JSC::TemplateObjectDescriptor::operator== const): | 
 |         (JSC::TemplateObjectDescriptor::operator!= const): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::hash): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::equal): | 
 |         (JSC::TemplateObjectDescriptor::create): | 
 |         (JSC::TemplateObjectDescriptor::TemplateObjectDescriptor): | 
 |         (JSC::TemplateObjectDescriptor::calculateHash): | 
 |         * runtime/TemplateRegistry.h: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.cpp: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.h: Removed. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::templateRegistryKeyTable): Deleted. | 
 |         * runtime/VMEntryScope.cpp: | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::setConstantRegisters): | 
 |         * bytecode/DirectEvalCodeCache.cpp: | 
 |         (JSC::DirectEvalCodeCache::setSlow): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::allowDirectEvalCache const): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::addTemplateObjectConstant): | 
 |         (JSC::BytecodeGenerator::emitGetTemplateObject): | 
 |         (JSC::BytecodeGenerator::addTemplateRegistryKeyConstant): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseInner): | 
 |         (JSC::Parser<LexerType>::parseMemberExpression): | 
 |         * parser/Parser.h: | 
 |         * parser/ParserModes.h: | 
 |         * runtime/EvalExecutable.h: | 
 |         (JSC::EvalExecutable::allowDirectEvalCache const): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::templateRegistry): Deleted. | 
 |         * runtime/JSTemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistry.cpp. | 
 |         (JSC::JSTemplateObjectDescriptor::JSTemplateObjectDescriptor): | 
 |         (JSC::JSTemplateObjectDescriptor::create): | 
 |         (JSC::JSTemplateObjectDescriptor::destroy): | 
 |         (JSC::JSTemplateObjectDescriptor::createTemplateObject): | 
 |         * runtime/JSTemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/JSTemplateRegistryKey.h. | 
 |         (JSC::isTemplateObjectDescriptor): | 
 |         * runtime/JSTemplateRegistryKey.cpp: Removed. | 
 |         * runtime/TemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.cpp. | 
 |         (JSC::TemplateObjectDescriptor::~TemplateObjectDescriptor): | 
 |         * runtime/TemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.h. | 
 |         (JSC::TemplateObjectDescriptor::operator== const): | 
 |         (JSC::TemplateObjectDescriptor::operator!= const): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::hash): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::equal): | 
 |         (JSC::TemplateObjectDescriptor::create): | 
 |         (JSC::TemplateObjectDescriptor::TemplateObjectDescriptor): | 
 |         (JSC::TemplateObjectDescriptor::calculateHash): | 
 |         * runtime/TemplateRegistry.h: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.cpp: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.h: Removed. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::templateRegistryKeyTable): Deleted. | 
 |         * runtime/VMEntryScope.cpp: | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::setConstantRegisters): | 
 |         * bytecode/DirectEvalCodeCache.cpp: | 
 |         (JSC::DirectEvalCodeCache::setSlow): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::allowDirectEvalCache const): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::addTemplateObjectConstant): | 
 |         (JSC::BytecodeGenerator::emitGetTemplateObject): | 
 |         (JSC::BytecodeGenerator::addTemplateRegistryKeyConstant): Deleted. | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * parser/Parser.cpp: | 
 |         (JSC::Parser<LexerType>::parseInner): | 
 |         (JSC::Parser<LexerType>::parseMemberExpression): | 
 |         * parser/Parser.h: | 
 |         * parser/ParserModes.h: | 
 |         * runtime/EvalExecutable.h: | 
 |         (JSC::EvalExecutable::allowDirectEvalCache const): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::templateRegistry): Deleted. | 
 |         * runtime/JSTemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistry.cpp. | 
 |         (JSC::JSTemplateObjectDescriptor::JSTemplateObjectDescriptor): | 
 |         (JSC::JSTemplateObjectDescriptor::create): | 
 |         (JSC::JSTemplateObjectDescriptor::destroy): | 
 |         (JSC::JSTemplateObjectDescriptor::createTemplateObject): | 
 |         * runtime/JSTemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/JSTemplateRegistryKey.h. | 
 |         (JSC::isTemplateObjectDescriptor): | 
 |         * runtime/JSTemplateRegistryKey.cpp: Removed. | 
 |         * runtime/TemplateObjectDescriptor.cpp: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.cpp. | 
 |         (JSC::TemplateObjectDescriptor::~TemplateObjectDescriptor): | 
 |         * runtime/TemplateObjectDescriptor.h: Renamed from Source/JavaScriptCore/runtime/TemplateRegistryKey.h. | 
 |         (JSC::TemplateObjectDescriptor::operator== const): | 
 |         (JSC::TemplateObjectDescriptor::operator!= const): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::hash): | 
 |         (JSC::TemplateObjectDescriptor::Hasher::equal): | 
 |         (JSC::TemplateObjectDescriptor::create): | 
 |         (JSC::TemplateObjectDescriptor::TemplateObjectDescriptor): | 
 |         (JSC::TemplateObjectDescriptor::calculateHash): | 
 |         * runtime/TemplateRegistry.h: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.cpp: Removed. | 
 |         * runtime/TemplateRegistryKeyTable.h: Removed. | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::templateRegistryKeyTable): Deleted. | 
 |         * runtime/VMEntryScope.cpp: | 
 |  | 
 | 2018-02-13  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Support GetArrayLength on ArrayStorage in the FTL | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182625 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds GetArrayLength and CheckArray + ArrayStorage & SlowPutArrayStorage support for FTL. | 
 |         The implementation is trivial; just porting one in DFG to FTL. | 
 |  | 
 |         This fixes several FTL compilation failures in web-tooling-benchmarks while we still need to support | 
 |         ArrayPush, ArrayPop, Arrayify, and PutByVal. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::checkArray): | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForArrayify): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForCheckArray): | 
 |  | 
 | 2018-02-10  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Lock down JSFunction | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182652 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This poisons pointers in JSFunction and puts all of the types in the JSFunction hierarchy in | 
 |         isospaces. | 
 |          | 
 |         This is so neutral on JetStream: 0.01% slower with p = 0.969211. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewFunction): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::TrustedImmPtr): | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::weakPointer): | 
 |         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::weakPoisonedPointer): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetExecutable): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::weakPointer): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::weakPoisonedPointer): | 
 |         * ftl/FTLOutput.h: | 
 |         (JSC::FTL::Output::weakPointer): | 
 |         (JSC::FTL::Output::weakPoisonedPointer): | 
 |         * heap/MarkedSpace.cpp: | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/JSAsyncFunction.h: | 
 |         (JSC::JSAsyncFunction::subspaceFor): | 
 |         * runtime/JSAsyncGeneratorFunction.h: | 
 |         (JSC::JSAsyncGeneratorFunction::subspaceFor): | 
 |         * runtime/JSBoundFunction.h: | 
 |         (JSC::JSBoundFunction::subspaceFor): | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSCustomGetterSetterFunction.h: | 
 |         (JSC::JSCustomGetterSetterFunction::subspaceFor): | 
 |         * runtime/JSFunction.h: | 
 |         (JSC::JSFunction::subspaceFor): | 
 |         * runtime/JSGeneratorFunction.h: | 
 |         (JSC::JSGeneratorFunction::subspaceFor): | 
 |         * runtime/JSNativeStdFunction.h: | 
 |         (JSC::JSNativeStdFunction::subspaceFor): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * wasm/js/WebAssemblyFunction.h: | 
 |         * wasm/js/WebAssemblyWrapperFunction.h: | 
 |  | 
 | 2018-02-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add a GetIndexMask node and make it an input to GetByVal for array and typed array accesses in DFG SSA | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182633 | 
 |         <rdar://problem/37441037> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This patch introduces a GetIndexMask node to DFG SSA. This is an input to | 
 |         GetByVal for the GetByVal variants that do conservative index masking. | 
 |         The reason I'm adding this node is I realized there were loads of | 
 |         the butterfly index mask inside loops that B3 couldn't reason about | 
 |         because B3 can't arbitrarily hoist loads out of loops if those loops | 
 |         have side exits (because the side exit might be protecting the safety of the | 
 |         load). However, for these loops I analyzed, the DFG would be able to hoist | 
 |         these loads out of loops because it knows about JS semantics to correctly | 
 |         reason about the safety of hoisting the load. | 
 |          | 
 |         This is a 1% speedup on JetStream on Mac and iOS in my testing. | 
 |          | 
 |         This patch also adds some infrastructure for eliminating and doing CSE on | 
 |         varargs nodes. Because this patch makes GetByVal a varargs node, I ran into | 
 |         issues we never had before. We never had a varargs node that could be CSEd or be | 
 |         hoisted out of a loop until I made GetByVal varargs. To make it all work, | 
 |         I added a CheckVarargs node. This is just like Check, but it's varargs. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGAdjacencyList.h: | 
 |         (JSC::DFG::AdjacencyList::AdjacencyList): | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGBackwardsPropagationPhase.cpp: | 
 |         (JSC::DFG::BackwardsPropagationPhase::propagate): | 
 |         * dfg/DFGBasicBlock.cpp: | 
 |         (JSC::DFG::BasicBlock::replaceTerminal): | 
 |         * dfg/DFGBasicBlock.h: | 
 |         (JSC::DFG::BasicBlock::findTerminal const): | 
 |         * dfg/DFGBasicBlockInlines.h: | 
 |         (JSC::DFG::BasicBlock::replaceTerminal): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGCFGSimplificationPhase.cpp: | 
 |         (JSC::DFG::CFGSimplificationPhase::mergeBlocks): | 
 |         * dfg/DFGCPSRethreadingPhase.cpp: | 
 |         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor): | 
 |         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor): | 
 |         * dfg/DFGCSEPhase.cpp: | 
 |         * dfg/DFGCleanUpPhase.cpp: | 
 |         (JSC::DFG::CleanUpPhase::run): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         (JSC::DFG::ConstantFoldingPhase::fixUpsilons): | 
 |         * dfg/DFGDCEPhase.cpp: | 
 |         (JSC::DFG::DCEPhase::run): | 
 |         (JSC::DFG::DCEPhase::fixupBlock): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         (JSC::DFG::FixupPhase::fixupChecksInBlock): | 
 |         * dfg/DFGHeapLocation.cpp: | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGHeapLocation.h: | 
 |         * dfg/DFGIntegerCheckCombiningPhase.cpp: | 
 |         (JSC::DFG::IntegerCheckCombiningPhase::handleBlock): | 
 |         * dfg/DFGIntegerRangeOptimizationPhase.cpp: | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGMayExit.cpp: | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::remove): | 
 |         (JSC::DFG::Node::convertToIdentityOn): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::replaceWith): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGPureValue.cpp: | 
 |         (JSC::DFG::PureValue::dump const): | 
 |         * dfg/DFGPureValue.h: | 
 |         (JSC::DFG::PureValue::PureValue): | 
 |         * dfg/DFGPutStackSinkingPhase.cpp: | 
 |         * dfg/DFGSSAConversionPhase.cpp: | 
 |         (JSC::DFG::SSAConversionPhase::run): | 
 |         * dfg/DFGSSALoweringPhase.cpp: | 
 |         (JSC::DFG::SSALoweringPhase::handleNode): | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::SpeculativeJIT): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnString): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithString): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithSymbol): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGStoreBarrierClusteringPhase.cpp: | 
 |         * dfg/DFGValidate.cpp: | 
 |         * dfg/DFGVarargsForwardingPhase.cpp: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayMask): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::maskedIndex): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::pointerIntoTypedArray): | 
 |  | 
 | 2018-02-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Miscellaneous refactoring of offlineasm. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182702 | 
 |         <rdar://problem/37467887> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         1. Refactor out the emission of $asm.comment, $asm.codeOrigin, $asm.annotation, | 
 |            and $asm.debugAnnotation into a recordMetaData method.  This standardizes how | 
 |            we emit this metadata and makes all backends do it the same way. | 
 |  | 
 |         2. Add the ability to include custom offlineasm scripts from WebKitAdditions in | 
 |            the future. | 
 |  | 
 |         * offlineasm/arm.rb: | 
 |         * offlineasm/arm64.rb: | 
 |         * offlineasm/ast.rb: | 
 |         * offlineasm/backends.rb: | 
 |         * offlineasm/cloop.rb: | 
 |         * offlineasm/config.rb: | 
 |         * offlineasm/mips.rb: | 
 |         * offlineasm/risc.rb: | 
 |         * offlineasm/x86.rb: | 
 |  | 
 | 2018-02-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DFG::emitCodeToGetArgumentsArrayLength needs to handle NewArrayBuffer/PhantomNewArrayBuffer | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182706 | 
 |         <rdar://problem/36833681> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         When we added support for PhantomNewArrayBuffer, we forgot to update | 
 |         the emitCodeToGetArgumentsArrayLength function to handle PhantomNewArrayBuffer. | 
 |         This patch adds that support. It's trivial to generate the length for | 
 |         a PhantomNewArrayBuffer node since it's a constant buffer, with a constant | 
 |         length. | 
 |  | 
 |         * dfg/DFGArgumentsUtilities.cpp: | 
 |         (JSC::DFG::emitCodeToGetArgumentsArrayLength): | 
 |  | 
 | 2018-02-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Add more support for pointer preparations. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182703 | 
 |         <rdar://problem/37469451> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * llint/LLIntData.h: | 
 |         (JSC::LLInt::getCodePtr): | 
 |         * llint/LLIntPCRanges.h: | 
 |         (JSC::LLInt::isLLIntPC): | 
 |         * runtime/Options.cpp: | 
 |         (JSC::recomputeDependentOptions): | 
 |  | 
 | 2018-02-12  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Fix missing exception check in RegExpObject::matchGlobal(). | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182701 | 
 |         <rdar://problem/37465865> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         This issue was discovered when running JSC tests on an asm LLInt build with | 
 |         JSC_useJIT=false. | 
 |  | 
 |         * runtime/RegExpObject.cpp: | 
 |         (JSC::RegExpObject::matchGlobal): | 
 |  | 
 | 2018-02-11  Guillaume Emont  <guijemont@igalia.com> | 
 |  | 
 |         [MIPS] JSC needs to be built with -latomic | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182610 | 
 |  | 
 |         Reviewed by Žan Doberšek. | 
 |  | 
 |         Since r228149, on MIPS we need to link with -latomic, because | 
 |         __atomic_fetch_add_8 is not available as a compiler intrinsic. | 
 |  | 
 |         * CMakeLists.txt: | 
 |  | 
 | 2018-02-09  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Don't waste memory for error.stack | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182656 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This makes the StackFrames in ErrorInstance and Exception weak. We simply forget their | 
 |         contents if we GC. | 
 |          | 
 |         This isn't going to happen under normal operation since your callees and code blocks will | 
 |         still be alive when you ask for .stack. | 
 |          | 
 |         Bug 182650 tracks improving this so that it's not lossy. For now, I think it's worth it, | 
 |         since it is likely to recover 3-5 MB on membuster. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         * runtime/ErrorInstance.cpp: | 
 |         (JSC::ErrorInstance::visitChildren): | 
 |         (JSC::ErrorInstance::finalizeUnconditionally): | 
 |         * runtime/ErrorInstance.h: | 
 |         (JSC::ErrorInstance::subspaceFor): | 
 |         * runtime/Exception.cpp: | 
 |         (JSC::Exception::visitChildren): | 
 |         (JSC::Exception::finalizeUnconditionally): | 
 |         * runtime/Exception.h: | 
 |         (JSC::Exception::valueOffset): Deleted. | 
 |         (JSC::Exception::value const): Deleted. | 
 |         (JSC::Exception::stack const): Deleted. | 
 |         (JSC::Exception::didNotifyInspectorOfThrow const): Deleted. | 
 |         (JSC::Exception::setDidNotifyInspectorOfThrow): Deleted. | 
 |         * runtime/StackFrame.cpp: | 
 |         (JSC::StackFrame::isFinalizationCandidate): | 
 |         (JSC::StackFrame::finalizeUnconditionally): | 
 |         (JSC::StackFrame::visitChildren): Deleted. | 
 |         * runtime/StackFrame.h: | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-02-09  Carlos Alberto Lopez Perez  <clopez@igalia.com> | 
 |  | 
 |         Fix build on ARMv7 traditional JSCOnly bot after r228306 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182563 | 
 |  | 
 |         Unreviewed build fix. | 
 |  | 
 |         * assembler/AssemblerBuffer.h: | 
 |  | 
 | 2018-02-08  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Experiment with alternative implementation of memcpy/memset | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182563 | 
 |  | 
 |         Reviewed by Michael Saboff and Mark Lam. | 
 |          | 
 |         This adopts new fastCopy/fastZeroFill calls for calls to memcpy/memset that do not take a | 
 |         constant size argument. | 
 |  | 
 |         * assembler/AssemblerBuffer.h: | 
 |         (JSC::AssemblerBuffer::append): | 
 |         * runtime/ArrayBuffer.cpp: | 
 |         (JSC::ArrayBufferContents::tryAllocate): | 
 |         (JSC::ArrayBufferContents::copyTo): | 
 |         (JSC::ArrayBuffer::createInternal): | 
 |         * runtime/ArrayBufferView.h: | 
 |         (JSC::ArrayBufferView::zeroRangeImpl): | 
 |         * runtime/ArrayConventions.cpp: | 
 |         * runtime/ArrayConventions.h: | 
 |         (JSC::clearArray): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::arrayProtoPrivateFuncConcatMemcpy): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::createOrGrowPropertyStorage): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         (JSC::Butterfly::resizeArray): | 
 |         * runtime/GenericTypedArrayViewInlines.h: | 
 |         (JSC::GenericTypedArrayView<Adaptor>::create): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::appendMemcpy): | 
 |         (JSC::JSArray::fastSlice): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext): | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::set): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements): | 
 |         (JSC::JSObject::shiftButterflyAfterFlattening): | 
 |         * runtime/PropertyTable.cpp: | 
 |         (JSC::PropertyTable::PropertyTable): | 
 |  | 
 | 2018-02-08  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         Remove JavaScriptCore/ForwardingHeaders directory | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182594 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * ForwardingHeaders/JavaScriptCore/APICast.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSBase.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSCTestRunnerUtils.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSContextRef.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSObjectRef.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSObjectRefPrivate.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSStringRef.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSStringRefCF.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSTypedArray.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JSValueRef.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JavaScript.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/JavaScriptCore.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Removed. | 
 |         * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Removed. | 
 |  | 
 | 2018-02-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Implement Array.prototype.flatMap and Array.prototype.flatten | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182440 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         This patch implements Array.prototype.flatMap and Array.prototype.flatten | 
 |         since they are now stage 3 [1]. | 
 |  | 
 |         [1]: https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray | 
 |  | 
 |         * builtins/ArrayPrototype.js: | 
 |         (filter): | 
 |         (map): | 
 |         (globalPrivate.concatSlowPath): | 
 |         (globalPrivate.arraySpeciesCreate): | 
 |         (globalPrivate.flattenIntoArray): | 
 |         (flatten): | 
 |         (globalPrivate.flattenIntoArrayWithCallback): | 
 |         We separate flattenIntoArray from flattenIntoArrayWithCallback due to performance reason. | 
 |         We carefully keep both functions small to encourage inlining. | 
 |  | 
 |         (flatMap): | 
 |         * runtime/ArrayPrototype.cpp: | 
 |         (JSC::ArrayPrototype::finishCreation): | 
 |  | 
 | 2018-01-13  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Event improvements | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179591 | 
 |  | 
 |         Reviewed by Chris Dumez. | 
 |  | 
 |         Remove all uses of ScriptValue other than in the implementation of ScriptObject. | 
 |  | 
 |         * bindings/ScriptFunctionCall.cpp: Removed include of ScriptValue.h. | 
 |  | 
 |         * bindings/ScriptObject.cpp: Removed unused overload of ScriptObject constructor. | 
 |         * bindings/ScriptObject.h: Ditto. | 
 |  | 
 |         * bindings/ScriptValue.cpp: | 
 |         (Deprecated::ScriptValue::~ScriptValue): Deleted. | 
 |         (Deprecated::ScriptValue::getString const): Deleted. | 
 |         (Deprecated::ScriptValue::toString const): Deleted. | 
 |         (Deprecated::ScriptValue::isEqual const): Deleted. | 
 |         (Deprecated::ScriptValue::isNull const): Deleted. | 
 |         (Deprecated::ScriptValue::isUndefined const): Deleted. | 
 |         (Deprecated::ScriptValue::isObject const): Deleted. | 
 |         (Deprecated::ScriptValue::isFunction const): Deleted. | 
 |         (Deprecated::ScriptValue::toInspectorValue const): Deleted. | 
 |         * bindings/ScriptValue.h: Removed many unused functions. Made the rest | 
 |         protected since this is now used only in ScriptObject. | 
 |  | 
 |         * inspector/ConsoleMessage.cpp: | 
 |         (Inspector::ConsoleMessage::addToFrontend): Stop using ScriptValue. | 
 |         (Inspector::ConsoleMessage::isEqual const): Updated for change to ScriptArguments::isEqual. | 
 |  | 
 |         * inspector/ScriptArguments.cpp: | 
 |         (Inspector::ScriptArguments::create): Take a Vector of JSC::Strong, not ScriptValue, | 
 |         use rvalue reference with move instead of lvalue reference with swap, and take execution | 
 |         state by reference instead of pointer. | 
 |         (Inspector::ScriptArguments::createEmpty): Deleted. Can now use create instead. | 
 |         (Inspector::ScriptArguments::ScriptArguments): Ditto. | 
 |         (Inspector::ScriptArguments::~ScriptArguments): Deleted. | 
 |         (Inspector::ScriptArguments::argumentAt const): Updated to use JSC::Strong. | 
 |         (Inspector::ScriptArguments::getFirstArgumentAsString): Ditto. | 
 |         (Inspector::ScriptArguments::isEqual const): Ditto. Also changed to use JS internals | 
 |         instead of calling through the C API. | 
 |         * inspector/ScriptArguments.h: Updated for the above. | 
 |  | 
 |         * inspector/ScriptCallStackFactory.cpp: | 
 |         (Inspector::createScriptArguments): Updated for changes to ScriptArguments. | 
 |  | 
 |         * inspector/ScriptDebugServer.cpp: Removed include of ScriptValue.h. | 
 |         * inspector/agents/InspectorAgent.cpp: Ditto. | 
 |         * inspector/agents/InspectorDebuggerAgent.cpp: Ditto. | 
 |         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame): Use JSC::Strong instead | 
 |         of ScriptValue. | 
 |         (Inspector::InspectorDebuggerAgent::currentCallFrames): Ditto. | 
 |         * inspector/agents/InspectorDebuggerAgent.h: Ditto. | 
 |         * runtime/ConsoleClient.cpp: | 
 |         (JSC::ConsoleClient::printConsoleMessageWithArguments): Ditto. | 
 |         (JSC::ConsoleClient::clear): Use ScriptArguments::create and pass an empty vector | 
 |         instead of calling a separate createEmpty function. | 
 |  | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::createLeaked): Deleted. | 
 |         * runtime/VM.h: Deleted createLeaked. | 
 |  | 
 | 2018-02-06  Brian Burg  <bburg@apple.com> | 
 |  | 
 |         Web Inspector: protocol generator should automatically deduce the correct include style to use | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182505 | 
 |  | 
 |         Reviewed by Timothy Hatcher. | 
 |  | 
 |         Currently the generated imports use a mix of system header imports (powered by forwarding headers) | 
 |         and framework-style includes. Since forwarding headers are going away, this patch stops | 
 |         using system header includes for headers that are JavaScriptCore private headers. Instead, | 
 |         use either a relative include or a framework include. | 
 |  | 
 |         * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py: | 
 |         (CppAlternateBackendDispatcherHeaderGenerator.generate_output): | 
 |         (CppAlternateBackendDispatcherHeaderGenerator): | 
 |         (CppAlternateBackendDispatcherHeaderGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py: | 
 |         (CppBackendDispatcherHeaderGenerator.generate_output): | 
 |         (CppBackendDispatcherHeaderGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py: | 
 |         (CppBackendDispatcherImplementationGenerator.generate_output): | 
 |         (CppBackendDispatcherImplementationGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py: | 
 |         (CppFrontendDispatcherHeaderGenerator.generate_output): | 
 |         (CppFrontendDispatcherHeaderGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py: | 
 |         (CppFrontendDispatcherImplementationGenerator.generate_output): | 
 |         (CppFrontendDispatcherImplementationGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_header.py: | 
 |         (CppProtocolTypesHeaderGenerator.generate_output): | 
 |         (CppProtocolTypesHeaderGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py: | 
 |         (CppProtocolTypesImplementationGenerator.generate_output): | 
 |         (CppProtocolTypesImplementationGenerator._generate_secondary_header_includes): | 
 |         * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py: | 
 |         (ObjCBackendDispatcherHeaderGenerator): | 
 |         Convert existing header lists to the new entries format, which includes the | 
 |         allowable target frameworks and the relative path to the header. | 
 |  | 
 |         * inspector/scripts/codegen/generator.py: | 
 |         (Generator.generate_includes_from_entries): | 
 |         Copied from the same in the builtins code generator. It still works great. | 
 |  | 
 |         * 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/generic/expected/worker-supported-domains.json-result: | 
 |         * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result: | 
 |         * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result: | 
 |         Rebaseline. | 
 |  | 
 | 2018-02-06  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         put_to_scope/get_from_scope should not cache lexical scopes when expecting a global object | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182549 | 
 |         <rdar://problem/36189995> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Previously, the llint/baseline caching for put_to_scope and | 
 |         get_from_scope would cache lexical environments when the | 
 |         varInjectionWatchpoint had been fired for global properties. Code | 
 |         in the DFG does not follow this same assumption so we could | 
 |         potentially return the wrong result. Additionally, the baseline | 
 |         would write barrier the global object rather than the lexical | 
 |         enviroment object. This patch makes it so that we do not cache | 
 |         anything other than the global object for when the resolve type is | 
 |         GlobalPropertyWithVarInjectionChecks or GlobalProperty. | 
 |  | 
 |         * assembler/MacroAssembler.cpp: | 
 |         (JSC::MacroAssembler::jitAssert): | 
 |         * assembler/MacroAssembler.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emit_op_get_from_scope): | 
 |         (JSC::JIT::emit_op_put_to_scope): | 
 |         * runtime/CommonSlowPaths.h: | 
 |         (JSC::CommonSlowPaths::tryCachePutToScopeGlobal): | 
 |         (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-28  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Global objects should be able to use TLCs to allocate from different blocks from each other | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182227 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |          | 
 |         This uses TLCs to create at least `minimumDistanceBetweenCellsFromDifferenOrigins` bytes of | 
 |         distance between objects from different origins, using the following combination of things. For | 
 |         short lets refer to that constant as K. | 
 |          | 
 |         - Since r227721, LargeAllocation puts K bytes padding at the end of each allocation. | 
 |          | 
 |         - Since r227718, MarkedBlock puts at least K bytes in its footer. | 
 |          | 
 |         - Since r227617, global objects can have their own TLCs, which make them allocate from a | 
 |           different set of blocks than other global objects. The TLC of a global object comes into | 
 |           effect when you enter the VM via that global object. | 
 |          | 
 |         - With this change, TLCs and blocks both have security origins. A TLC will only use blocks that | 
 |           share the same security origin or empty blocks (in which case we zero the block and change | 
 |           its security origin). | 
 |          | 
 |         WebCore determines the TLC-GlobalObject mapping. By default, global objects would simply use | 
 |         the VM's default TLC. WebCore makes it so that DOM windows (but not worker global objects) get | 
 |         a TLC based on their document's SecurityOrigin. | 
 |          | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::findBlockForAllocation): | 
 |         (JSC::BlockDirectory::prepareForAllocation): | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/LocalAllocator.cpp: | 
 |         (JSC::LocalAllocator::LocalAllocator): | 
 |         (JSC::LocalAllocator::reset): | 
 |         (JSC::LocalAllocator::~LocalAllocator): | 
 |         (JSC::LocalAllocator::allocateSlowCase): | 
 |         (JSC::LocalAllocator::tryAllocateWithoutCollecting): | 
 |         * heap/LocalAllocator.h: | 
 |         (JSC::LocalAllocator::tlc const): | 
 |         * heap/MarkStackMergingConstraint.cpp: | 
 |         * heap/MarkStackMergingConstraint.h: | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::associateWithOrigin): | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::Handle::securityOriginToken const): | 
 |         * heap/SecurityOriginToken.cpp: Added. | 
 |         (JSC::uniqueSecurityOriginToken): | 
 |         * heap/SecurityOriginToken.h: Added. | 
 |         * heap/ThreadLocalCache.cpp: | 
 |         (JSC::ThreadLocalCache::create): | 
 |         (JSC::ThreadLocalCache::ThreadLocalCache): | 
 |         (JSC::ThreadLocalCache::allocateData): | 
 |         (JSC::ThreadLocalCache::installSlow): | 
 |         * heap/ThreadLocalCache.h: | 
 |         (JSC::ThreadLocalCache::securityOriginToken const): | 
 |         * heap/ThreadLocalCacheInlines.h: | 
 |         (JSC::ThreadLocalCache::install): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         (JSC::JSGlobalObject::createThreadLocalCache): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::threadLocalCache): | 
 |         (JSC::JSGlobalObject::threadLocalCache const): Deleted. | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |         (JSC::VMEntryScope::~VMEntryScope): | 
 |         * runtime/VMEntryScope.h: | 
 |  | 
 | 2018-02-05  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         JavaScriptCore files should not be included relatively | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182452 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * API/JSCallbackConstructor.h: | 
 |         * CMakeLists.txt: | 
 |         * disassembler/ARM64Disassembler.cpp: | 
 |         * disassembler/ARMv7Disassembler.cpp: | 
 |         * heap/LockDuringMarking.h: | 
 |         * inspector/InjectedScriptBase.h: | 
 |         * inspector/InjectedScriptHost.h: | 
 |         * inspector/JavaScriptCallFrame.h: | 
 |         * inspector/ScriptArguments.h: | 
 |         * inspector/ScriptDebugListener.h: | 
 |         * inspector/ScriptDebugServer.h: | 
 |         * inspector/agents/InspectorAgent.h: | 
 |         * inspector/agents/InspectorConsoleAgent.h: | 
 |         * inspector/agents/InspectorDebuggerAgent.h: | 
 |         * inspector/agents/InspectorHeapAgent.h: | 
 |         * inspector/agents/InspectorRuntimeAgent.h: | 
 |         * inspector/agents/InspectorScriptProfilerAgent.h: | 
 |         * runtime/RegExp.h: | 
 |  | 
 | 2018-02-05  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r228012. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182493 | 
 |  | 
 |         "It regressed ARES-6 by 2-4%" (Requested by saamyjoon on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[JSC] Clean up ArraySpeciesCreate" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182434 | 
 |         https://trac.webkit.org/changeset/228012 | 
 |  | 
 | 2018-02-02  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Rebaseline bindings generator tests after r228032. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182445 | 
 |  | 
 |         Unreviewed test gardening. | 
 |  | 
 |         * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result: | 
 |  | 
 | 2018-02-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Make various DFG_ASSERTs provide more data to WTFCrashWithInfo | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182453 | 
 |         <rdar://problem/37174236> | 
 |  | 
 |         Reviewed by JF Bastien and Mark Lam. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGArgumentsUtilities.cpp: | 
 |         (JSC::DFG::emitCodeToGetArgumentsArrayLength): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupChecksInBlock): | 
 |         * dfg/DFGFlowIndexing.h: | 
 |         (JSC::DFG::FlowIndexing::shadowIndex const): | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::run): | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGLoopPreHeaderCreationPhase.cpp: | 
 |         (JSC::DFG::LoopPreHeaderCreationPhase::run): | 
 |         * dfg/DFGPutStackSinkingPhase.cpp: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileArithAbs): | 
 |         (JSC::DFG::SpeculativeJIT::compileArithRounding): | 
 |         (JSC::DFG::SpeculativeJIT::compileToPrimitive): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::fillJSValue): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Strict): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): | 
 |         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGStoreBarrierClusteringPhase.cpp: | 
 |         * dfg/DFGStoreBarrierInsertionPhase.cpp: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetStack): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithClz32): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithAbs): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithRound): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithFloor): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithCeil): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithTrunc): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compilePutById): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCompareEq): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileIn): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compare): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::switchStringRecurse): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowInt32): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowInt52): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowBoolean): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowDouble): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::lowJSValue): | 
 |  | 
 | 2018-02-02  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         JS Builtins should include JavaScriptCore headers directly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182445 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * Scripts/builtins/builtins_generator.py: | 
 |         * 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: | 
 |  | 
 | 2018-02-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         When BytecodeParser inserts Unreachable after ForceOSRExit it needs to update ArgumentPositions for Flushes it inserts | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182368 | 
 |         <rdar://problem/36932466> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         When preserving liveness when inserting Unreachable nodes after ForceOSRExit, | 
 |         we must add the VariableAccessData to the given argument position. Otherwise, | 
 |         we may end up with a VariableAccessData that doesn't respect the shouldNeverUnbox bit. | 
 |         If we end up with such a situation, it can lead to invalid IR after the | 
 |         arguments elimination phase optimizes a GetByVal to a GetStack. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::flushImpl): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminalImpl): | 
 |         (JSC::DFG::ByteCodeParser::flush): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminal): | 
 |         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |  | 
 | 2018-02-02  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         More ARM64_32 fixes. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182441 | 
 |         <rdar://problem/37162310> | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         I also disabled more dynamicPoisoning code in ARM64_32.  This code assumes a | 
 |         64-bit pointer which is not applicable here. | 
 |  | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitDynamicPoison): | 
 |         (JSC::AssemblyHelpers::emitDynamicPoisonOnLoadedType): | 
 |         (JSC::AssemblyHelpers::emitDynamicPoisonOnType): | 
 |  | 
 | 2018-02-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         MapHash should return true to doesGC in the DFG depending on useKind because it might resolve a rope | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182402 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |  | 
 | 2018-02-02  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Clean up ArraySpeciesCreate | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182434 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We have duplicate code in filter, map, concatSlowPath. | 
 |         This patch creates a new global private function @arraySpeciesCreate, | 
 |         and use it. | 
 |  | 
 |         * builtins/ArrayPrototype.js: | 
 |         (globalPrivate.arraySpeciesCreate): | 
 |         (filter): | 
 |         (map): | 
 |         (globalPrivate.concatSlowPath): | 
 |  | 
 | 2018-02-01  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Fix broken bounds check in FTL's compileGetMyArgumentByVal(). | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182419 | 
 |         <rdar://problem/37044945> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         In compileGetMyArgumentByVal(), it computes: | 
 |             limit = m_out.sub(limit, m_out.constInt32(m_node->numberOfArgumentsToSkip())); | 
 |             ... | 
 |             LValue isOutOfBounds = m_out.aboveOrEqual(originalIndex, limit); | 
 |  | 
 |         where the original "limit" is the number of arguments passed in by the caller. | 
 |         If the original limit is less than numberOfArgumentsToSkip, the resultant limit | 
 |         will be a large unsigned number.  As a result, this will defeat the bounds check | 
 |         that follows it. | 
 |  | 
 |         Note: later on in compileGetMyArgumentByVal(), we have to adjust adjust the index | 
 |         value by adding numberOfArgumentsToSkip to it, in order to determine the actual | 
 |         entry in the arguments array to get. | 
 |  | 
 |         The fix is to just add numberOfArgumentsToSkip to index upfront (instead of | 
 |         subtracting it from limit), and doing an overflow speculation check on that | 
 |         addition before doing the bounds check. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal): | 
 |  | 
 | 2018-02-01  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Fix crashes due to mishandling custom sections. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182404 | 
 |         <rdar://problem/36935863> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This also cleans up some of our validation code. We also | 
 |         mistakenly, allowed unknown (different from custom sections with | 
 |         id: 0) section ids. | 
 |  | 
 |         * wasm/WasmModuleParser.cpp: | 
 |         (JSC::Wasm::ModuleParser::parse): | 
 |         * wasm/WasmModuleParser.h: | 
 |         * wasm/WasmSections.h: | 
 |         (JSC::Wasm::isKnownSection): | 
 |         (JSC::Wasm::decodeSection): | 
 |         (JSC::Wasm::validateOrder): | 
 |         (JSC::Wasm::makeString): | 
 |         (JSC::Wasm::isValidSection): Deleted. | 
 |  | 
 | 2018-02-01  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         -Wreturn-type warning in DFGObjectAllocationSinkingPhase.cpp | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182389 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Fix the warning. | 
 |  | 
 |         As a bonus, remove a couple unreachable breaks for good measure. | 
 |  | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |  | 
 | 2018-02-01  Chris Dumez  <cdumez@apple.com> | 
 |  | 
 |         Queue a microtask when a waitUntil() promise is settled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182372 | 
 |         <rdar://problem/37101019> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Export a symbol so it can be used in WebCore. | 
 |  | 
 |         * runtime/JSGlobalObject.h: | 
 |  | 
 | 2018-01-31  Don Olmstead  <don.olmstead@sony.com> | 
 |  | 
 |         [CMake] Make JavaScriptCore headers copies | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182303 | 
 |  | 
 |         Reviewed by Alex Christensen. | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * PlatformGTK.cmake: | 
 |         * PlatformJSCOnly.cmake: | 
 |         * PlatformMac.cmake: | 
 |         * PlatformWPE.cmake: | 
 |         * PlatformWin.cmake: | 
 |         * shell/CMakeLists.txt: | 
 |         * shell/PlatformWin.cmake: | 
 |  | 
 | 2018-01-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Replace tryLargeMemalignVirtual with tryLargeZeroedMemalignVirtual and use it to allocate large zeroed memory in Wasm | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182064 | 
 |         <rdar://problem/36840132> | 
 |  | 
 |         Reviewed by Geoffrey Garen. | 
 |  | 
 |         This patch switches WebAssembly Memory to always use bmalloc's | 
 |         zeroed virtual allocation API. This makes it so that we don't | 
 |         dirty the memory to zero it. It's a huge compile time speedup | 
 |         on WasmBench on iOS. | 
 |  | 
 |         * wasm/WasmMemory.cpp: | 
 |         (JSC::Wasm::Memory::create): | 
 |         (JSC::Wasm::Memory::~Memory): | 
 |         (JSC::Wasm::Memory::addressIsInActiveFastMemory): | 
 |         (JSC::Wasm::Memory::grow): | 
 |         (JSC::Wasm::commitZeroPages): Deleted. | 
 |  | 
 | 2018-01-31  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Build fix for CLoop after r227874. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182155 | 
 |         <rdar://problem/36286266> | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         Just needed support for lea of a LabelReference in cloop.rb (just like those | 
 |         added for arm64.rb and x86.rb). | 
 |  | 
 |         * offlineasm/cloop.rb: | 
 |  | 
 | 2018-01-31  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Canonicalize aquiring the JSCell lock. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182320 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         It's currently kinda annoying to figure out where | 
 |         we aquire the a JSCell's lock. This patch adds a | 
 |         helper to make it easier to grep... | 
 |  | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::visitChildren): | 
 |         (JSC::UnlinkedCodeBlock::setInstructions): | 
 |         (JSC::UnlinkedCodeBlock::shrinkToFit): | 
 |         * runtime/ErrorInstance.cpp: | 
 |         (JSC::ErrorInstance::finishCreation): | 
 |         (JSC::ErrorInstance::materializeErrorInfoIfNeeded): | 
 |         (JSC::ErrorInstance::visitChildren): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::shiftCountWithArrayStorage): | 
 |         (JSC::JSArray::unshiftCountWithArrayStorage): | 
 |         * runtime/JSCell.h: | 
 |         (JSC::JSCell::cellLock): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::visitButterflyImpl): | 
 |         (JSC::JSObject::convertContiguousToArrayStorage): | 
 |         * runtime/JSPropertyNameEnumerator.cpp: | 
 |         (JSC::JSPropertyNameEnumerator::visitChildren): | 
 |         * runtime/SparseArrayValueMap.cpp: | 
 |         (JSC::SparseArrayValueMap::add): | 
 |         (JSC::SparseArrayValueMap::remove): | 
 |         (JSC::SparseArrayValueMap::visitChildren): | 
 |  | 
 | 2018-01-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JSC incorrectly interpreting script, sets Global Property instead of Global Lexical variable (LiteralParser / JSONP path) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182074 | 
 |         <rdar://problem/36846261> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This patch teaches the JSONP evaluator about the global lexical environment. | 
 |         Before, it was using the global object as the global scope, but that's wrong. | 
 |         The global lexical environment is the first node in the global scope chain. | 
 |  | 
 |         * interpreter/Interpreter.cpp: | 
 |         (JSC::Interpreter::executeProgram): | 
 |         * jsc.cpp: | 
 |         (GlobalObject::finishCreation): | 
 |         (shellSupportsRichSourceInfo): | 
 |         (functionDisableRichSourceInfo): | 
 |         * runtime/LiteralParser.cpp: | 
 |         (JSC::LiteralParser<CharType>::tryJSONPParse): | 
 |         * runtime/LiteralParser.h: | 
 |  | 
 | 2018-01-31  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         clean up pushToSaveImmediateWithoutTouchingRegisters a bit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181774 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         This function on ARM64 was considering what to do with the scratch | 
 |         register. And conditionally invalidated what was in it. This is not | 
 |         relevant though, since the function always recovers what was in that | 
 |         register. This patch just switches it to using dataTempRegister | 
 |         directly and updates the comment to describe why it can do so safely. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::pushToSaveImmediateWithoutTouchingRegisters): | 
 |  | 
 | 2018-01-30  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Apply poisoning to TypedArray vector pointers. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182155 | 
 |         <rdar://problem/36286266> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         The TypeArray's vector pointer is now poisoned.  The poison value is chosen based | 
 |         on a TypeArray's jsType.  The JSType must be between FirstTypedArrayType and | 
 |         LastTypedArrayType.  At runtime, we enforce that the index is well-behaved by | 
 |         masking it against TypedArrayPoisonIndexMask.  TypedArrayPoisonIndexMask (16) is | 
 |         the number of TypedArray types (10) rounded up to the next power of 2. | 
 |         Accordingly, we reserve an array of TypedArrayPoisonIndexMask poisons so that we | 
 |         can use index masking on the index, and be guaranteed that the masked index will | 
 |         be within bounds of the poisons array. | 
 |  | 
 |         1. Fixed both DFG and FTL versions of compileGetTypedArrayByteOffset() to not | 
 |            do any unnecessary work if the TypedArray vector is null. | 
 |  | 
 |            FTL's cagedMayBeNull() is no longer needed because it is only used by | 
 |            compileGetTypedArrayByteOffset(), and we need to enhance it to handle unpoisoning | 
 |            in a TypedArray specific way.  So, might as well do the work inline in | 
 |            compileGetTypedArrayByteOffset() instead. | 
 |  | 
 |         2. Removed an unnecessary null-check in DFGSpeculativeJIT's compileNewTypedArrayWithSize() | 
 |            because there's already a null check above it that ensures that sizeGPR is | 
 |            never null. | 
 |  | 
 |         3. In LLInt's _llint_op_get_by_val, move the TypedArray length check before the | 
 |            loading of the vector for unpoisoning and uncaging.  We don't need the vector | 
 |            if the length is 0. | 
 |  | 
 |         Implementation notes on the need to null check the TypeArray vector: | 
 |  | 
 |         1. DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds() does not need a | 
 |            m_poisonedVector null check because the function is a null check. | 
 |  | 
 |         2. DFG::SpeculativeJIT::compileGetIndexedPropertyStorage() does not need a | 
 |            m_poisonedVector null check because it is followed by a call to | 
 |            cageTypedArrayStorage() which assumes that storageReg cannot be null. | 
 |  | 
 |         3. DFG::SpeculativeJIT::compileGetTypedArrayByteOffset() already has a | 
 |            m_poisonedVector null check. | 
 |  | 
 |         4. DFG::SpeculativeJIT::compileNewTypedArrayWithSize() does not need a vector null | 
 |            check because the poisoning code is preceded by a sizeGPR null check, which | 
 |            ensures that the storageGPR (vector to be poisoned) is not null. | 
 |  | 
 |         5. FTL's compileGetIndexedPropertyStorage() does not need a m_poisonedVector null | 
 |            check because it is followed by a call to caged() which assumes that the | 
 |            vector cannot be null. | 
 |  | 
 |         6. FTL's compileGetTypedArrayByteOffset() already has a m_poisonedVector null check. | 
 |  | 
 |         7. FTL's compileNewTypedArray() does not need a vector null check because the | 
 |            poisoning code is preceded by a size null check, which ensures that the | 
 |            storage (vector to be poisoned) is not null. | 
 |  | 
 |         8. FTL's speculateTypedArrayIsNotNeutered() does not need a | 
 |            m_poisonedVector null check because the function is a null check. | 
 |  | 
 |         9. IntrinsicGetterAccessCase::emitIntrinsicGetter()'s TypedArrayByteOffsetIntrinsic | 
 |            case needs a null check so that it does not try to unpoison a null vector. | 
 |  | 
 |         10. JIT::emitIntTypedArrayGetByVal() does not need a vector null check because | 
 |             we already do a length check even before loading the vector. | 
 |  | 
 |         11. JIT::emitFloatTypedArrayGetByVal() does not need a vector null check because | 
 |             we already do a length check even before loading the vector. | 
 |  | 
 |         12. JIT::emitIntTypedArrayPutByVal() does not need a vector null check because | 
 |             we already do a length check even before loading the vector. | 
 |  | 
 |         13. JIT::emitFloatTypedArrayPutByVal() does not need a vector null check because | 
 |             we already do a length check even before loading the vector. | 
 |  | 
 |         14. LLInt's loadTypedArrayCaged() does not need a vector null check because its | 
 |             client will do a TypedArray length check before calling it. | 
 |  | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::checkArray): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasArrayMode): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotNeutered): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::cagedMayBeNull): Deleted. | 
 |         * jit/IntrinsicEmitter.cpp: | 
 |         (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitIntTypedArrayGetByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayGetByVal): | 
 |         (JSC::JIT::emitIntTypedArrayPutByVal): | 
 |         (JSC::JIT::emitFloatTypedArrayPutByVal): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * offlineasm/arm64.rb: | 
 |         * offlineasm/x86.rb: | 
 |         * runtime/CagedBarrierPtr.h: | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::JSArrayBufferView): | 
 |         (JSC::JSArrayBufferView::finalize): | 
 |         (JSC::JSArrayBufferView::neuter): | 
 |         * runtime/JSArrayBufferView.h: | 
 |         (JSC::JSArrayBufferView::vector const): | 
 |         (JSC::JSArrayBufferView::offsetOfPoisonedVector): | 
 |         (JSC::JSArrayBufferView::poisonFor): | 
 |         (JSC::JSArrayBufferView::Poison::key): | 
 |         (JSC::JSArrayBufferView::offsetOfVector): Deleted. | 
 |         * runtime/JSCPoison.cpp: | 
 |         (JSC::initializePoison): | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSGenericTypedArrayViewInlines.h: | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::estimatedSize): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): | 
 |         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): | 
 |         * runtime/JSObject.h: | 
 |  | 
 | 2018-01-30  Fujii Hironori  <Hironori.Fujii@sony.com> | 
 |  | 
 |         [Win] Warning fix. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=177007 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * interpreter/StackVisitor.cpp: | 
 |         (JSC::StackVisitor::Frame::dump const): | 
 |         Changed the type of locationRawBits from unsigned to uintptr_t. | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::createNumberFormat): | 
 |         Initialize 'style' to avoid potentially uninitialized local variable warning. | 
 |  | 
 | 2018-01-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Implement trimStart and trimEnd | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182233 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         String.prototype.{trimStart,trimEnd} are now stage 3[1]. | 
 |         String.prototype.{trimLeft,trimRight} are alias to these functions. | 
 |  | 
 |         We rename these functions to trimStart and trimEnd, and put them as | 
 |         trimLeft and trimRight too. | 
 |  | 
 |         [1]: https://tc39.github.io/proposal-string-left-right-trim/ | 
 |  | 
 |         * runtime/StringPrototype.cpp: | 
 |         (JSC::StringPrototype::finishCreation): | 
 |         (JSC::trimString): | 
 |         (JSC::stringProtoFuncTrim): | 
 |         (JSC::stringProtoFuncTrimStart): | 
 |         (JSC::stringProtoFuncTrimEnd): | 
 |         (JSC::stringProtoFuncTrimLeft): Deleted. | 
 |         (JSC::stringProtoFuncTrimRight): Deleted. | 
 |  | 
 | 2018-01-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Relax line terminators in String to make JSON subset of JS | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182232 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         "Subsume JSON" spec is now stage 3[1]. Before this spec change, | 
 |         JSON can accept \u2028 / \u2029 in string while JS cannot do that. | 
 |         It accidentally made JSON non subset of JS. | 
 |  | 
 |         Now we extend our JS string to accept \u2028 / \u2029 to make JSON | 
 |         subset of JS in this spec change. | 
 |  | 
 |         [1]: https://github.com/tc39/proposal-json-superset | 
 |  | 
 |         * parser/Lexer.cpp: | 
 |         (JSC::Lexer<T>::parseStringSlowCase): | 
 |  | 
 | 2018-01-29  Jiewen Tan  <jiewen_tan@apple.com> | 
 |  | 
 |         [WebAuthN] Add a compile-time feature flag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182211 | 
 |         <rdar://problem/36936365> | 
 |  | 
 |         Reviewed by Brent Fulgham. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-01-29  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION (r227341): DFG_ASSERT failure at JSC::DFG::AtTailAbstractState::forNode() | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182249 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Changed clobberize() handling of CompareEq, et al to properly handle comparisons between | 
 |         Untyped and Object values when compared against built in types.  Such comparisons can | 
 |         invoke toNumber() or other methods. | 
 |  | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-01-29  Matt Lewis  <jlewis3@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r227725. | 
 |  | 
 |         This caused internal failures. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "JSC Sampling Profiler: Detect tester and testee when sampling | 
 |         in RegExp JIT" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=152729 | 
 |         https://trac.webkit.org/changeset/227725 | 
 |  | 
 | 2018-01-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         JSC Sampling Profiler: Detect tester and testee when sampling in RegExp JIT | 
 |         https://bugs.webkit.org/show_bug.cgi?id=152729 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch extends SamplingProfiler to recognize JIT RegExp execution. We record | 
 |         executing RegExp in VM so that SamplingProfiler can detect it. This is better | 
 |         than the previous VM::isExecutingInRegExpJIT flag approach since | 
 |  | 
 |         1. isExecutingInRegExpJIT is set after starting executing JIT RegExp code. Thus, | 
 |         if we suspend the thread just before executing this flag, or just after clearing | 
 |         this flag, SamplingProfiler gets invalid frame, and frame validation fails. We | 
 |         should set such a flag before and after executing JIT RegExp code. | 
 |  | 
 |         2. This removes VM dependency from YarrJIT which is not essential one. | 
 |  | 
 |         We add ExecutionContext enum to RegExp::matchInline not to mark execution if it | 
 |         is done in non JS thread. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::regexpName): | 
 |         (JSC::BytecodeDumper<Block>::dumpRegExps): | 
 |         (JSC::regexpToSourceString): Deleted. | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         * runtime/RegExp.cpp: | 
 |         (JSC::RegExp::compile): | 
 |         (JSC::RegExp::match): | 
 |         (JSC::RegExp::matchConcurrently): | 
 |         (JSC::RegExp::compileMatchOnly): | 
 |         (JSC::RegExp::toSourceString const): | 
 |         * runtime/RegExp.h: | 
 |         * runtime/RegExpInlines.h: | 
 |         (JSC::RegExp::matchInline): | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::createRegExpMatchesArray): | 
 |         * runtime/SamplingProfiler.cpp: | 
 |         (JSC::SamplingProfiler::SamplingProfiler): | 
 |         (JSC::SamplingProfiler::timerLoop): | 
 |         (JSC::SamplingProfiler::takeSample): | 
 |         (JSC::SamplingProfiler::processUnverifiedStackTraces): | 
 |         (JSC::SamplingProfiler::StackFrame::nameFromCallee): | 
 |         (JSC::SamplingProfiler::StackFrame::displayName): | 
 |         (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests): | 
 |         (JSC::SamplingProfiler::StackFrame::functionStartLine): | 
 |         (JSC::SamplingProfiler::StackFrame::functionStartColumn): | 
 |         (JSC::SamplingProfiler::StackFrame::sourceID): | 
 |         (JSC::SamplingProfiler::StackFrame::url): | 
 |         (WTF::printInternal): | 
 |         (JSC::SamplingProfiler::~SamplingProfiler): Deleted. | 
 |         * runtime/SamplingProfiler.h: | 
 |         * runtime/VM.h: | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generateEnter): | 
 |         (JSC::Yarr::YarrGenerator::generateReturn): | 
 |         (JSC::Yarr::YarrGenerator::YarrGenerator): | 
 |         (JSC::Yarr::jitCompile): | 
 |         * yarr/YarrJIT.h: | 
 |  | 
 | 2018-01-29  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] WeakMap#set should have DFG node | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180015 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This patch adds WeakMapSet and WeakSetAdd DFG nodes to handle them efficiently in DFG and FTL. | 
 |         We also define CSE rules for them. Now, WeakMapSet and WeakSetAdd can offer the results of | 
 |         the subsequent WeakMapGet if CSE allows. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::addVarArgChild): | 
 |         (JSC::DFG::ByteCodeParser::handleIntrinsicCall): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         WeakMap operations do not cause GC. | 
 |  | 
 |         * 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::compileWeakSetAdd): | 
 |         (JSC::DFG::SpeculativeJIT::compileWeakMapSet): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         * 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::compileWeakSetAdd): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileWeakMapSet): | 
 |         * jit/JITOperations.h: | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * runtime/WeakMapPrototype.cpp: | 
 |         (JSC::WeakMapPrototype::finishCreation): | 
 |         * runtime/WeakSetPrototype.cpp: | 
 |         (JSC::WeakSetPrototype::finishCreation): | 
 |  | 
 | 2018-01-28  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         LargeAllocation should do the same distancing as MarkedBlock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182226 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         This makes LargeAllocation do the same exact distancing that MarkedBlock promises to do. | 
 |          | 
 |         To make that possible, this patch first makes MarkedBlock know exactly how much distancing it | 
 |         is doing: | 
 |          | 
 |         - I've rationalized the payloadSize calculation. In particular, I made MarkedSpace use the | 
 |           calculation done in MarkedBlock. MarkedSpace used to do the math a different way. This | 
 |           keeps the old way just for a static_assert. | 
 |          | 
 |         - The promised amount of distancing is now codified in HeapCell.h as | 
 |           minimumDistanceBetweenCellsFromDifferentOrigins. We assert that the footer size is at least | 
 |           as big as this. I didn't want to just use footer size for this constant because then, if | 
 |           you increased the size of the footer, you'd also add padding to every large allocation. | 
 |          | 
 |         Then this patch just adds minimumDistanceBetweenCellsFromDifferentOrigins to each large | 
 |         allocation. It also zeroes that slice of memory to prevent any information leaks that way. | 
 |          | 
 |         This is perf neutral. Large allocations start out at ~8000 bytes. The amount of padding is | 
 |         ~300 bytes. That's 3.75% space overhead for objects that are ~8000 bytes, zero overhead for | 
 |         smaller objects, and diminishing overhead for larger objects. We allocate very few large | 
 |         objects, so we shouldn't have any real space overhead from this. | 
 |  | 
 |         * heap/HeapCell.h: | 
 |         * heap/LargeAllocation.cpp: | 
 |         (JSC::LargeAllocation::tryCreate): | 
 |         * heap/MarkedBlock.h: | 
 |         * heap/MarkedSpace.h: | 
 |  | 
 | 2018-01-27  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Make MarkedBlock::Footer bigger | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182220 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |          | 
 |         This makes the block footer larger by moving the newlyAllocated bits from the handle into | 
 |         the footer. | 
 |          | 
 |         It used to be profitable to put anything we could into the handle because that would free up | 
 |         payload space inside the block. But now that we want to use the footer for padding, it's | 
 |         profitable to put GC state information - especially data that is used by the GC itself and so | 
 |         is not useful for a Spectre attack - into the footer to increase object distancing. | 
 |  | 
 |         * heap/CellContainer.cpp: | 
 |         (JSC::CellContainer::isNewlyAllocated const): | 
 |         * heap/IsoCellSet.cpp: | 
 |         (JSC::IsoCellSet::sweepToFreeList): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::Handle): | 
 |         (JSC::MarkedBlock::Footer::Footer): | 
 |         (JSC::MarkedBlock::Handle::stopAllocating): | 
 |         (JSC::MarkedBlock::Handle::lastChanceToFinalize): | 
 |         (JSC::MarkedBlock::Handle::resumeAllocating): | 
 |         (JSC::MarkedBlock::aboutToMarkSlow): | 
 |         (JSC::MarkedBlock::resetAllocated): | 
 |         (JSC::MarkedBlock::Handle::resetAllocated): Deleted. | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::newlyAllocatedVersion const): | 
 |         (JSC::MarkedBlock::isNewlyAllocated): | 
 |         (JSC::MarkedBlock::setNewlyAllocated): | 
 |         (JSC::MarkedBlock::clearNewlyAllocated): | 
 |         (JSC::MarkedBlock::newlyAllocated const): | 
 |         (JSC::MarkedBlock::Handle::newlyAllocatedVersion const): Deleted. | 
 |         (JSC::MarkedBlock::Handle::isNewlyAllocated): Deleted. | 
 |         (JSC::MarkedBlock::Handle::setNewlyAllocated): Deleted. | 
 |         (JSC::MarkedBlock::Handle::clearNewlyAllocated): Deleted. | 
 |         (JSC::MarkedBlock::Handle::newlyAllocated const): Deleted. | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::isNewlyAllocatedStale const): | 
 |         (JSC::MarkedBlock::hasAnyNewlyAllocated): | 
 |         (JSC::MarkedBlock::Handle::isLive): | 
 |         (JSC::MarkedBlock::Handle::specializedSweep): | 
 |         (JSC::MarkedBlock::Handle::newlyAllocatedMode): | 
 |         (JSC::MarkedBlock::Handle::isNewlyAllocatedStale const): Deleted. | 
 |         (JSC::MarkedBlock::Handle::hasAnyNewlyAllocated): Deleted. | 
 |         * heap/MarkedSpace.cpp: | 
 |         (JSC::MarkedSpace::endMarking): | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::appendJSCellOrAuxiliary): | 
 |  | 
 | 2018-01-27  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         MarkedBlock should have a footer instead of a header | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182217 | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |          | 
 |         This moves the MarkedBlock's meta-data from the header to the footer. This doesn't really | 
 |         change anything except for some compile-time constants, so it should not affect performance. | 
 |          | 
 |         This change is to help protect against Spectre attacks on structure checks, which allow for | 
 |         small-offset out-of-bounds access. By putting the meta-data at the end of the block, small | 
 |         OOBs will only get to other objects in the same block or the block footer. The block footer | 
 |         is not super interesting. So, if we combine this with the TLC change (r227617), this means we | 
 |         can use blocks as the mechanism of achieving distance between objects from different origins. | 
 |         We just need to avoid ever putting objects from different origins in the same block. That's | 
 |         what bug 181636 is about. | 
 |          | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::blockHeaderSize): Deleted. | 
 |         (JSC::BlockDirectory::blockSizeForBytes): Deleted. | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/HeapUtil.h: | 
 |         (JSC::HeapUtil::findGCObjectPointersForMarking): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::MarkedBlock): | 
 |         (JSC::MarkedBlock::~MarkedBlock): | 
 |         (JSC::MarkedBlock::Footer::Footer): | 
 |         (JSC::MarkedBlock::Footer::~Footer): | 
 |         (JSC::MarkedBlock::Handle::stopAllocating): | 
 |         (JSC::MarkedBlock::Handle::lastChanceToFinalize): | 
 |         (JSC::MarkedBlock::Handle::resumeAllocating): | 
 |         (JSC::MarkedBlock::aboutToMarkSlow): | 
 |         (JSC::MarkedBlock::resetMarks): | 
 |         (JSC::MarkedBlock::assertMarksNotStale): | 
 |         (JSC::MarkedBlock::Handle::didConsumeFreeList): | 
 |         (JSC::MarkedBlock::markCount): | 
 |         (JSC::MarkedBlock::clearHasAnyMarked): | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         (JSC::MarkedBlock::Handle::didRemoveFromDirectory): | 
 |         (JSC::MarkedBlock::Handle::sweep): | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::markingVersion const): | 
 |         (JSC::MarkedBlock::lock): | 
 |         (JSC::MarkedBlock::subspace const): | 
 |         (JSC::MarkedBlock::footer): | 
 |         (JSC::MarkedBlock::footer const): | 
 |         (JSC::MarkedBlock::handle): | 
 |         (JSC::MarkedBlock::handle const): | 
 |         (JSC::MarkedBlock::Handle::blockFooter): | 
 |         (JSC::MarkedBlock::isAtomAligned): | 
 |         (JSC::MarkedBlock::Handle::cellAlign): | 
 |         (JSC::MarkedBlock::blockFor): | 
 |         (JSC::MarkedBlock::vm const): | 
 |         (JSC::MarkedBlock::weakSet): | 
 |         (JSC::MarkedBlock::cellSize): | 
 |         (JSC::MarkedBlock::attributes const): | 
 |         (JSC::MarkedBlock::atomNumber): | 
 |         (JSC::MarkedBlock::areMarksStale): | 
 |         (JSC::MarkedBlock::aboutToMark): | 
 |         (JSC::MarkedBlock::isMarkedRaw): | 
 |         (JSC::MarkedBlock::isMarked): | 
 |         (JSC::MarkedBlock::testAndSetMarked): | 
 |         (JSC::MarkedBlock::marks const): | 
 |         (JSC::MarkedBlock::isAtom): | 
 |         (JSC::MarkedBlock::Handle::forEachCell): | 
 |         (JSC::MarkedBlock::hasAnyMarked const): | 
 |         (JSC::MarkedBlock::noteMarked): | 
 |         (WTF::MarkedBlockHash::hash): | 
 |         (JSC::MarkedBlock::firstAtom): Deleted. | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::marksConveyLivenessDuringMarking): | 
 |         (JSC::MarkedBlock::Handle::isLive): | 
 |         (JSC::MarkedBlock::Handle::specializedSweep): | 
 |         (JSC::MarkedBlock::Handle::forEachLiveCell): | 
 |         (JSC::MarkedBlock::Handle::forEachDeadCell): | 
 |         (JSC::MarkedBlock::Handle::forEachMarkedCell): | 
 |         * heap/MarkedSpace.cpp: | 
 |         * heap/MarkedSpace.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |  | 
 | 2018-01-27  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         DFG strength reduction fails to convert NumberToStringWithValidRadixConstant for 0 to constant '0' | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182213 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         toStringWithRadixInternal is originally used for the slow path if the given value is larger than radix or negative. | 
 |         As a result, it does not accept 0 correctly, and produces an empty string. Since DFGStrengthReductionPhase uses | 
 |         this function, it accidentally converts NumberToStringWithValidRadixConstant(0, radix) to an empty string. | 
 |         This patch fixes toStringWithRadixInternal to accept 0. This change fixes twitch.tv's issue. | 
 |  | 
 |         We also add a careful cast to avoid `-INT32_MIN`. It does not produce incorrect value in x86 in practice, | 
 |         but it is UB, and a compiler may assume that the given value is never INT32_MIN and could do an incorrect optimization. | 
 |  | 
 |         * runtime/NumberPrototype.cpp: | 
 |         (JSC::toStringWithRadixInternal): | 
 |  | 
 | 2018-01-26  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Fix emitAllocateWithNonNullAllocator to work on arm | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182187 | 
 |         <rdar://problem/36906550> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch unifies the x86 and ARM paths in emitAllocateWithNonNullAllocator | 
 |         and makes it so that emitAllocateWithNonNullAllocator uses the macro scratch | 
 |         register on ARM. | 
 |  | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |  | 
 | 2018-01-26  Joseph Pecoraro  <pecoraro@apple.com> | 
 |  | 
 |         Rebaselining builtin generator tests after r227685. | 
 |  | 
 |         Unreviewed. | 
 |  | 
 |         * 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: | 
 |         It used to be that the builtins generator was minifying by default. That was an accident | 
 |         and we now only minify on Release builds. The generator tests are now getting the | 
 |         default unminified output behavior so they need to update their expectations | 
 |         for some extra whitespace. | 
 |  | 
 | 2018-01-26  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         We should only append ParserArenaDeletable pointers to ParserArena::m_deletableObjects. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182180 | 
 |         <rdar://problem/36460697> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         Some parser Node subclasses extend ParserArenaDeletable via multiple inheritance, | 
 |         but not as the Node's first base class.  ParserArena::m_deletableObjects is | 
 |         expecting pointers to objects of the shape of ParserArenaDeletable.  We ensure | 
 |         this by allocating the Node subclass, and casting it to ParserArenaDeletable to | 
 |         get the correct pointer to append to ParserArena::m_deletableObjects. | 
 |  | 
 |         To simplify things, we introduce a JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED  | 
 |         (analogous to WTF_MAKE_FAST_ALLOCATED) for use in Node subclasses that extends | 
 |         ParserArenaDeletable. | 
 |  | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::ParserArenaDeletable::operator new): | 
 |         * parser/Nodes.h: | 
 |         * parser/ParserArena.h: | 
 |         (JSC::ParserArena::allocateDeletable): | 
 |  | 
 | 2018-01-26  Joseph Pecoraro  <pecoraro@apple.com> | 
 |  | 
 |         JavaScriptCore builtins should be partially minified in Release builds not Debug builds | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182165 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * Scripts/builtins/builtins_model.py: | 
 |         (BuiltinFunction.fromString): | 
 |         Apply minifications on Release builds instead of Debug builds. | 
 |         Also eliminate leading whitespace. | 
 |  | 
 | 2018-01-26  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Disable TLS-based TLCs | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182175 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Check for the new USE(FAST_TLS_FOR_TLC) flag instead of just ENABLE(FAST_TLS_JIT). | 
 |  | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::~BlockDirectory): | 
 |         * heap/BlockDirectory.h: | 
 |         * heap/ThreadLocalCache.cpp: | 
 |         (JSC::ThreadLocalCache::installSlow): | 
 |         (JSC::ThreadLocalCache::installData): | 
 |         * heap/ThreadLocalCache.h: | 
 |         * heap/ThreadLocalCacheInlines.h: | 
 |         (JSC::ThreadLocalCache::getImpl): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::~VM): | 
 |         * runtime/VM.h: | 
 |  | 
 | 2018-01-25  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/errorhandling.html crashes | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181980 | 
 |  | 
 |         Reviewed by Ryosuke Niwa. | 
 |  | 
 |         We accidentally failed to propagate errored promise in instantiate and satify phase if entry.{instantiate,satisfy} | 
 |         promises are set. Since we just returned `entry`, it becomes succeeded promise even if the dependent fetch, instantiate, | 
 |         and satisfy promises are failed. This patch fixes error propagation by returning `entry.instantiate` and `entry.satisfy` | 
 |         correctly. | 
 |  | 
 |         * builtins/ModuleLoaderPrototype.js: | 
 |         (requestInstantiate): | 
 |         (requestSatisfy): | 
 |  | 
 | 2018-01-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Gardening: fix 32-bit build after r227643. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182086 | 
 |  | 
 |         Not reviewed. | 
 |  | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitDynamicPoisonOnLoadedType): | 
 |  | 
 | 2018-01-24  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DirectArguments should protect itself using dynamic poisoning and precise index masking | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182086 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This implements dynamic poisoning and precise index masking in DirectArguments, using the | 
 |         helpers from <wtf/MathExtras.h> and helpers in AssemblyHelpers and FTL::LowerDFGToB3. | 
 |          | 
 |         We use dynamic poisoning for DirectArguments since this object did not have any additional | 
 |         indirection inside it that could have been poisoned. So, we use the xor of the expected type | 
 |         and the actual type as an additional input into the pointer. | 
 |          | 
 |         We use precise index masking for bounds checks, because it's not worth doing index masking | 
 |         unless we know that precise index masking is too slow. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::lshiftPtr): | 
 |         (JSC::MacroAssembler::rshiftPtr): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::preciseIndexMask64): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::preciseIndexMask32): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoison): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnLoadedType): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnType): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitPreciseIndexMask32): | 
 |         (JSC::AssemblyHelpers::emitDynamicPoison): | 
 |         (JSC::AssemblyHelpers::emitDynamicPoisonOnLoadedType): | 
 |         (JSC::AssemblyHelpers::emitDynamicPoisonOnType): | 
 |         * jit/AssemblyHelpers.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitDirectArgumentsGetByVal): | 
 |         * runtime/DirectArguments.h: | 
 |         (JSC::DirectArguments::getIndexQuickly const): | 
 |         (JSC::DirectArguments::setIndexQuickly): | 
 |         (JSC::DirectArguments::argument): | 
 |         * runtime/GenericArgumentsInlines.h: | 
 |  | 
 | 2018-01-25  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Rename some local vars from type to typedArrayType for greater clarity. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182148 | 
 |         <rdar://problem/36882310> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): | 
 |  | 
 | 2018-01-25  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC GC should support TLCs (thread local caches) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181559 | 
 |  | 
 |         Reviewed by Mark Lam and Saam Barati. | 
 |          | 
 |         This is a big step towards object distancing by site origin. This patch implements TLCs, or | 
 |         thread-local caches, which allow each thread to allocate from its own free lists. It also | 
 |         means that any given thread can context-switch TLCs. This will allow us to do separate | 
 |         allocation for separate site origins. Eventually, once we reshape how MarkedBlock looks, this | 
 |         will allow us to have a hard distancing constraint between objects from different origins. | 
 |          | 
 |         In this new design, every "size class" is represented as a BlockDirectory (formerly known as | 
 |         MarkedAllocator, prior to r226822). This contains a bag of blocks allocated using some | 
 |         aligned memory allocator (which roughly represents which cage you came out of), and anyone | 
 |         using the same allocator can share those blocks - but so long as they are in that | 
 |         BlockDirectory, they will have the size and type of that directory. Previously, each | 
 |         BlockDirectory had exactly one FreeList. Now, each BlockDirectory has a double-linked-list of | 
 |         LocalAllocators, each of which has a FreeList. | 
 |          | 
 |         To decide which LocalAllocator to allocate out of, we need a ThreadLocalCache and a | 
 |         BlockDirectory. The directory gives us an offset-within-the-ThreadLocalCache, which we simply | 
 |         call the Allocator (which is just a POD type that contains a 32-bit offset). Each allocation | 
 |         starts by figuring out what Allocator it wants (often we have this information at JIT time). | 
 |         Then the allocation loads its ThreadLocalCache::Data from a fast TLS slot. Then we add the | 
 |         Allocator offset to the ThreadLocalCache::Data to get the LocalAllocator. Note that we use | 
 |         offsets as opposed to indices to make it easy to do the math on each allocation (if | 
 |         LocalAllocator had a weird size then every allocation would have to do an imul). | 
 |          | 
 |         This is a definite slow-down on GC-heavy benchmarks, but by a small margin, and only on | 
 |         unusually heavy tests. For example, boyer and splay are both 3% regressed, but the Octane | 
 |         geomean is just fine. The JetStream score regressed by 0.5% with p = 0.08 (so maybe there is | 
 |         something there, but it's not significant according to our threshold). | 
 |          | 
 |         Relanding after fixing ARM64 bug in AssemblyHelpers::emitAllocateWithNonNullAllocator(). That | 
 |         function needs to be careful to avoid using the scratch register because the FTL will call it | 
 |         in disallow-scratch-register mode. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * b3/B3LowerToAir.cpp: | 
 |         * b3/B3PatchpointSpecial.cpp: | 
 |         (JSC::B3::PatchpointSpecial::admitsStack): | 
 |         * b3/B3StackmapSpecial.cpp: | 
 |         (JSC::B3::StackmapSpecial::forEachArgImpl): | 
 |         (JSC::B3::StackmapSpecial::isArgValidForRep): | 
 |         * b3/B3StackmapValue.cpp: | 
 |         (JSC::B3::StackmapValue::appendSomeRegisterWithClobber): | 
 |         * b3/B3StackmapValue.h: | 
 |         * 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): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/ObjectAllocationProfile.h: | 
 |         (JSC::ObjectAllocationProfile::ObjectAllocationProfile): | 
 |         (JSC::ObjectAllocationProfile::clear): | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileMakeRope): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewObject): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSCell): | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell): | 
 |         * heap/Allocator.cpp: Added. | 
 |         (JSC::Allocator::cellSize const): | 
 |         * heap/Allocator.h: Added. | 
 |         (JSC::Allocator::Allocator): | 
 |         (JSC::Allocator::offset const): | 
 |         (JSC::Allocator::operator== const): | 
 |         (JSC::Allocator::operator!= const): | 
 |         (JSC::Allocator::operator bool const): | 
 |         * heap/AllocatorInlines.h: Added. | 
 |         (JSC::Allocator::allocate const): | 
 |         (JSC::Allocator::tryAllocate const): | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::BlockDirectory): | 
 |         (JSC::BlockDirectory::findBlockForAllocation): | 
 |         (JSC::BlockDirectory::stopAllocating): | 
 |         (JSC::BlockDirectory::prepareForAllocation): | 
 |         (JSC::BlockDirectory::stopAllocatingForGood): | 
 |         (JSC::BlockDirectory::resumeAllocating): | 
 |         (JSC::BlockDirectory::endMarking): | 
 |         (JSC::BlockDirectory::isFreeListedCell): | 
 |         (JSC::BlockDirectory::didConsumeFreeList): Deleted. | 
 |         (JSC::BlockDirectory::tryAllocateWithoutCollecting): Deleted. | 
 |         (JSC::BlockDirectory::allocateIn): Deleted. | 
 |         (JSC::BlockDirectory::tryAllocateIn): Deleted. | 
 |         (JSC::BlockDirectory::doTestCollectionsIfNeeded): Deleted. | 
 |         (JSC::BlockDirectory::allocateSlowCase): Deleted. | 
 |         * heap/BlockDirectory.h: | 
 |         (JSC::BlockDirectory::cellKind const): | 
 |         (JSC::BlockDirectory::allocator const): | 
 |         (JSC::BlockDirectory::freeList const): Deleted. | 
 |         (JSC::BlockDirectory::offsetOfFreeList): Deleted. | 
 |         (JSC::BlockDirectory::offsetOfCellSize): Deleted. | 
 |         * heap/BlockDirectoryInlines.h: | 
 |         (JSC::BlockDirectory::isFreeListedCell const): Deleted. | 
 |         (JSC::BlockDirectory::allocate): Deleted. | 
 |         * heap/CompleteSubspace.cpp: | 
 |         (JSC::CompleteSubspace::CompleteSubspace): | 
 |         (JSC::CompleteSubspace::allocatorFor): | 
 |         (JSC::CompleteSubspace::allocate): | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): | 
 |         (JSC::CompleteSubspace::allocatorForSlow): | 
 |         (JSC::CompleteSubspace::allocateSlow): | 
 |         (JSC::CompleteSubspace::tryAllocateSlow): | 
 |         * heap/CompleteSubspace.h: | 
 |         (JSC::CompleteSubspace::allocatorForSizeStep): | 
 |         (JSC::CompleteSubspace::allocatorForNonVirtual): | 
 |         * heap/FreeList.h: | 
 |         * heap/GCDeferralContext.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Heap): | 
 |         (JSC::Heap::lastChanceToFinalize): | 
 |         * heap/Heap.h: | 
 |         (JSC::Heap::threadLocalCacheLayout): | 
 |         * heap/IsoCellSet.h: | 
 |         * heap/IsoSubspace.cpp: | 
 |         (JSC::IsoSubspace::IsoSubspace): | 
 |         (JSC::IsoSubspace::allocatorFor): | 
 |         (JSC::IsoSubspace::allocate): | 
 |         (JSC::IsoSubspace::allocateNonVirtual): | 
 |         * heap/IsoSubspace.h: | 
 |         (JSC::IsoSubspace::allocatorForNonVirtual): | 
 |         * heap/LocalAllocator.cpp: Added. | 
 |         (JSC::LocalAllocator::LocalAllocator): | 
 |         (JSC::LocalAllocator::reset): | 
 |         (JSC::LocalAllocator::~LocalAllocator): | 
 |         (JSC::LocalAllocator::stopAllocating): | 
 |         (JSC::LocalAllocator::resumeAllocating): | 
 |         (JSC::LocalAllocator::prepareForAllocation): | 
 |         (JSC::LocalAllocator::stopAllocatingForGood): | 
 |         (JSC::LocalAllocator::allocateSlowCase): | 
 |         (JSC::LocalAllocator::didConsumeFreeList): | 
 |         (JSC::LocalAllocator::tryAllocateWithoutCollecting): | 
 |         (JSC::LocalAllocator::allocateIn): | 
 |         (JSC::LocalAllocator::tryAllocateIn): | 
 |         (JSC::LocalAllocator::doTestCollectionsIfNeeded): | 
 |         (JSC::LocalAllocator::isFreeListedCell const): | 
 |         * heap/LocalAllocator.h: Added. | 
 |         (JSC::LocalAllocator::offsetOfFreeList): | 
 |         (JSC::LocalAllocator::offsetOfCellSize): | 
 |         * heap/LocalAllocatorInlines.h: Added. | 
 |         (JSC::LocalAllocator::allocate): | 
 |         * heap/MarkedSpace.cpp: | 
 |         (JSC::MarkedSpace::stopAllocatingForGood): | 
 |         * heap/MarkedSpace.h: | 
 |         * heap/SlotVisitor.cpp: | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/Subspace.h: | 
 |         * heap/ThreadLocalCache.cpp: Added. | 
 |         (JSC::ThreadLocalCache::create): | 
 |         (JSC::ThreadLocalCache::ThreadLocalCache): | 
 |         (JSC::ThreadLocalCache::~ThreadLocalCache): | 
 |         (JSC::ThreadLocalCache::allocateData): | 
 |         (JSC::ThreadLocalCache::destroyData): | 
 |         (JSC::ThreadLocalCache::installSlow): | 
 |         (JSC::ThreadLocalCache::installData): | 
 |         (JSC::ThreadLocalCache::allocatorSlow): | 
 |         (JSC::ThreadLocalCache::destructor): | 
 |         * heap/ThreadLocalCache.h: Added. | 
 |         (JSC::ThreadLocalCache::offsetOfSize): | 
 |         (JSC::ThreadLocalCache::offsetOfFirstAllocator): | 
 |         * heap/ThreadLocalCacheInlines.h: Added. | 
 |         (JSC::ThreadLocalCache::getImpl): | 
 |         (JSC::ThreadLocalCache::get): | 
 |         (JSC::ThreadLocalCache::install): | 
 |         (JSC::ThreadLocalCache::allocator): | 
 |         (JSC::ThreadLocalCache::tryGetAllocator): | 
 |         * heap/ThreadLocalCacheLayout.cpp: Added. | 
 |         (JSC::ThreadLocalCacheLayout::ThreadLocalCacheLayout): | 
 |         (JSC::ThreadLocalCacheLayout::~ThreadLocalCacheLayout): | 
 |         (JSC::ThreadLocalCacheLayout::allocateOffset): | 
 |         (JSC::ThreadLocalCacheLayout::snapshot): | 
 |         (JSC::ThreadLocalCacheLayout::directory): | 
 |         * heap/ThreadLocalCacheLayout.h: Added. | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |         (JSC::AssemblyHelpers::emitAllocate): | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSized): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::vm): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSCell): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObject): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): Deleted. | 
 |         (JSC::AssemblyHelpers::emitAllocate): Deleted. | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSized): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::createUninitialized): | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::overrideThings): | 
 |         * runtime/GenericArgumentsInlines.h: | 
 |         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor): | 
 |         * runtime/HashMapImpl.h: | 
 |         (JSC::HashMapBuffer::create): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::unshiftCountSlowCase): | 
 |         * runtime/JSArray.h: | 
 |         (JSC::JSArray::tryCreate): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext): | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::tryAllocateCellHelper): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::threadLocalCache const): | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::didAcquireLock): | 
 |         * runtime/Options.h: | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |  | 
 | 2018-01-25  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r227592. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182110 | 
 |  | 
 |         it made ARM64 (Linux and iOS) crash (Requested by pizlo-mbp on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "JSC GC should support TLCs (thread local caches)" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181559 | 
 |         https://trac.webkit.org/changeset/227592 | 
 |  | 
 | 2018-01-25  Alejandro G. Castro  <alex@igalia.com> | 
 |  | 
 |         undefined reference to 'JSC::B3::BasicBlock::fallThrough() const | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180637 | 
 |  | 
 |         Reviewed by Michael Catanzaro. | 
 |  | 
 |         We need to make sure the implementation of the inline functions is | 
 |         compiled when we compile the code using the function, now that the | 
 |         compilation is divided, or we could end up with undefined symbols | 
 |         when the declaration is not inlined, at least with some compilers | 
 |         and optimizations enabled -O2. | 
 |  | 
 |         * b3/B3SwitchValue.cpp: replace the include. | 
 |  | 
 | 2018-01-20  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC GC should support TLCs (thread local caches) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181559 | 
 |  | 
 |         Reviewed by Mark Lam and Saam Barati. | 
 |          | 
 |         This is a big step towards object distancing by site origin. This patch implements TLCs, or | 
 |         thread-local caches, which allow each thread to allocate from its own free lists. It also | 
 |         means that any given thread can context-switch TLCs. This will allow us to do separate | 
 |         allocation for separate site origins. Eventually, once we reshape how MarkedBlock looks, this | 
 |         will allow us to have a hard distancing constraint between objects from different origins. | 
 |          | 
 |         In this new design, every "size class" is represented as a BlockDirectory (formerly known as | 
 |         MarkedAllocator, prior to r226822). This contains a bag of blocks allocated using some | 
 |         aligned memory allocator (which roughly represents which cage you came out of), and anyone | 
 |         using the same allocator can share those blocks - but so long as they are in that | 
 |         BlockDirectory, they will have the size and type of that directory. Previously, each | 
 |         BlockDirectory had exactly one FreeList. Now, each BlockDirectory has a double-linked-list of | 
 |         LocalAllocators, each of which has a FreeList. | 
 |          | 
 |         To decide which LocalAllocator to allocate out of, we need a ThreadLocalCache and a | 
 |         BlockDirectory. The directory gives us an offset-within-the-ThreadLocalCache, which we simply | 
 |         call the Allocator (which is just a POD type that contains a 32-bit offset). Each allocation | 
 |         starts by figuring out what Allocator it wants (often we have this information at JIT time). | 
 |         Then the allocation loads its ThreadLocalCache::Data from a fast TLS slot. Then we add the | 
 |         Allocator offset to the ThreadLocalCache::Data to get the LocalAllocator. Note that we use | 
 |         offsets as opposed to indices to make it easy to do the math on each allocation (if | 
 |         LocalAllocator had a weird size then every allocation would have to do an imul). | 
 |          | 
 |         This is a definite slow-down on GC-heavy benchmarks, but by a small margin, and only on | 
 |         unusually heavy tests. For example, boyer and splay are both 3% regressed, but the Octane | 
 |         geomean is just fine. The JetStream score regressed by 0.5% with p = 0.08 (so maybe there is | 
 |         something there, but it's not significant according to our threshold). | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * b3/B3LowerToAir.cpp: | 
 |         * b3/B3PatchpointSpecial.cpp: | 
 |         (JSC::B3::PatchpointSpecial::admitsStack): | 
 |         * b3/B3StackmapSpecial.cpp: | 
 |         (JSC::B3::StackmapSpecial::forEachArgImpl): | 
 |         (JSC::B3::StackmapSpecial::isArgValidForRep): | 
 |         * b3/B3StackmapValue.cpp: | 
 |         (JSC::B3::StackmapValue::appendSomeRegisterWithClobber): | 
 |         * b3/B3StackmapValue.h: | 
 |         * 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): | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/ObjectAllocationProfile.h: | 
 |         (JSC::ObjectAllocationProfile::ObjectAllocationProfile): | 
 |         (JSC::ObjectAllocationProfile::clear): | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileMakeRope): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileCreateThis): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewObject): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSCell): | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell): | 
 |         * heap/Allocator.cpp: Added. | 
 |         (JSC::Allocator::cellSize const): | 
 |         * heap/Allocator.h: Added. | 
 |         (JSC::Allocator::Allocator): | 
 |         (JSC::Allocator::offset const): | 
 |         (JSC::Allocator::operator== const): | 
 |         (JSC::Allocator::operator!= const): | 
 |         (JSC::Allocator::operator bool const): | 
 |         * heap/AllocatorInlines.h: Added. | 
 |         (JSC::Allocator::allocate const): | 
 |         (JSC::Allocator::tryAllocate const): | 
 |         * heap/BlockDirectory.cpp: | 
 |         (JSC::BlockDirectory::BlockDirectory): | 
 |         (JSC::BlockDirectory::findBlockForAllocation): | 
 |         (JSC::BlockDirectory::stopAllocating): | 
 |         (JSC::BlockDirectory::prepareForAllocation): | 
 |         (JSC::BlockDirectory::stopAllocatingForGood): | 
 |         (JSC::BlockDirectory::resumeAllocating): | 
 |         (JSC::BlockDirectory::endMarking): | 
 |         (JSC::BlockDirectory::isFreeListedCell): | 
 |         (JSC::BlockDirectory::didConsumeFreeList): Deleted. | 
 |         (JSC::BlockDirectory::tryAllocateWithoutCollecting): Deleted. | 
 |         (JSC::BlockDirectory::allocateIn): Deleted. | 
 |         (JSC::BlockDirectory::tryAllocateIn): Deleted. | 
 |         (JSC::BlockDirectory::doTestCollectionsIfNeeded): Deleted. | 
 |         (JSC::BlockDirectory::allocateSlowCase): Deleted. | 
 |         * heap/BlockDirectory.h: | 
 |         (JSC::BlockDirectory::cellKind const): | 
 |         (JSC::BlockDirectory::allocator const): | 
 |         (JSC::BlockDirectory::freeList const): Deleted. | 
 |         (JSC::BlockDirectory::offsetOfFreeList): Deleted. | 
 |         (JSC::BlockDirectory::offsetOfCellSize): Deleted. | 
 |         * heap/BlockDirectoryInlines.h: | 
 |         (JSC::BlockDirectory::isFreeListedCell const): Deleted. | 
 |         (JSC::BlockDirectory::allocate): Deleted. | 
 |         * heap/CompleteSubspace.cpp: | 
 |         (JSC::CompleteSubspace::CompleteSubspace): | 
 |         (JSC::CompleteSubspace::allocatorFor): | 
 |         (JSC::CompleteSubspace::allocate): | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): | 
 |         (JSC::CompleteSubspace::allocatorForSlow): | 
 |         (JSC::CompleteSubspace::allocateSlow): | 
 |         (JSC::CompleteSubspace::tryAllocateSlow): | 
 |         * heap/CompleteSubspace.h: | 
 |         (JSC::CompleteSubspace::allocatorForSizeStep): | 
 |         (JSC::CompleteSubspace::allocatorForNonVirtual): | 
 |         * heap/FreeList.h: | 
 |         * heap/GCDeferralContext.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Heap): | 
 |         (JSC::Heap::lastChanceToFinalize): | 
 |         * heap/Heap.h: | 
 |         (JSC::Heap::threadLocalCacheLayout): | 
 |         * heap/IsoCellSet.h: | 
 |         * heap/IsoSubspace.cpp: | 
 |         (JSC::IsoSubspace::IsoSubspace): | 
 |         (JSC::IsoSubspace::allocatorFor): | 
 |         (JSC::IsoSubspace::allocate): | 
 |         (JSC::IsoSubspace::allocateNonVirtual): | 
 |         * heap/IsoSubspace.h: | 
 |         (JSC::IsoSubspace::allocatorForNonVirtual): | 
 |         * heap/LocalAllocator.cpp: Added. | 
 |         (JSC::LocalAllocator::LocalAllocator): | 
 |         (JSC::LocalAllocator::reset): | 
 |         (JSC::LocalAllocator::~LocalAllocator): | 
 |         (JSC::LocalAllocator::stopAllocating): | 
 |         (JSC::LocalAllocator::resumeAllocating): | 
 |         (JSC::LocalAllocator::prepareForAllocation): | 
 |         (JSC::LocalAllocator::stopAllocatingForGood): | 
 |         (JSC::LocalAllocator::allocateSlowCase): | 
 |         (JSC::LocalAllocator::didConsumeFreeList): | 
 |         (JSC::LocalAllocator::tryAllocateWithoutCollecting): | 
 |         (JSC::LocalAllocator::allocateIn): | 
 |         (JSC::LocalAllocator::tryAllocateIn): | 
 |         (JSC::LocalAllocator::doTestCollectionsIfNeeded): | 
 |         (JSC::LocalAllocator::isFreeListedCell const): | 
 |         * heap/LocalAllocator.h: Added. | 
 |         (JSC::LocalAllocator::offsetOfFreeList): | 
 |         (JSC::LocalAllocator::offsetOfCellSize): | 
 |         * heap/LocalAllocatorInlines.h: Added. | 
 |         (JSC::LocalAllocator::allocate): | 
 |         * heap/MarkedSpace.cpp: | 
 |         (JSC::MarkedSpace::stopAllocatingForGood): | 
 |         * heap/MarkedSpace.h: | 
 |         * heap/SlotVisitor.cpp: | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/Subspace.h: | 
 |         * heap/ThreadLocalCache.cpp: Added. | 
 |         (JSC::ThreadLocalCache::create): | 
 |         (JSC::ThreadLocalCache::ThreadLocalCache): | 
 |         (JSC::ThreadLocalCache::~ThreadLocalCache): | 
 |         (JSC::ThreadLocalCache::allocateData): | 
 |         (JSC::ThreadLocalCache::destroyData): | 
 |         (JSC::ThreadLocalCache::installSlow): | 
 |         (JSC::ThreadLocalCache::installData): | 
 |         (JSC::ThreadLocalCache::allocatorSlow): | 
 |         (JSC::ThreadLocalCache::destructor): | 
 |         * heap/ThreadLocalCache.h: Added. | 
 |         (JSC::ThreadLocalCache::offsetOfSize): | 
 |         (JSC::ThreadLocalCache::offsetOfFirstAllocator): | 
 |         * heap/ThreadLocalCacheInlines.h: Added. | 
 |         (JSC::ThreadLocalCache::getImpl): | 
 |         (JSC::ThreadLocalCache::get): | 
 |         (JSC::ThreadLocalCache::install): | 
 |         (JSC::ThreadLocalCache::allocator): | 
 |         (JSC::ThreadLocalCache::tryGetAllocator): | 
 |         * heap/ThreadLocalCacheLayout.cpp: Added. | 
 |         (JSC::ThreadLocalCacheLayout::ThreadLocalCacheLayout): | 
 |         (JSC::ThreadLocalCacheLayout::~ThreadLocalCacheLayout): | 
 |         (JSC::ThreadLocalCacheLayout::allocateOffset): | 
 |         (JSC::ThreadLocalCacheLayout::snapshot): | 
 |         (JSC::ThreadLocalCacheLayout::directory): | 
 |         * heap/ThreadLocalCacheLayout.h: Added. | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |         (JSC::AssemblyHelpers::emitAllocate): | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSized): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::vm): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSCell): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObject): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): Deleted. | 
 |         (JSC::AssemblyHelpers::emitAllocate): Deleted. | 
 |         (JSC::AssemblyHelpers::emitAllocateVariableSized): Deleted. | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         (JSC::JIT::emit_op_create_this): | 
 |         * runtime/ButterflyInlines.h: | 
 |         (JSC::Butterfly::createUninitialized): | 
 |         (JSC::Butterfly::tryCreate): | 
 |         (JSC::Butterfly::growArrayRight): | 
 |         * runtime/DirectArguments.cpp: | 
 |         (JSC::DirectArguments::overrideThings): | 
 |         * runtime/GenericArgumentsInlines.h: | 
 |         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor): | 
 |         * runtime/HashMapImpl.h: | 
 |         (JSC::HashMapBuffer::create): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         (JSC::JSArray::unshiftCountSlowCase): | 
 |         * runtime/JSArray.h: | 
 |         (JSC::JSArray::tryCreate): | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext): | 
 |         * runtime/JSCellInlines.h: | 
 |         (JSC::tryAllocateCellHelper): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::JSGlobalObject): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::threadLocalCache const): | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::didAcquireLock): | 
 |         * runtime/Options.h: | 
 |         * runtime/RegExpMatchesArray.h: | 
 |         (JSC::tryCreateUninitializedRegExpMatchesArray): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         * runtime/VMEntryScope.cpp: | 
 |         (JSC::VMEntryScope::VMEntryScope): | 
 |  | 
 | 2018-01-24  Joseph Pecoraro  <pecoraro@apple.com> | 
 |  | 
 |         Web Inspector: Simplify update-LegacyInspectorBackendCommands.rb | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182067 | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         * inspector/scripts/codegen/models.py: | 
 |         (Framework.fromString): | 
 |         (Frameworks): | 
 |         * inspector/scripts/generate-inspector-protocol-bindings.py: | 
 |         (generate_from_specification): | 
 |         Allow framework WebInspectorUI to generate just the backend commands files. | 
 |  | 
 | 2018-01-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Update Poisoned pointers to take a Poison class instead of a uintptr_t&. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182017 | 
 |         <rdar://problem/36795513> | 
 |  | 
 |         Reviewed by Filip Pizlo and JF Bastien. | 
 |  | 
 |         Removed the POISON() macro.  Now that we have Poison types, we can just use the | 
 |         the Poison type instead and make the code a bit nicer to read. | 
 |  | 
 |         * API/JSAPIWrapperObject.h: | 
 |         * API/JSCallbackFunction.h: | 
 |         * API/JSCallbackObject.h: | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testInterpreter): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::instructions): | 
 |         (JSC::CodeBlock::instructions const): | 
 |         * dfg/DFGOSRExitCompilerCommon.h: | 
 |         (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCheckSubClass): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): | 
 |         * jit/JIT.h: | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * parser/UnlinkedSourceCode.h: | 
 |         * runtime/ArrayPrototype.h: | 
 |         * runtime/CustomGetterSetter.h: | 
 |         * runtime/DateInstance.h: | 
 |         * runtime/InternalFunction.h: | 
 |         * runtime/JSArrayBuffer.h: | 
 |         * runtime/JSCPoison.cpp: | 
 |         (JSC::initializePoison): | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/JSScriptFetchParameters.h: | 
 |         * runtime/JSScriptFetcher.h: | 
 |         * runtime/NativeExecutable.h: | 
 |         * runtime/StructureTransitionTable.h: | 
 |         * runtime/WriteBarrier.h: | 
 |         (JSC::WriteBarrier::poison): Deleted. | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         (JSC::JSWebAssemblyInstance::poison): | 
 |         * wasm/js/JSWebAssemblyMemory.h: | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |         * wasm/js/JSWebAssemblyTable.h: | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * wasm/js/WebAssemblyFunctionBase.h: | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyToJSCallee.h: | 
 |         * wasm/js/WebAssemblyWrapperFunction.h: | 
 |  | 
 | 2018-01-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, suppress GCC warnings | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181976 | 
 |  | 
 |         * runtime/TypedArrayType.h: | 
 |  | 
 | 2018-01-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [YARR] Add diagnosis for YarrJIT failures | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181927 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         It is nice if we can see the reason why YarrJIT fails to compile a given pattern. | 
 |         This patch introduces Yarr::JITFailureReason and dumps messages if Options::dumpCompiledRegExpPatterns is specified. | 
 |  | 
 |         * runtime/RegExp.cpp: | 
 |         (JSC::RegExp::compile): | 
 |         (JSC::RegExp::compileMatchOnly): | 
 |         * yarr/YarrJIT.cpp: | 
 |         (JSC::Yarr::YarrGenerator::generateTerm): | 
 |         (JSC::Yarr::YarrGenerator::backtrackTerm): | 
 |         (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern): | 
 |         (JSC::Yarr::YarrGenerator::YarrGenerator): | 
 |         (JSC::Yarr::YarrGenerator::compile): | 
 |         (JSC::Yarr::dumpCompileFailure): | 
 |         (JSC::Yarr::jitCompile): | 
 |         * yarr/YarrJIT.h: | 
 |         (JSC::Yarr::YarrCodeBlock::setFallBack): | 
 |         (JSC::Yarr::YarrCodeBlock::fallBack): | 
 |         (JSC::Yarr::YarrCodeBlock::clear): | 
 |         (JSC::Yarr::YarrCodeBlock::YarrCodeBlock): Deleted. | 
 |         (JSC::Yarr::YarrCodeBlock::~YarrCodeBlock): Deleted. | 
 |         (JSC::Yarr::YarrCodeBlock::isFallBack): Deleted. | 
 |  | 
 | 2018-01-23  Alex Christensen  <achristensen@webkit.org> | 
 |  | 
 |         Remove pre-Sierra-OS-specific code in WTF and JavaScriptCore | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182028 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * inspector/remote/cocoa/RemoteInspectorXPCConnection.h: | 
 |         * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm: | 
 |         (Inspector::RemoteInspectorXPCConnection::handleEvent): | 
 |  | 
 | 2018-01-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Use precise index masking for FTL GetByArgumentByVal | 
 |         https://bugs.webkit.org/show_bug.cgi?id=182006 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |          | 
 |         This protects speculative out-of-bounds on arguments[index]. | 
 |          | 
 |         Making this work right involved fixing a possible overflow situation with | 
 |         numberOfArgumentsToSkip. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::dump): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasNumberOfArgumentsToSkip): | 
 |         (JSC::DFG::Node::numberOfArgumentsToSkip): | 
 |         * dfg/DFGStackLayoutPhase.cpp: | 
 |         (JSC::DFG::StackLayoutPhase::run): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal): | 
 |  | 
 | 2018-01-23  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         Follow-up for: oss-fuzz jsc build is broken: StringImpl.h:27:10: fatal error: 'unicode/ustring.h' file not found | 
 |         <https://webkit.org/b/181871> | 
 |         <rdar://problem/36669691> | 
 |  | 
 |         Address feedback for this change. | 
 |  | 
 |         * CMakeLists.txt: Change "SYSTEM PUBLIC" to "SYSTEM PRIVATE" per | 
 |         feedback from Konstantin Tokarev. | 
 |  | 
 | 2018-01-23  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Rollout r219636 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181997 | 
 |         <rdar://problem/35883022> | 
 |  | 
 |         Unreviewed, as it is a rollout. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::tryCreateUninitializedRestricted): | 
 |         * runtime/JSArray.h: | 
 |         (JSC::JSArray::tryCreate): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::ensureLengthSlow): | 
 |  | 
 | 2018-01-23  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Re-arrange TypedArray JSTypes to match the order of the TypedArrayType enum list. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181976 | 
 |         <rdar://problem/36766936> | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         1. The order of TypedArray JSTypes now matches the order the TypedArrayType enum | 
 |            list.  I also added static asserts in TypedArrayType.h to enforce this. | 
 |  | 
 |            Also redefined FOR_EACH_TYPED_ARRAY_TYPE() in terms of | 
 |  | 
 |         2. Define 4 new values: | 
 |            a. FirstTypedArrayType | 
 |            b. LastTypedArrayType | 
 |            c. NumberOfTypedArrayTypesExcludingDataView | 
 |            d. NumberOfTypedArrayTypes | 
 |  | 
 |            Use these everywhere where we iterate or bisect the TypedArray JSTypes. | 
 |  | 
 |         3. Removed NUMBER_OF_TYPED_ARRAY_TYPES, and use NumberOfTypedArrayTypes instead. | 
 |  | 
 |         4. Simplify the code that converts between TypedArrayType and JSType. | 
 |  | 
 |            Changed typedArrayTypeForType() to be the mirror image of typeForTypedArrayType(). | 
 |            Previously, typedArrayTypeForType() converts DataViewType to NotTypedArray | 
 |            instead of TypeDataView.  Now, it converts to TypeDataView. | 
 |  | 
 |            This does not result in any change of behavior because typedArrayTypeForType() | 
 |            is only called in Structure::hasIndexingHeader(), and its result is passed to | 
 |            isTypedView(), which handles TypeDataView correctly. | 
 |  | 
 |         5. Also fixed a bug in SpeculativeJIT::compileGetTypedArrayByteOffset(). | 
 |            If the vector is null, we can skip the rest of the checks.  While the current | 
 |            code does not result in incorrect behavior, it is inefficient, and communicates | 
 |            wrong information to the reader i.e. implying that there's something in the | 
 |            dataGPR when there's not.  The dataGPR should also be null in this case. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileIsTypedArrayView): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::isTypedArrayView): | 
 |         * ftl/FTLOSRExit.cpp: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSType.h: | 
 |         * runtime/TypedArrayType.cpp: | 
 |         (JSC::typeForTypedArrayType): Deleted. | 
 |         * runtime/TypedArrayType.h: | 
 |         (JSC::typedArrayTypeForType): | 
 |         (JSC::typeForTypedArrayType): | 
 |  | 
 | 2018-01-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         DFG should always flush `this` | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181999 | 
 |  | 
 |         Reviewed by Saam Barati and Mark Lam. | 
 |          | 
 |         This is going to make it possible to use precise index masking for arguments-on-the-stack | 
 |         accesses with an index adjusted so that 0 is this. Without this change, we would have no way | 
 |         of masking when the argument count is 0, unless we padded the argument area so that there was | 
 |         always an argument slot after `this` and it was always initialized. | 
 |          | 
 |         This is neutral on all benchmarks. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::flushImpl): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminalImpl): | 
 |         (JSC::DFG::ByteCodeParser::flush): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminal): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |         (JSC::DFG::flushImpl): Deleted. | 
 |         (JSC::DFG::flushForTerminalImpl): Deleted. | 
 |         * dfg/DFGPreciseLocalClobberize.h: | 
 |         (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop): | 
 |  | 
 | 2018-01-23  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         JSC should use a speculation fence on VM entry/exit | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181991 | 
 |  | 
 |         Reviewed by JF Bastien and Mark Lam. | 
 |          | 
 |         This adds a WTF::speculationFence on VM entry and exit. | 
 |          | 
 |         For a microbenchmark that just calls a native function (supplied via an Objective-C block) in a | 
 |         tight loop from JS is a 0% regression on x86 and a 11% regression on ARM64. | 
 |          | 
 |         * runtime/JSLock.cpp: | 
 |         (JSC::JSLock::didAcquireLock): | 
 |         (JSC::JSLock::willReleaseLock): | 
 |  | 
 | 2018-01-23  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] JIT requires sizeof(bool) == 1 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181150 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         LLInt and JIT assumes that sizeof(bool) == 1. But it is implementation-dependent in C++ spec. | 
 |         Since this is a mandatory requirement in JSC, we add a static_assert to ensure this. | 
 |  | 
 |         * runtime/InitializeThreading.cpp: | 
 |  | 
 | 2018-01-23  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Update the argument count in DFGByteCodeParser::handleRecursiveCall | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181739 | 
 |         <rdar://problem/36627662> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         When calling a function, its number of arguments is set on the stack. When we turn a recursive tail call | 
 |         into a jump, we should update that stack slot as there is no guarantee that the function was originally | 
 |         called with the same number of arguments. Forgetting to do this is observable through 'arguments.length'. | 
 |  | 
 |         It required adding a new DFG node: 'SetArgumentCountIncludingThis', that takes an unsigned int | 
 |         as its first OpInfo field, and stores it to the stack at the right place. | 
 |  | 
 |         We must be a bit careful in where we put this new node, as it ClobbersExit. | 
 |         We must also fix DFGArgumentsEliminationPhase and DFGPutStackSinkingPhase as they assumed that any node that writes to the stack must write to either an argument or a local. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGArgumentsEliminationPhase.cpp: | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleRecursiveTailCall): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGMayExit.cpp: | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::argumentCountIncludingThis): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGPutStackSinkingPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileSetArgumentCountIncludingThis): | 
 |         * 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::compileSetArgumentCountIncludingThis): | 
 |  | 
 | 2018-01-22  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         DFG abstract interpreter needs to properly model effects of some Math ops | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181886 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Reviewed the processing of the various ArithXXX and CompareXXX and found that | 
 |         several nodes don't handle UntypedUse.  Added clobberWorld() for those cases. | 
 |  | 
 |         * dfg/DFGAbstractInterpreter.h: | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects): | 
 |  | 
 | 2018-01-21  Wenson Hsieh  <wenson_hsieh@apple.com> | 
 |  | 
 |         Add a new feature flag for EXTRA_ZOOM_MODE and reintroduce AdditionalFeatureDefines.h | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181918 | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         Add EXTRA_ZOOM_MODE to FeatureDefines.xconfig (off by default). | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |  | 
 | 2018-01-20  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [JSC] NumberPrototype::extractRadixFromArgs incorrectly cast double to int32_t | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181182 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         Casting double to integer is undefined behavior when the truncation | 
 |         results into a value that doesn't fit into integer size, | 
 |         according C++ spec[1]. Thus, we are changing bigIntProtoFuncToString and | 
 |         numberProtoFuncToString to remove these source of undefined | 
 |         behavior. | 
 |  | 
 |         [1] - http://en.cppreference.com/w/cpp/language/implicit_conversion | 
 |  | 
 |         * runtime/BigIntPrototype.cpp: | 
 |         (JSC::bigIntProtoFuncToString): | 
 |         * runtime/NumberPrototype.cpp: | 
 |         (JSC::numberProtoFuncToString): | 
 |         (JSC::extractToStringRadixArgument): | 
 |         (JSC::extractRadixFromArgs): Deleted. | 
 |         * runtime/NumberPrototype.h: | 
 |  | 
 | 2018-01-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Kill ArithNegate's ArithProfile assert inside BytecodeParser | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181877 | 
 |         <rdar://problem/36630552> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Before this patch, we used to assert that op_negate's result ArithProfile | 
 |         only produces number. It's logically true that negate only produces a number. | 
 |         However, the DFG may incorrectly pick this ArithProfile when doing OSR exit | 
 |         profiling. So we'll end up profiling something that's likely the input to | 
 |         negate. This patch removes the assert. We cede to the fact that Graph::methodOfGettingAValueProfileFor | 
 |         is entirely heuristic based, potentially leading to profiling results being imprecise. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::makeSafe): | 
 |  | 
 | 2018-01-19  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         oss-fuzz jsc build is broken: StringImpl.h:27:10: fatal error: 'unicode/ustring.h' file not found | 
 |         <https://webkit.org/b/181871> | 
 |  | 
 |         Rubber-stamped by JF Bastien. | 
 |  | 
 |         * CMakeLists.txt: Add ICU header search path to | 
 |         LLIntOffsetsExtractor target by reusing | 
 |         JavaScriptCore_SYSTEM_INCLUDE_DIRECTORIES. | 
 |  | 
 | 2018-01-19  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Spread's effects are modeled incorrectly both in AI and in Clobberize | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181867 | 
 |         <rdar://problem/36290415> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |  | 
 | 2018-01-19  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         HaveInternalSDK includes should be "#include?" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179670 | 
 |  | 
 |         Reviewed by Dan Bernstein. | 
 |  | 
 |         * Configurations/Base.xcconfig: | 
 |  | 
 | 2018-01-18  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Set the minimum executable allocator size properly | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181816 | 
 |         <rdar://problem/36635533> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Executable allocator expects at least two page size's worth of | 
 |         allocation in certain conditions, and that causes some tests to | 
 |         now fail because they ask for less. Set that minimum correctly. We | 
 |         were already rounding up to a page size, so having a minimum of 2 | 
 |         page sizes is fine. | 
 |  | 
 |         * jit/ExecutableAllocator.cpp: | 
 |         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): | 
 |  | 
 | 2018-01-18  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Unreviewed build fix for Windows | 
 |  | 
 |         * interpreter/FrameTracers.h: | 
 |         (JSC::assertStackPointerIsAligned): Can't use gcc style inlined assembly | 
 |         on Windows. | 
 |  | 
 | 2018-01-18  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Poisons should be initialized after Options are initialized. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181807 | 
 |         <rdar://problem/36629138> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This is because poison initialization may depend on options. | 
 |  | 
 |         * runtime/InitializeThreading.cpp: | 
 |         (JSC::initializeThreading): | 
 |  | 
 | 2018-01-18  Dan Bernstein  <mitz@apple.com> | 
 |  | 
 |         [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181803 | 
 |  | 
 |         Reviewed by Tim Horton. | 
 |  | 
 |         * Configurations/Base.xcconfig: Updated. | 
 |         * Configurations/DebugRelease.xcconfig: Ditto. | 
 |         * Configurations/FeatureDefines.xcconfig: Adopted macOSTargetConditionals helpers. | 
 |         * Configurations/Version.xcconfig: Updated. | 
 |         * Configurations/macOSTargetConditionals.xcconfig: Added. Defines helper build settings | 
 |           useful for defining settings that depend on the target macOS version. | 
 |  | 
 | 2018-01-18  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION (r226068): [X86] Crash in JavaScriptCore ShadowChicken when handling exceptions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181802 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         There where a few places where the stack isn't properly aligned for X86 when we call into C++ code. | 
 |         Two places are where we call into exception handling code, the LLInt and from nativeForGenerator. | 
 |         The other place was when we call into the operationOSRWriteBarrier(). | 
 |  | 
 |         Added an assert check that the stack is aligned on X86 platforms in the native call tracing code. | 
 |         This helped find the other cases beyond the original problem. | 
 |  | 
 |         * dfg/DFGOSRExitCompilerCommon.cpp: | 
 |         (JSC::DFG::osrWriteBarrier): | 
 |         * interpreter/FrameTracers.h: | 
 |         (JSC::assertStackPointerIsAligned): | 
 |         (JSC::NativeCallFrameTracer::NativeCallFrameTracer): | 
 |         (JSC::NativeCallFrameTracerWithRestore::NativeCallFrameTracerWithRestore): | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::nativeForGenerator): | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |  | 
 | 2018-01-18  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r227096. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181788 | 
 |  | 
 |         "it caused a 15% octane regression" (Requested by saamyjoon on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "Support MultiGetByOffset in the DFG" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181466 | 
 |         https://trac.webkit.org/changeset/227096 | 
 |  | 
 | 2018-01-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] Introduce PhantomNewRegexp and RegExpExecNonGlobalOrSticky | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181535 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         When executing the code like `string.match(/regexp/)`, `/regexp/` object is created every time we execute this code. | 
 |         However, user rarely cares about this `/regexp/` object. Typically, it is soon discarded even if it has `lastIndex` | 
 |         information. So we should not create RegExpObject for this typical case. | 
 |  | 
 |         This patch introduces PhantomNewRegexp. We convert NewRegexp node to PhantomNewRegexp in Object Allocation Sinking (OAS) | 
 |         phase. We should do this analysis in OAS phase since we track modifications to `lastIndex` in the OAS phase. Even if | 
 |         `lastIndex` is modified, it may not be read by users. So we have a chance to drop this NewRegexp beacause we carefully model | 
 |         SetRegExpObjectLastIndex and GetRegExpObjectLastIndex in OAS phase. | 
 |  | 
 |         This patch is a first attempt to drop NewRegexp. So we start optimizing it with the simple step: we first drop RegExp with | 
 |         non-global and non-sticky one. We can later extend this optimization for RegExp with global flag. But this is not included | 
 |         in this patch. | 
 |  | 
 |         We convert RegExpExec to RegExpExecNonGlobalOrSticky if we find that the given RegExpObject's RegExp is not global/sticky | 
 |         flagged. Since we do not need to touch `lastIndex` property in this case, RegExpExecNonGlobalOrSticky just takes RegExp | 
 |         instead of RegExpObject. This offers the chance to make NewRegExp unused. | 
 |  | 
 |         We also convert RegExpMatchFast to RegExpExecNonGlobalOrSticky if its RegExpObject's RegExp is non-global and non-sticky, | 
 |         since they are the same behavior. | 
 |  | 
 |         The above optimization completely removes NewRegexp in SixSpeed's regexp-u.{es5,es6}. The resulted execution time is | 
 |         somewhat pure execution time of our Yarr implementation. | 
 |  | 
 |                                      baseline                  patched | 
 |  | 
 |             regex-u.es5          34.8557+-0.5963     ^      6.1507+-0.5526        ^ definitely 5.6670x faster | 
 |             regex-u.es6          89.1919+-3.3851     ^     32.0917+-0.4260        ^ definitely 2.7793x faster | 
 |  | 
 |         This patch does not change Octane/RegExp so much since it heavily uses String.prototype.replace, which is not handled in | 
 |         this patch right now. We should support StringReplace node in subsequent patches. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGClobbersExitState.cpp: | 
 |         (JSC::DFG::clobbersExitState): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::dump): | 
 |         * dfg/DFGMayExit.cpp: | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::convertToRegExpExecNonGlobalOrSticky): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToPhantomNewRegexp): | 
 |         (JSC::DFG::Node::convertToSetRegExpObjectLastIndex): | 
 |         (JSC::DFG::Node::hasHeapPrediction): | 
 |         (JSC::DFG::Node::hasCellOperand): | 
 |         (JSC::DFG::Node::isPhantomAllocation): | 
 |         (JSC::DFG::Node::hasIgnoreLastIndexIsWritable): | 
 |         (JSC::DFG::Node::ignoreLastIndexIsWritable): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGPromotedHeapLocation.cpp: | 
 |         (WTF::printInternal): | 
 |         * dfg/DFGPromotedHeapLocation.h: | 
 |         (JSC::DFG::PromotedLocationDescriptor::neededForMaterialization const): | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileNewRegexp): | 
 |         (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex): | 
 |         (JSC::DFG::SpeculativeJIT::compileRegExpExecNonGlobalOrSticky): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGStrengthReductionPhase.cpp: | 
 |         (JSC::DFG::StrengthReductionPhase::handleNode): | 
 |         * dfg/DFGValidate.cpp: | 
 |         * ftl/FTLCapabilities.cpp: | 
 |         (JSC::FTL::canCompile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNode): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpExecNonGlobalOrSticky): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileSetRegExpObjectLastIndex): | 
 |         * ftl/FTLOperations.cpp: | 
 |         (JSC::FTL::operationPopulateObjectInOSR): | 
 |         (JSC::FTL::operationMaterializeObjectInOSR): | 
 |         * jit/JITOperations.h: | 
 |         * runtime/RegExpObject.h: | 
 |         (JSC::RegExpObject::create): | 
 |  | 
 | 2018-01-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Remove unused helper functions to convert node to PutHint | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181775 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We are using PromotedHeapLocation::createHint. So they are not necessary. | 
 |  | 
 |         * dfg/DFGNode.cpp: | 
 |         (JSC::DFG::Node::convertToPutHint): Deleted. | 
 |         (JSC::DFG::Node::convertToPutStructureHint): Deleted. | 
 |         (JSC::DFG::Node::convertToPutByOffsetHint): Deleted. | 
 |         (JSC::DFG::Node::convertToPutClosureVarHint): Deleted. | 
 |         * dfg/DFGNode.h: | 
 |  | 
 | 2018-01-17  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Unreviewed, suppress warnings on GCC | 
 |  | 
 |         Since `length` and `p` are always positive or zero, | 
 |         static_cast<unsigned>() does what we want. | 
 |  | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::parseInt): | 
 |  | 
 | 2018-01-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Disable Atomics when SharedArrayBuffer isn’t enabled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181572 | 
 |         <rdar://problem/36553206> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::createAtomicsProperty): Deleted. | 
 |  | 
 | 2018-01-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Support MultiGetByOffset in the DFG | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181466 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         This seems to benefit Speedometer in my local testing. It seems like this | 
 |         might be around a 0.5% improvement. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleGetById): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::supportsMultiGetByOffset): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |  | 
 | 2018-01-17  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         DFG::Node::convertToConstant needs to clear the varargs flags | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181697 | 
 |         <rdar://problem/36497332> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::convertToConstant): | 
 |  | 
 | 2018-01-16  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Allow dangerous disabling of poison | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181685 | 
 |         <rdar://problem/36546265> | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Some tools such as leak detectors and such like to look at real | 
 |         pointers, and poisoned ones confuse them. Add a JSC option to | 
 |         disable poisoning, but log to the console when this is done. | 
 |  | 
 |         * runtime/JSCPoison.cpp: | 
 |         (JSC::initializePoison): | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-16  Ryan Haddad  <ryanhaddad@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r226937. | 
 |  | 
 |         Tests added with this change are failing due to a missing | 
 |         exception check. | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[JSC] NumberPrototype::extractRadixFromArgs incorrectly cast | 
 |         double to int32_t" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181182 | 
 |         https://trac.webkit.org/changeset/226937 | 
 |  | 
 | 2018-01-16  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         Test programs should only be built in developer mode | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181653 | 
 |  | 
 |         Reviewed by Carlos Garcia Campos. | 
 |  | 
 |         Build test programs only in developer mode, and fix code style. | 
 |  | 
 |         * shell/CMakeLists.txt: | 
 |  | 
 | 2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         Improve use of ExportMacros | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181652 | 
 |  | 
 |         Reviewed by Konstantin Tokarev. | 
 |  | 
 |         * API/JSBase.h: Update a comment. | 
 |         * inspector/InspectorBackendDispatcher.h: Use a better, yet equivalent, WTF macro. | 
 |         * runtime/JSExportMacros.h: Simplify the #defines in this file. | 
 |  | 
 | 2018-01-15  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Remove makePoisonedUnique | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181630 | 
 |         <rdar://problem/36498623> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         I added a conversion from std::unique_ptr, so we can just use | 
 |         std::make_unique and it'll auto-poison when converted. | 
 |  | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::makePoisonedUnique): Deleted. | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::makePoisonedUnique): Deleted. | 
 |  | 
 | 2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com> | 
 |  | 
 |         REGRESSION(r226266): [GTK] RELEASE_ASSERT(reservedZoneSize >= minimumReservedZoneSize) in JSC::VM::updateStackLimits | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181438 | 
 |         <rdar://problem/36376724> | 
 |  | 
 |         Reviewed by Carlos Garcia Campos. | 
 |  | 
 |         Roll out the functional changes of r226266. We'll keep the minor CMake library type setting | 
 |         cleanup, but we have to switch back to building JSC only as a shared library, and we have to | 
 |         get rid of the version script. | 
 |  | 
 |         * PlatformGTK.cmake: | 
 |         * javascriptcoregtk-symbols.map: Removed. | 
 |  | 
 | 2018-01-14  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Unreviewed. r226928 broke the CLOOP build. This patch fixes the CLOOP build. | 
 |  | 
 |         * bytecode/CallLinkStatus.cpp: | 
 |         (JSC::CallLinkStatus::computeFromLLInt): | 
 |         (JSC::CallLinkStatus::computeExitSiteData): | 
 |  | 
 | 2018-01-13  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Replace all use of ConstExprPoisoned with Poisoned. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181542 | 
 |         <rdar://problem/36442138> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         1. All JSC poisons are now defined in JSCPoison.h. | 
 |  | 
 |         2. Change all clients to use the new poison values via the POISON() macro. | 
 |  | 
 |         3. The LLInt code has been updated to handle CodeBlock poison.  Some of this code | 
 |            uses the t5 temp register, which is not available on the Windows port. | 
 |            Fortunately, we don't currently do poisoning on the Windows port yet.  So, | 
 |            it will just work for now. | 
 |  | 
 |            When poisoning is enabled for the Windows port, this LLInt code will need a | 
 |            Windows specific implementation to workaround its lack of a t5 register. | 
 |  | 
 |         * API/JSAPIWrapperObject.h: | 
 |         * API/JSCallbackFunction.h: | 
 |         * API/JSCallbackObject.h: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * assembler/MacroAssemblerCodeRef.h: | 
 |         (JSC::MacroAssemblerCodePtr::emptyValue): | 
 |         (JSC::MacroAssemblerCodePtr::deletedValue): | 
 |         * b3/B3LowerMacros.cpp: | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testInterpreter): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::instructions): | 
 |         (JSC::CodeBlock::instructions const): | 
 |         (JSC::CodeBlock::makePoisonedUnique): | 
 |         * dfg/DFGOSRExitCompilerCommon.h: | 
 |         (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileCheckSubClass): | 
 |         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): | 
 |         * jit/JIT.h: | 
 |         * jit/ThunkGenerators.cpp: | 
 |         (JSC::virtualThunkFor): | 
 |         (JSC::nativeForGenerator): | 
 |         (JSC::boundThisNoArgsFunctionCallGenerator): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * parser/UnlinkedSourceCode.h: | 
 |         * runtime/ArrayPrototype.h: | 
 |         * runtime/CustomGetterSetter.h: | 
 |         * runtime/DateInstance.h: | 
 |         * runtime/InternalFunction.h: | 
 |         * runtime/JSArrayBuffer.h: | 
 |         * runtime/JSCPoison.cpp: Copied from Source/JavaScriptCore/runtime/JSCPoisonedPtr.cpp. | 
 |         (JSC::initializePoison): | 
 |         * runtime/JSCPoison.h: | 
 |         (): Deleted. | 
 |         * runtime/JSCPoisonedPtr.cpp: Removed. | 
 |         * runtime/JSCPoisonedPtr.h: Removed. | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::makePoisonedUnique): | 
 |         * runtime/JSScriptFetchParameters.h: | 
 |         * runtime/JSScriptFetcher.h: | 
 |         * runtime/NativeExecutable.h: | 
 |         * runtime/StructureTransitionTable.h: | 
 |         (JSC::StructureTransitionTable::map const): | 
 |         (JSC::StructureTransitionTable::weakImpl const): | 
 |         * runtime/WriteBarrier.h: | 
 |         (JSC::WriteBarrier::poison): | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         * wasm/js/JSWebAssemblyMemory.h: | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |         * wasm/js/JSWebAssemblyTable.h: | 
 |         * wasm/js/WasmToJS.cpp: | 
 |         (JSC::Wasm::handleBadI64Use): | 
 |         (JSC::Wasm::wasmToJS): | 
 |         * wasm/js/WebAssemblyFunctionBase.h: | 
 |         * wasm/js/WebAssemblyModuleRecord.h: | 
 |         * wasm/js/WebAssemblyToJSCallee.h: | 
 |         * wasm/js/WebAssemblyWrapperFunction.h: | 
 |  | 
 | 2018-01-13  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [JSC] NumberPrototype::extractRadixFromArgs incorrectly cast double to int32_t | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181182 | 
 |  | 
 |         Reviewed by Darin Adler. | 
 |  | 
 |         Casting double to integer is undefined behavior when the truncation | 
 |         results into a value that doesn't fit into integer size, according C++ | 
 |         spec[1]. Thus, we are changing bigIntProtoFuncToString and | 
 |         numberProtoFuncToString to remove these source of undefined behavior. | 
 |  | 
 |         [1] - http://en.cppreference.com/w/cpp/language/implicit_conversion | 
 |  | 
 |         * runtime/BigIntPrototype.cpp: | 
 |         (JSC::bigIntProtoFuncToString): | 
 |         * runtime/NumberPrototype.cpp: | 
 |         (JSC::numberProtoFuncToString): | 
 |         (JSC::extractRadixFromArgs): Deleted. | 
 |         (JSC::extractToStringRadixArgument): Added. | 
 |  | 
 | 2018-01-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Move ExitProfile to UnlinkedCodeBlock so it can be shared amongst CodeBlocks backed by the same UnlinkedCodeBlock | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181545 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         This patch follows the theme of putting optimization profiling information on | 
 |         UnlinkedCodeBlock. This allows the unlinked code cache to remember OSR exit data. | 
 |         This often leads to the first compile of a CodeBlock, backed by an UnlinkedCodeBlock | 
 |         pulled from the code cache, making better compilation decisions, usually | 
 |         resulting in fewer exits, and fewer recompilations. | 
 |          | 
 |         This is a 1% Speedometer progression in my testing. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<CodeBlock>::dumpProfilesForBytecodeOffset): | 
 |         * bytecode/CallLinkStatus.cpp: | 
 |         (JSC::CallLinkStatus::computeFromLLInt): | 
 |         (JSC::CallLinkStatus::computeFor): | 
 |         (JSC::CallLinkStatus::computeExitSiteData): | 
 |         (JSC::CallLinkStatus::computeDFGStatuses): | 
 |         * bytecode/CallLinkStatus.h: | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::addFrequentExitSite): Deleted. | 
 |         (JSC::CodeBlock::hasExitSite const): Deleted. | 
 |         (JSC::CodeBlock::exitProfile): Deleted. | 
 |         * bytecode/DFGExitProfile.cpp: | 
 |         (JSC::DFG::ExitProfile::add): | 
 |         (JSC::DFG::QueryableExitProfile::initialize): | 
 |         * bytecode/DFGExitProfile.h: | 
 |         (JSC::DFG::ExitProfile::hasExitSite const): | 
 |         * bytecode/GetByIdStatus.cpp: | 
 |         (JSC::GetByIdStatus::hasExitSite): | 
 |         (JSC::GetByIdStatus::computeFor): | 
 |         (JSC::GetByIdStatus::computeForStubInfo): | 
 |         * bytecode/GetByIdStatus.h: | 
 |         * bytecode/PutByIdStatus.cpp: | 
 |         (JSC::PutByIdStatus::hasExitSite): | 
 |         (JSC::PutByIdStatus::computeFor): | 
 |         (JSC::PutByIdStatus::computeForStubInfo): | 
 |         * bytecode/PutByIdStatus.h: | 
 |         * bytecode/UnlinkedCodeBlock.cpp: | 
 |         (JSC::UnlinkedCodeBlock::livenessAnalysisSlow): | 
 |         * bytecode/UnlinkedCodeBlock.h: | 
 |         (JSC::UnlinkedCodeBlock::hasExitSite const): | 
 |         (JSC::UnlinkedCodeBlock::hasExitSite): | 
 |         (JSC::UnlinkedCodeBlock::exitProfile): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): | 
 |         * dfg/DFGGraph.h: | 
 |         (JSC::DFG::Graph::hasGlobalExitSite): | 
 |         (JSC::DFG::Graph::hasExitSite): | 
 |         * dfg/DFGLICMPhase.cpp: | 
 |         (JSC::DFG::LICMPhase::attemptHoist): | 
 |         * dfg/DFGOSRExitBase.cpp: | 
 |         (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSiteSlow): | 
 |  | 
 | 2018-01-12  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         PoisonedWriteBarrier | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181599 | 
 |         <rdar://problem/36474351> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Allow poisoning of WriteBarrier objects, and use this for | 
 |         WebAssembly because it is perf-neutral, at least on WasmBench on | 
 |         my MBP. If it indeed is perf-neutral according to the bots, start | 
 |         using it in more performance-sensitive places. | 
 |  | 
 |         * heap/HandleTypes.h: | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/SlotVisitorInlines.h: | 
 |         (JSC::SlotVisitor::append): | 
 |         (JSC::SlotVisitor::appendHidden): | 
 |         * runtime/JSCJSValue.h: | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/Structure.h: | 
 |         * runtime/StructureInlines.h: | 
 |         (JSC::Structure::setPrototypeWithoutTransition): | 
 |         (JSC::Structure::setGlobalObject): | 
 |         (JSC::Structure::setPreviousID): | 
 |         * runtime/WriteBarrier.h: | 
 |         (JSC::WriteBarrierBase::copyFrom): | 
 |         (JSC::WriteBarrierBase::get const): | 
 |         (JSC::WriteBarrierBase::operator* const): | 
 |         (JSC::WriteBarrierBase::operator-> const): | 
 |         (JSC::WriteBarrierBase::clear): | 
 |         (JSC::WriteBarrierBase::slot): | 
 |         (JSC::WriteBarrierBase::operator bool const): | 
 |         (JSC::WriteBarrierBase::setWithoutWriteBarrier): | 
 |         (JSC::WriteBarrierBase::unvalidatedGet const): | 
 |         (JSC::operator==): | 
 |         * runtime/WriteBarrierInlines.h: | 
 |         (JSC::Traits>::set): | 
 |         (JSC::Traits>::setMayBeNull): | 
 |         (JSC::Traits>::setEarlyValue): | 
 |         (JSC::DumbValueTraits<Unknown>>::set): | 
 |         * wasm/WasmInstance.h: | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance): | 
 |         (JSC::JSWebAssemblyInstance::finishCreation): | 
 |         (JSC::JSWebAssemblyInstance::visitChildren): | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         (JSC::JSWebAssemblyInstance::offsetOfPoisonedCallee): | 
 |         * 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: | 
 |  | 
 | 2018-01-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         CheckStructure can be incorrectly subsumed by CheckStructureOrEmpty | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181177 | 
 |         <rdar://problem/36205704> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         The semantics of CheckStructure are such that it does not allow the empty value to flow through it. | 
 |         However, we may eliminate a CheckStructure if it's preceded by a CheckStructureOrEmpty. This doesn't | 
 |         have semantic consequences when validation is turned off. However, with validation on, this trips up | 
 |         our OSR exit machinery that says when an exit is allowed to happen. | 
 |          | 
 |         Consider the following IR: | 
 |          | 
 |         a: GetClosureVar // Or any other node that produces BytecodeTop | 
 |         ... | 
 |         c: CheckStructure(Cell:@a, {s2}) | 
 |         d: PutByOffset(KnownCell:@a, KnownCell:@a, @value) | 
 |          | 
 |         In the TypeCheckHoistingPhase, we may insert CheckStructureOrEmptys like this: | 
 |         a: GetClosureVar | 
 |         e: CheckStructureOrEmpty(@a, {s1}) | 
 |         ... | 
 |         f: CheckStructureOrEmpty(@a, {s2}) | 
 |         c: CheckStructure(Cell:@a, {s2}) | 
 |         d: PutByOffset(KnownCell:@a, KnownCell:@a, @value) | 
 |          | 
 |         This will cause constant folding to change the IR to: | 
 |         a: GetClosureVar | 
 |         e: CheckStructureOrEmpty(@a, {s1}) | 
 |         ... | 
 |         f: CheckStructureOrEmpty(@a, {s2}) | 
 |         d: PutByOffset(KnownCell:@a, KnownCell:@a, @value) | 
 |          | 
 |         Our mayExit analysis determines that the PutByOffset should not exit. Note | 
 |         that AI will determine the only value the PutByOffset can see in @a is  | 
 |         the empty value. Because KnownCell filters SpecCell and not SpecCellCheck, | 
 |         when lowering the PutByOffset, we reach a contradiction in AI and emit | 
 |         an OSR exit. However, because mayExit said we couldn't exit, we assert. | 
 |          | 
 |         Note that if we did not run the TypeCheckHoistingPhase on this IR, AI | 
 |         would have determined we would OSR exit at the second CheckStructure. | 
 |          | 
 |         This patch makes it so constant folding produces the following IR: | 
 |         a: GetClosureVar | 
 |         e: CheckStructureOrEmpty(@a, {s1}) | 
 |         g: AssertNotEmpty(@a) | 
 |         ... | 
 |         f: CheckStructureOrEmpty(@a, {s2}) | 
 |         h: AssertNotEmpty(@a) | 
 |         d: PutByOffset(KnownCell:@a, KnownCell:@a, @value) | 
 |          | 
 |         This modification will cause AI to know we will OSR exit before even reaching | 
 |         the PutByOffset. Note that in the original IR, the GetClosureVar won't | 
 |         actually produce the TDZ value. If it did, bytecode would have caused us | 
 |         to emit a CheckNotEmpty before the CheckStructure/PutByOffset combo. That's | 
 |         why this bug is about IR bookkeeping and not an actual error in IR analysis. | 
 |         This patch introduces AssertNotEmpty instead of using CheckNotEmpty to be | 
 |         more congruous with CheckStructure's semantics of crashing on the empty value | 
 |         as input (on 64 bit platforms). | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGConstantFoldingPhase.cpp: | 
 |         (JSC::DFG::ConstantFoldingPhase::foldConstants): | 
 |         * dfg/DFGDoesGC.cpp: | 
 |         (JSC::DFG::doesGC): | 
 |         * dfg/DFGFixupPhase.cpp: | 
 |         (JSC::DFG::FixupPhase::fixupNode): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/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::compileAssertNotEmpty): | 
 |  | 
 | 2018-01-12  Joseph Pecoraro  <pecoraro@apple.com> | 
 |  | 
 |         Web Inspector: Remove unnecessary raw pointer in InspectorConsoleAgent | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181579 | 
 |         <rdar://problem/36193759> | 
 |  | 
 |         Reviewed by Brian Burg. | 
 |  | 
 |         * inspector/agents/InspectorConsoleAgent.h: | 
 |         * inspector/agents/InspectorConsoleAgent.cpp: | 
 |         (Inspector::InspectorConsoleAgent::clearMessages): | 
 |         (Inspector::InspectorConsoleAgent::addConsoleMessage): | 
 |         Switch from a raw pointer to m_consoleMessages.last(). | 
 |         Also move the expiration check into the if block since it can only | 
 |         happen inside here when the number of console messages changes. | 
 |  | 
 |         (Inspector::InspectorConsoleAgent::discardValues): | 
 |         Also clear the expired message count when messages are cleared. | 
 |  | 
 | 2018-01-12  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Create parallel SlotVisitors apriori | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180907 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         The number of SlotVisitors are capped with the number of HeapHelperPool's threads + 2. | 
 |         If we create these SlotVisitors apropri, we do not need to create SlotVisitors dynamically. | 
 |         Then we do not need to grab locks while iterating all the SlotVisitors. | 
 |  | 
 |         In addition, we do not need to consider the case that the number of SlotVisitors increases | 
 |         after setting up VisitCounters in MarkingConstraintSolver since the number of SlotVisitors | 
 |         does not increase any more. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Heap): | 
 |         (JSC::Heap::runBeginPhase): | 
 |         * heap/Heap.h: | 
 |         * heap/HeapInlines.h: | 
 |         (JSC::Heap::forEachSlotVisitor): | 
 |         (JSC::Heap::numberOfSlotVisitors): Deleted. | 
 |         * heap/MarkingConstraintSolver.cpp: | 
 |         (JSC::MarkingConstraintSolver::didVisitSomething const): | 
 |  | 
 | 2018-01-12  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Each variant of a polymorphic inlined call should be exitOK at the top of the block | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181562 | 
 |         <rdar://problem/36445624> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Before this patch, the very first block in the switch for polymorphic call | 
 |         inlining will have exitOK at the top. The others are not guaranteed to. | 
 |         That was just a bug. They're all exitOK at the top. This will lead to crashes | 
 |         in FixupPhase because we won't have a node in a block that has ExitOK, so | 
 |         when we fixup various type checks, we assert out. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::handleInlining): | 
 |  | 
 | 2018-01-11  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Rename ENABLE_ASYNC_ITERATION to ENABLE_JS_ASYNC_ITERATION | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181573 | 
 |  | 
 |         Reviewed by Simon Fraser. | 
 |  | 
 |         * Configurations/FeatureDefines.xcconfig: | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         REGRESSION(226788): AppStore Crashed @ JavaScriptCore: JSC::MacroAssemblerARM64::pushToSaveImmediateWithoutTouchingRegisters | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181570 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::abortWithReason): | 
 |         Reverting these functions to use dataTempRegister and memoryTempRegister as they are | 
 |         JIT release asserts that will crash the program. | 
 |  | 
 |         (JSC::MacroAssemblerARM64::pushToSaveImmediateWithoutTouchingRegisters): | 
 |         Changed this so that it invalidates any cached dataTmpRegister contents if temp register | 
 |         caching is enabled. | 
 |  | 
 | 2018-01-11  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         Rename MarkedAllocator to BlockDirectory and AllocatorAttributes to CellAttributes | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181543 | 
 |  | 
 |         Rubber stamped by Michael Saboff. | 
 |          | 
 |         In a world that has thread-local caches, the thing we now call the "MarkedAllocator" doesn't | 
 |         really have anything to do with allocation anymore. The allocation will be done by something | 
 |         in the TLC. When you move the allocation logic out of MarkedAllocator, it becomes just a | 
 |         place to find blocks (a "block directory"). | 
 |  | 
 |         Once we do that renaming, the term "allocator attributes" becomes weird. Those are really the | 
 |         attributes of the HeapCellType. So let's call them CellAttributes. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |         * bytecode/ObjectAllocationProfile.h: | 
 |         * bytecode/ObjectAllocationProfileInlines.h: | 
 |         (JSC::ObjectAllocationProfile::initializeProfile): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::compileMakeRope): | 
 |         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewObject): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSCell): | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): | 
 |         * ftl/FTLAbstractHeapRepository.h: | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocateObject): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize): | 
 |         * heap/AlignedMemoryAllocator.cpp: | 
 |         (JSC::AlignedMemoryAllocator::registerDirectory): | 
 |         (JSC::AlignedMemoryAllocator::registerAllocator): Deleted. | 
 |         * heap/AlignedMemoryAllocator.h: | 
 |         (JSC::AlignedMemoryAllocator::firstDirectory const): | 
 |         (JSC::AlignedMemoryAllocator::firstAllocator const): Deleted. | 
 |         * heap/AllocatorAttributes.cpp: Removed. | 
 |         * heap/AllocatorAttributes.h: Removed. | 
 |         * heap/BlockDirectory.cpp: Copied from Source/JavaScriptCore/heap/MarkedAllocator.cpp. | 
 |         (JSC::BlockDirectory::BlockDirectory): | 
 |         (JSC::BlockDirectory::setSubspace): | 
 |         (JSC::BlockDirectory::isPagedOut): | 
 |         (JSC::BlockDirectory::findEmptyBlockToSteal): | 
 |         (JSC::BlockDirectory::didConsumeFreeList): | 
 |         (JSC::BlockDirectory::tryAllocateWithoutCollecting): | 
 |         (JSC::BlockDirectory::allocateIn): | 
 |         (JSC::BlockDirectory::tryAllocateIn): | 
 |         (JSC::BlockDirectory::doTestCollectionsIfNeeded): | 
 |         (JSC::BlockDirectory::allocateSlowCase): | 
 |         (JSC::BlockDirectory::blockSizeForBytes): | 
 |         (JSC::BlockDirectory::tryAllocateBlock): | 
 |         (JSC::BlockDirectory::addBlock): | 
 |         (JSC::BlockDirectory::removeBlock): | 
 |         (JSC::BlockDirectory::stopAllocating): | 
 |         (JSC::BlockDirectory::prepareForAllocation): | 
 |         (JSC::BlockDirectory::lastChanceToFinalize): | 
 |         (JSC::BlockDirectory::resumeAllocating): | 
 |         (JSC::BlockDirectory::beginMarkingForFullCollection): | 
 |         (JSC::BlockDirectory::endMarking): | 
 |         (JSC::BlockDirectory::snapshotUnsweptForEdenCollection): | 
 |         (JSC::BlockDirectory::snapshotUnsweptForFullCollection): | 
 |         (JSC::BlockDirectory::findBlockToSweep): | 
 |         (JSC::BlockDirectory::sweep): | 
 |         (JSC::BlockDirectory::shrink): | 
 |         (JSC::BlockDirectory::assertNoUnswept): | 
 |         (JSC::BlockDirectory::parallelNotEmptyBlockSource): | 
 |         (JSC::BlockDirectory::dump const): | 
 |         (JSC::BlockDirectory::dumpBits): | 
 |         (JSC::BlockDirectory::markedSpace const): | 
 |         (JSC::MarkedAllocator::MarkedAllocator): Deleted. | 
 |         (JSC::MarkedAllocator::setSubspace): Deleted. | 
 |         (JSC::MarkedAllocator::isPagedOut): Deleted. | 
 |         (JSC::MarkedAllocator::findEmptyBlockToSteal): Deleted. | 
 |         (JSC::MarkedAllocator::didConsumeFreeList): Deleted. | 
 |         (JSC::MarkedAllocator::tryAllocateWithoutCollecting): Deleted. | 
 |         (JSC::MarkedAllocator::allocateIn): Deleted. | 
 |         (JSC::MarkedAllocator::tryAllocateIn): Deleted. | 
 |         (JSC::MarkedAllocator::doTestCollectionsIfNeeded): Deleted. | 
 |         (JSC::MarkedAllocator::allocateSlowCase): Deleted. | 
 |         (JSC::MarkedAllocator::blockSizeForBytes): Deleted. | 
 |         (JSC::MarkedAllocator::tryAllocateBlock): Deleted. | 
 |         (JSC::MarkedAllocator::addBlock): Deleted. | 
 |         (JSC::MarkedAllocator::removeBlock): Deleted. | 
 |         (JSC::MarkedAllocator::stopAllocating): Deleted. | 
 |         (JSC::MarkedAllocator::prepareForAllocation): Deleted. | 
 |         (JSC::MarkedAllocator::lastChanceToFinalize): Deleted. | 
 |         (JSC::MarkedAllocator::resumeAllocating): Deleted. | 
 |         (JSC::MarkedAllocator::beginMarkingForFullCollection): Deleted. | 
 |         (JSC::MarkedAllocator::endMarking): Deleted. | 
 |         (JSC::MarkedAllocator::snapshotUnsweptForEdenCollection): Deleted. | 
 |         (JSC::MarkedAllocator::snapshotUnsweptForFullCollection): Deleted. | 
 |         (JSC::MarkedAllocator::findBlockToSweep): Deleted. | 
 |         (JSC::MarkedAllocator::sweep): Deleted. | 
 |         (JSC::MarkedAllocator::shrink): Deleted. | 
 |         (JSC::MarkedAllocator::assertNoUnswept): Deleted. | 
 |         (JSC::MarkedAllocator::parallelNotEmptyBlockSource): Deleted. | 
 |         (JSC::MarkedAllocator::dump const): Deleted. | 
 |         (JSC::MarkedAllocator::dumpBits): Deleted. | 
 |         (JSC::MarkedAllocator::markedSpace const): Deleted. | 
 |         * heap/BlockDirectory.h: Copied from Source/JavaScriptCore/heap/MarkedAllocator.h. | 
 |         (JSC::BlockDirectory::attributes const): | 
 |         (JSC::BlockDirectory::forEachBitVector): | 
 |         (JSC::BlockDirectory::forEachBitVectorWithName): | 
 |         (JSC::BlockDirectory::nextDirectory const): | 
 |         (JSC::BlockDirectory::nextDirectoryInSubspace const): | 
 |         (JSC::BlockDirectory::nextDirectoryInAlignedMemoryAllocator const): | 
 |         (JSC::BlockDirectory::setNextDirectory): | 
 |         (JSC::BlockDirectory::setNextDirectoryInSubspace): | 
 |         (JSC::BlockDirectory::setNextDirectoryInAlignedMemoryAllocator): | 
 |         (JSC::BlockDirectory::offsetOfFreeList): | 
 |         (JSC::BlockDirectory::offsetOfCellSize): | 
 |         (JSC::MarkedAllocator::cellSize const): Deleted. | 
 |         (JSC::MarkedAllocator::attributes const): Deleted. | 
 |         (JSC::MarkedAllocator::needsDestruction const): Deleted. | 
 |         (JSC::MarkedAllocator::destruction const): Deleted. | 
 |         (JSC::MarkedAllocator::cellKind const): Deleted. | 
 |         (JSC::MarkedAllocator::heap): Deleted. | 
 |         (JSC::MarkedAllocator::bitvectorLock): Deleted. | 
 |         (JSC::MarkedAllocator::forEachBitVector): Deleted. | 
 |         (JSC::MarkedAllocator::forEachBitVectorWithName): Deleted. | 
 |         (JSC::MarkedAllocator::nextAllocator const): Deleted. | 
 |         (JSC::MarkedAllocator::nextAllocatorInSubspace const): Deleted. | 
 |         (JSC::MarkedAllocator::nextAllocatorInAlignedMemoryAllocator const): Deleted. | 
 |         (JSC::MarkedAllocator::setNextAllocator): Deleted. | 
 |         (JSC::MarkedAllocator::setNextAllocatorInSubspace): Deleted. | 
 |         (JSC::MarkedAllocator::setNextAllocatorInAlignedMemoryAllocator): Deleted. | 
 |         (JSC::MarkedAllocator::subspace const): Deleted. | 
 |         (JSC::MarkedAllocator::freeList const): Deleted. | 
 |         (JSC::MarkedAllocator::offsetOfFreeList): Deleted. | 
 |         (JSC::MarkedAllocator::offsetOfCellSize): Deleted. | 
 |         * heap/BlockDirectoryInlines.h: Copied from Source/JavaScriptCore/heap/MarkedAllocatorInlines.h. | 
 |         (JSC::BlockDirectory::isFreeListedCell const): | 
 |         (JSC::BlockDirectory::allocate): | 
 |         (JSC::BlockDirectory::forEachBlock): | 
 |         (JSC::BlockDirectory::forEachNotEmptyBlock): | 
 |         (JSC::MarkedAllocator::isFreeListedCell const): Deleted. | 
 |         (JSC::MarkedAllocator::allocate): Deleted. | 
 |         (JSC::MarkedAllocator::forEachBlock): Deleted. | 
 |         (JSC::MarkedAllocator::forEachNotEmptyBlock): Deleted. | 
 |         * heap/CellAttributes.cpp: Copied from Source/JavaScriptCore/heap/AllocatorAttributes.cpp. | 
 |         (JSC::CellAttributes::dump const): | 
 |         (JSC::AllocatorAttributes::dump const): Deleted. | 
 |         * heap/CellAttributes.h: Copied from Source/JavaScriptCore/heap/AllocatorAttributes.h. | 
 |         (JSC::CellAttributes::CellAttributes): | 
 |         (JSC::AllocatorAttributes::AllocatorAttributes): Deleted. | 
 |         * heap/CompleteSubspace.cpp: | 
 |         (JSC::CompleteSubspace::allocatorFor): | 
 |         (JSC::CompleteSubspace::allocateNonVirtual): | 
 |         (JSC::CompleteSubspace::allocatorForSlow): | 
 |         (JSC::CompleteSubspace::tryAllocateSlow): | 
 |         * heap/CompleteSubspace.h: | 
 |         (JSC::CompleteSubspace::allocatorForSizeStep): | 
 |         (JSC::CompleteSubspace::allocatorForNonVirtual): | 
 |         * heap/GCDeferralContext.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::updateAllocationLimits): | 
 |         * heap/Heap.h: | 
 |         * heap/HeapCell.h: | 
 |         * heap/HeapCellInlines.h: | 
 |         (JSC::HeapCell::cellAttributes const): | 
 |         (JSC::HeapCell::destructionMode const): | 
 |         (JSC::HeapCell::cellKind const): | 
 |         (JSC::HeapCell::allocatorAttributes const): Deleted. | 
 |         * heap/HeapCellType.cpp: | 
 |         (JSC::HeapCellType::HeapCellType): | 
 |         * heap/HeapCellType.h: | 
 |         (JSC::HeapCellType::attributes const): | 
 |         * heap/IncrementalSweeper.cpp: | 
 |         (JSC::IncrementalSweeper::IncrementalSweeper): | 
 |         (JSC::IncrementalSweeper::sweepNextBlock): | 
 |         (JSC::IncrementalSweeper::startSweeping): | 
 |         (JSC::IncrementalSweeper::stopSweeping): | 
 |         * heap/IncrementalSweeper.h: | 
 |         * heap/IsoCellSet.cpp: | 
 |         (JSC::IsoCellSet::IsoCellSet): | 
 |         (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource): | 
 |         (JSC::IsoCellSet::addSlow): | 
 |         (JSC::IsoCellSet::didRemoveBlock): | 
 |         (JSC::IsoCellSet::sweepToFreeList): | 
 |         * heap/IsoCellSetInlines.h: | 
 |         (JSC::IsoCellSet::forEachMarkedCell): | 
 |         (JSC::IsoCellSet::forEachLiveCell): | 
 |         * heap/IsoSubspace.cpp: | 
 |         (JSC::IsoSubspace::IsoSubspace): | 
 |         (JSC::IsoSubspace::allocatorFor): | 
 |         (JSC::IsoSubspace::allocateNonVirtual): | 
 |         * heap/IsoSubspace.h: | 
 |         (JSC::IsoSubspace::allocatorForNonVirtual): | 
 |         * heap/LargeAllocation.h: | 
 |         (JSC::LargeAllocation::attributes const): | 
 |         * heap/MarkedAllocator.cpp: Removed. | 
 |         * heap/MarkedAllocator.h: Removed. | 
 |         * heap/MarkedAllocatorInlines.h: Removed. | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::~Handle): | 
 |         (JSC::MarkedBlock::Handle::setIsFreeListed): | 
 |         (JSC::MarkedBlock::Handle::stopAllocating): | 
 |         (JSC::MarkedBlock::Handle::lastChanceToFinalize): | 
 |         (JSC::MarkedBlock::Handle::resumeAllocating): | 
 |         (JSC::MarkedBlock::aboutToMarkSlow): | 
 |         (JSC::MarkedBlock::Handle::didConsumeFreeList): | 
 |         (JSC::MarkedBlock::noteMarkedSlow): | 
 |         (JSC::MarkedBlock::Handle::removeFromDirectory): | 
 |         (JSC::MarkedBlock::Handle::didAddToDirectory): | 
 |         (JSC::MarkedBlock::Handle::didRemoveFromDirectory): | 
 |         (JSC::MarkedBlock::Handle::dumpState): | 
 |         (JSC::MarkedBlock::Handle::subspace const): | 
 |         (JSC::MarkedBlock::Handle::sweep): | 
 |         (JSC::MarkedBlock::Handle::isFreeListedCell const): | 
 |         (JSC::MarkedBlock::Handle::removeFromAllocator): Deleted. | 
 |         (JSC::MarkedBlock::Handle::didAddToAllocator): Deleted. | 
 |         (JSC::MarkedBlock::Handle::didRemoveFromAllocator): Deleted. | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::Handle::directory const): | 
 |         (JSC::MarkedBlock::Handle::attributes const): | 
 |         (JSC::MarkedBlock::attributes const): | 
 |         (JSC::MarkedBlock::Handle::allocator const): Deleted. | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::Handle::isAllocated): | 
 |         (JSC::MarkedBlock::Handle::isLive): | 
 |         (JSC::MarkedBlock::Handle::specializedSweep): | 
 |         (JSC::MarkedBlock::Handle::isEmpty): | 
 |         * heap/MarkedSpace.cpp: | 
 |         (JSC::MarkedSpace::lastChanceToFinalize): | 
 |         (JSC::MarkedSpace::sweep): | 
 |         (JSC::MarkedSpace::stopAllocating): | 
 |         (JSC::MarkedSpace::resumeAllocating): | 
 |         (JSC::MarkedSpace::isPagedOut): | 
 |         (JSC::MarkedSpace::freeBlock): | 
 |         (JSC::MarkedSpace::shrink): | 
 |         (JSC::MarkedSpace::beginMarking): | 
 |         (JSC::MarkedSpace::endMarking): | 
 |         (JSC::MarkedSpace::snapshotUnswept): | 
 |         (JSC::MarkedSpace::assertNoUnswept): | 
 |         (JSC::MarkedSpace::dumpBits): | 
 |         (JSC::MarkedSpace::addBlockDirectory): | 
 |         (JSC::MarkedSpace::addMarkedAllocator): Deleted. | 
 |         * heap/MarkedSpace.h: | 
 |         (JSC::MarkedSpace::firstDirectory const): | 
 |         (JSC::MarkedSpace::directoryLock): | 
 |         (JSC::MarkedSpace::forEachBlock): | 
 |         (JSC::MarkedSpace::forEachDirectory): | 
 |         (JSC::MarkedSpace::firstAllocator const): Deleted. | 
 |         (JSC::MarkedSpace::allocatorLock): Deleted. | 
 |         (JSC::MarkedSpace::forEachAllocator): Deleted. | 
 |         * heap/MarkedSpaceInlines.h: | 
 |         * heap/Subspace.cpp: | 
 |         (JSC::Subspace::initialize): | 
 |         (JSC::Subspace::prepareForAllocation): | 
 |         (JSC::Subspace::findEmptyBlockToSteal): | 
 |         (JSC::Subspace::parallelDirectorySource): | 
 |         (JSC::Subspace::parallelNotEmptyMarkedBlockSource): | 
 |         (JSC::Subspace::sweep): | 
 |         (JSC::Subspace::parallelAllocatorSource): Deleted. | 
 |         * heap/Subspace.h: | 
 |         (JSC::Subspace::attributes const): | 
 |         (JSC::Subspace::didCreateFirstDirectory): | 
 |         (JSC::Subspace::didCreateFirstAllocator): Deleted. | 
 |         * heap/SubspaceInlines.h: | 
 |         (JSC::Subspace::forEachDirectory): | 
 |         (JSC::Subspace::forEachMarkedBlock): | 
 |         (JSC::Subspace::forEachNotEmptyMarkedBlock): | 
 |         (JSC::Subspace::forEachAllocator): Deleted. | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): | 
 |         (JSC::AssemblyHelpers::emitAllocate): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSCell): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObject): | 
 |         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): | 
 |         * jit/JIT.h: | 
 |         * jit/JITOpcodes.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_new_object): | 
 |         * runtime/JSDestructibleObjectHeapCellType.cpp: | 
 |         (JSC::JSDestructibleObjectHeapCellType::JSDestructibleObjectHeapCellType): | 
 |         * runtime/JSSegmentedVariableObjectHeapCellType.cpp: | 
 |         (JSC::JSSegmentedVariableObjectHeapCellType::JSSegmentedVariableObjectHeapCellType): | 
 |         * runtime/JSStringHeapCellType.cpp: | 
 |         (JSC::JSStringHeapCellType::JSStringHeapCellType): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * wasm/js/JSWebAssemblyCodeBlockHeapCellType.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlockHeapCellType::JSWebAssemblyCodeBlockHeapCellType): | 
 |  | 
 | 2018-01-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         When inserting Unreachable in byte code parser we need to flush all the right things | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181509 | 
 |         <rdar://problem/36423110> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         I added code in r226655 that had its own mechanism for preserving liveness when | 
 |         inserting Unreachable nodes after ForceOSRExit. There are two ways to preserve | 
 |         liveness: PhantomLocal and Flush. Certain values *must* be flushed to the stack. | 
 |         I got some of these values wrong, which was leading to a crash when recovering the | 
 |         callee value from an inlined frame. Instead of making the same mistake and repeating | 
 |         similar code again, this patch refactors this logic to be shared with the other | 
 |         liveness preservation code in the DFG bytecode parser. This is what I should have | 
 |         done in my initial patch. | 
 |  | 
 |         * bytecode/InlineCallFrame.h: | 
 |         (JSC::remapOperand): | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::flushImpl): | 
 |         (JSC::DFG::flushForTerminalImpl): | 
 |         (JSC::DFG::ByteCodeParser::flush): | 
 |         (JSC::DFG::ByteCodeParser::flushForTerminal): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |  | 
 | 2018-01-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         JITMathIC code in the FTL is wrong when code gets duplicated | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181525 | 
 |         <rdar://problem/36351993> | 
 |  | 
 |         Reviewed by Michael Saboff and Keith Miller. | 
 |  | 
 |         B3/Air may duplicate code for various reasons. Patchpoint generators inside | 
 |         FTLLower must be aware that they can be called multiple times because of this. | 
 |         The patchpoint for math ICs was not aware of this, and shared state amongst | 
 |         all invocations of the patchpoint's generator. This patch fixes this bug so | 
 |         that each invocation of the patchpoint's generator gets a unique math IC. | 
 |  | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::addMathIC): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithMul): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMathIC): Deleted. | 
 |         * jit/JITMathIC.h: | 
 |         (JSC::isProfileEmpty): | 
 |  | 
 | 2018-01-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Ensure there are no unsafe uses of MacroAssemblerARM64::dataTempRegister | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181512 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::abortWithReason): | 
 |         (JSC::MacroAssemblerARM64::pushToSaveImmediateWithoutTouchingRegisters): | 
 |         All current uses of dataTempRegister in these functions are safe, but it makes sense to | 
 |         fix them in case they might be used elsewhere. | 
 |  | 
 | 2018-01-04  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         CodeBlocks should be in IsoSubspaces | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180884 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This moves CodeBlocks into IsoSubspaces. Doing so means that we no longer need to have the | 
 |         special CodeBlockSet HashSets of new and old CodeBlocks. We also no longer use | 
 |         WeakReferenceHarvester or UnconditionalFinalizer. Instead: | 
 |          | 
 |         - Code block sweeping is now just eager sweeping. This means that it automatically takes | 
 |           advantage of our unswept set, which roughly corresponds to what CodeBlockSet used to use | 
 |           its eden set for. | 
 |          | 
 |         - Those idea of Executable "weakly visiting" the CodeBlock is replaced by Executable | 
 |           marking a ExecutableToCodeBlockEdge object. That object being marked corresponds to what | 
 |           we used to call CodeBlock "having been weakly visited". This means that CodeBlockSet no | 
 |           longer has to clear the set of weakly visited code blocks. This also means that | 
 |           determining CodeBlock liveness, propagating CodeBlock transitions, and jettisoning | 
 |           CodeBlocks during GC are now the edge's job. The edge is also in an IsoSubspace and it | 
 |           has IsoCellSets to tell us which edges have output constraints (what we used to call | 
 |           CodeBlock's weak reference harvester) and which have unconditional finalizers. | 
 |          | 
 |         - CodeBlock now uses an IsoCellSet to tell if it has an unconditional finalizer. | 
 |          | 
 |         - CodeBlockSet still exists!  It has one unified HashSet of CodeBlocks that we use to | 
 |           handle requests from the sampler, debugger, and other facilities. They may want to ask | 
 |           if some pointer corresponds to a CodeBlock during stages of execution during which the | 
 |           GC is unable to answer isLive() queries. The trickiest is the sampling profiler thread. | 
 |           There is no way that the GC's isLive could tell us of a CodeBlock that had already been | 
 |           allocated has now been full constructed. | 
 |          | 
 |         Rolling this back in because it was rolled out by mistake. There was a flaky crash that was | 
 |         happening before and after this change, but we misread the revision numbers at first and | 
 |         thought that this was the cause. | 
 |          | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         (JSC::CodeBlock::finishCreationCommon): | 
 |         (JSC::CodeBlock::~CodeBlock): | 
 |         (JSC::CodeBlock::visitChildren): | 
 |         (JSC::CodeBlock::propagateTransitions): | 
 |         (JSC::CodeBlock::determineLiveness): | 
 |         (JSC::CodeBlock::finalizeUnconditionally): | 
 |         (JSC::CodeBlock::stronglyVisitStrongReferences): | 
 |         (JSC::CodeBlock::hasInstalledVMTrapBreakpoints const): | 
 |         (JSC::CodeBlock::installVMTrapBreakpoints): | 
 |         (JSC::CodeBlock::dumpMathICStats): | 
 |         (JSC::CodeBlock::visitWeakly): Deleted. | 
 |         (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted. | 
 |         (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted. | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::subspaceFor): | 
 |         (JSC::CodeBlock::ownerEdge const): | 
 |         (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted. | 
 |         * bytecode/EvalCodeBlock.h: | 
 |         (JSC::EvalCodeBlock::create): Deleted. | 
 |         (JSC::EvalCodeBlock::createStructure): Deleted. | 
 |         (JSC::EvalCodeBlock::variable): Deleted. | 
 |         (JSC::EvalCodeBlock::numVariables): Deleted. | 
 |         (JSC::EvalCodeBlock::functionHoistingCandidate): Deleted. | 
 |         (JSC::EvalCodeBlock::numFunctionHoistingCandidates): Deleted. | 
 |         (JSC::EvalCodeBlock::EvalCodeBlock): Deleted. | 
 |         (JSC::EvalCodeBlock::unlinkedEvalCodeBlock const): Deleted. | 
 |         * bytecode/ExecutableToCodeBlockEdge.cpp: Added. | 
 |         (JSC::ExecutableToCodeBlockEdge::createStructure): | 
 |         (JSC::ExecutableToCodeBlockEdge::create): | 
 |         (JSC::ExecutableToCodeBlockEdge::visitChildren): | 
 |         (JSC::ExecutableToCodeBlockEdge::visitOutputConstraints): | 
 |         (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally): | 
 |         (JSC::ExecutableToCodeBlockEdge::activate): | 
 |         (JSC::ExecutableToCodeBlockEdge::deactivate): | 
 |         (JSC::ExecutableToCodeBlockEdge::deactivateAndUnwrap): | 
 |         (JSC::ExecutableToCodeBlockEdge::wrap): | 
 |         (JSC::ExecutableToCodeBlockEdge::wrapAndActivate): | 
 |         (JSC::ExecutableToCodeBlockEdge::ExecutableToCodeBlockEdge): | 
 |         (JSC::ExecutableToCodeBlockEdge::runConstraint): | 
 |         * bytecode/ExecutableToCodeBlockEdge.h: Added. | 
 |         (JSC::ExecutableToCodeBlockEdge::subspaceFor): | 
 |         (JSC::ExecutableToCodeBlockEdge::codeBlock const): | 
 |         (JSC::ExecutableToCodeBlockEdge::unwrap): | 
 |         * bytecode/FunctionCodeBlock.h: | 
 |         (JSC::FunctionCodeBlock::subspaceFor): | 
 |         (JSC::FunctionCodeBlock::createStructure): | 
 |         * bytecode/ModuleProgramCodeBlock.h: | 
 |         (JSC::ModuleProgramCodeBlock::create): Deleted. | 
 |         (JSC::ModuleProgramCodeBlock::createStructure): Deleted. | 
 |         (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted. | 
 |         * bytecode/ProgramCodeBlock.h: | 
 |         (JSC::ProgramCodeBlock::create): Deleted. | 
 |         (JSC::ProgramCodeBlock::createStructure): Deleted. | 
 |         (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted. | 
 |         * debugger/Debugger.cpp: | 
 |         (JSC::Debugger::SetSteppingModeFunctor::operator() const): | 
 |         (JSC::Debugger::ToggleBreakpointFunctor::operator() const): | 
 |         (JSC::Debugger::ClearCodeBlockDebuggerRequestsFunctor::operator() const): | 
 |         (JSC::Debugger::ClearDebuggerRequestsFunctor::operator() const): | 
 |         * heap/CodeBlockSet.cpp: | 
 |         (JSC::CodeBlockSet::contains): | 
 |         (JSC::CodeBlockSet::dump const): | 
 |         (JSC::CodeBlockSet::add): | 
 |         (JSC::CodeBlockSet::remove): | 
 |         (JSC::CodeBlockSet::promoteYoungCodeBlocks): Deleted. | 
 |         (JSC::CodeBlockSet::clearMarksForFullCollection): Deleted. | 
 |         (JSC::CodeBlockSet::lastChanceToFinalize): Deleted. | 
 |         (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced): Deleted. | 
 |         * heap/CodeBlockSet.h: | 
 |         * heap/CodeBlockSetInlines.h: | 
 |         (JSC::CodeBlockSet::iterate): | 
 |         (JSC::CodeBlockSet::iterateViaSubspaces): | 
 |         * heap/ConservativeRoots.cpp: | 
 |         (JSC::ConservativeRoots::genericAddPointer): | 
 |         (JSC::DummyMarkHook::markKnownJSCell): | 
 |         (JSC::CompositeMarkHook::mark): | 
 |         (JSC::CompositeMarkHook::markKnownJSCell): | 
 |         * heap/ConservativeRoots.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::lastChanceToFinalize): | 
 |         (JSC::Heap::finalizeMarkedUnconditionalFinalizers): | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         (JSC::Heap::beginMarking): | 
 |         (JSC::Heap::deleteUnmarkedCompiledCode): | 
 |         (JSC::Heap::sweepInFinalize): | 
 |         (JSC::Heap::forEachCodeBlockImpl): | 
 |         (JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl): | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         (JSC::Heap::finalizeUnconditionalFinalizersInIsoSubspace): Deleted. | 
 |         * heap/Heap.h: | 
 |         * heap/HeapCell.h: | 
 |         * heap/HeapCellInlines.h: | 
 |         (JSC::HeapCell::subspace const): | 
 |         * heap/HeapInlines.h: | 
 |         (JSC::Heap::forEachCodeBlock): | 
 |         (JSC::Heap::forEachCodeBlockIgnoringJITPlans): | 
 |         * heap/HeapUtil.h: | 
 |         (JSC::HeapUtil::findGCObjectPointersForMarking): | 
 |         * heap/IsoCellSet.cpp: | 
 |         (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource): | 
 |         * heap/IsoCellSet.h: | 
 |         * heap/IsoCellSetInlines.h: | 
 |         (JSC::IsoCellSet::forEachMarkedCellInParallel): | 
 |         (JSC::IsoCellSet::forEachLiveCell): | 
 |         * heap/LargeAllocation.h: | 
 |         (JSC::LargeAllocation::subspace const): | 
 |         * heap/MarkStackMergingConstraint.cpp: | 
 |         (JSC::MarkStackMergingConstraint::executeImpl): | 
 |         * heap/MarkStackMergingConstraint.h: | 
 |         * heap/MarkedAllocator.cpp: | 
 |         (JSC::MarkedAllocator::parallelNotEmptyBlockSource): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToAllocator): | 
 |         (JSC::MarkedBlock::Handle::didRemoveFromAllocator): | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::subspace const): | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::Handle::forEachLiveCell): | 
 |         * heap/MarkedSpaceInlines.h: | 
 |         (JSC::MarkedSpace::forEachLiveCell): | 
 |         * heap/MarkingConstraint.cpp: | 
 |         (JSC::MarkingConstraint::execute): | 
 |         (JSC::MarkingConstraint::doParallelWork): | 
 |         (JSC::MarkingConstraint::finishParallelWork): Deleted. | 
 |         (JSC::MarkingConstraint::doParallelWorkImpl): Deleted. | 
 |         (JSC::MarkingConstraint::finishParallelWorkImpl): Deleted. | 
 |         * heap/MarkingConstraint.h: | 
 |         * heap/MarkingConstraintSet.cpp: | 
 |         (JSC::MarkingConstraintSet::add): | 
 |         * heap/MarkingConstraintSet.h: | 
 |         (JSC::MarkingConstraintSet::add): | 
 |         * heap/MarkingConstraintSolver.cpp: | 
 |         (JSC::MarkingConstraintSolver::execute): | 
 |         (JSC::MarkingConstraintSolver::addParallelTask): | 
 |         (JSC::MarkingConstraintSolver::runExecutionThread): | 
 |         (JSC::MarkingConstraintSolver::didExecute): Deleted. | 
 |         * heap/MarkingConstraintSolver.h: | 
 |         (JSC::MarkingConstraintSolver::TaskWithConstraint::TaskWithConstraint): | 
 |         (JSC::MarkingConstraintSolver::TaskWithConstraint::operator== const): | 
 |         * heap/SimpleMarkingConstraint.cpp: | 
 |         (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): | 
 |         (JSC::SimpleMarkingConstraint::executeImpl): | 
 |         * heap/SimpleMarkingConstraint.h: | 
 |         (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::addParallelConstraintTask): | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/Subspace.cpp: | 
 |         (JSC::Subspace::sweep): | 
 |         * heap/Subspace.h: | 
 |         * heap/SubspaceInlines.h: | 
 |         (JSC::Subspace::forEachLiveCell): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/EvalExecutable.cpp: | 
 |         (JSC::EvalExecutable::visitChildren): | 
 |         * runtime/EvalExecutable.h: | 
 |         (JSC::EvalExecutable::codeBlock): | 
 |         * runtime/FunctionExecutable.cpp: | 
 |         (JSC::FunctionExecutable::baselineCodeBlockFor): | 
 |         (JSC::FunctionExecutable::visitChildren): | 
 |         * runtime/FunctionExecutable.h: | 
 |         * runtime/JSType.h: | 
 |         * runtime/ModuleProgramExecutable.cpp: | 
 |         (JSC::ModuleProgramExecutable::visitChildren): | 
 |         * runtime/ModuleProgramExecutable.h: | 
 |         * runtime/ProgramExecutable.cpp: | 
 |         (JSC::ProgramExecutable::visitChildren): | 
 |         * runtime/ProgramExecutable.h: | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::installCode): | 
 |         (JSC::ScriptExecutable::newReplacementCodeBlockFor): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): | 
 |         (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): | 
 |         (JSC::VM::forEachCodeBlockSpace): | 
 |         * runtime/VMTraps.cpp: | 
 |         (JSC::VMTraps::handleTraps): | 
 |         * tools/VMInspector.cpp: | 
 |         (JSC::VMInspector::codeBlockForMachinePC): | 
 |         (JSC::VMInspector::isValidCodeBlock): | 
 |  | 
 | 2018-01-11  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Add a DOM gadget for Spectre testing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181351 | 
 |  | 
 |         Reviewed by Ryosuke Niwa. | 
 |  | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-11  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG][FTL] regExpMatchFast should be handled | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180988 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         RegExp.prototype.@@match has a fast path, @regExpMatchFast. This patch annotates this function | 
 |         with RegExpMatchFastIntrinsic, and introduces RegExpMatch DFG node. This paves the way to | 
 |         make NewRegexp PhantomNewRegexp if it is not used except for setting/getting its lastIndex property. | 
 |  | 
 |         To improve RegExp.prototype.@@match's performance more, we make this builtin function small by moving | 
 |         slow path part to `@matchSlow()` private function. | 
 |  | 
 |         It improves SixSpeed regex-u.{es5,es6} largely since they stress String.prototype.match, which calls | 
 |         this regExpMatchFast function. | 
 |  | 
 |                                  baseline                  patched | 
 |  | 
 |         regex-u.es5          55.3835+-6.3002     ^     36.2431+-2.0797        ^ definitely 1.5281x faster | 
 |         regex-u.es6         110.4624+-6.2896     ^     94.1012+-7.2433        ^ definitely 1.1739x faster | 
 |  | 
 |         * builtins/RegExpPrototype.js: | 
 |         (globalPrivate.matchSlow): | 
 |         (overriddenName.string_appeared_here.match): | 
 |         * 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): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasHeapPrediction): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSafeToExecute.h: | 
 |         (JSC::DFG::safeToExecute): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileRegExpMatch): | 
 |         * 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::compileRegExpMatch): | 
 |         * runtime/Intrinsic.cpp: | 
 |         (JSC::intrinsicName): | 
 |         * runtime/Intrinsic.h: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/RegExpPrototype.cpp: | 
 |         (JSC::regExpProtoFuncMatchFast): | 
 |  | 
 | 2018-01-11  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Our for-in caching is wrong when we add indexed properties on things in the prototype chain | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181508 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Our for-in caching would cache structure chains that had prototypes with | 
 |         indexed properties. Clearly this is wrong. This caching breaks when a prototype | 
 |         adds new indexed properties. We would continue to enumerate the old cached | 
 |         state of properties, and not include the new indexed properties. | 
 |          | 
 |         The old code used to prevent caching only if the base structure had | 
 |         indexed properties. This patch extends it to prevent caching if the | 
 |         base, or any structure in the prototype chain, has indexed properties. | 
 |  | 
 |         * runtime/Structure.cpp: | 
 |         (JSC::Structure::canCachePropertyNameEnumerator const): | 
 |  | 
 | 2018-01-10  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Poison small JSObject derivatives which only contain pointers | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181483 | 
 |         <rdar://problem/36407127> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         I wrote a script that finds interesting things to poison or | 
 |         generally harden. These stood out because they derive from | 
 |         JSObject and only contain a few pointer or pointer-like fields, | 
 |         and could therefore just be poisoned. This also requires some | 
 |         template "improvements" to our poisoning machinery. Worth noting | 
 |         is that I'm making PoisonedUniquePtr move-assignable and | 
 |         move-constructible from unique_ptr, which makes it a better | 
 |         drop-in replacement because we don't need to use | 
 |         makePoisonedUniquePtr. This means function-locals can be | 
 |         unique_ptr and get the nice RAII pattern, and once the function is | 
 |         done you can just move to the class' PoisonedUniquePtr without | 
 |         worrying. | 
 |  | 
 |         * API/JSAPIWrapperObject.h: | 
 |         (JSC::JSAPIWrapperObject::wrappedObject): | 
 |         * API/JSAPIWrapperObject.mm: | 
 |         (JSC::JSAPIWrapperObject::JSAPIWrapperObject): | 
 |         * API/JSCallbackObject.h: | 
 |         * runtime/ArrayPrototype.h: | 
 |         * runtime/DateInstance.h: | 
 |         * runtime/JSArrayBuffer.cpp: | 
 |         (JSC::JSArrayBuffer::finishCreation): | 
 |         (JSC::JSArrayBuffer::isShared const): | 
 |         (JSC::JSArrayBuffer::sharingMode const): | 
 |         * runtime/JSArrayBuffer.h: | 
 |         * runtime/JSCPoison.h: | 
 |  | 
 | 2018-01-10  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r226667 and r226673. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181488 | 
 |  | 
 |         This caused a flaky crash. (Requested by mlewis13 on #webkit). | 
 |  | 
 |         Reverted changesets: | 
 |  | 
 |         "CodeBlocks should be in IsoSubspaces" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180884 | 
 |         https://trac.webkit.org/changeset/226667 | 
 |  | 
 |         "REGRESSION (r226667): CodeBlocks should be in IsoSubspaces" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180884 | 
 |         https://trac.webkit.org/changeset/226673 | 
 |  | 
 | 2018-01-09  David Kilzer  <ddkilzer@apple.com> | 
 |  | 
 |         REGRESSION (r226667): CodeBlocks should be in IsoSubspaces | 
 |         <https://bugs.webkit.org/show_bug.cgi?id=180884> | 
 |  | 
 |         Fixes the following build error: | 
 |  | 
 |             heap/Heap.cpp:2708:10: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture] | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::addCoreConstraints): Remove 'this' from lambda to | 
 |         fix the build. | 
 |  | 
 | 2018-01-09  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         and32 with an Address source on ARM64 did not invalidate dataTempRegister | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181467 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::and32): | 
 |  | 
 | 2018-01-04  Filip Pizlo  <fpizlo@apple.com> | 
 |  | 
 |         CodeBlocks should be in IsoSubspaces | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180884 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |          | 
 |         This moves CodeBlocks into IsoSubspaces. Doing so means that we no longer need to have the | 
 |         special CodeBlockSet HashSets of new and old CodeBlocks. We also no longer use | 
 |         WeakReferenceHarvester or UnconditionalFinalizer. Instead: | 
 |          | 
 |         - Code block sweeping is now just eager sweeping. This means that it automatically takes | 
 |           advantage of our unswept set, which roughly corresponds to what CodeBlockSet used to use | 
 |           its eden set for. | 
 |          | 
 |         - Those idea of Executable "weakly visiting" the CodeBlock is replaced by Executable | 
 |           marking a ExecutableToCodeBlockEdge object. That object being marked corresponds to what | 
 |           we used to call CodeBlock "having been weakly visited". This means that CodeBlockSet no | 
 |           longer has to clear the set of weakly visited code blocks. This also means that | 
 |           determining CodeBlock liveness, propagating CodeBlock transitions, and jettisoning | 
 |           CodeBlocks during GC are now the edge's job. The edge is also in an IsoSubspace and it | 
 |           has IsoCellSets to tell us which edges have output constraints (what we used to call | 
 |           CodeBlock's weak reference harvester) and which have unconditional finalizers. | 
 |          | 
 |         - CodeBlock now uses an IsoCellSet to tell if it has an unconditional finalizer. | 
 |          | 
 |         - CodeBlockSet still exists!  It has one unified HashSet of CodeBlocks that we use to | 
 |           handle requests from the sampler, debugger, and other facilities. They may want to ask | 
 |           if some pointer corresponds to a CodeBlock during stages of execution during which the | 
 |           GC is unable to answer isLive() queries. The trickiest is the sampling profiler thread. | 
 |           There is no way that the GC's isLive could tell us of a CodeBlock that had already been | 
 |           allocated has now been full constructed. | 
 |          | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         (JSC::CodeBlock::finishCreationCommon): | 
 |         (JSC::CodeBlock::~CodeBlock): | 
 |         (JSC::CodeBlock::visitChildren): | 
 |         (JSC::CodeBlock::propagateTransitions): | 
 |         (JSC::CodeBlock::determineLiveness): | 
 |         (JSC::CodeBlock::finalizeUnconditionally): | 
 |         (JSC::CodeBlock::stronglyVisitStrongReferences): | 
 |         (JSC::CodeBlock::hasInstalledVMTrapBreakpoints const): | 
 |         (JSC::CodeBlock::installVMTrapBreakpoints): | 
 |         (JSC::CodeBlock::dumpMathICStats): | 
 |         (JSC::CodeBlock::visitWeakly): Deleted. | 
 |         (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted. | 
 |         (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted. | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::subspaceFor): | 
 |         (JSC::CodeBlock::ownerEdge const): | 
 |         (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted. | 
 |         * bytecode/EvalCodeBlock.h: | 
 |         (JSC::EvalCodeBlock::create): Deleted. | 
 |         (JSC::EvalCodeBlock::createStructure): Deleted. | 
 |         (JSC::EvalCodeBlock::variable): Deleted. | 
 |         (JSC::EvalCodeBlock::numVariables): Deleted. | 
 |         (JSC::EvalCodeBlock::functionHoistingCandidate): Deleted. | 
 |         (JSC::EvalCodeBlock::numFunctionHoistingCandidates): Deleted. | 
 |         (JSC::EvalCodeBlock::EvalCodeBlock): Deleted. | 
 |         (JSC::EvalCodeBlock::unlinkedEvalCodeBlock const): Deleted. | 
 |         * bytecode/ExecutableToCodeBlockEdge.cpp: Added. | 
 |         (JSC::ExecutableToCodeBlockEdge::createStructure): | 
 |         (JSC::ExecutableToCodeBlockEdge::create): | 
 |         (JSC::ExecutableToCodeBlockEdge::visitChildren): | 
 |         (JSC::ExecutableToCodeBlockEdge::visitOutputConstraints): | 
 |         (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally): | 
 |         (JSC::ExecutableToCodeBlockEdge::activate): | 
 |         (JSC::ExecutableToCodeBlockEdge::deactivate): | 
 |         (JSC::ExecutableToCodeBlockEdge::deactivateAndUnwrap): | 
 |         (JSC::ExecutableToCodeBlockEdge::wrap): | 
 |         (JSC::ExecutableToCodeBlockEdge::wrapAndActivate): | 
 |         (JSC::ExecutableToCodeBlockEdge::ExecutableToCodeBlockEdge): | 
 |         (JSC::ExecutableToCodeBlockEdge::runConstraint): | 
 |         * bytecode/ExecutableToCodeBlockEdge.h: Added. | 
 |         (JSC::ExecutableToCodeBlockEdge::subspaceFor): | 
 |         (JSC::ExecutableToCodeBlockEdge::codeBlock const): | 
 |         (JSC::ExecutableToCodeBlockEdge::unwrap): | 
 |         * bytecode/FunctionCodeBlock.h: | 
 |         (JSC::FunctionCodeBlock::subspaceFor): | 
 |         (JSC::FunctionCodeBlock::createStructure): | 
 |         * bytecode/ModuleProgramCodeBlock.h: | 
 |         (JSC::ModuleProgramCodeBlock::create): Deleted. | 
 |         (JSC::ModuleProgramCodeBlock::createStructure): Deleted. | 
 |         (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted. | 
 |         * bytecode/ProgramCodeBlock.h: | 
 |         (JSC::ProgramCodeBlock::create): Deleted. | 
 |         (JSC::ProgramCodeBlock::createStructure): Deleted. | 
 |         (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted. | 
 |         * debugger/Debugger.cpp: | 
 |         (JSC::Debugger::SetSteppingModeFunctor::operator() const): | 
 |         (JSC::Debugger::ToggleBreakpointFunctor::operator() const): | 
 |         (JSC::Debugger::ClearCodeBlockDebuggerRequestsFunctor::operator() const): | 
 |         (JSC::Debugger::ClearDebuggerRequestsFunctor::operator() const): | 
 |         * heap/CodeBlockSet.cpp: | 
 |         (JSC::CodeBlockSet::contains): | 
 |         (JSC::CodeBlockSet::dump const): | 
 |         (JSC::CodeBlockSet::add): | 
 |         (JSC::CodeBlockSet::remove): | 
 |         (JSC::CodeBlockSet::promoteYoungCodeBlocks): Deleted. | 
 |         (JSC::CodeBlockSet::clearMarksForFullCollection): Deleted. | 
 |         (JSC::CodeBlockSet::lastChanceToFinalize): Deleted. | 
 |         (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced): Deleted. | 
 |         * heap/CodeBlockSet.h: | 
 |         * heap/CodeBlockSetInlines.h: | 
 |         (JSC::CodeBlockSet::iterate): | 
 |         (JSC::CodeBlockSet::iterateViaSubspaces): | 
 |         * heap/ConservativeRoots.cpp: | 
 |         (JSC::ConservativeRoots::genericAddPointer): | 
 |         (JSC::DummyMarkHook::markKnownJSCell): | 
 |         (JSC::CompositeMarkHook::mark): | 
 |         (JSC::CompositeMarkHook::markKnownJSCell): | 
 |         * heap/ConservativeRoots.h: | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::lastChanceToFinalize): | 
 |         (JSC::Heap::finalizeMarkedUnconditionalFinalizers): | 
 |         (JSC::Heap::finalizeUnconditionalFinalizers): | 
 |         (JSC::Heap::beginMarking): | 
 |         (JSC::Heap::deleteUnmarkedCompiledCode): | 
 |         (JSC::Heap::sweepInFinalize): | 
 |         (JSC::Heap::forEachCodeBlockImpl): | 
 |         (JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl): | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         (JSC::Heap::finalizeUnconditionalFinalizersInIsoSubspace): Deleted. | 
 |         * heap/Heap.h: | 
 |         * heap/HeapCell.h: | 
 |         * heap/HeapCellInlines.h: | 
 |         (JSC::HeapCell::subspace const): | 
 |         * heap/HeapInlines.h: | 
 |         (JSC::Heap::forEachCodeBlock): | 
 |         (JSC::Heap::forEachCodeBlockIgnoringJITPlans): | 
 |         * heap/HeapUtil.h: | 
 |         (JSC::HeapUtil::findGCObjectPointersForMarking): | 
 |         * heap/IsoCellSet.cpp: | 
 |         (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource): | 
 |         * heap/IsoCellSet.h: | 
 |         * heap/IsoCellSetInlines.h: | 
 |         (JSC::IsoCellSet::forEachMarkedCellInParallel): | 
 |         (JSC::IsoCellSet::forEachLiveCell): | 
 |         * heap/LargeAllocation.h: | 
 |         (JSC::LargeAllocation::subspace const): | 
 |         * heap/MarkStackMergingConstraint.cpp: | 
 |         (JSC::MarkStackMergingConstraint::executeImpl): | 
 |         * heap/MarkStackMergingConstraint.h: | 
 |         * heap/MarkedAllocator.cpp: | 
 |         (JSC::MarkedAllocator::parallelNotEmptyBlockSource): | 
 |         * heap/MarkedBlock.cpp: | 
 |         (JSC::MarkedBlock::Handle::didAddToAllocator): | 
 |         (JSC::MarkedBlock::Handle::didRemoveFromAllocator): | 
 |         * heap/MarkedBlock.h: | 
 |         (JSC::MarkedBlock::subspace const): | 
 |         * heap/MarkedBlockInlines.h: | 
 |         (JSC::MarkedBlock::Handle::forEachLiveCell): | 
 |         * heap/MarkedSpaceInlines.h: | 
 |         (JSC::MarkedSpace::forEachLiveCell): | 
 |         * heap/MarkingConstraint.cpp: | 
 |         (JSC::MarkingConstraint::execute): | 
 |         (JSC::MarkingConstraint::doParallelWork): | 
 |         (JSC::MarkingConstraint::finishParallelWork): Deleted. | 
 |         (JSC::MarkingConstraint::doParallelWorkImpl): Deleted. | 
 |         (JSC::MarkingConstraint::finishParallelWorkImpl): Deleted. | 
 |         * heap/MarkingConstraint.h: | 
 |         * heap/MarkingConstraintSet.cpp: | 
 |         (JSC::MarkingConstraintSet::add): | 
 |         * heap/MarkingConstraintSet.h: | 
 |         (JSC::MarkingConstraintSet::add): | 
 |         * heap/MarkingConstraintSolver.cpp: | 
 |         (JSC::MarkingConstraintSolver::execute): | 
 |         (JSC::MarkingConstraintSolver::addParallelTask): | 
 |         (JSC::MarkingConstraintSolver::runExecutionThread): | 
 |         (JSC::MarkingConstraintSolver::didExecute): Deleted. | 
 |         * heap/MarkingConstraintSolver.h: | 
 |         (JSC::MarkingConstraintSolver::TaskWithConstraint::TaskWithConstraint): | 
 |         (JSC::MarkingConstraintSolver::TaskWithConstraint::operator== const): | 
 |         * heap/SimpleMarkingConstraint.cpp: | 
 |         (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): | 
 |         (JSC::SimpleMarkingConstraint::executeImpl): | 
 |         * heap/SimpleMarkingConstraint.h: | 
 |         (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): | 
 |         * heap/SlotVisitor.cpp: | 
 |         (JSC::SlotVisitor::addParallelConstraintTask): | 
 |         * heap/SlotVisitor.h: | 
 |         * heap/Subspace.cpp: | 
 |         (JSC::Subspace::sweep): | 
 |         * heap/Subspace.h: | 
 |         * heap/SubspaceInlines.h: | 
 |         (JSC::Subspace::forEachLiveCell): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * runtime/EvalExecutable.cpp: | 
 |         (JSC::EvalExecutable::visitChildren): | 
 |         * runtime/EvalExecutable.h: | 
 |         (JSC::EvalExecutable::codeBlock): | 
 |         * runtime/FunctionExecutable.cpp: | 
 |         (JSC::FunctionExecutable::baselineCodeBlockFor): | 
 |         (JSC::FunctionExecutable::visitChildren): | 
 |         * runtime/FunctionExecutable.h: | 
 |         * runtime/JSType.h: | 
 |         * runtime/ModuleProgramExecutable.cpp: | 
 |         (JSC::ModuleProgramExecutable::visitChildren): | 
 |         * runtime/ModuleProgramExecutable.h: | 
 |         * runtime/ProgramExecutable.cpp: | 
 |         (JSC::ProgramExecutable::visitChildren): | 
 |         * runtime/ProgramExecutable.h: | 
 |         * runtime/ScriptExecutable.cpp: | 
 |         (JSC::ScriptExecutable::installCode): | 
 |         (JSC::ScriptExecutable::newReplacementCodeBlockFor): | 
 |         * runtime/VM.cpp: | 
 |         (JSC::VM::VM): | 
 |         * runtime/VM.h: | 
 |         (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): | 
 |         (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): | 
 |         (JSC::VM::forEachCodeBlockSpace): | 
 |         * runtime/VMTraps.cpp: | 
 |         (JSC::VMTraps::handleTraps): | 
 |         * tools/VMInspector.cpp: | 
 |         (JSC::VMInspector::codeBlockForMachinePC): | 
 |         (JSC::VMInspector::isValidCodeBlock): | 
 |  | 
 | 2018-01-09  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Unreviewed, rolling out r226600 and r226603 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181351 | 
 |  | 
 |         Add a DOM gadget for Spectre testing | 
 |  | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-09  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Reduce graph size by replacing terminal nodes in blocks that have a ForceOSRExit with Unreachable | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181409 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         When I was looking at profiler data for Speedometer, I noticed that one of | 
 |         the hottest functions in Speedometer is around 1100 bytecode operations long. | 
 |         Only about 100 of those bytecode ops ever execute. However, we ended up | 
 |         spending a lot of time compiling basic blocks that never executed. We often | 
 |         plant ForceOSRExit nodes when we parse bytecodes that have a null value profile. | 
 |         This is the case when such a node never executes. | 
 |          | 
 |         This patch makes it so that anytime a block has a ForceOSRExit, we replace its | 
 |         terminal node with an Unreachable node (and remove all nodes after the | 
 |         ForceOSRExit). This will cut down on graph size when such a block dominates | 
 |         other blocks in the CFG. This allows us to get rid of huge chunks of the CFG | 
 |         in certain programs. When doing this transformation, we also insert | 
 |         Flushes/PhantomLocals to ensure we can recover values that are bytecode | 
 |         live-in to the ForceOSRExit. | 
 |          | 
 |         Using ForceOSRExit as the signal for this is a bit of a hack. It definitely | 
 |         does not get rid of all the CFG that it could. If we decide it's worth | 
 |         it, we could use additional inputs into this mechanism. For example, we could | 
 |         profile if a basic block ever executes inside the LLInt/Baseline, and | 
 |         remove parts of the CFG based on that. | 
 |          | 
 |         When running Speedometer with the concurrent JIT turned off, this patch | 
 |         improves DFG/FTL compile times by around 5%. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::addToGraph): | 
 |         (JSC::DFG::ByteCodeParser::parse): | 
 |  | 
 | 2018-01-09  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         ASSERTION FAILED: pair.second->m_type & PropertyNode::Getter | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181388 | 
 |         <rdar://problem/36349351> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         When there are duplicate setters or getters, we may end up overwriting a getter | 
 |         with a setter, or vice versa.  This patch adds tracking for getters/setters that | 
 |         have been overwritten with duplicates and ignore them. | 
 |  | 
 |         * bytecompiler/NodesCodegen.cpp: | 
 |         (JSC::PropertyListNode::emitBytecode): | 
 |         * parser/NodeConstructors.h: | 
 |         (JSC::PropertyNode::PropertyNode): | 
 |         * parser/Nodes.h: | 
 |         (JSC::PropertyNode::isOverriddenByDuplicate const): | 
 |         (JSC::PropertyNode::setIsOverriddenByDuplicate): | 
 |  | 
 | 2018-01-08  Zan Dobersek  <zdobersek@igalia.com> | 
 |  | 
 |         REGRESSION(r225913): about 30 JSC test failures on ARMv7 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181162 | 
 |         <rdar://problem/36261349> | 
 |  | 
 |         Unreviewed follow-up to r226298. Enable the fast case in | 
 |         DFG::SpeculativeJIT::compileArraySlice() for any 64-bit platform, | 
 |         assuming in good faith that enough GP registers are available on any | 
 |         such configuration. The accompanying comment is adjusted to describe | 
 |         this assumption. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileArraySlice): | 
 |  | 
 | 2018-01-08  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         WebAssembly: mask indexed accesses to Table | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181412 | 
 |         <rdar://problem/36363236> | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         WebAssembly Table indexed accesses are user-controlled and | 
 |         bounds-checked. Force allocations of Table data to be a | 
 |         power-of-two, and explicitly mask accesses after bounds-check | 
 |         branches. | 
 |  | 
 |         Rename misleading usage of "size" when "length" of a Table was | 
 |         intended. | 
 |  | 
 |         Rename the Spectre option from "disable" to "enable". | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::SpeculativeJIT): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::JIT): | 
 |         * runtime/Options.h: | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmTable.cpp: | 
 |         (JSC::Wasm::Table::allocatedLength): | 
 |         (JSC::Wasm::Table::setLength): | 
 |         (JSC::Wasm::Table::create): | 
 |         (JSC::Wasm::Table::Table): | 
 |         (JSC::Wasm::Table::grow): | 
 |         (JSC::Wasm::Table::clearFunction): | 
 |         (JSC::Wasm::Table::setFunction): | 
 |         * wasm/WasmTable.h: | 
 |         (JSC::Wasm::Table::length const): | 
 |         (JSC::Wasm::Table::offsetOfLength): | 
 |         (JSC::Wasm::Table::offsetOfMask): | 
 |         (JSC::Wasm::Table::mask const): | 
 |         (JSC::Wasm::Table::isValidLength): | 
 |         * wasm/js/JSWebAssemblyInstance.cpp: | 
 |         (JSC::JSWebAssemblyInstance::create): | 
 |         * wasm/js/JSWebAssemblyTable.cpp: | 
 |         (JSC::JSWebAssemblyTable::JSWebAssemblyTable): | 
 |         (JSC::JSWebAssemblyTable::visitChildren): | 
 |         (JSC::JSWebAssemblyTable::grow): | 
 |         (JSC::JSWebAssemblyTable::getFunction): | 
 |         (JSC::JSWebAssemblyTable::clearFunction): | 
 |         (JSC::JSWebAssemblyTable::setFunction): | 
 |         * wasm/js/JSWebAssemblyTable.h: | 
 |         (JSC::JSWebAssemblyTable::isValidLength): | 
 |         (JSC::JSWebAssemblyTable::length const): | 
 |         (JSC::JSWebAssemblyTable::allocatedLength const): | 
 |         * wasm/js/WebAssemblyModuleRecord.cpp: | 
 |         (JSC::WebAssemblyModuleRecord::evaluate): | 
 |         * wasm/js/WebAssemblyTablePrototype.cpp: | 
 |         (JSC::webAssemblyTableProtoFuncLength): | 
 |         (JSC::webAssemblyTableProtoFuncGrow): | 
 |         (JSC::webAssemblyTableProtoFuncGet): | 
 |         (JSC::webAssemblyTableProtoFuncSet): | 
 |  | 
 | 2018-01-08  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Add a DOM gadget for Spectre testing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181351 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         Added a new JSC::Option named enableSpectreGadgets to enable any gadgets added to test | 
 |         Spectre mitigations. | 
 |  | 
 |         * runtime/Options.h: | 
 |  | 
 | 2018-01-08  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Rename CodeBlock::m_vm to CodeBlock::m_poisonedVM. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181403 | 
 |         <rdar://problem/36359789> | 
 |  | 
 |         Rubber-stamped by JF Bastien. | 
 |  | 
 |         * 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/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |  | 
 | 2018-01-07  Mark Lam  <mark.lam@apple.com> | 
 |  | 
 |         Apply poisoning to more pointers in JSC. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181096 | 
 |         <rdar://problem/36182970> | 
 |  | 
 |         Reviewed by JF Bastien. | 
 |  | 
 |         * assembler/MacroAssembler.h: | 
 |         (JSC::MacroAssembler::xorPtr): | 
 |         * assembler/MacroAssemblerARM64.h: | 
 |         (JSC::MacroAssemblerARM64::xor64): | 
 |         * assembler/MacroAssemblerX86_64.h: | 
 |         (JSC::MacroAssemblerX86_64::xor64): | 
 |         - Add xorPtr implementation. | 
 |  | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::inferredName const): | 
 |         (JSC::CodeBlock::CodeBlock): | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         (JSC::CodeBlock::~CodeBlock): | 
 |         (JSC::CodeBlock::setConstantRegisters): | 
 |         (JSC::CodeBlock::visitWeakly): | 
 |         (JSC::CodeBlock::visitChildren): | 
 |         (JSC::CodeBlock::propagateTransitions): | 
 |         (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): | 
 |         (JSC::CodeBlock::finalizeLLIntInlineCaches): | 
 |         (JSC::CodeBlock::finalizeBaselineJITInlineCaches): | 
 |         (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): | 
 |         (JSC::CodeBlock::jettison): | 
 |         (JSC::CodeBlock::predictedMachineCodeSize): | 
 |         (JSC::CodeBlock::findPC): | 
 |         * bytecode/CodeBlock.h: | 
 |         (JSC::CodeBlock::UnconditionalFinalizer::UnconditionalFinalizer): | 
 |         (JSC::CodeBlock::WeakReferenceHarvester::WeakReferenceHarvester): | 
 |         (JSC::CodeBlock::stubInfoBegin): | 
 |         (JSC::CodeBlock::stubInfoEnd): | 
 |         (JSC::CodeBlock::callLinkInfosBegin): | 
 |         (JSC::CodeBlock::callLinkInfosEnd): | 
 |         (JSC::CodeBlock::instructions): | 
 |         (JSC::CodeBlock::instructions const): | 
 |         (JSC::CodeBlock::vm const): | 
 |         * dfg/DFGOSRExitCompilerCommon.h: | 
 |         (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk): | 
 |         * jit/JIT.h: | 
 |         * llint/LLIntOfflineAsmConfig.h: | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter64.asm: | 
 |         * parser/UnlinkedSourceCode.h: | 
 |         * runtime/JSCPoison.h: | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         * runtime/JSGlobalObject.h: | 
 |         * runtime/JSScriptFetchParameters.h: | 
 |         * runtime/JSScriptFetcher.h: | 
 |         * runtime/StructureTransitionTable.h: | 
 |         * wasm/js/JSWebAssemblyCodeBlock.cpp: | 
 |         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock): | 
 |         (JSC::JSWebAssemblyCodeBlock::visitChildren): | 
 |         (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |  | 
 | 2018-01-06  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         Object.getOwnPropertyNames includes "arguments" and "caller" for bound functions | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181321 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         According to ECMA262 16.2[1], functions created using the bind method must not have | 
 |         "caller" and "arguments" own properties. | 
 |  | 
 |         [1]: https://tc39.github.io/ecma262/#sec-forbidden-extensions | 
 |  | 
 |         * runtime/JSBoundFunction.cpp: | 
 |         (JSC::JSBoundFunction::finishCreation): | 
 |  | 
 | 2018-01-05  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         WebAssembly: poison JS object's secrets | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181339 | 
 |         <rdar://problem/36325001> | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Separating WebAssembly's JS objects from their non-JS | 
 |         implementation means that all interesting information lives | 
 |         outside of the JS object itself. This patch poisons each JS | 
 |         object's pointer to non-JS implementation using the poisoning | 
 |         mechanism and a unique key per JS object type origin. | 
 |  | 
 |         * runtime/JSCPoison.h: | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): JS -> wasm stores the JS | 
 |         object in a stack slot when fast TLS is disabled. This requires | 
 |         that we unpoison the Wasm::Instance. | 
 |         * wasm/js/JSWebAssemblyCodeBlock.h: | 
 |         * wasm/js/JSWebAssemblyInstance.h: | 
 |         (JSC::JSWebAssemblyInstance::offsetOfPoisonedInstance): renamed to | 
 |         be explicit that the pointer is poisoned. | 
 |         * wasm/js/JSWebAssemblyMemory.h: | 
 |         * wasm/js/JSWebAssemblyModule.h: | 
 |         * wasm/js/JSWebAssemblyTable.h: | 
 |  | 
 | 2018-01-05  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Add ability to disable indexed property masking for testing | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181350 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         Made the masking of indexed properties runtime controllable via a new JSC::Option | 
 |         named disableSpectreMitigations.  This is done to test the efficacy of that mitigation. | 
 |  | 
 |         The new option has a generic name as it will probably be used to disable future mitigations. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::SpeculativeJIT): | 
 |         (JSC::DFG::SpeculativeJIT::loadFromIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::maskedIndex): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::pointerIntoTypedArray): | 
 |         * jit/JIT.cpp: | 
 |         (JSC::JIT::JIT): | 
 |         * jit/JIT.h: | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitDoubleLoad): | 
 |         (JSC::JIT::emitContiguousLoad): | 
 |         (JSC::JIT::emitArrayStorageLoad): | 
 |         * runtime/Options.h: | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer): | 
 |  | 
 | 2018-01-05  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Allow JSC Config Files to set Restricted Options | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181352 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         * runtime/ConfigFile.cpp: | 
 |         (JSC::ConfigFile::parse): | 
 |  | 
 | 2018-01-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         TypedArrays and Wasm should use index masking. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181313 | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         We should have index masking for our TypedArray code in the | 
 |         DFG/FTL and for Wasm when doing bounds checking. Index masking for | 
 |         Wasm is added to the WasmBoundsCheckValue. Since we don't CSE any | 
 |         WasmBoundsCheckValues we don't need to worry about combining a | 
 |         bounds check for a load and a store. I went with fusing the | 
 |         pointer masking in the WasmBoundsCheckValue since it should reduce | 
 |         additional compiler overhead. | 
 |  | 
 |         * b3/B3LowerToAir.cpp: | 
 |         * b3/B3Validate.cpp: | 
 |         * b3/B3WasmBoundsCheckValue.cpp: | 
 |         (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue): | 
 |         (JSC::B3::WasmBoundsCheckValue::dumpMeta const): | 
 |         * b3/B3WasmBoundsCheckValue.h: | 
 |         (JSC::B3::WasmBoundsCheckValue::pinnedIndexingMask const): | 
 |         * b3/air/AirCustom.h: | 
 |         (JSC::B3::Air::WasmBoundsCheckCustom::generate): | 
 |         * b3/testb3.cpp: | 
 |         (JSC::B3::testWasmBoundsCheck): | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): | 
 |         (JSC::DFG::SpeculativeJIT::loadFromIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): | 
 |         (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::pointerIntoTypedArray): | 
 |         * jit/JITPropertyAccess.cpp: | 
 |         (JSC::JIT::emitIntTypedArrayGetByVal): | 
 |         * runtime/Butterfly.h: | 
 |         (JSC::Butterfly::computeIndexingMask const): | 
 |         (JSC::Butterfly::computeIndexingMaskForVectorLength): Deleted. | 
 |         * runtime/JSArrayBufferView.cpp: | 
 |         (JSC::JSArrayBufferView::JSArrayBufferView): | 
 |         * wasm/WasmB3IRGenerator.cpp: | 
 |         (JSC::Wasm::B3IRGenerator::B3IRGenerator): | 
 |         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState): | 
 |         (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer): | 
 |         (JSC::Wasm::B3IRGenerator::load): | 
 |         (JSC::Wasm::B3IRGenerator::store): | 
 |         (JSC::Wasm::B3IRGenerator::addCallIndirect): | 
 |         * wasm/WasmBinding.cpp: | 
 |         (JSC::Wasm::wasmToWasm): | 
 |         * wasm/WasmMemory.cpp: | 
 |         (JSC::Wasm::Memory::Memory): | 
 |         (JSC::Wasm::Memory::grow): | 
 |         * wasm/WasmMemory.h: | 
 |         (JSC::Wasm::Memory::offsetOfIndexingMask): | 
 |         * wasm/WasmMemoryInformation.cpp: | 
 |         (JSC::Wasm::PinnedRegisterInfo::get): | 
 |         (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo): | 
 |         * wasm/WasmMemoryInformation.h: | 
 |         (JSC::Wasm::PinnedRegisterInfo::toSave const): | 
 |         * wasm/js/JSToWasm.cpp: | 
 |         (JSC::Wasm::createJSToWasmWrapper): | 
 |  | 
 | 2018-01-05  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r226434. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181322 | 
 |  | 
 |         32bit JSC failure in x86 (Requested by yusukesuzuki on | 
 |         #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[DFG] Unify ToNumber implementation in 32bit and 64bit by | 
 |         changing 32bit Int32Tag and LowestTag" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181134 | 
 |         https://trac.webkit.org/changeset/226434 | 
 |  | 
 | 2018-01-04  Devin Rousso  <webkit@devinrousso.com> | 
 |  | 
 |         Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180770 | 
 |  | 
 |         Reviewed by Joseph Pecoraro. | 
 |  | 
 |         * inspector/protocol/Canvas.json: | 
 |  | 
 | 2018-01-04  Commit Queue  <commit-queue@webkit.org> | 
 |  | 
 |         Unreviewed, rolling out r226405. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181318 | 
 |  | 
 |         Speculative rollout due to Octane/SplayLatency,Octane/Splay | 
 |         regressions (Requested by yusukesuzuki on #webkit). | 
 |  | 
 |         Reverted changeset: | 
 |  | 
 |         "[JSC] Create parallel SlotVisitors apriori" | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180907 | 
 |         https://trac.webkit.org/changeset/226405 | 
 |  | 
 | 2018-01-04  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Do value profiling in to_this | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181299 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         This patch adds value profiling to to_this. We use the result of the value | 
 |         profiling only for strict mode code when we don't predict that the input is | 
 |         of a specific type. This helps when the input is SpecCellOther. Such cells | 
 |         might implement a custom ToThis, which can produce an arbitrary result. Before | 
 |         this patch, in prediction propagation, we were saying that a ToThis with a | 
 |         SpecCellOther input also produced SpecCellOther. However, this is incorrect, | 
 |         given that the input may implement ToThis that produces an arbitrary result. | 
 |         This is seen inside Speedometer. This patch fixes an OSR exit loop in Speedometer. | 
 |          | 
 |         Interestingly, this patch only does value profiling on the slow path. The fast | 
 |         path of to_this in the LLInt/baseline just perform a structure check. If it | 
 |         passes, the result is the same as the input. Therefore, doing value profiling | 
 |         from the fast path wouldn't actually produce new information for the ValueProfile. | 
 |  | 
 |         * bytecode/BytecodeDumper.cpp: | 
 |         (JSC::BytecodeDumper<Block>::dumpBytecode): | 
 |         * bytecode/BytecodeList.json: | 
 |         * bytecode/CodeBlock.cpp: | 
 |         (JSC::CodeBlock::finishCreation): | 
 |         * bytecompiler/BytecodeGenerator.cpp: | 
 |         (JSC::BytecodeGenerator::BytecodeGenerator): | 
 |         (JSC::BytecodeGenerator::emitToThis): | 
 |         * bytecompiler/BytecodeGenerator.h: | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |         * dfg/DFGNode.h: | 
 |         (JSC::DFG::Node::hasHeapPrediction): | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * runtime/CommonSlowPaths.cpp: | 
 |         (JSC::SLOW_PATH_DECL): | 
 |  | 
 | 2018-01-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Unify ToNumber implementation in 32bit and 64bit by changing 32bit Int32Tag and LowestTag | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181134 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         We would like to unify DFG ToNumber implementation in 32bit and 64bit. One problem is that | 
 |         branchIfNumber signature is different between 32bit and 64bit. 32bit implementation requires | 
 |         an additional scratch register. We do not want to allocate an unnecessary register in 64bit | 
 |         implementation. | 
 |  | 
 |         This patch removes the additional register in branchIfNumber/branchIfNotNumber in both 32bit | 
 |         and 64bit implementation. To achieve this goal, we change Int32Tag and LowestTag order. By | 
 |         setting Int32Tag as LowestTag, we can query whether the given tag is a number by checking | 
 |         `<= LowestTag(Int32Tag)`. | 
 |  | 
 |         We also change the order of UndefinedTag, NullTag, and BooleanTag to keep `(UndefinedTag | 1) == NullTag`. | 
 |  | 
 |         We also clean up speculateMisc implementation by adding branchIfMisc/branchIfNotMisc. | 
 |  | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileValueToInt32): | 
 |         (JSC::DFG::SpeculativeJIT::compileDoubleRep): | 
 |         (JSC::DFG::SpeculativeJIT::speculateNumber): | 
 |         (JSC::DFG::SpeculativeJIT::speculateMisc): | 
 |         (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey): | 
 |         (JSC::DFG::SpeculativeJIT::compileToNumber): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         * dfg/DFGSpeculativeJIT32_64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): | 
 |         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): | 
 |         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): | 
 |         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * dfg/DFGSpeculativeJIT64.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compile): | 
 |         * jit/AssemblyHelpers.cpp: | 
 |         (JSC::AssemblyHelpers::branchIfNotType): | 
 |         (JSC::AssemblyHelpers::jitAssertIsJSNumber): | 
 |         (JSC::AssemblyHelpers::emitConvertValueToBoolean): | 
 |         * jit/AssemblyHelpers.h: | 
 |         (JSC::AssemblyHelpers::branchIfMisc): | 
 |         (JSC::AssemblyHelpers::branchIfNotMisc): | 
 |         (JSC::AssemblyHelpers::branchIfNumber): | 
 |         (JSC::AssemblyHelpers::branchIfNotNumber): | 
 |         (JSC::AssemblyHelpers::branchIfNotDoubleKnownNotInt32): | 
 |         (JSC::AssemblyHelpers::emitTypeOf): | 
 |         * jit/JITAddGenerator.cpp: | 
 |         (JSC::JITAddGenerator::generateFastPath): | 
 |         * jit/JITArithmetic32_64.cpp: | 
 |         (JSC::JIT::emitBinaryDoubleOp): | 
 |         * jit/JITDivGenerator.cpp: | 
 |         (JSC::JITDivGenerator::loadOperand): | 
 |         * jit/JITMulGenerator.cpp: | 
 |         (JSC::JITMulGenerator::generateInline): | 
 |         (JSC::JITMulGenerator::generateFastPath): | 
 |         * jit/JITNegGenerator.cpp: | 
 |         (JSC::JITNegGenerator::generateInline): | 
 |         (JSC::JITNegGenerator::generateFastPath): | 
 |         * jit/JITOpcodes32_64.cpp: | 
 |         (JSC::JIT::emit_op_is_number): | 
 |         (JSC::JIT::emit_op_jeq_null): | 
 |         (JSC::JIT::emit_op_jneq_null): | 
 |         (JSC::JIT::emit_op_to_number): | 
 |         (JSC::JIT::emit_op_profile_type): | 
 |         * jit/JITRightShiftGenerator.cpp: | 
 |         (JSC::JITRightShiftGenerator::generateFastPath): | 
 |         * jit/JITSubGenerator.cpp: | 
 |         (JSC::JITSubGenerator::generateInline): | 
 |         (JSC::JITSubGenerator::generateFastPath): | 
 |         * llint/LLIntData.cpp: | 
 |         (JSC::LLInt::Data::performAssertions): | 
 |         * llint/LowLevelInterpreter.asm: | 
 |         * llint/LowLevelInterpreter32_64.asm: | 
 |         * runtime/JSCJSValue.h: | 
 |  | 
 | 2018-01-04  JF Bastien  <jfbastien@apple.com> | 
 |  | 
 |         Add assembler support for x86 lfence and sfence | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181311 | 
 |         <rdar://problem/36301780> | 
 |  | 
 |         Reviewed by Michael Saboff. | 
 |  | 
 |         Useful for testing performance of serializing instructions (hint: | 
 |         it's not good). | 
 |  | 
 |         * assembler/MacroAssemblerX86Common.h: | 
 |         (JSC::MacroAssemblerX86Common::lfence): | 
 |         (JSC::MacroAssemblerX86Common::sfence): | 
 |         * assembler/X86Assembler.h: | 
 |         (JSC::X86Assembler::lfence): | 
 |         (JSC::X86Assembler::sfence): | 
 |  | 
 | 2018-01-04  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Add a new pattern matching rule to Graph::methodOfGettingAValueProfileFor for SetLocal(@nodeWithHeapPrediction) | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181296 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         Inside Speedometer's Ember test, there is a recompile loop like: | 
 |         a: GetByVal(..., semanticOriginX) | 
 |         b: SetLocal(Cell:@a, semanticOriginX) | 
 |          | 
 |         where the cell check always fails. For reasons I didn't investigate, the | 
 |         baseline JIT's value profiling doesn't accurately capture the GetByVal's | 
 |         result. | 
 |          | 
 |         However, when compiling this cell speculation check in the DFG, we get a null | 
 |         MethodOfGettingAValueProfile inside Graph::methodOfGettingAValueProfileFor for | 
 |         this IR pattern because both @a and @b have the same semantic origin. We | 
 |         should not follow the same semantic origin heuristic when dealing with | 
 |         SetLocal since SetLocal(@nodeWithHeapPrediction) is such a common IR pattern. | 
 |         For patterns like this, we introduce a new heuristic: @NodeThatDoesNotProduceAValue(@nodeWithHeapPrediction). | 
 |         For this IR pattern, we will update the value profile for the semantic origin | 
 |         for @nodeWithHeapPrediction. So, for the Speedometer example above, we | 
 |         will correctly update the GetByVal's value profile, which will prevent | 
 |         an OSR exit loop. | 
 |  | 
 |         * dfg/DFGGraph.cpp: | 
 |         (JSC::DFG::Graph::methodOfGettingAValueProfileFor): | 
 |  | 
 | 2018-01-04  Keith Miller  <keith_miller@apple.com> | 
 |  | 
 |         Array Storage operations sometimes did not update the indexing mask correctly. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181301 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         I will add tests in a follow up patch. See: https://bugs.webkit.org/show_bug.cgi?id=181303 | 
 |  | 
 |         * runtime/JSArray.cpp: | 
 |         (JSC::JSArray::shiftCountWithArrayStorage): | 
 |         * runtime/JSObject.cpp: | 
 |         (JSC::JSObject::increaseVectorLength): | 
 |  | 
 | 2018-01-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [DFG] Define defs for MapSet/SetAdd to participate in CSE | 
 |         https://bugs.webkit.org/show_bug.cgi?id=179911 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         With this patch, our MapSet and SetAdd DFG nodes participate in CSE. | 
 |         To handle a bit tricky DFG Map operation nodes, MapSet and SetAdd | 
 |         produce added bucket as its result. Subsequent GetMapBucket will | 
 |         be removed by CSE. | 
 |  | 
 |         * dfg/DFGAbstractInterpreterInlines.h: | 
 |         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): | 
 |         * dfg/DFGClobberize.h: | 
 |         (JSC::DFG::clobberize): | 
 |         * dfg/DFGNodeType.h: | 
 |         * dfg/DFGOperations.cpp: | 
 |         * dfg/DFGOperations.h: | 
 |         * dfg/DFGPredictionPropagationPhase.cpp: | 
 |         * dfg/DFGSpeculativeJIT.cpp: | 
 |         (JSC::DFG::SpeculativeJIT::compileSetAdd): | 
 |         (JSC::DFG::SpeculativeJIT::compileMapSet): | 
 |         * dfg/DFGSpeculativeJIT.h: | 
 |         (JSC::DFG::SpeculativeJIT::callOperation): | 
 |         * ftl/FTLLowerDFGToB3.cpp: | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileSetAdd): | 
 |         (JSC::FTL::DFG::LowerDFGToB3::compileMapSet): | 
 |         * jit/JITOperations.h: | 
 |         * runtime/HashMapImpl.h: | 
 |         (JSC::HashMapImpl::addNormalized): | 
 |         (JSC::HashMapImpl::addNormalizedInternal): | 
 |  | 
 | 2018-01-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Remove LocalScope | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181206 | 
 |  | 
 |         Reviewed by Geoffrey Garen. | 
 |  | 
 |         The last user of HandleStack and LocalScope is JSON. But MarkedArgumentBuffer is enough for their use. | 
 |         This patch changes JSON parsing and stringifying to using MarkedArgumentBuffer. And remove HandleStack | 
 |         and LocalScope. | 
 |  | 
 |         We make Stringifier and Walker WTF_FORBID_HEAP_ALLOCATION to place them on the stack. So they can hold | 
 |         JSObject* directly in their fields. | 
 |  | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * heap/HandleStack.cpp: Removed. | 
 |         * heap/HandleStack.h: Removed. | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::addCoreConstraints): | 
 |         * heap/Heap.h: | 
 |         (JSC::Heap::handleSet): | 
 |         (JSC::Heap::handleStack): Deleted. | 
 |         * heap/Local.h: Removed. | 
 |         * heap/LocalScope.h: Removed. | 
 |         * runtime/JSONObject.cpp: | 
 |         (JSC::Stringifier::Holder::object const): | 
 |         (JSC::gap): | 
 |         (JSC::Stringifier::Stringifier): | 
 |         (JSC::Stringifier::stringify): | 
 |         (JSC::Stringifier::appendStringifiedValue): | 
 |         (JSC::Stringifier::Holder::Holder): | 
 |         (JSC::Stringifier::Holder::appendNextProperty): | 
 |         (JSC::Walker::Walker): | 
 |         (JSC::Walker::callReviver): | 
 |         (JSC::Walker::walk): | 
 |         (JSC::JSONProtoFuncParse): | 
 |         (JSC::JSONProtoFuncStringify): | 
 |         (JSC::JSONParse): | 
 |         (JSC::JSONStringify): | 
 |  | 
 | 2018-01-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [FTL] Optimize ObjectAllocationSinking mergePointerSets by using removeIf | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180238 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         We can optimize ObjectAllocationSinking a bit by using removeIf. | 
 |  | 
 |         * dfg/DFGObjectAllocationSinkingPhase.cpp: | 
 |  | 
 | 2018-01-04  Yusuke Suzuki  <utatane.tea@gmail.com> | 
 |  | 
 |         [JSC] Create parallel SlotVisitors apriori | 
 |         https://bugs.webkit.org/show_bug.cgi?id=180907 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         The number of SlotVisitors are capped with the number of HeapHelperPool's threads + 2. | 
 |         If we create these SlotVisitors apriori, we do not need to create SlotVisitors dynamically. | 
 |         Then we do not need to grab locks while iterating all the SlotVisitors. | 
 |  | 
 |         In addition, we do not need to consider the case that the number of SlotVisitors increases | 
 |         after setting up VisitCounters in MarkingConstraintSolver since the number of SlotVisitors | 
 |         does not increase any more. | 
 |  | 
 |         * heap/Heap.cpp: | 
 |         (JSC::Heap::Heap): | 
 |         (JSC::Heap::runBeginPhase): | 
 |         * heap/Heap.h: | 
 |         * heap/HeapInlines.h: | 
 |         (JSC::Heap::forEachSlotVisitor): | 
 |         (JSC::Heap::numberOfSlotVisitors): Deleted. | 
 |         * heap/MarkingConstraintSolver.cpp: | 
 |         (JSC::MarkingConstraintSolver::didVisitSomething const): | 
 |  | 
 | 2018-01-03  Ting-Wei Lan  <lantw44@gmail.com> | 
 |  | 
 |         Replace hard-coded paths in shebangs with #!/usr/bin/env | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181040 | 
 |  | 
 |         Reviewed by Alex Christensen. | 
 |  | 
 |         * Scripts/UpdateContents.py: | 
 |         * Scripts/cssmin.py: | 
 |         * Scripts/generate-combined-inspector-json.py: | 
 |         * Scripts/xxd.pl: | 
 |         * create_hash_table: | 
 |         * generate-bytecode-files: | 
 |         * wasm/generateWasm.py: | 
 |         * wasm/generateWasmOpsHeader.py: | 
 |         * yarr/generateYarrCanonicalizeUnicode: | 
 |  | 
 | 2018-01-03  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Disable SharedArrayBuffers from Web API | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181266 | 
 |  | 
 |         Reviewed by Saam Barati. | 
 |  | 
 |         Removed SharedArrayBuffer prototype and structure from GlobalObject creation | 
 |         to disable. | 
 |  | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::arrayBufferPrototype const): | 
 |         (JSC::JSGlobalObject::arrayBufferStructure const): | 
 |  | 
 | 2018-01-03  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Add "noInline" to $vm | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181265 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         This would be useful for web based tests. | 
 |  | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::getExecutableForFunction): | 
 |         (JSC::functionNoInline): | 
 |         (JSC::JSDollarVM::finishCreation): | 
 |  | 
 | 2018-01-03  Michael Saboff  <msaboff@apple.com> | 
 |  | 
 |         Remove unnecessary flushing of Butterfly pointer in functionCpuClflush() | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181263 | 
 |  | 
 |         Reviewed by Mark Lam. | 
 |  | 
 |         Flushing the butterfly pointer provides no benefit and slows this function. | 
 |  | 
 |         * tools/JSDollarVM.cpp: | 
 |         (JSC::functionCpuClflush): | 
 |  | 
 | 2018-01-03  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Fix BytecodeParser op_catch assert to work with useProfiler=1 | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181260 | 
 |  | 
 |         Reviewed by Keith Miller. | 
 |  | 
 |         op_catch was asserting that the current block was empty. This is only true | 
 |         if the profiler isn't enabled. When the profiler is enabled, we will | 
 |         insert a CountExecution node before each bytecode. This patch fixes the | 
 |         assert to work with the profiler. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::parseBlock): | 
 |  | 
 | 2018-01-03  Per Arne Vollan  <pvollan@apple.com> | 
 |  | 
 |         [Win][Debug] testapi link error. | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181247 | 
 |         <rdar://problem/36166729> | 
 |  | 
 |         Reviewed by Brent Fulgham. | 
 |  | 
 |         Do not set the runtime library compile flag for C files, it is already set to the correct value. | 
 |   | 
 |         * shell/PlatformWin.cmake: | 
 |  | 
 | 2018-01-03  Robin Morisset  <rmorisset@apple.com> | 
 |  | 
 |         Inlining of a function that ends in op_unreachable crashes | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181027 | 
 |  | 
 |         Reviewed by Filip Pizlo. | 
 |  | 
 |         * dfg/DFGByteCodeParser.cpp: | 
 |         (JSC::DFG::ByteCodeParser::allocateTargetableBlock): | 
 |         (JSC::DFG::ByteCodeParser::inlineCall): | 
 |  | 
 | 2018-01-02  Saam Barati  <sbarati@apple.com> | 
 |  | 
 |         Incorrect assertion inside AccessCase | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181200 | 
 |         <rdar://problem/35494754> | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         Consider a PutById compiled to a setter in a function like so: | 
 |          | 
 |         ``` | 
 |         function foo(o) { o.f = o; } | 
 |         ``` | 
 |          | 
 |         The DFG will often assign the same registers to the baseGPR (o in o.f) and the | 
 |         valueRegsPayloadGPR (o in the RHS). The code totally works when these are assigned | 
 |         to the same register. However, we're asserting that they're not the same register. | 
 |         This patch just removes this invalid assertion. | 
 |  | 
 |         * bytecode/AccessCase.cpp: | 
 |         (JSC::AccessCase::generateImpl): | 
 |  | 
 | 2018-01-02  Caio Lima  <ticaiolima@gmail.com> | 
 |  | 
 |         [ESNext][BigInt] Implement BigIntConstructor and BigIntPrototype | 
 |         https://bugs.webkit.org/show_bug.cgi?id=175359 | 
 |  | 
 |         Reviewed by Yusuke Suzuki. | 
 |  | 
 |         This patch is implementing BigIntConstructor and BigIntPrototype | 
 |         following spec[1, 2]. As addition, we are also implementing BigIntObject | 
 |         warapper to handle ToObject(v) abstract operation when "v" is a BigInt | 
 |         primitive. With these classes, now it's possible to syntetize | 
 |         BigInt.prototype and then call "toString", "valueOf" and | 
 |         "toLocaleString" when the primitive is a BigInt. | 
 |         BigIntConstructor exposes an API to parse other primitives such as | 
 |         Number, Boolean and String to BigInt. | 
 |         We decided to skip parseInt implementation, since it was removed from | 
 |         spec. | 
 |  | 
 |         [1] - https://tc39.github.io/proposal-bigint/#sec-bigint-constructor | 
 |         [2] - https://tc39.github.io/proposal-bigint/#sec-properties-of-the-bigint-prototype-object  | 
 |  | 
 |         * CMakeLists.txt: | 
 |         * DerivedSources.make: | 
 |         * JavaScriptCore.xcodeproj/project.pbxproj: | 
 |         * Sources.txt: | 
 |         * jsc.cpp: | 
 |         * runtime/BigIntConstructor.cpp: Added. | 
 |         (JSC::BigIntConstructor::BigIntConstructor): | 
 |         (JSC::BigIntConstructor::finishCreation): | 
 |         (JSC::isSafeInteger): | 
 |         (JSC::toBigInt): | 
 |         (JSC::callBigIntConstructor): | 
 |         (JSC::bigIntConstructorFuncAsUintN): | 
 |         (JSC::bigIntConstructorFuncAsIntN): | 
 |         * runtime/BigIntConstructor.h: Added. | 
 |         (JSC::BigIntConstructor::create): | 
 |         (JSC::BigIntConstructor::createStructure): | 
 |         * runtime/BigIntObject.cpp: Added. | 
 |         (JSC::BigIntObject::BigIntObject): | 
 |         (JSC::BigIntObject::finishCreation): | 
 |         (JSC::BigIntObject::toStringName): | 
 |         (JSC::BigIntObject::defaultValue): | 
 |         * runtime/BigIntObject.h: Added. | 
 |         (JSC::BigIntObject::create): | 
 |         (JSC::BigIntObject::internalValue const): | 
 |         (JSC::BigIntObject::createStructure): | 
 |         * runtime/BigIntPrototype.cpp: Added. | 
 |         (JSC::BigIntPrototype::BigIntPrototype): | 
 |         (JSC::BigIntPrototype::finishCreation): | 
 |         (JSC::toThisBigIntValue): | 
 |         (JSC::bigIntProtoFuncToString): | 
 |         (JSC::bigIntProtoFuncToLocaleString): | 
 |         (JSC::bigIntProtoFuncValueOf): | 
 |         * runtime/BigIntPrototype.h: Added. | 
 |         (JSC::BigIntPrototype::create): | 
 |         (JSC::BigIntPrototype::createStructure): | 
 |         * runtime/IntlCollator.cpp: | 
 |         (JSC::IntlCollator::initializeCollator): | 
 |         * runtime/IntlNumberFormat.cpp: | 
 |         (JSC::IntlNumberFormat::initializeNumberFormat): | 
 |         * runtime/JSBigInt.cpp: | 
 |         (JSC::JSBigInt::createFrom): | 
 |         (JSC::JSBigInt::parseInt): | 
 |         (JSC::JSBigInt::toObject const): | 
 |         * runtime/JSBigInt.h: | 
 |         * runtime/JSCJSValue.cpp: | 
 |         (JSC::JSValue::synthesizePrototype const): | 
 |         * runtime/JSCPoisonedPtr.cpp: | 
 |         * runtime/JSCell.cpp: | 
 |         (JSC::JSCell::toObjectSlow const): | 
 |         * runtime/JSGlobalObject.cpp: | 
 |         (JSC::JSGlobalObject::init): | 
 |         (JSC::JSGlobalObject::visitChildren): | 
 |         * runtime/JSGlobalObject.h: | 
 |         (JSC::JSGlobalObject::bigIntPrototype const): | 
 |         (JSC::JSGlobalObject::bigIntObjectStructure const): | 
 |         * runtime/StructureCache.h: | 
 |         * runtime/StructureInlines.h: | 
 |         (JSC::prototypeForLookupPrimitiveImpl): | 
 |  | 
 | 2018-01-02  Tim Horton  <timothy_horton@apple.com> | 
 |  | 
 |         Fix the MathCommon build with a recent compiler | 
 |         https://bugs.webkit.org/show_bug.cgi?id=181216 | 
 |  | 
 |         Reviewed by Sam Weinig. | 
 |  | 
 |         * runtime/MathCommon.cpp: | 
 |         (JSC::fdlibmPow): | 
 |         This cast drops the 'const' qualifier from the pointer to 'one', | 
 |         but it doesn't have to, and it makes the compiler sad. | 
 |  | 
 | == Rolled over to ChangeLog-2018-01-01 == |