1. 23 Jan, 2014 1 commit
    • mark.lam@apple.com's avatar
      Poor man's fast breakpoints for a 2.3x debugger speedup. · 945b1399
      mark.lam@apple.com authored
      <https://webkit.org/b/122836>
      
      Reviewed by Geoffrey Garen.
      
      Previously we gained back some performance (run at baseline JIT speeds)
      when the WebInspector is opened provided no breakpoints are set. This
      was achieved by simply skipping all op_debug callbacks to the debugger
      if no breakpoints are set. If any breakpoints are set, the debugger will
      set a m_needsOpDebugCallbacks flag which causes the callbacks to be
      called, and we don't get the baseline JIT speeds anymore.
      
      With this patch, we will now track the number of breakpoints set in the
      CodeBlock that they are set in. The LLINT and baseline JIT code will
      check CodeBlock::m_numBreakpoints to determine if the op_debug callbacks
      need to be called. With this, we will only enable op_debug callbacks for
      CodeBlocks that need it i.e. those with breakpoints set in them.
      
      Debugger::m_needsOpDebugCallbacks is now obsoleted. The LLINT and baseline
      JIT code still needs to check Debugger::m_shouldPause to determine if the
      debugger is in stepping mode and hence, needs op_debug callbacks enabled
      for everything until the debugger "continues" the run and exit stepping
      mode.
      
      Also in this patch, I fixed a regression in DOM breakpoints which relies
      Debugger::breakProgram() to pause the debugger.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      - Missed accounting for op_debug's new hasBreakpointFlag operand here when
        it was added.
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::hasOpDebugForLineAndColumn):
      - This is needed in Debugger::toggleBreakpoint() to determine if a
        breakpoint falls within a CodeBlock or not. Simply checking the bounds
        of the CodeBlock is insufficient. For example, let's say we have the
        following JS code:
      
            // begin global scope
            function f1() {
                function f2() {
                   ... // set breakpoint here.
                }
            }
            // end global scope
      
        Using the CodeBlock bounds alone, the breakpoint above will to appear
        to be in the global program CodeBlock, and the CodeBlocks for function
        f1() and f2(). With CodeBlock::hasOpDebugForLineAndColumn() we can
        rule out the global program CodeBlock and f1(), and only apply the
        breakpoint to f2(0 where it belongs.
      
        CodeBlock::hasOpDebugForLineAndColumn() works by iterating over all
        the opcodes in the CodeBlock to look for op_debug's. For each op_debug,
        it calls CodeBlock::expressionRangeForBytecodeOffset() to do a binary
        seach to get the line and column info for that op_debug. This is a
        N * log(N) algorithm. However, a quick hands on test using the
        WebInspector (with this patch applied) to exercise setting, breaking
        on, and clearing breakpoints, as well as stepping through some code
        shows no noticeable degradation of the user experience compared to the
        baseline without this patch.
      
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::numBreakpoints):
      (JSC::CodeBlock::numBreakpointsOffset):
      (JSC::CodeBlock::addBreakpoint):
      (JSC::CodeBlock::removeBreakpoint):
      (JSC::CodeBlock::clearAllBreakpoints):
      * debugger/Breakpoint.h:
      - defined Breakpoint::unspecifiedColumn so that we can explicitly indicate
        when the WebInspector was setting a line breakpoint and did not provide
        a column value. CodeBlock::hasOpDebugForLineAndColumn() needs this
        information in order to loosen its matching criteria for op_debug
        bytecodes for the specified breakpoint line and column values provided
        by the debugger.
      
        Previously, we just hijack a 0 value column as an unspecified column.
        However, the WebInspector operates on 0-based ints for column values.
        Hence, 0 should be a valid column value and should not be hijacked to
        mean an unspecified column.
      
      * debugger/Debugger.cpp:
      (JSC::Debugger::Debugger):
      - added tracking of the VM that the debugger is used with. This is
        needed by Debugger::breakProgram().
      
        The VM pointer is attained from the first JSGlobalObject that the debugger
        attaches to. When the debugger detaches from the last JSGlobalObject, it
        will nullify its VM pointer to allow a new one to be set on the next
        attach.
      
        We were always only using each debugger instance with one VM. This change
        makes it explicit with an assert to ensure that all globalObjects that
        the debugger attaches to beongs to the same VM.
      
      (JSC::Debugger::attach):
      (JSC::Debugger::detach):
      (JSC::Debugger::setShouldPause):
      
      (JSC::Debugger::registerCodeBlock):
      (JSC::Debugger::unregisterCodeBlock):
      - registerCodeBlock() is responsible for applying pre-existing breakpoints
        to new CodeBlocks being installed. Similarly, unregisterCodeBlock()
        clears the breakpoints.
      
      (JSC::Debugger::toggleBreakpoint):
      - This is the workhorse function that checks if a breakpoint falls within
        a CodeBlock or not. If it does, then it can either enable or disable
        said breakpoint in the CodeBlock. In the current implementation,
        enabling/disabling the breakpoint simply means incrementing/decrementing
        the CodeBlock's m_numBreakpoints.
      
      (JSC::Debugger::applyBreakpoints):
      
      (JSC::Debugger::ToggleBreakpointFunctor::ToggleBreakpointFunctor):
      (JSC::Debugger::ToggleBreakpointFunctor::operator()):
      (JSC::Debugger::toggleBreakpoint):
      - Iterates all relevant CodeBlocks and apply the specified breakpoint
        if appropriate. This is called when a new breakpoint is being defined
        by the WebInspector and needs to be applied to an already installed
        CodeBlock.
      
      (JSC::Debugger::setBreakpoint):
      (JSC::Debugger::removeBreakpoint):
      (JSC::Debugger::hasBreakpoint):
      (JSC::Debugger::ClearBreakpointsFunctor::ClearBreakpointsFunctor):
      (JSC::Debugger::ClearBreakpointsFunctor::operator()):
      (JSC::Debugger::clearBreakpoints):
      
      (JSC::Debugger::breakProgram):
      - Fixed a regression that broke DOM breakpoints. The issue is that with
        the skipping of op_debug callbacks, we don't always have an updated
        m_currentCallFrame. Normally, m_currentCallFrame is provided as arg
        in the op_debug callback. In this case, we can get the CallFrame* from
        m_vm->topCallFrame.
      
      (JSC::Debugger::updateCallFrameAndPauseIfNeeded):
      (JSC::Debugger::pauseIfNeeded):
      (JSC::Debugger::willExecuteProgram):
      * debugger/Debugger.h:
      (JSC::Debugger::Debugger):
      (JSC::Debugger::shouldPause):
      
      * heap/CodeBlockSet.h:
      (JSC::CodeBlockSet::iterate):
      * heap/Heap.h:
      (JSC::Heap::forEachCodeBlock):
      - Added utility to iterate all CodeBlocks in the heap / VM.
      
      * interpreter/Interpreter.cpp:
      (JSC::Interpreter::debug):
      
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_debug):
      * jit/JITOpcodes32_64.cpp:
      (JSC::JIT::emit_op_debug):
      * llint/LowLevelInterpreter.asm:
      - These now checks CodeBlock::m_numBreakpoints and Debugger::m_shouldPause
        instead of Debugger::m_needsOpDebugCallbacks.
      
      * runtime/Executable.cpp:
      (JSC::ScriptExecutable::installCode):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162598 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      945b1399
  2. 21 Jan, 2014 1 commit
    • mark.lam@apple.com's avatar
      Removing CodeBlock::opDebugBytecodeOffsetForLineAndColumn() and friends. · 26a6692f
      mark.lam@apple.com authored
      <https://webkit.org/b/127321>
      
      Reviewed by Geoffrey Garen.
      
      We're changing plans and will be going with CodeBlock level breakpoints
      instead of bytecode level breakpoints. As a result, we no longer need
      the services of CodeBlock::opDebugBytecodeOffsetForLineAndColumn() (and
      friends). This patch will remove that unused code.
      
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/CodeBlock.cpp:
      * bytecode/CodeBlock.h:
      * bytecode/LineColumnInfo.h: Removed.
      * bytecode/UnlinkedCodeBlock.cpp:
      (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
      * bytecode/UnlinkedCodeBlock.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162389 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      26a6692f
  3. 19 Jan, 2014 1 commit
  4. 18 Jan, 2014 4 commits
    • akling@apple.com's avatar
      Remove unused CodeBlock::m_additionalIdentifiers member. · 5c4fbce2
      akling@apple.com authored
      <https://webkit.org/b/127237>
      
      Reviewed by Anders Carlsson.
      
      * bytecode/CodeBlock.h:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::shrinkToFit):
      
          Remove m_additionalIdentifiers, nothing uses it.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162279 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5c4fbce2
    • akling@apple.com's avatar
      Remove two unused CodeBlock functions. · 8d3388a1
      akling@apple.com authored
      <https://webkit.org/b/127235>
      
      Kill copyPostParseDataFrom() and copyPostParseDataFromAlternative()
      since they are not used.
      
      Reviewed by Anders Carlsson.
      
      * bytecode/CodeBlock.cpp:
      * bytecode/CodeBlock.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162278 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8d3388a1
    • akling@apple.com's avatar
      CodeBlock: Size m_exceptionHandlers to fit from creation. · b2ad169b
      akling@apple.com authored
      <https://webkit.org/b/127234>
      
      Avoid allocation churn for CodeBlock::m_exceptionHandlers.
      
      Reviewed by Anders Carlsson.
      
      * bytecode/CodeBlock.h:
      
          Removed unused CodeBlock::allocateHandlers() function.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      
          Use resizeToFit() instead of grow() for m_exceptionHandlers
          since we know it's never going to change size.
      
      (JSC::CodeBlock::shrinkToFit):
      
          No need to shrink m_exceptionHandlers here since it's already
          the perfect size.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162277 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      b2ad169b
    • mark.lam@apple.com's avatar
      Adding UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn().. · 440584f1
      mark.lam@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=127127.
      
      Reviewed by Geoffrey Garen.
      
      In order to implement bytecode level breakpoints, we need a mechanism
      for computing the best fit op_debug bytecode offset for any valid given
      line and column value in the source. The "best fit" op_debug bytecode
      in this case is defined below in the comment for
      UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn().
      
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::opDebugBytecodeOffsetForLineAndColumn):
      - Convert the line and column to unlinked line and column values and
        pass them to UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn()
        to do the real work.
      
      * bytecode/CodeBlock.h:
      * bytecode/LineColumnInfo.h: Added.
      (JSC::LineColumnInfo::operator <):
      (JSC::LineColumnInfo::LineColumnPair::LineColumnPair):
      (JSC::LineColumnInfo::operator ==):
      (JSC::LineColumnInfo::operator !=):
      (JSC::LineColumnInfo::operator <=):
      (JSC::LineColumnInfo::operator >):
      (JSC::LineColumnInfo::operator >=):
      * bytecode/LineInfo.h: Removed.
      
      * bytecode/UnlinkedCodeBlock.cpp:
      (JSC::UnlinkedCodeBlock::decodeExpressionRangeLineAndColumn):
      - Factored this out of expressionRangeForBytecodeOffset() so that it can
        be called from multiple places.
      (JSC::dumpLineColumnEntry):
      (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
      (JSC::UnlinkedCodeBlock::dumpOpDebugLineColumnInfoList):
      - Some dumpers for debugging use only.
      (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset):
      (JSC::UnlinkedCodeBlock::opDebugBytecodeOffsetForLineAndColumn):
      - Finds the earliest op_debug bytecode whose line and column matches the
        specified line and column values. If an exact match is not found, then
        finds the nearest op_debug bytecode that precedes the specified line
        and column values. If there are more than one op_debug at that preceding
        line and column value, then the earliest of those op_debug bytecodes will
        be be selected. The offset of the selected bytecode will be returned.
      
        We want the earliest one because when we have multiple op_debug bytecodes
        that map to a given line and column, a debugger user would expect to break
        on the first one and step through the rest thereafter if needed.
      
      (JSC::compareLineColumnInfo):
      (JSC::UnlinkedCodeBlock::opDebugLineColumnInfoList):
      - Creates the sorted opDebugLineColumnInfoList on demand. This list is
        stored in the UnlinkedCodeBlock's rareData.
      * bytecode/UnlinkedCodeBlock.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162256 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      440584f1
  5. 16 Jan, 2014 1 commit
    • commit-queue@webkit.org's avatar
      Remove workaround for compilers not supporting explicit override control · 2dfe6cb5
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=127111
      
      Patch by Peter Molnar <pmolnar.u-szeged@partner.samsung.com> on 2014-01-16
      Reviewed by Anders Carlsson.
      
      Now all compilers support explicit override control, this workaround can be removed.
      
      Source/JavaScriptCore:
      
      * API/JSAPIWrapperObject.mm:
      * API/JSCallbackObject.h:
      * API/JSManagedValue.mm:
      * API/JSScriptRef.cpp:
      * bytecode/CodeBlock.h:
      * bytecode/CodeBlockJettisoningWatchpoint.h:
      * bytecode/ProfiledCodeBlockJettisoningWatchpoint.h:
      * bytecode/StructureStubClearingWatchpoint.h:
      * dfg/DFGArrayifySlowPathGenerator.h:
      * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
      * dfg/DFGFailedFinalizer.h:
      * dfg/DFGJITCode.h:
      * dfg/DFGJITFinalizer.h:
      * dfg/DFGSaneStringGetByValSlowPathGenerator.h:
      * dfg/DFGSlowPathGenerator.h:
      * dfg/DFGSpeculativeJIT64.cpp:
      * heap/Heap.h:
      * heap/IncrementalSweeper.h:
      * heap/SuperRegion.h:
      * inspector/InspectorValues.h:
      * inspector/JSGlobalObjectInspectorController.h:
      * inspector/agents/InspectorAgent.h:
      * inspector/remote/RemoteInspector.h:
      * inspector/remote/RemoteInspectorDebuggableConnection.h:
      * inspector/scripts/CodeGeneratorInspector.py:
      (Generator.go):
      * jit/ClosureCallStubRoutine.h:
      * jit/ExecutableAllocatorFixedVMPool.cpp:
      * jit/GCAwareJITStubRoutine.h:
      * jit/JITCode.h:
      * jit/JITToDFGDeferredCompilationCallback.h:
      * parser/Nodes.h:
      * parser/SourceProvider.h:
      * runtime/DataView.h:
      * runtime/GCActivityCallback.h:
      * runtime/GenericTypedArrayView.h:
      * runtime/JSGlobalObjectDebuggable.h:
      * runtime/JSPromiseReaction.cpp:
      * runtime/RegExpCache.h:
      * runtime/SimpleTypedArrayController.h:
      * runtime/SymbolTable.h:
      * runtime/WeakMapData.h:
      
      Source/WebCore:
      
      * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
      * Modules/encryptedmedia/CDMPrivateAVFoundation.h:
      * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
      * Modules/encryptedmedia/MediaKeyMessageEvent.h:
      * Modules/encryptedmedia/MediaKeyNeededEvent.h:
      * Modules/encryptedmedia/MediaKeySession.h:
      * Modules/encryptedmedia/MediaKeys.h:
      * Modules/geolocation/Geolocation.h:
      * Modules/indexeddb/DOMWindowIndexedDatabase.h:
      * Modules/indexeddb/IDBCursorBackendOperations.h:
      * Modules/indexeddb/IDBCursorWithValue.h:
      * Modules/indexeddb/IDBDatabase.h:
      * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
      * Modules/indexeddb/IDBOpenDBRequest.h:
      * Modules/indexeddb/IDBRequest.h:
      * Modules/indexeddb/IDBTransaction.h:
      * Modules/indexeddb/IDBTransactionBackendOperations.h:
      * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
      * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
      * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
      * Modules/indieui/UIRequestEvent.h:
      * Modules/mediasource/MediaSource.h:
      * Modules/mediasource/MediaSourceRegistry.h:
      * Modules/mediasource/SourceBuffer.h:
      * Modules/mediasource/SourceBufferList.h:
      * Modules/mediastream/AudioStreamTrack.h:
      * Modules/mediastream/MediaConstraintsImpl.h:
      * Modules/mediastream/MediaStream.h:
      * Modules/mediastream/MediaStreamRegistry.h:
      * Modules/mediastream/MediaStreamTrack.h:
      * Modules/mediastream/MediaStreamTrackEvent.h:
      * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
      * Modules/mediastream/RTCDTMFSender.h:
      * Modules/mediastream/RTCDataChannel.h:
      * Modules/mediastream/RTCPeerConnection.h:
      * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
      * Modules/mediastream/RTCStatsRequestImpl.h:
      * Modules/mediastream/RTCStatsResponse.h:
      * Modules/mediastream/RTCVoidRequestImpl.h:
      * Modules/mediastream/UserMediaRequest.h:
      * Modules/mediastream/VideoStreamTrack.h:
      * Modules/networkinfo/NetworkInfoConnection.h:
      * Modules/notifications/DOMWindowNotifications.h:
      * Modules/notifications/Notification.h:
      * Modules/notifications/NotificationCenter.h:
      * Modules/plugins/QuickTimePluginReplacement.h:
      * Modules/speech/SpeechRecognition.h:
      * Modules/speech/SpeechRecognitionError.h:
      * Modules/speech/SpeechRecognitionEvent.h:
      * Modules/speech/SpeechSynthesis.h:
      * Modules/speech/SpeechSynthesisUtterance.h:
      * Modules/webaudio/AnalyserNode.h:
      * Modules/webaudio/AudioBasicInspectorNode.h:
      * Modules/webaudio/AudioBasicProcessorNode.h:
      * Modules/webaudio/AudioBufferSourceNode.h:
      * Modules/webaudio/AudioContext.h:
      * Modules/webaudio/AudioDestinationNode.h:
      * Modules/webaudio/AudioNode.h:
      * Modules/webaudio/AudioNodeInput.h:
      * Modules/webaudio/AudioParam.h:
      * Modules/webaudio/AudioProcessingEvent.h:
      * Modules/webaudio/BiquadDSPKernel.h:
      * Modules/webaudio/BiquadProcessor.h:
      * Modules/webaudio/ChannelMergerNode.h:
      * Modules/webaudio/ChannelSplitterNode.h:
      * Modules/webaudio/ConvolverNode.h:
      * Modules/webaudio/DefaultAudioDestinationNode.h:
      * Modules/webaudio/DelayDSPKernel.h:
      * Modules/webaudio/DelayProcessor.h:
      * Modules/webaudio/DynamicsCompressorNode.h:
      * Modules/webaudio/GainNode.h:
      * Modules/webaudio/MediaElementAudioSourceNode.h:
      * Modules/webaudio/MediaStreamAudioDestinationNode.h:
      * Modules/webaudio/MediaStreamAudioSourceNode.h:
      * Modules/webaudio/OfflineAudioCompletionEvent.h:
      * Modules/webaudio/OfflineAudioDestinationNode.h:
      * Modules/webaudio/OscillatorNode.h:
      * Modules/webaudio/PannerNode.h:
      * Modules/webaudio/ScriptProcessorNode.h:
      * Modules/webaudio/WaveShaperDSPKernel.h:
      * Modules/webaudio/WaveShaperProcessor.h:
      * Modules/webdatabase/DatabaseTask.h:
      * Modules/webdatabase/SQLTransaction.h:
      * Modules/webdatabase/SQLTransactionBackend.h:
      * Modules/websockets/CloseEvent.h:
      * Modules/websockets/WebSocket.h:
      * Modules/websockets/WebSocketChannel.h:
      * Modules/websockets/WebSocketDeflateFramer.cpp:
      * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
      * Modules/websockets/WorkerThreadableWebSocketChannel.h:
      * accessibility/AccessibilityARIAGrid.h:
      * accessibility/AccessibilityARIAGridCell.h:
      * accessibility/AccessibilityARIAGridRow.h:
      * accessibility/AccessibilityImageMapLink.h:
      * accessibility/AccessibilityList.h:
      * accessibility/AccessibilityListBox.h:
      * accessibility/AccessibilityListBoxOption.h:
      * accessibility/AccessibilityMediaControls.h:
      * accessibility/AccessibilityMenuList.h:
      * accessibility/AccessibilityMenuListOption.h:
      * accessibility/AccessibilityMenuListPopup.h:
      * accessibility/AccessibilityMockObject.h:
      * accessibility/AccessibilityNodeObject.h:
      * accessibility/AccessibilityProgressIndicator.h:
      * accessibility/AccessibilityRenderObject.h:
      * accessibility/AccessibilitySVGRoot.h:
      * accessibility/AccessibilityScrollView.h:
      * accessibility/AccessibilityScrollbar.h:
      * accessibility/AccessibilitySearchFieldButtons.h:
      * accessibility/AccessibilitySlider.h:
      * accessibility/AccessibilitySpinButton.h:
      * accessibility/AccessibilityTable.h:
      * accessibility/AccessibilityTableCell.h:
      * accessibility/AccessibilityTableColumn.h:
      * accessibility/AccessibilityTableHeaderContainer.h:
      * accessibility/AccessibilityTableRow.h:
      * bindings/js/JSCryptoAlgorithmBuilder.h:
      * bindings/js/JSCryptoKeySerializationJWK.h:
      * bindings/js/JSDOMGlobalObjectTask.h:
      * bindings/js/JSEventListener.h:
      * bindings/js/JSLazyEventListener.h:
      * bindings/js/JSMutationCallback.h:
      * bindings/js/PageScriptDebugServer.h:
      * bindings/js/ScriptDebugServer.h:
      * bindings/js/WebCoreTypedArrayController.h:
      * bindings/js/WorkerScriptDebugServer.h:
      * bridge/c/c_class.h:
      * bridge/c/c_instance.h:
      * bridge/c/c_runtime.h:
      * bridge/runtime_root.h:
      * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
      * crypto/algorithms/CryptoAlgorithmAES_KW.h:
      * crypto/algorithms/CryptoAlgorithmHMAC.h:
      * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
      * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
      * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
      * crypto/algorithms/CryptoAlgorithmSHA1.h:
      * crypto/algorithms/CryptoAlgorithmSHA224.h:
      * crypto/algorithms/CryptoAlgorithmSHA256.h:
      * crypto/algorithms/CryptoAlgorithmSHA384.h:
      * crypto/algorithms/CryptoAlgorithmSHA512.h:
      * crypto/keys/CryptoKeyAES.h:
      * crypto/keys/CryptoKeyHMAC.h:
      * crypto/keys/CryptoKeyRSA.h:
      * crypto/keys/CryptoKeySerializationRaw.h:
      * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
      * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
      * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
      * crypto/parameters/CryptoAlgorithmHmacParams.h:
      * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
      * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
      * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
      * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
      * css/CSSBasicShapes.h:
      * css/CSSCanvasValue.h:
      * css/CSSCharsetRule.h:
      * css/CSSComputedStyleDeclaration.h:
      * css/CSSCrossfadeValue.h:
      * css/CSSFilterImageValue.h:
      * css/CSSFontFaceRule.h:
      * css/CSSFontSelector.h:
      * css/CSSGroupingRule.h:
      * css/CSSHostRule.h:
      * css/CSSImportRule.h:
      * css/CSSMediaRule.h:
      * css/CSSPageRule.h:
      * css/CSSStyleRule.h:
      * css/CSSStyleSheet.h:
      * css/CSSSupportsRule.h:
      * css/CSSUnknownRule.h:
      * css/FontLoader.cpp:
      * css/FontLoader.h:
      * css/PropertySetCSSStyleDeclaration.h:
      * css/WebKitCSSFilterRule.h:
      * css/WebKitCSSKeyframeRule.h:
      * css/WebKitCSSKeyframesRule.h:
      * css/WebKitCSSRegionRule.h:
      * css/WebKitCSSViewportRule.h:
      * dom/Attr.h:
      * dom/BeforeTextInsertedEvent.h:
      * dom/BeforeUnloadEvent.h:
      * dom/CDATASection.h:
      * dom/CharacterData.h:
      * dom/ChildNodeList.h:
      * dom/Clipboard.cpp:
      * dom/ClipboardEvent.h:
      * dom/ContainerNode.h:
      * dom/DOMImplementation.cpp:
      * dom/DatasetDOMStringMap.h:
      * dom/DeviceMotionController.h:
      * dom/DeviceOrientationController.h:
      * dom/Document.h:
      * dom/DocumentEventQueue.cpp:
      * dom/DocumentEventQueue.h:
      * dom/DocumentFragment.h:
      * dom/Element.h:
      * dom/ErrorEvent.h:
      * dom/EventContext.h:
      * dom/EventTarget.h:
      * dom/FocusEvent.h:
      * dom/KeyboardEvent.h:
      * dom/LiveNodeList.h:
      * dom/MessagePort.h:
      * dom/MouseEvent.h:
      * dom/MutationRecord.cpp:
      * dom/Node.h:
      * dom/PageTransitionEvent.h:
      * dom/ProcessingInstruction.h:
      * dom/ProgressEvent.h:
      * dom/PseudoElement.h:
      * dom/ScriptExecutionContext.h:
      * dom/ShadowRoot.h:
      * dom/StaticNodeList.h:
      * dom/StyledElement.h:
      * dom/TagNodeList.h:
      * dom/TemplateContentDocumentFragment.h:
      * dom/Text.h:
      * dom/TextEvent.h:
      * dom/TouchEvent.h:
      * dom/TransitionEvent.h:
      * dom/UIEvent.h:
      * dom/WebKitAnimationEvent.h:
      * dom/WebKitNamedFlow.h:
      * dom/WebKitTransitionEvent.h:
      * editing/AppendNodeCommand.h:
      * editing/ApplyBlockElementCommand.h:
      * editing/ApplyStyleCommand.h:
      * editing/BreakBlockquoteCommand.h:
      * editing/CompositeEditCommand.h:
      * editing/DeleteButton.h:
      * editing/DeleteFromTextNodeCommand.h:
      * editing/EditCommand.h:
      * editing/InsertIntoTextNodeCommand.h:
      * editing/InsertNodeBeforeCommand.h:
      * editing/InsertTextCommand.h:
      * editing/MergeIdenticalElementsCommand.h:
      * editing/RemoveCSSPropertyCommand.h:
      * editing/RemoveNodeCommand.h:
      * editing/ReplaceNodeWithSpanCommand.h:
      * editing/SetNodeAttributeCommand.h:
      * editing/SetSelectionCommand.h:
      * editing/SpellChecker.h:
      * editing/SpellingCorrectionCommand.cpp:
      * editing/SpellingCorrectionCommand.h:
      * editing/SplitElementCommand.h:
      * editing/SplitTextNodeCommand.h:
      * editing/WrapContentsInDummySpanCommand.h:
      * editing/ios/EditorIOS.mm:
      * editing/markup.cpp:
      * fileapi/Blob.cpp:
      * fileapi/Blob.h:
      * fileapi/File.h:
      * fileapi/FileReader.h:
      * fileapi/FileThreadTask.h:
      * history/BackForwardList.h:
      * html/BaseButtonInputType.h:
      * html/BaseCheckableInputType.h:
      * html/BaseChooserOnlyDateAndTimeInputType.h:
      * html/BaseClickableWithKeyInputType.h:
      * html/BaseDateAndTimeInputType.h:
      * html/BaseTextInputType.h:
      * html/ButtonInputType.h:
      * html/CheckboxInputType.h:
      * html/ClassList.h:
      * html/ColorInputType.h:
      * html/DOMSettableTokenList.h:
      * html/DateInputType.h:
      * html/DateTimeInputType.h:
      * html/DateTimeLocalInputType.h:
      * html/EmailInputType.h:
      * html/FTPDirectoryDocument.cpp:
      * html/FileInputType.h:
      * html/FormAssociatedElement.cpp:
      * html/FormAssociatedElement.h:
      * html/HTMLAnchorElement.h:
      * html/HTMLAppletElement.h:
      * html/HTMLAreaElement.h:
      * html/HTMLBRElement.h:
      * html/HTMLBaseElement.h:
      * html/HTMLBodyElement.h:
      * html/HTMLButtonElement.h:
      * html/HTMLCanvasElement.h:
      * html/HTMLDetailsElement.cpp:
      * html/HTMLDetailsElement.h:
      * html/HTMLDivElement.h:
      * html/HTMLDocument.h:
      * html/HTMLElement.h:
      * html/HTMLEmbedElement.h:
      * html/HTMLFieldSetElement.h:
      * html/HTMLFontElement.h:
      * html/HTMLFormControlElement.h:
      * html/HTMLFormControlElementWithState.h:
      * html/HTMLFormControlsCollection.h:
      * html/HTMLFormElement.h:
      * html/HTMLFrameElement.h:
      * html/HTMLFrameElementBase.h:
      * html/HTMLFrameOwnerElement.h:
      * html/HTMLFrameSetElement.h:
      * html/HTMLHRElement.h:
      * html/HTMLHtmlElement.h:
      * html/HTMLIFrameElement.h:
      * html/HTMLImageElement.h:
      * html/HTMLImageLoader.h:
      * html/HTMLInputElement.cpp:
      * html/HTMLInputElement.h:
      * html/HTMLKeygenElement.h:
      * html/HTMLLIElement.h:
      * html/HTMLLabelElement.h:
      * html/HTMLLegendElement.h:
      * html/HTMLLinkElement.h:
      * html/HTMLMapElement.h:
      * html/HTMLMarqueeElement.h:
      * html/HTMLMediaElement.h:
      * html/HTMLMediaSession.h:
      * html/HTMLMediaSource.h:
      * html/HTMLMetaElement.h:
      * html/HTMLMeterElement.h:
      * html/HTMLModElement.h:
      * html/HTMLOListElement.h:
      * html/HTMLObjectElement.h:
      * html/HTMLOptGroupElement.h:
      * html/HTMLOptionElement.h:
      * html/HTMLOutputElement.h:
      * html/HTMLParagraphElement.h:
      * html/HTMLParamElement.h:
      * html/HTMLPlugInElement.h:
      * html/HTMLPlugInImageElement.h:
      * html/HTMLPreElement.h:
      * html/HTMLProgressElement.h:
      * html/HTMLQuoteElement.h:
      * html/HTMLScriptElement.h:
      * html/HTMLSelectElement.h:
      * html/HTMLSourceElement.h:
      * html/HTMLStyleElement.h:
      * html/HTMLSummaryElement.h:
      * html/HTMLTableCaptionElement.h:
      * html/HTMLTableCellElement.h:
      * html/HTMLTableColElement.h:
      * html/HTMLTableElement.h:
      * html/HTMLTablePartElement.h:
      * html/HTMLTableRowsCollection.h:
      * html/HTMLTableSectionElement.h:
      * html/HTMLTemplateElement.h:
      * html/HTMLTextAreaElement.h:
      * html/HTMLTextFormControlElement.h:
      * html/HTMLTitleElement.h:
      * html/HTMLTrackElement.h:
      * html/HTMLUListElement.h:
      * html/HTMLUnknownElement.h:
      * html/HTMLVideoElement.h:
      * html/HiddenInputType.h:
      * html/ImageDocument.cpp:
      * html/ImageInputType.h:
      * html/LabelableElement.h:
      * html/LabelsNodeList.h:
      * html/MediaController.h:
      * html/MonthInputType.h:
      * html/NumberInputType.h:
      * html/PasswordInputType.h:
      * html/PluginDocument.h:
      * html/RadioInputType.h:
      * html/RangeInputType.h:
      * html/ResetInputType.h:
      * html/SearchInputType.h:
      * html/SubmitInputType.h:
      * html/TelephoneInputType.h:
      * html/TextFieldInputType.h:
      * html/TextInputType.h:
      * html/TimeInputType.h:
      * html/URLInputType.h:
      * html/WeekInputType.h:
      * html/canvas/CanvasRenderingContext2D.cpp:
      * html/canvas/CanvasRenderingContext2D.h:
      * html/canvas/WebGLRenderingContext.h:
      * html/parser/HTMLDocumentParser.h:
      * html/parser/TextDocumentParser.h:
      * html/shadow/DetailsMarkerControl.h:
      * html/shadow/InsertionPoint.h:
      * html/shadow/MediaControlElementTypes.h:
      * html/shadow/MediaControlElements.h:
      * html/shadow/MediaControls.h:
      * html/shadow/MediaControlsApple.h:
      * html/shadow/MediaControlsGtk.h:
      * html/shadow/MeterShadowElement.h:
      * html/shadow/ProgressShadowElement.h:
      * html/shadow/SliderThumbElement.cpp:
      * html/shadow/SliderThumbElement.h:
      * html/shadow/SpinButtonElement.h:
      * html/shadow/TextControlInnerElements.h:
      * html/shadow/YouTubeEmbedShadowElement.h:
      * html/track/AudioTrack.h:
      * html/track/AudioTrackList.h:
      * html/track/InbandGenericTextTrack.h:
      * html/track/InbandTextTrack.h:
      * html/track/InbandWebVTTTextTrack.h:
      * html/track/LoadableTextTrack.h:
      * html/track/TextTrack.h:
      * html/track/TextTrackCue.h:
      * html/track/TextTrackCueGeneric.cpp:
      * html/track/TextTrackCueGeneric.h:
      * html/track/TextTrackList.h:
      * html/track/TrackListBase.h:
      * html/track/VideoTrack.h:
      * html/track/VideoTrackList.h:
      * html/track/WebVTTElement.h:
      * inspector/CommandLineAPIModule.h:
      * inspector/InjectedScriptCanvasModule.h:
      * inspector/InspectorApplicationCacheAgent.h:
      * inspector/InspectorCSSAgent.h:
      * inspector/InspectorCanvasAgent.h:
      * inspector/InspectorConsoleAgent.cpp:
      * inspector/InspectorConsoleAgent.h:
      * inspector/InspectorController.h:
      * inspector/InspectorDOMAgent.h:
      * inspector/InspectorDOMDebuggerAgent.h:
      * inspector/InspectorDOMStorageAgent.h:
      * inspector/InspectorDatabaseAgent.h:
      * inspector/InspectorDebuggerAgent.h:
      * inspector/InspectorHeapProfilerAgent.h:
      * inspector/InspectorIndexedDBAgent.cpp:
      * inspector/InspectorIndexedDBAgent.h:
      * inspector/InspectorInputAgent.h:
      * inspector/InspectorLayerTreeAgent.h:
      * inspector/InspectorMemoryAgent.h:
      * inspector/InspectorPageAgent.h:
      * inspector/InspectorProfilerAgent.h:
      * inspector/InspectorResourceAgent.h:
      * inspector/InspectorTimelineAgent.h:
      * inspector/InspectorWorkerAgent.h:
      * inspector/PageConsoleAgent.cpp:
      * inspector/PageConsoleAgent.h:
      * inspector/PageInjectedScriptHost.h:
      * inspector/PageInjectedScriptManager.h:
      * inspector/PageRuntimeAgent.h:
      * inspector/WorkerConsoleAgent.h:
      * inspector/WorkerDebuggerAgent.h:
      * inspector/WorkerInspectorController.h:
      * inspector/WorkerRuntimeAgent.h:
      * loader/DocumentLoader.h:
      * loader/EmptyClients.h:
      * loader/FrameNetworkingContext.h:
      * loader/ImageLoader.h:
      * loader/NavigationScheduler.cpp:
      * loader/NetscapePlugInStreamLoader.h:
      * loader/PingLoader.h:
      * loader/ResourceLoader.h:
      * loader/SubresourceLoader.h:
      * loader/WorkerThreadableLoader.h:
      * loader/appcache/ApplicationCacheGroup.cpp:
      * loader/appcache/ApplicationCacheGroup.h:
      * loader/appcache/DOMApplicationCache.h:
      * loader/archive/cf/LegacyWebArchive.h:
      * loader/cache/CachedCSSStyleSheet.h:
      * loader/cache/CachedFont.h:
      * loader/cache/CachedFontClient.h:
      * loader/cache/CachedImage.h:
      * loader/cache/CachedImageClient.h:
      * loader/cache/CachedRawResource.h:
      * loader/cache/CachedRawResourceClient.h:
      * loader/cache/CachedSVGDocument.h:
      * loader/cache/CachedSVGDocumentClient.h:
      * loader/cache/CachedScript.h:
      * loader/cache/CachedShader.h:
      * loader/cache/CachedStyleSheetClient.h:
      * loader/cache/CachedTextTrack.h:
      * loader/cache/CachedXSLStyleSheet.h:
      * loader/icon/IconLoader.h:
      * mathml/MathMLElement.h:
      * mathml/MathMLInlineContainerElement.h:
      * mathml/MathMLMathElement.h:
      * mathml/MathMLSelectElement.h:
      * mathml/MathMLTextElement.h:
      * page/CaptionUserPreferencesMediaAF.h:
      * page/Chrome.h:
      * page/DOMTimer.h:
      * page/DOMWindow.h:
      * page/DOMWindowExtension.h:
      * page/EventSource.h:
      * page/Frame.h:
      * page/FrameView.h:
      * page/PageDebuggable.h:
      * page/PageSerializer.cpp:
      * page/Performance.h:
      * page/SuspendableTimer.h:
      * page/animation/ImplicitAnimation.h:
      * page/animation/KeyframeAnimation.h:
      * page/scrolling/AsyncScrollingCoordinator.h:
      * page/scrolling/ScrollingConstraints.h:
      * page/scrolling/ScrollingStateFixedNode.h:
      * page/scrolling/ScrollingStateScrollingNode.h:
      * page/scrolling/ScrollingStateStickyNode.h:
      * page/scrolling/ScrollingTreeScrollingNode.h:
      * page/scrolling/ThreadedScrollingTree.h:
      * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
      * page/scrolling/ios/ScrollingCoordinatorIOS.h:
      * page/scrolling/ios/ScrollingTreeIOS.h:
      * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
      * page/scrolling/mac/ScrollingCoordinatorMac.h:
      * page/scrolling/mac/ScrollingTreeFixedNode.h:
      * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
      * page/scrolling/mac/ScrollingTreeStickyNode.h:
      * pdf/ios/PDFDocument.cpp:
      * pdf/ios/PDFDocument.h:
      * platform/CalculationValue.h:
      * platform/ClockGeneric.h:
      * platform/MainThreadTask.h:
      * platform/PODIntervalTree.h:
      * platform/PODRedBlackTree.h:
      * platform/RefCountedSupplement.h:
      * platform/ScrollView.h:
      * platform/Scrollbar.h:
      * platform/Timer.h:
      * platform/animation/TimingFunction.h:
      * platform/audio/AudioDSPKernelProcessor.h:
      * platform/audio/EqualPowerPanner.h:
      * platform/audio/HRTFPanner.h:
      * platform/audio/ios/AudioDestinationIOS.h:
      * platform/audio/mac/AudioDestinationMac.h:
      * platform/audio/nix/AudioDestinationNix.h:
      * platform/efl/RenderThemeEfl.h:
      * platform/efl/ScrollbarEfl.h:
      * platform/efl/ScrollbarThemeEfl.h:
      * platform/graphics/AudioTrackPrivate.h:
      * platform/graphics/BitmapImage.h:
      * platform/graphics/CrossfadeGeneratedImage.h:
      * platform/graphics/FloatPolygon.h:
      * platform/graphics/GeneratedImage.h:
      * platform/graphics/GradientImage.h:
      * platform/graphics/GraphicsLayer.h:
      * platform/graphics/InbandTextTrackPrivate.h:
      * platform/graphics/MediaPlayer.cpp:
      * platform/graphics/SimpleFontData.h:
      * platform/graphics/VideoTrackPrivate.h:
      * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
      * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
      * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
      * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
      * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
      * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
      * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
      * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
      * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
      * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
      * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
      * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
      * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
      * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
      * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
      * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
      * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
      * platform/graphics/ca/GraphicsLayerCA.h:
      * platform/graphics/ca/mac/PlatformCALayerMac.h:
      * platform/graphics/ca/mac/TileController.h:
      * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
      * platform/graphics/ca/win/PlatformCALayerWin.h:
      * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
      * platform/graphics/cg/PDFDocumentImage.h:
      * platform/graphics/efl/GraphicsContext3DPrivate.h:
      * platform/graphics/egl/GLContextFromCurrentEGL.h:
      * platform/graphics/filters/DistantLightSource.h:
      * platform/graphics/filters/FEComposite.h:
      * platform/graphics/filters/FEDisplacementMap.h:
      * platform/graphics/filters/FEFlood.h:
      * platform/graphics/filters/FilterOperation.h:
      * platform/graphics/filters/PointLightSource.h:
      * platform/graphics/filters/SpotLightSource.h:
      * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
      * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
      * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
      * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
      * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h:
      * platform/graphics/ios/MediaPlayerPrivateIOS.h:
      * platform/graphics/ios/TextTrackRepresentationIOS.h:
      * platform/graphics/surfaces/GLTransportSurface.h:
      * platform/graphics/surfaces/egl/EGLContext.h:
      * platform/graphics/surfaces/egl/EGLSurface.h:
      * platform/graphics/surfaces/egl/EGLXSurface.h:
      * platform/graphics/surfaces/glx/GLXContext.h:
      * platform/graphics/surfaces/glx/GLXSurface.h:
      * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
      * platform/graphics/texmap/TextureMapperGL.h:
      * platform/graphics/texmap/TextureMapperImageBuffer.h:
      * platform/graphics/texmap/TextureMapperLayer.h:
      * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
      * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
      * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
      * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h:
      * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
      * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
      * platform/graphics/texmap/coordinated/CoordinatedTile.h:
      * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:
      * platform/gtk/RenderThemeGtk.h:
      * platform/ios/DeviceMotionClientIOS.h:
      * platform/ios/DeviceOrientationClientIOS.h:
      * platform/ios/ScrollAnimatorIOS.h:
      * platform/ios/ScrollbarThemeIOS.h:
      * platform/ios/WebSafeGCActivityCallbackIOS.h:
      * platform/ios/WebSafeIncrementalSweeperIOS.h:
      * platform/mac/PlatformClockCA.h:
      * platform/mac/PlatformClockCM.h:
      * platform/mac/ScrollAnimatorMac.h:
      * platform/mac/ScrollbarThemeMac.h:
      * platform/mediastream/MediaStreamTrackPrivate.h:
      * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
      * platform/mediastream/mac/AVAudioCaptureSource.h:
      * platform/mediastream/mac/AVMediaCaptureSource.h:
      * platform/mediastream/mac/AVVideoCaptureSource.h:
      * platform/mediastream/mac/MediaStreamCenterMac.h:
      * platform/mock/DeviceMotionClientMock.h:
      * platform/mock/DeviceOrientationClientMock.h:
      * platform/mock/MockMediaStreamCenter.h:
      * platform/mock/RTCDataChannelHandlerMock.h:
      * platform/mock/RTCNotifiersMock.h:
      * platform/mock/RTCPeerConnectionHandlerMock.h:
      * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
      * platform/mock/mediasource/MockMediaSourcePrivate.h:
      * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
      * platform/mock/mediasource/MockSourceBufferPrivate.h:
      * platform/network/BlobRegistryImpl.h:
      * platform/network/BlobResourceHandle.cpp:
      * platform/network/BlobResourceHandle.h:
      * platform/network/ResourceHandle.h:
      * platform/network/SynchronousLoaderClient.h:
      * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
      * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
      * platform/nix/RenderThemeNix.h:
      * platform/nix/ScrollbarThemeNix.h:
      * platform/text/LocaleICU.h:
      * platform/text/LocaleNone.cpp:
      * platform/text/PlatformLocale.cpp:
      * platform/text/mac/LocaleMac.h:
      * platform/text/win/LocaleWin.h:
      * platform/win/PopupMenuWin.h:
      * plugins/PluginView.h:
      * rendering/AutoTableLayout.h:
      * rendering/ClipPathOperation.h:
      * rendering/EllipsisBox.h:
      * rendering/FilterEffectRenderer.h:
      * rendering/FixedTableLayout.h:
      * rendering/InlineElementBox.h:
      * rendering/InlineFlowBox.h:
      * rendering/InlineTextBox.h:
      * rendering/RenderBlock.h:
      * rendering/RenderBlockFlow.h:
      * rendering/RenderBox.h:
      * rendering/RenderBoxModelObject.h:
      * rendering/RenderButton.h:
      * rendering/RenderCombineText.h:
      * rendering/RenderCounter.h:
      * rendering/RenderDeprecatedFlexibleBox.h:
      * rendering/RenderDetailsMarker.h:
      * rendering/RenderElement.h:
      * rendering/RenderEmbeddedObject.h:
      * rendering/RenderFieldset.h:
      * rendering/RenderFileUploadControl.h:
      * rendering/RenderFlexibleBox.h:
      * rendering/RenderFlowThread.h:
      * rendering/RenderFrame.h:
      * rendering/RenderFrameSet.h:
      * rendering/RenderFullScreen.h:
      * rendering/RenderGrid.h:
      * rendering/RenderHTMLCanvas.h:
      * rendering/RenderIFrame.h:
      * rendering/RenderImage.h:
      * rendering/RenderImageResourceStyleImage.h:
      * rendering/RenderInline.h:
      * rendering/RenderLayer.h:
      * rendering/RenderLayerBacking.h:
      * rendering/RenderLayerCompositor.h:
      * rendering/RenderLayerFilterInfo.h:
      * rendering/RenderLayerModelObject.h:
      * rendering/RenderLineBreak.h:
      * rendering/RenderListBox.h:
      * rendering/RenderListItem.h:
      * rendering/RenderListMarker.h:
      * rendering/RenderMedia.h:
      * rendering/RenderMenuList.h:
      * rendering/RenderMeter.h:
      * rendering/RenderMultiColumnBlock.h:
      * rendering/RenderMultiColumnFlowThread.h:
      * rendering/RenderMultiColumnSet.h:
      * rendering/RenderNamedFlowFragment.h:
      * rendering/RenderNamedFlowThread.h:
      * rendering/RenderObject.h:
      * rendering/RenderProgress.h:
      * rendering/RenderQuote.h:
      * rendering/RenderRegion.h:
      * rendering/RenderRegionSet.h:
      * rendering/RenderReplaced.h:
      * rendering/RenderReplica.h:
      * rendering/RenderRuby.h:
      * rendering/RenderRubyRun.h:
      * rendering/RenderRubyText.h:
      * rendering/RenderScrollbar.h:
      * rendering/RenderScrollbarPart.h:
      * rendering/RenderScrollbarTheme.h:
      * rendering/RenderSearchField.h:
      * rendering/RenderSlider.h:
      * rendering/RenderSnapshottedPlugIn.h:
      * rendering/RenderTable.h:
      * rendering/RenderTableCaption.h:
      * rendering/RenderTableCell.h:
      * rendering/RenderTableCol.h:
      * rendering/RenderTableRow.h:
      * rendering/RenderTableSection.h:
      * rendering/RenderText.h:
      * rendering/RenderTextControl.h:
      * rendering/RenderTextControlMultiLine.h:
      * rendering/RenderTextControlSingleLine.h:
      * rendering/RenderTextFragment.h:
      * rendering/RenderTextTrackCue.h:
      * rendering/RenderThemeIOS.h:
      * rendering/RenderThemeMac.h:
      * rendering/RenderThemeSafari.h:
      * rendering/RenderThemeWin.h:
      * rendering/RenderVideo.h:
      * rendering/RenderView.h:
      * rendering/RenderWidget.h:
      * rendering/RootInlineBox.h:
      * rendering/mathml/RenderMathMLBlock.h:
      * rendering/mathml/RenderMathMLFenced.h:
      * rendering/mathml/RenderMathMLFraction.h:
      * rendering/mathml/RenderMathMLMath.h:
      * rendering/mathml/RenderMathMLOperator.h:
      * rendering/mathml/RenderMathMLRoot.h:
      * rendering/mathml/RenderMathMLRow.h:
      * rendering/mathml/RenderMathMLScripts.h:
      * rendering/mathml/RenderMathMLSpace.h:
      * rendering/mathml/RenderMathMLSquareRoot.h:
      * rendering/mathml/RenderMathMLUnderOver.h:
      * rendering/shapes/BoxShape.h:
      * rendering/shapes/PolygonShape.h:
      * rendering/shapes/RasterShape.h:
      * rendering/shapes/RectangleShape.h:
      * rendering/shapes/ShapeInsideInfo.h:
      * rendering/shapes/ShapeOutsideInfo.h:
      * rendering/style/BasicShapes.h:
      * rendering/style/ContentData.h:
      * rendering/style/StyleCachedImage.h:
      * rendering/style/StyleCachedImageSet.h:
      * rendering/style/StyleGeneratedImage.h:
      * rendering/style/StylePendingImage.h:
      * rendering/svg/RenderSVGBlock.h:
      * rendering/svg/RenderSVGContainer.h:
      * rendering/svg/RenderSVGForeignObject.h:
      * rendering/svg/RenderSVGGradientStop.h:
      * rendering/svg/RenderSVGHiddenContainer.h:
      * rendering/svg/RenderSVGImage.h:
      * rendering/svg/RenderSVGInline.h:
      * rendering/svg/RenderSVGInlineText.h:
      * rendering/svg/RenderSVGModelObject.h:
      * rendering/svg/RenderSVGPath.h:
      * rendering/svg/RenderSVGResourceClipper.h:
      * rendering/svg/RenderSVGResourceContainer.h:
      * rendering/svg/RenderSVGResourceFilter.h:
      * rendering/svg/RenderSVGResourceGradient.h:
      * rendering/svg/RenderSVGResourceLinearGradient.h:
      * rendering/svg/RenderSVGResourceMarker.h:
      * rendering/svg/RenderSVGResourceMasker.h:
      * rendering/svg/RenderSVGResourcePattern.h:
      * rendering/svg/RenderSVGResourceRadialGradient.h:
      * rendering/svg/RenderSVGResourceSolidColor.h:
      * rendering/svg/RenderSVGRoot.h:
      * rendering/svg/RenderSVGShape.cpp:
      * rendering/svg/RenderSVGShape.h:
      * rendering/svg/RenderSVGText.h:
      * rendering/svg/RenderSVGTextPath.h:
      * rendering/svg/RenderSVGViewportContainer.h:
      * rendering/svg/SVGInlineFlowBox.h:
      * rendering/svg/SVGInlineTextBox.h:
      * rendering/svg/SVGRootInlineBox.h:
      * rendering/svg/SVGTextRunRenderingContext.h:
      * storage/StorageAreaImpl.h:
      * storage/StorageNamespaceImpl.h:
      * svg/SVGAElement.h:
      * svg/SVGAltGlyphDefElement.h:
      * svg/SVGAltGlyphElement.h:
      * svg/SVGAltGlyphItemElement.h:
      * svg/SVGAnimateElement.h:
      * svg/SVGAnimateMotionElement.h:
      * svg/SVGAnimateTransformElement.h:
      * svg/SVGAnimatedAngle.h:
      * svg/SVGAnimatedBoolean.h:
      * svg/SVGAnimatedColor.h:
      * svg/SVGAnimatedEnumeration.h:
      * svg/SVGAnimatedInteger.h:
      * svg/SVGAnimatedIntegerOptionalInteger.h:
      * svg/SVGAnimatedLength.h:
      * svg/SVGAnimatedLengthList.h:
      * svg/SVGAnimatedNumber.h:
      * svg/SVGAnimatedNumberList.h:
      * svg/SVGAnimatedNumberOptionalNumber.h:
      * svg/SVGAnimatedPath.h:
      * svg/SVGAnimatedPointList.h:
      * svg/SVGAnimatedPreserveAspectRatio.h:
      * svg/SVGAnimatedRect.h:
      * svg/SVGAnimatedString.h:
      * svg/SVGAnimatedTransformList.h:
      * svg/SVGAnimationElement.h:
      * svg/SVGCircleElement.h:
      * svg/SVGClipPathElement.h:
      * svg/SVGComponentTransferFunctionElement.h:
      * svg/SVGCursorElement.h:
      * svg/SVGDefsElement.h:
      * svg/SVGDocument.h:
      * svg/SVGElement.h:
      * svg/SVGElementInstance.h:
      * svg/SVGEllipseElement.h:
      * svg/SVGFEBlendElement.h:
      * svg/SVGFEColorMatrixElement.h:
      * svg/SVGFEComponentTransferElement.h:
      * svg/SVGFECompositeElement.h:
      * svg/SVGFEConvolveMatrixElement.h:
      * svg/SVGFEDiffuseLightingElement.h:
      * svg/SVGFEDisplacementMapElement.h:
      * svg/SVGFEDropShadowElement.h:
      * svg/SVGFEGaussianBlurElement.h:
      * svg/SVGFEImageElement.h:
      * svg/SVGFELightElement.h:
      * svg/SVGFEMergeNodeElement.h:
      * svg/SVGFEMorphologyElement.h:
      * svg/SVGFEOffsetElement.h:
      * svg/SVGFESpecularLightingElement.h:
      * svg/SVGFETileElement.h:
      * svg/SVGFETurbulenceElement.h:
      * svg/SVGFilterElement.h:
      * svg/SVGFilterPrimitiveStandardAttributes.h:
      * svg/SVGFontElement.h:
      * svg/SVGFontFaceElement.h:
      * svg/SVGFontFaceFormatElement.h:
      * svg/SVGFontFaceNameElement.h:
      * svg/SVGFontFaceSrcElement.h:
      * svg/SVGFontFaceUriElement.h:
      * svg/SVGForeignObjectElement.h:
      * svg/SVGGElement.h:
      * svg/SVGGlyphElement.h:
      * svg/SVGGlyphRefElement.h:
      * svg/SVGGradientElement.h:
      * svg/SVGGraphicsElement.h:
      * svg/SVGHKernElement.h:
      * svg/SVGImageElement.h:
      * svg/SVGLineElement.h:
      * svg/SVGLinearGradientElement.h:
      * svg/SVGMPathElement.h:
      * svg/SVGMarkerElement.h:
      * svg/SVGMaskElement.h:
      * svg/SVGMetadataElement.h:
      * svg/SVGPathElement.h:
      * svg/SVGPathStringBuilder.h:
      * svg/SVGPatternElement.h:
      * svg/SVGPolyElement.h:
      * svg/SVGRadialGradientElement.h:
      * svg/SVGRectElement.h:
      * svg/SVGSVGElement.h:
      * svg/SVGScriptElement.h:
      * svg/SVGSetElement.h:
      * svg/SVGStopElement.h:
      * svg/SVGStyleElement.h:
      * svg/SVGSwitchElement.h:
      * svg/SVGSymbolElement.h:
      * svg/SVGTRefElement.cpp:
      * svg/SVGTRefElement.h:
      * svg/SVGTSpanElement.h:
      * svg/SVGTextContentElement.h:
      * svg/SVGTextElement.h:
      * svg/SVGTextPathElement.h:
      * svg/SVGTextPositioningElement.h:
      * svg/SVGTitleElement.h:
      * svg/SVGTransformable.h:
      * svg/SVGUnknownElement.h:
      * svg/SVGUseElement.h:
      * svg/SVGVKernElement.h:
      * svg/SVGViewElement.h:
      * svg/animation/SVGSMILElement.h:
      * svg/graphics/SVGImage.h:
      * svg/graphics/SVGImageForContainer.h:
      * svg/graphics/filters/SVGFilter.h:
      * svg/properties/SVGAnimatedListPropertyTearOff.h:
      * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
      * svg/properties/SVGListPropertyTearOff.h:
      * svg/properties/SVGPathSegListPropertyTearOff.h:
      * svg/properties/SVGPropertyTearOff.h:
      * testing/InternalSettings.cpp:
      * testing/Internals.cpp:
      * testing/MockCDM.cpp:
      * testing/MockCDM.h:
      * workers/AbstractWorker.h:
      * workers/DedicatedWorkerGlobalScope.h:
      * workers/DedicatedWorkerThread.h:
      * workers/SharedWorker.h:
      * workers/SharedWorkerGlobalScope.h:
      * workers/SharedWorkerThread.h:
      * workers/Worker.h:
      * workers/WorkerEventQueue.cpp:
      * workers/WorkerEventQueue.h:
      * workers/WorkerGlobalScope.h:
      * workers/WorkerMessagingProxy.h:
      * workers/WorkerObjectProxy.h:
      * workers/WorkerScriptLoader.h:
      * workers/WorkerThread.cpp:
      * xml/XMLHttpRequest.h:
      * xml/XMLHttpRequestUpload.h:
      * xml/XPathFunctions.cpp:
      * xml/XPathPath.h:
      * xml/XPathPredicate.h:
      * xml/XSLStyleSheet.h:
      
      Source/WebKit/efl:
      
      * WebCoreSupport/InspectorClientEfl.h:
      * WebCoreSupport/ProgressTrackerClientEfl.h:
      
      Source/WebKit/gtk:
      
      * WebCoreSupport/EditorClientGtk.h:
      * WebCoreSupport/InspectorClientGtk.h:
      * WebCoreSupport/ProgressTrackerClientGtk.h:
      
      Source/WebKit/ios:
      
      * Misc/EmojiFallbackFontSelector.h:
      * Storage/WebSQLiteDatabaseTrackerClient.h:
      * WebCoreSupport/PopupMenuIOS.h:
      * WebCoreSupport/SearchPopupMenuIOS.h:
      * WebCoreSupport/WebChromeClientIOS.h:
      * WebCoreSupport/WebDiskImageCacheClientIOS.h:
      
      Source/WebKit/mac:
      
      * Storage/WebDatabaseManagerClient.h:
      * Storage/WebStorageTrackerClient.h:
      * WebCoreSupport/WebAlternativeTextClient.h:
      * WebCoreSupport/WebChromeClient.h:
      * WebCoreSupport/WebContextMenuClient.h:
      * WebCoreSupport/WebDeviceOrientationClient.h:
      * WebCoreSupport/WebDragClient.h:
      * WebCoreSupport/WebEditorClient.h:
      * WebCoreSupport/WebFrameLoaderClient.h:
      * WebCoreSupport/WebFrameNetworkingContext.h:
      * WebCoreSupport/WebGeolocationClient.h:
      * WebCoreSupport/WebIconDatabaseClient.h:
      * WebCoreSupport/WebInspectorClient.h:
      * WebCoreSupport/WebNotificationClient.h:
      * WebCoreSupport/WebPlatformStrategies.h:
      * WebCoreSupport/WebProgressTrackerClient.h:
      * WebCoreSupport/WebUserMediaClient.h:
      * WebView/WebScriptDebugger.h:
      * WebView/WebViewData.h:
      
      Source/WebKit/win:
      
      * AccessibleDocument.h:
      * FullscreenVideoController.cpp:
      * WebCoreSupport/WebChromeClient.h:
      * WebCoreSupport/WebFrameLoaderClient.h:
      * WebCoreSupport/WebFrameNetworkingContext.h:
      * WebCoreSupport/WebInspectorClient.h:
      * WebHistory.h:
      
      Source/WebKit/wince:
      
      * WebCoreSupport/ChromeClientWinCE.h:
      * WebCoreSupport/ContextMenuClientWinCE.h:
      * WebCoreSupport/DragClientWinCE.h:
      * WebCoreSupport/EditorClientWinCE.h:
      * WebCoreSupport/FrameLoaderClientWinCE.h:
      * WebCoreSupport/FrameNetworkingContextWinCE.h:
      * WebCoreSupport/InspectorClientWinCE.h:
      * WebCoreSupport/PlatformStrategiesWinCE.h:
      
      Source/WebKit2:
      
      * DatabaseProcess/DatabaseProcess.h:
      * DatabaseProcess/DatabaseToWebProcessConnection.h:
      * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
      * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h:
      * NetworkProcess/AsynchronousNetworkLoaderClient.h:
      * NetworkProcess/NetworkProcess.h:
      * NetworkProcess/NetworkProcessPlatformStrategies.h:
      * NetworkProcess/NetworkResourceLoader.h:
      * NetworkProcess/RemoteNetworkingContext.h:
      * NetworkProcess/SynchronousNetworkLoaderClient.h:
      * NetworkProcess/mac/DiskCacheMonitor.h:
      * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
      * PluginProcess/PluginControllerProxy.h:
      * PluginProcess/PluginProcess.h:
      * PluginProcess/WebProcessConnection.h:
      * Shared/API/Cocoa/RemoteObjectRegistry.h:
      * Shared/APIObject.h:
      * Shared/AsyncRequest.h:
      * Shared/AsyncTask.h:
      * Shared/Authentication/AuthenticationManager.h:
      * Shared/ChildProcess.h:
      * Shared/ChildProcessProxy.h:
      * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
      * Shared/Downloads/Download.h:
      * Shared/Network/CustomProtocols/CustomProtocolManager.h:
      * Shared/WebConnection.h:
      * Shared/WebResourceBuffer.h:
      * Shared/cf/KeyedEncoder.h:
      * Shared/mac/SecItemShim.h:
      * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
      * UIProcess/API/gtk/PageClientImpl.h:
      * UIProcess/API/ios/PageClientImplIOS.h:
      * UIProcess/API/mac/PageClientImpl.h:
      * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
      * UIProcess/CoordinatedGraphics/WebView.h:
      * UIProcess/Databases/DatabaseProcessProxy.h:
      * UIProcess/Downloads/DownloadProxy.h:
      * UIProcess/DrawingAreaProxy.h:
      * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
      * UIProcess/Network/NetworkProcessProxy.h:
      * UIProcess/Notifications/WebNotificationManagerProxy.h:
      * UIProcess/Plugins/PluginProcessProxy.h:
      * UIProcess/Scrolling/RemoteScrollingTree.h:
      * UIProcess/Storage/StorageManager.h:
      * UIProcess/WebApplicationCacheManagerProxy.h:
      * UIProcess/WebBatteryManagerProxy.h:
      * UIProcess/WebConnectionToWebProcess.h:
      * UIProcess/WebContext.h:
      * UIProcess/WebCookieManagerProxy.h:
      * UIProcess/WebDatabaseManagerProxy.h:
      * UIProcess/WebFullScreenManagerProxy.h:
      * UIProcess/WebGeolocationManagerProxy.h:
      * UIProcess/WebIconDatabase.h:
      * UIProcess/WebInspectorProxy.h:
      * UIProcess/WebKeyValueStorageManager.h:
      * UIProcess/WebMediaCacheManagerProxy.h:
      * UIProcess/WebNetworkInfoManagerProxy.h:
      * UIProcess/WebOriginDataManagerProxy.h:
      * UIProcess/WebPageProxy.h:
      * UIProcess/WebProcessProxy.h:
      * UIProcess/WebResourceCacheManagerProxy.h:
      * UIProcess/WebVibrationProxy.h:
      * UIProcess/efl/PageViewportControllerClientEfl.h:
      * UIProcess/efl/WebViewEfl.h:
      * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
      * UIProcess/mac/SecItemShimProxy.h:
      * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
      * UIProcess/mac/ViewGestureController.h:
      * UIProcess/mac/WebColorPickerMac.h:
      * UIProcess/soup/WebSoupRequestManagerProxy.h:
      * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
      * WebProcess/Battery/WebBatteryManager.h:
      * WebProcess/Cookies/WebCookieManager.h:
      * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h:
      * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
      * WebProcess/Databases/WebToDatabaseProcessConnection.h:
      * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
      * WebProcess/FileAPI/BlobRegistryProxy.h:
      * WebProcess/Geolocation/WebGeolocationManager.h:
      * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
      * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
      * WebProcess/MediaCache/WebMediaCacheManager.h:
      * WebProcess/Network/NetworkProcessConnection.h:
      * WebProcess/Network/WebResourceLoadScheduler.h:
      * WebProcess/Network/WebResourceLoader.h:
      * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
      * WebProcess/Notifications/WebNotificationManager.h:
      * WebProcess/OriginData/WebOriginDataManager.h:
      * WebProcess/Plugins/Netscape/NetscapePlugin.h:
      * WebProcess/Plugins/PDF/PDFPlugin.h:
      * WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
      * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h:
      * WebProcess/Plugins/PDF/PDFPluginPasswordField.h:
      * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
      * WebProcess/Plugins/PluginProcessConnection.h:
      * WebProcess/Plugins/PluginProcessConnectionManager.h:
      * WebProcess/Plugins/PluginProxy.h:
      * WebProcess/Plugins/PluginView.h:
      * WebProcess/ResourceCache/WebResourceCacheManager.h:
      * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
      * WebProcess/Storage/StorageAreaImpl.h:
      * WebProcess/Storage/StorageAreaMap.h:
      * WebProcess/Storage/StorageNamespaceImpl.h:
      * WebProcess/WebConnectionToUIProcess.h:
      * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
      * WebProcess/WebCoreSupport/WebBatteryClient.h:
      * WebProcess/WebCoreSupport/WebChromeClient.h:
      * WebProcess/WebCoreSupport/WebColorChooser.h:
      * WebProcess/WebCoreSupport/WebContextMenuClient.h:
      * WebProcess/WebCoreSupport/WebDatabaseManager.h:
      * WebProcess/WebCoreSupport/WebDeviceProximityClient.h:
      * WebProcess/WebCoreSupport/WebDragClient.h:
      * WebProcess/WebCoreSupport/WebEditorClient.h:
      * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
      * WebProcess/WebCoreSupport/WebGeolocationClient.h:
      * WebProcess/WebCoreSupport/WebInspectorClient.h:
      * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
      * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h:
      * WebProcess/WebCoreSupport/WebNetworkInfoClient.h:
      * WebProcess/WebCoreSupport/WebNotificationClient.h:
      * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
      * WebProcess/WebCoreSupport/WebPopupMenu.h:
      * WebProcess/WebCoreSupport/WebProgressTrackerClient.h:
      * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
      * WebProcess/WebCoreSupport/WebVibrationClient.h:
      * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
      * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
      * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
      * WebProcess/WebPage/DrawingAreaImpl.h:
      * WebProcess/WebPage/EventDispatcher.h:
      * WebProcess/WebPage/ViewGestureGeometryCollector.h:
      * WebProcess/WebPage/WebBackForwardListProxy.h:
      * WebProcess/WebPage/WebPage.h:
      * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
      * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
      * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
      * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
      * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:
      * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
      * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
      * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
      * WebProcess/WebProcess.h:
      * WebProcess/soup/WebSoupRequestManager.h:
      
      Source/WTF:
      
      * wtf/Compiler.h:
      * wtf/FilePrintStream.h:
      * wtf/RunLoop.h:
      * wtf/StringPrintStream.h:
      
      Tools:
      
      * DumpRenderTree/gtk/fonts/fonts.conf:
      * Scripts/do-webcore-rename:
      Removed this rename operation from the list of contemplated future renames.
      * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
      * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
      * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
      * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
      * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162139 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2dfe6cb5
  6. 10 Jan, 2014 1 commit
    • mhahnenberg@apple.com's avatar
      Marking should be generational · 3ddd7ac6
      mhahnenberg@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=126552
      
      Reviewed by Geoffrey Garen.
      
      Source/JavaScriptCore: 
      
      Re-marking the same objects over and over is a waste of effort. This patch implements 
      the sticky mark bit algorithm (along with our already-present write barriers) to reduce 
      overhead during garbage collection caused by rescanning objects.
      
      There are now two collection modes, EdenCollection and FullCollection. EdenCollections
      only visit new objects or objects that were added to the remembered set by a write barrier.
      FullCollections are normal collections that visit all objects regardless of their 
      generation.
      
      In this patch EdenCollections do not do anything in CopiedSpace. This will be fixed in 
      https://bugs.webkit.org/show_bug.cgi?id=126555.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::visitAggregate):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlockSet::mark):
      * dfg/DFGOperations.cpp:
      * heap/CodeBlockSet.cpp:
      (JSC::CodeBlockSet::add):
      (JSC::CodeBlockSet::traceMarked):
      (JSC::CodeBlockSet::rememberCurrentlyExecutingCodeBlocks):
      * heap/CodeBlockSet.h:
      * heap/CopiedBlockInlines.h:
      (JSC::CopiedBlock::reportLiveBytes):
      * heap/CopiedSpace.cpp:
      (JSC::CopiedSpace::didStartFullCollection):
      * heap/CopiedSpace.h:
      (JSC::CopiedSpace::heap):
      * heap/Heap.cpp:
      (JSC::Heap::Heap):
      (JSC::Heap::didAbandon):
      (JSC::Heap::markRoots):
      (JSC::Heap::copyBackingStores):
      (JSC::Heap::addToRememberedSet):
      (JSC::Heap::collectAllGarbage):
      (JSC::Heap::collect):
      (JSC::Heap::didAllocate):
      (JSC::Heap::writeBarrier):
      * heap/Heap.h:
      (JSC::Heap::isInRememberedSet):
      (JSC::Heap::operationInProgress):
      (JSC::Heap::shouldCollect):
      (JSC::Heap::isCollecting):
      (JSC::Heap::isWriteBarrierEnabled):
      (JSC::Heap::writeBarrier):
      * heap/HeapOperation.h:
      * heap/MarkStack.cpp:
      (JSC::MarkStackArray::~MarkStackArray):
      (JSC::MarkStackArray::clear):
      (JSC::MarkStackArray::fillVector):
      * heap/MarkStack.h:
      * heap/MarkedAllocator.cpp:
      (JSC::isListPagedOut):
      (JSC::MarkedAllocator::isPagedOut):
      (JSC::MarkedAllocator::tryAllocateHelper):
      (JSC::MarkedAllocator::addBlock):
      (JSC::MarkedAllocator::removeBlock):
      (JSC::MarkedAllocator::reset):
      * heap/MarkedAllocator.h:
      (JSC::MarkedAllocator::MarkedAllocator):
      * heap/MarkedBlock.cpp:
      (JSC::MarkedBlock::clearMarks):
      (JSC::MarkedBlock::clearRememberedSet):
      (JSC::MarkedBlock::clearMarksWithCollectionType):
      (JSC::MarkedBlock::lastChanceToFinalize):
      * heap/MarkedBlock.h: Changed atomSize to 16 bytes because we have no objects smaller
      than 16 bytes. This is also to pay for the additional Bitmap for the remembered set.
      (JSC::MarkedBlock::didConsumeEmptyFreeList):
      (JSC::MarkedBlock::setRemembered):
      (JSC::MarkedBlock::clearRemembered):
      (JSC::MarkedBlock::atomicClearRemembered):
      (JSC::MarkedBlock::isRemembered):
      * heap/MarkedSpace.cpp:
      (JSC::MarkedSpace::~MarkedSpace):
      (JSC::MarkedSpace::resetAllocators):
      (JSC::MarkedSpace::visitWeakSets):
      (JSC::MarkedSpace::reapWeakSets):
      (JSC::VerifyMarked::operator()):
      (JSC::MarkedSpace::clearMarks):
      * heap/MarkedSpace.h:
      (JSC::ClearMarks::operator()):
      (JSC::ClearRememberedSet::operator()):
      (JSC::MarkedSpace::didAllocateInBlock):
      (JSC::MarkedSpace::clearRememberedSet):
      * heap/SlotVisitor.cpp:
      (JSC::SlotVisitor::~SlotVisitor):
      (JSC::SlotVisitor::clearMarkStack):
      * heap/SlotVisitor.h:
      (JSC::SlotVisitor::markStack):
      (JSC::SlotVisitor::sharedData):
      * heap/SlotVisitorInlines.h:
      (JSC::SlotVisitor::internalAppend):
      (JSC::SlotVisitor::unconditionallyAppend):
      (JSC::SlotVisitor::copyLater):
      (JSC::SlotVisitor::reportExtraMemoryUsage):
      (JSC::SlotVisitor::heap):
      * jit/Repatch.cpp:
      * runtime/JSGenericTypedArrayViewInlines.h:
      (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
      * runtime/JSPropertyNameIterator.h:
      (JSC::StructureRareData::setEnumerationCache):
      * runtime/JSString.cpp:
      (JSC::JSString::visitChildren):
      * runtime/StructureRareDataInlines.h:
      (JSC::StructureRareData::setPreviousID):
      (JSC::StructureRareData::setObjectToStringValue):
      * runtime/WeakMapData.cpp:
      (JSC::WeakMapData::visitChildren):
      
      Source/WTF: 
      
      * wtf/Bitmap.h:
      (WTF::WordType>::count): Added a cast that became necessary when Bitmap
      is used with smaller types than int32_t.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161615 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3ddd7ac6
  7. 09 Jan, 2014 2 commits
    • commit-queue@webkit.org's avatar
      Unreviewed, rolling out r161540. · 4a2c6f6e
      commit-queue@webkit.org authored
      http://trac.webkit.org/changeset/161540
      https://bugs.webkit.org/show_bug.cgi?id=126704
      
      Caused assertion failures on multiple tests (Requested by ap
      on #webkit).
      
      Source/JavaScriptCore:
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::visitAggregate):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlockSet::mark):
      * dfg/DFGOperations.cpp:
      * heap/CodeBlockSet.cpp:
      (JSC::CodeBlockSet::add):
      (JSC::CodeBlockSet::traceMarked):
      * heap/CodeBlockSet.h:
      * heap/CopiedBlockInlines.h:
      (JSC::CopiedBlock::reportLiveBytes):
      * heap/CopiedSpace.cpp:
      * heap/CopiedSpace.h:
      * heap/Heap.cpp:
      (JSC::Heap::Heap):
      (JSC::Heap::didAbandon):
      (JSC::Heap::markRoots):
      (JSC::Heap::copyBackingStores):
      (JSC::Heap::collectAllGarbage):
      (JSC::Heap::collect):
      (JSC::Heap::didAllocate):
      * heap/Heap.h:
      (JSC::Heap::shouldCollect):
      (JSC::Heap::isCollecting):
      (JSC::Heap::isWriteBarrierEnabled):
      (JSC::Heap::writeBarrier):
      * heap/HeapOperation.h:
      * heap/MarkStack.cpp:
      (JSC::MarkStackArray::~MarkStackArray):
      * heap/MarkStack.h:
      * heap/MarkedAllocator.cpp:
      (JSC::MarkedAllocator::isPagedOut):
      (JSC::MarkedAllocator::tryAllocateHelper):
      (JSC::MarkedAllocator::addBlock):
      (JSC::MarkedAllocator::removeBlock):
      * heap/MarkedAllocator.h:
      (JSC::MarkedAllocator::MarkedAllocator):
      (JSC::MarkedAllocator::reset):
      * heap/MarkedBlock.cpp:
      * heap/MarkedBlock.h:
      (JSC::MarkedBlock::lastChanceToFinalize):
      (JSC::MarkedBlock::didConsumeEmptyFreeList):
      (JSC::MarkedBlock::clearMarks):
      * heap/MarkedSpace.cpp:
      (JSC::MarkedSpace::~MarkedSpace):
      (JSC::MarkedSpace::resetAllocators):
      (JSC::MarkedSpace::visitWeakSets):
      (JSC::MarkedSpace::reapWeakSets):
      * heap/MarkedSpace.h:
      (JSC::ClearMarks::operator()):
      (JSC::MarkedSpace::clearMarks):
      * heap/SlotVisitor.cpp:
      (JSC::SlotVisitor::~SlotVisitor):
      * heap/SlotVisitor.h:
      (JSC::SlotVisitor::sharedData):
      * heap/SlotVisitorInlines.h:
      (JSC::SlotVisitor::internalAppend):
      (JSC::SlotVisitor::copyLater):
      (JSC::SlotVisitor::reportExtraMemoryUsage):
      * jit/Repatch.cpp:
      * runtime/JSGenericTypedArrayViewInlines.h:
      (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
      * runtime/JSPropertyNameIterator.h:
      (JSC::StructureRareData::setEnumerationCache):
      * runtime/JSString.cpp:
      (JSC::JSString::visitChildren):
      * runtime/StructureRareDataInlines.h:
      (JSC::StructureRareData::setPreviousID):
      (JSC::StructureRareData::setObjectToStringValue):
      * runtime/WeakMapData.cpp:
      (JSC::WeakMapData::visitChildren):
      
      Source/WTF:
      
      * wtf/Bitmap.h:
      (WTF::WordType>::count):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161557 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      4a2c6f6e
    • mhahnenberg@apple.com's avatar
      Marking should be generational · 196dc9ae
      mhahnenberg@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=126552
      
      Reviewed by Geoffrey Garen.
      
      Source/JavaScriptCore: 
      
      Re-marking the same objects over and over is a waste of effort. This patch implements 
      the sticky mark bit algorithm (along with our already-present write barriers) to reduce 
      overhead during garbage collection caused by rescanning objects.
      
      There are now two collection modes, EdenCollection and FullCollection. EdenCollections
      only visit new objects or objects that were added to the remembered set by a write barrier.
      FullCollections are normal collections that visit all objects regardless of their 
      generation.
      
      In this patch EdenCollections do not do anything in CopiedSpace. This will be fixed in 
      https://bugs.webkit.org/show_bug.cgi?id=126555.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::visitAggregate):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlockSet::mark):
      * dfg/DFGOperations.cpp:
      * heap/CodeBlockSet.cpp:
      (JSC::CodeBlockSet::add):
      (JSC::CodeBlockSet::traceMarked):
      (JSC::CodeBlockSet::rememberCurrentlyExecutingCodeBlocks):
      * heap/CodeBlockSet.h:
      * heap/CopiedBlockInlines.h:
      (JSC::CopiedBlock::reportLiveBytes):
      * heap/CopiedSpace.cpp:
      (JSC::CopiedSpace::didStartFullCollection):
      * heap/CopiedSpace.h:
      (JSC::CopiedSpace::heap):
      * heap/Heap.cpp:
      (JSC::Heap::Heap):
      (JSC::Heap::didAbandon):
      (JSC::Heap::markRoots):
      (JSC::Heap::copyBackingStores):
      (JSC::Heap::addToRememberedSet):
      (JSC::Heap::collectAllGarbage):
      (JSC::Heap::collect):
      (JSC::Heap::didAllocate):
      (JSC::Heap::writeBarrier):
      * heap/Heap.h:
      (JSC::Heap::isInRememberedSet):
      (JSC::Heap::operationInProgress):
      (JSC::Heap::shouldCollect):
      (JSC::Heap::isCollecting):
      (JSC::Heap::isWriteBarrierEnabled):
      (JSC::Heap::writeBarrier):
      * heap/HeapOperation.h:
      * heap/MarkStack.cpp:
      (JSC::MarkStackArray::~MarkStackArray):
      (JSC::MarkStackArray::clear):
      (JSC::MarkStackArray::fillVector):
      * heap/MarkStack.h:
      * heap/MarkedAllocator.cpp:
      (JSC::isListPagedOut):
      (JSC::MarkedAllocator::isPagedOut):
      (JSC::MarkedAllocator::tryAllocateHelper):
      (JSC::MarkedAllocator::addBlock):
      (JSC::MarkedAllocator::removeBlock):
      (JSC::MarkedAllocator::reset):
      * heap/MarkedAllocator.h:
      (JSC::MarkedAllocator::MarkedAllocator):
      * heap/MarkedBlock.cpp:
      (JSC::MarkedBlock::clearMarks):
      (JSC::MarkedBlock::clearRememberedSet):
      (JSC::MarkedBlock::clearMarksWithCollectionType):
      (JSC::MarkedBlock::lastChanceToFinalize):
      * heap/MarkedBlock.h: Changed atomSize to 16 bytes because we have no objects smaller
      than 16 bytes. This is also to pay for the additional Bitmap for the remembered set.
      (JSC::MarkedBlock::didConsumeEmptyFreeList):
      (JSC::MarkedBlock::setRemembered):
      (JSC::MarkedBlock::clearRemembered):
      (JSC::MarkedBlock::atomicClearRemembered):
      (JSC::MarkedBlock::isRemembered):
      * heap/MarkedSpace.cpp:
      (JSC::MarkedSpace::~MarkedSpace):
      (JSC::MarkedSpace::resetAllocators):
      (JSC::MarkedSpace::visitWeakSets):
      (JSC::MarkedSpace::reapWeakSets):
      (JSC::VerifyMarked::operator()):
      (JSC::MarkedSpace::clearMarks):
      * heap/MarkedSpace.h:
      (JSC::ClearMarks::operator()):
      (JSC::ClearRememberedSet::operator()):
      (JSC::MarkedSpace::didAllocateInBlock):
      (JSC::MarkedSpace::clearRememberedSet):
      * heap/SlotVisitor.cpp:
      (JSC::SlotVisitor::~SlotVisitor):
      (JSC::SlotVisitor::clearMarkStack):
      * heap/SlotVisitor.h:
      (JSC::SlotVisitor::markStack):
      (JSC::SlotVisitor::sharedData):
      * heap/SlotVisitorInlines.h:
      (JSC::SlotVisitor::internalAppend):
      (JSC::SlotVisitor::unconditionallyAppend):
      (JSC::SlotVisitor::copyLater):
      (JSC::SlotVisitor::reportExtraMemoryUsage):
      (JSC::SlotVisitor::heap):
      * jit/Repatch.cpp:
      * runtime/JSGenericTypedArrayViewInlines.h:
      (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
      * runtime/JSPropertyNameIterator.h:
      (JSC::StructureRareData::setEnumerationCache):
      * runtime/JSString.cpp:
      (JSC::JSString::visitChildren):
      * runtime/StructureRareDataInlines.h:
      (JSC::StructureRareData::setPreviousID):
      (JSC::StructureRareData::setObjectToStringValue):
      * runtime/WeakMapData.cpp:
      (JSC::WeakMapData::visitChildren):
      
      Source/WTF: 
      
      * wtf/Bitmap.h:
      (WTF::WordType>::count): Added a cast that became necessary when Bitmap
      is used with smaller types than int32_t.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161540 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      196dc9ae
  8. 06 Jan, 2014 1 commit
    • fpizlo@apple.com's avatar
      Get rid of ENABLE(VALUE_PROFILER). It's on all the time now. · ba83364c
      fpizlo@apple.com authored
      Rubber stamped by Mark Hahnenberg.
      
      Source/JavaScriptCore: 
      
      * bytecode/CallLinkStatus.cpp:
      (JSC::CallLinkStatus::computeFor):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpValueProfiling):
      (JSC::CodeBlock::dumpArrayProfiling):
      (JSC::CodeBlock::dumpRareCaseProfile):
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::setNumParameters):
      (JSC::CodeBlock::shrinkToFit):
      (JSC::CodeBlock::shouldOptimizeNow):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::valueProfileForBytecodeOffset):
      * bytecode/GetByIdStatus.cpp:
      (JSC::GetByIdStatus::computeForChain):
      (JSC::GetByIdStatus::computeFor):
      * bytecode/LazyOperandValueProfile.cpp:
      * bytecode/LazyOperandValueProfile.h:
      * bytecode/PutByIdStatus.cpp:
      (JSC::PutByIdStatus::computeFor):
      * bytecode/ValueProfile.h:
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::newArrayProfile):
      (JSC::BytecodeGenerator::newArrayAllocationProfile):
      (JSC::BytecodeGenerator::emitProfiledOpcode):
      * jit/GPRInfo.h:
      * jit/JIT.cpp:
      (JSC::JIT::JIT):
      (JSC::JIT::privateCompileSlowCases):
      (JSC::JIT::privateCompile):
      * jit/JIT.h:
      * jit/JITArithmetic.cpp:
      (JSC::JIT::compileBinaryArithOp):
      (JSC::JIT::emit_op_mul):
      (JSC::JIT::emit_op_div):
      * jit/JITArithmetic32_64.cpp:
      (JSC::JIT::emitBinaryDoubleOp):
      (JSC::JIT::emit_op_mul):
      (JSC::JIT::emitSlow_op_mul):
      (JSC::JIT::emit_op_div):
      * jit/JITCall.cpp:
      (JSC::JIT::emitPutCallResult):
      * jit/JITCall32_64.cpp:
      (JSC::JIT::emitPutCallResult):
      * jit/JITInlines.h:
      (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
      (JSC::JIT::emitValueProfilingSite):
      (JSC::JIT::emitArrayProfilingSiteForBytecodeIndex):
      (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase):
      (JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase):
      (JSC::arrayProfileSaw):
      (JSC::JIT::chooseArrayMode):
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_get_argument_by_val):
      * jit/JITOpcodes32_64.cpp:
      (JSC::JIT::emit_op_get_argument_by_val):
      * jit/JITPropertyAccess.cpp:
      (JSC::JIT::emit_op_get_by_val):
      (JSC::JIT::emitSlow_op_get_by_val):
      (JSC::JIT::emit_op_get_by_id):
      (JSC::JIT::emit_op_get_from_scope):
      * jit/JITPropertyAccess32_64.cpp:
      (JSC::JIT::emit_op_get_by_val):
      (JSC::JIT::emitSlow_op_get_by_val):
      (JSC::JIT::emit_op_get_by_id):
      (JSC::JIT::emit_op_get_from_scope):
      * llint/LLIntOfflineAsmConfig.h:
      * llint/LLIntSlowPaths.cpp:
      (JSC::LLInt::LLINT_SLOW_PATH_DECL):
      * llint/LowLevelInterpreter.asm:
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * profiler/ProfilerBytecodeSequence.cpp:
      (JSC::Profiler::BytecodeSequence::BytecodeSequence):
      * runtime/CommonSlowPaths.cpp:
      
      Source/WTF: 
      
      * wtf/Platform.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161364 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      ba83364c
  9. 29 Dec, 2013 1 commit
    • fpizlo@apple.com's avatar
      Get rid of DFG forward exiting · 9df7fef8
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125531
      
      Reviewed by Oliver Hunt.
              
      This finally gets rid of forward exiting. Forward exiting was always a fragile concept
      since it involved the compiler trying to figure out how to "roll forward" the
      execution from some DFG node to the next bytecode index. It was always easy to find
      counterexamples where it broke, and it has always served as an obstacle to adding
      compiler improvements - the latest being http://webkit.org/b/125523, which tried to
      make DCE work for more things.
              
      This change finishes the work of removing forward exiting. A lot of forward exiting
      was already removed in some other bugs, but SetLocal still did forward exits. SetLocal
      is in many ways the hardest to remove, since the forward exiting of SetLocal also
      implied that any conversion nodes inserted before the SetLocal would then also be
      marked as forward-exiting. Hence SetLocal's forward-exiting made a bunch of other
      things also forward-exiting, and this was always a source of weirdo bugs.
              
      SetLocal must be able to exit in case it performs a hoisted type speculation. Nodes
      inserted just before SetLocal must also be able to exit - for example type check
      hoisting may insert a CheckStructure, or fixup phase may insert something like
      Int32ToDouble. But if any of those nodes tried to backward exit, then this could lead
      to the reexecution of a side-effecting operation, for example:
              
          a: Call(...)
          b: SetLocal(@a, r1)
              
      For a long time it seemed like SetLocal *had* to exit forward because of this. But
      this change side-steps the problem by changing the ByteCodeParser to always emit a
      kind of "two-phase commit" for stores to local variables. Now when the ByteCodeParser
      wishes to store to a local, it first emits a MovHint and then enqueues a SetLocal.
      The SetLocal isn't actually emitted until the beginning of the next bytecode
      instruction (which the exception of op_enter and op_ret, which emit theirs immediately
      since it's always safe to reexecute those bytecode instructions and since deferring
      SetLocals would be weird there - op_enter has many SetLocals and op_ret is a set
      followed by a jump in case of inlining, so we'd have to emit the SetLocal "after" the
      jump and that would be awkward). This means that the above IR snippet would look
      something like:
              
          a: Call(..., bc#42)
          b: MovHint(@a, r1, bc#42)
          c: SetLocal(@a, r1, bc#47)
              
      Where the SetLocal exits "backwards" but appears at the beginning of the next bytecode
      instruction. This means that by the time we get to that SetLocal, the OSR exit
      analysis already knows that r1 is associated with @a, and it means that the SetLocal
      or anything hoisted above it can exit backwards as normal.
              
      This change also means that the "forward rewiring" can be killed. Previously, we might
      have inserted a conversion node on SetLocal and then the SetLocal died (i.e. turned
      into a MovHint) and the conversion node either died completely or had its lifetime
      truncated to be less than the actual value's bytecode lifetime. This no longer happens
      since conversion nodes are only inserted at SetLocals.
              
      More precisely, this change introduces two laws that we were basically already
      following anyway:
              
      1) A MovHint's child should never be changed except if all other uses of that child
         are also replaced. Specifically, this prohibits insertion of conversion nodes at
         MovHints.
              
      2) Anytime any child is replaced with something else, and all other uses aren't also
         replaced, we must insert a Phantom use of the original child.
      
      This is a slight compile-time regression but has no effect on code-gen. It unlocks a
      bunch of optimization opportunities so I think it's worth it.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpAssumingJITType):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::instructionCount):
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      (JSC::DFG::ArgumentsSimplificationPhase::run):
      * dfg/DFGArrayifySlowPathGenerator.h:
      (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
      * dfg/DFGBackwardsPropagationPhase.cpp:
      (JSC::DFG::BackwardsPropagationPhase::propagate):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::setDirect):
      (JSC::DFG::ByteCodeParser::DelayedSetLocal::DelayedSetLocal):
      (JSC::DFG::ByteCodeParser::DelayedSetLocal::execute):
      (JSC::DFG::ByteCodeParser::handleInlining):
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGCSEPhase.cpp:
      (JSC::DFG::CSEPhase::eliminate):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGCommon.h:
      * dfg/DFGConstantFoldingPhase.cpp:
      (JSC::DFG::ConstantFoldingPhase::foldConstants):
      * dfg/DFGDCEPhase.cpp:
      (JSC::DFG::DCEPhase::run):
      (JSC::DFG::DCEPhase::fixupBlock):
      (JSC::DFG::DCEPhase::cleanVariables):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      (JSC::DFG::FixupPhase::fixEdge):
      (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
      * dfg/DFGLICMPhase.cpp:
      (JSC::DFG::LICMPhase::run):
      (JSC::DFG::LICMPhase::attemptHoist):
      * dfg/DFGMinifiedNode.cpp:
      (JSC::DFG::MinifiedNode::fromNode):
      * dfg/DFGMinifiedNode.h:
      (JSC::DFG::belongsInMinifiedGraph):
      (JSC::DFG::MinifiedNode::constantNumber):
      (JSC::DFG::MinifiedNode::weakConstant):
      * dfg/DFGNode.cpp:
      (JSC::DFG::Node::hasVariableAccessData):
      * dfg/DFGNode.h:
      (JSC::DFG::Node::convertToPhantom):
      (JSC::DFG::Node::convertToPhantomUnchecked):
      (JSC::DFG::Node::convertToIdentity):
      (JSC::DFG::Node::containsMovHint):
      (JSC::DFG::Node::hasUnlinkedLocal):
      (JSC::DFG::Node::willHaveCodeGenOrOSR):
      * dfg/DFGNodeFlags.cpp:
      (JSC::DFG::dumpNodeFlags):
      * dfg/DFGNodeFlags.h:
      * dfg/DFGNodeType.h:
      * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
      (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
      * dfg/DFGOSREntrypointCreationPhase.cpp:
      (JSC::DFG::OSREntrypointCreationPhase::run):
      * dfg/DFGOSRExit.cpp:
      * dfg/DFGOSRExit.h:
      * dfg/DFGOSRExitBase.cpp:
      * dfg/DFGOSRExitBase.h:
      (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSite):
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
      * dfg/DFGSSAConversionPhase.cpp:
      (JSC::DFG::SSAConversionPhase::run):
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::speculationCheck):
      (JSC::DFG::SpeculativeJIT::emitInvalidationPoint):
      (JSC::DFG::SpeculativeJIT::typeCheck):
      (JSC::DFG::SpeculativeJIT::compileMovHint):
      (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
      (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
      (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
      (JSC::DFG::SpeculativeJIT::needsTypeCheck):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGTypeCheckHoistingPhase.cpp:
      (JSC::DFG::TypeCheckHoistingPhase::run):
      (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
      (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
      * dfg/DFGValidate.cpp:
      (JSC::DFG::Validate::validateCPS):
      * dfg/DFGVariableAccessData.h:
      (JSC::DFG::VariableAccessData::VariableAccessData):
      * dfg/DFGVariableEventStream.cpp:
      (JSC::DFG::VariableEventStream::reconstruct):
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileGetArgument):
      (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
      (JSC::FTL::LowerDFGToLLVM::compileMovHint):
      (JSC::FTL::LowerDFGToLLVM::compileZombieHint):
      (JSC::FTL::LowerDFGToLLVM::compileInt32ToDouble):
      (JSC::FTL::LowerDFGToLLVM::speculate):
      (JSC::FTL::LowerDFGToLLVM::typeCheck):
      (JSC::FTL::LowerDFGToLLVM::appendTypeCheck):
      (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
      (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
      * ftl/FTLOSRExit.cpp:
      * ftl/FTLOSRExit.h:
      * tests/stress/dead-int32-to-double.js: Added.
      (foo):
      * tests/stress/dead-uint32-to-number.js: Added.
      (foo):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161126 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      9df7fef8
  10. 02 Dec, 2013 1 commit
    • fpizlo@apple.com's avatar
      Stores to local captured variables should be intercepted · 0309686b
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124883
      
      Source/JavaScriptCore: 
      
      Reviewed by Mark Hahnenberg.
              
      Previously, in bytecode, you could assign to a captured variable just as you would
      assign to any other kind of variable. This complicates closure variable constant
      inference because we don't have any place where we can intercept stores to captured
      variables in the LLInt.
              
      This patch institutes a policy that only certain instructions can store to captured
      variables. If you interpret those instructions and you are required to notifyWrite()
      then you need to check if the relevant variable is captured. Those instructions are
      tracked in CodeBlock.cpp's VerifyCapturedDef. The main one is simply op_captured_mov.
      In the future, we'll probably modify those instructions to have a pointer directly to
      the VariableWatchpointSet; but for now we just introduce the captured instructions as
      placeholders.
              
      In order to validate that the placeholders are inserted correctly, this patch improves
      the CodeBlock validation to be able to inspect every def in the bytecode. To do that,
      this patch refactors the liveness analysis' use/def calculator to be reusable; it now
      takes a functor for each use or def.
              
      In the process of refactoring the liveness analysis, I noticed that op_enter was
      claiming to def all callee registers. That's wrong; it only defs the non-temporary
      variables. Making that change revealed preexisting bugs in the liveness analysis, since
      now the validator would pick up cases where the bytecode claimed to use a temporary and
      the def calculator never noticed the definition (or the converse - where the bytecode
      was actually not using a temporary but the liveness analysis thought that it was a
      use). This patch fixes a few of those bugs.
      
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/BytecodeLivenessAnalysis.cpp:
      (JSC::stepOverInstruction):
      * bytecode/BytecodeUseDef.h: Added.
      (JSC::computeUsesForBytecodeOffset):
      (JSC::computeDefsForBytecodeOffset):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::isCaptured):
      (JSC::CodeBlock::validate):
      * bytecode/CodeBlock.h:
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::BytecodeGenerator):
      (JSC::BytecodeGenerator::resolveCallee):
      (JSC::BytecodeGenerator::emitMove):
      (JSC::BytecodeGenerator::isCaptured):
      (JSC::BytecodeGenerator::local):
      (JSC::BytecodeGenerator::constLocal):
      (JSC::BytecodeGenerator::emitNewFunction):
      (JSC::BytecodeGenerator::emitLazyNewFunction):
      (JSC::BytecodeGenerator::emitNewFunctionInternal):
      * bytecompiler/BytecodeGenerator.h:
      (JSC::Local::Local):
      (JSC::Local::isCaptured):
      (JSC::Local::captureMode):
      (JSC::BytecodeGenerator::captureMode):
      (JSC::BytecodeGenerator::emitNode):
      (JSC::BytecodeGenerator::pushOptimisedForIn):
      * bytecompiler/NodesCodegen.cpp:
      (JSC::PostfixNode::emitResolve):
      (JSC::PrefixNode::emitResolve):
      (JSC::ReadModifyResolveNode::emitBytecode):
      (JSC::AssignResolveNode::emitBytecode):
      (JSC::ConstDeclNode::emitCodeSingle):
      (JSC::ForInNode::emitBytecode):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGCapabilities.cpp:
      (JSC::DFG::capabilityLevel):
      * jit/JIT.cpp:
      (JSC::JIT::privateCompileMainPass):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/SymbolTable.h:
      (JSC::SymbolTable::isCaptured):
      
      LayoutTests: 
      
      Reviewed by Mark Hahnenberg.
      
      * js/regress/captured-assignments-expected.txt: Added.
      * js/regress/captured-assignments.html: Added.
      * js/regress/script-tests/captured-assignments.js: Added.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159943 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      0309686b
  11. 27 Nov, 2013 2 commits
    • fpizlo@apple.com's avatar
      Do bytecode validation as part of testing · 2eb67eca
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124913
      
      Source/JavaScriptCore: 
      
      Reviewed by Oliver Hunt.
              
      Also fix some small bugs in the bytecode liveness analysis that I found by doing
      this validation thingy.
      
      * bytecode/BytecodeLivenessAnalysis.cpp:
      (JSC::isValidRegisterForLiveness):
      (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::validate):
      (JSC::CodeBlock::beginValidationDidFail):
      (JSC::CodeBlock::endValidationDidFail):
      * bytecode/CodeBlock.h:
      * runtime/Executable.cpp:
      (JSC::ScriptExecutable::prepareForExecutionImpl):
      * runtime/Options.h:
      
      Source/WTF: 
      
      Reviewed by Oliver Hunt.
      
      * GNUmakefile.list.am:
      * WTF.vcxproj/WTF.vcxproj:
      * WTF.xcodeproj/project.pbxproj:
      * wtf/CMakeLists.txt:
      * wtf/FastBitVector.cpp: Added.
      (WTF::FastBitVector::dump):
      * wtf/FastBitVector.h:
      (WTF::FastBitVector::resize):
      (WTF::FastBitVector::bitCount):
      (WTF::FastBitVector::arrayLength):
      
      Tools: 
      
      Reviewed by Oliver Hunt.
      
      * Scripts/run-jsc-stress-tests:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159825 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2eb67eca
    • fpizlo@apple.com's avatar
      Create a new SymbolTable every time code is loaded so that the watchpoints don't get reused · 022f368a
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124824
      
      Reviewed by Oliver Hunt.
              
      This helps with one shot closure inference as well as closure variable constant
      inference, since without this, if code was reloaded from the cache then we would
      think that the first run was actually an Nth run. This would cause us to think that
      the watchpoint(s) should all be invalidated.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::stronglyVisitStrongReferences):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::symbolTable):
      * runtime/Executable.cpp:
      (JSC::FunctionExecutable::symbolTable):
      * runtime/Executable.h:
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTable::clone):
      * runtime/SymbolTable.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159795 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      022f368a
  12. 23 Nov, 2013 1 commit
    • fpizlo@apple.com's avatar
      CodeBlock::m_numCalleeRegisters shouldn't also mean frame size, frame size... · 81bb8bb3
      fpizlo@apple.com authored
      CodeBlock::m_numCalleeRegisters shouldn't also mean frame size, frame size needed for exit, or any other unrelated things
      https://bugs.webkit.org/show_bug.cgi?id=124793
      
      Reviewed by Mark Hahnenberg.
              
      Now m_numCalleeRegisters always refers to the number of locals that the attached
      bytecode uses. It never means anything else.
              
      For frame size, we now have it lazily computed from m_numCalleeRegisters for the
      baseline engines and we have it stored in DFG::CommonData for the optimizing JITs.
              
      For frame-size-needed-at-exit, we store that in DFG::CommonData, too.
              
      The code no longer implies that there is any arithmetic relationship between
      m_numCalleeRegisters and frameSize. Previously it implied that the latter is greater
      than the former.
              
      The code no longer implies that there is any arithmetic relationship between the
      frame Size and the frame-size-needed-at-exit. Previously it implied that the latter
      is greater that the former.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::frameRegisterCount):
      * bytecode/CodeBlock.h:
      * dfg/DFGCommonData.h:
      (JSC::DFG::CommonData::CommonData):
      (JSC::DFG::CommonData::requiredRegisterCountForExecutionAndExit):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::frameRegisterCount):
      (JSC::DFG::Graph::requiredRegisterCountForExit):
      (JSC::DFG::Graph::requiredRegisterCountForExecutionAndExit):
      * dfg/DFGGraph.h:
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::link):
      (JSC::DFG::JITCompiler::compileFunction):
      * dfg/DFGOSREntry.cpp:
      (JSC::DFG::prepareOSREntry):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      (JSC::DFG::VirtualRegisterAllocationPhase::run):
      * ftl/FTLLink.cpp:
      (JSC::FTL::link):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
      * ftl/FTLOSREntry.cpp:
      (JSC::FTL::prepareOSREntry):
      * interpreter/CallFrame.cpp:
      (JSC::CallFrame::frameExtentInternal):
      * interpreter/JSStackInlines.h:
      (JSC::JSStack::pushFrame):
      * jit/JIT.h:
      (JSC::JIT::frameRegisterCountFor):
      * jit/JITOperations.cpp:
      * llint/LLIntEntrypoint.cpp:
      (JSC::LLInt::frameRegisterCountFor):
      * llint/LLIntEntrypoint.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159721 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      81bb8bb3
  13. 22 Nov, 2013 2 commits
    • fpizlo@apple.com's avatar
      Combine SymbolTable and SharedSymbolTable · bbddb5bf
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124761
      
      Reviewed by Geoffrey Garen.
              
      SymbolTable was never used directly; we now always used SharedSymbolTable. So, this
      gets rid of SymbolTable and renames SharedSymbolTable to SymbolTable.
      
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::symbolTable):
      * bytecode/UnlinkedCodeBlock.h:
      (JSC::UnlinkedFunctionExecutable::symbolTable):
      (JSC::UnlinkedCodeBlock::symbolTable):
      (JSC::UnlinkedCodeBlock::finishCreation):
      * bytecompiler/BytecodeGenerator.h:
      (JSC::BytecodeGenerator::symbolTable):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGStackLayoutPhase.cpp:
      (JSC::DFG::StackLayoutPhase::run):
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::symbolTableFor):
      * runtime/Arguments.h:
      (JSC::Arguments::finishCreation):
      * runtime/Executable.h:
      (JSC::FunctionExecutable::symbolTable):
      * runtime/JSActivation.h:
      (JSC::JSActivation::create):
      (JSC::JSActivation::JSActivation):
      (JSC::JSActivation::registersOffset):
      (JSC::JSActivation::allocationSize):
      * runtime/JSSymbolTableObject.h:
      (JSC::JSSymbolTableObject::symbolTable):
      (JSC::JSSymbolTableObject::JSSymbolTableObject):
      (JSC::JSSymbolTableObject::finishCreation):
      * runtime/JSVariableObject.h:
      (JSC::JSVariableObject::JSVariableObject):
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTable::destroy):
      (JSC::SymbolTable::SymbolTable):
      * runtime/SymbolTable.h:
      (JSC::SymbolTable::create):
      (JSC::SymbolTable::createStructure):
      * runtime/VM.cpp:
      (JSC::VM::VM):
      * runtime/VM.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159713 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      bbddb5bf
    • fpizlo@apple.com's avatar
      Get rid of CodeBlock::dumpStatistics() · 8dd93448
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124762
      
      Reviewed by Mark Hahnenberg.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::~CodeBlock):
      * bytecode/CodeBlock.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159697 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8dd93448
  14. 18 Nov, 2013 1 commit
    • fpizlo@apple.com's avatar
      FTL should have an explicit notion of bytecode liveness · 002405c0
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124181
      
      Source/JavaScriptCore: 
      
      Reviewed by Sam Weinig.
              
      This makes FTL OSR exit use bytecode liveness analysis to determine which variables
      to include values for. The decision of how to get the values of variables is based on
      forward propagation of MovHints and SetLocals.
              
      This fixes a bunch of bugs (like https://bugs.webkit.org/show_bug.cgi?id=124138 but
      also others that I noticed when I started writing more targetted tests) and allows us
      to remove some sketchy code.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/BytecodeBasicBlock.h:
      * bytecode/BytecodeLivenessAnalysis.cpp:
      (JSC::isValidRegisterForLiveness):
      (JSC::setForOperand):
      (JSC::computeUsesForBytecodeOffset):
      (JSC::computeDefsForBytecodeOffset):
      (JSC::stepOverInstruction):
      (JSC::computeLocalLivenessForBytecodeOffset):
      (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
      (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
      (JSC::getLivenessInfo):
      (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeOffset):
      (JSC::BytecodeLivenessAnalysis::computeFullLiveness):
      * bytecode/BytecodeLivenessAnalysis.h:
      * bytecode/BytecodeLivenessAnalysisInlines.h: Added.
      (JSC::operandIsAlwaysLive):
      (JSC::operandThatIsNotAlwaysLiveIsLive):
      (JSC::operandIsLive):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::captureCount):
      (JSC::CodeBlock::captureStart):
      (JSC::CodeBlock::captureEnd):
      * bytecode/CodeOrigin.cpp:
      (JSC::InlineCallFrame::dumpInContext):
      * bytecode/FullBytecodeLiveness.h: Added.
      (JSC::FullBytecodeLiveness::FullBytecodeLiveness):
      (JSC::FullBytecodeLiveness::getOut):
      (JSC::FullBytecodeLiveness::operandIsLive):
      (JSC::FullBytecodeLiveness::getLiveness):
      * dfg/DFGAvailability.cpp: Added.
      (JSC::DFG::Availability::dump):
      (JSC::DFG::Availability::dumpInContext):
      * dfg/DFGAvailability.h: Added.
      (JSC::DFG::Availability::Availability):
      (JSC::DFG::Availability::unavailable):
      (JSC::DFG::Availability::withFlush):
      (JSC::DFG::Availability::withNode):
      (JSC::DFG::Availability::withUnavailableNode):
      (JSC::DFG::Availability::nodeIsUndecided):
      (JSC::DFG::Availability::nodeIsUnavailable):
      (JSC::DFG::Availability::hasNode):
      (JSC::DFG::Availability::node):
      (JSC::DFG::Availability::flushedAt):
      (JSC::DFG::Availability::operator!):
      (JSC::DFG::Availability::operator==):
      (JSC::DFG::Availability::merge):
      (JSC::DFG::Availability::mergeNodes):
      (JSC::DFG::Availability::unavailableMarker):
      * dfg/DFGBasicBlock.h:
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGDisassembler.cpp:
      (JSC::DFG::Disassembler::Disassembler):
      * dfg/DFGFlushFormat.cpp:
      (WTF::printInternal):
      * dfg/DFGFlushFormat.h:
      (JSC::DFG::resultFor):
      (JSC::DFG::useKindFor):
      (JSC::DFG::dataFormatFor):
      * dfg/DFGFlushedAt.cpp:
      (JSC::DFG::FlushedAt::dump):
      * dfg/DFGFlushedAt.h:
      (JSC::DFG::FlushedAt::FlushedAt):
      (JSC::DFG::FlushedAt::merge):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::dump):
      (JSC::DFG::Graph::livenessFor):
      (JSC::DFG::Graph::isLiveInBytecode):
      * dfg/DFGGraph.h:
      (JSC::DFG::Graph::baselineCodeBlockFor):
      * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
      (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
      * dfg/DFGOSRAvailabilityAnalysisPhase.h:
      * dfg/DFGPlan.cpp:
      (JSC::DFG::Plan::compileInThreadImpl):
      * dfg/DFGResurrectionForValidationPhase.cpp: Added.
      (JSC::DFG::ResurrectionForValidationPhase::ResurrectionForValidationPhase):
      (JSC::DFG::ResurrectionForValidationPhase::run):
      (JSC::DFG::performResurrectionForValidation):
      * dfg/DFGResurrectionForValidationPhase.h: Added.
      * dfg/DFGSSAConversionPhase.cpp:
      (JSC::DFG::SSAConversionPhase::run):
      * dfg/DFGValueSource.h:
      (JSC::DFG::ValueSource::forFlushFormat):
      * dfg/DFGVariableAccessData.h:
      * ftl/FTLExitValue.cpp:
      (JSC::FTL::ExitValue::dumpInContext):
      * ftl/FTLInlineCacheSize.cpp:
      (JSC::FTL::sizeOfGetById):
      * ftl/FTLLocation.cpp:
      (JSC::FTL::Location::gpr):
      (JSC::FTL::Location::fpr):
      (JSC::FTL::Location::directGPR):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
      (JSC::FTL::LowerDFGToLLVM::compileBlock):
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
      (JSC::FTL::LowerDFGToLLVM::compileZombieHint):
      (JSC::FTL::LowerDFGToLLVM::compilePutById):
      (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
      (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
      (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
      (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
      (JSC::FTL::LowerDFGToLLVM::buildExitArguments):
      (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
      (JSC::FTL::LowerDFGToLLVM::observeMovHint):
      * ftl/FTLOutput.h:
      (JSC::FTL::Output::alloca):
      * ftl/FTLValueSource.cpp: Removed.
      * ftl/FTLValueSource.h: Removed.
      * llvm/LLVMAPIFunctions.h:
      * runtime/DumpContext.cpp:
      (JSC::DumpContext::DumpContext):
      * runtime/DumpContext.h:
      * runtime/Options.h:
      * runtime/SymbolTable.h:
      (JSC::SharedSymbolTable::captureStart):
      (JSC::SharedSymbolTable::captureEnd):
      (JSC::SharedSymbolTable::captureCount):
      
      Tools: 
      
      Reviewed by Mark Hahnenberg.
      
      * Scripts/run-jsc-stress-tests:
      
      LayoutTests: 
      
      Reviewed by Mark Hahnenberg or Sam Weinig.
              
      I totally added this test after the rest of the patch was r+'d. Under the right tier-up
      modes this triggers one of the bugs that the rest of the patch is trying to avoid.
      
      * js/regress/script-tests/weird-inlining-const-prop.js: Added.
      (foo):
      (bar):
      (fuzz):
      (testImpl):
      (test):
      * js/regress/weird-inlining-const-prop-expected.txt: Added.
      * js/regress/weird-inlining-const-prop.html: Added.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159394 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      002405c0
  15. 12 Nov, 2013 3 commits
    • fpizlo@apple.com's avatar
      Liveness analysis should take less memory in CodeBlock when it is unused · d0f35b6b
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124225
      
      Reviewed by Mark Hahnenberg.
              
      Basically, I turned CodeBlock::m_livenessAnalysis into a pointer that is null by
      default.
      
      * bytecode/BytecodeLivenessAnalysis.cpp:
      (JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
      (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
      (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
      (JSC::BytecodeLivenessAnalysis::dumpResults):
      (JSC::BytecodeLivenessAnalysis::compute):
      * bytecode/BytecodeLivenessAnalysis.h:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::livenessAnalysis):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159141 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d0f35b6b
    • mhahnenberg@apple.com's avatar
      CodeBlocks should be able to determine bytecode liveness · 3811e215
      mhahnenberg@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=118546
      
      Reviewed by Filip Pizlo.
      
      This will simplify some things in the DFG related to OSR exits and determining 
      which bytecode variables are live at which points during execution. It will
      also be useful for making our conservative GC scan more precise. Currently it 
      doesn't properly account for liveness while the DFG is running, so it will be 
      off by default behing a runtime Options flag.
      
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/BytecodeBasicBlock.cpp: Added.
      (JSC::isBranch): Used to determine the end of basic blocks.
      (JSC::isUnconditionalBranch): Used to determine when a branch at the end of a 
      basic block can't possibly fall through to the next basic block in program order.
      (JSC::isTerminal): Also used to detect the end of a block.
      (JSC::isThrow):
      (JSC::isJumpTarget): Used to correctly separate basic blocks. Any jump destination 
      must be the head of its own basic block.
      (JSC::linkBlocks): Links two blocks together in a bi-direcitonal fashion.
      (JSC::computeBytecodeBasicBlocks): Creates a set of basic blocks given a particular 
      CodeBlock and links them together.
      * bytecode/BytecodeBasicBlock.h: Added.
      (JSC::BytecodeBasicBlock::isEntryBlock): Entry blocks are a special basic blocks 
      that indicate the beginning of the function.
      (JSC::BytecodeBasicBlock::isExitBlock): Exit blocks are a special basic block that 
      all blocks that exit the function have as a successor. Entry and exit blocks allows 
      the various code paths to be more regular.
      (JSC::BytecodeBasicBlock::leaderBytecodeOffset): The leader bytecode offset is the 
      bytecode offset of the first instruction in the block.
      (JSC::BytecodeBasicBlock::totalBytecodeLength): The total length of all the bytecodes 
      in this block.
      (JSC::BytecodeBasicBlock::bytecodeOffsets): The bytecode offsets in this particular 
      basic block. This Vector allows us to iterate over the bytecodes in reverse order 
      which wouldn't be possible normally since they are of variable size.
      (JSC::BytecodeBasicBlock::addPredecessor): Links a block to a specified predecessor. 
      Only creates one direction of the link.
      (JSC::BytecodeBasicBlock::addSuccessor): Same as addPredecessor, but for successors.
      (JSC::BytecodeBasicBlock::predecessors): Getter for predecessors.
      (JSC::BytecodeBasicBlock::successors): Getter for successors.
      (JSC::BytecodeBasicBlock::in): Getter for the liveness info at the head of the block.
      (JSC::BytecodeBasicBlock::out): Getter for the liveness info at  the tail of the block.
      (JSC::BytecodeBasicBlock::BytecodeBasicBlock):
      (JSC::BytecodeBasicBlock::addBytecodeLength): When creating basic blocks we call 
      this function when we want to add the next bytecode in program order to this block.
      * bytecode/BytecodeLivenessAnalysis.cpp: Added.
      (JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
      (JSC::numberOfCapturedVariables): Convenience wrapper. Returns the
      number of captured variables for a particular CodeBlock, or 0 if 
      the CodeBlock has no SymbolTable.
      (JSC::captureStart): Ditto, but for captureStart().
      (JSC::captureEnd): Ditto, but for captureEnd().
      (JSC::isValidRegisterForLiveness): Returns true if the liveness analysis should 
      track the liveness of a particular operand. We ignore constants, arguments, and 
      captured variables. We ignore arguments because they're live for the duration of 
      a function call. We ignore captured variables because we also treat them as live 
      for the duration of the function. This could probably be improved to be more precise, 
      but it didn't seem worth it for now.
      (JSC::setForOperand): Convenience wrapper that sets the bit in the provided bit 
      vector for the provided operand. It handles skipping over captured variables.
      (JSC::computeUsesForBytecodeOffset): Computes which operands are used by a particular bytecode.
      (JSC::computeDefsForBytecodeOffset): Computes which operands are defined by a particular 
      bytecode. Typically this is just the left-most operand.
      (JSC::findBasicBlockWithLeaderOffset): 
      (JSC::findBasicBlockForBytecodeOffset): Scans over basic blocks to find the block 
      which contains a particular bytecode offset.
      (JSC::computeLocalLivenessForBytecodeOffset): Computes block-local liveness from the 
      bottom of the block until a specified bytecode offset is reached. 
      (JSC::computeLocalLivenessForBlock): Computes liveness for the entire block and 
      stores the resulting liveness at the head.
      (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint): Runs backward flow liveness 
      analysis to fixpoint.
      (JSC::BytecodeLivenessAnalysis::getLivenessInfoForNonCapturedVarsAtBytecodeOffset): 
      Slow path to get liveness info for non-captured, non-argument variable.
      (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset): 
      (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeOffset): Returns the liveness 
      info for both captured and non-captured vars at a particular bytecode offset.
      (JSC::BytecodeLivenessAnalysis::dumpResults): Dumps the output of the liveness analysis. 
      Controlled by new flag in Options.h/.cpp.
      (JSC::BytecodeLivenessAnalysis::compute): Creates bytecode basic blocks and runs 
      full liveness analysis.
      * bytecode/BytecodeLivenessAnalysis.h: Added.
      (JSC::BytecodeLivenessAnalysis::hasBeenComputed):
      (JSC::BytecodeLivenessAnalysis::computeIfNecessary):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::livenessAnalysis):
      * bytecode/PreciseJumpTargets.cpp: Refactored to be able to get the jump targets for 
      a particular bytecode offset for use during bytecode basic block construction.
      (JSC::getJumpTargetsForBytecodeOffset):
      (JSC::computePreciseJumpTargets):
      (JSC::findJumpTargetsForBytecodeOffset):
      * bytecode/PreciseJumpTargets.h:
      * runtime/Options.cpp:
      (JSC::Options::initialize):
      * runtime/Options.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159136 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      3811e215
    • akling@apple.com's avatar
      CodeBlock: Un-segment some Vectors. · e25e769a
      akling@apple.com authored
      <https://webkit.org/b/124188>
      
      Turn some SegmentedVectors into Vectors where the final item count
      is known at CodeBlock construction time. This removes unnecessary
      allocation and indirection.
      
      I've got ~4.5 MB below SegmentedVector<ValueProfile>::ensureSegment
      on Membuster3 (peak, before pressure signal) so this should help
      take a bit of the edge off there.
      
      Reviewed by Geoffrey Garen.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159097 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      e25e769a
  16. 03 Nov, 2013 1 commit
  17. 01 Nov, 2013 1 commit
    • fpizlo@apple.com's avatar
      OSR exit profiling should be robust against all code being cleared · 501e606b
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=123629
      <rdar://problem/15365476>
      
      Reviewed by Michael Saboff.
              
      The problem here is two-fold:
      
      1) A watchpoint (i.e. ProfiledCodeBlockJettisoningWatchpoint) may be fired after we
      have cleared the CodeBlock for all or some Executables.  This means that doing
      codeBlock->baselineVersion() would either crash or return a bogus CodeBlock, since
      there wasn't a baseline code block reachable from the Executable anymore.  The
      solution is that we shouldn't be asking for the baseline code block reachable from
      the owning executable (what baselineVersion did), but instead we should be asking
      for the baseline version reachable from the code block being watchpointed (basically
      what CodeBlock::alternative() did).
      
      2) If dealing with inlined code, baselienCodeBlockForOriginAndBaselineCodeBlock()
      may return null, for the same reason as above - we might have cleared the baseline
      codeblock for the executable that was inlined.  The solution is to just not do
      profiling if there isn't a baseline code block anymore.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::baselineAlternative):
      (JSC::CodeBlock::baselineVersion):
      (JSC::CodeBlock::jettison):
      * bytecode/CodeBlock.h:
      * bytecode/CodeBlockJettisoningWatchpoint.cpp:
      (JSC::CodeBlockJettisoningWatchpoint::fireInternal):
      * bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp:
      (JSC::ProfiledCodeBlockJettisoningWatchpoint::fireInternal):
      * dfg/DFGOSRExitBase.cpp:
      (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSiteSlow):
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::AssemblyHelpers):
      * runtime/Executable.cpp:
      (JSC::FunctionExecutable::baselineCodeBlockFor):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158459 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      501e606b
  18. 30 Oct, 2013 2 commits
    • fpizlo@apple.com's avatar
      Unreviewed, fix Windows. · 377773c6
      fpizlo@apple.com authored
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::addFrequentExitSite):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158307 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      377773c6
    • fpizlo@apple.com's avatar
      Add InvalidationPoints to the DFG and use them for all watchpoints · d84425d1
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=123472
      
      Reviewed by Mark Hahnenberg.
              
      This makes a fundamental change to how watchpoints work in the DFG.
              
      Previously, a watchpoint was an instruction whose execution semantics were something
      like:
              
          if (watchpoint->invalidated)
              exit
              
      We would implement this without any branch by using jump replacement.
              
      This is a very good optimization. But it's a bit awkward once you get a lot of
      watchpoints: semantically we will have lots of these branches in the code, which the
      compiler needs to reason about even though they don't actually result in any emitted
      code.
              
      Separately, we also had a mechanism for jettisoning a CodeBlock. This mechanism would
      be invoked if a CodeBlock exited a lot. It would ensure that a CodeBlock wouldn't be
      called into again, but it would do nothing for CodeBlocks that were already on the
      stack.
              
      This change flips jettisoning and watchpoint invalidation on their heads. Now, the jump
      replacement has nothing to do with watchpoints; instead it's something that happens if
      you ever jettison a CodeBlock. Jump replacement is now an all-or-nothing operation over
      all of the potential call-return safe-exit-points in a CodeBlock. We call these
      "InvalidationPoint"s. A watchpoint instruction is now "lowered" by having the DFG
      collect all of the watchpoint sets that the CodeBlock cares about, and then registering
      a CodeBlockJettisoningWatchpoint with all of them. That is, if the watchpoint fires, it
      jettisons the CodeBlock, which in turn ensures that the CodeBlock can't be called into
      (because the entrypoint now points to baseline code) and can't be returned into
      (because returning exits to baseline before the next bytecode instruction).
              
      This will allow for a sensible lowering of watchpoints to LLVM IR. It will also allow
      for jettison() to be used effectively for things like breakpointing and single-stepping
      in the debugger.
              
      Well, basically, this mechanism just takes us into the HotSpot-style world where anyone
      can, at any time and for any reason, request that an optimized CodeBlock is rendered
      immediately invalid. You can use this for many cool things, I'm sure.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * assembler/AbstractMacroAssembler.h:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::jettison):
      * bytecode/CodeBlock.h:
      * bytecode/CodeBlockJettisoningWatchpoint.cpp: Added.
      (JSC::CodeBlockJettisoningWatchpoint::fireInternal):
      * bytecode/CodeBlockJettisoningWatchpoint.h: Added.
      (JSC::CodeBlockJettisoningWatchpoint::CodeBlockJettisoningWatchpoint):
      * bytecode/ExitKind.cpp:
      (JSC::exitKindToString):
      * bytecode/ExitKind.h:
      * bytecode/ProfiledCodeBlockJettisoningWatchpoint.cpp: Added.
      (JSC::ProfiledCodeBlockJettisoningWatchpoint::fireInternal):
      * bytecode/ProfiledCodeBlockJettisoningWatchpoint.h: Added.
      (JSC::ProfiledCodeBlockJettisoningWatchpoint::ProfiledCodeBlockJettisoningWatchpoint):
      * dfg/DFGAbstractHeap.h:
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      * dfg/DFGClobberize.cpp:
      (JSC::DFG::writesOverlap):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      (JSC::DFG::AbstractHeapOverlaps::AbstractHeapOverlaps):
      (JSC::DFG::AbstractHeapOverlaps::operator()):
      (JSC::DFG::AbstractHeapOverlaps::result):
      * dfg/DFGCommonData.cpp:
      (JSC::DFG::CommonData::invalidate):
      * dfg/DFGCommonData.h:
      (JSC::DFG::CommonData::CommonData):
      * dfg/DFGDesiredWatchpoints.cpp:
      (JSC::DFG::DesiredWatchpoints::addLazily):
      (JSC::DFG::DesiredWatchpoints::reallyAdd):
      * dfg/DFGDesiredWatchpoints.h:
      (JSC::DFG::WatchpointForGenericWatchpointSet::WatchpointForGenericWatchpointSet):
      (JSC::DFG::GenericDesiredWatchpoints::addLazily):
      (JSC::DFG::GenericDesiredWatchpoints::reallyAdd):
      (JSC::DFG::GenericDesiredWatchpoints::areStillValid):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      * dfg/DFGInvalidationPointInjectionPhase.cpp: Added.
      (JSC::DFG::InvalidationPointInjectionPhase::InvalidationPointInjectionPhase):
      (JSC::DFG::InvalidationPointInjectionPhase::run):
      (JSC::DFG::InvalidationPointInjectionPhase::handle):
      (JSC::DFG::InvalidationPointInjectionPhase::insertInvalidationCheck):
      (JSC::DFG::performInvalidationPointInjection):
      * dfg/DFGInvalidationPointInjectionPhase.h: Added.
      * dfg/DFGJITCode.h:
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::linkOSRExits):
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGJITCompiler.h:
      * dfg/DFGJumpReplacement.cpp: Added.
      (JSC::DFG::JumpReplacement::fire):
      * dfg/DFGJumpReplacement.h: Added.
      (JSC::DFG::JumpReplacement::JumpReplacement):
      * dfg/DFGNodeType.h:
      * dfg/DFGOSRExitCompilationInfo.h:
      * dfg/DFGOperations.cpp:
      * dfg/DFGPlan.cpp:
      (JSC::DFG::Plan::compileInThreadImpl):
      (JSC::DFG::Plan::reallyAdd):
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::emitInvalidationPoint):
      (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
      (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::masqueradesAsUndefinedWatchpointIsStillValid):
      (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
      (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
      (JSC::DFG::SpeculativeJIT::compileObjectEquality):
      (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
      (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
      (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
      (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
      (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
      (JSC::DFG::SpeculativeJIT::compileObjectEquality):
      (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
      (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
      (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
      (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGWatchpointCollectionPhase.cpp: Added.
      (JSC::DFG::WatchpointCollectionPhase::WatchpointCollectionPhase):
      (JSC::DFG::WatchpointCollectionPhase::run):
      (JSC::DFG::WatchpointCollectionPhase::handle):
      (JSC::DFG::WatchpointCollectionPhase::handleEdge):
      (JSC::DFG::WatchpointCollectionPhase::handleMasqueradesAsUndefined):
      (JSC::DFG::WatchpointCollectionPhase::handleStringGetByVal):
      (JSC::DFG::WatchpointCollectionPhase::addLazily):
      (JSC::DFG::WatchpointCollectionPhase::globalObject):
      (JSC::DFG::performWatchpointCollection):
      * dfg/DFGWatchpointCollectionPhase.h: Added.
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileStructureTransitionWatchpoint):
      (JSC::FTL::LowerDFGToLLVM::compileGetByVal):
      (JSC::FTL::LowerDFGToLLVM::compileGlobalVarWatchpoint):
      (JSC::FTL::LowerDFGToLLVM::compileCompareEqConstant):
      (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
      (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEqConstant):
      (JSC::FTL::LowerDFGToLLVM::compileInvalidationPoint):
      (JSC::FTL::LowerDFGToLLVM::equalNullOrUndefined):
      (JSC::FTL::LowerDFGToLLVM::speculateNonNullObject):
      * jit/JITOperations.cpp:
      * jit/JumpReplacementWatchpoint.cpp: Removed.
      * jit/JumpReplacementWatchpoint.h: Removed.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158304 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d84425d1
  19. 19 Oct, 2013 2 commits
    • fpizlo@apple.com's avatar
      Baseline JIT and DFG IC code generation should be unified and rationalized · 5ba07883
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=122939
      
      Reviewed by Geoffrey Garen.
              
      Introduce the JITInlineCacheGenerator, which takes a CodeBlock and a CodeOrigin plus
      some register info and creates JIT inline caches for you. Used this to even furhter
      unify the baseline and DFG ICs. In the future we can use this for FTL ICs. And my hope
      is that we'll be able to use it for cascading ICs: an IC for some instruction may realize
      that it needs to do the equivalent of get_by_id, so with this generator it will be able
      to create an IC even though it wasn't associated with a get_by_id bytecode instruction.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * assembler/AbstractMacroAssembler.h:
      (JSC::AbstractMacroAssembler::DataLabelCompact::label):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::ecmaMode):
      * dfg/DFGInlineCacheWrapper.h: Added.
      (JSC::DFG::InlineCacheWrapper::InlineCacheWrapper):
      * dfg/DFGInlineCacheWrapperInlines.h: Added.
      (JSC::DFG::::finalize):
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGJITCompiler.h:
      (JSC::DFG::JITCompiler::addGetById):
      (JSC::DFG::JITCompiler::addPutById):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::cachedGetById):
      (JSC::DFG::SpeculativeJIT::cachedPutById):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::cachedGetById):
      (JSC::DFG::SpeculativeJIT::cachedPutById):
      (JSC::DFG::SpeculativeJIT::compile):
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::isStrictModeFor):
      (JSC::AssemblyHelpers::strictModeFor):
      * jit/GPRInfo.h:
      (JSC::JSValueRegs::tagGPR):
      * jit/JIT.cpp:
      (JSC::JIT::JIT):
      (JSC::JIT::privateCompileSlowCases):
      (JSC::JIT::privateCompile):
      * jit/JIT.h:
      * jit/JITInlineCacheGenerator.cpp: Added.
      (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
      (JSC::JITByIdGenerator::JITByIdGenerator):
      (JSC::JITByIdGenerator::finalize):
      (JSC::JITByIdGenerator::generateFastPathChecks):
      (JSC::JITGetByIdGenerator::generateFastPath):
      (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
      (JSC::JITPutByIdGenerator::generateFastPath):
      (JSC::JITPutByIdGenerator::slowPathFunction):
      * jit/JITInlineCacheGenerator.h: Added.
      (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
      (JSC::JITInlineCacheGenerator::stubInfo):
      (JSC::JITByIdGenerator::JITByIdGenerator):
      (JSC::JITByIdGenerator::reportSlowPathCall):
      (JSC::JITByIdGenerator::slowPathJump):
      (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
      (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
      * jit/JITPropertyAccess.cpp:
      (JSC::JIT::emit_op_get_by_id):
      (JSC::JIT::emitSlow_op_get_by_id):
      (JSC::JIT::emit_op_put_by_id):
      (JSC::JIT::emitSlow_op_put_by_id):
      * jit/JITPropertyAccess32_64.cpp:
      (JSC::JIT::emit_op_get_by_id):
      (JSC::JIT::emitSlow_op_get_by_id):
      (JSC::JIT::emit_op_put_by_id):
      (JSC::JIT::emitSlow_op_put_by_id):
      * jit/RegisterSet.h:
      (JSC::RegisterSet::set):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157685 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5ba07883
    • fpizlo@apple.com's avatar
      A CodeBlock's StructureStubInfos shouldn't be in a Vector that we search using... · d49bfe80
      fpizlo@apple.com authored
      A CodeBlock's StructureStubInfos shouldn't be in a Vector that we search using code origins and machine code PCs
      https://bugs.webkit.org/show_bug.cgi?id=122940
      
      Source/JavaScriptCore: 
      
      Reviewed by Oliver Hunt.
              
      This accomplishes a number of simplifications. StructureStubInfo is now non-moving,
      whereas previously it was in a Vector, so it moved. This allows you to use pointers to
      StructureStubInfo. This also eliminates the use of return PC as a way of finding the
      StructureStubInfo's. It removes some of the need for the compile-time property access
      records; for example the DFG no longer has to save information about registers in a
      property access record only to later save it to the stub info.
              
      The main thing is accomplishes is that it makes it easier to add StructureStubInfo's
      at any stage of compilation.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::printGetByIdCacheStatus):
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::~CodeBlock):
      (JSC::CodeBlock::propagateTransitions):
      (JSC::CodeBlock::finalizeUnconditionally):
      (JSC::CodeBlock::addStubInfo):
      (JSC::CodeBlock::getStubInfoMap):
      (JSC::CodeBlock::shrinkToFit):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::begin):
      (JSC::CodeBlock::end):
      (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
      * bytecode/CodeOrigin.h:
      (JSC::CodeOrigin::CodeOrigin):
      (JSC::CodeOrigin::isHashTableDeletedValue):
      (JSC::CodeOrigin::hash):
      (JSC::CodeOriginHash::hash):
      (JSC::CodeOriginHash::equal):
      * bytecode/GetByIdStatus.cpp:
      (JSC::GetByIdStatus::computeFor):
      * bytecode/GetByIdStatus.h:
      * bytecode/PutByIdStatus.cpp:
      (JSC::PutByIdStatus::computeFor):
      * bytecode/PutByIdStatus.h:
      * bytecode/StructureStubInfo.h:
      (JSC::getStructureStubInfoCodeOrigin):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGJITCompiler.h:
      (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
      (JSC::DFG::InRecord::InRecord):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileIn):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::callOperation):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::cachedGetById):
      (JSC::DFG::SpeculativeJIT::cachedPutById):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::cachedGetById):
      (JSC::DFG::SpeculativeJIT::cachedPutById):
      * jit/CCallHelpers.h:
      (JSC::CCallHelpers::setupArgumentsWithExecState):
      * jit/JIT.cpp:
      (JSC::PropertyStubCompilationInfo::copyToStubInfo):
      (JSC::JIT::privateCompile):
      * jit/JIT.h:
      (JSC::PropertyStubCompilationInfo::slowCaseInfo):
      * jit/JITInlines.h:
      (JSC::JIT::callOperation):
      * jit/JITOperations.cpp:
      * jit/JITOperations.h:
      * jit/JITPropertyAccess.cpp:
      (JSC::JIT::emitSlow_op_get_by_id):
      (JSC::JIT::emitSlow_op_put_by_id):
      * jit/JITPropertyAccess32_64.cpp:
      (JSC::JIT::emitSlow_op_get_by_id):
      (JSC::JIT::emitSlow_op_put_by_id):
      * jit/Repatch.cpp:
      (JSC::appropriateGenericPutByIdFunction):
      (JSC::appropriateListBuildingPutByIdFunction):
      (JSC::resetPutByID):
      
      Source/WTF: 
      
      Reviewed by Oliver Hunt.
      
      * GNUmakefile.list.am:
      * WTF.vcxproj/WTF.vcxproj:
      * WTF.xcodeproj/project.pbxproj:
      * wtf/BagToHashMap.h: Added.
      (WTF::toHashMap):
      * wtf/CMakeLists.txt:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157660 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d49bfe80
  20. 18 Oct, 2013 1 commit
    • andersca@apple.com's avatar
      Remove spaces between template angle brackets · c3523f8d
      andersca@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=123040
      
      Reviewed by Andreas Kling.
      
      Source/JavaScriptCore:
      
      * API/JSCallbackObject.cpp:
      (JSC::::create):
      * API/JSObjectRef.cpp:
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::constants):
      (JSC::CodeBlock::setConstantRegisters):
      * bytecode/DFGExitProfile.h:
      * bytecode/EvalCodeCache.h:
      * bytecode/Operands.h:
      * bytecode/UnlinkedCodeBlock.h:
      (JSC::UnlinkedCodeBlock::constantRegisters):
      * bytecode/Watchpoint.h:
      * bytecompiler/BytecodeGenerator.h:
      * bytecompiler/StaticPropertyAnalysis.h:
      * bytecompiler/StaticPropertyAnalyzer.h:
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      * dfg/DFGBlockInsertionSet.h:
      * dfg/DFGCSEPhase.cpp:
      (JSC::DFG::performCSE):
      (JSC::DFG::performStoreElimination):
      * dfg/DFGCommonData.h:
      * dfg/DFGDesiredStructureChains.h:
      * dfg/DFGDesiredWatchpoints.h:
      * dfg/DFGJITCompiler.h:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompiler64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGWorklist.h:
      * heap/BlockAllocator.h:
      (JSC::CopiedBlock):
      (JSC::MarkedBlock):
      (JSC::WeakBlock):
      (JSC::MarkStackSegment):
      (JSC::CopyWorkListSegment):
      (JSC::HandleBlock):
      * heap/Heap.h:
      * heap/Local.h:
      * heap/MarkedBlock.h:
      * heap/Strong.h:
      * jit/AssemblyHelpers.cpp:
      (JSC::AssemblyHelpers::decodedCodeMapFor):
      * jit/AssemblyHelpers.h:
      * jit/SpecializedThunkJIT.h:
      * parser/Nodes.h:
      * parser/Parser.cpp:
      (JSC::::parseIfStatement):
      * parser/Parser.h:
      (JSC::Scope::copyCapturedVariablesToVector):
      (JSC::parse):
      * parser/ParserArena.h:
      * parser/SourceProviderCacheItem.h:
      * profiler/LegacyProfiler.cpp:
      (JSC::dispatchFunctionToProfiles):
      * profiler/LegacyProfiler.h:
      (JSC::LegacyProfiler::currentProfiles):
      * profiler/ProfileNode.h:
      (JSC::ProfileNode::children):
      * profiler/ProfilerDatabase.h:
      * runtime/Butterfly.h:
      (JSC::Butterfly::contiguousInt32):
      (JSC::Butterfly::contiguous):
      * runtime/GenericTypedArrayViewInlines.h:
      (JSC::::create):
      * runtime/Identifier.h:
      (JSC::Identifier::add):
      * runtime/JSPromise.h:
      * runtime/PropertyMapHashTable.h:
      * runtime/PropertyNameArray.h:
      * runtime/RegExpCache.h:
      * runtime/SparseArrayValueMap.h:
      * runtime/SymbolTable.h:
      * runtime/VM.h:
      * tools/CodeProfile.cpp:
      (JSC::truncateTrace):
      * tools/CodeProfile.h:
      * yarr/YarrInterpreter.cpp:
      * yarr/YarrInterpreter.h:
      (JSC::Yarr::BytecodePattern::BytecodePattern):
      * yarr/YarrJIT.cpp:
      (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
      (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
      (JSC::Yarr::YarrGenerator::opCompileBody):
      * yarr/YarrPattern.cpp:
      (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
      (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
      * yarr/YarrPattern.h:
      
      Source/WebCore:
      
      * Modules/encryptedmedia/MediaKeySession.h:
      * Modules/encryptedmedia/MediaKeys.h:
      * Modules/geolocation/Geolocation.h:
      * Modules/geolocation/GeolocationController.cpp:
      (WebCore::GeolocationController::positionChanged):
      (WebCore::GeolocationController::errorOccurred):
      * Modules/geolocation/GeolocationController.h:
      * Modules/indexeddb/IDBCallbacks.h:
      * Modules/indexeddb/IDBDatabase.h:
      * Modules/indexeddb/IDBDatabaseBackendInterface.h:
      * Modules/indexeddb/IDBEventDispatcher.cpp:
      (WebCore::IDBEventDispatcher::dispatch):
      * Modules/indexeddb/IDBEventDispatcher.h:
      * Modules/indexeddb/IDBKey.h:
      * Modules/indexeddb/IDBObjectStore.h:
      * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
      * Modules/indexeddb/IDBRequest.cpp:
      (WebCore::IDBRequest::dispatchEvent):
      * Modules/indexeddb/IDBRequest.h:
      (WebCore::IDBRequest::onSuccessWithPrefetch):
      * Modules/indexeddb/IDBTransaction.cpp:
      (WebCore::IDBTransaction::dispatchEvent):
      * Modules/indexeddb/IDBTransaction.h:
      * Modules/mediacontrols/MediaControlsHost.cpp:
      (WebCore::MediaControlsHost::sortedTrackListForMenu):
      * Modules/mediacontrols/MediaControlsHost.h:
      * Modules/mediasource/MediaSource.cpp:
      (WebCore::MediaSource::activeRanges):
      * Modules/mediasource/MediaSource.h:
      * Modules/mediasource/MediaSourceBase.cpp:
      (WebCore::MediaSourceBase::buffered):
      * Modules/mediasource/MediaSourceBase.h:
      * Modules/mediasource/MediaSourceRegistry.cpp:
      (WebCore::MediaSourceRegistry::unregisterURL):
      * Modules/mediasource/MediaSourceRegistry.h:
      * Modules/mediasource/SourceBufferList.h:
      * Modules/mediasource/WebKitMediaSource.cpp:
      (WebCore::WebKitMediaSource::activeRanges):
      * Modules/mediasource/WebKitMediaSource.h:
      * Modules/mediasource/WebKitSourceBufferList.h:
      * Modules/mediastream/MediaStream.cpp:
      (WebCore::MediaStream::scheduledEventTimerFired):
      * Modules/mediastream/MediaStream.h:
      * Modules/mediastream/MediaStreamRegistry.h:
      * Modules/mediastream/MediaStreamTrack.h:
      * Modules/mediastream/RTCDTMFSender.cpp:
      (WebCore::RTCDTMFSender::scheduledEventTimerFired):
      * Modules/mediastream/RTCDTMFSender.h:
      * Modules/mediastream/RTCDataChannel.cpp:
      (WebCore::RTCDataChannel::scheduledEventTimerFired):
      * Modules/mediastream/RTCDataChannel.h:
      * Modules/mediastream/RTCPeerConnection.cpp:
      (WebCore::RTCPeerConnection::stop):
      (WebCore::RTCPeerConnection::scheduledEventTimerFired):
      * Modules/mediastream/RTCPeerConnection.h:
      * Modules/mediastream/RTCStatsResponse.h:
      (WebCore::RTCStatsResponse::result):
      * Modules/notifications/Notification.h:
      * Modules/notifications/NotificationCenter.h:
      * Modules/speech/SpeechSynthesis.cpp:
      (WebCore::SpeechSynthesis::getVoices):
      * Modules/speech/SpeechSynthesis.h:
      * Modules/webaudio/AudioBuffer.h:
      * Modules/webaudio/AudioNode.h:
      * Modules/webaudio/AudioNodeOutput.h:
      * Modules/webaudio/MediaStreamAudioSource.cpp:
      (WebCore::MediaStreamAudioSource::setAudioFormat):
      (WebCore::MediaStreamAudioSource::consumeAudio):
      * Modules/webaudio/PeriodicWave.h:
      * Modules/webaudio/ScriptProcessorNode.h:
      * Modules/webdatabase/AbstractDatabaseServer.h:
      * Modules/webdatabase/DatabaseBackend.h:
      * Modules/webdatabase/DatabaseManager.cpp:
      (WebCore::DatabaseManager::origins):
      * Modules/webdatabase/DatabaseManager.h:
      * Modules/webdatabase/DatabaseServer.cpp:
      (WebCore::DatabaseServer::origins):
      * Modules/webdatabase/DatabaseServer.h:
      * Modules/webdatabase/DatabaseThread.h:
      * Modules/webdatabase/DatabaseTracker.cpp:
      (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
      (WebCore::DatabaseTracker::origins):
      (WebCore::DatabaseTracker::getOpenDatabases):
      (WebCore::DatabaseTracker::deleteAllDatabases):
      (WebCore::DatabaseTracker::deleteDatabaseFile):
      * Modules/webdatabase/DatabaseTracker.h:
      * Modules/webdatabase/SQLStatementBackend.cpp:
      * Modules/webdatabase/SQLTransactionBackend.cpp:
      * Modules/webdatabase/SQLTransactionBackend.h:
      * Modules/webdatabase/SQLTransactionCoordinator.cpp:
      (WebCore::SQLTransactionCoordinator::shutdown):
      * Modules/webdatabase/SQLTransactionCoordinator.h:
      * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
      (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
      (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
      (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
      * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
      * Modules/websockets/WebSocket.cpp:
      (WebCore::WebSocket::didReceiveBinaryData):
      * Modules/websockets/WebSocket.h:
      * Modules/websockets/WebSocketChannel.cpp:
      (WebCore::WebSocketChannel::processFrame):
      * Modules/websockets/WebSocketChannel.h:
      * Modules/websockets/WebSocketChannelClient.h:
      (WebCore::WebSocketChannelClient::didReceiveBinaryData):
      * Modules/websockets/WebSocketExtensionDispatcher.h:
      * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
      (WebCore::workerGlobalScopeDidReceiveBinaryData):
      (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
      (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer):
      (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
      * Modules/websockets/WorkerThreadableWebSocketChannel.h:
      * accessibility/AXObjectCache.cpp:
      (WebCore::AXObjectCache::~AXObjectCache):
      * accessibility/AXObjectCache.h:
      * accessibility/AccessibilityNodeObject.cpp:
      (WebCore::AccessibilityNodeObject::ariaLabeledByText):
      * accessibility/AccessibilityObject.h:
      (WebCore::AccessibilityText::AccessibilityText):
      * bindings/js/DOMWrapperWorld.h:
      * bindings/js/JSDOMBinding.h:
      (WebCore::toRefPtrNativeArray):
      * bindings/js/JSDOMGlobalObject.h:
      * bindings/js/JSMutationCallback.cpp:
      (WebCore::JSMutationCallback::call):
      * bindings/js/JSMutationCallback.h:
      * bindings/js/JSWebGLRenderingContextCustom.cpp:
      (WebCore::JSWebGLRenderingContext::getAttachedShaders):
      * bindings/js/PageScriptDebugServer.h:
      * bindings/js/ScheduledAction.h:
      * bindings/js/ScriptController.cpp:
      (WebCore::ScriptController::collectIsolatedContexts):
      * bindings/js/ScriptController.h:
      * bindings/js/ScriptDebugServer.h:
      * bindings/js/ScriptProfile.cpp:
      (WebCore::buildInspectorObjectFor):
      * bindings/objc/ObjCNodeFilterCondition.h:
      * bridge/objc/objc_class.h:
      * bridge/runtime_root.cpp:
      (JSC::Bindings::RootObject::invalidate):
      * bridge/runtime_root.h:
      * css/BasicShapeFunctions.cpp:
      (WebCore::basicShapeForValue):
      * css/CSSBasicShapes.h:
      (WebCore::CSSBasicShapePolygon::values):
      * css/CSSComputedStyleDeclaration.cpp:
      (WebCore::ComputedStyleExtractor::valueForFilter):
      * css/CSSFontFace.h:
      * css/CSSFontFaceSource.h:
      * css/CSSFontSelector.cpp:
      (WebCore::CSSFontSelector::addFontFaceRule):
      (WebCore::CSSFontSelector::getFontFace):
      (WebCore::CSSFontSelector::beginLoadTimerFired):
      * css/CSSFontSelector.h:
      * css/CSSGroupingRule.h:
      * css/CSSImageGeneratorValue.h:
      * css/CSSParserValues.cpp:
      (WebCore::CSSParserSelector::adoptSelectorVector):
      * css/CSSParserValues.h:
      * css/CSSPropertySourceData.h:
      * css/CSSRuleList.h:
      (WebCore::StaticCSSRuleList::rules):
      * css/CSSSegmentedFontFace.cpp:
      (WebCore::CSSSegmentedFontFace::fontLoaded):
      * css/CSSSegmentedFontFace.h:
      * css/CSSSelectorList.cpp:
      (WebCore::CSSSelectorList::adoptSelectorVector):
      * css/CSSSelectorList.h:
      * css/CSSStyleSheet.h:
      * css/CSSValue.h:
      (WebCore::compareCSSValueVector):
      * css/CSSValuePool.h:
      * css/DocumentRuleSets.cpp:
      (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets):
      (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
      * css/DocumentRuleSets.h:
      * css/ElementRuleCollector.cpp:
      (WebCore::ElementRuleCollector::matchedRuleList):
      * css/ElementRuleCollector.h:
      * css/FontLoader.h:
      * css/InspectorCSSOMWrappers.cpp:
      (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
      (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
      * css/InspectorCSSOMWrappers.h:
      * css/MediaList.cpp:
      (WebCore::MediaQuerySet::parse):
      (WebCore::MediaList::item):
      (WebCore::reportMediaQueryWarningIfNeeded):
      * css/MediaList.h:
      (WebCore::MediaQuerySet::queryVector):
      * css/MediaQueryEvaluator.cpp:
      (WebCore::MediaQueryEvaluator::eval):
      * css/MediaQueryMatcher.h:
      * css/PropertySetCSSStyleDeclaration.cpp:
      (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
      * css/PropertySetCSSStyleDeclaration.h:
      * css/RuleSet.cpp:
      (WebCore::RuleSet::addToRuleSet):
      (WebCore::RuleSet::addRegionRule):
      (WebCore::RuleSet::addChildRules):
      (WebCore::RuleSet::addRulesFromSheet):
      * css/RuleSet.h:
      * css/SelectorFilter.h:
      * css/StyleInvalidationAnalysis.cpp:
      (WebCore::StyleInvalidationAnalysis::analyzeStyleSheet):
      * css/StylePropertySet.cpp:
      (WebCore::StylePropertySet::getLayeredShorthandValue):
      * css/StyleResolver.cpp:
      (WebCore::StyleResolver::appendAuthorStyleSheets):
      (WebCore::StyleResolver::keyframeStylesForAnimation):
      (WebCore::StyleResolver::styleRulesForElement):
      (WebCore::StyleResolver::pseudoStyleRulesForElement):
      (WebCore::StyleResolver::resolveVariables):
      (WebCore::StyleResolver::applyProperty):
      (WebCore::StyleResolver::loadPendingSVGDocuments):
      (WebCore::StyleResolver::loadPendingShaders):
      * css/StyleResolver.h:
      * css/StyleRule.cpp:
      (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
      (WebCore::StyleRuleGroup::StyleRuleGroup):
      (WebCore::StyleRuleMedia::StyleRuleMedia):
      (WebCore::StyleRuleSupports::StyleRuleSupports):
      (WebCore::StyleRuleRegion::StyleRuleRegion):
      * css/StyleRule.h:
      (WebCore::StyleRule::parserAdoptSelectorVector):
      (WebCore::StyleRulePage::parserAdoptSelectorVector):
      (WebCore::StyleRuleGroup::childRules):
      (WebCore::StyleRuleMedia::create):
      (WebCore::StyleRuleSupports::create):
      (WebCore::StyleRuleRegion::create):
      (WebCore::StyleRuleHost::create):
      (WebCore::StyleRuleHost::StyleRuleHost):
      * css/StyleScopeResolver.h:
      * css/StyleSheetContents.cpp:
      (WebCore::StyleSheetContents::parserAppendRule):
      (WebCore::childRulesHaveFailedOrCanceledSubresources):
      * css/StyleSheetContents.h:
      (WebCore::StyleSheetContents::childRules):
      (WebCore::StyleSheetContents::importRules):
      * css/StyleSheetList.cpp:
      (WebCore::StyleSheetList::styleSheets):
      (WebCore::StyleSheetList::item):
      * css/StyleSheetList.h:
      * css/WebKitCSSKeyframesRule.h:
      (WebCore::StyleRuleKeyframes::keyframes):
      * dom/CheckedRadioButtons.h:
      * dom/ClientRectList.h:
      * dom/ContainerNode.h:
      (WebCore::ChildNodesLazySnapshot::nextNode):
      (WebCore::ChildNodesLazySnapshot::takeSnapshot):
      * dom/CrossThreadTask.h:
      * dom/Document.cpp:
      (WebCore::Document::webkitCancelFullScreen):
      (WebCore::Document::webkitExitFullscreen):
      (WebCore::Document::fullScreenChangeDelayTimerFired):
      (WebCore::Document::didAssociateFormControlsTimerFired):
      * dom/Document.h:
      * dom/DocumentMarkerController.cpp:
      (WebCore::DocumentMarkerController::removeMarkers):
      * dom/DocumentMarkerController.h:
      * dom/DocumentStyleSheetCollection.cpp:
      (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
      (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
      (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
      (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
      (WebCore::styleSheetsUseRemUnits):
      (WebCore::filterEnabledNonemptyCSSStyleSheets):
      (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
      (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
      * dom/DocumentStyleSheetCollection.h:
      * dom/Element.cpp:
      (WebCore::Element::attrNodeList):
      (WebCore::Element::webkitGetRegionFlowRanges):
      * dom/Element.h:
      * dom/EventListenerMap.h:
      * dom/EventSender.h:
      (WebCore::EventSender::timerFired):
      * dom/IdTargetObserverRegistry.h:
      * dom/MutationCallback.h:
      * dom/MutationObserver.cpp:
      (WebCore::MutationObserver::takeRecords):
      (WebCore::MutationObserver::deliver):
      (WebCore::MutationObserver::deliverAllMutations):
      * dom/MutationObserver.h:
      * dom/MutationObserverRegistration.h:
      * dom/NamedFlowCollection.cpp:
      (WebCore::NamedFlowCollection::namedFlows):
      * dom/NamedFlowCollection.h:
      * dom/Node.cpp:
      (WebCore::Node::didMoveToNewDocument):
      (WebCore::Node::mutationObserverRegistry):
      (WebCore::Node::registerMutationObserver):
      (WebCore::Node::unregisterMutationObserver):
      (WebCore::Node::notifyMutationObserversNodeWillDetach):
      * dom/Node.h:
      * dom/NodeRareData.h:
      * dom/Range.cpp:
      (WebCore::Range::processContents):
      (WebCore::Range::processNodes):
      (WebCore::Range::processAncestorsAndTheirSiblings):
      * dom/Range.h:
      * dom/ScopedEventQueue.h:
      * dom/ScriptExecutionContext.cpp:
      (WebCore::ScriptExecutionContext::reportException):
      * dom/ScriptExecutionContext.h:
      * dom/ScriptedAnimationController.h:
      * editing/ApplyStyleCommand.cpp:
      (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
      * editing/BreakBlockquoteCommand.cpp:
      (WebCore::BreakBlockquoteCommand::doApply):
      * editing/CompositeEditCommand.cpp:
      (WebCore::CompositeEditCommand::removeChildrenInRange):
      (WebCore::CompositeEditCommand::deleteInsignificantText):
      (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
      * editing/CompositeEditCommand.h:
      * editing/EditingStyle.cpp:
      (WebCore::htmlElementEquivalents):
      (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement):
      (WebCore::htmlAttributeEquivalents):
      (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
      (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
      (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
      (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
      (WebCore::styleFromMatchedRulesForElement):
      * editing/Editor.cpp:
      (WebCore::Editor::countMatchesForText):
      * editing/Editor.h:
      * editing/InsertParagraphSeparatorCommand.cpp:
      (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock):
      (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
      (WebCore::InsertParagraphSeparatorCommand::doApply):
      * editing/InsertParagraphSeparatorCommand.h:
      * editing/MergeIdenticalElementsCommand.cpp:
      (WebCore::MergeIdenticalElementsCommand::doApply):
      (WebCore::MergeIdenticalElementsCommand::doUnapply):
      * editing/RemoveNodePreservingChildrenCommand.cpp:
      (WebCore::RemoveNodePreservingChildrenCommand::doApply):
      * editing/ReplaceSelectionCommand.cpp:
      (WebCore::ReplacementFragment::removeUnrenderedNodes):
      * editing/SimplifyMarkupCommand.cpp:
      (WebCore::SimplifyMarkupCommand::doApply):
      (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):
      * editing/SimplifyMarkupCommand.h:
      * editing/SpellChecker.h:
      * editing/SplitElementCommand.cpp:
      (WebCore::SplitElementCommand::executeApply):
      (WebCore::SplitElementCommand::doUnapply):
      * editing/WrapContentsInDummySpanCommand.cpp:
      (WebCore::WrapContentsInDummySpanCommand::executeApply):
      (WebCore::WrapContentsInDummySpanCommand::doUnapply):
      * editing/mac/AlternativeTextUIController.h:
      * fileapi/FileList.h:
      * history/BackForwardList.h:
      * history/HistoryItem.cpp:
      (WebCore::HistoryItem::setRedirectURLs):
      * history/HistoryItem.h:
      * history/mac/HistoryItemMac.mm:
      (WebCore::HistoryItem::setTransientProperty):
      * html/FormController.h:
      * html/HTMLAnchorElement.cpp:
      * html/HTMLCollection.cpp:
      (WebCore::HTMLCollection::append):
      * html/HTMLCollection.h:
      * html/HTMLFormControlElement.cpp:
      (WebCore::HTMLFormControlElement::checkValidity):
      * html/HTMLFormControlElement.h:
      * html/HTMLFormElement.cpp:
      (WebCore::HTMLFormElement::validateInteractively):
      (WebCore::HTMLFormElement::checkValidity):
      (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
      * html/HTMLFormElement.h:
      * html/HTMLMediaElement.cpp:
      (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
      (WebCore::HTMLMediaElement::platformTextTracks):
      (WebCore::HTMLMediaElement::configureTextTrackGroup):
      * html/HTMLMediaElement.h:
      * html/HTMLPlugInImageElement.cpp:
      * html/HTMLSelectElement.cpp:
      (WebCore::HTMLSelectElement::setLength):
      * html/MediaController.cpp:
      (MediaController::asyncEventTimerFired):
      * html/MediaController.h:
      * html/MediaFragmentURIParser.h:
      * html/ValidationMessage.h:
      * html/canvas/WebGLFramebuffer.h:
      * html/canvas/WebGLRenderingContext.cpp:
      (WebCore::WebGLRenderingContext::getAttachedShaders):
      * html/canvas/WebGLRenderingContext.h:
      * html/canvas/WebGLTexture.h:
      * html/parser/BackgroundHTMLParser.cpp:
      (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
      * html/parser/BackgroundHTMLParser.h:
      (WebCore::BackgroundHTMLParser::create):
      * html/parser/HTMLDocumentParser.cpp:
      (WebCore::HTMLDocumentParser::startBackgroundParser):
      * html/parser/HTMLDocumentParser.h:
      * html/parser/HTMLMetaCharsetParser.h:
      * html/parser/HTMLPreloadScanner.cpp:
      (WebCore::TokenPreloadScanner::scan):
      (WebCore::TokenPreloadScanner::scanCommon):
      * html/parser/HTMLResourcePreloader.h:
      * html/parser/XSSAuditor.h:
      * html/shadow/ContentDistributor.cpp:
      (WebCore::ContentDistributor::ensureInsertionPointList):
      (WebCore::ContentDistributor::distribute):
      (WebCore::ContentDistributor::invalidate):
      * html/shadow/ContentDistributor.h:
      * html/shadow/MediaControlElements.cpp:
      (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
      (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
      * html/shadow/MediaControlElements.h:
      * html/track/InbandGenericTextTrack.h:
      * html/track/InbandWebVTTTextTrack.cpp:
      (WebCore::InbandWebVTTTextTrack::newCuesParsed):
      * html/track/LoadableTextTrack.cpp:
      (WebCore::LoadableTextTrack::newCuesAvailable):
      (WebCore::LoadableTextTrack::newRegionsAvailable):
      * html/track/TextTrackCueList.h:
      * html/track/TextTrackList.cpp:
      (TextTrackList::invalidateTrackIndexesAfterTrack):
      (TextTrackList::remove):
      (TextTrackList::contains):
      * html/track/TextTrackList.h:
      * html/track/TrackListBase.cpp:
      (TrackListBase::asyncEventTimerFired):
      * html/track/TrackListBase.h:
      * html/track/WebVTTParser.cpp:
      (WebCore::WebVTTParser::getNewCues):
      (WebCore::WebVTTParser::getNewRegions):
      * html/track/WebVTTParser.h:
      * inspector/ConsoleMessage.cpp:
      (WebCore::ConsoleMessage::addToFrontend):
      * inspector/ContentSearchUtils.cpp:
      (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
      (WebCore::ContentSearchUtils::lineEndings):
      (WebCore::ContentSearchUtils::searchInTextByLines):
      * inspector/ContentSearchUtils.h:
      * inspector/DOMPatchSupport.cpp:
      (WebCore::DOMPatchSupport::patchNode):
      (WebCore::DOMPatchSupport::diff):
      (WebCore::DOMPatchSupport::innerPatchChildren):
      * inspector/DOMPatchSupport.h:
      * inspector/InjectedScript.cpp:
      (WebCore::InjectedScript::getProperties):
      (WebCore::InjectedScript::getInternalProperties):
      (WebCore::InjectedScript::wrapCallFrames):
      * inspector/InjectedScript.h:
      * inspector/InjectedScriptHost.h:
      * inspector/InspectorAgent.cpp:
      (WebCore::InspectorAgent::enable):
      * inspector/InspectorApplicationCacheAgent.cpp:
      (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
      (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
      * inspector/InspectorApplicationCacheAgent.h:
      * inspector/InspectorBaseAgent.h:
      * inspector/InspectorCSSAgent.cpp:
      (WebCore::SelectorProfile::toInspectorObject):
      (WebCore::UpdateRegionLayoutTask::onTimer):
      (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
      (WebCore::InspectorCSSAgent::getComputedStyleForNode):
      (WebCore::InspectorCSSAgent::getAllStyleSheets):
      (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
      (WebCore::InspectorCSSAgent::getNamedFlowCollection):
      (WebCore::InspectorCSSAgent::buildArrayForRuleList):
      (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
      (WebCore::InspectorCSSAgent::buildArrayForRegions):
      (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
      * inspector/InspectorCSSAgent.h:
      * inspector/InspectorConsoleAgent.h:
      * inspector/InspectorDOMAgent.cpp:
      (WebCore::RevalidateStyleAttributeTask::onTimer):
      (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
      (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
      (WebCore::InspectorDOMAgent::getEventListenersForNode):
      (WebCore::InspectorDOMAgent::performSearch):
      (WebCore::InspectorDOMAgent::getSearchResults):
      (WebCore::InspectorDOMAgent::getAttributes):
      (WebCore::InspectorDOMAgent::buildObjectForNode):
      (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
      (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
      (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
      * inspector/InspectorDOMAgent.h:
      * inspector/InspectorDOMStorageAgent.cpp:
      (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
      * inspector/InspectorDOMStorageAgent.h:
      * inspector/InspectorDatabaseAgent.cpp:
      (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
      * inspector/InspectorDatabaseAgent.h:
      * inspector/InspectorDebuggerAgent.cpp:
      (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
      (WebCore::InspectorDebuggerAgent::searchInContent):
      (WebCore::InspectorDebuggerAgent::setScriptSource):
      (WebCore::InspectorDebuggerAgent::currentCallFrames):
      * inspector/InspectorDebuggerAgent.h:
      * inspector/InspectorHeapProfilerAgent.cpp:
      (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
      * inspector/InspectorHeapProfilerAgent.h:
      * inspector/InspectorHistory.h:
      * inspector/InspectorIndexedDBAgent.cpp:
      * inspector/InspectorLayerTreeAgent.cpp:
      (WebCore::InspectorLayerTreeAgent::layersForNode):
      (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
      (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
      * inspector/InspectorLayerTreeAgent.h:
      * inspector/InspectorMemoryAgent.h:
      * inspector/InspectorPageAgent.cpp:
      (WebCore::buildArrayForCookies):
      (WebCore::InspectorPageAgent::getCookies):
      (WebCore::InspectorPageAgent::searchInResource):
      (WebCore::InspectorPageAgent::searchInResources):
      (WebCore::InspectorPageAgent::buildObjectForFrameTree):
      * inspector/InspectorPageAgent.h:
      * inspector/InspectorProfilerAgent.cpp:
      (WebCore::InspectorProfilerAgent::getProfileHeaders):
      * inspector/InspectorProfilerAgent.h:
      * inspector/InspectorResourceAgent.h:
      * inspector/InspectorRuntimeAgent.cpp:
      (WebCore::InspectorRuntimeAgent::getProperties):
      * inspector/InspectorRuntimeAgent.h:
      * inspector/InspectorState.h:
      * inspector/InspectorStyleSheet.cpp:
      (WebCore::asCSSRuleList):
      (WebCore::InspectorStyle::buildArrayForComputedStyle):
      (WebCore::InspectorStyle::styleWithProperties):
      (WebCore::selectorsFromSource):
      (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
      (WebCore::InspectorStyleSheet::buildObjectForRule):
      (WebCore::InspectorStyleSheet::lineEndings):
      (WebCore::InspectorStyleSheet::buildArrayForRuleList):
      (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):
      * inspector/InspectorStyleSheet.h:
      * inspector/InspectorValues.cpp:
      (WebCore::InspectorArrayBase::writeJSON):
      * inspector/InspectorValues.h:
      * inspector/PageRuntimeAgent.cpp:
      (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
      * inspector/ScriptCallStack.cpp:
      (WebCore::ScriptCallStack::buildInspectorArray):
      * inspector/ScriptCallStack.h:
      * loader/CrossOriginPreflightResultCache.h:
      * loader/DocumentLoader.cpp:
      (WebCore::cancelAll):
      (WebCore::setAllDefersLoading):
      (WebCore::DocumentLoader::getSubresources):
      * loader/DocumentLoader.h:
      * loader/FormState.h:
      * loader/FormSubmission.cpp:
      (WebCore::FormSubmission::create):
      * loader/ProgressTracker.h:
      * loader/ResourceLoadScheduler.h:
      * loader/TextTrackLoader.cpp:
      (WebCore::TextTrackLoader::getNewCues):
      (WebCore::TextTrackLoader::getNewRegions):
      * loader/TextTrackLoader.h:
      * loader/WorkerThreadableLoader.cpp:
      (WebCore::workerGlobalScopeDidReceiveData):
      (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
      * loader/appcache/ApplicationCache.cpp:
      (WebCore::ApplicationCache::removeResource):
      (WebCore::ApplicationCache::dump):
      * loader/appcache/ApplicationCache.h:
      * loader/appcache/ApplicationCacheStorage.cpp:
      (WebCore::ApplicationCacheStorage::getOriginsWithCache):
      * loader/archive/Archive.cpp:
      (WebCore::Archive::clearAllSubframeArchives):
      (WebCore::Archive::clearAllSubframeArchivesImpl):
      * loader/archive/Archive.h:
      (WebCore::Archive::subresources):
      (WebCore::Archive::subframeArchives):
      * loader/archive/ArchiveResourceCollection.cpp:
      (WebCore::ArchiveResourceCollection::addAllResources):
      * loader/archive/ArchiveResourceCollection.h:
      * loader/archive/cf/LegacyWebArchive.cpp:
      (WebCore::LegacyWebArchive::createPropertyListRepresentation):
      (WebCore::LegacyWebArchive::create):
      (WebCore::LegacyWebArchive::createFromSelection):
      * loader/archive/cf/LegacyWebArchive.h:
      * loader/archive/mhtml/MHTMLParser.h:
      * loader/cache/CachedResource.h:
      * loader/cache/CachedResourceLoader.h:
      * loader/cache/MemoryCache.h:
      * loader/icon/IconDatabase.cpp:
      (WebCore::IconDatabase::notifyPendingLoadDecisions):
      * loader/icon/IconDatabase.h:
      * page/CaptionUserPreferencesMediaAF.cpp:
      (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
      * page/CaptionUserPreferencesMediaAF.h:
      * page/ChromeClient.h:
      (WebCore::ChromeClient::didAssociateFormControls):
      * page/Console.h:
      * page/ContentSecurityPolicy.h:
      * page/DOMWindow.cpp:
      (WebCore::DOMWindow::getMatchedCSSRules):
      * page/DeviceController.cpp:
      (WebCore::DeviceController::dispatchDeviceEvent):
      (WebCore::DeviceController::fireDeviceEvent):
      * page/DeviceController.h:
      * page/EditorClient.h:
      * page/EventHandler.cpp:
      (WebCore::EventHandler::handleTouchEvent):
      * page/EventHandler.h:
      * page/FrameView.cpp:
      (WebCore::FrameView::serviceScriptedAnimations):
      * page/Page.cpp:
      (WebCore::Page::findStringMatchingRanges):
      * page/Page.h:
      * page/PageGroup.h:
      * page/Performance.cpp:
      (WebCore::Performance::webkitGetEntriesByType):
      (WebCore::Performance::webkitGetEntriesByName):
      * page/Performance.h:
      * page/PerformanceEntryList.cpp:
      (WebCore::PerformanceEntryList::appendAll):
      * page/PerformanceEntryList.h:
      * page/SecurityOriginHash.h:
      * page/SecurityPolicy.cpp:
      * page/SpeechInputResult.h:
      * page/animation/AnimationController.cpp:
      (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
      * page/animation/AnimationControllerPrivate.h:
      * page/animation/CSSPropertyAnimation.cpp:
      (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
      * page/animation/CompositeAnimation.h:
      * page/scrolling/ScrollingStateNode.cpp:
      (WebCore::ScrollingStateNode::appendChild):
      * page/scrolling/ScrollingStateNode.h:
      (WebCore::ScrollingStateNode::children):
      * page/scrolling/ScrollingThread.cpp:
      (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
      * page/scrolling/ScrollingThread.h:
      * page/scrolling/ScrollingTree.cpp:
      (WebCore::ScrollingTree::updateTreeFromStateNode):
      * page/scrolling/ScrollingTreeNode.cpp:
      (WebCore::ScrollingTreeNode::appendChild):
      * page/scrolling/ScrollingTreeNode.h:
      * page/scrolling/mac/ScrollingCoordinatorMac.mm:
      (WebCore::ScrollingCoordinatorMac::syncChildPositions):
      * platform/CrossThreadCopier.cpp:
      * platform/CrossThreadCopier.h:
      * platform/DragData.h:
      * platform/MainThreadTask.h:
      * platform/PODFreeListArena.h:
      (WebCore::PODFreeListArena::freeObject):
      (WebCore::PODFreeListArena::allocate):
      * platform/PODIntervalTree.h:
      * platform/PODRedBlackTree.h:
      (WebCore::PODRedBlackTree::PODRedBlackTree):
      * platform/PlatformSpeechSynthesizer.cpp:
      (WebCore::PlatformSpeechSynthesizer::voiceList):
      * platform/PlatformSpeechSynthesizer.h:
      * platform/RunLoop.h:
      * platform/ScrollView.cpp:
      (WebCore::ScrollView::frameRectsChanged):
      (WebCore::ScrollView::clipRectChanged):
      (WebCore::ScrollView::setParentVisible):
      (WebCore::ScrollView::show):
      (WebCore::ScrollView::hide):
      * platform/ScrollView.h:
      * platform/SharedBuffer.h:
      * platform/Supplementable.h:
      (WebCore::Supplement::provideTo):
      (WebCore::Supplementable::provideSupplement):
      * platform/URL.cpp:
      (WebCore::findHostnamesInMailToURL):
      (WebCore::encodeHostnames):
      * platform/audio/AudioBus.h:
      * platform/audio/AudioDSPKernelProcessor.h:
      * platform/audio/AudioResampler.h:
      * platform/audio/DynamicsCompressor.h:
      * platform/audio/DynamicsCompressorKernel.h:
      * platform/audio/HRTFDatabase.h:
      * platform/audio/HRTFKernel.h:
      * platform/audio/MultiChannelResampler.h:
      * platform/audio/Reverb.h:
      * platform/audio/ReverbConvolver.h:
      * platform/cf/SharedBufferCF.cpp:
      (WebCore::SharedBuffer::copyBufferAndClear):
      (WebCore::SharedBuffer::copySomeDataFromDataArray):
      * platform/graphics/FloatPolygon.cpp:
      (WebCore::FloatPolygon::FloatPolygon):
      * platform/graphics/FloatPolygon.h:
      * platform/graphics/FontCache.cpp:
      (WebCore::FontCache::getCachedFontData):
      (WebCore::FontCache::purgeInactiveFontData):
      * platform/graphics/GlyphMetricsMap.h:
      (WebCore::::locatePageSlowCase):
      * platform/graphics/GlyphPageTreeNode.h:
      * platform/graphics/GraphicsContext3D.h:
      * platform/graphics/GraphicsLayer.cpp:
      * platform/graphics/GraphicsLayer.h:
      * platform/graphics/PlatformTextTrackMenu.h:
      * platform/graphics/SimpleFontData.h:
      * platform/graphics/WidthCache.h:
      * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
      * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
      (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks):
      * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
      * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
      * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
      (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
      (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
      * platform/graphics/ca/GraphicsLayerCA.cpp:
      (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
      (WebCore::GraphicsLayerCA::fetchCloneLayers):
      * platform/graphics/ca/GraphicsLayerCA.h:
      * platform/graphics/ca/PlatformCAAnimation.h:
      * platform/graphics/ca/PlatformCALayer.h:
      * platform/graphics/ca/mac/LayerPool.h:
      * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
      (PlatformCAAnimation::setValues):
      * platform/graphics/ca/mac/TileController.h:
      * platform/graphics/cg/SubimageCacheWithTimer.h:
      * platform/graphics/filters/CustomFilterParameterList.h:
      * platform/graphics/filters/FilterEffect.h:
      * platform/graphics/filters/FilterOperations.h:
      (WebCore::FilterOperations::operations):
      * platform/graphics/gpu/Texture.cpp:
      (WebCore::Texture::Texture):
      (WebCore::Texture::create):
      * platform/graphics/gpu/Texture.h:
      * platform/graphics/mac/ComplexTextController.h:
      * platform/graphics/mac/SimpleFontDataCoreText.cpp:
      (WebCore::SimpleFontData::getCFStringAttributes):
      * platform/graphics/transforms/TransformOperations.h:
      (WebCore::TransformOperations::operations):
      * platform/ios/PasteboardIOS.mm:
      (WebCore::documentFragmentWithRTF):
      * platform/mac/PlatformSpeechSynthesizerMac.mm:
      (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
      * platform/mediastream/MediaStreamDescriptor.h:
      * platform/mediastream/MediaStreamSource.h:
      * platform/mediastream/RTCConfiguration.h:
      * platform/network/BlobRegistryImpl.h:
      * platform/network/HTTPHeaderMap.h:
      * platform/network/ResourceResponseBase.cpp:
      (WebCore::ResourceResponseBase::parseCacheControlDirectives):
      (WebCore::parseCacheHeader):
      * platform/network/cf/ResourceHandleCFNet.cpp:
      (WebCore::clientCerts):
      (WebCore::ResourceHandle::createCFURLConnection):
      * platform/text/cf/HyphenationCF.cpp:
      (WebCore::::createValueForNullKey):
      (WebCore::::createValueForKey):
      (WebCore::cfLocaleCache):
      * plugins/PluginMainThreadScheduler.h:
      * rendering/HitTestResult.h:
      * rendering/InlineFlowBox.h:
      * rendering/RenderBlock.cpp:
      (WebCore::RenderBlock::paintContinuationOutlines):
      (WebCore::RenderBlock::removeFromTrackedRendererMaps):
      * rendering/RenderBlock.h:
      * rendering/RenderButton.h:
      * rendering/RenderCounter.cpp:
      * rendering/RenderGrid.cpp:
      (WebCore::RenderGrid::GridIterator::GridIterator):
      * rendering/RenderGrid.h:
      * rendering/RenderLayer.cpp:
      (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
      (WebCore::RenderLayer::rebuildZOrderLists):
      (WebCore::RenderLayer::collectLayers):
      * rendering/RenderLayer.h:
      * rendering/RenderNamedFlowThread.cpp:
      (WebCore::RenderNamedFlowThread::getRanges):
      * rendering/RenderNamedFlowThread.h:
      * rendering/RenderRegion.cpp:
      (WebCore::RenderRegion::getRanges):
      * rendering/RenderRegion.h:
      * rendering/RenderView.cpp:
      (WebCore::RenderView::selectionBounds):
      (WebCore::RenderView::setSelection):
      * rendering/RootInlineBox.h:
      * rendering/shapes/PolygonShape.cpp:
      (WebCore::computeShapePaddingBounds):
      (WebCore::computeShapeMarginBounds):
      * rendering/shapes/PolygonShape.h:
      (WebCore::PolygonShape::PolygonShape):
      * rendering/shapes/Shape.cpp:
      (WebCore::createPolygonShape):
      (WebCore::Shape::createShape):
      * rendering/shapes/ShapeInfo.h:
      * rendering/shapes/ShapeInterval.h:
      * rendering/style/QuotesData.cpp:
      (WebCore::QuotesData::create):
      (WebCore::QuotesData::QuotesData):
      * rendering/style/QuotesData.h:
      * rendering/style/RenderStyle.cpp:
      (WebCore::requireTransformOrigin):
      (WebCore::RenderStyle::applyTransform):
      * rendering/style/StyleGridData.h:
      * rendering/svg/RenderSVGResourceGradient.h:
      * rendering/svg/RenderSVGResourcePattern.h:
      * rendering/svg/SVGResourcesCache.h:
      * storage/StorageEventDispatcher.cpp:
      (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
      (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
      (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
      (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
      * storage/StorageEventDispatcher.h:
      * storage/StorageNamespaceImpl.h:
      * storage/StorageThread.h:
      * storage/StorageTracker.cpp:
      (WebCore::StorageTracker::origins):
      * storage/StorageTracker.h:
      * svg/SVGAnimatedPath.cpp:
      (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
      * svg/SVGAnimatedTypeAnimator.cpp:
      (WebCore::SVGElementAnimatedProperties::SVGElementAnimatedProperties):
      (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
      * svg/SVGAnimatedTypeAnimator.h:
      * svg/SVGDocumentExtensions.cpp:
      (WebCore::SVGDocumentExtensions::startAnimations):
      (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
      (WebCore::SVGDocumentExtensions::addPendingResource):
      (WebCore::SVGDocumentExtensions::isElementPendingResources):
      (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
      (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget):
      (WebCore::SVGDocumentExtensions::addElementReferencingTarget):
      (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
      * svg/SVGDocumentExtensions.h:
      * svg/SVGFontElement.h:
      * svg/SVGGlyphMap.h:
      * svg/SVGMarkerElement.cpp:
      (WebCore::SVGMarkerElement::orientTypeAnimated):
      * svg/SVGMarkerElement.h:
      * svg/SVGPathSegList.h:
      * svg/animation/SMILTimeContainer.h:
      * svg/graphics/SVGImageCache.h:
      * svg/graphics/filters/SVGFilterBuilder.h:
      (WebCore::SVGFilterBuilder::addBuiltinEffects):
      * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
      (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
      * svg/properties/SVGAnimatedListPropertyTearOff.h:
      (WebCore::SVGAnimatedListPropertyTearOff::create):
      * svg/properties/SVGAnimatedPropertyTearOff.h:
      (WebCore::SVGAnimatedPropertyTearOff::create):
      * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
      (WebCore::SVGAnimatedStaticPropertyTearOff::create):
      * svg/properties/SVGAttributeToPropertyMap.cpp:
      (WebCore::SVGAttributeToPropertyMap::animatedPropertiesForAttribute):
      * svg/properties/SVGAttributeToPropertyMap.h:
      * svg/properties/SVGStaticListPropertyTearOff.h:
      (WebCore::SVGStaticListPropertyTearOff::create):
      * svg/properties/SVGTransformListPropertyTearOff.h:
      (WebCore::SVGTransformListPropertyTearOff::create):
      (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
      (WebCore::SVGTransformListPropertyTearOff::consolidate):
      * workers/DefaultSharedWorkerRepository.h:
      * workers/WorkerMessagingProxy.h:
      * xml/XMLHttpRequestProgressEventThrottle.cpp:
      (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
      * xml/XMLHttpRequestProgressEventThrottle.h:
      * xml/XPathNodeSet.cpp:
      (WebCore::XPath::NodeSet::sort):
      (WebCore::XPath::NodeSet::traversalSort):
      * xml/XSLStyleSheet.h:
      * xml/parser/XMLDocumentParserLibxml2.cpp:
      
      Source/WebKit/mac:
      
      * History/WebHistory.mm:
      (-[WebHistoryPrivate rebuildHistoryByDayIfNeeded:]):
      * History/WebHistoryItem.mm:
      (-[WebHistoryItem initFromDictionaryRepresentation:]):
      * Plugins/Hosted/NetscapePluginHostProxy.h:
      * Plugins/Hosted/NetscapePluginInstanceProxy.h:
      * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
      (WebKit::NetscapePluginInstanceProxy::stopAllStreams):
      * Plugins/WebNetscapePluginView.h:
      * Plugins/WebNetscapePluginView.mm:
      (-[WebNetscapePluginView destroyPlugin]):
      * Storage/WebDatabaseManager.mm:
      (-[WebDatabaseManager origins]):
      * Storage/WebStorageManager.mm:
      (-[WebStorageManager origins]):
      * WebCoreSupport/WebApplicationCache.mm:
      (+[WebApplicationCache originsWithCache]):
      * WebCoreSupport/WebEditorClient.h:
      * WebCoreSupport/WebEditorClient.mm:
      (WebEditorClient::getClientPasteboardDataForRange):
      (WebEditorClient::documentFragmentFromAttributedString):
      * WebCoreSupport/WebFrameLoaderClient.h:
      * WebCoreSupport/WebNotificationClient.h:
      * WebCoreSupport/WebNotificationClient.mm:
      (WebNotificationClient::show):
      (WebNotificationClient::clearNotifications):
      * WebView/WebArchive.mm:
      (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
      (-[WebArchive subresources]):
      (-[WebArchive subframeArchives]):
      * WebView/WebDataSource.mm:
      (-[WebDataSource subresources]):
      * WebView/WebViewData.h:
      
      Source/WebKit2:
      
      * UIProcess/mac/WebColorPickerMac.h:
      * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
      * WebProcess/WebProcess.cpp:
      (WebKit::WebProcess::setProcessSuppressionEnabled):
      
      Source/WTF:
      
      * wtf/AVLTree.h:
      * wtf/CheckedArithmetic.h:
      * wtf/Compression.h:
      * wtf/Functional.h:
      (WTF::R):
      * wtf/HashFunctions.h:
      * wtf/HashIterators.h:
      * wtf/HashSet.h:
      (WTF::::contains):
      * wtf/ListHashSet.h:
      (WTF::::contains):
      * wtf/RefCountedLeakCounter.cpp:
      * wtf/RetainPtr.h:
      * wtf/SentinelLinkedList.h:
      (WTF::::remove):
      * wtf/SizeLimits.cpp:
      * wtf/StreamBuffer.h:
      * wtf/Vector.h:
      * wtf/VectorTraits.h:
      * wtf/WeakPtr.h:
      (WTF::WeakReference::create):
      (WTF::WeakReference::createUnbound):
      (WTF::WeakPtr::WeakPtr):
      (WTF::WeakPtrFactory::WeakPtrFactory):
      * wtf/text/AtomicString.cpp:
      (WTF::AtomicString::add):
      (WTF::findString):
      * wtf/text/StringConcatenate.h:
      * wtf/text/StringImpl.h:
      * wtf/text/StringOperators.h:
      (WTF::operator+):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157653 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      c3523f8d
  21. 07 Oct, 2013 1 commit
    • andersca@apple.com's avatar
      Add OVERRIDE and virtual where appropriate · 70c60588
      andersca@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=122439
      
      Reviewed by Antti Koivisto.
      
      Source/JavaScriptCore:
      
      * API/JSAPIWrapperObject.mm:
      * API/JSCallbackObject.h:
      (JSC::JSCallbackObjectData::~JSCallbackObjectData):
      * API/JSManagedValue.mm:
      * API/JSScriptRef.cpp:
      (OpaqueJSScript::~OpaqueJSScript):
      * bytecode/CodeBlock.h:
      * bytecode/StructureStubClearingWatchpoint.h:
      * dfg/DFGArrayifySlowPathGenerator.h:
      * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
      * dfg/DFGFailedFinalizer.h:
      * dfg/DFGJITCode.h:
      * dfg/DFGJITFinalizer.h:
      * dfg/DFGSaneStringGetByValSlowPathGenerator.h:
      * dfg/DFGSlowPathGenerator.h:
      * dfg/DFGSpeculativeJIT64.cpp:
      * heap/Heap.h:
      * heap/IncrementalSweeper.h:
      * heap/SuperRegion.h:
      * jit/ClosureCallStubRoutine.h:
      * jit/ExecutableAllocatorFixedVMPool.cpp:
      * jit/GCAwareJITStubRoutine.h:
      * jit/JITCode.h:
      * jit/JITStubs.cpp:
      * jit/JITToDFGDeferredCompilationCallback.h:
      * jit/JumpReplacementWatchpoint.h:
      * parser/Nodes.h:
      * runtime/DataView.h:
      * runtime/GCActivityCallback.h:
      * runtime/GenericTypedArrayView.h:
      * runtime/RegExpCache.h:
      * runtime/SimpleTypedArrayController.h:
      * runtime/WeakMapData.h:
      
      Source/WebCore:
      
      * Modules/encryptedmedia/MediaKeys.h:
      * Modules/webaudio/AnalyserNode.h:
      * Modules/webaudio/AudioBasicInspectorNode.h:
      * Modules/webaudio/AudioBasicProcessorNode.h:
      * Modules/webaudio/AudioBufferSourceNode.h:
      * Modules/webaudio/AudioContext.h:
      * Modules/webaudio/AudioDestinationNode.h:
      * Modules/webaudio/AudioProcessingEvent.h:
      * Modules/webaudio/BiquadDSPKernel.h:
      * Modules/webaudio/BiquadProcessor.h:
      * Modules/webaudio/ChannelMergerNode.h:
      * Modules/webaudio/ChannelSplitterNode.h:
      * Modules/webaudio/ConvolverNode.h:
      * Modules/webaudio/DelayDSPKernel.h:
      * Modules/webaudio/DelayProcessor.h:
      * Modules/webaudio/DynamicsCompressorNode.h:
      * Modules/webaudio/GainNode.h:
      * Modules/webaudio/MediaElementAudioSourceNode.h:
      * Modules/webaudio/OfflineAudioCompletionEvent.h:
      * Modules/webaudio/OfflineAudioDestinationNode.h:
      * Modules/webaudio/OscillatorNode.h:
      * Modules/webaudio/PannerNode.h:
      * Modules/webaudio/ScriptProcessorNode.h:
      * Modules/webaudio/WaveShaperProcessor.h:
      * accessibility/AccessibilityARIAGrid.h:
      * accessibility/AccessibilityARIAGridCell.h:
      * accessibility/AccessibilityARIAGridRow.h:
      * accessibility/AccessibilityImageMapLink.h:
      * accessibility/AccessibilityList.h:
      * accessibility/AccessibilityListBox.h:
      * accessibility/AccessibilityListBoxOption.h:
      * accessibility/AccessibilityMediaControls.h:
      * accessibility/AccessibilityMenuList.h:
      * accessibility/AccessibilityMenuListOption.h:
      * accessibility/AccessibilityMenuListPopup.h:
      * accessibility/AccessibilityMockObject.h:
      * accessibility/AccessibilityNodeObject.h:
      * accessibility/AccessibilityProgressIndicator.h:
      * accessibility/AccessibilityRenderObject.h:
      * accessibility/AccessibilitySVGRoot.h:
      * accessibility/AccessibilityScrollView.h:
      * accessibility/AccessibilityScrollbar.h:
      * accessibility/AccessibilitySlider.h:
      * accessibility/AccessibilitySpinButton.h:
      * accessibility/AccessibilityTable.h:
      * accessibility/AccessibilityTableCell.h:
      * accessibility/AccessibilityTableColumn.h:
      * accessibility/AccessibilityTableHeaderContainer.h:
      * accessibility/AccessibilityTableRow.h:
      * bindings/js/JSEventListener.h:
      * bindings/js/WebCoreTypedArrayController.h:
      * bridge/c/c_class.h:
      * bridge/c/c_instance.h:
      * bridge/c/c_runtime.h:
      * bridge/runtime_root.h:
      * css/CSSBasicShapes.h:
      * css/CSSComputedStyleDeclaration.h:
      * css/CSSStyleSheet.h:
      * dom/Attr.h:
      * dom/BeforeTextInsertedEvent.h:
      * dom/CDATASection.h:
      * dom/ChildNodeList.h:
      * dom/DatasetDOMStringMap.h:
      * dom/Document.h:
      * dom/DocumentEventQueue.h:
      * dom/DocumentFragment.h:
      * dom/Element.h:
      * dom/ErrorEvent.h:
      * dom/KeyboardEvent.h:
      * dom/Node.h:
      * dom/PageTransitionEvent.h:
      * dom/ProgressEvent.h:
      * dom/PseudoElement.h:
      * dom/ScriptExecutionContext.h:
      * dom/ShadowRoot.h:
      * dom/StyledElement.h:
      * dom/TagNodeList.h:
      * dom/Text.h:
      * dom/TextEvent.h:
      * dom/TransitionEvent.h:
      * dom/UIEvent.h:
      * dom/WebKitAnimationEvent.h:
      * dom/WebKitTransitionEvent.h:
      * editing/ApplyBlockElementCommand.h:
      * editing/ApplyStyleCommand.h:
      * editing/BreakBlockquoteCommand.h:
      * editing/CompositeEditCommand.h:
      * editing/SpellingCorrectionCommand.h:
      * fileapi/File.h:
      * fileapi/FileThreadTask.h:
      * history/BackForwardList.h:
      * html/BaseCheckableInputType.h:
      * html/HTMLAnchorElement.h:
      * html/HTMLAreaElement.h:
      * html/HTMLCanvasElement.h:
      * html/HTMLCollection.h:
      * html/HTMLElement.h:
      * html/HTMLFieldSetElement.h:
      * html/HTMLFormControlElement.h:
      * html/HTMLFormControlElementWithState.h:
      * html/HTMLFormElement.h:
      * html/HTMLFrameElementBase.h:
      * html/HTMLImageElement.h:
      * html/HTMLImageLoader.h:
      * html/HTMLInputElement.h:
      * html/HTMLLabelElement.h:
      * html/HTMLLegendElement.h:
      * html/HTMLMediaElement.h:
      * html/HTMLMeterElement.h:
      * html/HTMLOptGroupElement.h:
      * html/HTMLOptionElement.h:
      * html/HTMLPlugInElement.h:
      * html/HTMLPlugInImageElement.h:
      * html/HTMLProgressElement.h:
      * html/HTMLSelectElement.h:
      * html/HTMLTableElement.h:
      * html/HTMLTextAreaElement.h:
      * html/HTMLTextFormControlElement.h:
      * html/HTMLVideoElement.h:
      * html/canvas/CanvasRenderingContext2D.cpp:
      * html/shadow/MediaControlElementTypes.h:
      * html/shadow/MediaControlElements.h:
      * html/shadow/SpinButtonElement.h:
      * html/shadow/TextControlInnerElements.h:
      * html/track/AudioTrackList.h:
      * html/track/TextTrackList.h:
      * html/track/TrackListBase.h:
      * inspector/InspectorValues.h:
      * loader/EmptyClients.h:
      * loader/ImageLoader.h:
      * loader/ResourceLoader.h:
      * loader/SubresourceLoader.h:
      * loader/appcache/ApplicationCacheGroup.cpp:
      * loader/appcache/ApplicationCacheGroup.h:
      * loader/appcache/DOMApplicationCache.h:
      * loader/archive/cf/LegacyWebArchive.h:
      * loader/cache/CachedCSSStyleSheet.h:
      * loader/cache/CachedFont.h:
      * loader/cache/CachedFontClient.h:
      * loader/cache/CachedImageClient.h:
      * loader/cache/CachedSVGDocumentClient.h:
      * loader/cache/CachedStyleSheetClient.h:
      * loader/cache/CachedXSLStyleSheet.h:
      * page/Chrome.h:
      * page/DOMWindow.h:
      * page/FrameView.h:
      * page/animation/ImplicitAnimation.h:
      * platform/PODIntervalTree.h:
      * platform/PODRedBlackTree.h:
      * platform/ScrollView.h:
      * platform/Scrollbar.h:
      * platform/Timer.h:
      * platform/animation/TimingFunction.h:
      (WebCore::LinearTimingFunction::~LinearTimingFunction):
      (WebCore::CubicBezierTimingFunction::~CubicBezierTimingFunction):
      (WebCore::StepsTimingFunction::~StepsTimingFunction):
      * platform/audio/AudioDSPKernelProcessor.h:
      * platform/audio/HRTFPanner.h:
      * platform/audio/mac/AudioDestinationMac.h:
      * platform/graphics/SimpleFontData.h:
      * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
      * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
      * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
      * platform/graphics/filters/FilterOperation.h:
      * platform/network/ResourceHandle.h:
      * rendering/AutoTableLayout.h:
      * rendering/ClipPathOperation.h:
      * rendering/InlineFlowBox.h:
      * rendering/RenderBlock.h:
      * rendering/RenderBox.h:
      * rendering/RenderBoxModelObject.h:
      * rendering/RenderButton.h:
      * rendering/RenderFieldset.h:
      * rendering/RenderFileUploadControl.h:
      * rendering/RenderFlexibleBox.h:
      * rendering/RenderFlowThread.h:
      * rendering/RenderFullScreen.h:
      * rendering/RenderImage.h:
      * rendering/RenderLayer.h:
      * rendering/RenderLineBreak.h:
      * rendering/RenderListBox.h:
      * rendering/RenderListItem.h:
      * rendering/RenderListMarker.h:
      * rendering/RenderMenuList.h:
      * rendering/RenderMeter.h:
      * rendering/RenderObject.h:
      * rendering/RenderReplaced.h:
      * rendering/RenderSlider.h:
      * rendering/RenderTable.h:
      * rendering/RenderTableCell.h:
      * rendering/RenderText.h:
      * rendering/RenderTextControl.h:
      * rendering/RenderTextControlSingleLine.h:
      * rendering/RenderTextFragment.h:
      * rendering/RenderView.h:
      * rendering/RootInlineBox.h:
      * rendering/mathml/RenderMathMLBlock.h:
      * rendering/mathml/RenderMathMLFraction.h:
      * rendering/mathml/RenderMathMLOperator.h:
      * rendering/style/BasicShapes.h:
      * rendering/svg/RenderSVGModelObject.h:
      * rendering/svg/RenderSVGShape.h:
      * svg/SVGAnimatedBoolean.h:
      * svg/SVGAnimatedString.h:
      * svg/SVGAnimatedTransformList.h:
      * svg/SVGDocument.h:
      * svg/SVGElement.h:
      * svg/SVGElementInstance.h:
      * svg/SVGFontElement.h:
      * svg/SVGGElement.h:
      * svg/SVGGraphicsElement.h:
      * svg/SVGTransformable.h:
      * svg/properties/SVGAnimatedListPropertyTearOff.h:
      * svg/properties/SVGAnimatedPropertyMacros.h:
      * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
      * svg/properties/SVGListPropertyTearOff.h:
      * svg/properties/SVGPropertyTearOff.h:
      * workers/WorkerGlobalScope.h:
      
      Source/WTF:
      
      * wtf/Compiler.h:
      * wtf/FilePrintStream.h:
      * wtf/StringPrintStream.h:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@157044 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      70c60588
  22. 06 Oct, 2013 1 commit
    • fpizlo@apple.com's avatar
      Compress DFG stack layout · a62d4829
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=122024
      
      Reviewed by Oliver Hunt.
              
      The DFG needs to be able to store things at a known offset from frame pointer so that
      the runtime can read those things. Prior to this patch, the DFG would use the exact
      offsets that the bytecode asked for, even in the case of inlining, where it would use
      the callsite stack offset to shift all of the inlined function's variables over just as
      they would have been if a bytecode interpreter had really made the call.
              
      But this won't work once WebKit-LLVM integration is complete. LLVM has no notion of
      storing things at a fixed offset from the frame pointer. We could try to hack LLVM to do
      that, but it would seriously complicate LLVM's stack layout. But what we might be able
      to do is have LLVM tell us (via an addressof intrinsic and a side-channel) where some
      alloca landed relative to the frame pointer. Hence if the DFG can put all of its flushed
      variables in a contiguous range that can be expressed to LLVM as a struct that we
      alloca, then all of this can still work just fine.
              
      Previously the flushed variables didn't fit in a contiguous range, but this patch makes
      them contiguous by allowing the stack layout to be compressed.
              
      What this really means is that there is now a distinction between where the DFG saw a
      variable stored in bytecode and where it will actually store it in the resulting machine
      code. Henceforth when the DFG says "local" or "virtual register" it means the variable
      according to bytecode (with the stack offsetting for inlined code as before), but when
      it says "machine local" or "machine virtual register" it means the actual place where it
      will store things in the resulting machine code. All of the OSR exit, inlined arguments,
      captured variables, and various stack unwinding machine now knows about all of this.
              
      Note that the DFG's abstract interpretation still uses bytecode variables rather than
      machine variables. Same for CSE and abstract heaps. This makes sense since it means that
      we don't have to decide on machine variable allocation just to do those optimizations.
              
      The decision of what a local's machine location becomes is deferred to very late in
      compilation. We only need to assign machine locations to variables that must be stored
      to the stack. It's now mandatory to run some kind of "stack layout phase" that makes the
      decision and updates all data structures.
              
      So far the way that this is being used is just to compress the DFG stack layout, which
      is something that we should have done anyway, a long time ago. And the compression isn't
      even that good - the current StackLayoutPhase just identifies local indices that are
      unused in machine code and slides all other variables towards zero. This doesn't achieve
      particularly good compression but it is better than nothing. Note that this phase makes
      it seem like the bytecode-machine mapping is based on bytecode local indices; for
      example if bytecode local 4 is mapped to machine local 3 then it always will be. That's
      true for the current StackLayoutPhase but it _will not_ be true for all possible stack
      layout phases and it would be incorrect to assume that it should be true. This is why
      the current data structures have each VariableAccessData hold its own copy of the
      machine virtual register, and also have each InlineCallFrame report their own machine
      virtual registers for the various things. The DFG backend is likely to always use the
      dumb StackLayoutPhase since it is very cheap to run, but the FTL backend is likely to
      eventually get a better one, where we do some kind of constraint-based coloring: we
      institute constraints where some VariableAccessData's must have the same indices as some
      other ones, and also must be right next to some other ones; then we process all
      VariableAccessData's and attempt to assign them machine locals while preserving those
      constraints. This could lead to two VariableAccessDatas for the same bytecode local
      ending up with different machine locals.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::isCaptured):
      (JSC::CodeBlock::framePointerOffsetToGetActivationRegisters):
      (JSC::CodeBlock::machineSlowArguments):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::hasSlowArguments):
      * bytecode/CodeOrigin.cpp:
      (JSC::CodeOrigin::dump):
      (JSC::InlineCallFrame::calleeForCallFrame):
      (JSC::InlineCallFrame::dumpInContext):
      * bytecode/CodeOrigin.h:
      (JSC::InlineCallFrame::InlineCallFrame):
      (JSC::InlineCallFrame::calleeConstant):
      * bytecode/Operands.h:
      (JSC::Operands::indexForOperand):
      * dfg/DFGBasicBlock.cpp:
      (JSC::DFG::BasicBlock::SSAData::SSAData):
      * dfg/DFGBasicBlock.h:
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::ByteCodeParser):
      (JSC::DFG::ByteCodeParser::get):
      (JSC::DFG::ByteCodeParser::getLocal):
      (JSC::DFG::ByteCodeParser::flushDirect):
      (JSC::DFG::ByteCodeParser::flush):
      (JSC::DFG::ByteCodeParser::handleInlining):
      (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
      (JSC::DFG::ByteCodeParser::parse):
      * dfg/DFGCommon.h:
      * dfg/DFGCommonData.h:
      (JSC::DFG::CommonData::CommonData):
      * dfg/DFGDesiredWriteBarriers.cpp:
      (JSC::DFG::DesiredWriteBarrier::trigger):
      * dfg/DFGDesiredWriteBarriers.h:
      * dfg/DFGFlushLivenessAnalysisPhase.cpp:
      (JSC::DFG::FlushLivenessAnalysisPhase::run):
      (JSC::DFG::FlushLivenessAnalysisPhase::process):
      (JSC::DFG::FlushLivenessAnalysisPhase::reportError):
      * dfg/DFGFlushedAt.cpp: Added.
      (JSC::DFG::FlushedAt::dump):
      (JSC::DFG::FlushedAt::dumpInContext):
      * dfg/DFGFlushedAt.h: Added.
      (JSC::DFG::FlushedAt::FlushedAt):
      (JSC::DFG::FlushedAt::operator!):
      (JSC::DFG::FlushedAt::format):
      (JSC::DFG::FlushedAt::virtualRegister):
      (JSC::DFG::FlushedAt::operator==):
      (JSC::DFG::FlushedAt::operator!=):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::Graph):
      (JSC::DFG::Graph::dump):
      * dfg/DFGGraph.h:
      (JSC::DFG::Graph::bytecodeRegisterForArgument):
      (JSC::DFG::Graph::argumentsRegisterFor):
      (JSC::DFG::Graph::machineArgumentsRegisterFor):
      (JSC::DFG::Graph::uncheckedArgumentsRegisterFor):
      (JSC::DFG::Graph::activationRegister):
      (JSC::DFG::Graph::uncheckedActivationRegister):
      (JSC::DFG::Graph::machineActivationRegister):
      (JSC::DFG::Graph::uncheckedMachineActivationRegister):
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGJITCompiler.h:
      (JSC::DFG::JITCompiler::noticeOSREntry):
      * dfg/DFGNode.h:
      (JSC::DFG::Node::convertToGetLocalUnlinked):
      (JSC::DFG::Node::convertToGetLocal):
      (JSC::DFG::Node::machineLocal):
      (JSC::DFG::Node::hasUnlinkedMachineLocal):
      (JSC::DFG::Node::setUnlinkedMachineLocal):
      (JSC::DFG::Node::unlinkedMachineLocal):
      (JSC::DFG::Node::hasInlineStartData):
      (JSC::DFG::Node::inlineStartData):
      * dfg/DFGNodeFlags.cpp:
      (JSC::DFG::dumpNodeFlags):
      * dfg/DFGOSREntry.cpp:
      (JSC::DFG::prepareOSREntry):
      * dfg/DFGOSREntry.h:
      (JSC::DFG::OSREntryReshuffling::OSREntryReshuffling):
      * dfg/DFGOSRExitCompiler64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompilerCommon.cpp:
      (JSC::DFG::reifyInlinedCallFrames):
      * dfg/DFGOperations.cpp:
      * dfg/DFGOperations.h:
      * dfg/DFGPlan.cpp:
      (JSC::DFG::Plan::compileInThreadImpl):
      * dfg/DFGScoreBoard.h:
      (JSC::DFG::ScoreBoard::ScoreBoard):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileInlineStart):
      (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
      (JSC::DFG::SpeculativeJIT::createOSREntries):
      (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::calleeFrameOffset):
      (JSC::DFG::SpeculativeJIT::callFrameSlot):
      (JSC::DFG::SpeculativeJIT::argumentSlot):
      (JSC::DFG::SpeculativeJIT::callFrameTagSlot):
      (JSC::DFG::SpeculativeJIT::callFramePayloadSlot):
      (JSC::DFG::SpeculativeJIT::argumentTagSlot):
      (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
      (JSC::DFG::SpeculativeJIT::framePointerOffsetToGetActivationRegisters):
      (JSC::DFG::SpeculativeJIT::callOperation):
      (JSC::DFG::SpeculativeJIT::recordSetLocal):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::emitCall):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::emitCall):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGStackLayoutPhase.cpp: Added.
      (JSC::DFG::StackLayoutPhase::StackLayoutPhase):
      (JSC::DFG::StackLayoutPhase::run):
      (JSC::DFG::performStackLayout):
      * dfg/DFGStackLayoutPhase.h: Added.
      * dfg/DFGValidate.cpp:
      (JSC::DFG::Validate::validate):
      * dfg/DFGVariableAccessData.h:
      (JSC::DFG::VariableAccessData::machineLocal):
      (JSC::DFG::VariableAccessData::flushedAt):
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      (JSC::DFG::VirtualRegisterAllocationPhase::run):
      * ftl/FTLExitValue.h:
      (JSC::FTL::ExitValue::inJSStack):
      (JSC::FTL::ExitValue::inJSStackAsInt32):
      (JSC::FTL::ExitValue::inJSStackAsInt52):
      (JSC::FTL::ExitValue::inJSStackAsDouble):
      (JSC::FTL::ExitValue::virtualRegister):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileGetArgument):
      (JSC::FTL::LowerDFGToLLVM::compileGetLocal):
      (JSC::FTL::LowerDFGToLLVM::compileSetLocal):
      (JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
      (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
      * ftl/FTLOSRExitCompiler.cpp:
      (JSC::FTL::compileStub):
      * ftl/FTLValueSource.cpp:
      (JSC::FTL::ValueSource::dump):
      * ftl/FTLValueSource.h:
      (JSC::FTL::ValueSource::ValueSource):
      (JSC::FTL::ValueSource::kind):
      (JSC::FTL::ValueSource::operator!):
      (JSC::FTL::ValueSource::node):
      (JSC::FTL::ValueSource::virtualRegister):
      * interpreter/Interpreter.cpp:
      (JSC::unwindCallFrame):
      * interpreter/StackVisitor.cpp:
      (JSC::StackVisitor::readInlinedFrame):
      (JSC::StackVisitor::Frame::createArguments):
      (JSC::StackVisitor::Frame::existingArguments):
      * interpreter/StackVisitor.h:
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::addressFor):
      (JSC::AssemblyHelpers::tagFor):
      (JSC::AssemblyHelpers::payloadFor):
      (JSC::AssemblyHelpers::offsetOfArgumentsIncludingThis):
      * runtime/Arguments.cpp:
      (JSC::Arguments::tearOff):
      * runtime/Arguments.h:
      (JSC::Arguments::allocateSlowArguments):
      (JSC::Arguments::tryDeleteArgument):
      (JSC::Arguments::isDeletedArgument):
      (JSC::Arguments::isArgument):
      (JSC::Arguments::argument):
      (JSC::Arguments::finishCreation):
      * runtime/JSActivation.h:
      (JSC::JSActivation::create):
      (JSC::JSActivation::JSActivation):
      * runtime/JSFunction.cpp:
      (JSC::RetrieveArgumentsFunctor::operator()):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156984 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      a62d4829
  23. 26 Sep, 2013 4 commits
    • msaboff@apple.com's avatar
      VirtualRegister should be a class · 62aa8b77
      msaboff@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=121732
      
      Reviewed by Geoffrey Garen.
      
      This is a refactoring change.  Changed VirtualRegister from an enum to a class.
      Moved Operands::operandIsArgument(), operandToArgument(), argumentToOperand()
      and the similar functions for locals to VirtualRegister class.
      
      This is in preparation for changing the offset for the first local register from
      0 to -1.  This is needed since most native calling conventions have the architected
      frame pointer (e.g. %rbp for X86) point at the slot that stores the previous frame
      pointer.  Local values start below that address.
      
      * bytecode/CodeBlock.cpp:
      * bytecode/CodeBlock.h:
      * bytecode/Instruction.h:
      * bytecode/LazyOperandValueProfile.h:
      * bytecode/MethodOfGettingAValueProfile.cpp:
      * bytecode/Operands.h:
      * bytecode/UnlinkedCodeBlock.cpp:
      * bytecode/UnlinkedCodeBlock.h:
      * bytecode/ValueRecovery.h:
      * bytecode/VirtualRegister.h:
      * bytecompiler/BytecodeGenerator.cpp:
      * bytecompiler/BytecodeGenerator.h:
      * bytecompiler/RegisterID.h:
      * debugger/DebuggerCallFrame.cpp:
      * dfg/DFGAbstractHeap.h:
      * dfg/DFGAbstractInterpreterInlines.h:
      * dfg/DFGArgumentPosition.h:
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      * dfg/DFGByteCodeParser.cpp:
      * dfg/DFGCFGSimplificationPhase.cpp:
      * dfg/DFGCPSRethreadingPhase.cpp:
      * dfg/DFGCapabilities.cpp:
      * dfg/DFGConstantFoldingPhase.cpp:
      * dfg/DFGFlushLivenessAnalysisPhase.cpp:
      * dfg/DFGGraph.cpp:
      * dfg/DFGGraph.h:
      * dfg/DFGJITCode.cpp:
      * dfg/DFGNode.h:
      * dfg/DFGOSREntry.cpp:
      * dfg/DFGOSREntrypointCreationPhase.cpp:
      * dfg/DFGOSRExit.h:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      * dfg/DFGOSRExitCompiler64.cpp:
      * dfg/DFGRegisterBank.h:
      * dfg/DFGScoreBoard.h:
      * dfg/DFGSpeculativeJIT.cpp:
      * dfg/DFGSpeculativeJIT.h:
      * dfg/DFGSpeculativeJIT32_64.cpp:
      * dfg/DFGSpeculativeJIT64.cpp:
      * dfg/DFGValidate.cpp:
      * dfg/DFGValueRecoveryOverride.h:
      * dfg/DFGVariableAccessData.h:
      * dfg/DFGVariableEvent.h:
      * dfg/DFGVariableEventStream.cpp:
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      * ftl/FTLExitArgumentForOperand.h:
      * ftl/FTLLink.cpp:
      * ftl/FTLLowerDFGToLLVM.cpp:
      * ftl/FTLOSREntry.cpp:
      * ftl/FTLOSRExit.cpp:
      * ftl/FTLOSRExit.h:
      * ftl/FTLOSRExitCompiler.cpp:
      * interpreter/CallFrame.h:
      * interpreter/Interpreter.cpp:
      * jit/AssemblyHelpers.h:
      * jit/JIT.h:
      * jit/JITCall.cpp:
      * jit/JITCall32_64.cpp:
      * jit/JITInlines.h:
      * jit/JITOpcodes.cpp:
      * jit/JITOpcodes32_64.cpp:
      * jit/JITPropertyAccess32_64.cpp:
      * jit/JITStubs.cpp:
      * llint/LLIntSlowPaths.cpp:
      * profiler/ProfilerBytecodeSequence.cpp:
      * runtime/CommonSlowPaths.cpp:
      * runtime/JSActivation.cpp:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156511 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      62aa8b77
    • commit-queue@webkit.org's avatar
      Unreviewed, rolling out r156474. · bf43ed96
      commit-queue@webkit.org authored
      http://trac.webkit.org/changeset/156474
      https://bugs.webkit.org/show_bug.cgi?id=121966
      
      Broke the builds. (Requested by xenon on #webkit).
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::registerName):
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::createActivation):
      (JSC::CodeBlock::nameForRegister):
      * bytecode/CodeBlock.h:
      (JSC::unmodifiedArgumentsRegister):
      (JSC::CodeBlock::isKnownNotImmediate):
      (JSC::CodeBlock::setThisRegister):
      (JSC::CodeBlock::thisRegister):
      (JSC::CodeBlock::setArgumentsRegister):
      (JSC::CodeBlock::argumentsRegister):
      (JSC::CodeBlock::uncheckedArgumentsRegister):
      (JSC::CodeBlock::setActivationRegister):
      (JSC::CodeBlock::activationRegister):
      (JSC::CodeBlock::uncheckedActivationRegister):
      (JSC::CodeBlock::usesArguments):
      (JSC::CodeBlock::isCaptured):
      * bytecode/Instruction.h:
      * bytecode/LazyOperandValueProfile.h:
      (JSC::LazyOperandValueProfileKey::LazyOperandValueProfileKey):
      (JSC::LazyOperandValueProfileKey::operator!):
      (JSC::LazyOperandValueProfileKey::hash):
      (JSC::LazyOperandValueProfileKey::operand):
      (JSC::LazyOperandValueProfileKey::isHashTableDeletedValue):
      (JSC::LazyOperandValueProfile::LazyOperandValueProfile):
      * bytecode/MethodOfGettingAValueProfile.cpp:
      (JSC::MethodOfGettingAValueProfile::fromLazyOperand):
      (JSC::MethodOfGettingAValueProfile::getSpecFailBucket):
      * bytecode/Operands.h:
      (JSC::localToOperand):
      (JSC::operandIsLocal):
      (JSC::operandToLocal):
      (JSC::operandIsArgument):
      (JSC::operandToArgument):
      (JSC::argumentToOperand):
      (JSC::Operands::operand):
      (JSC::Operands::hasOperand):
      (JSC::Operands::setOperand):
      (JSC::Operands::operandForIndex):
      (JSC::Operands::setOperandFirstTime):
      * bytecode/UnlinkedCodeBlock.cpp:
      (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
      * bytecode/UnlinkedCodeBlock.h:
      (JSC::UnlinkedCodeBlock::setThisRegister):
      (JSC::UnlinkedCodeBlock::setActivationRegister):
      (JSC::UnlinkedCodeBlock::setArgumentsRegister):
      (JSC::UnlinkedCodeBlock::usesArguments):
      (JSC::UnlinkedCodeBlock::argumentsRegister):
      (JSC::UnlinkedCodeBlock::usesGlobalObject):
      (JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
      (JSC::UnlinkedCodeBlock::globalObjectRegister):
      (JSC::UnlinkedCodeBlock::thisRegister):
      (JSC::UnlinkedCodeBlock::activationRegister):
      * bytecode/ValueRecovery.h:
      (JSC::ValueRecovery::displacedInJSStack):
      (JSC::ValueRecovery::virtualRegister):
      (JSC::ValueRecovery::dumpInContext):
      * bytecode/VirtualRegister.h:
      (WTF::printInternal):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::generate):
      (JSC::BytecodeGenerator::addVar):
      (JSC::BytecodeGenerator::BytecodeGenerator):
      (JSC::BytecodeGenerator::createLazyRegisterIfNecessary):
      (JSC::BytecodeGenerator::newRegister):
      (JSC::BytecodeGenerator::emitLoadGlobalObject):
      (JSC::BytecodeGenerator::emitGetArgumentsLength):
      (JSC::BytecodeGenerator::emitGetArgumentByVal):
      (JSC::BytecodeGenerator::createArgumentsIfNecessary):
      (JSC::BytecodeGenerator::emitReturn):
      * bytecompiler/BytecodeGenerator.h:
      (JSC::BytecodeGenerator::registerFor):
      * bytecompiler/RegisterID.h:
      (JSC::RegisterID::RegisterID):
      (JSC::RegisterID::setIndex):
      (JSC::RegisterID::index):
      * debugger/DebuggerCallFrame.cpp:
      (JSC::DebuggerCallFrame::thisObject):
      * dfg/DFGAbstractHeap.h:
      (JSC::DFG::AbstractHeap::Payload::Payload):
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      (JSC::DFG::::clobberCapturedVars):
      * dfg/DFGArgumentPosition.h:
      (JSC::DFG::ArgumentPosition::dump):
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      (JSC::DFG::ArgumentsSimplificationPhase::run):
      (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
      (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::newVariableAccessData):
      (JSC::DFG::ByteCodeParser::getDirect):
      (JSC::DFG::ByteCodeParser::get):
      (JSC::DFG::ByteCodeParser::setDirect):
      (JSC::DFG::ByteCodeParser::set):
      (JSC::DFG::ByteCodeParser::getLocal):
      (JSC::DFG::ByteCodeParser::setLocal):
      (JSC::DFG::ByteCodeParser::getArgument):
      (JSC::DFG::ByteCodeParser::setArgument):
      (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal):
      (JSC::DFG::ByteCodeParser::findArgumentPosition):
      (JSC::DFG::ByteCodeParser::flush):
      (JSC::DFG::ByteCodeParser::flushDirect):
      (JSC::DFG::ByteCodeParser::getToInt32):
      (JSC::DFG::ByteCodeParser::getThis):
      (JSC::DFG::ByteCodeParser::addCall):
      (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
      (JSC::DFG::ByteCodeParser::handleCall):
      (JSC::DFG::ByteCodeParser::emitFunctionChecks):
      (JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
      (JSC::DFG::ByteCodeParser::handleInlining):
      (JSC::DFG::ByteCodeParser::handleMinMax):
      (JSC::DFG::ByteCodeParser::handleIntrinsic):
      (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor):
      (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
      (JSC::DFG::ByteCodeParser::handleGetByOffset):
      (JSC::DFG::ByteCodeParser::handleGetById):
      (JSC::DFG::ByteCodeParser::parseBlock):
      (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
      (JSC::DFG::ByteCodeParser::parse):
      * dfg/DFGCFGSimplificationPhase.cpp:
      * dfg/DFGCPSRethreadingPhase.cpp:
      (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocal):
      (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocal):
      (JSC::DFG::CPSRethreadingPhase::canonicalizeSetArgument):
      * dfg/DFGCapabilities.cpp:
      (JSC::DFG::capabilityLevel):
      * dfg/DFGConstantFoldingPhase.cpp:
      (JSC::DFG::ConstantFoldingPhase::isCapturedAtOrAfter):
      * dfg/DFGFlushLivenessAnalysisPhase.cpp:
      (JSC::DFG::FlushLivenessAnalysisPhase::setForNode):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::dump):
      * dfg/DFGGraph.h:
      (JSC::DFG::Graph::argumentsRegisterFor):
      (JSC::DFG::Graph::uncheckedArgumentsRegisterFor):
      (JSC::DFG::Graph::uncheckedActivationRegisterFor):
      (JSC::DFG::Graph::valueProfileFor):
      * dfg/DFGJITCode.cpp:
      (JSC::DFG::JITCode::reconstruct):
      * dfg/DFGNode.h:
      (JSC::DFG::Node::Node):
      (JSC::DFG::Node::convertToGetLocalUnlinked):
      (JSC::DFG::Node::hasVirtualRegister):
      (JSC::DFG::Node::virtualRegister):
      (JSC::DFG::Node::setVirtualRegister):
      * dfg/DFGOSREntry.cpp:
      (JSC::DFG::prepareOSREntry):
      * dfg/DFGOSREntrypointCreationPhase.cpp:
      (JSC::DFG::OSREntrypointCreationPhase::run):
      * dfg/DFGOSRExit.h:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompiler64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGRegisterBank.h:
      (JSC::DFG::RegisterBank::tryAllocate):
      (JSC::DFG::RegisterBank::allocateSpecific):
      (JSC::DFG::RegisterBank::retain):
      (JSC::DFG::RegisterBank::isInUse):
      (JSC::DFG::RegisterBank::dump):
      (JSC::DFG::RegisterBank::releaseAtIndex):
      (JSC::DFG::RegisterBank::allocateInternal):
      (JSC::DFG::RegisterBank::MapEntry::MapEntry):
      * dfg/DFGScoreBoard.h:
      (JSC::DFG::ScoreBoard::allocate):
      (JSC::DFG::ScoreBoard::use):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
      (JSC::DFG::SpeculativeJIT::checkConsistency):
      (JSC::DFG::SpeculativeJIT::compileMovHint):
      (JSC::DFG::SpeculativeJIT::compileInlineStart):
      (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::allocate):
      (JSC::DFG::SpeculativeJIT::fprAllocate):
      (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
      (JSC::DFG::SpeculativeJIT::flushRegisters):
      (JSC::DFG::SpeculativeJIT::isFlushed):
      (JSC::DFG::SpeculativeJIT::argumentSlot):
      (JSC::DFG::SpeculativeJIT::argumentTagSlot):
      (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
      (JSC::DFG::SpeculativeJIT::valueSourceForOperand):
      (JSC::DFG::SpeculativeJIT::setNodeForOperand):
      (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand):
      (JSC::DFG::SpeculativeJIT::recordSetLocal):
      (JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):
      (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGValidate.cpp:
      (JSC::DFG::Validate::validate):
      (JSC::DFG::Validate::validateCPS):
      (JSC::DFG::Validate::checkOperand):
      (JSC::DFG::Validate::reportValidationContext):
      * dfg/DFGValueRecoveryOverride.h:
      (JSC::DFG::ValueRecoveryOverride::ValueRecoveryOverride):
      * dfg/DFGVariableAccessData.h:
      (JSC::DFG::VariableAccessData::operand):
      (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
      (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
      (JSC::DFG::VariableAccessData::flushFormat):
      * dfg/DFGVariableEvent.h:
      (JSC::DFG::VariableEvent::spill):
      (JSC::DFG::VariableEvent::setLocal):
      * dfg/DFGVariableEventStream.cpp:
      (JSC::DFG::VariableEventStream::reconstruct):
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      (JSC::DFG::VirtualRegisterAllocationPhase::run):
      * ftl/FTLExitArgumentForOperand.h:
      (JSC::FTL::ExitArgumentForOperand::ExitArgumentForOperand):
      (JSC::FTL::ExitArgumentForOperand::operand):
      * ftl/FTLLink.cpp:
      (JSC::FTL::link):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
      (JSC::FTL::LowerDFGToLLVM::compileGetArgument):
      (JSC::FTL::LowerDFGToLLVM::compileExtractOSREntryLocal):
      (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
      (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
      (JSC::FTL::LowerDFGToLLVM::observeMovHint):
      (JSC::FTL::LowerDFGToLLVM::addressFor):
      (JSC::FTL::LowerDFGToLLVM::payloadFor):
      (JSC::FTL::LowerDFGToLLVM::tagFor):
      * ftl/FTLOSREntry.cpp:
      (JSC::FTL::prepareOSREntry):
      * ftl/FTLOSRExit.cpp:
      (JSC::FTL::OSRExit::convertToForward):
      * ftl/FTLOSRExit.h:
      * ftl/FTLOSRExitCompiler.cpp:
      (JSC::FTL::compileStub):
      * interpreter/CallFrame.h:
      * interpreter/Interpreter.cpp:
      (JSC::Interpreter::dumpRegisters):
      (JSC::unwindCallFrame):
      (JSC::Interpreter::unwind):
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::addressFor):
      (JSC::AssemblyHelpers::tagFor):
      (JSC::AssemblyHelpers::payloadFor):
      (JSC::AssemblyHelpers::argumentsRegisterFor):
      * jit/JIT.h:
      * jit/JITCall.cpp:
      (JSC::JIT::compileLoadVarargs):
      * jit/JITInlines.h:
      (JSC::JIT::emitGetVirtualRegister):
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_tear_off_arguments):
      (JSC::JIT::emit_op_get_pnames):
      (JSC::JIT::emit_op_enter):
      (JSC::JIT::emit_op_create_arguments):
      (JSC::JIT::emitSlow_op_get_argument_by_val):
      * jit/JITOpcodes32_64.cpp:
      (JSC::JIT::emit_op_enter):
      * jit/JITStubs.cpp:
      (JSC::DEFINE_STUB_FUNCTION):
      * llint/LLIntSlowPaths.cpp:
      (JSC::LLInt::LLINT_SLOW_PATH_DECL):
      * profiler/ProfilerBytecodeSequence.cpp:
      (JSC::Profiler::BytecodeSequence::BytecodeSequence):
      * runtime/CommonSlowPaths.cpp:
      (JSC::SLOW_PATH_DECL):
      * runtime/JSActivation.cpp:
      (JSC::JSActivation::argumentsGetter):
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156482 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      bf43ed96
    • msaboff@apple.com's avatar
      VirtualRegister should be a class · 1796ad0f
      msaboff@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=121732
      
      Reviewed by Geoffrey Garen.
      
      This is a refactoring change.  Changed VirtualRegister from an enum to a class.
      Moved Operands::operandIsArgument(), operandToArgument(), argumentToOperand()
      and the similar functions for locals to VirtualRegister class.
      
      This is in preparation for changing the offset for the first local register from
      0 to -1.  This is needed since most native calling conventions have the architected
      frame pointer (e.g. %rbp for X86) point at the slot that stores the previous frame
      pointer.  Local values start below that address.
      
      * bytecode/CodeBlock.cpp:
      * bytecode/CodeBlock.h:
      * bytecode/Instruction.h:
      * bytecode/LazyOperandValueProfile.h:
      * bytecode/MethodOfGettingAValueProfile.cpp:
      * bytecode/Operands.h:
      * bytecode/UnlinkedCodeBlock.cpp:
      * bytecode/UnlinkedCodeBlock.h:
      * bytecode/ValueRecovery.h:
      * bytecode/VirtualRegister.h:
      * bytecompiler/BytecodeGenerator.cpp:
      * bytecompiler/BytecodeGenerator.h:
      * bytecompiler/RegisterID.h:
      * debugger/DebuggerCallFrame.cpp:
      * dfg/DFGAbstractHeap.h:
      * dfg/DFGAbstractInterpreterInlines.h:
      * dfg/DFGArgumentPosition.h:
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      * dfg/DFGByteCodeParser.cpp:
      * dfg/DFGCFGSimplificationPhase.cpp:
      * dfg/DFGCPSRethreadingPhase.cpp:
      * dfg/DFGCapabilities.cpp:
      * dfg/DFGConstantFoldingPhase.cpp:
      * dfg/DFGFlushLivenessAnalysisPhase.cpp:
      * dfg/DFGGraph.cpp:
      * dfg/DFGGraph.h:
      * dfg/DFGJITCode.cpp:
      * dfg/DFGNode.h:
      * dfg/DFGOSREntry.cpp:
      * dfg/DFGOSREntrypointCreationPhase.cpp:
      * dfg/DFGOSRExit.h:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      * dfg/DFGOSRExitCompiler64.cpp:
      * dfg/DFGRegisterBank.h:
      * dfg/DFGScoreBoard.h:
      * dfg/DFGSpeculativeJIT.cpp:
      * dfg/DFGSpeculativeJIT.h:
      * dfg/DFGSpeculativeJIT64.cpp:
      * dfg/DFGValidate.cpp:
      * dfg/DFGValueRecoveryOverride.h:
      * dfg/DFGVariableAccessData.h:
      * dfg/DFGVariableEvent.h:
      * dfg/DFGVariableEventStream.cpp:
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      * ftl/FTLExitArgumentForOperand.h:
      * ftl/FTLLink.cpp:
      * ftl/FTLLowerDFGToLLVM.cpp:
      * ftl/FTLOSREntry.cpp:
      * ftl/FTLOSRExit.cpp:
      * ftl/FTLOSRExit.h:
      * ftl/FTLOSRExitCompiler.cpp:
      * interpreter/CallFrame.h:
      * interpreter/Interpreter.cpp:
      * jit/AssemblyHelpers.h:
      * jit/JIT.h:
      * jit/JITCall.cpp:
      * jit/JITInlines.h:
      * jit/JITOpcodes.cpp:
      * jit/JITOpcodes32_64.cpp:
      * jit/JITStubs.cpp:
      * llint/LLIntSlowPaths.cpp:
      * profiler/ProfilerBytecodeSequence.cpp:
      * runtime/CommonSlowPaths.cpp:
      * runtime/JSActivation.cpp:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156474 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1796ad0f
    • mhahnenberg@apple.com's avatar
      op_to_this shouldn't use value profiling · c5684714
      mhahnenberg@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=121920
      
      Reviewed by Geoffrey Garen.
      
      Source/JavaScriptCore:
      
      Currently it's the only opcode that uses m_singletonValue, which is unnecessary. Our current plan is
      to remove m_singletonValue so that GenGC can have a simpler story for handling CodeBlocks/FunctionExecutables
      during nursery collections.
      
      This patch adds an inline cache for the Structure of to_this so it no longer depends on the ValueProfile's
      m_singletonValue. Since nobody uses m_singletonValue now, this patch also removes m_singletonValue from
      ValueProfile.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::finalizeUnconditionally):
      (JSC::CodeBlock::stronglyVisitStrongReferences):
      (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
      (JSC::CodeBlock::updateAllValueProfilePredictions):
      (JSC::CodeBlock::updateAllPredictions):
      (JSC::CodeBlock::shouldOptimizeNow):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::updateAllValueProfilePredictions):
      (JSC::CodeBlock::updateAllPredictions):
      * bytecode/LazyOperandValueProfile.cpp:
      (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
      * bytecode/LazyOperandValueProfile.h:
      * bytecode/ValueProfile.h:
      (JSC::ValueProfileBase::ValueProfileBase):
      (JSC::ValueProfileBase::briefDescription):
      (JSC::ValueProfileBase::dump):
      (JSC::ValueProfileBase::computeUpdatedPrediction):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::BytecodeGenerator):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_to_this):
      (JSC::JIT::emitSlow_op_to_this):
      * jit/JITOpcodes32_64.cpp:
      (JSC::JIT::emit_op_to_this):
      (JSC::JIT::emitSlow_op_to_this):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/CommonSlowPaths.cpp:
      (JSC::SLOW_PATH_DECL):
      
      LayoutTests:
      
      Updated a couple tests that waited for two DFG compiles, but with this patch we
      don't do two compiles any more, so we don't want to wait forever.
      
      * js/script-tests/dfg-convert-this-polymorphic-object-then-exit-on-other.js:
      * js/script-tests/dfg-convert-this-polymorphic-object-then-exit-on-string.js:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156468 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      c5684714
  24. 23 Sep, 2013 1 commit
    • fpizlo@apple.com's avatar
      Never use ReturnPC for exception handling and quit using exception check... · 48a7bc89
      fpizlo@apple.com authored
      Never use ReturnPC for exception handling and quit using exception check indices as a lame replica of the CodeOrigin index
      https://bugs.webkit.org/show_bug.cgi?id=121734
      
      Reviewed by Mark Hahnenberg.
              
      Exception handling can deduce where the exception was thrown from by looking at the
      code origin that was stored into the call frame header. There is no need to pass any
      additional meta-data into the exception throwing logic. But the DFG was still doing it
      anyway.
              
      This removes all of the logic to pass extra meta-data into lookupExceptionHandler()
      and friends. It simplifies a lot of code.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * Target.pri:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::shrinkToFit):
      * bytecode/CodeBlock.h:
      (JSC::CodeBlock::codeOrigins):
      (JSC::CodeBlock::hasCodeOrigins):
      (JSC::CodeBlock::canGetCodeOrigin):
      (JSC::CodeBlock::codeOrigin):
      * bytecode/CodeOrigin.h:
      (JSC::InlineCallFrame::InlineCallFrame):
      * bytecode/InlineCallFrameSet.cpp: Added.
      (JSC::InlineCallFrameSet::InlineCallFrameSet):
      (JSC::InlineCallFrameSet::~InlineCallFrameSet):
      (JSC::InlineCallFrameSet::add):
      (JSC::InlineCallFrameSet::shrinkToFit):
      * bytecode/InlineCallFrameSet.h: Added.
      (JSC::InlineCallFrameSet::isEmpty):
      (JSC::InlineCallFrameSet::size):
      (JSC::InlineCallFrameSet::at):
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      (JSC::DFG::ArgumentsSimplificationPhase::run):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
      * dfg/DFGCommonData.cpp:
      (JSC::DFG::CommonData::addCodeOrigin):
      (JSC::DFG::CommonData::shrinkToFit):
      * dfg/DFGCommonData.h:
      * dfg/DFGDesiredWriteBarriers.cpp:
      (JSC::DFG::DesiredWriteBarrier::DesiredWriteBarrier):
      (JSC::DFG::DesiredWriteBarrier::trigger):
      * dfg/DFGDesiredWriteBarriers.h:
      (JSC::DFG::DesiredWriteBarriers::add):
      (JSC::DFG::initializeLazyWriteBarrierForInlineCallFrameExecutable):
      (JSC::DFG::initializeLazyWriteBarrierForInlineCallFrameCallee):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::Graph):
      * dfg/DFGGraph.h:
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::JITCompiler):
      (JSC::DFG::JITCompiler::compileExceptionHandlers):
      (JSC::DFG::JITCompiler::link):
      (JSC::DFG::JITCompiler::compileFunction):
      * dfg/DFGJITCompiler.h:
      (JSC::DFG::JITCompiler::emitStoreCodeOrigin):
      (JSC::DFG::JITCompiler::exceptionCheck):
      (JSC::DFG::JITCompiler::fastExceptionCheck):
      * dfg/DFGOperations.cpp:
      * dfg/DFGOperations.h:
      * dfg/DFGRepatch.cpp:
      (JSC::DFG::tryBuildGetByIDList):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
      (JSC::DFG::SpeculativeJIT::appendCallSetResult):
      (JSC::DFG::SpeculativeJIT::appendCall):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::emitCall):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::emitCall):
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      (JSC::DFG::VirtualRegisterAllocationPhase::run):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::callPreflight):
      * jit/AssemblyHelpers.h:
      (JSC::AssemblyHelpers::emitExceptionCheck):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156300 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      48a7bc89
  25. 22 Sep, 2013 1 commit
  26. 20 Sep, 2013 1 commit
    • fpizlo@apple.com's avatar
      Move CCallHelpers and AssemblyHelpers into jit/ and have JSInterfaceJIT use them · cd8eb2c1
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=121637
      
      Rubber stamped by Michael Saboff.
              
      Also moved GPRInfo/FPRInfo into jit/. Rolling back in after fixing JIT-only build
      and tests.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * Target.pri:
      * bytecode/ValueRecovery.h:
      (JSC::ValueRecovery::dumpInContext):
      * dfg/DFGAssemblyHelpers.cpp: Removed.
      * dfg/DFGAssemblyHelpers.h: Removed.
      * dfg/DFGBinarySwitch.h:
      * dfg/DFGByteCodeParser.cpp:
      * dfg/DFGCCallHelpers.h: Removed.
      * dfg/DFGDisassembler.cpp:
      * dfg/DFGFPRInfo.h: Removed.
      * dfg/DFGGPRInfo.h: Removed.
      * dfg/DFGGraph.cpp:
      * dfg/DFGGraph.h:
      * dfg/DFGJITCompiler.h:
      * dfg/DFGOSRExit.cpp:
      * dfg/DFGOSRExit.h:
      * dfg/DFGOSRExitCompiler.h:
      * dfg/DFGOSRExitCompilerCommon.h:
      * dfg/DFGRegisterBank.h:
      * dfg/DFGRegisterSet.h:
      * dfg/DFGRepatch.cpp:
      * dfg/DFGSilentRegisterSavePlan.h:
      * dfg/DFGThunks.cpp:
      * dfg/DFGVariableEvent.cpp:
      * ftl/FTLCArgumentGetter.h:
      (JSC::FTL::CArgumentGetter::CArgumentGetter):
      (JSC::FTL::CArgumentGetter::loadNext8):
      (JSC::FTL::CArgumentGetter::loadNext32):
      (JSC::FTL::CArgumentGetter::loadNext64):
      (JSC::FTL::CArgumentGetter::loadNextPtr):
      (JSC::FTL::CArgumentGetter::loadNextDouble):
      * ftl/FTLCompile.cpp:
      * ftl/FTLExitThunkGenerator.h:
      * ftl/FTLLink.cpp:
      * ftl/FTLThunks.cpp:
      * jit/AssemblyHelpers.cpp: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.cpp.
      * jit/AssemblyHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h.
      (JSC::AssemblyHelpers::AssemblyHelpers):
      (JSC::AssemblyHelpers::debugCall):
      * jit/CCallHelpers.h: Copied from Source/JavaScriptCore/dfg/DFGCCallHelpers.h.
      * jit/FPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGFPRInfo.h.
      (WTF::printInternal):
      * jit/GPRInfo.h: Copied from Source/JavaScriptCore/dfg/DFGGPRInfo.h.
      (WTF::printInternal):
      * jit/JIT.cpp:
      (JSC::JIT::JIT):
      * jit/JIT.h:
      * jit/JITPropertyAccess.cpp:
      (JSC::JIT::stringGetByValStubGenerator):
      * jit/JITPropertyAccess32_64.cpp:
      (JSC::JIT::stringGetByValStubGenerator):
      * jit/JSInterfaceJIT.h:
      (JSC::JSInterfaceJIT::JSInterfaceJIT):
      * jit/SpecializedThunkJIT.h:
      (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
      (JSC::SpecializedThunkJIT::finalize):
      * jit/ThunkGenerators.cpp:
      (JSC::linkForGenerator):
      (JSC::virtualForGenerator):
      (JSC::stringLengthTrampolineGenerator):
      (JSC::nativeForGenerator):
      (JSC::arityFixup):
      (JSC::charCodeAtThunkGenerator):
      (JSC::charAtThunkGenerator):
      (JSC::fromCharCodeThunkGenerator):
      (JSC::sqrtThunkGenerator):
      (JSC::floorThunkGenerator):
      (JSC::ceilThunkGenerator):
      (JSC::roundThunkGenerator):
      (JSC::expThunkGenerator):
      (JSC::logThunkGenerator):
      (JSC::absThunkGenerator):
      (JSC::powThunkGenerator):
      (JSC::imulThunkGenerator):
      * llint/LLIntThunks.cpp:
      (JSC::LLInt::generateThunkWithJumpTo):
      * runtime/JSCJSValue.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156184 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      cd8eb2c1
  27. 19 Sep, 2013 1 commit