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 2 commits
  3. 19 Jan, 2014 1 commit
  4. 18 Jan, 2014 6 commits
    • akling@apple.com's avatar
      CodeBlock: Size m_function{Exprs,Decls} to fit from creation. · f1241693
      akling@apple.com authored
      <https://webkit.org/b/127238>
      
      Reviewed by Anders Carlsson.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::CodeBlock):
      
          Use resizeToFit() instead of grow() for m_functionExprs and
          m_functionDecls since we know they will never change size.
      
      (JSC::CodeBlock::shrinkToFit):
      
          No need to shrink them here anymore.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162281 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      f1241693
    • 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
      Add a hasBreakpointFlag arg to the op_debug bytecode. · 31fc87e2
      mark.lam@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=127230.
      
      Reviewed by Geoffrey Garen.
      
      This is in anticipation of upcoming changes to support bytecode level
      breakpoints. This patch adds the flag to the op_debug bytecode and
      initializes it, but does not use it yet.
      
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::emitDebugHook):
      * llint/LowLevelInterpreter.asm:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162270 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      31fc87e2
    • 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 3 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
    • akling@apple.com's avatar
      Shrink WatchpointSet. · 0a0bb16a
      akling@apple.com authored
      <https://webkit.org/b/126694>
      
      Reorder the members of WatchpointSet, shrinking it by 8 bytes.
      767 kB progression on Membuster3.
      
      Reviewed by Antti Koivisto.
      
      * bytecode/Watchpoint.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161554 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      0a0bb16a
    • 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. 07 Jan, 2014 1 commit
  9. 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
  10. 04 Jan, 2014 1 commit
    • zandobersek@gmail.com's avatar
      Explicitly use the std:: nested name specifier when using std::pair, std::make_pair · 83a3119e
      zandobersek@gmail.com authored
      https://bugs.webkit.org/show_bug.cgi?id=126439
      
      Reviewed by Andreas Kling.
      
      Source/JavaScriptCore: 
      
      Instead of relying on std::pair and std::make_pair symbols being present in the current scope
      through the pair and make_pair symbols, the std:: specifier should be used explicitly.
      
      * bytecode/Opcode.cpp:
      (JSC::compareOpcodePairIndices):
      (JSC::OpcodeStats::~OpcodeStats):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::BytecodeGenerator):
      * parser/ASTBuilder.h:
      (JSC::ASTBuilder::makeBinaryNode):
      * parser/Parser.cpp:
      (JSC::Parser<LexerType>::parseIfStatement):
      * runtime/Structure.cpp:
      (JSC::StructureTransitionTable::contains):
      (JSC::StructureTransitionTable::get):
      (JSC::StructureTransitionTable::add):
      
      Source/WebCore: 
      
      Instead of relying on std::pair and std::make_pair symbols being present in the current scope
      through the pair and make_pair symbols, the std:: specifier should be used explicitly.
      
      * Modules/webdatabase/DatabaseTracker.cpp:
      (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
      * accessibility/AXObjectCache.h:
      * accessibility/AccessibilityARIAGridCell.cpp:
      (WebCore::AccessibilityARIAGridCell::rowIndexRange):
      (WebCore::AccessibilityARIAGridCell::columnIndexRange):
      * accessibility/AccessibilityARIAGridCell.h:
      * accessibility/AccessibilityObject.h:
      * accessibility/AccessibilityRenderObject.cpp:
      (WebCore::AccessibilityRenderObject::mathPrescripts):
      (WebCore::AccessibilityRenderObject::mathPostscripts):
      * accessibility/AccessibilityTable.cpp:
      (WebCore::AccessibilityTable::cellForColumnAndRow):
      * accessibility/AccessibilityTableCell.cpp:
      (WebCore::AccessibilityTableCell::rowIndexRange):
      (WebCore::AccessibilityTableCell::columnIndexRange):
      * accessibility/AccessibilityTableCell.h:
      * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
      (webkitAccessibleTableGetColumnAtIndex):
      (webkitAccessibleTableGetRowAtIndex):
      (webkitAccessibleTableGetColumnExtentAt):
      (webkitAccessibleTableGetRowExtentAt):
      (webkitAccessibleTableGetColumnHeader):
      (webkitAccessibleTableGetRowHeader):
      * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
      (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
      (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
      (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):
      * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
      (convertMathPairsToNSArray):
      * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
      (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
      * bindings/js/SerializedScriptValue.cpp:
      * dom/ContainerNode.cpp:
      * dom/StyledElement.cpp:
      (WebCore::attributeNameSort):
      * html/MediaFragmentURIParser.cpp:
      (WebCore::MediaFragmentURIParser::parseTimeFragment):
      * html/parser/HTMLMetaCharsetParser.h:
      * inspector/ContentSearchUtils.cpp:
      (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
      (WebCore::ContentSearchUtils::searchInTextByLines):
      * inspector/DOMPatchSupport.cpp:
      (WebCore::DOMPatchSupport::diff):
      (WebCore::DOMPatchSupport::innerPatchChildren):
      * inspector/DOMPatchSupport.h:
      * inspector/InspectorAgent.cpp:
      (WebCore::InspectorAgent::enable):
      (WebCore::InspectorAgent::evaluateForTestInFrontend):
      * inspector/InspectorAgent.h:
      * loader/FormSubmission.cpp:
      (WebCore::FormSubmission::create):
      * loader/cache/CachedImage.cpp:
      (WebCore::CachedImage::brokenImage):
      * loader/cache/CachedImage.h:
      * platform/URL.cpp:
      (WebCore::findHostnamesInMailToURL):
      (WebCore::encodeHostnames):
      * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
      * platform/graphics/FontCache.cpp:
      (WebCore::FontCache::getCachedFontData):
      * platform/graphics/WidthIterator.cpp:
      * platform/network/HTTPHeaderMap.cpp:
      (WebCore::HTTPHeaderMap::adopt):
      * platform/network/ResourceResponseBase.cpp:
      (WebCore::ResourceResponseBase::parseCacheControlDirectives):
      (WebCore::parseCacheHeader):
      * platform/text/AtomicStringKeyedMRUCache.h:
      * platform/text/LineBreakIteratorPoolICU.h:
      * rendering/InlineFlowBox.h:
      * rendering/RenderImage.cpp:
      (WebCore::RenderImage::imageSizeForError):
      (WebCore::RenderImage::paintReplaced):
      * rendering/RenderTableSection.cpp:
      (WebCore::RenderTableSection::cachedCollapsedBorder):
      * rendering/RenderTableSection.h:
      * rendering/svg/SVGTextRunRenderingContext.cpp:
      (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
      * svg/SVGAnimatedAngle.cpp:
      (WebCore::SVGAnimatedAngleAnimator::constructFromString):
      (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
      (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
      * svg/SVGAnimatedIntegerOptionalInteger.cpp:
      (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
      (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
      (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
      * svg/SVGAnimatedNumberOptionalNumber.cpp:
      (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
      (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
      (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
      * svg/SVGAnimatedType.cpp:
      (WebCore::SVGAnimatedType::createIntegerOptionalInteger):
      (WebCore::SVGAnimatedType::createNumberOptionalNumber):
      * svg/SVGAnimatedType.h:
      (WebCore::SVGAnimatedType::integerOptionalInteger):
      (WebCore::SVGAnimatedType::numberOptionalNumber):
      * svg/SVGAnimatedTypeAnimator.h:
      (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
      (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
      * svg/SVGParserUtilities.h:
      * svg/animation/SMILTimeContainer.h:
      
      Source/WebKit/mac: 
      
      Instead of relying on std::pair and std::make_pair symbols being present in the current scope
      through the pair and make_pair symbols, the std:: specifier should be used explicitly.
      
      * Plugins/Hosted/NetscapePluginInstanceProxy.h:
      * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release):
      (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
      
      Source/WebKit2: 
      
      Instead of relying on std::pair and std::make_pair symbols being present in the current scope
      through the pair and make_pair symbols, the std:: specifier should be used explicitly.
      
      * Shared/mac/ArgumentCodersMac.mm:
      (IPC::encode):
      * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
      (WebKit::WebNotificationManagerProxy::show):
      (WebKit::WebNotificationManagerProxy::cancel):
      (WebKit::WebNotificationManagerProxy::didDestroyNotification):
      * UIProcess/Notifications/WebNotificationManagerProxy.h:
      * UIProcess/WebContext.cpp:
      (WebKit::WebContext::createNewWebProcess):
      * UIProcess/WebContext.h:
      
      Source/WTF: 
      
      * wtf/VectorTraits.h: Stop bringing std::pair into the current scope.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@161309 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      83a3119e
  11. 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
  12. 17 Dec, 2013 1 commit
    • oliver@apple.com's avatar
      Cache getters and custom accessors on the prototype chain · 22b40a61
      oliver@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125602
      
      Reviewed by Michael Saboff.
      
      Source/JavaScriptCore:
      
      Support caching of custom getters and accessors on the prototype chain.
      This is relatively trivial and just requires a little work compared to
      the direct access mode as we're under more register pressure.
      
      * bytecode/StructureStubInfo.h:
        Removed the unsued initGetByIdProto as it was confusing to still have it present.
      * jit/Repatch.cpp:
      (JSC::generateProtoChainAccessStub):
      (JSC::tryCacheGetByID):
      (JSC::tryBuildGetByIDList):
      
      Tools:
      
      Make sure bencher scripts also make noInline exist
      
      * Scripts/bencher:
      
      LayoutTests:
      
      Added a bunch of new tests
      
      * js/regress/chain-custom-getter-expected.txt: Added.
      * js/regress/chain-custom-getter.html: Added.
      * js/regress/chain-getter-access-expected.txt: Added.
      * js/regress/chain-getter-access.html: Added.
      * js/regress/proto-custom-getter-expected.txt: Added.
      * js/regress/proto-custom-getter.html: Added.
      * js/regress/proto-getter-access-expected.txt: Added.
      * js/regress/proto-getter-access.html: Added.
      * js/regress/resources/regress-pre.js:
        Made sure that noInline always exists (either using testRunner.neverInlineFunction
        or a no-op function if nothing else is available)
      * js/regress/script-tests/chain-custom-getter.js: Added.
      (foo):
      * js/regress/script-tests/chain-getter-access.js: Added.
      (o.get value):
      (foo):
      * js/regress/script-tests/proto-custom-getter.js: Added.
      (foo):
      * js/regress/script-tests/proto-getter-access.js: Added.
      (o.get value):
      (foo):
      * js/regress/script-tests/simple-custom-getter.js: Added.
      (cycles.30000.numberObject.Number.foo):
      * js/regress/script-tests/simple-getter-access.js: Added.
      (o.get value):
      (foo):
      * js/regress/simple-custom-getter-expected.txt: Added.
      * js/regress/simple-custom-getter.html: Added.
      * js/regress/simple-getter-access-expected.txt: Added.
      * js/regress/simple-getter-access.html: Added.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160670 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      22b40a61
  13. 16 Dec, 2013 1 commit
    • rniwa@webkit.org's avatar
      REGRESSION: 2x regression on Dromaeo DOM query tests · 1293295f
      rniwa@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=125377
      
      Reviewed by Filip Pizlo.
      
      PerformanceTests:
      
      Added a micro-benchmark for updating a named property on document.
      
      * Bindings/update-name-getter.html: Added.
      * Skipped:
      
      Source/JavaScriptCore:
      
      The bug was caused by JSC not JIT'ing property access on "document" due to its type info having
      HasImpureGetOwnPropertySlot flag.
      
      Fixed the bug by new type info flag NewImpurePropertyFiresWatchpoints, which allows the baseline
      JIT to generate byte code for access properties on an object with named properties (a.k.a.
      custom name getter) in DOM. When a new named property appears on the object, VM is notified via
      VM::addImpureProperty and fires StructureStubClearingWatchpoint added during the repatch.
      
      * bytecode/GetByIdStatus.cpp:
      (JSC::GetByIdStatus::computeFromLLInt): Take the slow path if we have any object with impure
      properties in the prototype chain.
      (JSC::GetByIdStatus::computeForChain): Ditto.
      
      * jit/Repatch.cpp:
      (JSC::repatchByIdSelfAccess): Throw away the byte code when a new impure property is added on any
      object in the prototype chain via StructureStubClearingWatchpoint.
      (JSC::generateProtoChainAccessStub): Ditto.
      (JSC::tryCacheGetByID):
      (JSC::tryBuildGetByIDList):
      (JSC::tryRepatchIn): Ditto.
      
      * runtime/JSTypeInfo.h: Added NewImpurePropertyFiresWatchpoints.
      (JSC::TypeInfo::newImpurePropertyFiresWatchpoints): Added.
      
      * runtime/Operations.h:
      (JSC::normalizePrototypeChainForChainAccess): Don't exit early if VM will be notified of new
      impure property even if the object had impure properties.
      
      * runtime/Structure.h:
      (JSC::Structure::takesSlowPathInDFGForImpureProperty): Added. Wraps hasImpureGetOwnPropertySlot and
      asserts that newImpurePropertyFiresWatchpoints is true whenever hasImpureGetOwnPropertySlot is true.
      
      * runtime/VM.cpp:
      (JSC::VM::registerWatchpointForImpureProperty): Added.
      (JSC::VM::addImpureProperty): Added. HTMLDocument calls it to notify JSC of a new impure property.
      
      * runtime/VM.h:
      
      Source/WebCore:
      
      The bug was caused by JSC not JIT'ing property accesses on document because of its having
      custom named getter (named properties).  This resulted in resolution of methods on document
      such as getElementById to happen inside the interpreter.
      
      Fixed the bug by using the new JSC type info flag which tells JSC to JIT property access on
      document, and then notifying JSC whenever a new named property appeared on document.
      
      Tests: js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
             js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
             js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html
             js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
             js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
             js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html
      
      * bindings/js/JSDOMBinding.cpp:
      (WebCore::addImpureProperty): Wraps VM::addImpureProperty.
      * bindings/js/JSDOMBinding.h:
      * bindings/scripts/CodeGeneratorJS.pm:
      (GenerateHeader): Added the support for NewImpurePropertyFiresWatchpoints.
      * bindings/scripts/IDLAttributes.txt: Ditto.
      * html/HTMLDocument.cpp:
      (WebCore::HTMLDocument::addDocumentNamedItem): Calls addImpureProperty.
      * html/HTMLDocument.idl: Added NewImpurePropertyFiresWatchpoints.
      
      LayoutTests:
      
      Added more regression tests for throwing away byte code when a new named property appears.
      
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected: Rebaselined.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Fixed the test to use dfgShouldBe.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2-expected.txt: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3-expected.txt: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4-expected.txt: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-5-expected.txt: Added.
      * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-5.html: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2-expected.txt: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3-expected.txt: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4-expected.txt: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-5-expected.txt: Added.
      * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-5.html: Added.
      * js/dom/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed.
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160628 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1293295f
  14. 14 Dec, 2013 1 commit
    • fpizlo@apple.com's avatar
      Get rid of forward exit on UInt32ToNumber by adding an op_unsigned bytecode instruction · 9089acbe
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125553
      
      Reviewed by Oliver Hunt.
              
      UInt32ToNumber was a super complicated node because it had to do a speculation, but it
      would do it after we already had computed the urshift. It couldn't just back to the
      beginning of the urshift because the inputs to the urshift weren't necessarily live
      anymore. We couldn't jump forward to the beginning of the next instruction because the
      result of the urshift was not yet unsigned-converted.
              
      For a while we solved this by forward-exiting in UInt32ToNumber. But that's really
      gross and I want to get rid of all forward exits. They cause a lot of bugs.
              
      We could also have turned UInt32ToNumber to a backwards exit by forcing the inputs to
      the urshift to be live. I figure that this might be a bit too extreme.
              
      So, I just created a new place that we can exit to: I split op_urshift into op_urshift
      followed by op_unsigned. op_unsigned is an "unsigned cast" along the lines of what
      UInt32ToNumber does. This allows me to get rid of all of the nastyness in the DFG for
      forward exiting in UInt32ToNumber.
              
      This patch enables massive code carnage in the DFG and FTL, and brings us closer to
      eliminating one of the DFG's most confusing concepts. On the flipside, it does make the
      bytecode slightly more complex (one new instruction). This is a profitable trade. We
      want the DFG and FTL to trend towards simplicity, since they are both currently too
      complicated.
      
      * bytecode/BytecodeUseDef.h:
      (JSC::computeUsesForBytecodeOffset):
      (JSC::computeDefsForBytecodeOffset):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecode/ValueRecovery.cpp:
      (JSC::ValueRecovery::dumpInContext):
      * bytecode/ValueRecovery.h:
      (JSC::ValueRecovery::gpr):
      * bytecompiler/NodesCodegen.cpp:
      (JSC::BinaryOpNode::emitBytecode):
      (JSC::emitReadModifyAssignment):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::toInt32):
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGNodeType.h:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompiler64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileMovHint):
      (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
      * dfg/DFGSpeculativeJIT.h:
      * dfg/DFGSpeculativeJIT32_64.cpp:
      * dfg/DFGSpeculativeJIT64.cpp:
      * dfg/DFGStrengthReductionPhase.cpp:
      (JSC::DFG::StrengthReductionPhase::handleNode):
      (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild):
      (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild1):
      (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild2):
      * ftl/FTLFormattedValue.h:
      (JSC::FTL::int32Value):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileUInt32ToNumber):
      * ftl/FTLValueFormat.cpp:
      (JSC::FTL::reboxAccordingToFormat):
      (WTF::printInternal):
      * ftl/FTLValueFormat.h:
      * jit/JIT.cpp:
      (JSC::JIT::privateCompileMainPass):
      (JSC::JIT::privateCompileSlowCases):
      * jit/JIT.h:
      * jit/JITArithmetic.cpp:
      (JSC::JIT::emit_op_urshift):
      (JSC::JIT::emitSlow_op_urshift):
      (JSC::JIT::emit_op_unsigned):
      (JSC::JIT::emitSlow_op_unsigned):
      * jit/JITArithmetic32_64.cpp:
      (JSC::JIT::emitRightShift):
      (JSC::JIT::emitRightShiftSlowCase):
      (JSC::JIT::emit_op_unsigned):
      (JSC::JIT::emitSlow_op_unsigned):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/CommonSlowPaths.cpp:
      (JSC::SLOW_PATH_DECL):
      * runtime/CommonSlowPaths.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160587 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      9089acbe
  15. 12 Dec, 2013 1 commit
    • fpizlo@apple.com's avatar
      ARM64: Hang running pdfjs test, suspect DFG generated code for "in" · b7689f02
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124727
      <rdar://problem/15566923>
      
      Reviewed by Michael Saboff.
              
      Get rid of In's hackish use of StructureStubInfo. Previously it was using hotPathBegin,
      and it was the only IC that used that field, which was wasteful. Moreover, it used it
      to store two separate locations: the label for patching the jump and the label right
      after the jump. The code was relying on those two being the same label, which is true
      on X86 and some other platforms, but it isn't true on ARM64.
              
      This gets rid of hotPathBegin and makes In express those two locations as offsets from
      the callReturnLocation, which is analogous to what the other IC's do.
              
      This fixes a bug where any successful In patching would result in a trivially infinite
      loop - and hence a hang - on ARM64.
      
      * bytecode/StructureStubInfo.h:
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGJITCompiler.h:
      (JSC::DFG::InRecord::InRecord):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileIn):
      * jit/JITInlineCacheGenerator.cpp:
      (JSC::JITByIdGenerator::finalize):
      * jit/Repatch.cpp:
      (JSC::replaceWithJump):
      (JSC::patchJumpToGetByIdStub):
      (JSC::tryCachePutByID):
      (JSC::tryBuildPutByIdList):
      (JSC::tryRepatchIn):
      (JSC::resetGetByID):
      (JSC::resetPutByID):
      (JSC::resetIn):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160493 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      b7689f02
  16. 11 Dec, 2013 1 commit
    • commit-queue@webkit.org's avatar
      Store SHA1 hash in std::array · 6b617941
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=125446
      
      Patch by Laszlo Vidacs <lac@inf.u-szeged.hu> on 2013-12-11
      Reviewed by Darin Adler.
      
      Change Vector to std::array and use typedef.
      
      Source/JavaScriptCore:
      
      * bytecode/CodeBlockHash.cpp:
      (JSC::CodeBlockHash::CodeBlockHash):
      
      Source/WebCore:
      
      * Modules/websockets/WebSocketHandshake.cpp:
      (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
      * inspector/DOMPatchSupport.cpp:
      (WebCore::DOMPatchSupport::createDigest):
      * platform/network/soup/ResourceHandleSoup.cpp:
      (WebCore::HostTLSCertificateSet::computeCertificateHash):
      
      Source/WTF:
      
      * wtf/SHA1.cpp:
      (WTF::SHA1::computeHash):
      (WTF::SHA1::hexDigest):
      (WTF::SHA1::computeHexDigest):
      * wtf/SHA1.h:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160456 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      6b617941
  17. 10 Dec, 2013 3 commits
    • fpizlo@apple.com's avatar
      Impose and enforce some basic rules of sanity for where Phi functions are... · 50f06281
      fpizlo@apple.com authored
      Impose and enforce some basic rules of sanity for where Phi functions are allowed to occur and where their (optional) corresponding MovHints can be
      https://bugs.webkit.org/show_bug.cgi?id=125480
      
      Reviewed by Geoffrey Garen.
              
      Previously, if you wanted to insert some speculation right after where a value was
      produced, you'd get super confused if that value was produced by a Phi node.  You can't
      necessarily insert speculations after a Phi node because Phi nodes appear in this
      special sequence of Phis and MovHints that establish the OSR exit state for a block.
      So, you'd probably want to search for the next place where it's safe to insert things.
      We already do this "search for beginning of next bytecode instruction" search by
      looking at the next node that has a different CodeOrigin.  But this would be hard for a
      Phi because those Phis and MovHints have basically random CodeOrigins and they can all
      have different CodeOrigins.
      
      This change imposes some sanity for this situation:
      
      - Phis must have unset CodeOrigins.
      
      - In each basic block, all nodes that have unset CodeOrigins must come before all nodes
        that have set CodeOrigins.
      
      This all ends up working out just great because prior to this change we didn't have a 
      use for unset CodeOrigins.  I think it's appropriate to make "unset CodeOrigin" mean
      that we're in the prologue of a basic block.
      
      It's interesting what this means for block merging, which we don't yet do in SSA.
      Consider merging the edge A->B.  One possibility is that the block merger is now
      required to clean up Phi/Upsilons, and reascribe the MovHints to have the CodeOrigin of
      the A's block terminal.  But an answer that might be better is that the originless
      nodes at the top of the B are just given the origin of the terminal and we keep the
      Phis.  That would require changing the above rules.  We'll see how it goes, and what we
      end up picking...
      
      Overall, this special-things-at-the-top rule is analogous to what other SSA-based
      compilers do.  For example, LLVM has rules mandating that Phis appear at the top of a
      block.
      
      * bytecode/CodeOrigin.cpp:
      (JSC::CodeOrigin::dump):
      * dfg/DFGOSRExitBase.h:
      (JSC::DFG::OSRExitBase::OSRExitBase):
      * dfg/DFGSSAConversionPhase.cpp:
      (JSC::DFG::SSAConversionPhase::run):
      * dfg/DFGValidate.cpp:
      (JSC::DFG::Validate::validate):
      (JSC::DFG::Validate::validateSSA):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160348 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      50f06281
    • fpizlo@apple.com's avatar
      Reveal array bounds checks in DFG IR · 8624c4b8
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125253
      
      Reviewed by Oliver Hunt and Mark Hahnenberg.
              
      In SSA mode, this reveals array bounds checks and the load of array length in DFG IR,
      making this a candidate for LICM.
      
      This also fixes a long-standing performance bug where the JSObject slow paths would
      always create contiguous storage, rather than type-specialized storage, when doing a
      "storage creating" storage, like:
              
          var o = {};
          o[0] = 42;
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/ExitKind.cpp:
      (JSC::exitKindToString):
      (JSC::exitKindIsCountable):
      * bytecode/ExitKind.h:
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      * dfg/DFGArrayMode.cpp:
      (JSC::DFG::permitsBoundsCheckLowering):
      (JSC::DFG::ArrayMode::permitsBoundsCheckLowering):
      * dfg/DFGArrayMode.h:
      (JSC::DFG::ArrayMode::lengthNeedsStorage):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGConstantFoldingPhase.cpp:
      (JSC::DFG::ConstantFoldingPhase::foldConstants):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      * dfg/DFGNodeType.h:
      * dfg/DFGPlan.cpp:
      (JSC::DFG::Plan::compileInThreadImpl):
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      * dfg/DFGSSALoweringPhase.cpp: Added.
      (JSC::DFG::SSALoweringPhase::SSALoweringPhase):
      (JSC::DFG::SSALoweringPhase::run):
      (JSC::DFG::SSALoweringPhase::handleNode):
      (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
      (JSC::DFG::performSSALowering):
      * dfg/DFGSSALoweringPhase.h: Added.
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileCheckInBounds):
      (JSC::FTL::LowerDFGToLLVM::compileGetByVal):
      (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
      (JSC::FTL::LowerDFGToLLVM::contiguousPutByValOutOfBounds):
      * runtime/JSObject.cpp:
      (JSC::JSObject::convertUndecidedForValue):
      (JSC::JSObject::createInitialForValueAndSet):
      (JSC::JSObject::putByIndexBeyondVectorLength):
      (JSC::JSObject::putDirectIndexBeyondVectorLength):
      * runtime/JSObject.h:
      * tests/stress/float32array-out-of-bounds.js: Added.
      (make):
      (foo):
      (test):
      * tests/stress/int32-object-out-of-bounds.js: Added.
      (make):
      (foo):
      (test):
      * tests/stress/int32-out-of-bounds.js: Added.
      (foo):
      (test):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160347 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8624c4b8
    • weinig@apple.com's avatar
      Replace use of WTF::FixedArray with std::array · be6603a8
      weinig@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125475
      
      Reviewed by Anders Carlsson.
      
      ../JavaScriptCore: 
      
      * bytecode/CodeBlockHash.cpp:
      (JSC::CodeBlockHash::dump):
      * bytecode/Opcode.cpp:
      (JSC::OpcodeStats::~OpcodeStats):
      * dfg/DFGCSEPhase.cpp:
      * ftl/FTLAbstractHeap.h:
      * heap/MarkedSpace.h:
      * parser/ParserArena.h:
      * runtime/CodeCache.h:
      * runtime/DateInstanceCache.h:
      * runtime/JSGlobalObject.cpp:
      (JSC::JSGlobalObject::reset):
      * runtime/JSGlobalObject.h:
      * runtime/JSString.h:
      * runtime/LiteralParser.h:
      * runtime/NumericStrings.h:
      * runtime/RegExpCache.h:
      * runtime/SmallStrings.h:
      
      ../WebCore: 
      
      * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
      * platform/graphics/GlyphMetricsMap.h:
      
      ../WTF: 
      
      * wtf/AVLTree.h:
      * wtf/Bitmap.h:
      * wtf/SixCharacterHash.cpp:
      (WTF::integerToSixCharacterHashString):
      * wtf/SixCharacterHash.h:
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160344 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      be6603a8
  18. 06 Dec, 2013 1 commit
  19. 04 Dec, 2013 1 commit
    • fpizlo@apple.com's avatar
      Infer constant closure variables · 88fedde1
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124630
      
      Source/JavaScriptCore: 
      
      Reviewed by Geoffrey Garen.
              
      Captured variables that are assigned once (not counting op_enter's Undefined
      initialization) and that are contained within a function that has thus far only been
      entered once are now constant folded. It's pretty awesome.
              
      This involves a watchpoint on the assignment to variables and a watchpoint on entry
      into the function. The former is reused from global variable constant inference and the
      latter is reused from one-time closure inference.
      
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::CodeBlock):
      * bytecode/Instruction.h:
      (JSC::Instruction::Instruction):
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecode/UnlinkedCodeBlock.h:
      (JSC::UnlinkedInstruction::UnlinkedInstruction):
      * bytecode/VariableWatchpointSet.h:
      (JSC::VariableWatchpointSet::invalidate):
      * bytecode/Watchpoint.h:
      (JSC::WatchpointSet::invalidate):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::addVar):
      (JSC::BytecodeGenerator::BytecodeGenerator):
      (JSC::BytecodeGenerator::emitInitLazyRegister):
      (JSC::BytecodeGenerator::emitMove):
      (JSC::BytecodeGenerator::emitNewFunctionInternal):
      (JSC::BytecodeGenerator::createArgumentsIfNecessary):
      * bytecompiler/BytecodeGenerator.h:
      (JSC::BytecodeGenerator::addVar):
      (JSC::BytecodeGenerator::watchableVariable):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::getLocal):
      (JSC::DFG::ByteCodeParser::inferredConstant):
      (JSC::DFG::ByteCodeParser::parseBlock):
      (JSC::DFG::ByteCodeParser::parse):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::tryGetActivation):
      (JSC::DFG::Graph::tryGetRegisters):
      * dfg/DFGGraph.h:
      * jit/JIT.cpp:
      (JSC::JIT::privateCompileMainPass):
      (JSC::JIT::privateCompileSlowCases):
      * jit/JIT.h:
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_mov):
      (JSC::JIT::emit_op_captured_mov):
      (JSC::JIT::emit_op_new_captured_func):
      (JSC::JIT::emitSlow_op_captured_mov):
      * jit/JITOpcodes32_64.cpp:
      (JSC::JIT::emit_op_mov):
      (JSC::JIT::emit_op_captured_mov):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/CommonSlowPaths.cpp:
      (JSC::SLOW_PATH_DECL):
      * runtime/CommonSlowPaths.h:
      * runtime/ConstantMode.h: Added.
      * runtime/JSGlobalObject.h:
      * runtime/JSScope.cpp:
      (JSC::abstractAccess):
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTableEntry::prepareToWatch):
      
      LayoutTests: 
      
      Reviewed by Geoffrey Garen.
              
      This adds both correctness and performance tests for constant closure variable
      inference.
      
      * js/regress/infer-closure-const-then-mov-expected.txt: Added.
      * js/regress/infer-closure-const-then-mov-no-inline-expected.txt: Added.
      * js/regress/infer-closure-const-then-mov-no-inline.html: Added.
      * js/regress/infer-closure-const-then-mov.html: Added.
      * js/regress/infer-closure-const-then-put-to-scope-expected.txt: Added.
      * js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt: Added.
      * js/regress/infer-closure-const-then-put-to-scope-no-inline.html: Added.
      * js/regress/infer-closure-const-then-put-to-scope.html: Added.
      * js/regress/infer-closure-const-then-reenter-expected.txt: Added.
      * js/regress/infer-closure-const-then-reenter-no-inline-expected.txt: Added.
      * js/regress/infer-closure-const-then-reenter-no-inline.html: Added.
      * js/regress/infer-closure-const-then-reenter.html: Added.
      * js/regress/script-tests/infer-closure-const-then-mov-no-inline.js: Added.
      * js/regress/script-tests/infer-closure-const-then-mov.js: Added.
      * js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js: Added.
      (thingy.):
      (thingy):
      * js/regress/script-tests/infer-closure-const-then-put-to-scope.js: Added.
      (thingy.):
      (thingy):
      * js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js: Added.
      (.return.foo):
      (foo):
      * js/regress/script-tests/infer-closure-const-then-reenter.js: Added.
      (.return.foo):
      (foo):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@160109 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      88fedde1
  20. 02 Dec, 2013 5 commits
    • 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
    • fpizlo@apple.com's avatar
      Instead of watchpointing activation allocation, we should watchpoint entry... · a4ea0663
      fpizlo@apple.com authored
      Instead of watchpointing activation allocation, we should watchpoint entry into functions that have captured variables
      https://bugs.webkit.org/show_bug.cgi?id=125052
      
      Reviewed by Mark Hahnenberg.
              
      This makes us watch function entry rather than activation creation. We only incur the
      costs of doing so for functions that have captured variables, and only on the first two
      entries into the function. This means that closure variable constant inference will
      naturally work even for local uses of the captured variable, like:
              
          (function(){
              var blah = 42;
              ... // stuff
              function () { ... blah /* we can fold this to 42 */ }
              ... blah // we can also fold this to 42.
          })();
              
      Previously, only the nested use would have been foldable.
      
      * bytecode/BytecodeLivenessAnalysis.cpp:
      (JSC::computeUsesForBytecodeOffset):
      (JSC::computeDefsForBytecodeOffset):
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecode/Watchpoint.h:
      (JSC::WatchpointSet::touch):
      (JSC::InlineWatchpointSet::touch):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::BytecodeGenerator):
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGCapabilities.cpp:
      (JSC::DFG::capabilityLevel):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      * dfg/DFGNode.h:
      (JSC::DFG::Node::hasSymbolTable):
      * dfg/DFGNodeType.h:
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGWatchpointCollectionPhase.cpp:
      (JSC::DFG::WatchpointCollectionPhase::handle):
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      * jit/JIT.cpp:
      (JSC::JIT::privateCompileMainPass):
      * jit/JIT.h:
      * jit/JITOpcodes.cpp:
      (JSC::JIT::emit_op_touch_entry):
      * llint/LowLevelInterpreter.asm:
      * runtime/CommonSlowPaths.cpp:
      (JSC::SLOW_PATH_DECL):
      * runtime/CommonSlowPaths.h:
      * runtime/JSActivation.h:
      (JSC::JSActivation::create):
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTable::SymbolTable):
      * runtime/SymbolTable.h:
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159942 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      a4ea0663
    • commit-queue@webkit.org's avatar
      Remove stdio.h from JSC files. · 5e2fce2c
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=125066
      
      Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02
      Reviewed by Michael Saboff.
      
      Remove stdio.h, when it is not necessary to be included.
      
      * bytecode/CodeBlock.cpp:
      * bytecode/StructureSet.h:
      * profiler/LegacyProfiler.cpp:
      * profiler/Profile.cpp:
      * profiler/ProfileNode.cpp:
      * yarr/YarrInterpreter.cpp:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159937 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      5e2fce2c
    • commit-queue@webkit.org's avatar
      Unused include files when building without JIT. · d334b757
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=125062
      
      Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02
      Reviewed by Michael Saboff.
      
      We should organize the includes, and guard JIT methods
      in ValueRecovery.
      
      * bytecode/ValueRecovery.cpp: Guard include files.
      * bytecode/ValueRecovery.h: Guard JIT methods.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159936 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      d334b757
    • commit-queue@webkit.org's avatar
      JSC does not build if OPCODE_STATS is enabled. · 2f00452d
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=125011
      
      Patch by László Langó <lango@inf.u-szeged.hu> on 2013-12-02
      Reviewed by Filip Pizlo.
      
      * bytecode/Opcode.cpp:
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159933 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      2f00452d
  21. 30 Nov, 2013 1 commit
    • fpizlo@apple.com's avatar
      Finally remove those DFG_ENABLE things · ecd97b0c
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=125025
      
      Rubber stamped by Sam Weinig.
              
      This removes a bunch of unused and untested insanity.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::tallyFrequentExitSites):
      * dfg/DFGArgumentsSimplificationPhase.cpp:
      (JSC::DFG::ArgumentsSimplificationPhase::run):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
      (JSC::DFG::ByteCodeParser::getArrayModeConsideringSlowPath):
      (JSC::DFG::ByteCodeParser::makeSafe):
      (JSC::DFG::ByteCodeParser::makeDivSafe):
      (JSC::DFG::ByteCodeParser::handleCall):
      (JSC::DFG::ByteCodeParser::handleInlining):
      (JSC::DFG::ByteCodeParser::parseBlock):
      (JSC::DFG::ByteCodeParser::linkBlock):
      (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
      (JSC::DFG::ByteCodeParser::parseCodeBlock):
      (JSC::DFG::ByteCodeParser::parse):
      (JSC::DFG::parse):
      * dfg/DFGCFGSimplificationPhase.cpp:
      (JSC::DFG::CFGSimplificationPhase::run):
      (JSC::DFG::CFGSimplificationPhase::convertToJump):
      (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
      * dfg/DFGCSEPhase.cpp:
      (JSC::DFG::CSEPhase::endIndexForPureCSE):
      (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
      (JSC::DFG::CSEPhase::setReplacement):
      (JSC::DFG::CSEPhase::eliminate):
      (JSC::DFG::CSEPhase::performNodeCSE):
      * dfg/DFGCommon.h:
      (JSC::DFG::verboseCompilationEnabled):
      (JSC::DFG::logCompilationChanges):
      (JSC::DFG::shouldDumpGraphAtEachPhase):
      * dfg/DFGConstantFoldingPhase.cpp:
      (JSC::DFG::ConstantFoldingPhase::foldConstants):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
      * dfg/DFGInPlaceAbstractState.cpp:
      (JSC::DFG::InPlaceAbstractState::initialize):
      (JSC::DFG::InPlaceAbstractState::endBasicBlock):
      (JSC::DFG::InPlaceAbstractState::mergeStateAtTail):
      (JSC::DFG::InPlaceAbstractState::mergeToSuccessors):
      * dfg/DFGJITCompiler.cpp:
      (JSC::DFG::JITCompiler::compileBody):
      (JSC::DFG::JITCompiler::link):
      * dfg/DFGOSRExitCompiler.cpp:
      * dfg/DFGOSRExitCompiler32_64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompiler64.cpp:
      (JSC::DFG::OSRExitCompiler::compileExit):
      * dfg/DFGOSRExitCompilerCommon.cpp:
      (JSC::DFG::adjustAndJumpToTarget):
      * dfg/DFGPredictionInjectionPhase.cpp:
      (JSC::DFG::PredictionInjectionPhase::run):
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::run):
      (JSC::DFG::PredictionPropagationPhase::propagate):
      (JSC::DFG::PredictionPropagationPhase::propagateForward):
      (JSC::DFG::PredictionPropagationPhase::propagateBackward):
      (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
      * dfg/DFGScoreBoard.h:
      (JSC::DFG::ScoreBoard::use):
      * dfg/DFGSlowPathGenerator.h:
      (JSC::DFG::SlowPathGenerator::generate):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
      (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
      (JSC::DFG::SpeculativeJIT::dump):
      (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
      (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
      * dfg/DFGSpeculativeJIT.h:
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
      (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
      (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
      (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
      (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
      (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
      (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGVariableEventStream.cpp:
      (JSC::DFG::VariableEventStream::reconstruct):
      * dfg/DFGVariableEventStream.h:
      (JSC::DFG::VariableEventStream::appendAndLog):
      * dfg/DFGVirtualRegisterAllocationPhase.cpp:
      (JSC::DFG::VirtualRegisterAllocationPhase::run):
      * jit/JIT.cpp:
      (JSC::JIT::privateCompile):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      ecd97b0c
  22. 28 Nov, 2013 1 commit
    • fpizlo@apple.com's avatar
      Infer one-time scopes · 1a72409c
      fpizlo@apple.com authored
      https://bugs.webkit.org/show_bug.cgi?id=124812
      
      Source/JavaScriptCore: 
      
      Reviewed by Oliver Hunt.
              
      This detects JSActivations that are created only once. The JSActivation pointer is then
      baked into the machine code.
              
      This takes advantage of the one-time scope inference to reduce the number of
      indirections needed to get to a closure variable in case where the scope is only
      allocated once. This isn't really a speed-up since in the common case the total number
      of instruction bytes needed to load the scope from the stack is about equal to the
      number of instruction bytes needed to materialize the absolute address of a scoped
      variable. But, this is a necessary prerequisite to
      https://bugs.webkit.org/show_bug.cgi?id=124630, so it's probably a good idea anyway.
      
      * bytecode/CodeBlock.cpp:
      (JSC::CodeBlock::dumpBytecode):
      (JSC::CodeBlock::CodeBlock):
      (JSC::CodeBlock::finalizeUnconditionally):
      * bytecode/Instruction.h:
      * bytecode/Opcode.h:
      (JSC::padOpcodeName):
      * bytecode/Watchpoint.h:
      (JSC::WatchpointSet::notifyWrite):
      (JSC::InlineWatchpointSet::notifyWrite):
      * bytecompiler/BytecodeGenerator.cpp:
      (JSC::BytecodeGenerator::emitResolveScope):
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGCSEPhase.cpp:
      (JSC::DFG::CSEPhase::scopedVarLoadElimination):
      (JSC::DFG::CSEPhase::scopedVarStoreElimination):
      (JSC::DFG::CSEPhase::getLocalLoadElimination):
      (JSC::DFG::CSEPhase::setLocalStoreElimination):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      * dfg/DFGGraph.cpp:
      (JSC::DFG::Graph::tryGetRegisters):
      * dfg/DFGGraph.h:
      * dfg/DFGNode.h:
      (JSC::DFG::Node::varNumber):
      (JSC::DFG::Node::hasSymbolTable):
      (JSC::DFG::Node::symbolTable):
      * dfg/DFGNodeType.h:
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGWatchpointCollectionPhase.cpp:
      (JSC::DFG::WatchpointCollectionPhase::handle):
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileGetClosureRegisters):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/JSActivation.h:
      (JSC::JSActivation::create):
      * runtime/JSScope.cpp:
      (JSC::abstractAccess):
      (JSC::JSScope::abstractResolve):
      * runtime/JSScope.h:
      (JSC::ResolveOp::ResolveOp):
      * runtime/JSVariableObject.h:
      (JSC::JSVariableObject::registers):
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTable::SymbolTable):
      * runtime/SymbolTable.h:
      
      LayoutTests: 
      
      Reviewed by Oliver Hunt.
      
      * js/regress/infer-one-time-closure-expected.txt: Added.
      * js/regress/infer-one-time-closure-ten-vars-expected.txt: Added.
      * js/regress/infer-one-time-closure-ten-vars.html: Added.
      * js/regress/infer-one-time-closure-two-vars-expected.txt: Added.
      * js/regress/infer-one-time-closure-two-vars.html: Added.
      * js/regress/infer-one-time-closure.html: Added.
      * js/regress/infer-one-time-deep-closure-expected.txt: Added.
      * js/regress/infer-one-time-deep-closure.html: Added.
      * js/regress/script-tests/infer-one-time-closure-ten-vars.js: Added.
      * js/regress/script-tests/infer-one-time-closure-two-vars.js: Added.
      * js/regress/script-tests/infer-one-time-closure.js: Added.
      * js/regress/script-tests/infer-one-time-deep-closure.js: Added.
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159834 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      1a72409c
  23. 27 Nov, 2013 3 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
      Restructure global variable constant inference so that it could work for any... · 8646834a
      fpizlo@apple.com authored
      Restructure global variable constant inference so that it could work for any kind of symbol table variable
      https://bugs.webkit.org/show_bug.cgi?id=124760
      
      Reviewed by Oliver Hunt.
              
      This changes the way global variable constant inference works so that it can be reused
      for closure variable constant inference. Some of the premises that originally motivated
      this patch are somewhat wrong, but it led to some simplifications anyway and I suspect
      that we'll be able to fix those premises in the future. The main point of this patch is
      to make it easy to reuse global variable constant inference for closure variable
      constant inference, and this will be possible provided we can also either (a) infer
      one-shot closures (easy) or (b) infer closure variables that are always assigned prior
      to first use.
              
      One of the things that this patch is meant to enable is constant inference for closure
      variables that may be part of a multi-shot closure. Closure variables may be
      instantiated multiple times, like:
              
          function foo() {
              var WIDTH = 45;
              function bar() {
                  ... use WIDTH ...
              }
              ...
          }
              
      Even if foo() is called many times and WIDTH is assigned to multiple times, that
      doesn't change the fact that it's a constant. The goal of closure variable constant
      inference is to catch any case where a closure variable has been assigned at least once
      and its value has never changed. This patch doesn't implement that, but it does change
      global variable constant inference to have most of the powers needed to do that. Note
      that most likely we will use this functionality only to implement constant inference
      for one-shot closures, but the resulting machinery is still simpler than what we had
      before.
              
      This involves three changes:
              
          - The watchpoint object now contains the inferred value. This involves creating a
            new kind of watchpoint set, the VariableWatchpointSet. We will reuse this object
            for closure variables.
              
          - Writing to a variable that is watchpointed still involves these three states that
            we proceed through monotonically (Uninitialized->Initialized->Invalidated) but
            now, the Initialized->Invalidated state transition only happens if we change the
            variable's value, rather than store to the variable. Repeatedly storing the same
            value won't change the variable's state.
              
          - On 64-bit systems (the only systems on which we do concurrent JIT), you no longer
            need fancy fencing to get a consistent view of the watchpoint in the JIT. The
            state of the VariableWatchpointSet for the purposes of constant folding is
            entirely encapsulated in the VariableWatchpointSet::m_inferredValue. If that is
            JSValue() then you cannot fold (either because the set is uninitialized or
            because it's invalidated - doesn't matter which); on the other hand if the value
            is anything other than JSValue() then you can fold, and that's the value you fold
            to. Simple!
              
      This also changes the way that DFG IR deals with variable watchpoints. It's now
      oblivious to global variables. You install a watchpoint using VariableWatchpoint and
      you notify write using NotifyWrite. Easy!
              
      Note that this will requires some more tweaks because of the fact that op_enter will
      store Undefined into every captured variable. Hence it won't even work for one-shot
      closures. One-shot closures are easily fixed by introducing another state (so we'll
      have Uninitialized->Undefined->Initialized->Invalidated). Multi-shot closures will
      require static analysis. One-shot closures are clearly a higher priority.
      
      * GNUmakefile.list.am:
      * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
      * JavaScriptCore.xcodeproj/project.pbxproj:
      * bytecode/Instruction.h:
      * bytecode/VariableWatchpointSet.h: Added.
      (JSC::VariableWatchpointSet::VariableWatchpointSet):
      (JSC::VariableWatchpointSet::~VariableWatchpointSet):
      (JSC::VariableWatchpointSet::inferredValue):
      (JSC::VariableWatchpointSet::notifyWrite):
      (JSC::VariableWatchpointSet::invalidate):
      (JSC::VariableWatchpointSet::finalizeUnconditionally):
      (JSC::VariableWatchpointSet::addressOfInferredValue):
      * bytecode/Watchpoint.h:
      * dfg/DFGAbstractInterpreterInlines.h:
      (JSC::DFG::::executeEffects):
      * dfg/DFGByteCodeParser.cpp:
      (JSC::DFG::ByteCodeParser::parseBlock):
      * dfg/DFGCSEPhase.cpp:
      (JSC::DFG::CSEPhase::performNodeCSE):
      * dfg/DFGClobberize.h:
      (JSC::DFG::clobberize):
      * dfg/DFGFixupPhase.cpp:
      (JSC::DFG::FixupPhase::fixupNode):
      * dfg/DFGNode.h:
      (JSC::DFG::Node::hasRegisterPointer):
      (JSC::DFG::Node::hasVariableWatchpointSet):
      (JSC::DFG::Node::variableWatchpointSet):
      * dfg/DFGNodeType.h:
      * dfg/DFGOperations.cpp:
      * dfg/DFGOperations.h:
      * dfg/DFGPredictionPropagationPhase.cpp:
      (JSC::DFG::PredictionPropagationPhase::propagate):
      * dfg/DFGSafeToExecute.h:
      (JSC::DFG::safeToExecute):
      * dfg/DFGSpeculativeJIT.cpp:
      (JSC::DFG::SpeculativeJIT::compileArithMod):
      * dfg/DFGSpeculativeJIT.h:
      (JSC::DFG::SpeculativeJIT::callOperation):
      * dfg/DFGSpeculativeJIT32_64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGSpeculativeJIT64.cpp:
      (JSC::DFG::SpeculativeJIT::compile):
      * dfg/DFGWatchpointCollectionPhase.cpp:
      (JSC::DFG::WatchpointCollectionPhase::handle):
      * ftl/FTLCapabilities.cpp:
      (JSC::FTL::canCompile):
      * ftl/FTLLowerDFGToLLVM.cpp:
      (JSC::FTL::LowerDFGToLLVM::compileNode):
      (JSC::FTL::LowerDFGToLLVM::compileNotifyWrite):
      * jit/JIT.h:
      * jit/JITOperations.h:
      * jit/JITPropertyAccess.cpp:
      (JSC::JIT::emitNotifyWrite):
      (JSC::JIT::emitPutGlobalVar):
      * jit/JITPropertyAccess32_64.cpp:
      (JSC::JIT::emitNotifyWrite):
      (JSC::JIT::emitPutGlobalVar):
      * llint/LowLevelInterpreter32_64.asm:
      * llint/LowLevelInterpreter64.asm:
      * runtime/JSGlobalObject.cpp:
      (JSC::JSGlobalObject::addGlobalVar):
      (JSC::JSGlobalObject::addFunction):
      * runtime/JSGlobalObject.h:
      * runtime/JSScope.h:
      (JSC::ResolveOp::ResolveOp):
      * runtime/JSSymbolTableObject.h:
      (JSC::symbolTablePut):
      (JSC::symbolTablePutWithAttributes):
      * runtime/SymbolTable.cpp:
      (JSC::SymbolTableEntry::inferredValue):
      (JSC::SymbolTableEntry::prepareToWatch):
      (JSC::SymbolTableEntry::addWatchpoint):
      (JSC::SymbolTableEntry::notifyWriteSlow):
      (JSC::SymbolTable::visitChildren):
      (JSC::SymbolTable::WatchpointCleanup::WatchpointCleanup):
      (JSC::SymbolTable::WatchpointCleanup::~WatchpointCleanup):
      (JSC::SymbolTable::WatchpointCleanup::finalizeUnconditionally):
      * runtime/SymbolTable.h:
      (JSC::SymbolTableEntry::watchpointSet):
      (JSC::SymbolTableEntry::notifyWrite):
      
      
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159798 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      8646834a
    • 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
  24. 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