2017-03-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] MachineThreads does not consider situation that one thread has multiple VMs
        https://bugs.webkit.org/show_bug.cgi?id=169819

        Reviewed by Mark Lam.

        The Linux port of PlatformThread suspend/resume mechanism relies on having a thread
        specific singleton thread data, and was relying on MachineThreads::Thread to be this
        thread specific singleton. But because MachineThreads::Thread is not a thread specific
        singleton, we can get a deadlock in the GTK port's DatabaseProcess.

        This patch fixes this issue by moving per thread data from MachineThreads::Thread to
        MachineThreads::ThreadData, where there will only be one instance of
        MachineThreads::ThreadData per thread. Each MachineThreads::Thread will now point to
        the same MachineThreads::ThreadData for any given thread.

        * heap/MachineStackMarker.cpp:
        (pthreadSignalHandlerSuspendResume):
        (JSC::threadData):
        (JSC::MachineThreads::Thread::Thread):
        (JSC::MachineThreads::Thread::createForCurrentThread):
        (JSC::MachineThreads::Thread::operator==):
        (JSC::MachineThreads::ThreadData::ThreadData):
        (JSC::MachineThreads::ThreadData::~ThreadData):
        (JSC::MachineThreads::ThreadData::suspend):
        (JSC::MachineThreads::ThreadData::resume):
        (JSC::MachineThreads::ThreadData::getRegisters):
        (JSC::MachineThreads::ThreadData::Registers::stackPointer):
        (JSC::MachineThreads::ThreadData::Registers::framePointer):
        (JSC::MachineThreads::ThreadData::Registers::instructionPointer):
        (JSC::MachineThreads::ThreadData::Registers::llintPC):
        (JSC::MachineThreads::ThreadData::freeRegisters):
        (JSC::MachineThreads::ThreadData::captureStack):
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        (JSC::MachineThreads::Thread::~Thread): Deleted.
        (JSC::MachineThreads::Thread::suspend): Deleted.
        (JSC::MachineThreads::Thread::resume): Deleted.
        (JSC::MachineThreads::Thread::getRegisters): Deleted.
        (JSC::MachineThreads::Thread::Registers::stackPointer): Deleted.
        (JSC::MachineThreads::Thread::Registers::framePointer): Deleted.
        (JSC::MachineThreads::Thread::Registers::instructionPointer): Deleted.
        (JSC::MachineThreads::Thread::Registers::llintPC): Deleted.
        (JSC::MachineThreads::Thread::freeRegisters): Deleted.
        (JSC::MachineThreads::Thread::captureStack): Deleted.
        * heap/MachineStackMarker.h:
        (JSC::MachineThreads::Thread::operator!=):
        (JSC::MachineThreads::Thread::suspend):
        (JSC::MachineThreads::Thread::resume):
        (JSC::MachineThreads::Thread::getRegisters):
        (JSC::MachineThreads::Thread::freeRegisters):
        (JSC::MachineThreads::Thread::captureStack):
        (JSC::MachineThreads::Thread::platformThread):
        (JSC::MachineThreads::Thread::stackBase):
        (JSC::MachineThreads::Thread::stackEnd):
        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::isValidFramePointer):
        * runtime/VMTraps.cpp:
        (JSC::findActiveVMAndStackBounds):

2017-03-23  Mark Lam  <mark.lam@apple.com>

        Clients of JSArray::tryCreateForInitializationPrivate() should do their own null checks.
        https://bugs.webkit.org/show_bug.cgi?id=169783

        Reviewed by Saam Barati.

        Fixed clients of tryCreateForInitializationPrivate() to do a null check and throw
        an OutOfMemoryError if allocation fails, or RELEASE_ASSERT that the allocation
        succeeds.

        * dfg/DFGOperations.cpp:
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSArray.cpp:
        (JSC::JSArray::tryCreateForInitializationPrivate):
        (JSC::JSArray::fastSlice):
        * runtime/JSArray.h:
        (JSC::constructArray):
        (JSC::constructArrayNegativeIndexed):
        * runtime/RegExpMatchesArray.cpp:
        (JSC::createEmptyRegExpMatchesArray):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):

2017-03-23  Guillaume Emont  <guijemont@igalia.com>

        [jsc] Add MacroAssemblerMIPS::storeFence()
        https://bugs.webkit.org/show_bug.cgi?id=169705

        Reviewed by Yusuke Suzuki.

        There doesn't seem to be anything more fine grained than "sync" that
        guarantees that all memory operations following it are going to happen
        after all stores before it, so we just use sync.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::sync): Added a FIXME about SYNC_MB.
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::storeFence): Added.

2017-03-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][DFG] Propagate AnyIntAsDouble information carefully to utilize it in fixup
        https://bugs.webkit.org/show_bug.cgi?id=169914

        Reviewed by Saam Barati.

        In DFG prediction propagation phase, we pollute the prediction of GetByVal for Array::Double
        as SpecDoubleReal even if the heap prediction says the proper prediction is SpecAnyIntAsDouble.
        Thus, the following nodes just see the result of GetByVal(Array::Double) as double value,
        and select suboptimal edge filters in fixup phase. For example, if the result of GetByVal is
        SpecAnyIntAsDouble, we can see the node like ArithAdd(SpecAnyIntAsDouble, Int52) and we should
        have a chance to make it ArithAdd(Check:Int52, Int52) instead of ArithAdd(Double, Double).

        This patch propagates SpecAnyIntAsDouble in GetByVal(Array::Double) properly. And ValueAdd,
        ArithAdd and ArithSub select AnyInt edge filters for SpecAnyIntAsDouble values. It finally
        produces a Int52 specialized DFG node. And subsequent nodes using the produced one also
        become Int52 specialized.

        One considerable problem is that the heap prediction misses the non any int doubles. In that case,
        if Int52 edge filter is used, BadType exit will occur. It updates the prediction of the value profile
        of GetByVal. So, in the next time, GetByVal(Array::Double) produces more conservative predictions
        and avoids exit-and-recompile loop correctly.

        This change is very sensitive to the correct AI and appropriate predictions. Thus, this patch finds
        and fixes some related issues. One is incorrect prediction of ToThis and another is incorrect
        AI logic for Int52Rep.

        This change dramatically improves kraken benchmarks' crypto-pbkdf2 and crypto-sha256-iterative
        by 42.0% and 30.7%, respectively.

                                                     baseline                  patched
        Kraken:
        ai-astar                                  158.851+-4.132      ?     159.433+-5.176         ?
        audio-beat-detection                       53.193+-1.621      ?      53.391+-2.072         ?
        audio-dft                                 103.589+-2.277      ?     104.902+-1.924         ? might be 1.0127x slower
        audio-fft                                  40.491+-1.102             39.854+-0.755           might be 1.0160x faster
        audio-oscillator                           68.504+-1.721      ?      68.957+-1.725         ?
        imaging-darkroom                          118.367+-2.171      ?     119.581+-2.310         ? might be 1.0103x slower
        imaging-desaturate                         71.443+-1.461      ?      72.398+-1.918         ? might be 1.0134x slower
        imaging-gaussian-blur                     110.648+-4.035            109.184+-3.373           might be 1.0134x faster
        json-parse-financial                       60.363+-1.628      ?      61.936+-1.585         ? might be 1.0261x slower
        json-stringify-tinderbox                   37.903+-0.869      ?      39.559+-1.607         ? might be 1.0437x slower
        stanford-crypto-aes                        56.313+-1.512      ?      56.675+-1.715         ?
        stanford-crypto-ccm                        51.564+-1.900      ?      53.456+-2.548         ? might be 1.0367x slower
        stanford-crypto-pbkdf2                    129.546+-2.738      ^      91.214+-2.027         ^ definitely 1.4202x faster
        stanford-crypto-sha256-iterative           43.515+-0.730      ^      33.292+-0.653         ^ definitely 1.3071x faster

        <arithmetic>                               78.878+-0.528      ^      75.988+-0.621         ^ definitely 1.0380x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addShouldSpeculateAnyInt):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):

2017-03-22  Mark Lam  <mark.lam@apple.com>

        Add support for Error.stackTraceLimit.
        https://bugs.webkit.org/show_bug.cgi?id=169904

        Reviewed by Saam Barati.

        Since there's no standard for this yet, we'll implement Error.stackTraceLimit
        based on how Chrome does it.  This includes some idiosyncrasies like:
        1. If we set Error.stackTraceLimit = 0, then new Error().stack yields an empty
           stack trace (Chrome has a title with no stack frame entries).
        2. If we set Error.stackTraceLimit = {] (i.e. to a non-number value), then
           new Error().stack is undefined.

        Chrome and IE defaults their Error.stackTraceLimit to 10.  We'll default ours to
        100 because 10 may be a bit too skimpy and it is not that costly to allow up to
        100 frames instead of 10.

        The default value for Error.stackTraceLimit is specified by
        Options::defaultErrorStackTraceLimit().

        Also, the Exception object now limits the number of stack trace frames it captures
        to the limit specified by Options::exceptionStackTraceLimit().

        Note: the Exception object captures a stack trace that is not necessarily the
        same as the one in an Error object being thrown:

        - The Error object captures the stack trace at the point of object creation.

        - The Exception object captures the stack trace at the point that the exception
          is thrown.  This stack trace is captured even when throwing a value that is not
          an Error object e.g. a primitive value.  The Exception object stack trace is
          only used by WebInspector to identify where a value is thrown from.  Hence,
          it does not necessary make sense the Exception object stack trace limited by
          Error.stackTraceLimit.  Instead, we have it use own Options::exceptionStackTraceLimit().

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwind):
        * jsc.cpp:
        (dumpException):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfoAndGetBytecodeOffset):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        (JSC::ErrorConstructor::put):
        (JSC::ErrorConstructor::deleteProperty):
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::stackTraceLimit):
        * runtime/Exception.cpp:
        (JSC::Exception::finishCreation):
        * runtime/Options.h:

2017-03-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use jsNontrivialString for Number toString operations
        https://bugs.webkit.org/show_bug.cgi?id=169965

        Reviewed by Mark Lam.

        After single character check, produced string is always longer than 1.
        Thus, we can use jsNontrivialString.

        * runtime/NumberPrototype.cpp:
        (JSC::int32ToStringInternal):

2017-03-22  JF Bastien  <jfbastien@apple.com>

        WebAssembly: name ExecState consistently
        https://bugs.webkit.org/show_bug.cgi?id=169954

        Reviewed by Saam Barati.

        No functional change.

        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::JSWebAssemblyCompileError::create):
        (JSC::createJSWebAssemblyCompileError):
        * wasm/js/JSWebAssemblyCompileError.h:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::JSWebAssemblyLinkError::create):
        (JSC::createJSWebAssemblyLinkError):
        * wasm/js/JSWebAssemblyLinkError.h:
        (JSC::JSWebAssemblyLinkError::create):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::JSWebAssemblyRuntimeError::create):
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (JSC::JSWebAssemblyRuntimeError::create):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::callJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::callJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::callJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::dataSegmentFail):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyPrototype.cpp:
        (JSC::webAssemblyFunctionValidate):
        (JSC::webAssemblyFunctionCompile):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::callJSWebAssemblyTable):

2017-03-22  JF Bastien  <jfbastien@apple.com>

        WebAssembly: constructors without new don't throw
        https://bugs.webkit.org/show_bug.cgi?id=165995

        Reviewed by Saam Barati.

        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        (JSC::callJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyLinkError):
        (JSC::callJSWebAssemblyLinkError):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):
        (JSC::callJSWebAssemblyRuntimeError):

2017-03-22  Guillaume Emont  <guijemont@igalia.com>

        [DFG] Don't use ArraySlice intrinsic on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=169721

        Reviewed by Yusuke Suzuki.

        Like on x86, we don't have enough registers available for this.

        * assembler/CPU.h:
        (JSC::isMIPS): Added.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        Don't use the ArraySlice intrinsic on MIPS.

2017-03-21  Mark Lam  <mark.lam@apple.com>

        The DFG Integer Check Combining phase should force an OSR exit for CheckInBounds on a negative constant min bound.
        https://bugs.webkit.org/show_bug.cgi?id=169933
        <rdar://problem/31105125>

        Reviewed by Filip Pizlo and Geoffrey Garen.

        Also fixed the bit-rotted RangeKey::dump() function.

        * dfg/DFGIntegerCheckCombiningPhase.cpp:
        (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):

2017-03-21  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Add missing MacroAssembler functions after r214187
        https://bugs.webkit.org/show_bug.cgi?id=169912

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::loadFloat):
        (JSC::MacroAssemblerARM::storeFloat):

2017-03-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Optimize Number.prototype.toString on Int32 / Int52 / Double
        https://bugs.webkit.org/show_bug.cgi?id=167454

        Reviewed by Saam Barati.

        This patch improves Number.toString(radix) performance
        by introducing NumberToStringWithRadix DFG node. It directly
        calls the operation and it always returns String.

                                                       baseline                  patched

            stanford-crypto-sha256-iterative        45.130+-0.928             44.032+-1.184           might be 1.0250x faster

2017-03-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add JSPromiseDeferred::reject(ExecState*, Exception*) interface
        https://bugs.webkit.org/show_bug.cgi?id=169908

        Reviewed by Sam Weinig.

        To avoid calling reject(ExecState*, JSValue) with Exception* accidentally,
        we add a new interface reject(ExecState*, Exception*).
        Such an interface is already added in DOMPromise in WebCore.

        * runtime/JSInternalPromiseDeferred.cpp:
        (JSC::JSInternalPromiseDeferred::reject):
        * runtime/JSInternalPromiseDeferred.h:
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::reject):
        * runtime/JSPromiseDeferred.h:

2017-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [jsc] MacroAssemblerMIPS: implement the branchPtr(RelationalCondition, BaseIndex, RegisterID) overload.
        https://bugs.webkit.org/show_bug.cgi?id=169717

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssembler.h: Expose branchPtr() on MIPS as well.
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchPtr): Added.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructor):
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOnNumber):
        (JSC::DFG::SpeculativeJIT::compileNumberToStringWithRadix):
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOnCell): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithRadix):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsWithExecState):
        * jit/JITOperations.h:
        * runtime/Intrinsic.h:
        * runtime/NumberPrototype.cpp:
        (JSC::int52ToStringWithRadix):
        (JSC::int32ToStringInternal):
        (JSC::numberToStringInternal):
        (JSC::int32ToString):
        (JSC::int52ToString):
        (JSC::numberToString):
        (JSC::numberProtoFuncToString):
        (JSC::integerValueToString): Deleted.
        * runtime/NumberPrototype.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):

2017-03-20  Filip Pizlo  <fpizlo@apple.com>

        Graph coloring should use coalescable moves when spilling
        https://bugs.webkit.org/show_bug.cgi?id=169820

        Reviewed by Michael Saboff.
        
        This makes our graph coloring register allocator use a new family of move instructions when
        spilling both operands of the move. It's a three-operand move:
        
            Move (src), (dst), %scratch
        
        Previously, if both operands got spilled, we would emit a new instruction to load or store that
        spill slot. But this made it hard for allocateStack to see that the two spill locations are
        coalescable. This new kind of instruction makes it obvious that it's a coalescable move.
        
        This change implements the coalescing of spill slots inside allocateStack.
        
        This is an outrageous speed-up on the tsf_ir_speed benchmark from http://filpizlo.com/tsf/. This
        is an interesting benchmark because it has a super ugly interpreter loop with ~20 live variables
        carried around the loop back edge. This change makes that interpreter run 5x faster.
        
        This isn't a speed-up on any other benchmarks. It also doesn't regress anything. Compile time is
        neither progressed or regressed, since the coalescing is super cheap, and this does not add any
        significant new machinery to the register allocator (it's just a small change to spill codegen).
        Overall on our wasm benchmarks, this is a 16% throughput progression.
        
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::move32):
        (JSC::MacroAssembler::moveFloat):
        (JSC::MacroAssembler::moveDouble):
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        (JSC::B3::Air::allocateRegistersByGraphColoring):
        * b3/air/AirAllocateStack.cpp:
        (JSC::B3::Air::allocateStack):
        * b3/air/AirInst.cpp:
        (JSC::B3::Air::Inst::hasEarlyDef):
        (JSC::B3::Air::Inst::hasLateUseOrDef):
        (JSC::B3::Air::Inst::needsPadding):
        * b3/air/AirInst.h:
        * b3/air/AirOpcode.opcodes:
        * b3/air/AirPadInterference.cpp:
        (JSC::B3::Air::padInterference):
        * runtime/Options.h:

2017-03-19  Chris Dumez  <cdumez@apple.com>

        `const location = "foo"` throws in a worker
        https://bugs.webkit.org/show_bug.cgi?id=169839

        Reviewed by Mark Lam.

        Our HasRestrictedGlobalProperty check in JSC was slightly wrong, causing us
        to sometimes throw a Syntax exception when we shouldn't when declaring a
        const/let variable and sometimes not throw an exception when we should have.

        This aligns our behavior with ES6, Firefox and Chrome.

        * runtime/ProgramExecutable.cpp:
        (JSC::hasRestrictedGlobalProperty):
        (JSC::ProgramExecutable::initializeGlobalProperties):
        Rewrite hasRestrictedGlobalProperty logic as per the EcmaScript spec:
        - http://www.ecma-international.org/ecma-262/6.0/index.html#sec-hasproperty
        In particular, they were 2 issues:
        - We should throw a SyntaxError if hasProperty() returned true but getOwnProperty()
          would fail to return a descriptor. This would happen for properties that are
          not OWN properties, but defined somewhere in the prototype chain. The spec does
          not say to use hasProperty(), only getOwnProperty() and says we should return
          false if getOwnProperty() does not return a descriptor. This is what we do now.
        - We would fail to throw when declaring a let/const variable that shadows an own
          property whose value is undefined. This is because the previous code was
          explicitly checking for this case. I believe this was a misinterpretation of
          ES6 which says:
          """
          Let desc be O.[[GetOwnProperty]](P).
          If desc is undefined, return false.
          """
          We should check that desc is undefined, not desc.value. This is now fixed.

2017-03-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        import(arg) crashes when ToString(arg) throws
        https://bugs.webkit.org/show_bug.cgi?id=169778

        Reviewed by Saam Barati.

        JSPromiseDeferred should not be rejected with Exception*.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):

2017-03-18  Oleksandr Skachkov  <gskachkov@gmail.com>

        [JSC] Remove unnecessary condition from needsDerivedConstructorInArrowFunctionLexicalEnvironment in BytecodeGenerator.cpp 
        https://bugs.webkit.org/show_bug.cgi?id=169832

        Reviewed by Mark Lam.

        Remove already covered condition in needsDerivedConstructorInArrowFunctionLexicalEnvironment 
        function. Condition isConstructor() && constructorKind() == ConstructorKind::Extends is already
        isClassContext.

         * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::needsDerivedConstructorInArrowFunctionLexicalEnvironment):

2017-03-18  Chris Dumez  <cdumez@apple.com>

        Allow setting the prototype of cross-origin objects, as long as they don't change
        https://bugs.webkit.org/show_bug.cgi?id=169787

        Reviewed by Mark Lam.

        * runtime/JSGlobalObject.h:
        Mark JS global object as an immutable prototype exotic object to match Window.

        * runtime/JSObject.cpp:
        (JSC::JSObject::setPrototypeWithCycleCheck):
        Update setPrototypeWithCycleCheck() for immutable prototype exotic objects in order
        to align with:
        - https://tc39.github.io/ecma262/#sec-set-immutable-prototype

        In particular, we need to call [[GetPrototypeOf]] and return true if it returns the same
        value as the new prototype. We really need to call [[GetPrototypeOf]] and not merely
        getting the prototype slot via getPrototypeDirect() since Location and Window override
        [[GetPrototypeOf]] to return null in the cross-origin case.

        * runtime/JSProxy.cpp:
        (JSC::JSProxy::setPrototype):
        Update JSProxy::setPrototype() to forward such calls to its target. This is needed so
        we end up calling JSObject::setPrototypeWithCycleCheck() for the Window object.
        Handling immutable prototype exotic objects in that method does the right thing for
        Window.

2017-03-17  Michael Saboff  <msaboff@apple.com>

        Use USE_INTERNAL_SDK to compute ENABLE_FAST_JIT_PERMISSIONS instead of HAVE_INTERNAL_SDK
        https://bugs.webkit.org/show_bug.cgi?id=169817

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2017-03-11  Filip Pizlo  <fpizlo@apple.com>

        Air should be powerful enough to support Tmp-splitting
        https://bugs.webkit.org/show_bug.cgi?id=169515

        Reviewed by Saam Barati.
        
        In the process of implementing the Tmp-splitting optimization, I made some small
        clean-ups. They don't affect anything - it's basically moving code around and adding
        utility functions.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::allocate): testb3 was sometimes failing its checkDoesNotUseInstruction check because of uninitialized memory. This initializes the internal fragmentation slop of every JIT allocation.
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * b3/air/AirAllocateRegistersByGraphColoring.h:
        (JSC::B3::Air::useIRC): It's useful to be able to query which register allocator we're using.
        * b3/air/AirArg.cpp:
        (WTF::printInternal):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::temperature): The temperature of a role is a useful concept to have factored out.
        * b3/air/AirBreakCriticalEdges.cpp: Added.
        (JSC::B3::Air::breakCriticalEdges): I was surprised that we didn't have this already. It's a pretty fundamental CFG utility.
        * b3/air/AirBreakCriticalEdges.h: Added.
        * b3/air/AirGenerate.cpp:
        * b3/air/AirInsertionSet.h: You can't use & if you want copy-constructibility, which seems to be a prerequisite to IndexMap<BasicBlock, InsertionSet>.
        (JSC::B3::Air::InsertionSet::InsertionSet):
        (JSC::B3::Air::InsertionSet::code):
        * b3/air/AirLiveness.h: Teach Liveness to track only warm liveness.
        (JSC::B3::Air::TmpLivenessAdapter::acceptsRole):
        (JSC::B3::Air::StackSlotLivenessAdapter::acceptsRole):
        (JSC::B3::Air::RegLivenessAdapter::acceptsRole):
        (JSC::B3::Air::AbstractLiveness::AbstractLiveness):
        (JSC::B3::Air::AbstractLiveness::LocalCalc::execute):

2017-03-16  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in GenericArgumentsInlines.h.
        https://bugs.webkit.org/show_bug.cgi?id=165012

        Reviewed by Saam Barati.

        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::defineOwnProperty):

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        Improve the system tracing points
        https://bugs.webkit.org/show_bug.cgi?id=169790

        Reviewed by Zalan Bujtas.

        Use a more cohesive set of system trace points that give a good overview of what
        WebKit is doing. Added points for resource loading, render tree building, sync messages
        to the web process, async image decode, WASM and fetching cookies.

        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):

2017-03-16  Mark Lam  <mark.lam@apple.com>

        Array concat operation should check for length overflows.
        https://bugs.webkit.org/show_bug.cgi?id=169796
        <rdar://problem/31095276>

        Reviewed by Keith Miller.

        * runtime/ArrayPrototype.cpp:
        (JSC::concatAppendOne):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):

2017-03-16  Mark Lam  <mark.lam@apple.com>

        The new array with spread operation needs to check for length overflows.
        https://bugs.webkit.org/show_bug.cgi?id=169780
        <rdar://problem/31072182>

        Reviewed by Filip Pizlo.

        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * llint/LLIntSlowPaths.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSGlobalObject.cpp:

2017-03-16  Filip Pizlo  <fpizlo@apple.com>

        FTL should support global and eval code
        https://bugs.webkit.org/show_bug.cgi?id=169656

        Reviewed by Geoffrey Garen and Saam Barati.
        
        Turned off the restriction against global and eval code running in the FTL, and then fixed all of
        the things that didn't work.
        
        This is a big speed-up on microbenchmarks that I wrote for this patch. One of the reasons why we
        hadn't done this earlier is that we've never seen a benchmark that needed it. Global and eval
        code rarely gets FTL-hot. Still, this seems like possibly a small JetStream speed-up.

        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::setOSREntryBlock): I outlined this for better debugging.
        * dfg/DFGJITCode.h:
        (JSC::DFG::JITCode::setOSREntryBlock): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isSemanticallySkippable): It turns out that global code often has InvalidationPoints before LoopHints. They are also skippable from the standpoint of OSR entrypoint analysis.
        * dfg/DFGOperations.cpp: Don't do any normal compiles of global code - just do OSR compiles.
        * ftl/FTLCapabilities.cpp: Enable FTL for global and eval code.
        (JSC::FTL::canCompile):
        * ftl/FTLCompile.cpp: Just debugging clean-ups.
        (JSC::FTL::compile):
        * ftl/FTLJITFinalizer.cpp: Implement finalize() and ensure that we only do things with the entrypoint buffer if we have one. We won't have one for eval code that we aren't OSR entering into.
        (JSC::FTL::JITFinalizer::finalize):
        (JSC::FTL::JITFinalizer::finalizeFunction):
        (JSC::FTL::JITFinalizer::finalizeCommon):
        * ftl/FTLJITFinalizer.h:
        * ftl/FTLLink.cpp: When entering a function normally, we need the "entrypoint" to put the arity check code. Global and eval code don't need this.
        (JSC::FTL::link):
        * ftl/FTLOSREntry.cpp: Fix a dataLog statement.
        (JSC::FTL::prepareOSREntry):
        * ftl/FTLOSRExitCompiler.cpp: Remove dead code that happened to assert that we're exiting from a function.
        (JSC::FTL::compileStub):

2017-03-16  Michael Saboff  <msaboff@apple.com>

        WebAssembly: function-tests/load-offset.js fails on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=169724

        Reviewed by Keith Miller.

        We need to use the two source version of Add64 to create a Wasm address with the
        other source the first child.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):

2017-03-16  Jon Lee  <jonlee@apple.com>

        Add FIXMEs to update WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169735

        Reviewed by Youenn Fablet.

        * runtime/CommonIdentifiers.h: Add RTCIceTransport.

2017-03-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, copy m_numberOfArgumentsToSkip
        https://bugs.webkit.org/show_bug.cgi?id=164582

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):

2017-03-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix numParameter() - 1 OSRExit materialization
        https://bugs.webkit.org/show_bug.cgi?id=164582

        When materializing rest parameters, we rely on that numParameter() - 1 equals to
        the numberOfArgumentsToSkip. But this assumption is broken in r214029.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfArgumentsToSkip):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):

2017-03-16  Caio Lima  <ticaiolima@gmail.com>

        [ESnext] Implement Object Spread
        https://bugs.webkit.org/show_bug.cgi?id=167963

        Reviewed by Yusuke Suzuki.

        This patch implements ECMA262 stage 3 Object Spread proposal [1].
        It's implemented using CopyDataProperties to copy all enumerable keys
        from object being spreaded.

        It's also fixing CopyDataProperties that was using
        Object.getOwnPropertyNames to list all keys to be copied, and now is
        using Relect.ownKeys.

        [1] - https://github.com/sebmarkbage/ecmascript-rest-spread

        * builtins/GlobalOperations.js:
        (globalPrivate.copyDataProperties):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setConstantIdentifierSetRegisters):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addSetConstant):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):
        (JSC::ObjectPatternNode::bindValue):
        (JSC::ObjectSpreadExpressionNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createObjectSpreadExpression):
        (JSC::ASTBuilder::createProperty):
        * parser/NodeConstructors.h:
        (JSC::PropertyNode::PropertyNode):
        (JSC::ObjectSpreadExpressionNode::ObjectSpreadExpressionNode):
        * parser/Nodes.h:
        (JSC::ObjectSpreadExpressionNode::expression):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseProperty):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createObjectSpreadExpression):
        (JSC::SyntaxChecker::createProperty):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::privateToObject): Deleted.
        * runtime/JSGlobalObjectFunctions.h:

2017-03-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Default parameter part should be retrieved by op_get_argument opcode instead of changing arity
        https://bugs.webkit.org/show_bug.cgi?id=164582

        Reviewed by Saam Barati.

        Previously we implement the default parameters as follows.

            1. We count the default parameters as the usual parameters.
            2. We just get the argument register.
            3. Check it with op_is_undefined.
            4. And fill the binding with either the argument register or default value.

        The above is simple. However, it has the side effect that it always increase the arity of the function.
        While `function.length` does not increase, internally, the number of parameters of CodeBlock increases.
        This effectively prevent our DFG / FTL to perform inlining: currently we only allows DFG to inline
        the function with the arity less than or equal the number of passing arguments. It is OK. But when using
        default parameters, we frequently do not pass the argument for the parameter with the default value.
        Thus, in our current implementation, we frequently need to fixup the arity. And we frequently fail
        to inline the function.

        This patch fixes the above problem by not increasing the arity of the function. When we encounter the
        parameter with the default value, we use `op_argument` to get the argument instead of using the argument
        registers.

        This improves six-speed defaults.es6 performance by 4.45x.

            defaults.es6        968.4126+-101.2350   ^    217.6602+-14.8831       ^ definitely 4.4492x faster

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::initializeDefaultParameterValuesAndSetupFunctionScopeStack):
        (JSC::BytecodeGenerator::initializeNextParameter):
        (JSC::BytecodeGenerator::initializeParameters):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionNode::emitBytecode):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inliningCost):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createFunctionMetadata):
        * parser/Nodes.cpp:
        (JSC::FunctionMetadataNode::FunctionMetadataNode):
        * parser/Nodes.h:
        (JSC::FunctionParameters::size):
        (JSC::FunctionParameters::at):
        (JSC::FunctionParameters::append):
        (JSC::FunctionParameters::isSimpleParameterList):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::isArrowFunctionParameters):
        (JSC::Parser<LexerType>::parseGeneratorFunctionSourceElements):
        (JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
        (JSC::Parser<LexerType>::parseFormalParameters):
        (JSC::Parser<LexerType>::parseFunctionBody):
        (JSC::Parser<LexerType>::parseFunctionParameters):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        * parser/Parser.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createFunctionMetadata):
        * runtime/FunctionExecutable.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::createBuiltinFunction):
        (JSC::JSFunction::reifyLength):

2017-03-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DFG] ToString operation should have fixup for primitives to say this node does not have side effects
        https://bugs.webkit.org/show_bug.cgi?id=169544

        Reviewed by Saam Barati.

        Our DFG ToString only considers well about String operands. While ToString(non cell operand) does not have
        any side effect, it is not modeled well in DFG.

        This patch introduces a fixup for ToString with NonCellUse edge. If this edge is set, ToString does not
        clobber things (like ToLowerCase, producing String). And ToString(NonCellUse) allows us to perform CSE!

        Our microbenchmark shows 32.9% improvement due to dropped GetButterfly and CSE for ToString().

                                            baseline                  patched

            template-string-array       12.6284+-0.2766     ^      9.4998+-0.2295        ^ definitely 1.3293x faster

        And SixSpeed template_string.es6 shows 16.68x performance improvement due to LICM onto this non-side-effectful ToString().

                                          baseline                  patched

            template_string.es6     3229.7343+-40.5705    ^    193.6077+-36.3349       ^ definitely 16.6818x faster

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOnCell):
        (JSC::DFG::SpeculativeJIT::speculateNotCell):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::lowNotCell):
        (JSC::FTL::DFG::LowerDFGToB3::speculateNotCell):

2017-03-15  Ryan Haddad  <ryanhaddad@apple.com>

        Revert part of r213978 to see if it resolves LayoutTest crashes.
        https://bugs.webkit.org/show_bug.cgi?id=169729

        Reviewed by Alexey Proskuryakov.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2017-03-15  Guillaume Emont  <guijemont@igalia.com>

        [jsc][mips] Fix compilation error introduced in r213652
        https://bugs.webkit.org/show_bug.cgi?id=169723

        Reviewed by Mark Lam.

        The new replaceWithBkpt() contains a lapsus in it
        (s/code/instructionStart) and won't compile.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::replaceWithBkpt):

2017-03-15  Daniel Ehrenberg  <littledan@chromium.org>

        Switch back to ISO 4217 for Intl CurrencyDigits data
        https://bugs.webkit.org/show_bug.cgi?id=169182
    
        Previously, a patch switched Intl.NumberFormat to use CLDR data through
        ICU to get the default number of decimal digits for a currency.
        However, that change actually violated the ECMA 402 specification,
        which references ISO 4217 as the data source. This patch reverts to
        an in-line implementation of that data.

        Reviewed by Saam Barati.

        * runtime/IntlNumberFormat.cpp:
        (JSC::computeCurrencySortKey):
        (JSC::extractCurrencySortKey):
        (JSC::computeCurrencyDigits):

2017-03-15  Saam Barati  <sbarati@apple.com>

        WebAssembly: When we GC to try to get a fast memory, we should call collectAllGarbage(), not collectSync()
        https://bugs.webkit.org/show_bug.cgi?id=169704

        Reviewed by Mark Lam.

        We weren't always sweeping the memory needed to free
        the WasmMemory we wanted to use. collectAllGarbage()
        will do this if the JS objects wrapping WasmMemory
        are dead.

        This patch also moves the increment of the allocatedFastMemories
        integer to be thread safe.

        * wasm/WasmMemory.cpp:
        (JSC::Wasm::tryGetFastMemory):

2017-03-15  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in jsc.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164968

        Reviewed by Saam Barati.

        * jsc.cpp:
        (WTF::CustomGetter::customGetter):

        (GlobalObject::moduleLoaderResolve):
        (GlobalObject::moduleLoaderFetch):
        - The only way modules would throw an exception is if we encounter an OutOfMemory
          error.  This should be extremely rare.  At this point, I don't think it's worth
          doing the dance to propagate the exception when this happens.  Instead, we'll
          simply do a RELEASE_ASSERT that we don't see any exceptions here.

        (functionRun):
        (functionRunString):
        (functionLoadModule):
        (functionCheckModuleSyntax):
        (box):
        (dumpException):
        (runWithScripts):

2017-03-15  Mark Lam  <mark.lam@apple.com>

        Fix missing exception checks in Interpreter.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164964

        Reviewed by Saam Barati.

        * interpreter/Interpreter.cpp:
        (JSC::eval):
        (JSC::sizeOfVarargs):
        (JSC::sizeFrameForVarargs):
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::execute):

2017-03-15  Dean Jackson  <dino@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=169669

        Reviewed by Antoine Quint.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2017-03-14  Tomas Popela  <tpopela@redhat.com>

        Wrong condition in offlineasm/risc.rb
        https://bugs.webkit.org/show_bug.cgi?id=169597

        Reviewed by Mark Lam.

        It's missing the 'and' operator between the conditions.

        * offlineasm/risc.rb:

2017-03-14  Mark Lam  <mark.lam@apple.com>

        BytecodeGenerator should use the same function to determine if it needs to store the DerivedConstructor in an ArrowFunction lexical environment.
        https://bugs.webkit.org/show_bug.cgi?id=169647
        <rdar://problem/31051832>

        Reviewed by Michael Saboff.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::usesDerivedConstructorInArrowFunctionLexicalEnvironment):
        (JSC::BytecodeGenerator::initializeArrowFunctionContextScopeIfNeeded):
        (JSC::BytecodeGenerator::emitPutDerivedConstructorToArrowFunctionContextScope):
        * bytecompiler/BytecodeGenerator.h:

2017-03-14  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: generated code for parsing an array of primitive-type enums from payload does not work
        https://bugs.webkit.org/show_bug.cgi?id=169629

        Reviewed by Joseph Pecoraro.

        This was encountered while trying to compile new protocol definitions that support the Actions API.

        * inspector/scripts/codegen/models.py:
        (EnumType.__repr__): Improve debug logging so fields match the class member names.

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.payload_to_objc_expression_for_member):
        If the array elements are actually a primitive type, then there's no need to do any
        conversion from a payload. This happens for free since the payload is a tree of
        NSDictionary, NSString, NSNumber, etc. 

        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        Rebaseline.

        * inspector/scripts/tests/generic/type-declaration-object-type.json:
        Add new cases for properties that contain an array with enum type references and an array of anonymous enums.

2017-03-14  Filip Pizlo  <fpizlo@apple.com>

        Record the HashSet/HashMap operations in DFG/FTL/B3 and replay them in a benchmark
        https://bugs.webkit.org/show_bug.cgi?id=169590

        Reviewed by Saam Barati.
        
        Adds code to support logging some hashtable stuff in the DFG.

        * dfg/DFGAvailabilityMap.cpp:
        (JSC::DFG::AvailabilityMap::pruneHeap):
        * dfg/DFGCombinedLiveness.cpp:
        (JSC::DFG::liveNodesAtHead):
        (JSC::DFG::CombinedLiveness::CombinedLiveness):
        * dfg/DFGCombinedLiveness.h:
        * dfg/DFGLivenessAnalysisPhase.cpp:
        (JSC::DFG::LivenessAnalysisPhase::run):
        (JSC::DFG::LivenessAnalysisPhase::processBlock):
        * dfg/DFGNode.cpp:
        * dfg/DFGNode.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:

2017-03-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Network protocol event
        https://bugs.webkit.org/show_bug.cgi?id=169619

        Reviewed by Mark Lam.

        * inspector/protocol/Network.json:
        This became unused in r213621 and should have been removed
        from the protocol file then.

2017-03-14  Mark Lam  <mark.lam@apple.com>

        Add a null check in VMTraps::willDestroyVM() to handle a race condition.
        https://bugs.webkit.org/show_bug.cgi?id=169620

        Reviewed by Filip Pizlo.

        There exists a race between VMTraps::willDestroyVM() (which removed SignalSenders
        from its m_signalSenders list) and SignalSender::send() (which removes itself
        from the list).  In the event that SignalSender::send() removes itself between
        the time that VMTraps::willDestroyVM() checks if m_signalSenders is empty and the
        time it takes a sender from m_signalSenders, VMTraps::willDestroyVM() may end up
        with a NULL sender pointer.  The fix is to add the missing null check before using
        the sender pointer.

        * runtime/VMTraps.cpp:
        (JSC::VMTraps::willDestroyVM):
        (JSC::VMTraps::fireTrap):
        * runtime/VMTraps.h:

2017-03-14  Mark Lam  <mark.lam@apple.com>

        Gardening: Speculative build fix for CLoop after r213886.
        https://bugs.webkit.org/show_bug.cgi?id=169436

        Not reviewed.

        * runtime/MachineContext.h:

2017-03-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop unnecessary pthread_attr_t for JIT enabled Linux / FreeBSD environment
        https://bugs.webkit.org/show_bug.cgi?id=169592

        Reviewed by Carlos Garcia Campos.

        Since suspended mcontext_t has all the necessary information, we can drop
        pthread_attr_t allocation and destroy for JIT enabled Linux / FreeBSD environment.

        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::getRegisters):
        (JSC::MachineThreads::Thread::Registers::stackPointer):
        (JSC::MachineThreads::Thread::Registers::framePointer):
        (JSC::MachineThreads::Thread::Registers::instructionPointer):
        (JSC::MachineThreads::Thread::Registers::llintPC):
        (JSC::MachineThreads::Thread::freeRegisters):
        * heap/MachineStackMarker.h:

2017-03-14  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Use USE(GLIB) guards in JavaScriptCore/inspector/EventLoop.cpp
        https://bugs.webkit.org/show_bug.cgi?id=169594

        Reviewed by Carlos Garcia Campos.

        Instead of PLATFORM(GTK) guards, utilize the USE(GLIB) build guards
        to guard the GLib-specific includes and invocations in the JSC
        inspector's EventLoop class implementation.

        * inspector/EventLoop.cpp:
        (Inspector::EventLoop::cycle):

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][Linux] Implement VMTrap in Linux ports
        https://bugs.webkit.org/show_bug.cgi?id=169436

        Reviewed by Mark Lam.

        This patch port VMTrap to Linux ports.
        We extract MachineContext accessors from various places (wasm/, heap/ and tools/)
        and use them in all the JSC code.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::Registers::stackPointer):
        (JSC::MachineThreads::Thread::Registers::framePointer):
        (JSC::MachineThreads::Thread::Registers::instructionPointer):
        (JSC::MachineThreads::Thread::Registers::llintPC):
        * heap/MachineStackMarker.h:
        * runtime/MachineContext.h: Added.
        (JSC::MachineContext::stackPointer):
        (JSC::MachineContext::framePointer):
        (JSC::MachineContext::instructionPointer):
        (JSC::MachineContext::argumentPointer<1>):
        (JSC::MachineContext::argumentPointer):
        (JSC::MachineContext::llintInstructionPointer):
        * runtime/PlatformThread.h:
        (JSC::platformThreadSignal):
        * runtime/VMTraps.cpp:
        (JSC::SignalContext::SignalContext):
        (JSC::SignalContext::adjustPCToPointToTrappingInstruction):
        * tools/CodeProfiling.cpp:
        (JSC::profilingTimer):
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::SignalContext::SignalContext):
        (JSC::SignalContext::dump):
        * tools/VMInspector.cpp:
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):

2017-03-13  Mark Lam  <mark.lam@apple.com>

        Make the HeapVerifier useful again.
        https://bugs.webkit.org/show_bug.cgi?id=161752

        Reviewed by Filip Pizlo.

        Resurrect the HeapVerifier.  Here's what the verifier now offers:

        1. It captures the list of cells before and after GCs up to N GC cycles.
           N is set by JSC_numberOfGCCyclesToRecordForVerification.
           Currently, N defaults to 3.

           This is useful if we're debugging in lldb and want to check if a candidate
           cell pointer was observed by the GC during the last N GC cycles.  We can do
           this check buy calling HeapVerifier::checkIfRecorded() with the cell address.

           HeapVerifier::checkIfRecorded() is robust and can be used on bogus addresses.
           If the candidate cell was previously recorded by the HeapVerifier during a
           GC cycle, checkIfRecorded() will dump any useful info it has on that cell.

        2. The HeapVerifier will verify that cells in its captured list after a GC are
           sane.  Some examples of cell insanity are:
           - the cell claims to belong to a different VM.
           - the cell has a NULL structureID.
           - the cell has a NULL structure.
           - the cell's structure has a NULL structureID.
           - the cell's structure has a NULL structure.
           - the cell's structure's structure has a NULL structureID.
           - the cell's structure's structure has a NULL structure.

           These are all signs of corruption or a GC bug.  The verifier will report any
           insanity it finds, and then crash with a RELEASE_ASSERT.

        3. Since the HeapVerifier captures list of cells in the heap before and after GCs
           for the last N GCs, it will also automatically "trim" dead cells those list
           after the most recent GC.

           "trim" here means that the CellProfile in the HeapVerifier's lists will be
           updated to reflect that the cell is now dead.  It still keeps a record of the
           dead cell pointer and the meta data collected about it back when it was alive.
           As a result, checkIfRecorded() will also report if the candidate cell passed
           to it is a dead object from a previous GC cycle. 

        4. Each CellProfile captured by the HeapVerifier now track the following info:
           - the cell's HeapCell::Kind.
           - the cell's liveness.
           - if is JSCell, the cell's classInfo()->className.
           - an associated timestamp.
           - an associated stack trace.

           Currently, the timestamp is only used for the time when the cell was recorded
           by the HeapVerifier during GC.  The stack trace is currently unused.

           However, these fields are kept there so that we can instrument the VM (during
           a debugging session, which requires rebuilding the VM) and record interesting
           stack traces like that of the time of allocation of the cell.  Since
           capturing the stack traces for each cell is a very heavy weight operation,
           the HeapVerifier code does not do this by default.  Instead, we just leave
           the building blocks for doing so in place to ease future debugging efforts.

        * heap/Heap.cpp:
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::didFinishCollection):
        * heap/Heap.h:
        (JSC::Heap::verifier):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::takeLastActiveBlock): Deleted.
        * heap/MarkedSpace.h:
        * heap/MarkedSpaceInlines.h:
        (JSC::MarkedSpace::forEachLiveCell):
        * tools/CellList.cpp:
        (JSC::CellList::find):
        (JSC::CellList::reset):
        (JSC::CellList::findCell): Deleted.
        * tools/CellList.h:
        (JSC::CellList::CellList):
        (JSC::CellList::name):
        (JSC::CellList::size):
        (JSC::CellList::cells):
        (JSC::CellList::add):
        (JSC::CellList::reset): Deleted.
        * tools/CellProfile.h:
        (JSC::CellProfile::CellProfile):
        (JSC::CellProfile::cell):
        (JSC::CellProfile::jsCell):
        (JSC::CellProfile::isJSCell):
        (JSC::CellProfile::kind):
        (JSC::CellProfile::isLive):
        (JSC::CellProfile::isDead):
        (JSC::CellProfile::setIsLive):
        (JSC::CellProfile::setIsDead):
        (JSC::CellProfile::timestamp):
        (JSC::CellProfile::className):
        (JSC::CellProfile::stackTrace):
        (JSC::CellProfile::setStackTrace):
        * tools/HeapVerifier.cpp:
        (JSC::HeapVerifier::startGC):
        (JSC::HeapVerifier::endGC):
        (JSC::HeapVerifier::gatherLiveCells):
        (JSC::trimDeadCellsFromList):
        (JSC::HeapVerifier::trimDeadCells):
        (JSC::HeapVerifier::printVerificationHeader):
        (JSC::HeapVerifier::verifyCellList):
        (JSC::HeapVerifier::validateCell):
        (JSC::HeapVerifier::validateJSCell):
        (JSC::HeapVerifier::verify):
        (JSC::HeapVerifier::reportCell):
        (JSC::HeapVerifier::checkIfRecorded):
        (JSC::HeapVerifier::initializeGCCycle): Deleted.
        (JSC::GatherCellFunctor::GatherCellFunctor): Deleted.
        (JSC::GatherCellFunctor::visit): Deleted.
        (JSC::GatherCellFunctor::operator()): Deleted.
        (JSC::HeapVerifier::verifyButterflyIsInStorageSpace): Deleted.
        * tools/HeapVerifier.h:
        (JSC::HeapVerifier::GCCycle::reset):

2017-03-13  SKumarMetro  <s.kumar@metrological.com>

        JSC: fix compilation errors for MIPS
        https://bugs.webkit.org/show_bug.cgi?id=168402

        Reviewed by Mark Lam.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::fillNops):
        Added.
        * assembler/MacroAssemblerMIPS.h:
        Added MacroAssemblerMIPS::numGPRs and MacroAssemblerMIPS::numFPRs .
        * bytecode/InlineAccess.h:
        (JSC::InlineAccess::sizeForPropertyAccess):
        (JSC::InlineAccess::sizeForPropertyReplace):
        (JSC::InlineAccess::sizeForLengthAccess):
        Added MIPS cases.

2017-03-13  Filip Pizlo  <fpizlo@apple.com>

        FTL should not flush strict arguments unless it really needs to
        https://bugs.webkit.org/show_bug.cgi?id=169519

        Reviewed by Mark Lam.
        
        This is a refinement that we should have done ages ago. This kills some pointless PutStacks
        in DFG SSA IR. It can sometimes unlock other optimizations.
        
        Relanding after I fixed the special cases for CreateArguments-style nodes. 

        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):

2017-03-13  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Event Listeners section is missing 'once', 'passive' event listener flags
        https://bugs.webkit.org/show_bug.cgi?id=167080

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOM.json:
        Add "passive" and "once" items to the EventListener type.

2017-03-13  Mark Lam  <mark.lam@apple.com>

        Remove obsolete experimental ObjC SPI.
        https://bugs.webkit.org/show_bug.cgi?id=169569

        Reviewed by Saam Barati.

        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine enableSigillCrashAnalyzer]): Deleted.
        * API/JSVirtualMachinePrivate.h: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2017-03-13  Commit Queue  <commit-queue@webkit.org>

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

        Breaks JSC stress test stress/super-property-access.js.ftl-
        eager failing (Requested by mlam|g on #webkit).

        Reverted changeset:

        "FTL should not flush strict arguments unless it really needs
        to"
        https://bugs.webkit.org/show_bug.cgi?id=169519
        http://trac.webkit.org/changeset/213856

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][Linux] Allow profilers to demangle C++ names
        https://bugs.webkit.org/show_bug.cgi?id=169559

        Reviewed by Michael Catanzaro.

        Linux also offers dladdr & demangling feature.
        Thus, we can use it to show the names in profilers.
        For example, SamplingProfiler tells us the C function names.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::displayName):
        * tools/CodeProfile.cpp:
        (JSC::symbolName):

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up RunLoop and WorkQueue with Seconds and Function
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Sam Weinig.

        * runtime/Watchdog.cpp:
        (JSC::Watchdog::startTimer):

2017-03-11  Filip Pizlo  <fpizlo@apple.com>

        FTL should not flush strict arguments unless it really needs to
        https://bugs.webkit.org/show_bug.cgi?id=169519

        Reviewed by Mark Lam.
        
        This is a refinement that we should have done ages ago. This kills some pointless PutStacks
        in DFG SSA IR. It can sometimes unlock other optimizations.

        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):

2017-03-13  Caio Lima  <ticaiolima@gmail.com>

        [JSC] It should be possible create a label named let when parsing Statement in non strict mode
        https://bugs.webkit.org/show_bug.cgi?id=168684

        Reviewed by Saam Barati.

        This patch is fixing a Parser bug to allow define a label named
        ```let``` in sloppy mode when parsing a Statement.

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

2017-03-11  Filip Pizlo  <fpizlo@apple.com>

        Structure::willStoreValueSlow needs to keep the property table alive until the end
        https://bugs.webkit.org/show_bug.cgi?id=169520

        Reviewed by Michael Saboff.

        We use pointers logically interior to `propertyTable` after doing a GC. We need to prevent the
        compiler from optimizing away pointers to `propertyTable`.
        
        * heap/HeapCell.cpp:
        (JSC::HeapCell::use):
        * heap/HeapCell.h:
        (JSC::HeapCell::use): Introduce API for keeping a pointer alive until some point in execution.
        * runtime/Structure.cpp:
        (JSC::Structure::willStoreValueSlow): Use HeapCell::use() to keep the pointer alive.

2017-03-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, suprress warnings in JSC B3

        * b3/B3Opcode.cpp:

2017-03-11  Michael Saboff  <msaboff@apple.com>

        Allow regular expressions to be used when selecting a process name in JSC config file
        https://bugs.webkit.org/show_bug.cgi?id=169495

        Reviewed by Saam Barati.

        Only added regular expression selectors for unix like platforms.

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

2017-03-11  Jon Lee  <jonlee@apple.com>

        WebGPU prototype - Front-End
        https://bugs.webkit.org/show_bug.cgi?id=167952

        Reviewed by Dean Jackson.

        * runtime/CommonIdentifiers.h: Add WebGPU objects.

2017-03-10  Filip Pizlo  <fpizlo@apple.com>

        The JITs should be able to emit fast TLS loads
        https://bugs.webkit.org/show_bug.cgi?id=169483

        Reviewed by Keith Miller.
        
        Added loadFromTLS32/64/Ptr to the MacroAssembler and added a B3 test for this.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::mrs_TPIDRRO_EL0):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::loadFromTLSPtr):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::loadFromTLS32):
        (JSC::MacroAssemblerARM64::loadFromTLS64):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::loadFromTLS32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::loadFromTLS64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::adcl_im):
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::addl_im):
        (JSC::X86Assembler::andl_im):
        (JSC::X86Assembler::orl_im):
        (JSC::X86Assembler::orl_rm):
        (JSC::X86Assembler::subl_im):
        (JSC::X86Assembler::cmpb_im):
        (JSC::X86Assembler::cmpl_rm):
        (JSC::X86Assembler::cmpl_im):
        (JSC::X86Assembler::testb_im):
        (JSC::X86Assembler::movb_i8m):
        (JSC::X86Assembler::movb_rm):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::movq_mr):
        (JSC::X86Assembler::movsxd_rr):
        (JSC::X86Assembler::gs):
        (JSC::X86Assembler::X86InstructionFormatter::SingleInstructionBufferWriter::memoryModRM):
        * b3/testb3.cpp:
        (JSC::B3::testFastTLS):
        (JSC::B3::run):

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Fix watch and tv builds after r213294
        https://bugs.webkit.org/show_bug.cgi?id=169508

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2017-03-10  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make more demos run
        https://bugs.webkit.org/show_bug.cgi?id=165510
        <rdar://problem/29760310>

        Reviewed by Keith Miller.

        This patch makes another Wasm demo run:
        https://kripken.github.io/BananaBread/cube2/bb.html
        
        This patch fixes two bugs:
        1. When WebAssemblyFunctionType was added, we did not properly
        update the last JS type value.
        2. Our code for our JS -> Wasm entrypoint was wrong. It lead to bad
        code generation where we would emit B3 that would write over r12
        and rbx (on x86) which is invalid since those are our pinned registers.
        This patch just rewrites the entrypoint to use hand written assembler
        code. I was planning on doing this anyways because it's a compile
        time speed boost.
        
        Also, this patch adds support for some new API features:
        We can now export an import, either via a direct export, or via a Table and the
        Element section. I've added a new class called WebAssemblyWrapperFunction that
        just wraps over a JSObject that is a function. Wrapper functions have types
        associated with them, so if they're re-imported, or called via call_indirect,
        they can be type checked.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::webAssemblyWrapperFunctionStructure):
        * runtime/JSType.h:
        * wasm/JSWebAssemblyCodeBlock.h:
        (JSC::JSWebAssemblyCodeBlock::wasmToJsCallStubForImport):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::headerSizeInBytes):
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::isWebAssemblyHostFunction):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::importFunction):
        (JSC::JSWebAssemblyInstance::importFunctions):
        (JSC::JSWebAssemblyInstance::setImportFunction):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
        (JSC::JSWebAssemblyTable::grow):
        (JSC::JSWebAssemblyTable::clearFunction):
        (JSC::JSWebAssemblyTable::setFunction):
        * wasm/js/JSWebAssemblyTable.h:
        (JSC::JSWebAssemblyTable::getFunction):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::WebAssemblyInstanceConstructor::createInstance):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyModuleRecord.h:
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::webAssemblyTableProtoFuncGet):
        (JSC::webAssemblyTableProtoFuncSet):
        * wasm/js/WebAssemblyWrapperFunction.cpp: Added.
        (JSC::callWebAssemblyWrapperFunction):
        (JSC::WebAssemblyWrapperFunction::WebAssemblyWrapperFunction):
        (JSC::WebAssemblyWrapperFunction::create):
        (JSC::WebAssemblyWrapperFunction::finishCreation):
        (JSC::WebAssemblyWrapperFunction::createStructure):
        (JSC::WebAssemblyWrapperFunction::visitChildren):
        * wasm/js/WebAssemblyWrapperFunction.h: Added.
        (JSC::WebAssemblyWrapperFunction::signatureIndex):
        (JSC::WebAssemblyWrapperFunction::wasmEntrypoint):
        (JSC::WebAssemblyWrapperFunction::function):

2017-03-10  Mark Lam  <mark.lam@apple.com>

        JSC: BindingNode::bindValue doesn't increase the scope's reference count.
        https://bugs.webkit.org/show_bug.cgi?id=168546
        <rdar://problem/30589551>

        Reviewed by Saam Barati.

        We should protect the scope RegisterID with a RefPtr while it is still needed.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitLoopHeader):
        (JSC::ForOfNode::emitBytecode):
        (JSC::BindingNode::bindValue):

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * CMakeLists.txt:
        Make more forwarding headers so we can find WasmFaultSignalHandler.h from WebProcess.cpp.

2017-03-10  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Implement a StackTrace utility object that can capture stack traces for debugging.
        https://bugs.webkit.org/show_bug.cgi?id=169454

        Reviewed by Michael Saboff.

        The underlying implementation is hoisted right out of Assertions.cpp from the
        implementations of WTFPrintBacktrace().

        The reason we need this StackTrace object is because during heap debugging, we
        sometimes want to capture the stack trace that allocated the objects of interest.
        Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may
        perturb the execution profile sufficiently that an issue may not reproduce,
        while alternatively, just capturing the stack trace and deferring printing it
        till we actually need it later perturbs the execution profile less.

        In addition, just capturing the stack traces (instead of printing them
        immediately at each capture site) allows us to avoid polluting stdout with tons
        of stack traces that may be irrelevant.

        For now, we only capture the native stack trace.  We'll leave capturing and
        integrating the JS stack trace as an exercise for the future if we need it then.

        Here's an example of how to use this StackTrace utility:

            // Capture a stack trace of the top 10 frames.
            std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10));
            // Print the trace.
            dataLog(*trace);

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * tools/StackTrace.cpp: Added.
        (JSC::StackTrace::instanceSize):
        (JSC::StackTrace::captureStackTrace):
        (JSC::StackTrace::dump):
        * tools/StackTrace.h: Added.
        (JSC::StackTrace::size):
        (JSC::StackTrace::StackTrace):

2017-03-04  Filip Pizlo  <fpizlo@apple.com>

        B3 should have comprehensive support for atomic operations
        https://bugs.webkit.org/show_bug.cgi?id=162349

        Reviewed by Keith Miller.
        
        This adds the following capabilities to B3:
        
        - Atomic weak/strong unfenced/fenced compare-and-swap
        - Atomic add/sub/or/and/xor/xchg
        - Acquire/release fencing on loads/stores
        - Fenceless load-load dependencies
        
        This adds lowering to the following instructions on x86:
        
        - lock cmpxchg
        - lock xadd
        - lock add/sub/or/and/xor/xchg
        
        This adds lowering to the following instructions on ARM64:
        
        - ldar and friends
        - stlr and friends
        - ldxr and friends (unfenced LL)
        - stxr and friends (unfended SC)
        - ldaxr and friends (fenced LL)
        - stlxr and friends (fenced SC)
        - eor as a fenceless load-load dependency
        
        This does instruction selection pattern matching to ensure that weak/strong CAS and all of the
        variants of fences and atomic math ops get lowered to the best possible instruction sequence.
        For example, we support the Equal(AtomicStrongCAS(expected, ...), expected) pattern and a bunch
        of its friends. You can say Branch(Equal(AtomicStrongCAS(expected, ...), expected)) and it will
        generate the best possible branch sequence on x86 and ARM64.
        
        B3 now knows how to model all of the kinds of fencing. It knows that acq loads are ordered with
        respect to each other and with respect to rel stores, creating sequential consistency that
        transcends just the acq/rel fences themselves (see Effects::fence). It knows that the phantom
        fence effects may only target some abstract heaps but not others, so that load elimination and
        store sinking can still operate across fences if you just tell B3 that the fence does not alias
        those accesses. This makes it super easy to teach B3 that some of your heap is thread-local.
        Even better, it lets you express fine-grained dependencies where the atomics that affect one
        property in shared memory do not clobber non-atomics that ffect some other property in shared
        memory.
        
        One of my favorite features is Depend, which allows you to express load-load dependencies. On
        x86 it lowers to nothing, while on ARM64 it lowers to eor.
        
        This also exposes a common atomicWeakCAS API to the x86_64/ARM64 MacroAssemblers. Same for
        acq/rel. JSC's 64-bit JITs are now a happy concurrency playground.
        
        This doesn't yet expose the functionality to JS or wasm. SAB still uses the non-intrinsic
        implementations of the Atomics object, for now.
        
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::ldar):
        (JSC::ARM64Assembler::ldxr):
        (JSC::ARM64Assembler::ldaxr):
        (JSC::ARM64Assembler::stxr):
        (JSC::ARM64Assembler::stlr):
        (JSC::ARM64Assembler::stlxr):
        (JSC::ARM64Assembler::excepnGenerationImmMask):
        (JSC::ARM64Assembler::exoticLoad):
        (JSC::ARM64Assembler::storeRelease):
        (JSC::ARM64Assembler::exoticStore):
        * assembler/AbstractMacroAssembler.cpp: Added.
        (WTF::printInternal):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssemblerBase::invert):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::loadAcq8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::loadAcq8):
        (JSC::MacroAssemblerARM64::storeRel8):
        (JSC::MacroAssemblerARM64::loadAcq16SignedExtendTo32):
        (JSC::MacroAssemblerARM64::loadAcq16):
        (JSC::MacroAssemblerARM64::storeRel16):
        (JSC::MacroAssemblerARM64::loadAcq32):
        (JSC::MacroAssemblerARM64::loadAcq64):
        (JSC::MacroAssemblerARM64::storeRel32):
        (JSC::MacroAssemblerARM64::storeRel64):
        (JSC::MacroAssemblerARM64::loadLink8):
        (JSC::MacroAssemblerARM64::loadLinkAcq8):
        (JSC::MacroAssemblerARM64::storeCond8):
        (JSC::MacroAssemblerARM64::storeCondRel8):
        (JSC::MacroAssemblerARM64::loadLink16):
        (JSC::MacroAssemblerARM64::loadLinkAcq16):
        (JSC::MacroAssemblerARM64::storeCond16):
        (JSC::MacroAssemblerARM64::storeCondRel16):
        (JSC::MacroAssemblerARM64::loadLink32):
        (JSC::MacroAssemblerARM64::loadLinkAcq32):
        (JSC::MacroAssemblerARM64::storeCond32):
        (JSC::MacroAssemblerARM64::storeCondRel32):
        (JSC::MacroAssemblerARM64::loadLink64):
        (JSC::MacroAssemblerARM64::loadLinkAcq64):
        (JSC::MacroAssemblerARM64::storeCond64):
        (JSC::MacroAssemblerARM64::storeCondRel64):
        (JSC::MacroAssemblerARM64::atomicStrongCAS8):
        (JSC::MacroAssemblerARM64::atomicStrongCAS16):
        (JSC::MacroAssemblerARM64::atomicStrongCAS32):
        (JSC::MacroAssemblerARM64::atomicStrongCAS64):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS8):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS16):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS32):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS64):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS8):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS16):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS32):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS64):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS8):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS16):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS32):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS64):
        (JSC::MacroAssemblerARM64::depend32):
        (JSC::MacroAssemblerARM64::depend64):
        (JSC::MacroAssemblerARM64::loadLink):
        (JSC::MacroAssemblerARM64::loadLinkAcq):
        (JSC::MacroAssemblerARM64::storeCond):
        (JSC::MacroAssemblerARM64::storeCondRel):
        (JSC::MacroAssemblerARM64::signExtend):
        (JSC::MacroAssemblerARM64::branch):
        (JSC::MacroAssemblerARM64::atomicStrongCAS):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS):
        (JSC::MacroAssemblerARM64::extractSimpleAddress):
        (JSC::MacroAssemblerARM64::signExtend<8>):
        (JSC::MacroAssemblerARM64::signExtend<16>):
        (JSC::MacroAssemblerARM64::branch<64>):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::add32):
        (JSC::MacroAssemblerX86Common::and32):
        (JSC::MacroAssemblerX86Common::and16):
        (JSC::MacroAssemblerX86Common::and8):
        (JSC::MacroAssemblerX86Common::neg32):
        (JSC::MacroAssemblerX86Common::neg16):
        (JSC::MacroAssemblerX86Common::neg8):
        (JSC::MacroAssemblerX86Common::or32):
        (JSC::MacroAssemblerX86Common::or16):
        (JSC::MacroAssemblerX86Common::or8):
        (JSC::MacroAssemblerX86Common::sub16):
        (JSC::MacroAssemblerX86Common::sub8):
        (JSC::MacroAssemblerX86Common::sub32):
        (JSC::MacroAssemblerX86Common::xor32):
        (JSC::MacroAssemblerX86Common::xor16):
        (JSC::MacroAssemblerX86Common::xor8):
        (JSC::MacroAssemblerX86Common::not32):
        (JSC::MacroAssemblerX86Common::not16):
        (JSC::MacroAssemblerX86Common::not8):
        (JSC::MacroAssemblerX86Common::store16):
        (JSC::MacroAssemblerX86Common::atomicStrongCAS8):
        (JSC::MacroAssemblerX86Common::atomicStrongCAS16):
        (JSC::MacroAssemblerX86Common::atomicStrongCAS32):
        (JSC::MacroAssemblerX86Common::branchAtomicStrongCAS8):
        (JSC::MacroAssemblerX86Common::branchAtomicStrongCAS16):
        (JSC::MacroAssemblerX86Common::branchAtomicStrongCAS32):
        (JSC::MacroAssemblerX86Common::atomicWeakCAS8):
        (JSC::MacroAssemblerX86Common::atomicWeakCAS16):
        (JSC::MacroAssemblerX86Common::atomicWeakCAS32):
        (JSC::MacroAssemblerX86Common::branchAtomicWeakCAS8):
        (JSC::MacroAssemblerX86Common::branchAtomicWeakCAS16):
        (JSC::MacroAssemblerX86Common::branchAtomicWeakCAS32):
        (JSC::MacroAssemblerX86Common::atomicRelaxedWeakCAS8):
        (JSC::MacroAssemblerX86Common::atomicRelaxedWeakCAS16):
        (JSC::MacroAssemblerX86Common::atomicRelaxedWeakCAS32):
        (JSC::MacroAssemblerX86Common::branchAtomicRelaxedWeakCAS8):
        (JSC::MacroAssemblerX86Common::branchAtomicRelaxedWeakCAS16):
        (JSC::MacroAssemblerX86Common::branchAtomicRelaxedWeakCAS32):
        (JSC::MacroAssemblerX86Common::atomicAdd8):
        (JSC::MacroAssemblerX86Common::atomicAdd16):
        (JSC::MacroAssemblerX86Common::atomicAdd32):
        (JSC::MacroAssemblerX86Common::atomicSub8):
        (JSC::MacroAssemblerX86Common::atomicSub16):
        (JSC::MacroAssemblerX86Common::atomicSub32):
        (JSC::MacroAssemblerX86Common::atomicAnd8):
        (JSC::MacroAssemblerX86Common::atomicAnd16):
        (JSC::MacroAssemblerX86Common::atomicAnd32):
        (JSC::MacroAssemblerX86Common::atomicOr8):
        (JSC::MacroAssemblerX86Common::atomicOr16):
        (JSC::MacroAssemblerX86Common::atomicOr32):
        (JSC::MacroAssemblerX86Common::atomicXor8):
        (JSC::MacroAssemblerX86Common::atomicXor16):
        (JSC::MacroAssemblerX86Common::atomicXor32):
        (JSC::MacroAssemblerX86Common::atomicNeg8):
        (JSC::MacroAssemblerX86Common::atomicNeg16):
        (JSC::MacroAssemblerX86Common::atomicNeg32):
        (JSC::MacroAssemblerX86Common::atomicNot8):
        (JSC::MacroAssemblerX86Common::atomicNot16):
        (JSC::MacroAssemblerX86Common::atomicNot32):
        (JSC::MacroAssemblerX86Common::atomicXchgAdd8):
        (JSC::MacroAssemblerX86Common::atomicXchgAdd16):
        (JSC::MacroAssemblerX86Common::atomicXchgAdd32):
        (JSC::MacroAssemblerX86Common::atomicXchg8):
        (JSC::MacroAssemblerX86Common::atomicXchg16):
        (JSC::MacroAssemblerX86Common::atomicXchg32):
        (JSC::MacroAssemblerX86Common::loadAcq8):
        (JSC::MacroAssemblerX86Common::loadAcq8SignedExtendTo32):
        (JSC::MacroAssemblerX86Common::loadAcq16):
        (JSC::MacroAssemblerX86Common::loadAcq16SignedExtendTo32):
        (JSC::MacroAssemblerX86Common::loadAcq32):
        (JSC::MacroAssemblerX86Common::storeRel8):
        (JSC::MacroAssemblerX86Common::storeRel16):
        (JSC::MacroAssemblerX86Common::storeRel32):
        (JSC::MacroAssemblerX86Common::storeFence):
        (JSC::MacroAssemblerX86Common::loadFence):
        (JSC::MacroAssemblerX86Common::replaceWithJump):
        (JSC::MacroAssemblerX86Common::maxJumpReplacementSize):
        (JSC::MacroAssemblerX86Common::patchableJumpSize):
        (JSC::MacroAssemblerX86Common::supportsFloatingPointRounding):
        (JSC::MacroAssemblerX86Common::supportsAVX):
        (JSC::MacroAssemblerX86Common::updateEax1EcxFlags):
        (JSC::MacroAssemblerX86Common::x86Condition):
        (JSC::MacroAssemblerX86Common::atomicStrongCAS):
        (JSC::MacroAssemblerX86Common::branchAtomicStrongCAS):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::add64):
        (JSC::MacroAssemblerX86_64::and64):
        (JSC::MacroAssemblerX86_64::neg64):
        (JSC::MacroAssemblerX86_64::or64):
        (JSC::MacroAssemblerX86_64::sub64):
        (JSC::MacroAssemblerX86_64::xor64):
        (JSC::MacroAssemblerX86_64::not64):
        (JSC::MacroAssemblerX86_64::store64):
        (JSC::MacroAssemblerX86_64::atomicStrongCAS64):
        (JSC::MacroAssemblerX86_64::branchAtomicStrongCAS64):
        (JSC::MacroAssemblerX86_64::atomicWeakCAS64):
        (JSC::MacroAssemblerX86_64::branchAtomicWeakCAS64):
        (JSC::MacroAssemblerX86_64::atomicRelaxedWeakCAS64):
        (JSC::MacroAssemblerX86_64::branchAtomicRelaxedWeakCAS64):
        (JSC::MacroAssemblerX86_64::atomicAdd64):
        (JSC::MacroAssemblerX86_64::atomicSub64):
        (JSC::MacroAssemblerX86_64::atomicAnd64):
        (JSC::MacroAssemblerX86_64::atomicOr64):
        (JSC::MacroAssemblerX86_64::atomicXor64):
        (JSC::MacroAssemblerX86_64::atomicNeg64):
        (JSC::MacroAssemblerX86_64::atomicNot64):
        (JSC::MacroAssemblerX86_64::atomicXchgAdd64):
        (JSC::MacroAssemblerX86_64::atomicXchg64):
        (JSC::MacroAssemblerX86_64::loadAcq64):
        (JSC::MacroAssemblerX86_64::storeRel64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::addl_mr):
        (JSC::X86Assembler::addq_mr):
        (JSC::X86Assembler::addq_rm):
        (JSC::X86Assembler::addq_im):
        (JSC::X86Assembler::andl_mr):
        (JSC::X86Assembler::andl_rm):
        (JSC::X86Assembler::andw_rm):
        (JSC::X86Assembler::andb_rm):
        (JSC::X86Assembler::andl_im):
        (JSC::X86Assembler::andw_im):
        (JSC::X86Assembler::andb_im):
        (JSC::X86Assembler::andq_mr):
        (JSC::X86Assembler::andq_rm):
        (JSC::X86Assembler::andq_im):
        (JSC::X86Assembler::incq_m):
        (JSC::X86Assembler::negq_m):
        (JSC::X86Assembler::negl_m):
        (JSC::X86Assembler::negw_m):
        (JSC::X86Assembler::negb_m):
        (JSC::X86Assembler::notl_m):
        (JSC::X86Assembler::notw_m):
        (JSC::X86Assembler::notb_m):
        (JSC::X86Assembler::notq_m):
        (JSC::X86Assembler::orl_mr):
        (JSC::X86Assembler::orl_rm):
        (JSC::X86Assembler::orw_rm):
        (JSC::X86Assembler::orb_rm):
        (JSC::X86Assembler::orl_im):
        (JSC::X86Assembler::orw_im):
        (JSC::X86Assembler::orb_im):
        (JSC::X86Assembler::orq_mr):
        (JSC::X86Assembler::orq_rm):
        (JSC::X86Assembler::orq_im):
        (JSC::X86Assembler::subl_mr):
        (JSC::X86Assembler::subl_rm):
        (JSC::X86Assembler::subw_rm):
        (JSC::X86Assembler::subb_rm):
        (JSC::X86Assembler::subl_im):
        (JSC::X86Assembler::subw_im):
        (JSC::X86Assembler::subb_im):
        (JSC::X86Assembler::subq_mr):
        (JSC::X86Assembler::subq_rm):
        (JSC::X86Assembler::subq_im):
        (JSC::X86Assembler::xorl_mr):
        (JSC::X86Assembler::xorl_rm):
        (JSC::X86Assembler::xorl_im):
        (JSC::X86Assembler::xorw_rm):
        (JSC::X86Assembler::xorw_im):
        (JSC::X86Assembler::xorb_rm):
        (JSC::X86Assembler::xorb_im):
        (JSC::X86Assembler::xorq_im):
        (JSC::X86Assembler::xorq_rm):
        (JSC::X86Assembler::xorq_mr):
        (JSC::X86Assembler::xchgb_rm):
        (JSC::X86Assembler::xchgw_rm):
        (JSC::X86Assembler::xchgl_rm):
        (JSC::X86Assembler::xchgq_rm):
        (JSC::X86Assembler::movw_im):
        (JSC::X86Assembler::movq_i32m):
        (JSC::X86Assembler::cmpxchgb_rm):
        (JSC::X86Assembler::cmpxchgw_rm):
        (JSC::X86Assembler::cmpxchgl_rm):
        (JSC::X86Assembler::cmpxchgq_rm):
        (JSC::X86Assembler::xaddb_rm):
        (JSC::X86Assembler::xaddw_rm):
        (JSC::X86Assembler::xaddl_rm):
        (JSC::X86Assembler::xaddq_rm):
        (JSC::X86Assembler::X86InstructionFormatter::SingleInstructionBufferWriter::memoryModRM):
        * b3/B3AtomicValue.cpp: Added.
        (JSC::B3::AtomicValue::~AtomicValue):
        (JSC::B3::AtomicValue::dumpMeta):
        (JSC::B3::AtomicValue::cloneImpl):
        (JSC::B3::AtomicValue::AtomicValue):
        * b3/B3AtomicValue.h: Added.
        * b3/B3BasicBlock.h:
        * b3/B3BlockInsertionSet.cpp:
        (JSC::B3::BlockInsertionSet::BlockInsertionSet):
        (JSC::B3::BlockInsertionSet::insert): Deleted.
        (JSC::B3::BlockInsertionSet::insertBefore): Deleted.
        (JSC::B3::BlockInsertionSet::insertAfter): Deleted.
        (JSC::B3::BlockInsertionSet::execute): Deleted.
        * b3/B3BlockInsertionSet.h:
        * b3/B3Effects.cpp:
        (JSC::B3::Effects::interferes):
        (JSC::B3::Effects::operator==):
        (JSC::B3::Effects::dump):
        * b3/B3Effects.h:
        (JSC::B3::Effects::forCall):
        (JSC::B3::Effects::mustExecute):
        * b3/B3EliminateCommonSubexpressions.cpp:
        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3GenericBlockInsertionSet.h: Added.
        (JSC::B3::GenericBlockInsertionSet::GenericBlockInsertionSet):
        (JSC::B3::GenericBlockInsertionSet::insert):
        (JSC::B3::GenericBlockInsertionSet::insertBefore):
        (JSC::B3::GenericBlockInsertionSet::insertAfter):
        (JSC::B3::GenericBlockInsertionSet::execute):
        * b3/B3HeapRange.h:
        (JSC::B3::HeapRange::operator|):
        * b3/B3InsertionSet.cpp:
        (JSC::B3::InsertionSet::insertClone):
        * b3/B3InsertionSet.h:
        * b3/B3LegalizeMemoryOffsets.cpp:
        * b3/B3LowerMacros.cpp:
        (JSC::B3::lowerMacros):
        * b3/B3LowerMacrosAfterOptimizations.cpp:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::LowerToAir):
        (JSC::B3::Air::LowerToAir::run):
        (JSC::B3::Air::LowerToAir::effectiveAddr):
        (JSC::B3::Air::LowerToAir::addr):
        (JSC::B3::Air::LowerToAir::loadPromiseAnyOpcode):
        (JSC::B3::Air::LowerToAir::appendShift):
        (JSC::B3::Air::LowerToAir::tryAppendStoreBinOp):
        (JSC::B3::Air::LowerToAir::storeOpcode):
        (JSC::B3::Air::LowerToAir::createStore):
        (JSC::B3::Air::LowerToAir::finishAppendingInstructions):
        (JSC::B3::Air::LowerToAir::newBlock):
        (JSC::B3::Air::LowerToAir::splitBlock):
        (JSC::B3::Air::LowerToAir::fillStackmap):
        (JSC::B3::Air::LowerToAir::appendX86Div):
        (JSC::B3::Air::LowerToAir::appendX86UDiv):
        (JSC::B3::Air::LowerToAir::loadLinkOpcode):
        (JSC::B3::Air::LowerToAir::storeCondOpcode):
        (JSC::B3::Air::LowerToAir::appendCAS):
        (JSC::B3::Air::LowerToAir::appendVoidAtomic):
        (JSC::B3::Air::LowerToAir::appendGeneralAtomic):
        (JSC::B3::Air::LowerToAir::lower):
        (JSC::B3::Air::LowerToAir::lowerX86Div): Deleted.
        (JSC::B3::Air::LowerToAir::lowerX86UDiv): Deleted.
        * b3/B3LowerToAir.h:
        * b3/B3MemoryValue.cpp:
        (JSC::B3::MemoryValue::isLegalOffset):
        (JSC::B3::MemoryValue::accessType):
        (JSC::B3::MemoryValue::accessBank):
        (JSC::B3::MemoryValue::accessByteSize):
        (JSC::B3::MemoryValue::dumpMeta):
        (JSC::B3::MemoryValue::MemoryValue):
        (JSC::B3::MemoryValue::accessWidth): Deleted.
        * b3/B3MemoryValue.h:
        * b3/B3MemoryValueInlines.h: Added.
        (JSC::B3::MemoryValue::isLegalOffset):
        (JSC::B3::MemoryValue::requiresSimpleAddr):
        (JSC::B3::MemoryValue::accessWidth):
        * b3/B3MoveConstants.cpp:
        * b3/B3NativeTraits.h: Added.
        * b3/B3Opcode.cpp:
        (JSC::B3::storeOpcode):
        (WTF::printInternal):
        * b3/B3Opcode.h:
        (JSC::B3::isLoad):
        (JSC::B3::isStore):
        (JSC::B3::isLoadStore):
        (JSC::B3::isAtomic):
        (JSC::B3::isAtomicCAS):
        (JSC::B3::isAtomicXchg):
        (JSC::B3::isMemoryAccess):
        (JSC::B3::signExtendOpcode):
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::dump):
        * b3/B3Procedure.h:
        (JSC::B3::Procedure::hasQuirks):
        (JSC::B3::Procedure::setHasQuirks):
        * b3/B3PureCSE.cpp:
        (JSC::B3::pureCSE):
        * b3/B3PureCSE.h:
        * b3/B3ReduceStrength.cpp:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::returnsBool):
        (JSC::B3::Value::effects):
        (JSC::B3::Value::key):
        (JSC::B3::Value::performSubstitution):
        (JSC::B3::Value::typeFor):
        * b3/B3Value.h:
        * b3/B3Width.cpp:
        (JSC::B3::bestType):
        * b3/B3Width.h:
        (JSC::B3::canonicalWidth):
        (JSC::B3::isCanonicalWidth):
        (JSC::B3::mask):
        * b3/air/AirArg.cpp:
        (JSC::B3::Air::Arg::jsHash):
        (JSC::B3::Air::Arg::dump):
        (WTF::printInternal):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::isAnyUse):
        (JSC::B3::Air::Arg::isColdUse):
        (JSC::B3::Air::Arg::cooled):
        (JSC::B3::Air::Arg::isEarlyUse):
        (JSC::B3::Air::Arg::isLateUse):
        (JSC::B3::Air::Arg::isAnyDef):
        (JSC::B3::Air::Arg::isEarlyDef):
        (JSC::B3::Air::Arg::isLateDef):
        (JSC::B3::Air::Arg::isZDef):
        (JSC::B3::Air::Arg::simpleAddr):
        (JSC::B3::Air::Arg::statusCond):
        (JSC::B3::Air::Arg::isSimpleAddr):
        (JSC::B3::Air::Arg::isMemory):
        (JSC::B3::Air::Arg::isStatusCond):
        (JSC::B3::Air::Arg::isCondition):
        (JSC::B3::Air::Arg::ptr):
        (JSC::B3::Air::Arg::base):
        (JSC::B3::Air::Arg::isGP):
        (JSC::B3::Air::Arg::isFP):
        (JSC::B3::Air::Arg::isValidForm):
        (JSC::B3::Air::Arg::forEachTmpFast):
        (JSC::B3::Air::Arg::forEachTmp):
        (JSC::B3::Air::Arg::asAddress):
        (JSC::B3::Air::Arg::asStatusCondition):
        (JSC::B3::Air::Arg::isInvertible):
        (JSC::B3::Air::Arg::inverted):
        * b3/air/AirBasicBlock.cpp:
        (JSC::B3::Air::BasicBlock::setSuccessors):
        * b3/air/AirBasicBlock.h:
        * b3/air/AirBlockInsertionSet.cpp: Added.
        (JSC::B3::Air::BlockInsertionSet::BlockInsertionSet):
        (JSC::B3::Air::BlockInsertionSet::~BlockInsertionSet):
        * b3/air/AirBlockInsertionSet.h: Added.
        * b3/air/AirDumpAsJS.cpp: Removed.
        * b3/air/AirDumpAsJS.h: Removed.
        * b3/air/AirEliminateDeadCode.cpp:
        (JSC::B3::Air::eliminateDeadCode):
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::prepareForGeneration):
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::isAtomicStrongCASValid):
        (JSC::B3::Air::isBranchAtomicStrongCASValid):
        (JSC::B3::Air::isAtomicStrongCAS8Valid):
        (JSC::B3::Air::isAtomicStrongCAS16Valid):
        (JSC::B3::Air::isAtomicStrongCAS32Valid):
        (JSC::B3::Air::isAtomicStrongCAS64Valid):
        (JSC::B3::Air::isBranchAtomicStrongCAS8Valid):
        (JSC::B3::Air::isBranchAtomicStrongCAS16Valid):
        (JSC::B3::Air::isBranchAtomicStrongCAS32Valid):
        (JSC::B3::Air::isBranchAtomicStrongCAS64Valid):
        * b3/air/AirOpcode.opcodes:
        * b3/air/AirOptimizeBlockOrder.cpp:
        (JSC::B3::Air::optimizeBlockOrder):
        * b3/air/AirPadInterference.cpp:
        (JSC::B3::Air::padInterference):
        * b3/air/AirSpillEverything.cpp:
        (JSC::B3::Air::spillEverything):
        * b3/air/opcode_generator.rb:
        * b3/testb3.cpp:
        (JSC::B3::testLoadAcq42):
        (JSC::B3::testStoreRelAddLoadAcq32):
        (JSC::B3::testStoreRelAddLoadAcq8):
        (JSC::B3::testStoreRelAddFenceLoadAcq8):
        (JSC::B3::testStoreRelAddLoadAcq16):
        (JSC::B3::testStoreRelAddLoadAcq64):
        (JSC::B3::testTrappingStoreElimination):
        (JSC::B3::testX86LeaAddAdd):
        (JSC::B3::testX86LeaAddShlLeftScale1):
        (JSC::B3::testAtomicWeakCAS):
        (JSC::B3::testAtomicStrongCAS):
        (JSC::B3::testAtomicXchg):
        (JSC::B3::testDepend32):
        (JSC::B3::testDepend64):
        (JSC::B3::run):
        * runtime/Options.h:

2017-03-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fixes after r213652.
        https://bugs.webkit.org/show_bug.cgi?id=168920

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::replaceWithBreakpoint):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::replaceWithBreakpoint):

2017-03-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed ARM buildfix after r213652.
        https://bugs.webkit.org/show_bug.cgi?id=168920

        r213652 used replaceWithBrk and replaceWithBkpt names for the same
        function, which was inconsistent and caused build error in ARMAssembler.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::replaceWithBkpt): Renamed replaceWithBrk to replaceWithBkpt.
        (JSC::ARM64Assembler::replaceWithBrk): Deleted.
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::replaceWithBkpt): Renamed replaceWithBrk to replaceWithBkpt.
        (JSC::ARMAssembler::replaceWithBrk): Deleted.
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::replaceWithBreakpoint):

2017-03-10  Alex Christensen  <achristensen@webkit.org>

        Win64 build fix.

        * b3/B3FenceValue.h:
        * b3/B3Value.h:
        Putting JS_EXPORT_PRIVATE on member functions in classes that are declared with JS_EXPORT_PRIVATE
        doesn't accomplish anything except making Visual Studio mad.
        * b3/air/opcode_generator.rb:
        winnt.h has naming collisions with enum values from AirOpcode.h.
        For example, MemoryFence is #defined to be _mm_mfence, which is declared to be a function in emmintrin.h.
        RotateLeft32 is #defined to be _rotl, which is declared to be a function in <stdlib.h>
        A clean solution is just to put Opcode:: before the references to the opcode names to tell Visual Studio
        that it is referring to the enum value in AirOpcode.h and not the function declaration elsewhere.

2017-03-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r213695.

        This change broke the Windows build.

        Reverted changeset:

        "Implement a StackTrace utility object that can capture stack
        traces for debugging."
        https://bugs.webkit.org/show_bug.cgi?id=169454
        http://trac.webkit.org/changeset/213695

2017-03-09  Caio Lima  <ticaiolima@gmail.com>

        [ESnext] Implement Object Rest - Implementing Object Rest Destructuring
        https://bugs.webkit.org/show_bug.cgi?id=167962

        Reviewed by Keith Miller.

        Object Rest/Spread Destructing proposal is in stage 3[1] and this
        Patch is a prototype implementation of it. A simple change over the
        parser was necessary to support the new '...' token on Object Pattern
        destruction rule. In the bytecode generator side, We changed the
        bytecode generated on ObjectPatternNode::bindValue to store in an
        array identifiers of already destructed properties, following spec draft
        section[2], and then pass it as excludedNames to CopyDataProperties.
        The rest destruction the calls copyDataProperties to perform the
        copy of rest properties in rhs.

        We also implemented CopyDataProperties as private JS global operation
        on builtins/GlobalOperations.js following it's specification on [3].
        It is implemented using Set object to verify if a property is on
        excludedNames to keep this algorithm with O(n + m) complexity, where n
        = number of source's own properties and m = excludedNames.length. 

        As a requirement to use JSSets as constants, a change in
        CodeBlock::create API was necessary, because JSSet creation can throws OOM
        exception. Now, CodeBlock::finishCreation returns ```false``` if an
        execption is throwed by
        CodeBlock::setConstantIdentifierSetRegisters and then we return
        nullptr to ScriptExecutable::newCodeBlockFor. It is responsible to
        check if CodeBlock was constructed properly and then, throw OOM
        exception to the correct scope.

        [1] - https://github.com/sebmarkbage/ecmascript-rest-spread
        [2] - http://sebmarkbage.github.io/ecmascript-rest-spread/#Rest-RuntimeSemantics-PropertyDestructuringAssignmentEvaluation
        [3] - http://sebmarkbage.github.io/ecmascript-rest-spread/#AbstractOperations-CopyDataProperties

        * builtins/BuiltinNames.h:
        * builtins/GlobalOperations.js:
        (globalPrivate.copyDataProperties):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantIdentifierSetRegisters):
        * bytecode/CodeBlock.h:
        * bytecode/EvalCodeBlock.h:
        (JSC::EvalCodeBlock::create):
        * bytecode/FunctionCodeBlock.h:
        (JSC::FunctionCodeBlock::create):
        * bytecode/ModuleProgramCodeBlock.h:
        (JSC::ModuleProgramCodeBlock::create):
        * bytecode/ProgramCodeBlock.h:
        (JSC::ProgramCodeBlock::create):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::addSetConstant):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::appendObjectPatternEntry):
        (JSC::ASTBuilder::appendObjectPatternRestEntry):
        (JSC::ASTBuilder::setContainsObjectRestElement):
        * parser/Nodes.h:
        (JSC::ObjectPatternNode::appendEntry):
        (JSC::ObjectPatternNode::setContainsRestElement):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseDestructuringPattern):
        (JSC::Parser<LexerType>::parseProperty):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::operatorStackPop):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::privateToObject):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Implement a StackTrace utility object that can capture stack traces for debugging.
        https://bugs.webkit.org/show_bug.cgi?id=169454

        Reviewed by Michael Saboff.

        The underlying implementation is hoisted right out of Assertions.cpp from the
        implementations of WTFPrintBacktrace().

        The reason we need this StackTrace object is because during heap debugging, we
        sometimes want to capture the stack trace that allocated the objects of interest.
        Dumping the stack trace directly to stdout (using WTFReportBacktrace()) may
        perturb the execution profile sufficiently that an issue may not reproduce,
        while alternatively, just capturing the stack trace and deferring printing it
        till we actually need it later perturbs the execution profile less.

        In addition, just capturing the stack traces (instead of printing them
        immediately at each capture site) allows us to avoid polluting stdout with tons
        of stack traces that may be irrelevant.

        For now, we only capture the native stack trace.  We'll leave capturing and
        integrating the JS stack trace as an exercise for the future if we need it then.

        Here's an example of how to use this StackTrace utility:

            // Capture a stack trace of the top 10 frames.
            std::unique_ptr<StackTrace> trace(StackTrace::captureStackTrace(10));
            // Print the trace.
            dataLog(*trace);

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * tools/StackTrace.cpp: Added.
        (JSC::StackTrace::instanceSize):
        (JSC::StackTrace::captureStackTrace):
        (JSC::StackTrace::dump):
        * tools/StackTrace.h: Added.
        (JSC::StackTrace::StackTrace):
        (JSC::StackTrace::size):

2017-03-09  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Enable fast memory for WK2
        https://bugs.webkit.org/show_bug.cgi?id=169437

        Reviewed by Tim Horton.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2017-03-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Add XHR breakpoints UI
        https://bugs.webkit.org/show_bug.cgi?id=168763
        <rdar://problem/30952439>

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/DOMDebugger.json:
        Added clarifying comments to command descriptions.

2017-03-09  Michael Saboff  <msaboff@apple.com>

        Add plumbing to WebProcess to enable JavaScriptCore configuration and logging
        https://bugs.webkit.org/show_bug.cgi?id=169387

        Reviewed by Filip Pizlo.

        Added a helper function, processConfigFile(), to process configuration file.
        Changed jsc.cpp to use that function in lieu of processing the config file
        manually.

        * JavaScriptCore.xcodeproj/project.pbxproj: Made ConfigFile.h a private header file.
        * jsc.cpp:
        (jscmain):
        * runtime/ConfigFile.cpp:
        (JSC::processConfigFile):
        * runtime/ConfigFile.h:

2017-03-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show HTTP protocol version and other Network Load Metrics (IP Address, Priority, Connection ID)
        https://bugs.webkit.org/show_bug.cgi?id=29687
        <rdar://problem/19281586>

        Reviewed by Matt Baker and Brian Burg.

        * inspector/protocol/Network.json:
        Add metrics object with optional properties to loadingFinished event.

2017-03-09  Youenn Fablet  <youenn@apple.com>

        Minimal build is broken
        https://bugs.webkit.org/show_bug.cgi?id=169416

        Reviewed by Chris Dumez.

        Since we now have some JS built-ins that are not tied to a compilation flag, we can remove compilation guards around m_vm.
        We could probably remove m_vm by ensuring m_jsDOMBindingInternals appear first but this might break very easily.

        * Scripts/builtins/builtins_generate_internals_wrapper_header.py:
        (generate_members):
        * Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:
        (BuiltinsInternalsWrapperImplementationGenerator.generate_constructor):
        * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result:

2017-03-09  Daniel Bates  <dabates@apple.com>

        Guard Credential Management implementation behind a runtime enabled feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169364
        <rdar://problem/30957425>

        Reviewed by Brent Fulgham.

        Add common identifiers for Credential, PasswordCredential, and SiteBoundCredential that are
        needed to guard these interfaces behind a runtime enabled feature flag.

        * runtime/CommonIdentifiers.h:

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Refactoring some HeapVerifier code.
        https://bugs.webkit.org/show_bug.cgi?id=169443

        Reviewed by Filip Pizlo.

        Renamed LiveObjectData to CellProfile.
        Renamed LiveObjectList to CellList.
        Moved CellProfile.*, CellList.*, and HeapVerifier.* from the heap folder to the tools folder.
        Updated the HeapVerifier to handle JSCells instead of just JSObjects.

        This is in preparation for subsequent patches to fix up the HeapVerifier for service again.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::runEndPhase):
        * heap/HeapVerifier.cpp: Removed.
        * heap/HeapVerifier.h: Removed.
        * heap/LiveObjectData.h: Removed.
        * heap/LiveObjectList.cpp: Removed.
        * heap/LiveObjectList.h: Removed.
        * tools/CellList.cpp: Copied from Source/JavaScriptCore/heap/LiveObjectList.cpp.
        (JSC::CellList::findCell):
        (JSC::LiveObjectList::findObject): Deleted.
        * tools/CellList.h: Copied from Source/JavaScriptCore/heap/LiveObjectList.h.
        (JSC::CellList::CellList):
        (JSC::CellList::reset):
        (JSC::LiveObjectList::LiveObjectList): Deleted.
        (JSC::LiveObjectList::reset): Deleted.
        * tools/CellProfile.h: Copied from Source/JavaScriptCore/heap/LiveObjectData.h.
        (JSC::CellProfile::CellProfile):
        (JSC::LiveObjectData::LiveObjectData): Deleted.
        * tools/HeapVerifier.cpp: Copied from Source/JavaScriptCore/heap/HeapVerifier.cpp.
        (JSC::GatherCellFunctor::GatherCellFunctor):
        (JSC::GatherCellFunctor::visit):
        (JSC::GatherCellFunctor::operator()):
        (JSC::HeapVerifier::gatherLiveCells):
        (JSC::HeapVerifier::cellListForGathering):
        (JSC::trimDeadCellsFromList):
        (JSC::HeapVerifier::trimDeadCells):
        (JSC::HeapVerifier::verifyButterflyIsInStorageSpace):
        (JSC::HeapVerifier::reportCell):
        (JSC::HeapVerifier::checkIfRecorded):
        (JSC::GatherLiveObjFunctor::GatherLiveObjFunctor): Deleted.
        (JSC::GatherLiveObjFunctor::visit): Deleted.
        (JSC::GatherLiveObjFunctor::operator()): Deleted.
        (JSC::HeapVerifier::gatherLiveObjects): Deleted.
        (JSC::HeapVerifier::liveObjectListForGathering): Deleted.
        (JSC::trimDeadObjectsFromList): Deleted.
        (JSC::HeapVerifier::trimDeadObjects): Deleted.
        (JSC::HeapVerifier::reportObject): Deleted.
        * tools/HeapVerifier.h: Copied from Source/JavaScriptCore/heap/HeapVerifier.h.

2017-03-09  Anders Carlsson  <andersca@apple.com>

        Add delegate support to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=169427
        Part of rdar://problem/28880714.

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:
        Add feature define.

2017-03-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Show individual messages in the content pane for a WebSocket
        https://bugs.webkit.org/show_bug.cgi?id=169011

        Reviewed by Joseph Pecoraro.

        Add walltime parameter and correct the description of Timestamp type.

        * inspector/protocol/Network.json:

2017-03-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix weak external symbol error.

        * heap/SlotVisitor.h:

2017-03-09  Filip Pizlo  <fpizlo@apple.com>

        std::isnan/isinf should work with WTF time classes
        https://bugs.webkit.org/show_bug.cgi?id=164991

        Reviewed by Darin Adler.
        
        Changes AtomicsObject to use std::isnan() instead of operator== to detect NaN.

        * runtime/AtomicsObject.cpp:
        (JSC::atomicsFuncWait):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Use const AbstractLocker& (instead of const LockHolder&) in more places.
        https://bugs.webkit.org/show_bug.cgi?id=169424

        Reviewed by Filip Pizlo.

        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::promoteYoungCodeBlocks):
        * heap/CodeBlockSet.h:
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::mark):
        * heap/ConservativeRoots.cpp:
        (JSC::CompositeMarkHook::CompositeMarkHook):
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        * heap/MachineStackMarker.h:
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::ensureBytecodesFor):
        * profiler/ProfilerDatabase.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::SamplingProfiler::createThreadIfNecessary):
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::start):
        (JSC::SamplingProfiler::pause):
        (JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
        (JSC::SamplingProfiler::clearData):
        (JSC::SamplingProfiler::releaseStackTraces):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::setStopWatch):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::availableFastMemories):
        (JSC::Wasm::activeFastMemories):
        (JSC::Wasm::viewActiveFastMemories):
        * wasm/WasmMemory.h:

2017-03-09  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make the Unity AngryBots demo run
        https://bugs.webkit.org/show_bug.cgi?id=169268

        Reviewed by Keith Miller.

        This patch fixes three bugs:
        1. The WasmBinding code for making a JS call was off
        by 1 in its stack layout code.
        2. The WasmBinding code had a "<" comparison instead
        of a ">=" comparison. This would cause us to calculate
        the wrong frame pointer offset.
        3. The code to reload wasm state inside B3IRGenerator didn't
        properly represent its effects.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::restoreWebAssemblyGlobalState):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToJs):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::WebAssemblyInstanceConstructor::createInstance):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Make the VM Traps mechanism non-polling for the DFG and FTL.
        https://bugs.webkit.org/show_bug.cgi?id=168920
        <rdar://problem/30738588>

        Reviewed by Filip Pizlo.

        1. Added a ENABLE(SIGNAL_BASED_VM_TRAPS) configuration in Platform.h.
           This is currently only enabled for OS(DARWIN) and ENABLE(JIT). 
        2. Added assembler functions for overwriting an instruction with a breakpoint.
        3. Added a new JettisonDueToVMTraps jettison reason.
        4. Added CodeBlock and DFG::CommonData utility functions for over-writing
           invalidation points with breakpoint instructions.
        5. The BytecodeGenerator now emits the op_check_traps bytecode unconditionally.
        6. Remove the JSC_alwaysCheckTraps option because of (4) above.
           For ports that don't ENABLE(SIGNAL_BASED_VM_TRAPS), we'll force
           Options::usePollingTraps() to always be true.  This makes the VMTraps
           implementation fall back to using polling based traps only.

        7. Make VMTraps support signal based traps.

        Some design and implementation details of signal based VM traps:

        - The implementation makes use of 2 signal handlers for SIGUSR1 and SIGTRAP.

        - VMTraps::fireTrap() will set the flag for the requested trap and instantiate
          a SignalSender.  The SignalSender will send SIGUSR1 to the mutator thread that
          we want to trap, and check for the occurence of one of the following events:

          a. VMTraps::handleTraps() has been called for the requested trap, or

          b. the VM is inactive and is no longer executing any JS code.  We determine
             this to be the case if the thread no longer owns the JSLock and the VM's
             entryScope is null.

             Note: the thread can relinquish the JSLock while the VM's entryScope is not
             null.  This happens when the thread calls JSLock::dropAllLocks() before
             calling a host function that may block on IO (or whatever).  For our purpose,
             this counts as the VM still running JS code, and VM::fireTrap() will still
             be waiting.

          If the SignalSender does not see either of these events, it will sleep for a
          while and then re-send SIGUSR1 and check for the events again.  When it sees
          one of these events, it will consider the mutator to have received the trap
          request.

        - The SIGUSR1 handler will try to insert breakpoints at the invalidation points
          in the DFG/FTL codeBlock at the top of the stack.  This allows the mutator
          thread to break (with a SIGTRAP) exactly at an invalidation point, where it's
          safe to jettison the codeBlock.

          Note: we cannot have the requester thread (that called VMTraps::fireTrap())
          insert the breakpoint instructions itself.  This is because we need the
          register state of the the mutator thread (that we want to trap in) in order to
          find the codeBlocks that we wish to insert the breakpoints in.  Currently,
          we don't have a generic way for the requester thread to get the register state
          of another thread.

        - The SIGTRAP handler will check to see if it is trapping on a breakpoint at an
          invalidation point.  If so, it will jettison the codeBlock and adjust the PC
          to re-execute the invalidation OSR exit off-ramp.  After the OSR exit, the
          baseline JIT code will eventually reach an op_check_traps and call
          VMTraps::handleTraps().

          If the handler is not trapping at an invalidation point, then it must be
          observing an assertion failure (which also uses the breakpoint instruction).
          In this case, the handler will defer to the default SIGTRAP handler and crash.

        - The reason we need the SignalSender is because SignalSender::send() is called
          from another thread in a loop, so that VMTraps::fireTrap() can return sooner.
          send() needs to make use of the VM pointer, and it is not guaranteed that the
          VM will outlive the thread.  SignalSender provides the mechanism by which we
          can nullify the VM pointer when the VM dies so that the thread does not
          continue to use it.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::replaceWithBrk):
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::replaceWithBrk):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::replaceWithBkpt):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::replaceWithBkpt):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::replaceWithJump):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::replaceWithBreakpoint):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::replaceWithBreakpoint):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::replaceWithJump):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::replaceWithBreakpoint):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::replaceWithInt3):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::jettison):
        (JSC::CodeBlock::hasInstalledVMTrapBreakpoints):
        (JSC::CodeBlock::installVMTrapBreakpoints):
        * bytecode/CodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCheckTraps):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::installVMTrapBreakpoints):
        (JSC::DFG::CommonData::isVMTrapBreakpoint):
        * dfg/DFGCommonData.h:
        (JSC::DFG::CommonData::hasInstalledVMTrapsBreakpoints):
        * dfg/DFGJumpReplacement.cpp:
        (JSC::DFG::JumpReplacement::installVMTrapBreakpoint):
        * dfg/DFGJumpReplacement.h:
        (JSC::DFG::JumpReplacement::dataLocation):
        * dfg/DFGNodeType.h:
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::contains):
        * heap/CodeBlockSet.h:
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterate):
        * heap/Heap.cpp:
        (JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::forEachCodeBlockIgnoringJITPlans):
        * heap/MachineStackMarker.h:
        (JSC::MachineThreads::threadsListHead):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::isValidExecutableMemory):
        * jit/ExecutableAllocator.h:
        * profiler/ProfilerJettisonReason.cpp:
        (WTF::printInternal):
        * profiler/ProfilerJettisonReason.h:
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        * runtime/Options.h:
        * runtime/PlatformThread.h:
        (JSC::platformThreadSignal):
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        (JSC::VM::ensureWatchdog):
        (JSC::VM::handleTraps): Deleted.
        (JSC::VM::setNeedAsynchronousTerminationSupport): Deleted.
        * runtime/VM.h:
        (JSC::VM::ownerThread):
        (JSC::VM::traps):
        (JSC::VM::handleTraps):
        (JSC::VM::needTrapHandling):
        (JSC::VM::needAsynchronousTerminationSupport): Deleted.
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::vm):
        (JSC::SignalContext::SignalContext):
        (JSC::SignalContext::adjustPCToPointToTrappingInstruction):
        (JSC::vmIsInactive):
        (JSC::findActiveVMAndStackBounds):
        (JSC::handleSigusr1):
        (JSC::handleSigtrap):
        (JSC::installSignalHandlers):
        (JSC::sanitizedTopCallFrame):
        (JSC::isSaneFrame):
        (JSC::VMTraps::tryInstallTrapBreakpoints):
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        (JSC::VMTraps::VMTraps):
        (JSC::VMTraps::willDestroyVM):
        (JSC::VMTraps::addSignalSender):
        (JSC::VMTraps::removeSignalSender):
        (JSC::VMTraps::SignalSender::willDestroyVM):
        (JSC::VMTraps::SignalSender::send):
        (JSC::VMTraps::fireTrap):
        (JSC::VMTraps::handleTraps):
        * runtime/VMTraps.h:
        (JSC::VMTraps::~VMTraps):
        (JSC::VMTraps::needTrapHandling):
        (JSC::VMTraps::notifyGrabAllLocks):
        (JSC::VMTraps::SignalSender::SignalSender):
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        * tools/VMInspector.cpp:
        * tools/VMInspector.h:
        (JSC::VMInspector::getLock):
        (JSC::VMInspector::iterate):

2017-03-09  Filip Pizlo  <fpizlo@apple.com>

        WebKit: JSC: JSObject::ensureLength doesn't check if ensureLengthSlow failed
        https://bugs.webkit.org/show_bug.cgi?id=169215

        Reviewed by Mark Lam.
        
        This doesn't have a test because it would be a very complicated test.

        * runtime/JSObject.h:
        (JSC::JSObject::ensureLength): If ensureLengthSlow returns false, we need to return false.

2017-03-07  Filip Pizlo  <fpizlo@apple.com>

        WTF should make it super easy to do ARM concurrency tricks
        https://bugs.webkit.org/show_bug.cgi?id=169300

        Reviewed by Mark Lam.
        
        This changes a bunch of GC hot paths to use new concurrency APIs that lead to optimal
        code on both x86 (fully leverage TSO, transactions become CAS loops) and ARM (use
        dependency chains for fencing, transactions become LL/SC loops). While inspecting the
        machine code, I found other opportunities for improvement, like inlining the "am I
        marked" part of the marking functions.

        * heap/Heap.cpp:
        (JSC::Heap::setGCDidJIT):
        * heap/HeapInlines.h:
        (JSC::Heap::testAndSetMarked):
        * heap/LargeAllocation.h:
        (JSC::LargeAllocation::isMarked):
        (JSC::LargeAllocation::isMarkedConcurrently):
        (JSC::LargeAllocation::aboutToMark):
        (JSC::LargeAllocation::testAndSetMarked):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::areMarksStaleWithDependency):
        (JSC::MarkedBlock::aboutToMark):
        (JSC::MarkedBlock::isMarkedConcurrently):
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::testAndSetMarked):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendSlow):
        (JSC::SlotVisitor::appendHiddenSlow):
        (JSC::SlotVisitor::appendHiddenSlowImpl):
        (JSC::SlotVisitor::setMarkedAndAppendToMarkStack):
        (JSC::SlotVisitor::appendUnbarriered): Deleted.
        (JSC::SlotVisitor::appendHidden): Deleted.
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::appendUnbarriered):
        (JSC::SlotVisitor::appendHidden):
        (JSC::SlotVisitor::append):
        (JSC::SlotVisitor::appendValues):
        (JSC::SlotVisitor::appendValuesHidden):
        * runtime/CustomGetterSetter.cpp:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterflyImpl):
        * runtime/JSObject.h:

2017-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] JSC test stress/arity-check-ftl-throw.js.ftl-no-cjit-validate-sampling-profiler crashing on GTK bot
        https://bugs.webkit.org/show_bug.cgi?id=160124

        Reviewed by Mark Lam.

        When performing CallVarargs, we will copy values to the stack.
        Before actually copying values, we need to adjust the stackPointerRegister
        to ensure copied values are in the allocated stack area.
        If we do not that, OS can break the values that is stored beyond the stack
        pointer. For example, signal stack can be constructed on these area, and
        breaks values.

        This patch fixes the crash in stress/spread-forward-call-varargs-stack-overflow.js
        in Linux port. Since Linux ports use signal to suspend and resume threads,
        signal handler is frequently called when enabling sampling profiler. Thus this
        crash occurs.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        * jit/SetupVarargsFrame.cpp:
        (JSC::emitSetupVarargsFrameFastCase):
        * jit/SetupVarargsFrame.h:

2017-03-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should be able to see where Resources came from (Memory Cache, Disk Cache)
        https://bugs.webkit.org/show_bug.cgi?id=164892
        <rdar://problem/29320562>

        Reviewed by Brian Burg.

        * inspector/protocol/Network.json:
        Replace "fromDiskCache" property with "source" property which includes
        more complete information about the source of this response (network,
        memory cache, disk cache, or unknown).

        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (_generate_class_for_object_declaration):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        * inspector/scripts/codegen/generator.py:
        (Generator):
        (Generator.open_fields):
        To avoid conflicts between the Inspector::Protocol::Network::Response::Source
        enum and open accessor string symbol that would have the same name, only generate
        a specific list of open accessor strings. This reduces the list of exported
        symbols from all properties to just the ones that are needed. This can be
        cleaned up later if needed.

        * inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result: Added.
        * inspector/scripts/tests/generic/type-with-open-parameters.json: Added.
        Test for open accessors generation.

2017-03-08  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Make OOB for fast memory do an extra safety check by ensuring the faulting address is in the range we allocated for fast memory
        https://bugs.webkit.org/show_bug.cgi?id=169290

        Reviewed by Saam Barati.

        This patch adds an extra sanity check by ensuring that the the memory address we faulting trying to load is in range
        of some wasm fast memory.

        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):
        (JSC::Wasm::enableFastMemory):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::activeFastMemories):
        (JSC::Wasm::viewActiveFastMemories):
        (JSC::Wasm::tryGetFastMemory):
        (JSC::Wasm::releaseFastMemory):
        * wasm/WasmMemory.h:

2017-03-07  Dean Jackson  <dino@apple.com>

        Some platforms won't be able to create a GPUDevice
        https://bugs.webkit.org/show_bug.cgi?id=169314
        <rdar://problems/30907521>

        Reviewed by Jon Lee.

        Disable WEB_GPU on the iOS Simulator.

        * Configurations/FeatureDefines.xcconfig:

2017-03-06  Saam Barati  <sbarati@apple.com>

        WebAssembly: Implement the WebAssembly.instantiate API
        https://bugs.webkit.org/show_bug.cgi?id=165982
        <rdar://problem/29760110>

        Reviewed by Keith Miller.

        This patch is a straight forward implementation of the WebAssembly.instantiate
        API: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstantiate
        
        I implemented the API in a synchronous manner. We should make it
        asynchronous: https://bugs.webkit.org/show_bug.cgi?id=169187

        * wasm/JSWebAssembly.cpp:
        (JSC::webAssemblyCompileFunc):
        (JSC::webAssemblyInstantiateFunc):
        (JSC::JSWebAssembly::finishCreation):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        (JSC::WebAssemblyInstanceConstructor::createInstance):
        * wasm/js/WebAssemblyInstanceConstructor.h:
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleConstructor.h:

2017-03-06  Michael Saboff  <msaboff@apple.com>

        Take advantage of fast permissions switching of JIT memory for devices that support it
        https://bugs.webkit.org/show_bug.cgi?id=169155

        Reviewed by Saam Barati.

        Start using the os_thread_self_restrict_rwx_to_XX() SPIs when available to
        control access to JIT memory.

        Had to update the Xcode config files to handle various build variations of
        public and internal SDKs.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):

2017-03-06  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r212778): It made 400 tests crash on AArch64 Linux
        https://bugs.webkit.org/show_bug.cgi?id=168502

        Reviewed by Filip Pizlo.

        * heap/RegisterState.h: Use setjmp code path on AArch64 Linux too to fix crashes.

2017-03-06  Caio Lima  <ticaiolima@gmail.com>

        op_get_by_id_with_this should use inline caching
        https://bugs.webkit.org/show_bug.cgi?id=162124

        Reviewed by Saam Barati.

        This patch is enabling inline cache for op_get_by_id_with_this in all
        tiers. It means that operations using ```super.member``` are going to
        be able to be optimized by PIC. To enable it, we introduced a new
        member of StructureStubInfo.patch named thisGPR, created a new class
        to manage the IC named JITGetByIdWithThisGenerator and changed
        PolymorphicAccess.regenerate that uses StructureStubInfo.patch.thisGPR
        to decide the correct this value on inline caches.
        With inline cached enabled, ```super.member``` are ~4.5x faster,
        according microbenchmarks.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addGetByIdWithThis):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIn):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileIn):
        (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsWithExecState):
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITByIdGenerator::JITByIdGenerator):
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
        (JSC::JITGetByIdWithThisGenerator::generateFastPath):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
        * jit/JITInlines.h:
        (JSC::JIT::callOperation):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByIdFunction):
        (JSC::appropriateGenericGetByIdFunction):
        (JSC::tryCacheGetByID):
        * jit/Repatch.h:
        * jsc.cpp:
        (WTF::CustomGetter::getOwnPropertySlot):
        (WTF::CustomGetter::customGetterAcessor):

2017-03-06  Saam Barati  <sbarati@apple.com>

        WebAssembly: implement init_expr for Element
        https://bugs.webkit.org/show_bug.cgi?id=165888
        <rdar://problem/29760199>

        Reviewed by Keith Miller.

        This patch fixes a few bugs. The main change is allowing init_expr
        for the Element's offset. To do this, I had to fix a couple of
        other bugs:
        
        - I removed our invalid early module-parse-time invalidation
        of out of bound Element sections. This is not in the spec because
        it can't be validated in the general case when the offset is a
        get_global.
        
        - Our get_global validation inside our init_expr parsing code was simply wrong.
        It thought that the index operand to get_global went into the pool of imports,
        but it does not. It indexes into the pool of globals. I changed the code to
        refer to the global pool instead.

        * wasm/WasmFormat.h:
        (JSC::Wasm::Element::Element):
        * wasm/WasmModuleParser.cpp:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2017-03-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Allow indexed module namespace object fields
        https://bugs.webkit.org/show_bug.cgi?id=168870

        Reviewed by Saam Barati.

        While JS modules cannot expose any indexed bindings,
        Wasm modules can expose them. However, module namespace
        object currently does not support indexed properties.
        This patch allows module namespace objects to offer
        indexed binding accesses.

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):
        (JSC::JSModuleNamespaceObject::getOwnPropertySlot):
        (JSC::JSModuleNamespaceObject::getOwnPropertySlotByIndex):
        * runtime/JSModuleNamespaceObject.h:

2017-03-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Null pointer crash when loading module with unresolved import also as a script file
        https://bugs.webkit.org/show_bug.cgi?id=168971

        Reviewed by Saam Barati.

        If linking throws an error, this error should be re-thrown
        when requesting the same module.

        * builtins/ModuleLoaderPrototype.js:
        (globalPrivate.newRegistryEntry):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::link):

2017-03-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][JSCOnly] Enable WebAssembly on Linux environment
        https://bugs.webkit.org/show_bug.cgi?id=164032

        Reviewed by Michael Catanzaro.

        This patch enables WebAssembly on JSCOnly and GTK ports.
        Basically, almost all the WASM code is portable to Linux.
        One platform-dependent part is faster memory load using SIGBUS
        signal handler. This patch ports this part to Linux.

        * CMakeLists.txt:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):
        (JSC::Wasm::enableFastMemory):

2017-03-06  Daniel Ehrenberg  <littledan@igalia.com>

        Currency digits calculation in Intl.NumberFormat should call out to ICU
        https://bugs.webkit.org/show_bug.cgi?id=169182

        Reviewed by Yusuke Suzuki.

        * runtime/IntlNumberFormat.cpp:
        (JSC::computeCurrencyDigits):
        (JSC::computeCurrencySortKey): Deleted.
        (JSC::extractCurrencySortKey): Deleted.

2017-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSCOnly][GTK] Suppress warnings on return type in B3 and WASM
        https://bugs.webkit.org/show_bug.cgi?id=168869

        Reviewed by Keith Miller.

        * b3/B3Width.h:
        * wasm/WasmSections.h:

2017-03-04  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Unreviewed buildfix after r213376.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::isBkpt): Typo fixed.

2017-03-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JSC] build fix after r213399
        https://bugs.webkit.org/show_bug.cgi?id=169154

        Unreviewed.

        * runtime/ConfigFile.cpp: Include unistd.h since its where getcwd() is defined.

2017-03-03  Dean Jackson  <dino@apple.com>

        Add WebGPU compile flag and experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=169161
        <rdar://problem/30846689>

        Reviewed by Tim Horton.

        Add ENABLE_WEBGPU, an experimental feature flag, a RuntimeEnabledFeature,
        and an InternalSetting.

        * Configurations/FeatureDefines.xcconfig:

2017-03-03  Michael Saboff  <msaboff@apple.com>

        Add support for relative pathnames to JSC config files
        https://bugs.webkit.org/show_bug.cgi?id=169154

        Reviewed by Saam Barati.

        If the config file is a relative path, prepend the current working directory.
        After canonicalizing the config file path, we extract its directory path and
        use that for the directory for a relative log pathname.

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

2017-03-03  Michael Saboff  <msaboff@apple.com>

        Add load / store exclusive instruction group to ARM64 disassembler
        https://bugs.webkit.org/show_bug.cgi?id=169152

        Reviewed by Filip Pizlo.

        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::format):
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::opName):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::rs):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::rt2):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::o0):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::o1):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::o2):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::loadBit):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::opNumber):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreExclusive::isPairOp):

2017-03-03  Keith Miller  <keith_miller@apple.com>

        WASM should support faster loads.
        https://bugs.webkit.org/show_bug.cgi?id=162693

        Reviewed by Saam Barati.

        This patch adds support for WebAssembly using a 32-bit address
        space for memory (along with some extra space for offset
        overflow). With a 32-bit address space (we call them
        Signaling/fast memories), we reserve the virtual address space for
        2^32 + offset bytes of memory and only mark the usable section as
        read/write. If wasm code would read/write out of bounds we use a
        custom signal handler to catch the SIGBUS. The signal handler then
        checks if the faulting instruction is wasm code and tells the
        thread to resume executing from the wasm exception
        handler. Otherwise, the signal handler crashes the process, as
        usual.

        All of the allocations of these memories are managed by the
        Wasm::Memory class. In order to avoid TLB churn in the OS we cache
        old Signaling memories that are no longer in use. Since getting
        the wrong memory can cause recompiles, we try to reserve a memory
        for modules that do not import a memory. If a module does import a
        memory, we try to guess the type of memory we are going to get
        based on the last one allocated.

        This patch also changes how the wasm JS-api manages objects. Since
        we can compile different versions of code, this patch adds a new
        JSWebAssemblyCodeBlock class that holds all the information
        specific to running a module in a particular bounds checking
        mode. Additionally, the Wasm::Memory object is now a reference
        counted class that is shared between the JSWebAssemblyMemory
        object and the ArrayBuffer that also views it.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::existingCTIStub):
        * jit/JITThunks.h:
        * jsc.cpp:
        (jscmain):
        * runtime/Options.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/JSWebAssemblyCodeBlock.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h.
        (JSC::JSWebAssemblyCodeBlock::create):
        (JSC::JSWebAssemblyCodeBlock::createStructure):
        (JSC::JSWebAssemblyCodeBlock::functionImportCount):
        (JSC::JSWebAssemblyCodeBlock::mode):
        (JSC::JSWebAssemblyCodeBlock::module):
        (JSC::JSWebAssemblyCodeBlock::jsEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyCodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyCodeBlock::setJSEntrypointCallee):
        (JSC::JSWebAssemblyCodeBlock::setWasmEntrypointCallee):
        (JSC::JSWebAssemblyCodeBlock::callees):
        (JSC::JSWebAssemblyCodeBlock::offsetOfCallees):
        (JSC::JSWebAssemblyCodeBlock::allocationSize):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::getMemoryBaseAndSize):
        (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::B3IRGenerator::emitLoadOp):
        (JSC::Wasm::B3IRGenerator::emitStoreOp):
        * wasm/WasmCallingConvention.h:
        * wasm/WasmFaultSignalHandler.cpp: Added.
        (JSC::Wasm::trapHandler):
        (JSC::Wasm::registerCode):
        (JSC::Wasm::unregisterCode):
        (JSC::Wasm::fastMemoryEnabled):
        (JSC::Wasm::enableFastMemory):
        * wasm/WasmFaultSignalHandler.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyCallee.cpp.
        * wasm/WasmFormat.h:
        (JSC::Wasm::ModuleInformation::importFunctionCount):
        (JSC::Wasm::ModuleInformation::hasMemory): Deleted.
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::mmapBytes):
        (JSC::Wasm::Memory::lastAllocatedMode):
        (JSC::Wasm::availableFastMemories):
        (JSC::Wasm::tryGetFastMemory):
        (JSC::Wasm::releaseFastMemory):
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::createImpl):
        (JSC::Wasm::Memory::create):
        (JSC::Wasm::Memory::~Memory):
        (JSC::Wasm::Memory::grow):
        (JSC::Wasm::Memory::dump):
        (JSC::Wasm::Memory::makeString):
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::operator bool):
        (JSC::Wasm::Memory::size):
        (JSC::Wasm::Memory::check):
        (JSC::Wasm::Memory::Memory): Deleted.
        (JSC::Wasm::Memory::offsetOfMemory): Deleted.
        (JSC::Wasm::Memory::offsetOfSize): Deleted.
        * wasm/WasmMemoryInformation.cpp:
        (JSC::Wasm::MemoryInformation::MemoryInformation):
        * wasm/WasmMemoryInformation.h:
        (JSC::Wasm::MemoryInformation::hasReservedMemory):
        (JSC::Wasm::MemoryInformation::takeReservedMemory):
        (JSC::Wasm::MemoryInformation::mode):
        * wasm/WasmModuleParser.cpp:
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::ModuleParser):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::mode):
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::finishCreation):
        (JSC::JSWebAssemblyCallee::destroy):
        * wasm/js/JSWebAssemblyCodeBlock.cpp: Added.
        (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
        (JSC::JSWebAssemblyCodeBlock::destroy):
        (JSC::JSWebAssemblyCodeBlock::isSafeToRun):
        (JSC::JSWebAssemblyCodeBlock::visitChildren):
        (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::setMemory):
        (JSC::JSWebAssemblyInstance::finishCreation):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::module):
        (JSC::JSWebAssemblyInstance::codeBlock):
        (JSC::JSWebAssemblyInstance::memoryMode):
        (JSC::JSWebAssemblyInstance::setMemory): Deleted.
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::create):
        (JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):
        (JSC::JSWebAssemblyMemory::buffer):
        (JSC::JSWebAssemblyMemory::grow):
        (JSC::JSWebAssemblyMemory::destroy):
        * wasm/js/JSWebAssemblyMemory.h:
        (JSC::JSWebAssemblyMemory::memory):
        (JSC::JSWebAssemblyMemory::offsetOfMemory):
        (JSC::JSWebAssemblyMemory::offsetOfSize):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::buildCodeBlock):
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        (JSC::JSWebAssemblyModule::codeBlock):
        (JSC::JSWebAssemblyModule::finishCreation):
        (JSC::JSWebAssemblyModule::visitChildren):
        (JSC::JSWebAssemblyModule::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::takeReservedMemory):
        (JSC::JSWebAssemblyModule::signatureIndexFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::codeBlock):
        (JSC::JSWebAssemblyModule::functionImportCount): Deleted.
        (JSC::JSWebAssemblyModule::jsEntrypointCalleeFromFunctionIndexSpace): Deleted.
        (JSC::JSWebAssemblyModule::wasmEntrypointCalleeFromFunctionIndexSpace): Deleted.
        (JSC::JSWebAssemblyModule::setJSEntrypointCallee): Deleted.
        (JSC::JSWebAssemblyModule::setWasmEntrypointCallee): Deleted.
        (JSC::JSWebAssemblyModule::callees): Deleted.
        (JSC::JSWebAssemblyModule::offsetOfCallees): Deleted.
        (JSC::JSWebAssemblyModule::allocationSize): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):

2017-03-03  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken ARM64 build.
        https://bugs.webkit.org/show_bug.cgi?id=169139

        Not reviewed.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::excepnGenerationImmMask):

2017-03-03  Mark Lam  <mark.lam@apple.com>

        Add MacroAssembler::isBreakpoint() query function.
        https://bugs.webkit.org/show_bug.cgi?id=169139

        Reviewed by Michael Saboff.

        This will be needed soon when we use breakpoint instructions to implement
        non-polling VM traps, and need to discern between a VM trap signal and a genuine
        assertion breakpoint.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::isBrk):
        (JSC::ARM64Assembler::excepnGenerationImmMask):
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::isBkpt):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::isBkpt):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::isBkpt):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::isBreakpoint):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::isBreakpoint):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::isBreakpoint):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::isBreakpoint):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::isBreakpoint):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::isInt3):

2017-03-03  Mark Lam  <mark.lam@apple.com>

        We should only check for traps that we're able to handle.
        https://bugs.webkit.org/show_bug.cgi?id=169136

        Reviewed by Michael Saboff.

        The execute methods in interpreter were checking for the existence of any traps
        (without masking) and only handling a subset of those via a mask.  This can
        result in a failed assertion on debug builds.

        This patch fixes this by applying the same mask for both the needTrapHandling()
        check and the handleTraps() call.  Also added a few assertions.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2017-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remote Inspector: Move updateTargetListing() methods to RemoteInspector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=169074

        Reviewed by Joseph Pecoraro.

        They are not actually cocoa specific.

        * inspector/remote/RemoteInspector.cpp:
        (Inspector::RemoteInspector::updateTargetListing):
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:

2017-03-02  Mark Lam  <mark.lam@apple.com>

        Add WebKit2 hooks to notify the VM that the user has requested a debugger break.
        https://bugs.webkit.org/show_bug.cgi?id=169089

        Reviewed by Tim Horton and Joseph Pecoraro.

        * runtime/VM.cpp:
        (JSC::VM::handleTraps):
        * runtime/VM.h:
        (JSC::VM::notifyNeedDebuggerBreak):

2017-03-02  Michael Saboff  <msaboff@apple.com>

        Add JSC identity when code signing to allow debugging on iOS
        https://bugs.webkit.org/show_bug.cgi?id=169099

        Reviewed by Filip Pizlo.

        * Configurations/JSC.xcconfig:
        * Configurations/ToolExecutable.xcconfig:

2017-03-02  Keith Miller  <keith_miller@apple.com>

        WebAssemblyFunction should have Function.prototype as its prototype
        https://bugs.webkit.org/show_bug.cgi?id=169101

        Reviewed by Filip Pizlo.

        Per https://github.com/WebAssembly/design/blob/master/JS.md#exported-function-exotic-objects our JSWebAssemblyFunction
        objects should have Function.prototype as their prototype.

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

2017-03-02  Mark Lam  <mark.lam@apple.com>

        Add Options::alwaysCheckTraps() and Options::usePollingTraps() options.
        https://bugs.webkit.org/show_bug.cgi?id=169088

        Reviewed by Keith Miller.

        Options::alwaysCheckTraps() forces the op_check_traps bytecode to always be
        generated.  This is useful for testing purposes until we have signal based
        traps, at which point, we will always emit the op_check_traps bytecode and remove
        this option.

        Options::usePollingTraps() enables the use of polling VM traps all the time.
        This will be useful for benchmark comparisons, (between polling and non-polling
        traps), as well as for forcing polling traps later for ports that don't support
        signal based traps.

        Note: signal based traps are not fully implemented yet.  As a result, if the VM
        watchdog is in use, we will force Options::usePollingTraps() to be true.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCheckTraps):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckTraps):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:

2017-03-02  Keith Miller  <keith_miller@apple.com>

        Fix addressing mode for B3WasmAddress
        https://bugs.webkit.org/show_bug.cgi?id=169092

        Reviewed by Filip Pizlo.

        Fix the potential addressing modes for B3WasmAddress. ARM does not
        support a base + index*1 + offset addressing mode. I think when I
        read it the first time I assumed it would always work on both ARM
        and X86. While true for X86 it's not true for ARM.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::effectiveAddr):

2017-03-02  Mark Lam  <mark.lam@apple.com>

        Add support for selective handling of VM traps.
        https://bugs.webkit.org/show_bug.cgi?id=169087

        Reviewed by Keith Miller.

        This is needed because there are some places in the VM where it's appropriate to
        handle some types of VM traps but not others.

        We implement this selection by using a VMTraps::Mask that allows the user to
        specify which traps should be serviced.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        * runtime/VM.cpp:
        (JSC::VM::handleTraps):
        * runtime/VM.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::takeTrap): Deleted.
        * runtime/VMTraps.h:
        (JSC::VMTraps::Mask::Mask):
        (JSC::VMTraps::Mask::allEventTypes):
        (JSC::VMTraps::Mask::bits):
        (JSC::VMTraps::Mask::init):
        (JSC::VMTraps::needTrapHandling):
        (JSC::VMTraps::hasTrapForEvent):

2017-03-02  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-02  Tomas Popela  <tpopela@redhat.com>

        Incorrect RELEASE_ASSERT in JSGlobalObject::addStaticGlobals()
        https://bugs.webkit.org/show_bug.cgi?id=169034

        Reviewed by Mark Lam.

        It should not assign to offset, but compare to offset.

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

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r213259.

        Broke an internal build

        Reverted changeset:

        "Continue enabling WebRTC"
        https://bugs.webkit.org/show_bug.cgi?id=169056
        http://trac.webkit.org/changeset/213259

2017-03-01  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=169056

        Reviewed by Jon Lee.

        * Configurations/FeatureDefines.xcconfig:

2017-03-01  Michael Saboff  <msaboff@apple.com>

        Source/JavaScriptCore/ChangeLog
        https://bugs.webkit.org/show_bug.cgi?id=169055

        Reviewed by Mark Lam.

        Made local copies of options strings for OptionRange and string typed options.

        * runtime/Options.cpp:
        (JSC::parse):
        (JSC::OptionRange::init):

2017-03-01  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Change JSLock to stash PlatformThread instead of std::thread::id.
        https://bugs.webkit.org/show_bug.cgi?id=168996

        Reviewed by Filip Pizlo and Saam Barati.

        PlatformThread is more useful because it allows us to:
        1. find the MachineThreads::Thread which is associated with it.
        2. suspend / resume threads.
        3. send a signal to a thread.

        We can't do those with std::thread::id.  We will need one or more of these
        capabilities to implement non-polling VM traps later.

        Update: Since we don't have a canonical "uninitialized" value for PlatformThread,
        we now have a JSLock::m_hasOwnerThread flag that is set to true if and only the
        m_ownerThread value is valid.  JSLock::currentThreadIsHoldingLock() now checks
        JSLock::m_hasOwnerThread before doing the thread identity comparison.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::createForCurrentThread):
        (JSC::MachineThreads::machineThreadForCurrentThread):
        (JSC::MachineThreads::removeThread):
        (JSC::MachineThreads::Thread::suspend):
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        (JSC::getCurrentPlatformThread): Deleted.
        * heap/MachineStackMarker.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        * runtime/JSLock.cpp:
        (JSC::JSLock::JSLock):
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::currentThreadIsHoldingLock): Deleted.
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        (JSC::JSLock::currentThreadIsHoldingLock):
        * runtime/PlatformThread.h: Added.
        (JSC::currentPlatformThread):
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        * runtime/VM.h:
        (JSC::VM::ownerThread):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::setTimeLimit):
        (JSC::Watchdog::shouldTerminate):
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::stopTimer):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::JSDollarVMPrototype::currentThreadOwnsJSLock):
        * tools/VMInspector.cpp:

2017-03-01  Saam Barati  <sbarati@apple.com>

        Implement a mega-disassembler that'll be used in the FTL
        https://bugs.webkit.org/show_bug.cgi?id=168685

        Reviewed by Mark Lam.

        This patch extends the previous Air disassembler to print the
        DFG and B3 nodes belonging to particular Air instructions.
        The algorithm I'm using to do this is not perfect. For example,
        it won't try to print the entire DFG/B3 graph. It'll just print
        the related nodes for particular Air instructions. We can make the
        algorithm more sophisticated as we get more experience looking at
        these IR dumps and get a better feel for what we want out of them.

        This is an example of the output:

        ...
        ...
        200:<!0:->  InvalidationPoint(MustGen, W:SideState, Exits, bc#28, exit: bc#25 --> _getEntry#DlGw2r:<0x10276f980> bc#37)
           Void @54 = Patchpoint(@29:ColdAny, @29:ColdAny, @53:ColdAny, DFG:@200, generator = 0x1015d6c18, earlyClobbered = [], lateClobbered = [], usedRegisters = [%r0, %r19, %r20, %r21, %r22, %fp], resultConstraint = WarmAny, ExitsSideways|WritesPinned|ReadsPinned|Reads:Top)
               Patch &Patchpoint2, %r20, %r20, %r0, @54
         76:< 6:->  GetByOffset(KnownCell:@44, KnownCell:@44, JS|UseAsOther, Array, id3{_elementData}, 2, inferredType = Object, R:NamedProperties(3), Exits, bc#37)  predicting Array
           Int64 @57 = Load(@29, DFG:@76, offset = 32, ControlDependent|Reads:100...101)
               Move 32(%r20), %r5, @57
                      0x389cc9ac0:    ldur   x5, [x20, #32]
        115:<!0:->  CheckStructure(Cell:@76, MustGen, [0x1027eae20:[Array, {}, ArrayWithContiguous, Proto:0x1027e0140]], R:JSCell_structureID, Exits, bc#46)
           Int32 @58 = Load(@57, DFG:@115, ControlDependent|Reads:16...17)
               Move32 (%r5), %r1, @58
                      0x389cc9ac4:    ldur   w1, [x5]
           Int32 @59 = Const32(DFG:@115, 92)
           Int32 @60 = NotEqual(@58, $92(@59), DFG:@115)
           Void @61 = Check(@60:WarmAny, @57:ColdAny, @29:ColdAny, @29:ColdAny, @53:ColdAny, @57:ColdAny, DFG:@115, generator = 0x1057991e0, earlyClobbered = [], lateClobbered = [], usedRegisters = [%r0, %r5, %r19, %r20, %r21, %r22, %fp], ExitsSideways|Reads:Top)
               Patch &Branch32(3,SameAsRep)1, NotEqual, %r1, $92, %r5, %r20, %r20, %r0, %r5, @61
                      0x389cc9ac8:    cmp    w1, #92
                      0x389cc9acc:    b.ne   0x389cc9dac
        117:< 2:->  GetButterfly(Cell:@76, Storage|PureInt, R:JSObject_butterfly, Exits, bc#46)
           Int64 @64 = Load(@57, DFG:@117, offset = 8, ControlDependent|Reads:24...25)
               Move 8(%r5), %r4, @64
                      0x389cc9ad0:    ldur   x4, [x5, #8]
         79:< 2:->  GetArrayLength(KnownCell:@76, Untyped:@117, JS|PureInt|UseAsInt, Nonboolint32, Contiguous+OriginalArray+InBounds+AsIs, R:Butterfly_publicLength, Exits, bc#46)
           Int32 @67 = Load(@64, DFG:@79, offset = -8, ControlDependent|Reads:3...4)
               Move32 -8(%r4), %r2, @67
                      0x389cc9ad4:    ldur   w2, [x4, #-8]
      192:< 1:->  JSConstant(JS|PureInt, Nonboolint32, Int32: -1, bc#0)
           Int32 @68 = Const32(DFG:@192, -1)
               Move $0xffffffffffffffff, %r1, $-1(@68)
                      0x389cc9ad8:    mov    x1, #-1
         83:<!2:->  ArithAdd(Int32:Kill:@79, Int32:Kill:@192, Number|MustGen|PureInt|UseAsInt, Int32, Unchecked, Exits, bc#55)
           Int32 @69 = Add(@67, $-1(@68), DFG:@83)
               Add32 %r2, %r1, %r1, @69
                      0x389cc9adc:    add    w1, w2, w1
         86:< 3:->  BitAnd(Check:Int32:@71, Int32:Kill:@83, Int32|UseAsOther|UseAsInt|ReallyWantsInt, Int32, Exits, bc#60)
           Int32 @70 = Below(@53, $-281474976710656(@15), DFG:@86)
           Void @71 = Check(@70:WarmAny, @53:ColdAny, @29:ColdAny, @29:ColdAny, @53:ColdAny, @69:ColdAny, DFG:@86, generator = 0x105799370, earlyClobbered = [], lateClobbered = [], usedRegisters = [%r0, %r1, %r2, %r4, %r5, %r19, %r20, %r21, %r22, %fp], ExitsSideways|Reads:Top)
               Patch &Branch64(3,SameAsRep)0, Below, %r0, %r22, %r0, %r20, %r20, %r0, %r1, @71
                      0x389cc9ae0:    cmp    x0, x22
                      0x389cc9ae4:    b.lo   0x389cc9dc0
           Int32 @72 = Trunc(@53, DFG:@86)
           Int32 @73 = BitAnd(@69, @72, DFG:@86)
               And32 %r1, %r0, %r1, @73
                      0x389cc9ae8:    and    w1, w1, w0
           16:<!0:->  PutStack(KnownInt32:@71, MustGen, loc27, machine:loc3, FlushedInt32, W:Stack(-28), bc#19)
           Int32 @72 = Trunc(@53, DFG:@86)
           Int64 @11 = SlotBase(stack0)
           Void @76 = Store(@72, @11, DFG:@16, offset = 32, ControlDependent|Writes:94...95)
               Move32 %r0, -64(%fp), @76
                      0x389cc9aec:    stur   w0, [fp, #-64]
           12:<!0:->  PutStack(Untyped:@86, MustGen, loc28, machine:loc4, FlushedJSValue, W:Stack(-29), bc#19)
           Int64 @77 = ZExt32(@73, DFG:@12)
           Int64 @78 = Add(@77, $-281474976710656(@15), DFG:@12)
               Add64 %r1, %r22, %r3, @78
                      0x389cc9af0:    add    x3, x1, x22
           Int64 @11 = SlotBase(stack0)
           Void @81 = Store(@78, @11, DFG:@12, offset = 24, ControlDependent|Writes:95...96)
               Move %r3, -72(%fp), @81
                      0x389cc9af4:    stur   x3, [fp, #-72]
           10:<!0:->  PutStack(KnownInt32:@46, MustGen, loc29, machine:loc5, FlushedInt32, W:Stack(-30), bc#19)
           Int32 @82 = Trunc(@24, DFG:@10)
           Int64 @11 = SlotBase(stack0)
           Void @85 = Store(@82, @11, DFG:@10, offset = 16, ControlDependent|Writes:96...97)
               Move32 %r21, -80(%fp), @85
                      0x389cc9af8:    stur   w21, [fp, #-80]
          129:<!10:->  GetByVal(KnownCell:Kill:@76, Int32:Kill:@86, Untyped:Kill:@117, JS|MustGen|UseAsOther, FinalOther, Contiguous+OriginalArray+OutOfBounds+AsIs, R:World, W:Heap, Exits, ClobbersExit, bc#19)  predicting FinalOther
           Int32 @89 = AboveEqual(@73, @67, DFG:@129)
           Void @90 = Branch(@89, DFG:@129, Terminal)
               Branch32 AboveOrEqual, %r1, %r2, @90
                      0x389cc9afc:    cmp    w1, w2
                      0x389cc9b00:    b.hs   0x389cc9bec
        ...
        ...

        * b3/air/AirDisassembler.cpp:
        (JSC::B3::Air::Disassembler::dump):
        * b3/air/AirDisassembler.h:
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        (JSC::FTL::DFG::LowerDFGToB3::lowInt32):
        (JSC::FTL::DFG::LowerDFGToB3::lowCell):
        (JSC::FTL::DFG::LowerDFGToB3::lowBoolean):
        (JSC::FTL::DFG::LowerDFGToB3::lowJSValue):

2017-03-01  Mark Lam  <mark.lam@apple.com>

        REGRESSION (r213202?): Assertion failed: (!"initialized()"), function operator().
        https://bugs.webkit.org/show_bug.cgi?id=169042

        Not reviewed.

        Rolling out r213229 and r213202.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/MachineStackMarker.cpp:
        (JSC::getCurrentPlatformThread):
        (JSC::MachineThreads::Thread::createForCurrentThread):
        (JSC::MachineThreads::machineThreadForCurrentThread):
        (JSC::MachineThreads::removeThread):
        (JSC::MachineThreads::Thread::suspend):
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        * heap/MachineStackMarker.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        * runtime/JSLock.cpp:
        (JSC::JSLock::JSLock):
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::currentThreadIsHoldingLock):
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        (JSC::JSLock::currentThreadIsHoldingLock): Deleted.
        * runtime/PlatformThread.h: Removed.
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        * runtime/VM.h:
        (JSC::VM::ownerThread):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::setTimeLimit):
        (JSC::Watchdog::shouldTerminate):
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::stopTimer):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::JSDollarVMPrototype::currentThreadOwnsJSLock):
        * tools/VMInspector.cpp:

2017-03-01  Mark Lam  <mark.lam@apple.com>

        REGRESSION (r213202?): Assertion failed: (!"initialized()"), function operator()
        https://bugs.webkit.org/show_bug.cgi?id=169042

        Reviewed by Filip Pizlo.

        * runtime/JSLock.h:
        (JSC::JSLock::currentThreadIsHoldingLock):

2017-02-28  Brian Burg  <bburg@apple.com>

        REGRESSION(r211344): Remote Inspector: listingForAutomationTarget() is called off-main-thread, causing assertions
        https://bugs.webkit.org/show_bug.cgi?id=168695
        <rdar://problem/30643899>

        Reviewed by Joseph Pecoraro.

        The aforementioned commit added some new calls to update target listings. This causes RemoteInspector
        to update some listings underneath an incoming setup message on the XPC queue, which is not a safe place
        to gather listing information for RemoteAutomationTargets.

        Update the listing asynchronously since we don't need it immediately. Since this really only happens when
        the connection to the target is set up and shut down, we can trigger listings to be refreshed from
        the async block that's called on the target's queue inside RemoteConnectionToTarget::{setup,close}.

        * inspector/remote/RemoteInspector.h:
        Make updateListingForTarget(unsigned) usable from RemoteConnectionToTarget.

        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        Grab the target identifier while the RemoteControllableTarget pointer is still valid,
        and use it inside the block later after it may have been destructed already. If that happens,
        then updateTargetListing will bail out because the targetIdentifier cannot be found in the mapping.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::updateTargetListing):
        We need to make sure to request a listing push after the target is updated, so implicitly call
        pushListingsSoon() from here. That method doesn't require any particular queue or holding a lock.

        (Inspector::RemoteInspector::receivedSetupMessage):
        (Inspector::RemoteInspector::receivedDidCloseMessage):
        (Inspector::RemoteInspector::receivedConnectionDiedMessage):
        Remove calls to updateTargetListing() and pushListingsSoon(), as these happen implicitly
        and asynchronously on the target's queue when the connection to target is opened or closed.

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        Leak under Options::setOptions
        https://bugs.webkit.org/show_bug.cgi?id=169029

        Reviewed by Michael Saboff.

        Don't leak the optionsStrCopy variable.

        * runtime/Options.cpp:
        (JSC::Options::setOptions):

2017-03-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Allow UnlinkedCodeBlock to dump its bytecode sequence
        https://bugs.webkit.org/show_bug.cgi?id=168968

        Reviewed by Saam Barati.

        This patch decouples dumping bytecode sequence from CodeBlock.
        This change allows UnlinkedCodeBlock to dump its bytecode sequence.
        It is useful because we now have complex phase between UnlinkedCodeBlock and CodeBlock,
        called Generatorification.

        We introduce BytecodeDumper<Block>. Both CodeBlock and UnlinkedCodeBlock can use
        this class to dump bytecode sequence.

        And this patch also adds Option::dumpBytecodesBeforeGeneratorification,
        which dumps unlinked bytecode sequence before generatorification if it is enabled.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/BytecodeDumper.cpp: Added.
        (JSC::getStructureID):
        (JSC::getSpecialPointer):
        (JSC::getPutByIdFlags):
        (JSC::getToThisStatus):
        (JSC::getPointer):
        (JSC::getStructureChain):
        (JSC::getStructure):
        (JSC::getCallLinkInfo):
        (JSC::getBasicBlockLocation):
        (JSC::BytecodeDumper<Block>::actualPointerFor):
        (JSC::BytecodeDumper<CodeBlock>::actualPointerFor):
        (JSC::beginDumpProfiling):
        (JSC::BytecodeDumper<Block>::dumpValueProfiling):
        (JSC::BytecodeDumper<CodeBlock>::dumpValueProfiling):
        (JSC::BytecodeDumper<Block>::dumpArrayProfiling):
        (JSC::BytecodeDumper<CodeBlock>::dumpArrayProfiling):
        (JSC::BytecodeDumper<Block>::dumpProfilesForBytecodeOffset):
        (JSC::dumpRareCaseProfile):
        (JSC::dumpArithProfile):
        (JSC::BytecodeDumper<CodeBlock>::dumpProfilesForBytecodeOffset):
        (JSC::BytecodeDumper<Block>::vm):
        (JSC::BytecodeDumper<Block>::identifier):
        (JSC::regexpToSourceString):
        (JSC::regexpName):
        (JSC::printLocationAndOp):
        (JSC::isConstantRegisterIndex):
        (JSC::debugHookName):
        (JSC::BytecodeDumper<Block>::registerName):
        (JSC::idName):
        (JSC::BytecodeDumper<Block>::constantName):
        (JSC::BytecodeDumper<Block>::printUnaryOp):
        (JSC::BytecodeDumper<Block>::printBinaryOp):
        (JSC::BytecodeDumper<Block>::printConditionalJump):
        (JSC::BytecodeDumper<Block>::printGetByIdOp):
        (JSC::dumpStructure):
        (JSC::dumpChain):
        (JSC::BytecodeDumper<Block>::printGetByIdCacheStatus):
        (JSC::BytecodeDumper<Block>::printPutByIdCacheStatus):
        (JSC::BytecodeDumper<Block>::dumpCallLinkStatus):
        (JSC::BytecodeDumper<CodeBlock>::dumpCallLinkStatus):
        (JSC::BytecodeDumper<Block>::printCallOp):
        (JSC::BytecodeDumper<Block>::printPutByIdOp):
        (JSC::BytecodeDumper<Block>::printLocationOpAndRegisterOperand):
        (JSC::BytecodeDumper<Block>::dumpBytecode):
        (JSC::BytecodeDumper<Block>::dumpIdentifiers):
        (JSC::BytecodeDumper<Block>::dumpConstants):
        (JSC::BytecodeDumper<Block>::dumpRegExps):
        (JSC::BytecodeDumper<Block>::dumpExceptionHandlers):
        (JSC::BytecodeDumper<Block>::dumpSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpStringSwitchJumpTables):
        (JSC::BytecodeDumper<Block>::dumpBlock):
        * bytecode/BytecodeDumper.h: Added.
        (JSC::BytecodeDumper::BytecodeDumper):
        (JSC::BytecodeDumper::block):
        (JSC::BytecodeDumper::instructionsBegin):
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
        (JSC::performGeneratorification):
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::dumpResults):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::hasOpDebugForLineAndColumn):
        (JSC::CodeBlock::usesOpcode):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        (JSC::CodeBlock::arithProfileForPC):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::constantRegisters):
        (JSC::CodeBlock::numberOfRegExps):
        (JSC::CodeBlock::bitVectors):
        (JSC::CodeBlock::bitVector):
        * bytecode/HandlerInfo.h:
        (JSC::HandlerInfoBase::typeName):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::dump):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::getConstant):
        * bytecode/UnlinkedInstructionStream.cpp:
        (JSC::UnlinkedInstructionStream::UnlinkedInstructionStream):
        * bytecode/UnlinkedInstructionStream.h:
        (JSC::UnlinkedInstructionStream::Reader::next):
        * runtime/Options.h:

2017-02-28  Mark Lam  <mark.lam@apple.com>

        Change JSLock to stash PlatformThread instead of std::thread::id.
        https://bugs.webkit.org/show_bug.cgi?id=168996

        Reviewed by Filip Pizlo.

        PlatformThread is more useful because it allows us to:
        1. find the MachineThreads::Thread which is associated with it.
        2. suspend / resume threads.
        3. send a signal to a thread.

        We can't do those with std::thread::id.  We will need one or more of these
        capabilities to implement non-polling VM traps later.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::createForCurrentThread):
        (JSC::MachineThreads::machineThreadForCurrentThread):
        (JSC::MachineThreads::removeThread):
        (JSC::MachineThreads::Thread::suspend):
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        (JSC::getCurrentPlatformThread): Deleted.
        * heap/MachineStackMarker.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        * runtime/JSLock.cpp:
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::currentThreadIsHoldingLock): Deleted.
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        (JSC::JSLock::currentThreadIsHoldingLock):
        * runtime/PlatformThread.h: Added.
        (JSC::currentPlatformThread):
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        * runtime/VM.h:
        (JSC::VM::ownerThread):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::setTimeLimit):
        (JSC::Watchdog::shouldTerminate):
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::stopTimer):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::JSDollarVMPrototype::currentThreadOwnsJSLock):
        * tools/VMInspector.cpp:

2017-02-28  Mark Lam  <mark.lam@apple.com>

        Enable the SigillCrashAnalyzer by default for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=168989

        Reviewed by Keith Miller.

        * runtime/Options.cpp:
        (JSC::overrideDefaults):

2017-02-28  Mark Lam  <mark.lam@apple.com>

        Remove setExclusiveThread() and peers from the JSLock.
        https://bugs.webkit.org/show_bug.cgi?id=168977

        Reviewed by Filip Pizlo.

        JSLock::setExclusiveThread() was only used by WebCore.  Benchmarking with
        Speedometer, we see that removal of exclusive thread status has no measurable
        impact on performance.  So, let's remove the code for handling exclusive thread
        status, and simplify the JSLock code.

        For the records, exclusive thread status does improve JSLock locking/unlocking
        time by up to 20%.  However, this difference is not measurable in the way WebCore
        uses the JSLock as confirmed by Speedometer.

        Also applied a minor optimization in JSLock::lock() to assume the initial lock
        entry case (as opposed to the re-entry case).  This appears to shows a small
        fractional improvement (about 5%) in JSLock cumulative locking and unlocking
        time in a micro-benchmark.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::MachineThreads):
        (JSC::MachineThreads::addCurrentThread):
        * heap/MachineStackMarker.h:
        * runtime/JSLock.cpp:
        (JSC::JSLock::JSLock):
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::currentThreadIsHoldingLock):
        (JSC::JSLock::dropAllLocks):
        (JSC::JSLock::grabAllLocks):
        (JSC::JSLock::setExclusiveThread): Deleted.
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        (JSC::JSLock::hasExclusiveThread): Deleted.
        (JSC::JSLock::exclusiveThread): Deleted.
        * runtime/VM.h:
        (JSC::VM::hasExclusiveThread): Deleted.
        (JSC::VM::exclusiveThread): Deleted.
        (JSC::VM::setExclusiveThread): Deleted.

2017-02-28  Saam Barati  <sbarati@apple.com>

        Arm64 disassembler prints "ars" instead of "asr"
        https://bugs.webkit.org/show_bug.cgi?id=168923

        Rubber stamped by Michael Saboff.

        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeBitfield::format):

2017-02-28  Oleksandr Skachkov  <gskachkov@gmail.com>

        Use of arguments in arrow function is slow
        https://bugs.webkit.org/show_bug.cgi?id=168829

        Reviewed by Saam Barati.

        Current patch improves performance access to arguments within arrow functuion
        by preventing create arguments variable within arrow function, also allow to cache 
        arguments variable. Before arguments variable always have Dynamic resolve type, after 
        patch it can be ClosureVar, that increase performance of access to arguments variable
        in 9 times inside of the arrow function. 

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):

2017-02-28  Michael Saboff  <msaboff@apple.com>

        Add ability to configure JSC options from a file
        https://bugs.webkit.org/show_bug.cgi?id=168914

        Reviewed by Filip Pizlo.

        Added the ability to set options and DataLog file location via a configuration file.
        The configuration file is specified with the --configFile option to JSC or the
        JSC_configFile environment variable.

        The file format allows for options conditionally dependent on various attributes.
        Currently those attributes are the process name, parent process name and build
        type (Release or Debug).  In this patch, the parent process type is not set.
        That will be set up in WebKit code with a follow up patch.

        Here is an example config file:

            logFile = "/tmp/jscLog.%pid.txt"

            jscOptions {
                dumpOptions = 2
            }

            build == "Debug" {
                jscOptions {
                    useConcurrentJIT = false
                    dumpDisassembly = true
                }
            }

            build == "Release" && processName == "jsc" {
                jscOptions {
                    asyncDisassembly = true
                }
            }

        Eliminated the prior options file code.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:
        (jscmain):
        * runtime/ConfigFile.cpp: Added.
        (JSC::ConfigFileScanner::ConfigFileScanner):
        (JSC::ConfigFileScanner::start):
        (JSC::ConfigFileScanner::lineNumber):
        (JSC::ConfigFileScanner::currentBuffer):
        (JSC::ConfigFileScanner::atFileEnd):
        (JSC::ConfigFileScanner::tryConsume):
        (JSC::ConfigFileScanner::tryConsumeString):
        (JSC::ConfigFileScanner::tryConsumeUpto):
        (JSC::ConfigFileScanner::fillBufferIfNeeded):
        (JSC::ConfigFileScanner::fillBuffer):
        (JSC::ConfigFile::ConfigFile):
        (JSC::ConfigFile::setProcessName):
        (JSC::ConfigFile::setParentProcessName):
        (JSC::ConfigFile::parse):
        * runtime/ConfigFile.h: Added.
        * runtime/Options.cpp:
        (JSC::Options::initialize):
        (JSC::Options::setOptions):
        * runtime/Options.h:

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        Begin enabling WebRTC on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=168915

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2017-02-27  Mark Lam  <mark.lam@apple.com>

        Introduce a VM Traps mechanism and refactor Watchdog to use it.
        https://bugs.webkit.org/show_bug.cgi?id=168842

        Reviewed by Filip Pizlo.

        Currently, the traps mechanism is only used for the JSC watchdog, and for
        asynchronous termination requests (which is currently only used for worker
        threads termination).

        This first cut of the traps mechanism still relies on polling from DFG and FTL
        code.  This is done to keep the patch as small as possible.  The work to do
        a non-polling version of the traps mechanism for DFG and FTL code is deferred to
        another patch.

        In this patch, worker threads still need to set the VM::m_needAsynchronousTerminationSupport
        flag to enable the traps polling in the DFG and FTL code.  When we have the
        non-polling version of the DFG and FTL traps mechanism, we can remove the use of
        the VM::m_needAsynchronousTerminationSupport flag.

        Note: this patch also separates asynchronous termination support from the JSC
        watchdog.  This separation allows us to significantly simplify the locking
        requirements in the watchdog code, and make it easier to reason about its
        correctness.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitLoopHint):
        (JSC::BytecodeGenerator::emitCheckTraps):
        (JSC::BytecodeGenerator::emitWatchdog): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckTraps):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckWatchdogTimer): Deleted.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_check_traps):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::emit_op_watchdog): Deleted.
        (JSC::JIT::emitSlow_op_watchdog): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/VM.cpp:
        (JSC::VM::~VM):
        (JSC::VM::ensureWatchdog):
        (JSC::VM::handleTraps):
        * runtime/VM.h:
        (JSC::VM::ownerThread):
        (JSC::VM::needTrapHandling):
        (JSC::VM::needTrapHandlingAddress):
        (JSC::VM::notifyNeedTermination):
        (JSC::VM::notifyNeedWatchdogCheck):
        (JSC::VM::needAsynchronousTerminationSupport):
        (JSC::VM::setNeedAsynchronousTerminationSupport):
        * runtime/VMInlines.h:
        (JSC::VM::shouldTriggerTermination): Deleted.
        * runtime/VMTraps.cpp: Added.
        (JSC::VMTraps::fireTrap):
        (JSC::VMTraps::takeTrap):
        * runtime/VMTraps.h: Added.
        (JSC::VMTraps::needTrapHandling):
        (JSC::VMTraps::needTrapHandlingAddress):
        (JSC::VMTraps::hasTrapForEvent):
        (JSC::VMTraps::setTrapForEvent):
        (JSC::VMTraps::clearTrapForEvent):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::Watchdog):
        (JSC::Watchdog::setTimeLimit):
        (JSC::Watchdog::shouldTerminate):
        (JSC::Watchdog::enteredVM):
        (JSC::Watchdog::exitedVM):
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::stopTimer):
        (JSC::Watchdog::willDestroyVM):
        (JSC::Watchdog::terminateSoon): Deleted.
        (JSC::Watchdog::shouldTerminateSlow): Deleted.
        * runtime/Watchdog.h:
        (JSC::Watchdog::shouldTerminate): Deleted.
        (JSC::Watchdog::timerDidFireAddress): Deleted.

2017-02-27  Commit Queue  <commit-queue@webkit.org>

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

        "It broke 32-bit jsc tests in debug builds" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "op_get_by_id_with_this should use inline caching"
        https://bugs.webkit.org/show_bug.cgi?id=162124
        http://trac.webkit.org/changeset/213019

2017-02-27  JF Bastien  <jfbastien@apple.com>

        WebAssembly: miscellaneous spec fixes part deux
        https://bugs.webkit.org/show_bug.cgi?id=168861

        Reviewed by Keith Miller.

        * wasm/WasmFunctionParser.h: add some FIXME

2017-02-27  Alex Christensen  <achristensen@webkit.org>

        [libwebrtc] Enable WebRTC in some Production Builds
        https://bugs.webkit.org/show_bug.cgi?id=168858

        * Configurations/FeatureDefines.xcconfig:

2017-02-26  Caio Lima  <ticaiolima@gmail.com>

        op_get_by_id_with_this should use inline caching
        https://bugs.webkit.org/show_bug.cgi?id=162124

        Reviewed by Saam Barati.

        This patch is enabling inline cache for op_get_by_id_with_this in all
        tiers. It means that operations using ```super.member``` are going to
        be able to be optimized by PIC. To enable it, we introduced a new
        member of StructureStubInfo.patch named thisGPR, created a new class
        to manage the IC named JITGetByIdWithThisGenerator and changed
        PolymorphicAccess.regenerate that uses StructureStubInfo.patch.thisGPR
        to decide the correct this value on inline caches.
        With inline cached enabled, ```super.member``` are ~4.5x faster,
        according microbenchmarks.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addGetByIdWithThis):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIn):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileIn):
        (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsWithExecState):
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITByIdGenerator::JITByIdGenerator):
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
        (JSC::JITGetByIdWithThisGenerator::generateFastPath):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
        * jit/JITInlines.h:
        (JSC::JIT::callOperation):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByIdFunction):
        (JSC::appropriateGenericGetByIdFunction):
        (JSC::tryCacheGetByID):
        * jit/Repatch.h:
        * jsc.cpp:
        (WTF::CustomGetter::getOwnPropertySlot):
        (WTF::CustomGetter::customGetterAcessor):

2017-02-24  JF Bastien  <jfbastien@apple.com>

        WebAssembly: miscellaneous spec fixes
        https://bugs.webkit.org/show_bug.cgi?id=168822

        Reviewed by Saam Barati.

        * wasm/WasmModuleParser.cpp: "unknown" sections are now called "custom" sections
        * wasm/WasmSections.h:
        (JSC::Wasm::validateOrder):
        (JSC::Wasm::makeString): fix ASSERT_UNREACHABLE bug in printing
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance): disallow i64 import
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link): disallow i64 export
        (JSC::WebAssemblyModuleRecord::evaluate):

2017-02-24  Filip Pizlo  <fpizlo@apple.com>

        Move Arg::Type and Arg::Width out into the B3 namespace, since they are general concepts
        https://bugs.webkit.org/show_bug.cgi?id=168833

        Reviewed by Saam Barati.
        
        I want to use the Air::Arg::Type and Air::Arg::Width concepts in B3. We are already
        doing this a bit, and it's akward because of the namespacing. Throughout B3 we take the
        approach that if something is not specific to Air, then it should be in the B3
        namespace.
        
        This moves Air::Arg::Type to B3::Bank. This moves Air::Arg::Width to B3::Width.
        
        I renamed Arg::Type to Bank because there is already a B3::Type and because Arg::Type
        was never really a type. Its purpose was always to identify register banks, and we use
        this enum when the thing we care about is whether the value is most appropriate for
        GPRs or FPRs.
        
        I kept both as non-enum classes because I think that we've learned that terse compiler
        code is a good thing. I don't want to say Bank::GP when I can say GP. With Width, the
        argument is even stronger, since you cannot say Width::8 but you can say Width8.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3Bank.cpp: Added.
        (WTF::printInternal):
        * b3/B3Bank.h: Added.
        (JSC::B3::forEachBank):
        (JSC::B3::bankForType):
        * b3/B3CheckSpecial.cpp:
        (JSC::B3::CheckSpecial::forEachArg):
        * b3/B3LegalizeMemoryOffsets.cpp:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::run):
        (JSC::B3::Air::LowerToAir::tmp):
        (JSC::B3::Air::LowerToAir::scaleForShl):
        (JSC::B3::Air::LowerToAir::effectiveAddr):
        (JSC::B3::Air::LowerToAir::addr):
        (JSC::B3::Air::LowerToAir::createGenericCompare):
        (JSC::B3::Air::LowerToAir::createBranch):
        (JSC::B3::Air::LowerToAir::createCompare):
        (JSC::B3::Air::LowerToAir::createSelect):
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3MemoryValue.cpp:
        (JSC::B3::MemoryValue::accessWidth):
        * b3/B3MemoryValue.h:
        * b3/B3MoveConstants.cpp:
        * b3/B3PatchpointSpecial.cpp:
        (JSC::B3::PatchpointSpecial::forEachArg):
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::forEachArgImpl):
        * b3/B3Value.h:
        * b3/B3Variable.h:
        (JSC::B3::Variable::width):
        (JSC::B3::Variable::bank):
        * b3/B3WasmAddressValue.h:
        * b3/B3Width.cpp: Added.
        (WTF::printInternal):
        * b3/B3Width.h: Added.
        (JSC::B3::pointerWidth):
        (JSC::B3::widthForType):
        (JSC::B3::conservativeWidth):
        (JSC::B3::minimumWidth):
        (JSC::B3::bytes):
        (JSC::B3::widthForBytes):
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * b3/air/AirAllocateStack.cpp:
        (JSC::B3::Air::allocateStack):
        * b3/air/AirArg.cpp:
        (JSC::B3::Air::Arg::canRepresent):
        (JSC::B3::Air::Arg::isCompatibleBank):
        (JSC::B3::Air::Arg::isCompatibleType): Deleted.
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::hasBank):
        (JSC::B3::Air::Arg::bank):
        (JSC::B3::Air::Arg::isBank):
        (JSC::B3::Air::Arg::forEachTmp):
        (JSC::B3::Air::Arg::forEachType): Deleted.
        (JSC::B3::Air::Arg::pointerWidth): Deleted.
        (JSC::B3::Air::Arg::typeForB3Type): Deleted.
        (JSC::B3::Air::Arg::widthForB3Type): Deleted.
        (JSC::B3::Air::Arg::conservativeWidth): Deleted.
        (JSC::B3::Air::Arg::minimumWidth): Deleted.
        (JSC::B3::Air::Arg::bytes): Deleted.
        (JSC::B3::Air::Arg::widthForBytes): Deleted.
        (JSC::B3::Air::Arg::hasType): Deleted.
        (JSC::B3::Air::Arg::type): Deleted.
        (JSC::B3::Air::Arg::isType): Deleted.
        * b3/air/AirArgInlines.h:
        (JSC::B3::Air::ArgThingHelper<Tmp>::forEach):
        (JSC::B3::Air::ArgThingHelper<Arg>::forEach):
        (JSC::B3::Air::ArgThingHelper<Reg>::forEach):
        (JSC::B3::Air::Arg::forEach):
        * b3/air/AirCCallSpecial.cpp:
        (JSC::B3::Air::CCallSpecial::forEachArg):
        * b3/air/AirCCallingConvention.cpp:
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        (JSC::B3::Air::Code::setRegsInPriorityOrder):
        (JSC::B3::Air::Code::pinRegister):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::regsInPriorityOrder):
        (JSC::B3::Air::Code::newTmp):
        (JSC::B3::Air::Code::numTmps):
        (JSC::B3::Air::Code::regsInPriorityOrderImpl):
        * b3/air/AirCustom.cpp:
        (JSC::B3::Air::PatchCustom::isValidForm):
        (JSC::B3::Air::ShuffleCustom::isValidForm):
        * b3/air/AirCustom.h:
        (JSC::B3::Air::PatchCustom::forEachArg):
        (JSC::B3::Air::CCallCustom::forEachArg):
        (JSC::B3::Air::ColdCCallCustom::forEachArg):
        (JSC::B3::Air::ShuffleCustom::forEachArg):
        (JSC::B3::Air::WasmBoundsCheckCustom::forEachArg):
        * b3/air/AirDumpAsJS.cpp:
        (JSC::B3::Air::dumpAsJS):
        * b3/air/AirEliminateDeadCode.cpp:
        (JSC::B3::Air::eliminateDeadCode):
        * b3/air/AirEmitShuffle.cpp:
        (JSC::B3::Air::emitShuffle):
        * b3/air/AirEmitShuffle.h:
        (JSC::B3::Air::ShufflePair::ShufflePair):
        (JSC::B3::Air::ShufflePair::width):
        * b3/air/AirFixObviousSpills.cpp:
        * b3/air/AirFixPartialRegisterStalls.cpp:
        (JSC::B3::Air::fixPartialRegisterStalls):
        * b3/air/AirInst.cpp:
        (JSC::B3::Air::Inst::hasArgEffects):
        * b3/air/AirInst.h:
        (JSC::B3::Air::Inst::forEachTmp):
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::Inst::forEach):
        (JSC::B3::Air::Inst::forEachDef):
        (JSC::B3::Air::Inst::forEachDefWithExtraClobberedRegs):
        * b3/air/AirLiveness.h:
        (JSC::B3::Air::TmpLivenessAdapter::numIndices):
        (JSC::B3::Air::TmpLivenessAdapter::acceptsBank):
        (JSC::B3::Air::TmpLivenessAdapter::valueToIndex):
        (JSC::B3::Air::TmpLivenessAdapter::indexToValue):
        (JSC::B3::Air::StackSlotLivenessAdapter::acceptsBank):
        (JSC::B3::Air::RegLivenessAdapter::acceptsBank):
        (JSC::B3::Air::AbstractLiveness::AbstractLiveness):
        (JSC::B3::Air::AbstractLiveness::LocalCalc::execute):
        (JSC::B3::Air::TmpLivenessAdapter::acceptsType): Deleted.
        (JSC::B3::Air::StackSlotLivenessAdapter::acceptsType): Deleted.
        (JSC::B3::Air::RegLivenessAdapter::acceptsType): Deleted.
        * b3/air/AirLogRegisterPressure.cpp:
        (JSC::B3::Air::logRegisterPressure):
        * b3/air/AirLowerAfterRegAlloc.cpp:
        (JSC::B3::Air::lowerAfterRegAlloc):
        * b3/air/AirLowerMacros.cpp:
        (JSC::B3::Air::lowerMacros):
        * b3/air/AirPadInterference.cpp:
        (JSC::B3::Air::padInterference):
        * b3/air/AirReportUsedRegisters.cpp:
        (JSC::B3::Air::reportUsedRegisters):
        * b3/air/AirSpillEverything.cpp:
        (JSC::B3::Air::spillEverything):
        * b3/air/AirTmpInlines.h:
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::GP>::absoluteIndex): Deleted.
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::GP>::lastMachineRegisterIndex): Deleted.
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::GP>::tmpFromAbsoluteIndex): Deleted.
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::FP>::absoluteIndex): Deleted.
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::FP>::lastMachineRegisterIndex): Deleted.
        (JSC::B3::Air::AbsoluteTmpMapper<Arg::FP>::tmpFromAbsoluteIndex): Deleted.
        * b3/air/AirTmpWidth.cpp:
        (JSC::B3::Air::TmpWidth::recompute):
        * b3/air/AirTmpWidth.h:
        (JSC::B3::Air::TmpWidth::width):
        (JSC::B3::Air::TmpWidth::requiredWidth):
        (JSC::B3::Air::TmpWidth::defWidth):
        (JSC::B3::Air::TmpWidth::useWidth):
        (JSC::B3::Air::TmpWidth::Widths::Widths):
        * b3/air/AirUseCounts.h:
        (JSC::B3::Air::UseCounts::UseCounts):
        * b3/air/AirValidate.cpp:
        * b3/air/opcode_generator.rb:
        * b3/air/testair.cpp:
        (JSC::B3::Air::compile): Deleted.
        (JSC::B3::Air::invoke): Deleted.
        (JSC::B3::Air::compileAndRun): Deleted.
        (JSC::B3::Air::testSimple): Deleted.
        (JSC::B3::Air::loadConstantImpl): Deleted.
        (JSC::B3::Air::loadConstant): Deleted.
        (JSC::B3::Air::loadDoubleConstant): Deleted.
        (JSC::B3::Air::testShuffleSimpleSwap): Deleted.
        (JSC::B3::Air::testShuffleSimpleShift): Deleted.
        (JSC::B3::Air::testShuffleLongShift): Deleted.
        (JSC::B3::Air::testShuffleLongShiftBackwards): Deleted.
        (JSC::B3::Air::testShuffleSimpleRotate): Deleted.
        (JSC::B3::Air::testShuffleSimpleBroadcast): Deleted.
        (JSC::B3::Air::testShuffleBroadcastAllRegs): Deleted.
        (JSC::B3::Air::testShuffleTreeShift): Deleted.
        (JSC::B3::Air::testShuffleTreeShiftBackward): Deleted.
        (JSC::B3::Air::testShuffleTreeShiftOtherBackward): Deleted.
        (JSC::B3::Air::testShuffleMultipleShifts): Deleted.
        (JSC::B3::Air::testShuffleRotateWithFringe): Deleted.
        (JSC::B3::Air::testShuffleRotateWithFringeInWeirdOrder): Deleted.
        (JSC::B3::Air::testShuffleRotateWithLongFringe): Deleted.
        (JSC::B3::Air::testShuffleMultipleRotates): Deleted.
        (JSC::B3::Air::testShuffleShiftAndRotate): Deleted.
        (JSC::B3::Air::testShuffleShiftAllRegs): Deleted.
        (JSC::B3::Air::testShuffleRotateAllRegs): Deleted.
        (JSC::B3::Air::testShuffleSimpleSwap64): Deleted.
        (JSC::B3::Air::testShuffleSimpleShift64): Deleted.
        (JSC::B3::Air::testShuffleSwapMixedWidth): Deleted.
        (JSC::B3::Air::testShuffleShiftMixedWidth): Deleted.
        (JSC::B3::Air::testShuffleShiftMemory): Deleted.
        (JSC::B3::Air::testShuffleShiftMemoryLong): Deleted.
        (JSC::B3::Air::testShuffleShiftMemoryAllRegs): Deleted.
        (JSC::B3::Air::testShuffleShiftMemoryAllRegs64): Deleted.
        (JSC::B3::Air::combineHiLo): Deleted.
        (JSC::B3::Air::testShuffleShiftMemoryAllRegsMixedWidth): Deleted.
        (JSC::B3::Air::testShuffleRotateMemory): Deleted.
        (JSC::B3::Air::testShuffleRotateMemory64): Deleted.
        (JSC::B3::Air::testShuffleRotateMemoryMixedWidth): Deleted.
        (JSC::B3::Air::testShuffleRotateMemoryAllRegs64): Deleted.
        (JSC::B3::Air::testShuffleRotateMemoryAllRegsMixedWidth): Deleted.
        (JSC::B3::Air::testShuffleSwapDouble): Deleted.
        (JSC::B3::Air::testShuffleShiftDouble): Deleted.
        (JSC::B3::Air::testX86VMULSD): Deleted.
        (JSC::B3::Air::testX86VMULSDDestRex): Deleted.
        (JSC::B3::Air::testX86VMULSDOp1DestRex): Deleted.
        (JSC::B3::Air::testX86VMULSDOp2DestRex): Deleted.
        (JSC::B3::Air::testX86VMULSDOpsDestRex): Deleted.
        (JSC::B3::Air::testX86VMULSDAddr): Deleted.
        (JSC::B3::Air::testX86VMULSDAddrOpRexAddr): Deleted.
        (JSC::B3::Air::testX86VMULSDDestRexAddr): Deleted.
        (JSC::B3::Air::testX86VMULSDRegOpDestRexAddr): Deleted.
        (JSC::B3::Air::testX86VMULSDAddrOpDestRexAddr): Deleted.
        (JSC::B3::Air::testX86VMULSDBaseNeedsRex): Deleted.
        (JSC::B3::Air::testX86VMULSDIndexNeedsRex): Deleted.
        (JSC::B3::Air::testX86VMULSDBaseIndexNeedRex): Deleted.
        (JSC::B3::Air::run): Deleted.

2017-02-24  Keith Miller  <keith_miller@apple.com>

        We should be able to use std::tuples as keys in HashMap
        https://bugs.webkit.org/show_bug.cgi?id=168805

        Reviewed by Filip Pizlo.

        Convert the mess of std::pairs we used as the keys in PrototypeMap
        to a std::tuple. I also plan on using this for a HashMap in wasm.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/PrototypeMap.cpp:
        (JSC::PrototypeMap::createEmptyStructure):
        (JSC::PrototypeMap::clearEmptyObjectStructureForPrototype):
        * runtime/PrototypeMap.h:

2017-02-24  Saam Barati  <sbarati@apple.com>

        Unreviewed. Remove inaccurate copy-paste comment from r212939.

        * dfg/DFGOperations.cpp:

2017-02-23  Saam Barati  <sbarati@apple.com>

        Intrinsicify parseInt
        https://bugs.webkit.org/show_bug.cgi?id=168627

        Reviewed by Filip Pizlo.

        This patch makes parseInt an intrinsic in the DFG and FTL.
        We do our best to eliminate this node. If we speculate that
        the first operand to the operation is an int32, and that there
        isn't a second operand, we convert to the identity of the first
        operand. That's because parseInt(someInt) === someInt.
        
        If the first operand is proven to be an integer, and the second
        operand is the integer 0 or the integer 10, we can eliminate the
        node by making it an identity over its first operand. That's
        because parseInt(someInt, 0) === someInt and parseInt(someInt, 10) === someInt.
        
        If we are not able to constant fold the node away, we try to remove
        checks. The most common use case of parseInt is that its first operand
        is a proven string. The DFG might be able to remove type checks in this
        case. We also set up CSE rules for parseInt(someString, someIntRadix)
        because it's a "pure" operation (modulo resolving a rope).

        This looks to be a 4% Octane/Box2D progression.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::parseIntResult):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileParseInt):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::appendCallSetResult):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileParseInt):
        * jit/JITOperations.h:
        * parser/Lexer.cpp:
        * runtime/ErrorInstance.cpp:
        * runtime/Intrinsic.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::toStringView): Deleted.
        (JSC::isStrWhiteSpace): Deleted.
        (JSC::parseDigit): Deleted.
        (JSC::parseIntOverflow): Deleted.
        (JSC::parseInt): Deleted.
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/ParseInt.h: Added.
        (JSC::parseDigit):
        (JSC::parseIntOverflow):
        (JSC::isStrWhiteSpace):
        (JSC::parseInt):
        (JSC::toStringView):
        * runtime/StringPrototype.cpp:

2017-02-23  JF Bastien  <jfbastien@apple.com>

        WebAssembly: support 0x1 version
        https://bugs.webkit.org/show_bug.cgi?id=168672

        Reviewed by Keith Miller.

        * wasm/wasm.json: update the version number, everything is based
        on its value

2017-02-23  Saam Barati  <sbarati@apple.com>

        Make Briggs fixpoint validation run only with validateGraphAtEachPhase
        https://bugs.webkit.org/show_bug.cgi?id=168795

        Rubber stamped by Keith Miller.

        The Briggs allocator was running intensive validation
        on each step of the fixpoint. Instead, it now will just
        do it when shouldValidateIRAtEachPhase() is true because
        doing this for all !ASSERT_DISABLED builds takes too long.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:

2017-02-23  Filip Pizlo  <fpizlo@apple.com>

        SpeculativeJIT::compilePutByValForIntTypedArray should only do the constant-folding optimization when the constant passes the type check
        https://bugs.webkit.org/show_bug.cgi?id=168787

        Reviewed by Michael Saboff and Mark Lam.

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

2017-02-23  Mark Lam  <mark.lam@apple.com>

        Ensure that the end of the last invalidation point does not extend beyond the end of the buffer.
        https://bugs.webkit.org/show_bug.cgi?id=168786

        Reviewed by Filip Pizlo.

        In practice, we will always have multiple instructions after invalidation points,
        and have enough room in the JIT buffer for the invalidation point to work with.
        However, as a precaution, we can guarantee that there's enough room by always
        emitting a label just before we link the buffer.  The label will emit nop padding
        if needed.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::linkCode):

2017-02-23  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix the cloop build. Needed a #if.

        * jit/ExecutableAllocator.cpp:

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Better handle Thread and RunLoop initialization
        https://bugs.webkit.org/show_bug.cgi?id=167828

        Reviewed by Yusuke Suzuki.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading): Do not initialize double_conversion, that is already initialized by WTF, and GC
        threads that will be initialized by WTF main thread when needed.

2017-02-22  JF Bastien  <jfbastien@apple.com>

        WebAssembly: clear out insignificant i32 bits when calling JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=166677

        Reviewed by Keith Miller.

        When WebAssembly calls JavaScript it needs to clear out the
        insignificant bits of int32 values:

          +------------------- tag
          |  +---------------- insignificant
          |  |   +------------ 32-bit integer value
          |  |   |
          |--|---|-------|
        0xffff0000ffffffff

        At least some JavaScript code assumes that these bits are all
        zero. In the wasm-to-wasm.js example we store a 64-bit value in an
        object with lo / hi fields, each containing 32-bit integers. We
        then load these back, and the baseline compiler fails its
        comparison because it first checks the value are the same type
        (yes, because the int32 tag is set in both), and then whether they
        have the same value (no, because comparing the two registers
        fails). We could argue that the baseline compiler is wrong for
        performing a 64-bit comparison, but it doesn't really matter
        because there's not much of a point in breaking that invariant for
        WebAssembly's sake.

        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToJs):

2017-02-22  Keith Miller  <keith_miller@apple.com>

        Remove the demand executable allocator
        https://bugs.webkit.org/show_bug.cgi?id=168754

        Reviewed by Saam Barati.

        We currently only use the demand executable allocator for non-iOS 32-bit platforms.
        Benchmark results on a MBP indicate there is no appreciable performance difference
        between a the fixed and demand allocators. In a future patch I will go back through
        this code and remove more of the abstractions.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
        (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):
        (JSC::FixedVMPoolExecutableAllocator::genericWriteToJITRegion):
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::FixedVMPoolExecutableAllocator::~FixedVMPoolExecutableAllocator):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::isValidExecutableMemory):
        (JSC::ExecutableAllocator::getLock):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::dumpProfile):
        (JSC::DemandExecutableAllocator::DemandExecutableAllocator): Deleted.
        (JSC::DemandExecutableAllocator::~DemandExecutableAllocator): Deleted.
        (JSC::DemandExecutableAllocator::bytesAllocatedByAllAllocators): Deleted.
        (JSC::DemandExecutableAllocator::bytesCommittedByAllocactors): Deleted.
        (JSC::DemandExecutableAllocator::dumpProfileFromAllAllocators): Deleted.
        (JSC::DemandExecutableAllocator::allocateNewSpace): Deleted.
        (JSC::DemandExecutableAllocator::notifyNeedPage): Deleted.
        (JSC::DemandExecutableAllocator::notifyPageIsFree): Deleted.
        (JSC::DemandExecutableAllocator::allocators): Deleted.
        (JSC::DemandExecutableAllocator::allocatorsMutex): Deleted.
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp: Removed.
        * jit/JITStubRoutine.h:
        (JSC::JITStubRoutine::canPerformRangeFilter):
        (JSC::JITStubRoutine::filteringStartAddress):
        (JSC::JITStubRoutine::filteringExtentSize):

2017-02-22  Saam Barati  <sbarati@apple.com>

        Add biased coloring to Briggs and IRC
        https://bugs.webkit.org/show_bug.cgi?id=168611

        Reviewed by Filip Pizlo.

        This patch implements biased coloring as proposed by Briggs. See section
        5.3.3 of his thesis for more information: http://www.cs.utexas.edu/users/mckinley/380C/lecs/briggs-thesis-1992.pdf

        The main idea of biased coloring is this:
        We try to coalesce a move between u and v, but the conservative heuristic
        fails. We don't want coalesce the move because we don't want to risk
        creating an uncolorable graph. However, if the conservative heuristic fails,
        it's not proof that the graph is uncolorable if the move were indeed coalesced.
        So, when we go to color the tmps, we'll remember that we really want the
        same register for u and v, and if legal during coloring, we will
        assign them to the same register.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:

2017-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        JSModuleNamespace object should have IC
        https://bugs.webkit.org/show_bug.cgi?id=160590

        Reviewed by Saam Barati.

        This patch optimizes accesses to module namespace objects.

        1. Cache the resolutions for module namespace objects.

            When constructing the module namespace object, we already resolves all the exports.
            The module namespace object caches this result and leverage it in the later access in
            getOwnPropertySlot. This avoids resolving bindings through resolveExport.

        2. Introduce ModuleNamespaceLoad IC.

            This patch adds new IC for module namespace objects. The mechanism is simple, getOwnPropertySlot
            tells us about module namespace object resolution. The IC first checks whether the given object
            is an expected module namespace object. If this check succeeds, we load the value from the module
            environment.

        3. Introduce DFG/FTL optimization.

            After exploiting module namespace object accesses in (2), DFG can recognize this in ByteCodeParser.
            DFG will convert it to CheckCell with the namespace object and GetClosureVar from the cached environment.
            At that time, we have a chance to fold it to the constant.

        This optimization improves the performance of accessing to module namespace objects.

        Before
            $ time ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m module-assert-access-namespace.js
            ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m   0.43s user 0.03s system 101% cpu 0.451 total
            $ time ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m module-assert-access-binding.js
            ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m   0.08s user 0.02s system 103% cpu 0.104 total

        After
            $ time ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-namespace.js
            ../../WebKitBuild/module-ic/Release/bin/jsc -m   0.11s user 0.01s system 106% cpu 0.109 total
            $ time ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-binding.js
            ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-binding.j  0.08s user 0.02s system 102% cpu 0.105 total

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::create):
        (JSC::AccessCase::guardedByStructureCheck):
        (JSC::AccessCase::canReplace):
        (JSC::AccessCase::visitWeak):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * bytecode/AccessCase.h:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByIdStatus::makesCalls):
        (JSC::GetByIdStatus::dump):
        * bytecode/GetByIdStatus.h:
        (JSC::GetByIdStatus::isModuleNamespace):
        (JSC::GetByIdStatus::takesSlowPath):
        (JSC::GetByIdStatus::moduleNamespaceObject):
        (JSC::GetByIdStatus::moduleEnvironment):
        (JSC::GetByIdStatus::scopeOffset):
        * bytecode/ModuleNamespaceAccessCase.cpp: Added.
        (JSC::ModuleNamespaceAccessCase::ModuleNamespaceAccessCase):
        (JSC::ModuleNamespaceAccessCase::create):
        (JSC::ModuleNamespaceAccessCase::~ModuleNamespaceAccessCase):
        (JSC::ModuleNamespaceAccessCase::clone):
        (JSC::ModuleNamespaceAccessCase::emit):
        * bytecode/ModuleNamespaceAccessCase.h: Added.
        (JSC::ModuleNamespaceAccessCase::moduleNamespaceObject):
        (JSC::ModuleNamespaceAccessCase::moduleEnvironment):
        (JSC::ModuleNamespaceAccessCase::scopeOffset):
        * bytecode/PolymorphicAccess.cpp:
        (WTF::printInternal):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleModuleNamespaceLoad):
        (JSC::DFG::ByteCodeParser::handleGetById):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::loadValue):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::getModuleNamespace):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::JSModuleNamespaceObject::visitChildren):
        (JSC::getValue):
        (JSC::JSModuleNamespaceObject::getOwnPropertySlot):
        (JSC::JSModuleNamespaceObject::getOwnPropertyNames):
        * runtime/JSModuleNamespaceObject.h:
        (JSC::isJSModuleNamespaceObject):
        (JSC::JSModuleNamespaceObject::create): Deleted.
        (JSC::JSModuleNamespaceObject::createStructure): Deleted.
        (JSC::JSModuleNamespaceObject::moduleRecord): Deleted.
        * runtime/JSModuleRecord.h:
        (JSC::JSModuleRecord::moduleEnvironment): Deleted.
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        (JSC::PropertySlot::domJIT):
        (JSC::PropertySlot::moduleNamespaceSlot):
        (JSC::PropertySlot::setValueModuleNamespace):
        (JSC::PropertySlot::setCacheableCustom):

2017-02-22  Saam Barati  <sbarati@apple.com>

        Unreviewed. Rename AirGraphColoring.* files to AirAllocateRegistersByGraphColoring.* to be more consistent with the rest of the Air file names.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/air/AirAllocateRegistersByGraphColoring.cpp: Copied from Source/JavaScriptCore/b3/air/AirGraphColoring.cpp.
        * b3/air/AirAllocateRegistersByGraphColoring.h: Copied from Source/JavaScriptCore/b3/air/AirGraphColoring.h.
        * b3/air/AirGenerate.cpp:
        * b3/air/AirGraphColoring.cpp: Removed.
        * b3/air/AirGraphColoring.h: Removed.

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293
        <rdar://problem/30401864>

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-02-21  Saam Barati  <sbarati@apple.com>

        Add the Briggs optimistic allocator to run on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=168454

        Reviewed by Filip Pizlo.

        This patch adds the Briggs allocator to Air:
        http://www.cs.utexas.edu/users/mckinley/380C/lecs/briggs-thesis-1992.pdf
        It uses it by default on ARM64. I was measuring an 8-10% speedup
        in the phase because of this. I also wasn't able to detect a slowdown 
        for generated code on ARM64. There are still a few things we can do
        to speed things up even further. Moving the interference graph into
        a BitVector was another 10-20% speedup. We should consider doing this
        in a follow up patch. This is especially important now, since making
        register allocation faster has a direct impact on startup time for
        Wasm modules.
        
        I abstracted away the common bits between Briggs and IRC, and moved
        them into a common super class. In a follow up to this patch, I plan
        on implementing biased coloring for both Briggs and IRC (this is
        described in Briggs's thesis). I was able to detect a 1% slowdown
        with Briggs on Octane for x86-64. This is because the register file
        for x86-64 is smaller than ARM64. When I implemented biased coloring,
        I was no longer able to detect this slowdown. I still think it's a
        sensible plan to run Briggs on ARM64 and IRC on x86-64.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::prepareForGeneration):
        * b3/air/AirGraphColoring.cpp: Copied from Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp.
        (JSC::B3::Air::allocateRegistersByGraphColoring):
        (JSC::B3::Air::iteratedRegisterCoalescing): Deleted.
        * b3/air/AirGraphColoring.h: Copied from Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.h.
        * b3/air/AirIteratedRegisterCoalescing.cpp: Removed.
        * b3/air/AirIteratedRegisterCoalescing.h: Removed.
        * runtime/Options.h:

2017-02-21  Mark Lam  <mark.lam@apple.com>

        Add more missing exception checks detected by running marathon.js.
        https://bugs.webkit.org/show_bug.cgi?id=168697

        Reviewed by Saam Barati.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):

2017-02-21  JF Bastien  <jfbastien@apple.com>

        FullCodeOrigin for CodeBlock+CodeOrigin printing
        https://bugs.webkit.org/show_bug.cgi?id=168673

        Reviewed by Filip Pizlo.

        WebAssembly doesn't have a CodeBlock, so printing it isn't
        valid. This patch adds FullCodeOrigin to handle the
        CodeBlock+CodeOrigin printing pattern, and uses it through all the
        places I could find, including Repatch.cpp where it's relevant for
        WebAssembly.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::noticeIncomingCall):
        * bytecode/FullCodeOrigin.cpp: Added.
        (JSC::FullCodeOrigin::dump):
        (JSC::FullCodeOrigin::dumpInContext):
        * bytecode/FullCodeOrigin.h: Added.
        (JSC::FullCodeOrigin::FullCodeOrigin):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine):
        * jit/Repatch.cpp:
        (JSC::linkFor):
        (JSC::linkDirectFor):
        (JSC::linkVirtualFor):

2017-02-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop. I managed to have my local patch for relanding be the one without the cloop
        fix. I keep forgetting about cloop!

        * heap/Heap.cpp:
        (JSC::Heap::stopThePeriphery):
        * runtime/JSLock.cpp:

2017-02-21  Mark Lam  <mark.lam@apple.com>

        Add missing exception checks detected by running marathon.js.
        https://bugs.webkit.org/show_bug.cgi?id=168687

        Reviewed by Saam Barati.

        When running the marathon.js test from https://bugs.webkit.org/show_bug.cgi?id=168580,
        we get some crashes due to missing exception checks.  This patch adds those
        missing exception checks.

        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::toPropertyKey):
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPrimitiveNumber):

2017-02-20  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        This turns the collector thread's workflow into a state machine, so that the mutator thread can
        run it directly. This reduces the amount of synchronization we do with the collector thread, and
        means that most apps will never start the collector thread. The collector thread will still start
        when we need to finish collecting and we don't have heap access.
        
        In this new world, "stopping the world" means relinquishing control of collection to the mutator.
        This means tracking who is conducting collection. I use the GCConductor enum to say who is
        conducting. It's either GCConductor::Mutator or GCConductor::Collector. I use the term "conn" to
        refer to the concept of conducting (having the conn, relinquishing the conn, taking the conn).
        So, stopping the world means giving the mutator the conn. Releasing heap access means giving the
        collector the conn.
        
        This meant bringing back the conservative scan of the calling thread. It turns out that this
        scan was too slow to be called on each GC increment because apparently setjmp() now does system
        calls. So, I wrote our own callee save register saving for the GC. Then I had doubts about
        whether or not it was correct, so I also made it so that the GC only rarely asks for the register
        state. I think we still want to use my register saving code instead of setjmp because setjmp
        seems to save things we don't need, and that could make us overly conservative.
        
        It turns out that this new scheduling discipline makes the old space-time scheduler perform
        better than the new stochastic space-time scheduler on systems with fewer than 4 cores. This is
        because the mutator having the conn enables us to time the mutator<->collector context switches
        by polling. The OS is never involved. So, we can use super precise timing. This allows the old
        space-time schduler to shine like it hadn't before.
        
        The splay results imply that this is all a good thing. On 2-core systems, this reduces pause
        times by 40% and it increases throughput about 5%. On 1-core systems, this reduces pause times by
        half and reduces throughput by 8%. On 4-or-more-core systems, this doesn't seem to have much
        effect.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitChildren):
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::ThreadBody::ThreadBody):
        (JSC::DFG::Worklist::dump):
        (JSC::DFG::numberOfWorklists):
        (JSC::DFG::ensureWorklistForIndex):
        (JSC::DFG::existingWorklistForIndexOrNull):
        (JSC::DFG::existingWorklistForIndex):
        * dfg/DFGWorklist.h:
        (JSC::DFG::numberOfWorklists): Deleted.
        (JSC::DFG::ensureWorklistForIndex): Deleted.
        (JSC::DFG::existingWorklistForIndexOrNull): Deleted.
        (JSC::DFG::existingWorklistForIndex): Deleted.
        * heap/CollectingScope.h: Added.
        (JSC::CollectingScope::CollectingScope):
        (JSC::CollectingScope::~CollectingScope):
        * heap/CollectorPhase.cpp: Added.
        (JSC::worldShouldBeSuspended):
        (WTF::printInternal):
        * heap/CollectorPhase.h: Added.
        * heap/EdenGCActivityCallback.cpp:
        (JSC::EdenGCActivityCallback::lastGCLength):
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        (JSC::FullGCActivityCallback::lastGCLength):
        * heap/GCConductor.cpp: Added.
        (JSC::gcConductorShortName):
        (WTF::printInternal):
        * heap/GCConductor.h: Added.
        * heap/GCFinalizationCallback.cpp: Added.
        (JSC::GCFinalizationCallback::GCFinalizationCallback):
        (JSC::GCFinalizationCallback::~GCFinalizationCallback):
        * heap/GCFinalizationCallback.h: Added.
        (JSC::GCFinalizationCallbackFuncAdaptor::GCFinalizationCallbackFuncAdaptor):
        (JSC::createGCFinalizationCallback):
        * heap/Heap.cpp:
        (JSC::Heap::Thread::Thread):
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::gatherStackRoots):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::sweepSynchronously):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::shouldCollectInCollectorThread):
        (JSC::Heap::collectInCollectorThread):
        (JSC::Heap::checkConn):
        (JSC::Heap::runNotRunningPhase):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::runFixpointPhase):
        (JSC::Heap::runConcurrentPhase):
        (JSC::Heap::runReloopPhase):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::changePhase):
        (JSC::Heap::finishChangingPhase):
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::resumeThePeriphery):
        (JSC::Heap::stopTheMutator):
        (JSC::Heap::resumeTheMutator):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectInMutatorThread):
        (JSC::Heap::waitForCollector):
        (JSC::Heap::acquireAccessSlow):
        (JSC::Heap::releaseAccessSlow):
        (JSC::Heap::relinquishConn):
        (JSC::Heap::finishRelinquishingConn):
        (JSC::Heap::handleNeedFinalize):
        (JSC::Heap::notifyThreadStopping):
        (JSC::Heap::finalize):
        (JSC::Heap::addFinalizationCallback):
        (JSC::Heap::requestCollection):
        (JSC::Heap::waitForCollection):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::didFinishCollection):
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::notifyIsSafeToCollect):
        (JSC::Heap::preventCollection):
        (JSC::Heap::performIncrement):
        (JSC::Heap::markToFixpoint): Deleted.
        (JSC::Heap::shouldCollectInThread): Deleted.
        (JSC::Heap::collectInThread): Deleted.
        (JSC::Heap::stopTheWorld): Deleted.
        (JSC::Heap::resumeTheWorld): Deleted.
        * heap/Heap.h:
        (JSC::Heap::machineThreads):
        (JSC::Heap::lastFullGCLength):
        (JSC::Heap::lastEdenGCLength):
        (JSC::Heap::increaseLastFullGCLength):
        * heap/HeapInlines.h:
        (JSC::Heap::mutatorIsStopped): Deleted.
        * heap/HeapStatistics.cpp: Removed.
        * heap/HeapStatistics.h: Removed.
        * heap/HelpingGCScope.h: Removed.
        * heap/IncrementalSweeper.cpp:
        (JSC::IncrementalSweeper::stopSweeping):
        (JSC::IncrementalSweeper::willFinishSweeping): Deleted.
        * heap/IncrementalSweeper.h:
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::gatherFromCurrentThread):
        (JSC::MachineThreads::gatherConservativeRoots):
        (JSC::callWithCurrentThreadState):
        * heap/MachineStackMarker.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::sweep):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::sweep):
        * heap/MutatorState.cpp:
        (WTF::printInternal):
        * heap/MutatorState.h:
        * heap/RegisterState.h: Added.
        * heap/RunningScope.h: Added.
        (JSC::RunningScope::RunningScope):
        (JSC::RunningScope::~RunningScope):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::SlotVisitor):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively):
        (JSC::SlotVisitor::donateAll):
        (JSC::SlotVisitor::donate):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::codeName):
        * heap/StochasticSpaceTimeMutatorScheduler.cpp:
        (JSC::StochasticSpaceTimeMutatorScheduler::beginCollection):
        (JSC::StochasticSpaceTimeMutatorScheduler::synchronousDrainingDidStall):
        (JSC::StochasticSpaceTimeMutatorScheduler::timeToStop):
        * heap/SweepingScope.h: Added.
        (JSC::SweepingScope::SweepingScope):
        (JSC::SweepingScope::~SweepingScope):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Thread::Thread):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionFlashHeapAccess):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        * runtime/Options.h:
        * runtime/TestRunnerUtils.cpp:
        (JSC::finalizeStatsAtEndOfTesting):

2017-02-21  Saam Barati  <sbarati@apple.com>

        Air should have a disassembly mode that dumps IR and assembly intermixed
        https://bugs.webkit.org/show_bug.cgi?id=168629

        Reviewed by Filip Pizlo.

        This will make dumping FTL disassembly dump Air intermixed
        with the assembly generated by each Air Inst. This is similar
        to how dumpDFGDisassembly dumps the generated assembly for each
        Node.
        
        Here is what the output will look like:
        
        Generated FTL JIT code for foo#CUaFiQ:[0x10b76c960->0x10b76c2d0->0x10b7b6da0, FTLFunctionCall, 40 (NeverInline)], instruction count = 40:
        BB#0: ; frequency = 1.000000
                0x469004e02e00: push %rbp
                0x469004e02e01: mov %rsp, %rbp
                0x469004e02e04: add $0xffffffffffffffd0, %rsp
            Move $0x10b76c960, %rax, $4487301472(@16)
                0x469004e02e08: mov $0x10b76c960, %rax
            Move %rax, 16(%rbp), @19
                0x469004e02e12: mov %rax, 0x10(%rbp)
            Patch &Patchpoint2, %rbp, %rax, @20
                0x469004e02e16: lea -0x50(%rbp), %rax
                0x469004e02e1a: mov $0x1084081e0, %r11
                0x469004e02e24: cmp %rax, (%r11)
                0x469004e02e27: ja 0x469004e02e9a
            Move 56(%rbp), %rdx, @23
                0x469004e02e2d: mov 0x38(%rbp), %rdx
            Move $0xffff000000000002, %rax, $-281474976710654(@15)
                0x469004e02e31: mov $0xffff000000000002, %rax
            Patch &BranchTest64(3,SameAsRep)1, NonZero, %rdx, %rax, %rdx, @26
                0x469004e02e3b: test %rdx, %rax
                0x469004e02e3e: jnz 0x469004e02f08
            Move 48(%rbp), %rax, @29
                0x469004e02e44: mov 0x30(%rbp), %rax
            Move %rax, %rcx, @31
                0x469004e02e48: mov %rax, %rcx
            Xor64 $6, %rcx, @31
                0x469004e02e4b: xor $0x6, %rcx
            Patch &BranchTest64(3,SameAsRep)1, NonZero, %rcx, $-2, %rax, @35
                0x469004e02e4f: test $0xfffffffffffffffe, %rcx
                0x469004e02e56: jnz 0x469004e02f12
            Patch &Branch32(3,SameAsRep)0, NotEqual, (%rdx), $266, %rdx, @45
                0x469004e02e5c: cmp $0x10a, (%rdx)
                0x469004e02e62: jnz 0x469004e02f1c
            BranchTest32 NonZero, %rax, $1, @49
                0x469004e02e68: test $0x1, %al
                0x469004e02e6a: jnz 0x469004e02e91
          Successors: #3, #1
        BB#1: ; frequency = 1.000000
          Predecessors: #0
            Move $0, %rcx, @65
                0x469004e02e70: xor %rcx, %rcx
            Jump @66
          Successors: #2
        BB#2: ; frequency = 1.000000
          Predecessors: #1, #3
            Move 24(%rdx), %rax, @58
                0x469004e02e73: mov 0x18(%rdx), %rax
            Patch &BranchAdd32(4,ForceLateUseUnlessRecoverable)3, Overflow, %rcx, %rax, %rcx, %rcx, %rax, @60
                0x469004e02e77: add %eax, %ecx
                0x469004e02e79: jo 0x469004e02f26
            Move $0xffff000000000000, %rax, $-281474976710656(@14)
                0x469004e02e7f: mov $0xffff000000000000, %rax
            Add64 %rcx, %rax, %rax, @62
                0x469004e02e89: add %rcx, %rax
            Ret64 %rax, @63
                0x469004e02e8c: mov %rbp, %rsp
                0x469004e02e8f: pop %rbp
                0x469004e02e90: ret 
        BB#3: ; frequency = 1.000000
          Predecessors: #0
            Move 16(%rdx), %rcx, @52
                0x469004e02e91: mov 0x10(%rdx), %rcx
            Jump @55
                0x469004e02e95: jmp 0x469004e02e73
          Successors: #2

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::setDisassembler):
        (JSC::B3::Air::Code::disassembler):
        * b3/air/AirDisassembler.cpp: Added.
        (JSC::B3::Air::Disassembler::startEntrypoint):
        (JSC::B3::Air::Disassembler::endEntrypoint):
        (JSC::B3::Air::Disassembler::startLatePath):
        (JSC::B3::Air::Disassembler::endLatePath):
        (JSC::B3::Air::Disassembler::startBlock):
        (JSC::B3::Air::Disassembler::addInst):
        (JSC::B3::Air::Disassembler::dump):
        * b3/air/AirDisassembler.h: Added.
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generate):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):

2017-02-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212712.

        This change broke the CLoop build.

        Reverted changeset:

        "JSModuleNamespace object should have IC"
        https://bugs.webkit.org/show_bug.cgi?id=160590
        http://trac.webkit.org/changeset/212712

2017-02-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        JSModuleNamespace object should have IC
        https://bugs.webkit.org/show_bug.cgi?id=160590

        Reviewed by Saam Barati.

        This patch optimizes accesses to module namespace objects.

        1. Cache the resolutions for module namespace objects.

            When constructing the module namespace object, we already resolves all the exports.
            The module namespace object caches this result and leverage it in the later access in
            getOwnPropertySlot. This avoids resolving bindings through resolveExport.

        2. Introduce ModuleNamespaceLoad IC.

            This patch adds new IC for module namespace objects. The mechanism is simple, getOwnPropertySlot
            tells us about module namespace object resolution. The IC first checks whether the given object
            is an expected module namespace object. If this check succeeds, we load the value from the module
            environment.

        3. Introduce DFG/FTL optimization.

            After exploiting module namespace object accesses in (2), DFG can recognize this in ByteCodeParser.
            DFG will convert it to CheckCell with the namespace object and GetClosureVar from the cached environment.
            At that time, we have a chance to fold it to the constant.

        This optimization improves the performance of accessing to module namespace objects.

        Before
            $ time ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m module-assert-access-namespace.js
            ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m   0.43s user 0.03s system 101% cpu 0.451 total
            $ time ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m module-assert-access-binding.js
            ../../WebKitBuild/module-ic-tot/Release/bin/jsc -m   0.08s user 0.02s system 103% cpu 0.104 total

        After
            $ time ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-namespace.js
            ../../WebKitBuild/module-ic/Release/bin/jsc -m   0.11s user 0.01s system 106% cpu 0.109 total
            $ time ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-binding.js
            ../../WebKitBuild/module-ic/Release/bin/jsc -m module-assert-access-binding.j  0.08s user 0.02s system 102% cpu 0.105 total

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::create):
        (JSC::AccessCase::guardedByStructureCheck):
        (JSC::AccessCase::canReplace):
        (JSC::AccessCase::visitWeak):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * bytecode/AccessCase.h:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByIdStatus::makesCalls):
        (JSC::GetByIdStatus::dump):
        * bytecode/GetByIdStatus.h:
        (JSC::GetByIdStatus::isModuleNamespace):
        (JSC::GetByIdStatus::takesSlowPath):
        (JSC::GetByIdStatus::moduleNamespaceObject):
        (JSC::GetByIdStatus::moduleEnvironment):
        (JSC::GetByIdStatus::scopeOffset):
        * bytecode/ModuleNamespaceAccessCase.cpp: Added.
        (JSC::ModuleNamespaceAccessCase::ModuleNamespaceAccessCase):
        (JSC::ModuleNamespaceAccessCase::create):
        (JSC::ModuleNamespaceAccessCase::~ModuleNamespaceAccessCase):
        (JSC::ModuleNamespaceAccessCase::clone):
        (JSC::ModuleNamespaceAccessCase::emit):
        * bytecode/ModuleNamespaceAccessCase.h: Added.
        (JSC::ModuleNamespaceAccessCase::moduleNamespaceObject):
        (JSC::ModuleNamespaceAccessCase::moduleEnvironment):
        (JSC::ModuleNamespaceAccessCase::scopeOffset):
        * bytecode/PolymorphicAccess.cpp:
        (WTF::printInternal):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleModuleNamespaceLoad):
        (JSC::DFG::ByteCodeParser::handleGetById):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::loadValue):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::getModuleNamespace):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::JSModuleNamespaceObject::visitChildren):
        (JSC::getValue):
        (JSC::JSModuleNamespaceObject::getOwnPropertySlot):
        (JSC::JSModuleNamespaceObject::getOwnPropertyNames):
        * runtime/JSModuleNamespaceObject.h:
        (JSC::isJSModuleNamespaceObject):
        (JSC::JSModuleNamespaceObject::create): Deleted.
        (JSC::JSModuleNamespaceObject::createStructure): Deleted.
        (JSC::JSModuleNamespaceObject::moduleRecord): Deleted.
        * runtime/JSModuleRecord.h:
        (JSC::JSModuleRecord::moduleEnvironment): Deleted.
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        (JSC::PropertySlot::domJIT):
        (JSC::PropertySlot::moduleNamespaceSlot):
        (JSC::PropertySlot::setValueModuleNamespace):
        (JSC::PropertySlot::setCacheableCustom):

2017-02-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        ASSERTION FAILED: "!scope.exception()" with Object.isSealed/isFrozen and uninitialized module bindings
        https://bugs.webkit.org/show_bug.cgi?id=168605

        Reviewed by Saam Barati.

        We should check exception state after calling getOwnPropertyDescriptor() since it can throw errors.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):

2017-02-20  Mark Lam  <mark.lam@apple.com>

        [Re-landing] CachedCall should let GC know to keep its arguments alive.
        https://bugs.webkit.org/show_bug.cgi?id=168567
        <rdar://problem/30475767>

        Reviewed by Saam Barati.

        We fix this by having CachedCall use a MarkedArgumentBuffer to store its
        arguments instead of a Vector.

        Also declared CachedCall, MarkedArgumentBuffer, and ProtoCallFrame as
        WTF_FORBID_HEAP_ALLOCATION because they rely on being stack allocated for
        correctness.

        Update: the original patch has a bug in MarkedArgumentBuffer::expandCapacity()
        where it was copying and calling addMarkSet() on values in m_buffer beyond m_size
        (up to m_capacity).  As a result, depending on the pre-existing values in
        m_inlineBuffer, this may result in a computed Heap pointer that is wrong, and
        subsequently, manifest as a crash.  This is likely to be the cause of the PLT
        regression.

        I don't have a new test for this fix because the issue relies on sufficiently bad
        values randomly showing up in m_inlineBuffer when we do an ensureCapacity() which
        calls expandCapacity().

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        (JSC::CachedCall::call):
        (JSC::CachedCall::clearArguments):
        (JSC::CachedCall::appendArgument):
        (JSC::CachedCall::setArgument): Deleted.
        * interpreter/CallFrame.h:
        (JSC::ExecState::emptyList):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::prepareForRepeatCall):
        * interpreter/Interpreter.h:
        * interpreter/ProtoCallFrame.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::slowEnsureCapacity):
        (JSC::MarkedArgumentBuffer::expandCapacity):
        (JSC::MarkedArgumentBuffer::slowAppend):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::append):
        (JSC::MarkedArgumentBuffer::ensureCapacity):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-02-20  Commit Queue  <commit-queue@webkit.org>

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

        "Appears to cause PLT regression" (Requested by mlam on
        #webkit).

        Reverted changeset:

        "CachedCall should let GC know to keep its arguments alive."
        https://bugs.webkit.org/show_bug.cgi?id=168567
        http://trac.webkit.org/changeset/212618

2017-02-19  Mark Lam  <mark.lam@apple.com>

        BytecodeGenerator should not iterate its m_controlFlowScopeStack using a pointer bump.
        https://bugs.webkit.org/show_bug.cgi?id=168585

        Reviewed by Yusuke Suzuki.

        This is because m_controlFlowScopeStack is a SegmentedVector, and entries for
        consecutive indices in the vector are not guaranteed to be consecutive in memory
        layout.  Instead, we should be using indexing instead.

        This issue was detected by the marathon.js test from
        https://bugs.webkit.org/show_bug.cgi?id=168580.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):

2017-02-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Remove compilation flag ENABLE_CSS_GRID_LAYOUT
        https://bugs.webkit.org/show_bug.cgi?id=167693

        Reviewed by Sergio Villar Senin.

        * Configurations/FeatureDefines.xcconfig:

2017-02-19  Commit Queue  <commit-queue@webkit.org>

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

        Broke CLoop builds when r212466 was rolled out in r212616
        (Requested by rniwa on #webkit).

        Reverted changeset:

        "Unreviewed, fix cloop build."
        http://trac.webkit.org/changeset/212472

2017-02-19  Mark Lam  <mark.lam@apple.com>

        functionTestWasmModuleFunctions() should use a MarkedArgumentBuffer for storing args instead of a Vector.
        https://bugs.webkit.org/show_bug.cgi?id=168574

        Reviewed by Filip Pizlo.

        * jsc.cpp:
        (callWasmFunction):
        (functionTestWasmModuleFunctions):
        * runtime/ArgList.h:

2017-02-19  Mark Lam  <mark.lam@apple.com>

        CachedCall should let GC know to keep its arguments alive.
        https://bugs.webkit.org/show_bug.cgi?id=168567
        <rdar://problem/30475767>

        Reviewed by Saam Barati.

        We fix this by having CachedCall use a MarkedArgumentBuffer to store its
        arguments instead of a Vector.

        Also declared CachedCall, MarkedArgumentBuffer, and ProtoCallFrame as
        WTF_FORBID_HEAP_ALLOCATION because they rely on being stack allocated for
        correctness.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        (JSC::CachedCall::call):
        (JSC::CachedCall::clearArguments):
        (JSC::CachedCall::appendArgument):
        (JSC::CachedCall::setArgument): Deleted.
        * interpreter/CallFrame.h:
        (JSC::ExecState::emptyList):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::prepareForRepeatCall):
        * interpreter/Interpreter.h:
        * interpreter/ProtoCallFrame.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::expandCapacity):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::ensureCapacity):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-02-19  Commit Queue  <commit-queue@webkit.org>

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

        causes crashes on AArch64 on linux, maybe it's causing crashes
        on iOS too (Requested by pizlo on #webkit).

        Reverted changeset:

        "The collector thread should only start when the mutator
        doesn't have heap access"
        https://bugs.webkit.org/show_bug.cgi?id=167737
        http://trac.webkit.org/changeset/212466

2017-02-17  Michael Saboff  <msaboff@apple.com>

        Improve ARM64 disassembler handling of pseudo ops, unsupported opcodes and zero reg
        https://bugs.webkit.org/show_bug.cgi?id=168527

        Reviewed by Filip Pizlo.

        Added support for data processing 1 source instructions like rbit, rev, clz and cls.
        Added support for the FP conditional select instruction, fcsel.  Consolidated the
        two classes for handling dmb instructions into one class.  Fixed the instruction
        selection mask in the integer conditional select class, A64DOpcodeConditionalSelect.
        Fixed the processing of extract instruction (extr) including the rotate right (ror)
        pseudo instruction.  Changed the printing of x31 and w31 to xzr and wzr as operands
        according to the spec.  Added support for common pseudo instructions.  This includes:
        - mvn x1, X2 in place of orn x1, xzr, x2
        - lsl x3, x4, #count in place of ubfiz x3, x4, #count, #count
        - smull x5, w6, w7 in place of smaddl x5, w6, w7, XZR
        - More understandable mov x8, #-304 in place of movn x8, #0x12f
        - Eliminated xzr from register index loads and stores, outputing
          ldr x10, [x11] instead of ldr x10, [x11, xzr]

        Changed the move wide instructions to use hex literals for movz and movk.
        This makes it much easier to decifer sequences of wide moves for large literals.
                Before                       After
          movz   x17, #26136           movz   x17, #0x6618
          movk   x17, #672, lsl #16    movk   x17, #0x2a0, lsl #16
          movk   x17, #1, lsl #32      movk   x17, #0x1, lsl #32

        Verified that all instructions currently generated by the JSC stress tests are
        disassembled.

        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeBitfield::format):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::format):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing2Source::format):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing3Source::format):
        (JSC::ARM64Disassembler::A64DOpcodeExtract::format):
        (JSC::ARM64Disassembler::A64DOpcodeFloatingPointConditionalSelect::format):
        (JSC::ARM64Disassembler::A64DOpcodeFloatingPointIntegerConversions::format):
        (JSC::ARM64Disassembler::A64DOpcodeDmb::format):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreImmediate::format):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreRegisterOffset::format):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreRegisterPair::format):
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreUnsignedImmediate::format):
        (JSC::ARM64Disassembler::A64DOpcodeLogicalShiftedRegister::format):
        (JSC::ARM64Disassembler::A64DOpcodeMoveWide::format):
        (JSC::ARM64Disassembler::A64DOpcodeDmbIsh::format): Deleted.
        (JSC::ARM64Disassembler::A64DOpcodeDmbIshSt::format): Deleted.
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcode::appendSignedImmediate64):
        (JSC::ARM64Disassembler::A64DOpcode::appendUnsignedHexImmediate):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::opName):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::sBit):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::opCode):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::opCode2):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing1Source::opNameIndex):
        (JSC::ARM64Disassembler::A64DOpcodeDataProcessing3Source::opName):
        (JSC::ARM64Disassembler::A64DOpcodeFloatingPointConditionalSelect::opName):
        (JSC::ARM64Disassembler::A64DOpcodeFloatingPointConditionalSelect::condition):
        (JSC::ARM64Disassembler::A64DOpcodeDmb::option):
        (JSC::ARM64Disassembler::A64DOpcodeDmb::crM):
        (JSC::ARM64Disassembler::A64DOpcodeLogicalShiftedRegister::isMov):
        (JSC::ARM64Disassembler::A64DOpcodeDmbIsh::opName): Deleted.
        (JSC::ARM64Disassembler::A64DOpcodeDmbIshSt::opName): Deleted.

2017-02-17  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] GCActivityCallback::scheduleTimer() keeps pushing dispatch into the future
        https://bugs.webkit.org/show_bug.cgi?id=168363

        Reviewed by Carlos Garcia Campos.

        Mimic the USE(CF) implementation of GCActivityCallback and HeapTimer by
        scheduling the timer a decade into the future instead of completely
        cancelling it. That way new dispatch times for GCActivityCallback can be
        computed by simply deducting the difference in the new and previous
        delay from the GSource's current dispatch time. Previously we handled an
        extra 'paused' state (where m_delay was -1) and allowed for a delay of
        an infinite value to be valid, complicating the next dispatch time
        computation.

        HeapTimer gains the static s_decade variable. The dispatch function in
        heapTimerSourceFunctions only dispatches the callback, which now delays
        the GSource by a decade. HeapTimer::scheduleTimer() simply schedules the
        source to dispatch in the specified amount of time, and cancelTimer()
        'cancels' the source by setting the dispatch time to a decade.

        GCActivityCallback constructor initializes the delay to the s_decade
        value and immediately sets the ready time for GSource a decade into the
        future, avoiding the default -1 value as the ready time that would cause
        problems in scheduleTimer(). scheduleTimer() doesn't special-case the
        zero-delay value anymore, instead it just computes the difference
        between the old and the new delay and rolls back the GSource's ready
        time for that amount. cancelTimer() sets m_delay to the decade value and
        delays the GSource for that same amount.

        * heap/GCActivityCallback.cpp:
        (JSC::GCActivityCallback::GCActivityCallback):
        (JSC::GCActivityCallback::scheduleTimer):
        (JSC::GCActivityCallback::cancelTimer):
        * heap/GCActivityCallback.h:
        * heap/HeapTimer.cpp:
        (JSC::HeapTimer::HeapTimer):
        (JSC::HeapTimer::scheduleTimer):
        (JSC::HeapTimer::cancelTimer):
        * heap/HeapTimer.h:

2017-02-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop PassRefPtr from ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=168455

        Reviewed by Geoffrey Garen.

        This patch finally drops all the PassRefPtr in JSC.
        We changed PassRefPtr<ArrayBuffer> to RefPtr<ArrayBuffer>&&.
        Since ArrayBuffer may be nullptr if the array is neutered,
        we hold it as RefPtr<> instead of Ref<>.

        And we also drops 2 files, TypedArrayBase.h and IntegralTypedArrayBase.h.
        They are not used (and they are not referenced from the project file).

        * inspector/JavaScriptCallFrame.h:
        * jsc.cpp:
        (functionDollarAgentReceiveBroadcast):
        * runtime/ArrayBufferView.cpp:
        (JSC::ArrayBufferView::ArrayBufferView):
        * runtime/ArrayBufferView.h:
        (JSC::ArrayBufferView::possiblySharedBuffer):
        (JSC::ArrayBufferView::unsharedBuffer):
        (JSC::ArrayBufferView::verifySubRangeLength):
        (JSC::ArrayBufferView::clampOffsetAndNumElements):
        * runtime/ClassInfo.h:
        * runtime/DataView.cpp:
        (JSC::DataView::DataView):
        (JSC::DataView::create):
        * runtime/DataView.h:
        * runtime/GenericTypedArrayView.h:
        * runtime/GenericTypedArrayViewInlines.h:
        (JSC::GenericTypedArrayView<Adaptor>::GenericTypedArrayView):
        (JSC::GenericTypedArrayView<Adaptor>::create):
        (JSC::GenericTypedArrayView<Adaptor>::subarray):
        * runtime/IntegralTypedArrayBase.h: Removed.
        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::JSArrayBuffer):
        (JSC::JSArrayBuffer::create):
        * runtime/JSArrayBuffer.h:
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
        * runtime/JSArrayBufferView.h:
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::possiblySharedImpl):
        (JSC::JSArrayBufferView::unsharedImpl):
        * runtime/JSCell.cpp:
        (JSC::JSCell::slowDownAndWasteMemory):
        (JSC::JSCell::getTypedArrayImpl):
        * runtime/JSCell.h:
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::create):
        (JSC::JSDataView::possiblySharedTypedImpl):
        (JSC::JSDataView::unsharedTypedImpl):
        (JSC::JSDataView::getTypedArrayImpl):
        * runtime/JSDataView.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::create):
        (JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::getTypedArrayImpl):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSTypedArrays.cpp:
        (JSC::createUint8TypedArray):
        * runtime/TypedArrayBase.h: Removed.

2017-02-16  Keith Miller  <keith_miller@apple.com>

        ASSERTION FAILED: vm.heap.mutatorState() == MutatorState::Running || vm.apiLock().ownerThread() != std::this_thread::get_id()
        https://bugs.webkit.org/show_bug.cgi?id=168354

        Reviewed by Geoffrey Garen.

        Instead of adding a custom vmEntryGlobalObject for the debugger
        we can just have it use vmEntryScope instead.

        * debugger/Debugger.cpp:
        (JSC::Debugger::detach):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::vmEntryGlobalObjectForDebuggerDetach): Deleted.
        * interpreter/CallFrame.h:

2017-02-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop build.

        * heap/Heap.cpp:
        (JSC::Heap::stopThePeriphery):
        * runtime/JSLock.cpp:

2017-02-10  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        This turns the collector thread's workflow into a state machine, so that the mutator thread can
        run it directly. This reduces the amount of synchronization we do with the collector thread, and
        means that most apps will never start the collector thread. The collector thread will still start
        when we need to finish collecting and we don't have heap access.
        
        In this new world, "stopping the world" means relinquishing control of collection to the mutator.
        This means tracking who is conducting collection. I use the GCConductor enum to say who is
        conducting. It's either GCConductor::Mutator or GCConductor::Collector. I use the term "conn" to
        refer to the concept of conducting (having the conn, relinquishing the conn, taking the conn).
        So, stopping the world means giving the mutator the conn. Releasing heap access means giving the
        collector the conn.
        
        This meant bringing back the conservative scan of the calling thread. It turns out that this
        scan was too slow to be called on each GC increment because apparently setjmp() now does system
        calls. So, I wrote our own callee save register saving for the GC. Then I had doubts about
        whether or not it was correct, so I also made it so that the GC only rarely asks for the register
        state. I think we still want to use my register saving code instead of setjmp because setjmp
        seems to save things we don't need, and that could make us overly conservative.
        
        It turns out that this new scheduling discipline makes the old space-time scheduler perform
        better than the new stochastic space-time scheduler on systems with fewer than 4 cores. This is
        because the mutator having the conn enables us to time the mutator<->collector context switches
        by polling. The OS is never involved. So, we can use super precise timing. This allows the old
        space-time schduler to shine like it hadn't before.
        
        The splay results imply that this is all a good thing. On 2-core systems, this reduces pause
        times by 40% and it increases throughput about 5%. On 1-core systems, this reduces pause times by
        half and reduces throughput by 8%. On 4-or-more-core systems, this doesn't seem to have much
        effect.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::ThreadBody::ThreadBody):
        (JSC::DFG::Worklist::dump):
        (JSC::DFG::numberOfWorklists):
        (JSC::DFG::ensureWorklistForIndex):
        (JSC::DFG::existingWorklistForIndexOrNull):
        (JSC::DFG::existingWorklistForIndex):
        * dfg/DFGWorklist.h:
        (JSC::DFG::numberOfWorklists): Deleted.
        (JSC::DFG::ensureWorklistForIndex): Deleted.
        (JSC::DFG::existingWorklistForIndexOrNull): Deleted.
        (JSC::DFG::existingWorklistForIndex): Deleted.
        * heap/CollectingScope.h: Added.
        (JSC::CollectingScope::CollectingScope):
        (JSC::CollectingScope::~CollectingScope):
        * heap/CollectorPhase.cpp: Added.
        (JSC::worldShouldBeSuspended):
        (WTF::printInternal):
        * heap/CollectorPhase.h: Added.
        * heap/EdenGCActivityCallback.cpp:
        (JSC::EdenGCActivityCallback::lastGCLength):
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        (JSC::FullGCActivityCallback::lastGCLength):
        * heap/GCConductor.cpp: Added.
        (JSC::gcConductorShortName):
        (WTF::printInternal):
        * heap/GCConductor.h: Added.
        * heap/Heap.cpp:
        (JSC::Heap::Thread::Thread):
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::gatherStackRoots):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::shouldCollectInCollectorThread):
        (JSC::Heap::collectInCollectorThread):
        (JSC::Heap::checkConn):
        (JSC::Heap::runCurrentPhase):
        (JSC::Heap::runNotRunningPhase):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::runFixpointPhase):
        (JSC::Heap::runConcurrentPhase):
        (JSC::Heap::runReloopPhase):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::changePhase):
        (JSC::Heap::finishChangingPhase):
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::resumeThePeriphery):
        (JSC::Heap::stopTheMutator):
        (JSC::Heap::resumeTheMutator):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectInMutatorThread):
        (JSC::Heap::collectInMutatorThreadImpl):
        (JSC::Heap::waitForCollector):
        (JSC::Heap::acquireAccessSlow):
        (JSC::Heap::releaseAccessSlow):
        (JSC::Heap::relinquishConn):
        (JSC::Heap::finishRelinquishingConn):
        (JSC::Heap::handleNeedFinalize):
        (JSC::Heap::notifyThreadStopping):
        (JSC::Heap::finalize):
        (JSC::Heap::requestCollection):
        (JSC::Heap::waitForCollection):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::didFinishCollection):
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::preventCollection):
        (JSC::Heap::performIncrement):
        (JSC::Heap::markToFixpoint): Deleted.
        (JSC::Heap::shouldCollectInThread): Deleted.
        (JSC::Heap::collectInThread): Deleted.
        (JSC::Heap::stopTheWorld): Deleted.
        (JSC::Heap::resumeTheWorld): Deleted.
        * heap/Heap.h:
        (JSC::Heap::machineThreads):
        (JSC::Heap::lastFullGCLength):
        (JSC::Heap::lastEdenGCLength):
        (JSC::Heap::increaseLastFullGCLength):
        * heap/HeapInlines.h:
        (JSC::Heap::mutatorIsStopped): Deleted.
        * heap/HeapStatistics.cpp: Removed.
        * heap/HeapStatistics.h: Removed.
        * heap/HelpingGCScope.h: Removed.
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::gatherFromCurrentThread):
        (JSC::MachineThreads::gatherConservativeRoots):
        * heap/MachineStackMarker.h:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::sweep):
        * heap/MutatorState.cpp:
        (WTF::printInternal):
        * heap/MutatorState.h:
        * heap/RegisterState.h: Added.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively):
        (JSC::SlotVisitor::donateAll):
        * heap/StochasticSpaceTimeMutatorScheduler.cpp:
        (JSC::StochasticSpaceTimeMutatorScheduler::beginCollection):
        (JSC::StochasticSpaceTimeMutatorScheduler::synchronousDrainingDidStall):
        (JSC::StochasticSpaceTimeMutatorScheduler::timeToStop):
        * heap/SweepingScope.h: Added.
        (JSC::SweepingScope::SweepingScope):
        (JSC::SweepingScope::~SweepingScope):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Thread::Thread):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionFlashHeapAccess):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        * runtime/Options.h:
        * runtime/TestRunnerUtils.cpp:
        (JSC::finalizeStatsAtEndOfTesting):

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Remove EFL from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=168459

        Reviewed by Geoffrey Garen.

        * heap/GCActivityCallback.cpp:
        (JSC::GCActivityCallback::GCActivityCallback):
        (JSC::GCActivityCallback::cancelTimer):
        (JSC::GCActivityCallback::didAllocate):
        * heap/GCActivityCallback.h:
        * heap/HeapTimer.cpp:
        (JSC::HeapTimer::add): Deleted.
        (JSC::HeapTimer::stop): Deleted.
        (JSC::HeapTimer::timerEvent): Deleted.
        * heap/HeapTimer.h:
        * inspector/EventLoop.cpp:
        (Inspector::EventLoop::cycle):
        * jsc.cpp:
        (main):
        * tools/CodeProfiling.cpp:
        (JSC::CodeProfiling::begin):
        (JSC::CodeProfiling::end):

2017-02-15  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: Inspector::fromProtocolString<T> should return std::optional<T>
        https://bugs.webkit.org/show_bug.cgi?id=168018
        <rdar://problem/30468779>

        Reviewed by Joseph Pecoraro.

        These methods parse untrusted string inputs, so they should return an optional instead
        of asserting or crashing when the input is not usable.

        Update various pieces of generated code to handle the error case gracefully.

        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command):
        (ObjCBackendDispatcherImplementationGenerator._generate_invocation_for_command):
        The local variable holding the ObjC-friendly converted value should take a std::optional
        when converting an enum from a string into an NS_ENUM value. If the enum command parameter
        is not optional, then send a response with a command failure message and return.

        The optional enum parameter case is not handled correctly, but no existing code requires it.

        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_from_protocol_string):
        Fix signature and remove default case ASSERT_NOT_REACHED.

        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_method_implementation):
        Since this code assumes all inputs to be valid and throws an exception otherwise, we
        try to convert the enum and throw an exception if it's nullopt. If it's valid, write to outValue.

        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload):
        The local variable holding the ObjC-friendly converted value should take a std::optional
        when converting an enum from a string into an NS_ENUM value. If the enum command parameter
        is not optional, then throw an exception if the value is nullopt. Otherwise, allow it to be empty.

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.protocol_to_objc_expression_for_member):
        Unconditionally unwrap the optional. This expression is only used inside the typechecked
        ObjC protocol objects. In this case we are guaranteed to have already initialized the enum with a valid
        value, but must store it as a string inside a wrapped InspectorObject. The getter needs to
        re-convert the stored string into an NS_ENUM value.

        * inspector/scripts/codegen/objc_generator_templates.py:
        Update type template for fromProtocolString<T>().

        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/domain-availability.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result:
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
        Rebaseline tests.

2017-02-16  Keith Miller  <keith_miller@apple.com>

        ASSERTION FAILED: vm.heap.mutatorState() == MutatorState::Running || vm.apiLock().ownerThread() != std::this_thread::get_id()
        https://bugs.webkit.org/show_bug.cgi?id=168354

        Reviewed by Filip Pizlo.

        Add a new vmEntryGlobalObject method for the debugger so that
        the debugger does not crash in debug builds when trying to
        detach itself from a global object.

        * debugger/Debugger.cpp:
        (JSC::Debugger::detach):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::vmEntryGlobalObjectForDebuggerDetach):
        * interpreter/CallFrame.h:

2017-02-16  Keith Miller  <keith_miller@apple.com>

        Refactor AccessCase to be more like B3Value
        https://bugs.webkit.org/show_bug.cgi?id=168408

        Reviewed by Filip Pizlo.

        This patch makes AccessCase (and new subclasses) more like B3Value. In the new system each
        type has an associated AccessCase subclass. For instance any getter should use the
        GetterSetterAccessCase subclass. The new system is easier to follow since you no longer need
        to know exactly which members are used by which types. The subclass to AccessType mapping is:

        GetterSetterAccessCase:
            Getter
            CustomAccessorGetter
            CustomValueGetter
            Setter

        ProxyableAccessCase:
            Load
            Miss
            GetGetter

        IntrinsicGetterAccessCase:
            IntrinsicGetter

        AccessCase:
            Everything else

        It also has the additional advantage that it uses less memory for the cases where we would have needed
        rare data in the past but that case would only use a small bit of it.

        This patch also removes megamorphic loads and renames some TryGetById related enum values from Pure to Try.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/AccessCase.cpp: Added.
        (JSC::AccessCase::AccessCase):
        (JSC::AccessCase::create):
        (JSC::AccessCase::~AccessCase):
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::clone):
        (JSC::AccessCase::commit):
        (JSC::AccessCase::guardedByStructureCheck):
        (JSC::AccessCase::doesCalls):
        (JSC::AccessCase::couldStillSucceed):
        (JSC::AccessCase::canReplace):
        (JSC::AccessCase::dump):
        (JSC::AccessCase::visitWeak):
        (JSC::AccessCase::propagateTransitions):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generate):
        (JSC::AccessCase::generateImpl):
        * bytecode/AccessCase.h: Added.
        (JSC::AccessCase::as):
        (JSC::AccessCase::create):
        (JSC::AccessCase::type):
        (JSC::AccessCase::state):
        (JSC::AccessCase::offset):
        (JSC::AccessCase::structure):
        (JSC::AccessCase::newStructure):
        (JSC::AccessCase::conditionSet):
        (JSC::AccessCase::alternateBase):
        (JSC::AccessCase::additionalSet):
        (JSC::AccessCase::viaProxy):
        (JSC::AccessCase::isGetter):
        (JSC::AccessCase::isAccessor):
        (JSC::AccessCase::dumpImpl):
        (JSC::AccessCase::resetState):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetterSetterAccessCase.cpp: Added.
        (JSC::GetterSetterAccessCase::GetterSetterAccessCase):
        (JSC::GetterSetterAccessCase::create):
        (JSC::GetterSetterAccessCase::~GetterSetterAccessCase):
        (JSC::GetterSetterAccessCase::clone):
        (JSC::GetterSetterAccessCase::alternateBase):
        (JSC::GetterSetterAccessCase::dumpImpl):
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/GetterSetterAccessCase.h: Added.
        (JSC::GetterSetterAccessCase::callLinkInfo):
        (JSC::GetterSetterAccessCase::customSlotBase):
        (JSC::GetterSetterAccessCase::domJIT):
        * bytecode/IntrinsicGetterAccessCase.cpp: Added.
        (JSC::IntrinsicGetterAccessCase::IntrinsicGetterAccessCase):
        (JSC::IntrinsicGetterAccessCase::create):
        (JSC::IntrinsicGetterAccessCase::~IntrinsicGetterAccessCase):
        (JSC::IntrinsicGetterAccessCase::clone):
        * bytecode/IntrinsicGetterAccessCase.h: Added.
        (JSC::IntrinsicGetterAccessCase::intrinsicFunction):
        (JSC::IntrinsicGetterAccessCase::intrinsic):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        (WTF::printInternal):
        (JSC::AccessCase::AccessCase): Deleted.
        (JSC::AccessCase::tryGet): Deleted.
        (JSC::AccessCase::get): Deleted.
        (JSC::AccessCase::megamorphicLoad): Deleted.
        (JSC::AccessCase::replace): Deleted.
        (JSC::AccessCase::transition): Deleted.
        (JSC::AccessCase::setter): Deleted.
        (JSC::AccessCase::in): Deleted.
        (JSC::AccessCase::getLength): Deleted.
        (JSC::AccessCase::getIntrinsic): Deleted.
        (JSC::AccessCase::~AccessCase): Deleted.
        (JSC::AccessCase::fromStructureStubInfo): Deleted.
        (JSC::AccessCase::clone): Deleted.
        (JSC::AccessCase::commit): Deleted.
        (JSC::AccessCase::guardedByStructureCheck): Deleted.
        (JSC::AccessCase::alternateBase): Deleted.
        (JSC::AccessCase::doesCalls): Deleted.
        (JSC::AccessCase::couldStillSucceed): Deleted.
        (JSC::AccessCase::canBeReplacedByMegamorphicLoad): Deleted.
        (JSC::AccessCase::canReplace): Deleted.
        (JSC::AccessCase::dump): Deleted.
        (JSC::AccessCase::visitWeak): Deleted.
        (JSC::AccessCase::propagateTransitions): Deleted.
        (JSC::AccessCase::generateWithGuard): Deleted.
        (JSC::AccessCase::generate): Deleted.
        (JSC::AccessCase::generateImpl): Deleted.
        (JSC::AccessCase::emitDOMJITGetter): Deleted.
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessCase::type): Deleted.
        (JSC::AccessCase::state): Deleted.
        (JSC::AccessCase::offset): Deleted.
        (JSC::AccessCase::viaProxy): Deleted.
        (JSC::AccessCase::structure): Deleted.
        (JSC::AccessCase::newStructure): Deleted.
        (JSC::AccessCase::conditionSet): Deleted.
        (JSC::AccessCase::intrinsicFunction): Deleted.
        (JSC::AccessCase::intrinsic): Deleted.
        (JSC::AccessCase::domJIT): Deleted.
        (JSC::AccessCase::additionalSet): Deleted.
        (JSC::AccessCase::customSlotBase): Deleted.
        (JSC::AccessCase::isGetter): Deleted.
        (JSC::AccessCase::callLinkInfo): Deleted.
        (JSC::AccessCase::RareData::RareData): Deleted.
        * bytecode/ProxyableAccessCase.cpp: Added.
        (JSC::ProxyableAccessCase::ProxyableAccessCase):
        (JSC::ProxyableAccessCase::create):
        (JSC::ProxyableAccessCase::~ProxyableAccessCase):
        (JSC::ProxyableAccessCase::clone):
        (JSC::ProxyableAccessCase::dumpImpl):
        * bytecode/ProxyableAccessCase.h: Added.
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileTryGetById):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetById):
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::canEmitIntrinsicGetter):
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):
        (JSC::AccessCase::canEmitIntrinsicGetter): Deleted.
        (JSC::AccessCase::emitIntrinsicGetter): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_try_get_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_try_get_by_id):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        (JSC::tryCachePutByID):
        (JSC::tryRepatchIn):
        * jit/Repatch.h:
        * runtime/Options.h:

2017-02-16  Filip Pizlo  <fpizlo@apple.com>

        JSONParseTest needs to hold the lock when the VM is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=168450

        Rubber stamped by Alex Christensen.

        * API/tests/JSONParseTest.cpp:
        (testJSONParse):

2017-02-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop PassRefPtr in inspector/
        https://bugs.webkit.org/show_bug.cgi?id=168420

        Reviewed by Alex Christensen.

        Drop PassRefPtr uses.
        And use Ref<Inspector::ScriptArguments> and Ref<ScriptCallStack> as much as possible.
        It drops some unnecessary null checks.

        * debugger/Debugger.cpp:
        (JSC::Debugger::hasBreakpoint):
        (JSC::Debugger::currentDebuggerCallFrame):
        * debugger/Debugger.h:
        * inspector/AsyncStackTrace.cpp:
        (Inspector::AsyncStackTrace::create):
        (Inspector::AsyncStackTrace::AsyncStackTrace):
        (Inspector::AsyncStackTrace::buildInspectorObject):
        (Inspector::AsyncStackTrace::truncate):
        * inspector/AsyncStackTrace.h:
        * inspector/ConsoleMessage.cpp:
        (Inspector::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::InjectedScriptManager):
        (Inspector::InjectedScriptManager::injectedScriptHost):
        * inspector/InjectedScriptManager.h:
        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::messageWithTypeAndLevel):
        (Inspector::JSGlobalObjectConsoleClient::count):
        (Inspector::JSGlobalObjectConsoleClient::timeEnd):
        (Inspector::JSGlobalObjectConsoleClient::timeStamp):
        (Inspector::JSGlobalObjectConsoleClient::warnUnimplemented):
        * inspector/JSGlobalObjectConsoleClient.h:
        ConsoleClient now takes Ref<ScriptArgument>&& instead of RefPtr<ScriptArgument>&&.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace):
        (Inspector::JSGlobalObjectInspectorController::reportAPIException):
        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::JSJavaScriptCallFrame):
        (Inspector::toJS):
        * inspector/JSJavaScriptCallFrame.h:
        (Inspector::JSJavaScriptCallFrame::create):
        * inspector/JavaScriptCallFrame.cpp:
        (Inspector::JavaScriptCallFrame::JavaScriptCallFrame):
        (Inspector::JavaScriptCallFrame::caller):
        * inspector/JavaScriptCallFrame.h:
        (Inspector::JavaScriptCallFrame::create):
        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::evaluateBreakpointAction):
        (Inspector::ScriptDebugServer::dispatchDidPause):
        (Inspector::ScriptDebugServer::exceptionOrCaughtValue):
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::stopTiming):
        (Inspector::InspectorConsoleAgent::count):
        * inspector/agents/InspectorConsoleAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
        * runtime/ConsoleClient.cpp:
        (JSC::ConsoleClient::printConsoleMessageWithArguments):
        (JSC::ConsoleClient::internalMessageWithTypeAndLevel):
        (JSC::ConsoleClient::logWithLevel):
        (JSC::ConsoleClient::dir):
        (JSC::ConsoleClient::dirXML):
        (JSC::ConsoleClient::table):
        (JSC::ConsoleClient::trace):
        (JSC::ConsoleClient::assertion):
        (JSC::ConsoleClient::group):
        (JSC::ConsoleClient::groupCollapsed):
        (JSC::ConsoleClient::groupEnd):
        * runtime/ConsoleClient.h:
        * runtime/ConsoleObject.cpp:
        (JSC::consoleLogWithLevel):
        (JSC::consoleProtoFuncDir):
        (JSC::consoleProtoFuncDirXML):
        (JSC::consoleProtoFuncTable):
        (JSC::consoleProtoFuncTrace):
        (JSC::consoleProtoFuncAssert):
        (JSC::consoleProtoFuncCount):
        (JSC::consoleProtoFuncTimeStamp):
        (JSC::consoleProtoFuncGroup):
        (JSC::consoleProtoFuncGroupCollapsed):
        (JSC::consoleProtoFuncGroupEnd):

2017-02-15  Keith Miller  <keith_miller@apple.com>

        Weak should not use jsCast in its accessors
        https://bugs.webkit.org/show_bug.cgi?id=168406

        Reviewed by Filip Pizlo.

        This can cause assertion failures in WebCore where classes might remove themselves
        from a data structure in a weak reference, if that reference is still alive.

        * heap/WeakInlines.h:
        (JSC::>):
        (JSC::Weak<T>::operator):
        (JSC::Weak<T>::get):

2017-02-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Web Inspector: allow import() inside the inspector
        https://bugs.webkit.org/show_bug.cgi?id=167457

        Reviewed by Ryosuke Niwa.

        We relax import module hook to accept null SourceOrigin.
        Such a script can be evaluated from the inspector console.

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):

2017-02-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Update module namespace object according to the latest ECMA262
        https://bugs.webkit.org/show_bug.cgi?id=168280

        Reviewed by Saam Barati.

        Reflect updates to the module namespace object.

        1. @@iterator property is dropped[1].
        2. @@toStringTag property becomes non-configurable[1].
        3. delete with Symbol should be delegated to the JSObject's one[2].

        [1]: https://tc39.github.io/ecma262/#sec-module-namespace-objects
        [2]: https://github.com/tc39/ecma262/pull/767

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::JSModuleNamespaceObject::deleteProperty):
        (JSC::moduleNamespaceObjectSymbolIterator): Deleted.

2017-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build after r212424.

        Add missing file.

        * inspector/remote/RemoteInspector.cpp: Added.
        (Inspector::RemoteInspector::startDisabled):
        (Inspector::RemoteInspector::nextAvailableTargetIdentifier):
        (Inspector::RemoteInspector::registerTarget):
        (Inspector::RemoteInspector::unregisterTarget):
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::updateClientCapabilities):
        (Inspector::RemoteInspector::setRemoteInspectorClient):
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::setupCompleted):
        (Inspector::RemoteInspector::waitingForAutomaticInspection):
        (Inspector::RemoteInspector::clientCapabilitiesDidChange):
        (Inspector::RemoteInspector::stop):
        (Inspector::RemoteInspector::listingForTarget):
        (Inspector::RemoteInspector::updateHasActiveDebugSession):

2017-02-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop PassRefPtr in bytecompiler/
        https://bugs.webkit.org/show_bug.cgi?id=168374

        Reviewed by Sam Weinig.

        This patch drops PassRefPtr in bytecompiler directory.
        We carefully change this to Ref<>. And we use Ref<Label>
        as much as possible instead of using RefPtr<Label>.
        And use Label& instead of Label* as much as possible.

        Currently we do not apply this change for RefPtr<RegisterID>,
        to reduce the size of this patch.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::initializeDefaultParameterValuesAndSetupFunctionScopeStack):
        (JSC::BytecodeGenerator::newLabelScope):
        (JSC::BytecodeGenerator::newLabel):
        (JSC::BytecodeGenerator::newEmittedLabel):
        Introduce a new helper function, which returns new label that is emitted right here.

        (JSC::BytecodeGenerator::emitLabel):
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        Drop returning Ref<Label> since nobody uses it.

        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::breakTarget):
        (JSC::BytecodeGenerator::pushTry):
        (JSC::BytecodeGenerator::popTry):
        (JSC::prepareJumpTableForSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitIteratorNext):
        (JSC::BytecodeGenerator::emitIteratorNextWithValue):
        (JSC::BytecodeGenerator::emitIteratorClose):
        (JSC::BytecodeGenerator::pushIndexedForInScope):
        (JSC::BytecodeGenerator::pushStructureForInScope):
        (JSC::BytecodeGenerator::invalidateForInContextForLocal):
        (JSC::BytecodeGenerator::emitRequireObjectCoercible):
        (JSC::BytecodeGenerator::emitYieldPoint):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::emitJumpIf):
        * bytecompiler/BytecodeGenerator.h:
        FinallyJump, FinallyContext, TryData, TryContext and TryRange hold Ref<Label>
        instead of RefPtr<Label>. They are never nullptr.

        (JSC::FinallyJump::FinallyJump):
        (JSC::FinallyContext::FinallyContext):
        (JSC::FinallyContext::registerJump):
        (JSC::BytecodeGenerator::emitNodeInConditionContext):
        (JSC::BytecodeGenerator::emitNodeForLeftHandSide):
        * bytecompiler/Label.h:
        Make Label noncopyable.

        * bytecompiler/LabelScope.h:
        (JSC::LabelScope::LabelScope):
        (JSC::LabelScope::breakTarget):
        breakTarget always returns Label&. On the other hand, continueTarget may be nullptr.
        So it returns Label*.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ExpressionNode::emitBytecodeInConditionContext):
        (JSC::ConstantNode::emitBytecodeInConditionContext):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::CallFunctionCallDotNode::emitBytecode):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        (JSC::LogicalNotNode::emitBytecodeInConditionContext):
        (JSC::BinaryOpNode::emitBytecodeInConditionContext):
        (JSC::InstanceOfNode::emitBytecode):
        (JSC::LogicalOpNode::emitBytecode):
        (JSC::LogicalOpNode::emitBytecodeInConditionContext):
        (JSC::ConditionalNode::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::trivialTarget):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::trivialTarget):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::TryNode::emitBytecode):
        (JSC::FunctionNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        (JSC::assignDefaultValueIfUndefined):
        (JSC::ArrayPatternNode::bindValue):
        Use Ref<Label> and Label&.

        * parser/Nodes.h:

2017-02-15  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212394.

        Fixed iOS WebInspector

        Reverted changeset:

        "Unreviewed, rolling out r212169."
        https://bugs.webkit.org/show_bug.cgi?id=166681
        http://trac.webkit.org/changeset/212394

2017-02-15  Guillaume Emont  <guijemont@igalia.com>

        MIPS: add missing implementations of load8SignedExtendTo32()

        JSC: missing implementations of MacroAssemblerMIPS::load8SignedExtendTo32()
        https://bugs.webkit.org/show_bug.cgi?id=168350

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load8SignedExtendTo32):
        Add missing implementations

2017-02-15  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212169.

        Broke iOS WebInspector

        Reverted changeset:

        "WebInspector: refactor RemoteInspector to move cocoa specific
        code to their own files"
        https://bugs.webkit.org/show_bug.cgi?id=166681
        http://trac.webkit.org/changeset/212169

2017-02-15  Chris Dumez  <cdumez@apple.com>

        Expose Symbol.toPrimitive / valueOf on Location instances
        https://bugs.webkit.org/show_bug.cgi?id=168295

        Reviewed by Geoffrey Garen, Keith Miller and Mark Lam.

        Cache origin objectProtoValueOf function on JSGlobalObject.

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

2017-02-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=168320

        Reviewed by Saam Barati.

        * API/JSContextRef.cpp:
        (JSGlobalContextCreateInGroup):
        Use Ref<VM> from the factory function.

        * API/JSScriptRef.cpp:
        (OpaqueJSScript::create):
        Return Ref<> instead.

        * API/tests/JSONParseTest.cpp:
        (testJSONParse):
        Use Ref<VM>.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::finalizeCodeWithoutDisassembly):
        Use reference since we already perform null check.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
        Take Ref<>&& instead of PassRefPtr<>.

        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::setStub):
        (JSC::CallLinkInfo::setSlowStub):
        Take Ref<>&& instead of PassRefPtr<>.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        Take RefPtr<SourceProvider>. Currently, the SourceProvider would be nullptr.
        We will change it to Ref<SourceProvider> in https://bugs.webkit.org/show_bug.cgi?id=168325.

        (JSC::CodeBlock::finishCreation):
        Take Ref<TypeSet>&&.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setJITCode):
        Take Ref<>&& instead.

        (JSC::CodeBlock::jitCode):
        Return RefPtr<> instead.

        * bytecode/EvalCodeBlock.h:
        (JSC::EvalCodeBlock::create):
        Take RefPtr<>&& instead since SourceProvider woule be nullptr.

        (JSC::EvalCodeBlock::EvalCodeBlock):
        * bytecode/FunctionCodeBlock.h:
        (JSC::FunctionCodeBlock::create):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        Take RefPtr<>&& instead since SourceProvider woule be nullptr.

        * bytecode/GlobalCodeBlock.h:
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        Take RefPtr<>&& instead since SourceProvider woule be nullptr.

        * bytecode/ModuleProgramCodeBlock.h:
        (JSC::ModuleProgramCodeBlock::create):
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock):
        Take RefPtr<>&& instead since SourceProvider woule be nullptr.

        * bytecode/ProgramCodeBlock.h:
        (JSC::ProgramCodeBlock::create):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        Take RefPtr<>&& instead since SourceProvider woule be nullptr.

        * debugger/DebuggerParseData.cpp:
        (JSC::gatherDebuggerParseDataForSource):
        Ensure the provider is not nullptr. It is OK because we already
        touch `provider->xxx` values.

        * dfg/DFGBlockInsertionSet.cpp:
        (JSC::DFG::BlockInsertionSet::insert):
        Take Ref<>&& instead.

        * dfg/DFGBlockInsertionSet.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inlineCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        Pass Ref<>&& to appendBlock.

        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        (JSC::DFG::compile):
        Pass Ref<Plan>&&. And take Ref<>&& callback.

        * dfg/DFGDriver.h:
        * dfg/DFGGraph.h:
        appendBlock takes Ref<>&&.

        (JSC::DFG::Graph::appendBlock):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::jitCode):
        * dfg/DFGJITFinalizer.cpp:
        (JSC::DFG::JITFinalizer::JITFinalizer):
        Take Ref<JITCode>&&.

        (JSC::DFG::JITFinalizer::finalize):
        (JSC::DFG::JITFinalizer::finalizeFunction):
        (JSC::DFG::JITFinalizer::finalizeCommon):
        Pass compilation reference since we already perform null check.

        * dfg/DFGJITFinalizer.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::enqueue):
        Take Ref<Plan>&&.

        * dfg/DFGWorklist.h:
        * ftl/FTLJITFinalizer.cpp:
        (JSC::FTL::JITFinalizer::finalizeFunction):
        Dereference and pass jitCode & compilation references.

        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::createJITStubRoutine):
        Return Ref<> instead.

        * jit/GCAwareJITStubRoutine.h:
        (JSC::createJITStubRoutine):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        Pass compilation reference since we already perform null check.

        * jit/JITStubRoutine.h:
        (JSC::JITStubRoutine::asCodePtr):
        Take Ref<>&& instead. And this drops unnecessary null check.

        * jit/JITThunks.cpp:
        (JSC::JITThunks::hostFunctionStub):
        Pass Ref<> to NativeExecutable::create.

        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        Use Ref<>&& instead.

        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::subExpression):
        Add constructors taking Ref<>&&.
        We still have constructors that take RefPtr<>&&.
        We will change it to Ref<SourceProvider>&& in https://bugs.webkit.org/show_bug.cgi?id=168325.

        * parser/UnlinkedSourceCode.h:
        (JSC::UnlinkedSourceCode::UnlinkedSourceCode):
        Add constructors taking Ref<>&&.
        We still have constructors that take RefPtr<>&&.
        We will change it to Ref<SourceProvider>&& in https://bugs.webkit.org/show_bug.cgi?id=168325.

        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::addCompilation):
        Take Ref<Compilation>&&.

        * profiler/ProfilerDatabase.h:
        Change data structures to hold Ref<> instead of RefPtr<>.

        * runtime/EvalExecutable.h:
        (JSC::EvalExecutable::generatedJITCode):
        Return Ref<> instead.

        * runtime/ExecutableBase.h:
        (JSC::ExecutableBase::generatedJITCodeForCall):
        (JSC::ExecutableBase::generatedJITCodeForConstruct):
        (JSC::ExecutableBase::generatedJITCodeFor):
        Return Ref<> instead.

        * runtime/Identifier.cpp:
        (JSC::Identifier::add):
        (JSC::Identifier::add8):
        * runtime/Identifier.h:
        (JSC::Identifier::add):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::setInputCursor):
        And take Ref<> in this method.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::inputCursor):
        Change m_inputCursor from RefPtr<> to Ref<>.

        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::create):
        (JSC::JSPropertyNameEnumerator::finishCreation):
        Take Ref<PropertyNameArray>&&.

        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/JSString.h:
        (JSC::JSString::JSString):
        Take Ref<StringImpl>&& since we do not allow nullptr in this constructor.

        (JSC::JSString::create):
        (JSC::JSString::createHasOtherOwner):
        Take Ref<StringImpl>&& in these factory functions. And drop unnecessary assertions.

        (JSC::jsSingleCharacterString):
        Use StringImpl::create() which returns Ref<>.

        (JSC::jsNontrivialString):
        Dereference impl() since we ensure that `s.length() > 1`.

        (JSC::jsString):
        Use releaseNonNull() since we ensure that `s.length() > 1`.

        (JSC::jsOwnedString):
        Use releaseNonNull() since we ensure that `s.length() > 1`.

        * runtime/ModuleProgramExecutable.h:
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        Take Ref<JITCode>&&.

        * runtime/NativeExecutable.h:
        * runtime/ProgramExecutable.h:
        Return Ref<JITCode>.

        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArray::releaseData):
        (JSC::PropertyNameArray::setData): Deleted.
        This is not used.

        * runtime/RegExpKey.h:
        (JSC::RegExpKey::RegExpKey):
        Take RefPtr<>&&.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::rep):
        Return StringImpl& since m_reps is already initialized in the constructor.

        (JSC::SmallStrings::createEmptyString):
        Dereference StringImpl::empty().

        (JSC::SmallStrings::createSingleCharacterString):
        Use StringImpl&.

        (JSC::SmallStrings::singleCharacterStringRep):
        Return StringImpl&.

        (JSC::SmallStrings::initialize):
        Use AtomicStringImpl::add instead.

        * runtime/SmallStrings.h:
        * runtime/Structure.cpp:
        (JSC::Structure::toStructureShape):
        Return Ref<>.

        * runtime/Structure.h:
        * runtime/TypeLocationCache.cpp:
        (JSC::TypeLocationCache::getTypeLocation):
        Take RefPtr<TypeSet>&&.

        * runtime/TypeLocationCache.h:
        * runtime/TypeProfilerLog.cpp:
        Pass Ref<>&&.

        (JSC::TypeProfilerLog::processLogEntries):
        * runtime/TypeSet.cpp:
        (JSC::TypeSet::addTypeInformation):
        Take RefPtr<>&& since it can be nullptr.
        And clean up "not found" code.

        (JSC::TypeSet::allStructureRepresentations):
        Use range based iteration.

        (JSC::StructureShape::leastCommonAncestor):
        We found that this method accidentally takes `const Vector<>` instead of `const Vector<>&`.
        And internally, we just use raw pointers since these StructureShapes are owned by the m_proto trees which starts from the given Vector<>.

        (JSC::StructureShape::hasSamePrototypeChain):
        Take const reference instead. And use raw pointers internally.

        (JSC::StructureShape::merge):
        Take Ref<>&&.

        * runtime/TypeSet.h:
        (JSC::StructureShape::setProto):
        Take Ref<>&&.

        * runtime/VM.cpp:
        (JSC::VM::getHostFunction):
        Pass Ref<>&&.

        (JSC::VM::queueMicrotask):
        Take and pass Ref<>&&.

        * runtime/VM.h:
        (JSC::QueuedTask::QueuedTask):
        Take Ref<>&&.

        * tools/FunctionOverrides.cpp:
        (JSC::initializeOverrideInfo):
        We need this change due to Ref<>&& and RefPtr<>&& ambiguity of SourceCode constructors.
        Once SourceCode is fixed to only take Ref<>&&, this change is unnecessary.

2017-02-15  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed trivial buildfix after r212169.
        https://bugs.webkit.org/show_bug.cgi?id=166681

        * PlatformMac.cmake: Removed inspector/remote/RemoteInspectorXPCConnection.mm.

2017-02-14  Mark Lam  <mark.lam@apple.com>

        Add JSC_sweepSynchronously and fix JSC_useZombieMode options.
        https://bugs.webkit.org/show_bug.cgi?id=168257
        <rdar://problem/30451496>

        Reviewed by Filip Pizlo.

        JSC_useZombieMode now basically enables JSC_sweepSynchronously and
        JSC_scribbleFreeCells, which together does the job of zombifying dead objects
        immediately after a GC.

        * heap/Heap.cpp:
        (JSC::Heap::sweepSynchronously):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::finalize):
        (JSC::Heap::didFinishCollection):
        (JSC::Zombify::visit): Deleted.
        (JSC::Zombify::operator()): Deleted.
        (JSC::Heap::zombifyDeadObjects): Deleted.
        * heap/Heap.h:
        (JSC::Heap::isZombified): Deleted.
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:

2017-02-13  Michael Saboff  <msaboff@apple.com>

        asyncDisassembly crashes on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168259

        Reviewed by Filip Pizlo.

        Eliminated the dumping of  the disassembly for the JIT write thunk.
        Not only does it fix the crash, but given the nature of the JIT
        write thunk, we probably don't want to disassemble it anyway.
        
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):

2017-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        C loop build fix attempt after r212207.

        * runtime/Lookup.h:

2017-02-11  Sam Weinig  <sam@webkit.org>

        Remove the remaining functions out of JSDOMBinding
        https://bugs.webkit.org/show_bug.cgi?id=168179

        Reviewed by Darin Adler.

        Move utility functions into more appropriate locations.
        - Move hasIteratorMethod to IteratorOperations.
        - Move nonCachingStaticFunctionGetter to Lookup

        * runtime/IteratorOperations.cpp:
        (JSC::hasIteratorMethod):
        * runtime/IteratorOperations.h:
        * runtime/Lookup.h:
        (JSC::nonCachingStaticFunctionGetter):

2017-02-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Implement (Shared)ArrayBuffer.prototype.byteLength
        https://bugs.webkit.org/show_bug.cgi?id=166476

        Reviewed by Saam Barati.

        `byteLength` becomes getter and is set in ArrayBuffer.prototype
        and SharedArrayBuffer.prototype. This patch implements the
        above getter in native function. We do not have any optimization
        path for that for now since ArrayBuffer.prototype.byteLength is
        not considered a hot function: while TypedArrays have [] accesses,
        ArrayBuffer does not have that. Thus byteLength getter is not so
        meaningful for a hot paths like iterations.

        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::getOwnPropertySlot): Deleted.
        (JSC::JSArrayBuffer::put): Deleted.
        (JSC::JSArrayBuffer::defineOwnProperty): Deleted.
        (JSC::JSArrayBuffer::deleteProperty): Deleted.
        (JSC::JSArrayBuffer::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSArrayBuffer.h:
        (JSC::JSArrayBuffer::impl): Deleted.
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoGetterFuncByteLength):
        (JSC::sharedArrayBufferProtoGetterFuncByteLength):
        (JSC::JSArrayBufferPrototype::finishCreation):

2017-02-10  Saam Barati  <sbarati@apple.com>

        Object allocation sinking phase doesn't properly handle control flow when emitting a PutHint of a materialized object into a PromotedHeapLocation of a still sunken object
        https://bugs.webkit.org/show_bug.cgi?id=168140
        <rdar://problem/30205880>

        Reviewed by Filip Pizlo.

        This patch fixes a bug in allocation sinking phase where
        we don't properly handle control flow when materializing
        an object and also PutHinting that materialization into
        a still sunken object. We were performing the PutHint
        for the materialization at the point of materialization,
        however, we may have materialized along both edges
        of a control flow diamond, in which case, we need to
        also PutHint at the join point. Consider this program:
        
        ```
        bb#0:
        b: PhantomActivation()
        a: PhantomNewFunction()
        c: PutHint(@a, @b, ActivationLoc)
        Branch(#1, #2)
        
        bb#1:
        d: MaterializeActivation()
        e: PutHint(@a, @d, ActivationLoc)
        f: Upsilon(@d, ^p)
        Jump(#3)
        
        bb#2:
        g: MaterializeActivation()
        h: PutHint(@a, @g, ActivationLoc)
        i: Upsilon(@d, ^p)
        Jump(#3)
        
        bb#3:
        p: Phi()
        // What is PromotedHeapLocation(@a, ActivationLoc) here?
        // What would we do if we exited?
        ```
        Before this patch, we didn't perform a PutHint of the Phi.
        However, we need to, otherwise when exit, we won't know
        the value of PromotedHeapLocation(@a, ActivationLoc)
        
        The program we need then, for correctness, is this:
        ```
        bb#0:
        b: PhantomActivation()
        a: PhantomNewFunction()
        c: PutHint(@a, @b, ActivationLoc)
        Branch(#1, #2)
        
        bb#1:
        d: MaterializeActivation()
        e: PutHint(@a, @d, ActivationLoc)
        f: Upsilon(@d, ^p)
        Jump(#3)
        
        bb#2:
        g: MaterializeActivation()
        h: PutHint(@a, @g, ActivationLoc)
        i: Upsilon(@d, ^p)
        Jump(#3)
        
        bb#3:
        p: Phi()
        j: PutHint(@a, @p, ActivationLoc)
        ```
        
        This patch makes it so that we emit the necessary PutHint at node `j`.
        I've also added more validation to the OSRAvailabilityAnalysisPhase
        to catch this problem during validation.

        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):

2017-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebInspector: refactor RemoteInspector to move cocoa specific code to their own files
        https://bugs.webkit.org/show_bug.cgi?id=166681

        Reviewed by Michael Catanzaro.

        Move RemoteConnectionToTarget.mm and RemoteInspector.mm to a cocoa directory renamed with a Cocoa prefix,
        because those are now the cocoa implementation of RemoteConnectionToTarget and RemoteInspector. The
        cross-platform parts of RemoteInspector have been moced to a new RemoteInspector.cpp file. Also moved to cocoa
        directory RemoteInspectorXPCConnection.h and RemoteInspectorXPCConnection.mm keeping the same name. Other than
        that there aren't important code changes, only some cocoa specific types like NSString used in common headers,
        and some other platform ifdefs needed. This is in preparation for adding a remote inspector implementation for
        the GTK+ port.

        * API/JSRemoteInspector.cpp:
        (JSRemoteInspectorSetParentProcessInformation): Add PLATFORM(COCOA) to the ifdef.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * PlatformMac.cmake:
        * inspector/remote/RemoteConnectionToTarget.h: Add platform ifdefs for cocoa specific parts and change
        sendMessageToTarget to receive a WTF String instead of an NSString.
        * inspector/remote/RemoteControllableTarget.h: Add platform ifdefs for CF specific parts.
        * inspector/remote/RemoteInspectionTarget.h:
        * inspector/remote/RemoteInspector.cpp: Added.
        (Inspector::RemoteInspector::startDisabled):
        (Inspector::RemoteInspector::nextAvailableTargetIdentifier):
        (Inspector::RemoteInspector::registerTarget):
        (Inspector::RemoteInspector::unregisterTarget):
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::updateClientCapabilities):
        (Inspector::RemoteInspector::setRemoteInspectorClient):
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::setupCompleted):
        (Inspector::RemoteInspector::waitingForAutomaticInspection):
        (Inspector::RemoteInspector::clientCapabilitiesDidChange):
        (Inspector::RemoteInspector::stop):
        (Inspector::RemoteInspector::listingForTarget):
        (Inspector::RemoteInspector::updateHasActiveDebugSession):
        * inspector/remote/RemoteInspector.h: Add platform ifdefs for cocoa specific parts. Also add TargetListing
        typedef to define platform specific types for the listings without more ifdefs.
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm: Renamed from Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.mm.
        (Inspector::RemoteTargetInitializeGlobalQueue):
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::setupRunLoop):
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm: Renamed from Source/JavaScriptCore/inspector/remote/RemoteInspector.mm.
        (Inspector::canAccessWebInspectorMachPort):
        (Inspector::RemoteInspector::singleton):
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::receivedIndicateMessage):
        (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.h: Renamed from Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.h.
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm: Renamed from Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.mm.
        (Inspector::RemoteInspectorXPCConnection::closeFromMessage):

2017-02-10  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: payload initializers for ObjC protocol types handles special-cased property names incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=168141

        Reviewed by Joseph Pecoraro.

        The generated code erroneously uses the ObjC variable name as the payload key,
        rather than the raw type member name. For example, 'identifier' would be used instead of 'id'.

        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload):

        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
        Rebaseline an affected test.

2017-02-10  Mark Lam  <mark.lam@apple.com>

        StructureStubInfo::considerCaching() should write barrier its owner CodeBlock when buffering a new Structure.
        https://bugs.webkit.org/show_bug.cgi?id=168137
        <rdar://problem/28656664>

        Reviewed by Filip Pizlo.

        If we're adding a new structure to StructureStubInfo's bufferedStructures, we
        should write barrier the StubInfo's owner CodeBlock because that structure may be
        collected during the next GC.  Write barrier-ing the owner CodeBlock ensures that
        CodeBlock::finalizeBaselineJITInlineCaches() is called on it during the GC,
        which, in turn, gives the StructureStubInfo the opportunity to filter out the
        dead structure.

        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::considerCaching):
        * jit/JITOperations.cpp:

2017-02-10  Brian Burg  <bburg@apple.com>

        [Cocoa] Web Inspector: generate an NS_ENUM containing platforms supported by the protocol code generator
        https://bugs.webkit.org/show_bug.cgi?id=168019
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        It's useful to have an symbolic value (not a string) for each of the supported platform values.
        Generate this once per protocol for the Objective-C bindings. Covered by existing tests.

        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator.generate_output):
        (ObjCHeaderGenerator._generate_enum_for_platforms):
        Create an NS_ENUM for Platform values in Platforms.

        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.generate_output):
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_for_platforms):
        Add type conversion/parsing methods for the newly added enum.

        * inspector/scripts/codegen/generator.py:
        (Generator.stylized_name_for_enum_value):
        (Generator.stylized_name_for_enum_value.replaceCallback):
        Support arbitrary special-cased substrings in enums, not just all-caps. Add 'IOS' and 'MacOS'.

        * inspector/scripts/codegen/models.py:
        (Platforms):
        Use lower-case string values for platform names, to avoid guesswork.

        (Platforms.__metaclass__):
        (Platforms.__metaclass__.__iter__):
        Make it possible to iterate over Platform instances of Platforms.

        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/domain-availability.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result:
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
        Rebaseline results.

2017-02-09  Filip Pizlo  <fpizlo@apple.com>

        SharedArrayBuffer does not need to be in the transfer list
        https://bugs.webkit.org/show_bug.cgi?id=168079

        Reviewed by Geoffrey Garen and Keith Miller.
        
        Exposes a simple shareWith() API for when you know you want to share the contents of
        a shared buffer. Also a useful explicit operator bool.

        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::shareWith):
        * runtime/ArrayBuffer.h:
        (JSC::ArrayBufferContents::operator bool):

2017-02-09  Mark Lam  <mark.lam@apple.com>

        B3::Procedure::deleteOrphans() should neutralize upsilons with dead phis.
        https://bugs.webkit.org/show_bug.cgi?id=167437
        <rdar://problem/30198083>

        Reviewed by Filip Pizlo.

        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::deleteOrphans):

2017-02-09  Saam Barati  <sbarati@apple.com>

        Sloppy mode: We don't properly hoist functions names "arguments" when we have a non-simple parameter list
        https://bugs.webkit.org/show_bug.cgi?id=167319
        <rdar://problem/30149432>

        Reviewed by Mark Lam.

        When hoisting a function inside sloppy mode, we were assuming all "var"s are inside
        what we call the "var" SymbolTableEntry. This was almost true, execpt for "arguments",
        which has sufficiently weird behavior. "arguments" can be visible to the default
        parameter expressions inside a function, therefore can't go inside the "var"
        SymbolTableEntry since the parameter SymbolTableEntry comes before the "var"
        SymbolTableEntry in the scope chain.  Therefore, if we hoist a function named
        "arguments", then we must also look for that variable inside the parameter scope
        stack entry.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::hoistSloppyModeFunctionIfNecessary):

2017-02-09  Mark Lam  <mark.lam@apple.com>

        Fix max length check in ArrayPrototype.js' concatSlowPath().
        https://bugs.webkit.org/show_bug.cgi?id=167270
        <rdar://problem/30128133>

        Reviewed by Filip Pizlo.

        1. Fixed concatSlowPath() to ensure that the result array length does not exceed
           @MAX_ARRAY_INDEX.  The old code was checking against @MAX_SAFE_INTEGER in some
           cases, but this is overly permissive.

        2. Changed concatSlowPath() to throw a RangeError instead of a TypeError to be
           consistent with the C++ runtime functions in JSArray.cpp.

        3. Changed the RangeError message in concatSlowPath() and JSArray.cpp to "Length
           exceeded the maximum array length" when the error is that the result length
           exceeds MAX_ARRAY_INDEX.  We do this for 2 reasons:
           a. "Length exceeded the maximum array length" is more informative than
              "Invalid array length".
           b. We want to use the same string consistently for the same error.

           There are still 2 places in JSArray.cpp that still throws a RangeError with
           message "Invalid array length".  In those cases, the error is not necessarily
           due to the result length exceeding MAX_ARRAY_INDEX, but is due to attempting to
           set a length value that is not an integer that fits in MAX_ARRAY_INDEX e.g.
           an attempt to set a fractional length value.  Hence, "Invalid array length" is
           appropriate for those cases.

        4. Fixed JSArray::appendMemcpy() to handle overflows when computing the result
           array length.

        * builtins/ArrayPrototype.js:
        (concatSlowPath):
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::concatAppendOne):
        (JSC::arrayProtoPrivateFuncAppendMemcpy):
        * runtime/JSArray.cpp:
        (JSC::JSArray::appendMemcpy):
        (JSC::JSArray::push):

2017-02-09  Mark Lam  <mark.lam@apple.com>

        Constructed object's global object should be the global object of the constructor.
        https://bugs.webkit.org/show_bug.cgi?id=167121
        <rdar://problem/30054759>

        Reviewed by Filip Pizlo and Geoffrey Garen.

        The realm (i.e. globalObject) of any object should be the same as the constructor
        that instantiated the object.  Changed PrototypeMap::createEmptyStructure() to
        be passed the correct globalObject to use instead of assuming it's the same one
        as the prototype object.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/InternalFunctionAllocationProfile.h:
        (JSC::InternalFunctionAllocationProfile::createAllocationStructureFromBase):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfile::initialize):
        * runtime/FunctionRareData.cpp:
        (JSC::FunctionRareData::initializeObjectAllocationProfile):
        * runtime/FunctionRareData.h:
        (JSC::FunctionRareData::createInternalFunctionAllocationStructureFromBase):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createSubclassStructure):
        * runtime/IteratorOperations.cpp:
        (JSC::createIteratorResultObjectStructure):
        * runtime/JSBoundFunction.cpp:
        (JSC::getBoundFunctionStructure):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::allocateAndInitializeRareData):
        (JSC::JSFunction::initializeRareData):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::setTarget):
        * runtime/ObjectConstructor.h:
        (JSC::constructEmptyObject):
        * runtime/PrototypeMap.cpp:
        (JSC::PrototypeMap::createEmptyStructure):
        (JSC::PrototypeMap::emptyStructureForPrototypeFromBaseStructure):
        (JSC::PrototypeMap::emptyObjectStructureForPrototype):
        (JSC::PrototypeMap::clearEmptyObjectStructureForPrototype):
        * runtime/PrototypeMap.h:

2017-02-09  Keith Miller  <keith_miller@apple.com>

        We should not allow Function.caller to be used on native functions
        https://bugs.webkit.org/show_bug.cgi?id=165628

        Reviewed by Mark Lam.

        Also remove unneeded dynamic cast.

        * runtime/JSFunction.cpp:
        (JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor):
        (JSC::JSFunction::callerGetter):

2017-02-08  Keith Miller  <keith_miller@apple.com>

        [JSC] op_in should have ArrayProfile
        https://bugs.webkit.org/show_bug.cgi?id=164581

        Reviewed by Filip Pizlo.

        This patch adds an ArrayProfile to the op_in bytecode. In the
        DFG, if we see that we the key is an int32 we will convert the In
        DFG node to a HasIndexedProperty node instead.

        This patch also flips the two arguments of op_in and the In node
        to reflect the other property lookup bytecodes.

        * bytecode/BytecodeList.json:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::finishCreation):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitIn):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitIn): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::InNode::emitBytecode):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasArrayMode):
        (JSC::DFG::Node::hasInternalMethodType):
        (JSC::DFG::Node::internalMethodType):
        (JSC::DFG::Node::setInternalMethodType):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIn):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileIn):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LowLevelInterpreter.asm:
        * parser/Nodes.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opIn):

2017-02-08  Saam Barati  <sbarati@apple.com>

        Air IRC might spill a terminal that produces a value after the terminal
        https://bugs.webkit.org/show_bug.cgi?id=167919
        <rdar://problem/29754721>

        Reviewed by Filip Pizlo.

        IRC may spill a value-producing terminal (a patchpoint can be a value-producing terminal).
        It used to do this by placing the spill *after* the terminal. This produces an invalid
        graph because no instructions are allowed after the terminal.
        
        I fixed this bug by having a cleanup pass over the IR after IRC is done.
        The pass detects this problem, and fixes it by moving the spill into the
        successors. However, it is careful to detect when the edge to the
        successor is a critical edge. If the value-producing patchpoint is
        the only predecessor of the successor, it just moves the spill
        code to the beginning of the successor. Otherwise, it's a critical
        edge and it breaks it by adding a block that does the spilling then
        jumps to the successor.

        * b3/air/AirInsertionSet.cpp:
        * b3/air/AirInsertionSet.h:
        (JSC::B3::Air::InsertionSet::insertInsts):
        * b3/air/AirIteratedRegisterCoalescing.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled):
        (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled2):
        (JSC::B3::run):

2017-02-07  Mark Lam  <mark.lam@apple.com>

        SigillCrashAnalyzer::analyze() should use a do-while loop instead of a lambda.
        https://bugs.webkit.org/show_bug.cgi?id=167950

        Reviewed by Michael Saboff.

        Lambdas aren't free (apparently, the compiler isn't able to detect that the
        lambda does not escape and can be inlined completely).  So, use a do-while loop
        instead since we don't really need a lambda here.

        * tools/SigillCrashAnalyzer.cpp:

2017-02-05  Mark Lam  <mark.lam@apple.com>

        The SigillCrashAnalyzer should play nicer with client code that may install its own SIGILL handler.
        https://bugs.webkit.org/show_bug.cgi?id=167858

        Reviewed by Michael Saboff.

        Here are the scenarios that may come up:

        1. Client code did not install a SIGILL handler.
           - In this case, once we're done analyzing the SIGILL, we can just restore the
             default handler and return to let the OS do the default action i.e. capture
             a core dump.

        2. Client code installed a SIGILL handler before JSC does.
           - In this case, we will see a non-null handler returned as the old signal
             handler when we install ours.
           - In our signal handler, after doing our crash analysis, we should invoke the
             client handler to let it do its work.
           - Our analyzer can also tell us if the SIGILL source is from JSC code in
             general (right now, this would just mean JIT code).
           - If the SIGILL source is not from JSC, we'll just let the client handler
             decided how to proceed.  We assume that the client handler will do the right
             thing (which is how the old behavior is before the SigillCrashAnalyzer was
             introduced).
           - If the SIGILL source is from JSC, then we know the SIGILL is an unrecoverable
             condition.  Hence, after we have given the client handler a chance to run,
             we should restore the default handler and let the OS capture a core dump.
             This intentionally overrides whatever signal settings the client handler may
             have set.

        3. Client code installed a SIGILL handler after JSC does.
           - In this case, we are dependent on the client handler to call our handler
             after it does its work.  This is compatible with the old behavior before
             SigillCrashAnalyzer was introduced.
           - In our signal handler, if we determine that the SIGILL source is from JSC
             code, then the SIGILL is not recoverable.  We should then restore the
             default handler and get a core dump.
           - If the SIGILL source is not from JSC, we check to see if there's a client
             handler installed after us.
           - If we detect a client handler installed after us, we defer judgement on what
             to do to the client handler.  Since the client handler did not uninstall
             itself, it must have considered itself to have recovered from the SIGILL.
             We'll trust the client handler and take no restore action of our own (which
             is compatible with old code behavior).
           - If we detect no client handler and we have no previous handler, then we
             should restore the default handler and get a core dump.

        * tools/SigillCrashAnalyzer.cpp:
        (JSC::handleCrash):
        (JSC::installCrashHandler):
        (JSC::SigillCrashAnalyzer::analyze): Deleted.

2017-02-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, manual roll out of r211777
        https://bugs.webkit.org/show_bug.cgi?id=167457

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):

2017-02-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Web Inspector: allow import() inside the inspector
        https://bugs.webkit.org/show_bug.cgi?id=167457

        Reviewed by Ryosuke Niwa.

        We relax import module hook to accept null SourceOrigin.
        Such a script can be evaluated from the inspector console.

        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):

2017-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Do not use RunLoop when dispatching inspector GC event
        https://bugs.webkit.org/show_bug.cgi?id=167683
        <rdar://problem/30167791>

        Reviewed by Brian Burg.

        Move the RunLoop deferred implementation to WebCore. It is not needed
        for JSContext inspection, and in JSContext inspection we are not
        guarenteed a RunLoop to defer to.

        * inspector/agents/InspectorHeapAgent.h:
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::InspectorHeapAgent):
        (Inspector::InspectorHeapAgent::~InspectorHeapAgent):
        (Inspector::InspectorHeapAgent::disable):
        (Inspector::InspectorHeapAgent::didGarbageCollect):
        (Inspector::SendGarbageCollectionEventsTask::SendGarbageCollectionEventsTask): Deleted.
        (Inspector::SendGarbageCollectionEventsTask::addGarbageCollection): Deleted.
        (Inspector::SendGarbageCollectionEventsTask::reset): Deleted.
        (Inspector::SendGarbageCollectionEventsTask::timerFired): Deleted.

        (Inspector::InspectorHeapAgent::dispatchGarbageCollectedEvent):
        Make a virtual method so that WebCore implementations of this agent can choose
        to dispatch this event asynchronously.

        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        Remove unnecessary RunLoop include.

2017-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Static Analyzer: JSContext.mm: Incorrect decrement of the reference count of an object
        https://bugs.webkit.org/show_bug.cgi?id=167848

        Reviewed by Saam Barati.

        Source/JavaScriptCore/API/JSContext.mm:87:5: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller
            [self.exceptionHandler release];
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1 warning generated.

        * API/JSContext.mm:
        (-[JSContext dealloc]):
        Use the ivar in dealloc instead of going through the getter.

2017-02-05  Mark Lam  <mark.lam@apple.com>

        The VMInspector should use an RAII Locker.
        https://bugs.webkit.org/show_bug.cgi?id=167854

        Reviewed by Saam Barati.

        Previously, VMInspector::lock() was returning an expected LockToken, and there's
        no way to unlock it when we're done with it.  This was not a problem before
        because the VMInspector had only one client, the SigillCrashAnalyzer, that
        expected the process to crash due to a SIGILL shortly thereafter.

        However, the VMInspector is useful as a debugging tool that we can apply in other
        debugging tasks.  Fixing VMInspector::lock() to return an RAII locker will enable
        other use cases.  Plus it's just bad form to be able to lock something and never
        be able to unlock it.

        * tools/SigillCrashAnalyzer.cpp:
        (JSC::SigillCrashAnalyzer::analyze):
        * tools/VMInspector.cpp:
        * tools/VMInspector.h:

2017-02-04  Joseph Pecoraro  <pecoraro@apple.com>

        Static Analyzer: Value stored to 'recordedMachineThreads' during its initialization is never read
        https://bugs.webkit.org/show_bug.cgi?id=167845

        Reviewed by Saam Barati.

        Source/JavaScriptCore/heap/MachineStackMarker.cpp:151:14: warning: Value stored to 'recordedMachineThreads' during its initialization is never read
                auto recordedMachineThreads = m_set.take(machineThreads);
                     ^~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~

        * heap/MachineStackMarker.cpp:
        (JSC::ActiveMachineThreadsManager::remove):

2017-02-04  Joseph Pecoraro  <pecoraro@apple.com>

        Static Analyzer: Value stored to 'prev' is never read
        https://bugs.webkit.org/show_bug.cgi?id=167844

        Reviewed by Saam Barati.

        Source/JavaScriptCore/runtime/JSMapIterator.h:60:13: warning: Value stored to 'prev' is never read
                    prev = bucket;
                    ^      ~~~~~~
        Source/JavaScriptCore/runtime/JSSetIterator.h:60:13: warning: Value stored to 'prev' is never read
                    prev = bucket;
                    ^      ~~~~~~

        * runtime/JSMapIterator.h:
        (JSC::JSMapIterator::advanceIter):
        * runtime/JSSetIterator.h:
        (JSC::JSSetIterator::advanceIter):

2017-02-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add operationToInt32SensibleSlow to optimize kraken pbkdf2 and sha256
        https://bugs.webkit.org/show_bug.cgi?id=167736

        Reviewed by Saam Barati.

        Add a new function operationToInt32SensibleSlow. This function is only
        called after x86 cvttss2si_rr is failed. This means that the
        given double number never in range of int32 truncatable numbers.

        As a result, exp in operationToInt32 always becomes >= 31. So
        we can change the condition from `exp < 32` to `exp == 31`.
        This makes missingOne constant. And it leads significantly good
        code generation.

        The original operationToInt32 code.

            170:   66 48 0f 7e c1          movq   %xmm0,%rcx
            175:   31 c0                   xor    %eax,%eax
            177:   66 48 0f 7e c6          movq   %xmm0,%rsi
            17c:   48 c1 f9 34             sar    $0x34,%rcx
            180:   81 e1 ff 07 00 00       and    $0x7ff,%ecx
            186:   8d 91 01 fc ff ff       lea    -0x3ff(%rcx),%edx
            18c:   83 fa 53                cmp    $0x53,%edx
            18f:   77 37                   ja     1c8 <_ZN3JSC16operationToInt32Ed+0x58>
            191:   83 fa 34                cmp    $0x34,%edx
            194:   7f 3a                   jg     1d0 <_ZN3JSC16operationToInt32Ed+0x60>
            196:   b9 34 00 00 00          mov    $0x34,%ecx
            19b:   66 48 0f 7e c7          movq   %xmm0,%rdi
            1a0:   29 d1                   sub    %edx,%ecx
            1a2:   48 d3 ff                sar    %cl,%rdi
            1a5:   83 fa 1f                cmp    $0x1f,%edx
            1a8:   89 f8                   mov    %edi,%eax
            1aa:   7f 12                   jg     1be <_ZN3JSC16operationToInt32Ed+0x4e>
            1ac:   89 d1                   mov    %edx,%ecx
            1ae:   b8 01 00 00 00          mov    $0x1,%eax
            1b3:   d3 e0                   shl    %cl,%eax
            1b5:   89 c2                   mov    %eax,%edx
            1b7:   8d 40 ff                lea    -0x1(%rax),%eax
            1ba:   21 f8                   and    %edi,%eax
            1bc:   01 d0                   add    %edx,%eax
            1be:   89 c2                   mov    %eax,%edx
            1c0:   f7 da                   neg    %edx
            1c2:   48 85 f6                test   %rsi,%rsi
            1c5:   0f 48 c2                cmovs  %edx,%eax
            1c8:   f3 c3                   repz retq
            1ca:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
            1d0:   66 48 0f 7e c0          movq   %xmm0,%rax
            1d5:   81 e9 33 04 00 00       sub    $0x433,%ecx
            1db:   48 d3 e0                shl    %cl,%rax
            1de:   eb de                   jmp    1be <_ZN3JSC16operationToInt32Ed+0x4e>

        The operationToInt32SensibleSlow code.

            1e0:   66 48 0f 7e c1          movq   %xmm0,%rcx
            1e5:   66 48 0f 7e c2          movq   %xmm0,%rdx
            1ea:   48 c1 f9 34             sar    $0x34,%rcx
            1ee:   81 e1 ff 07 00 00       and    $0x7ff,%ecx
            1f4:   8d b1 01 fc ff ff       lea    -0x3ff(%rcx),%esi
            1fa:   83 fe 34                cmp    $0x34,%esi
            1fd:   7e 21                   jle    220 <_ZN3JSC28operationToInt32SensibleSlowEd+0x40>
            1ff:   66 48 0f 7e c0          movq   %xmm0,%rax
            204:   81 e9 33 04 00 00       sub    $0x433,%ecx
            20a:   48 d3 e0                shl    %cl,%rax
            20d:   89 c1                   mov    %eax,%ecx
            20f:   f7 d9                   neg    %ecx
            211:   48 85 d2                test   %rdx,%rdx
            214:   0f 48 c1                cmovs  %ecx,%eax
            217:   c3                      retq
            218:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
            21f:   00
            220:   66 48 0f 7e c0          movq   %xmm0,%rax
            225:   b9 34 00 00 00          mov    $0x34,%ecx
            22a:   29 f1                   sub    %esi,%ecx
            22c:   48 d3 f8                sar    %cl,%rax
            22f:   89 c1                   mov    %eax,%ecx
            231:   81 c9 00 00 00 80       or     $0x80000000,%ecx
            237:   83 fe 1f                cmp    $0x1f,%esi
            23a:   0f 44 c1                cmove  %ecx,%eax
            23d:   89 c1                   mov    %eax,%ecx
            23f:   f7 d9                   neg    %ecx
            241:   48 85 d2                test   %rdx,%rdx
            244:   0f 48 c1                cmovs  %ecx,%eax
            247:   c3                      retq
            248:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
            24f:   00

        This improves kraken pbkdf2 by 10.8% and sha256 by 7.5%.

                                                       baseline                  patched

            stanford-crypto-pbkdf2                 153.195+-2.745      ^     138.204+-2.513         ^ definitely 1.1085x faster
            stanford-crypto-sha256-iterative        49.047+-1.038      ^      45.610+-1.235         ^ definitely 1.0754x faster

            <arithmetic>                           101.121+-1.379      ^      91.907+-1.500         ^ definitely 1.1003x faster

        * assembler/CPU.h:
        (JSC::hasSensibleDoubleToInt):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::doubleToInt32):
        (JSC::FTL::DFG::LowerDFGToB3::sensibleDoubleToInt32):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::hasSensibleDoubleToInt): Deleted.
        * ftl/FTLOutput.h:
        * runtime/MathCommon.cpp:
        (JSC::operationToInt32SensibleSlow):
        * runtime/MathCommon.h:

2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r211486, r211629.

        Original change is not ideal and is causing issues.

        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::SendGarbageCollectionEventsTask::SendGarbageCollectionEventsTask):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):

2017-02-03  JF Bastien  <jfbastien@apple.com>

        OSR entry: delay outer-loop compilation when at inner-loop
        https://bugs.webkit.org/show_bug.cgi?id=167149

        Reviewed by Filip Pizlo.

        r211224 and r211461 were reverted because they caused massive
        kraken/ai-astar regressions. This patch instead does the
        minimally-disruptive change to fix the original bug as described
        below, but omits extra tuning and refactoring which I had
        before. I'll commit tuning and refactoring separately, if this
        sticks. This patch is therefore very minimal, and layers carefully
        on top of the complex spaghetti-logic. The only change it makes is
        that it uses triggers to indicate to outer loops that they should
        compile, which fixes the immediate bug and seems roughly perf
        neutral (maybe a small gain on kraken sometimes, other times a
        small regression as would be expected from slightly compiling
        later). As opposed to r211461 this patch doesn't unconditionally
        unset the trigger because it prevents further DFG executions from
        entering. It therefore makes the trigger a tri-state enum class:
        don't trigger, compilation done, start compilation. Only "start
        compilation" gets reset to "don't trigger". "Compilation done"
        does not (unless there's a problem compiling, then it gets set
        back to "don't trigger").

        As of https://bugs.webkit.org/show_bug.cgi?id=155217 OSR
        compilation can be kicked off for an entry into an outer-loop,
        while executing an inner-loop. This is desirable because often the
        codegen from an inner-entry isn't as good as the codegen from an
        outer-entry, but execution from an inner-loop is often pretty hot
        and likely to kick off compilation. This approach provided nice
        speedups on Kraken because we'd select to enter to the outer-loop
        very reliably, which reduces variability (the inner-loop was
        selected roughly 1/5 times from my unscientific measurements).

        When compilation starts we take a snapshot of the JSValues at the
        current execution state using OSR's recovery mechanism. These
        values are passed to the compiler and are used as way to perform
        type profiling, and could be used to observe cell types as well as
        to perform predictions such as through constant propagation.

        It's therefore desired to enter from the outer-loop when we can,
        but we need to be executing from that location to capture the
        right JSValues, otherwise we're confusing the compiler and giving
        it inaccurate JSValues which can lead it to predict the wrong
        things, leading to suboptimal code or recompilation due to
        misprediction, or in super-corner-cases a crash.

        DFG tier-up was added here:
        https://bugs.webkit.org/show_bug.cgi?id=112838

        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::JITCompiler):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback):
        (JSC::DFG::Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create):
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously):
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidComplete):
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:

2017-02-03  Saam Barati  <sbarati@apple.com>

        When OSR entering to the baseline JIT from the LLInt for a ProgramCodeBlock we can skip compiling a lot of the program
        https://bugs.webkit.org/show_bug.cgi?id=167725
        <rdar://problem/30339082>

        Reviewed by Michael Saboff.

        We often want to baseline compile ProgramCode once we hit a loop in the LLInt.
        However, some programs execute a non-trivial amount of code before the loop.
        This code can never be executed again because ProgramCodeBlocks never run more
        than once. We're wasting time and memory by compiling code that is unreachable
        from the OSR entry destination. This patch fixes this by only compiling code
        that is reachable from the OSR entry destination.

        This is a speedup on Kraken/ai-astar for devices with limited CPUs (I've been
        testing on devices with 2 CPUs). On ai-astar, we were spending 50-100ms compiling
        a huge ProgramCodeBlock in the baseline JIT where the majority of the code
        would never execute. If this compilation was kicked off on the main thread,
        then we'd be stalled for a long time. If it were started on the baseline JITs
        background compilation thread, we'd still waste 50-100ms in that thread, causing
        all other baseline compilations to happen on the main thread.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        (JSC::JIT::compile):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Plan::Plan):
        (JSC::JITWorklist::Plan::compileNow):
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileNow):
        * jit/JITWorklist.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/Completion.cpp:
        (JSC::evaluate):

2017-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after r211630.

        * CMakeLists.txt:

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial implementation of resource usage overlay
        https://bugs.webkit.org/show_bug.cgi?id=167731

        Reviewed by Michael Catanzaro.

        Also expose nextFireTime() for GTK+ port.

        * heap/GCActivityCallback.cpp:
        (JSC::GCActivityCallback::scheduleTimer):
        (JSC::GCActivityCallback::cancelTimer):
        * heap/GCActivityCallback.h:

2017-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Unreviewed AArch64 buildfix after r211603.
        https://bugs.webkit.org/show_bug.cgi?id=167714

        * CMakeLists.txt:

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes AKA websam
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Remove the sloppy "max live heap size" mechanism from JSC in favor of the new
        WebCore-side memory footprint monitor.

        * heap/Heap.cpp:
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::didExceedMaxLiveSize): Deleted.
        * heap/Heap.h:
        (JSC::Heap::setMaxLiveSize): Deleted.

2017-02-02  Mark Lam  <mark.lam@apple.com>

        Add a SIGILL crash analyzer to make debugging SIGILLs easier.
        https://bugs.webkit.org/show_bug.cgi?id=167714
        <rdar://problem/30318237>

        Not reviewed.

        Build fix for CLOOP build.

        * tools/VMInspector.cpp:

2017-02-02  Mark Lam  <mark.lam@apple.com>

        Add a SIGILL crash analyzer to make debugging SIGILLs easier.
        https://bugs.webkit.org/show_bug.cgi?id=167714
        <rdar://problem/30318237>

        Reviewed by Filip Pizlo.

        The current implementation is only for X86_64 and ARM64 on OS(DARWIN).  The
        analyzer is not enabled for all other ports.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * API/JSVirtualMachine.mm:
        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::illegalInstruction):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::illegalInstruction):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::illegalInstruction):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::illegalInstruction):
        * heap/Heap.cpp:
        (JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::forEachCodeBlockIgnoringJITPlans):
        * runtime/Options.cpp:
        (JSC::Options::isAvailable):
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::~VM):
        * runtime/VM.h:
        * tools/SigillCrashAnalyzer.cpp: Added.
        (JSC::SignalContext::SignalContext):
        (JSC::SignalContext::dump):
        (JSC::handleCrash):
        (JSC::initializeCrashHandler):
        (JSC::ensureSigillCrashAnalyzer):
        (JSC::SigillCrashAnalyzer::analyze):
        (JSC::SigillCrashAnalyzer::dumpCodeBlock):
        * tools/SigillCrashAnalyzer.h: Added.
        * tools/VMInspector.cpp: Added.
        (JSC::VMInspector::instance):
        (JSC::VMInspector::add):
        (JSC::VMInspector::remove):
        (JSC::ensureIsSafeToLock):
        * tools/VMInspector.h: Added.
        (JSC::VMInspector::iterate):

2017-02-02  Chris Dumez  <cdumez@apple.com>

        {}.toString.call(crossOriginWindow) should return "[object Object]"
        https://bugs.webkit.org/show_bug.cgi?id=167701
        <rdar://problem/30330797>

        Reviewed by Keith Miller.

        Have JSProxy forward toStringName calls to its target so Window
        can override it.

        * runtime/JSProxy.cpp:
        (JSC::JSProxy::toStringName):
        * runtime/JSProxy.h:

2017-02-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211571 and r211582.
        https://bugs.webkit.org/show_bug.cgi?id=167751

        This change caused API test WebKit1.MemoryPressureHandler to
        fail with an assertion. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Mac] In-process memory pressure monitor for WebContent
        processes."
        https://bugs.webkit.org/show_bug.cgi?id=167491
        http://trac.webkit.org/changeset/211571

        "Unreviewed attempt to fix the Windows build after r211571."
        http://trac.webkit.org/changeset/211582

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes.
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Remove the sloppy "max live heap size" mechanism from JSC in favor of the new
        WebCore-side memory footprint monitor.

        * heap/Heap.cpp:
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::didExceedMaxLiveSize): Deleted.
        * heap/Heap.h:
        (JSC::Heap::setMaxLiveSize): Deleted.

2017-02-02  Joseph Pecoraro  <pecoraro@apple.com>

        Removed unused m_errorHandlingModeReentry from Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=167726

        Reviewed by Yusuke Suzuki.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        * interpreter/Interpreter.h:

2017-02-01  Commit Queue  <commit-queue@webkit.org>

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

        Big regression on kraken (Requested by jfbastien on #webkit).

        Reverted changeset:

        "OSR entry: delay outer-loop compilation when at inner-loop"
        https://bugs.webkit.org/show_bug.cgi?id=167149
        http://trac.webkit.org/changeset/211461

2017-02-01  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix unintended change.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::displayName):

2017-02-01  Keith Miller  <keith_miller@apple.com>

        The sampling profile should have an option to sample from C frames.
        https://bugs.webkit.org/show_bug.cgi?id=167614

        Reviewed by Saam Barati.

        We should be able to use the sampling profiler, at least
        internally, to trace C calls.  This patch only modifies the JSC
        shell although it would be nice to add it to the Web Inspector in
        a future patch.

        * runtime/Options.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::FrameWalker::walk):
        (JSC::FrameWalker::recordJSFrame):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::CFrameWalker::walk):
        (JSC::CFrameWalker::isCFrame):
        (JSC::CFrameWalker::advanceToParentFrame):
        (JSC::CFrameWalker::frame):
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        (JSC::SamplingProfiler::StackFrame::displayName):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::UnprocessedStackFrame::UnprocessedStackFrame):

2017-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use guaranteed RunLoop instead of RunLoop::current for dispatching inspector GC event
        https://bugs.webkit.org/show_bug.cgi?id=167683
        <rdar://problem/30167791>

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::SendGarbageCollectionEventsTask::SendGarbageCollectionEventsTask):
        Use RunLoop::main instead of RunLoop::current which may go away.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        Ensure RunLoop::main is initialized when using JSC APIs.

2017-02-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        ArityFixup should adjust SP first
        https://bugs.webkit.org/show_bug.cgi?id=167239

        Reviewed by Michael Saboff.

        Arity fixup extends the stack and copy/fill the stack with
        the values. At that time, we accidentally read/write stack
        space below the stack pointer. As a result, we touch the area
        of the stack space below the x64 red zone. These areas are unsafe.
        OS may corrupt this space when constructing a signal stack.
        The Linux kernel could not populate the pages for this space
        and causes segmentation fault. This patch changes the stack
        pointer before performing the arity fixup.

        * jit/ThunkGenerators.cpp:
        (JSC::arityFixupGenerator):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2017-01-31  Filip Pizlo  <fpizlo@apple.com>

        Make verifyEdge a RELEASE_ASSERT
        <rdar://problem/30296879>

        Rubber stamped by Saam Barati.

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

2017-01-31  JF Bastien  <jfbastien@apple.com>

        OSR entry: delay outer-loop compilation when at inner-loop
        https://bugs.webkit.org/show_bug.cgi?id=167149

        Reviewed by Filip Pizlo.

        r211224 was reverted because it caused a massive kraken/ai-astar
        regression. This patch instead does the minimally-disruptive
        change to fix the original bug as described below, but omits extra
        tuning and refactoring which I had before. I'll commit tuning and
        refactoring separately, if this sticks. This patch is therefore
        very minimal, and layers carefully on top of the complex
        spaghetti-logic. The only change it makes is that it uses triggers
        to indicate to outer loops that they should compile, which fixes
        the immediate bug and seems roughly perf neutral (maybe a small
        gain on kraken sometimes, other times a small regression as would
        be expected from compiling later).

        As of https://bugs.webkit.org/show_bug.cgi?id=155217 OSR
        compilation can be kicked off for an entry into an outer-loop,
        while executing an inner-loop. This is desirable because often the
        codegen from an inner-entry isn't as good as the codegen from an
        outer-entry, but execution from an inner-loop is often pretty hot
        and likely to kick off compilation. This approach provided nice
        speedups on Kraken because we'd select to enter to the outer-loop
        very reliably, which reduces variability (the inner-loop was
        selected roughly 1/5 times from my unscientific measurements).

        When compilation starts we take a snapshot of the JSValues at the
        current execution state using OSR's recovery mechanism. These
        values are passed to the compiler and are used as way to perform
        type profiling, and could be used to observe cell types as well as
        to perform predictions such as through constant propagation.

        It's therefore desired to enter from the outer-loop when we can,
        but we need to be executing from that location to capture the
        right JSValues, otherwise we're confusing the compiler and giving
        it inaccurate JSValues which can lead it to predict the wrong
        things, leading to suboptimal code or recompilation due to
        misprediction, or in super-corner-cases a crash.

        These effects are pretty hard to measure: Fil points out that
        marsalis-osr-entry really needs mustHandleValues (the JSValues
        from the point of execution) because right now it just happens to
        correctly guess int32. I tried removing mustHandleValues entirely
        and saw no slowdowns, but our benchmarks probably aren't
        sufficient to reliably find issues, sometimes because we happen to
        have sufficient mitigations.

        DFG tier-up was added here:
        https://bugs.webkit.org/show_bug.cgi?id=112838

        * dfg/DFGOperations.cpp:

2017-01-31  Filip Pizlo  <fpizlo@apple.com>

        The mutator should be able to perform increments of GC work
        https://bugs.webkit.org/show_bug.cgi?id=167528

        Reviewed by Keith Miller and Geoffrey Garen.

        The cool thing about having a concurrent and parallel collector is that it's easy to also make
        it incremental, because the load balancer can also hand over work to anyone (including the
        mutator) and since the collector is running concurrently anyway, the mutator can usually rely
        on the balancer having some spare work.

        This change adds a classic work-based incremental mode to the GC. When you allocate K bytes,
        you have to do Options::gcIncrementScale() * K "bytes" of draining. This is ammortized so that
        it only happens in allocation slow paths.

        On computers that have a lot of CPUs, this mode is not profitable and we set gcIncrementScale
        to zero. On such computers, Riptide was already performing great because there was no way that
        one mutator thread could outpace many GC threads. But on computers with fewer CPUs, there were
        problems having to do with making the collector progress quickly enough so that the heap
        doesn't grow too much. The stochastic scheduler actually made things worse, because it relies
        a lot on the fact that the GC will simply be faster than the mutator anyway. The old scheduler
        claimed to address the problem of GC pace, but it used a time-based scheduler, which is not as
        precise at keeping pase as the new work-based incremental mode.

        In theory, the work-based mode guarantees a bound on how much the heap can grow during a
        collection just because each byte allocated means some number of bytes visited. We don't try
        to create such a theoretical bound. We're just trying to give the collector an unfair advantage
        in any race with the mutator.

        Turning on incremental mode, the stochastic scheduler, and passive draining in combination with
        each other is a huge splay-latency speed-up on my iPad. It's also a CDjs progression. It does
        regress splay-throughput, but I think that's fine (the regression is 11%, the progression is
        3x).

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::endMarking):
        (JSC::Heap::finalize):
        (JSC::Heap::didAllocate):
        (JSC::Heap::visitCount):
        (JSC::Heap::bytesVisited):
        (JSC::Heap::forEachSlotVisitor):
        (JSC::Heap::performIncrement):
        (JSC::Heap::threadVisitCount): Deleted.
        (JSC::Heap::threadBytesVisited): Deleted.
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::MarkStackArray::transferTo):
        * heap/MarkStack.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didStartMarking):
        (JSC::SlotVisitor::clearMarkStacks):
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::noteLiveAuxiliaryCell):
        (JSC::SlotVisitor::donateKnownParallel):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::performIncrementOfDraining):
        (JSC::SlotVisitor::didReachTermination):
        (JSC::SlotVisitor::hasWork):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively):
        (JSC::SlotVisitor::donateAll):
        (JSC::SlotVisitor::correspondingGlobalStack):
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        (JSC::SlotVisitor::forEachMarkStack):
        * heap/SpaceTimeMutatorScheduler.cpp:
        (JSC::SpaceTimeMutatorScheduler::log):
        * heap/StochasticSpaceTimeMutatorScheduler.cpp:
        (JSC::StochasticSpaceTimeMutatorScheduler::log):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionHeapCapacity):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        * runtime/Options.h:

2017-01-31  Tomas Popela  <tpopela@redhat.com>

        Compilation error in JSArrayBufferView.h
        https://bugs.webkit.org/show_bug.cgi?id=167642

        Reviewed by Alex Christensen.

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

2017-01-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Do not reject WebAssembly.compile() with Exception
        https://bugs.webkit.org/show_bug.cgi?id=167585

        Reviewed by Mark Lam.

        We accidentally reject the promise with Exception instead of Exception::value()
        for the result of WebAssembly::compile().

        * wasm/JSWebAssembly.cpp:
        (JSC::webAssemblyCompileFunc):

2017-01-30  Joseph Pecoraro  <pecoraro@apple.com>

        Implement PerformanceObserver
        https://bugs.webkit.org/show_bug.cgi?id=167546
        <rdar://problem/30247959>

        Reviewed by Ryosuke Niwa.

        * runtime/CommonIdentifiers.h:

2017-01-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops)
        https://bugs.webkit.org/show_bug.cgi?id=165633
        <rdar://problem/29738502>

        Reviewed by Joseph Pecoraro.

        This patch limits the memory used by the Inspector backend to store async
        stack trace data.

        Asynchronous stack traces are stored as a disjoint set of parent pointer
        trees. Tree nodes represent asynchronous operations, and hold a copy of
        the stack trace at the time the operation was scheduled. Each tree can
        be regarded as a set of stack traces, stored as singly linked lists that
        share part of their structure (specifically their tails). Traces belonging
        to the same tree will at least share a common root. A stack trace begins
        at a leaf node and follows the chain of parent pointers to the root of
        of the tree. Leaf nodes always contain pending asynchronous calls.

        When an asynchronous operation is scheduled with requestAnimationFrame,
        setInterval, etc, a node is created containing the current call stack and
        some bookkeeping data for the operation. An unique identifier comprised
        of an operation type and callback identifier is mapped to the node. If
        scheduling the callback was itself the result of an asynchronous call,
        the node becomes a child of the node associated with that call, otherwise
        it becomes the root of a new tree.

        A node is either `pending`, `active`, `dispatched`, or `canceled`. Nodes
        start out as pending. After a callback for a pending node is dispatched
        the node is marked as such, unless it is a repeating callback such as
        setInterval, in which case it remains pending. Once a node is no longer
        pending it is removed, as long as it has no children. Since nodes are
        reference counted, it is a property of the stack trace tree that nodes
        that are no longer pending and have no children pointing to them will be
        automatically pruned from the tree.

        If an async operation is canceled (e.g. cancelTimeout), the associated
        node is marked as such. If the callback is not being dispatched at the
        time, and has no children, it is removed.

        Because async operations can be chained indefinitely, stack traces are
        limited to a maximum depth. The depth of a stack trace is equal to the
        sum of the depths of its nodes, with a node's depth equal to the number
        of frames in its associated call stack. For any stack trace,

            S = { s𝟶, s𝟷, …, s𝑘 }, with endpoints s𝟶, s𝑘
            depth(S) = depth(s𝟶) + depth(s𝟷) + … + depth(s𝑘)

        A stack trace is truncated when it exceeds the maximum depth. Truncation
        occurs on node boundaries, not call frames, consequently the maximum depth
        is more of a target than a guarantee:

            d = maximum stack trace depth
            for all S, depth(S) ≤ d + depth(s𝑘)

        Because nodes can belong to multiple stack traces, it may be necessary
        to clone the tail of a stack trace being truncated to prevent other traces
        from being effected.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * inspector/AsyncStackTrace.cpp: Added.
        (Inspector::AsyncStackTrace::create):
        (Inspector::AsyncStackTrace::AsyncStackTrace):
        (Inspector::AsyncStackTrace::~AsyncStackTrace):
        (Inspector::AsyncStackTrace::isPending):
        (Inspector::AsyncStackTrace::isLocked):
        (Inspector::AsyncStackTrace::willDispatchAsyncCall):
        (Inspector::AsyncStackTrace::didDispatchAsyncCall):
        (Inspector::AsyncStackTrace::didCancelAsyncCall):
        (Inspector::AsyncStackTrace::buildInspectorObject):
        (Inspector::AsyncStackTrace::truncate):
        (Inspector::AsyncStackTrace::remove):
        * inspector/AsyncStackTrace.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
        (Inspector::InspectorDebuggerAgent::didCancelAsyncCall):
        (Inspector::InspectorDebuggerAgent::willDispatchAsyncCall):
        (Inspector::InspectorDebuggerAgent::didDispatchAsyncCall):
        (Inspector::InspectorDebuggerAgent::didPause):
        (Inspector::InspectorDebuggerAgent::clearAsyncStackTraceData):
        (Inspector::InspectorDebuggerAgent::buildAsyncStackTrace): Deleted.
        (Inspector::InspectorDebuggerAgent::refAsyncCallData): Deleted.
        (Inspector::InspectorDebuggerAgent::derefAsyncCallData): Deleted.
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/protocol/Console.json:

2017-01-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r211345.

        The LayoutTest for this change is failing an assertion.

        Reverted changeset:

        "Web Inspector: Need some limit on Async Call Stacks for async
        loops (rAF loops)"
        https://bugs.webkit.org/show_bug.cgi?id=165633
        http://trac.webkit.org/changeset/211345

2017-01-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops)
        https://bugs.webkit.org/show_bug.cgi?id=165633
        <rdar://problem/29738502>

        Reviewed by Joseph Pecoraro.

        This patch limits the memory used by the Inspector backend to store async
        stack trace data.

        Asynchronous stack traces are stored as a disjoint set of parent pointer
        trees. Tree nodes represent asynchronous operations, and hold a copy of
        the stack trace at the time the operation was scheduled. Each tree can
        be regarded as a set of stack traces, stored as singly linked lists that
        share part of their structure (specifically their tails). Traces belonging
        to the same tree will at least share a common root. A stack trace begins
        at a leaf node and follows the chain of parent pointers to the root of
        of the tree. Leaf nodes always contain pending asynchronous calls.

        When an asynchronous operation is scheduled with requestAnimationFrame,
        setInterval, etc, a node is created containing the current call stack and
        some bookkeeping data for the operation. An unique identifier comprised
        of an operation type and callback identifier is mapped to the node. If
        scheduling the callback was itself the result of an asynchronous call,
        the node becomes a child of the node associated with that call, otherwise
        it becomes the root of a new tree.

        A node is either `pending`, `active`, `dispatched`, or `canceled`. Nodes
        start out as pending. After a callback for a pending node is dispatched
        the node is marked as such, unless it is a repeating callback such as
        setInterval, in which case it remains pending. Once a node is no longer
        pending it is removed, as long as it has no children. Since nodes are
        reference counted, it is a property of the stack trace tree that nodes
        that are no longer pending and have no children pointing to them will be
        automatically pruned from the tree.

        If an async operation is canceled (e.g. cancelTimeout), the associated
        node is marked as such. If the callback is not being dispatched at the
        time, and has no children, it is removed.

        Because async operations can be chained indefinitely, stack traces are
        limited to a maximum depth. The depth of a stack trace is equal to the
        sum of the depths of its nodes, with a node's depth equal to the number
        of frames in its associated call stack. For any stack trace,

            S = { s𝟶, s𝟷, …, s𝑘 }, with endpoints s𝟶, s𝑘
            depth(S) = depth(s𝟶) + depth(s𝟷) + … + depth(s𝑘)

        A stack trace is truncated when it exceeds the maximum depth. Truncation
        occurs on node boundaries, not call frames, consequently the maximum depth
        is more of a target than a guarantee:

            d = maximum stack trace depth
            for all S, depth(S) ≤ d + depth(s𝑘)

        Because nodes can belong to multiple stack traces, it may be necessary
        to clone the tail of a stack trace being truncated to prevent other traces
        from being effected.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * inspector/AsyncStackTrace.cpp: Added.
        (Inspector::AsyncStackTrace::create):
        (Inspector::AsyncStackTrace::AsyncStackTrace):
        (Inspector::AsyncStackTrace::~AsyncStackTrace):
        (Inspector::AsyncStackTrace::isPending):
        (Inspector::AsyncStackTrace::isLocked):
        (Inspector::AsyncStackTrace::willDispatchAsyncCall):
        (Inspector::AsyncStackTrace::didDispatchAsyncCall):
        (Inspector::AsyncStackTrace::didCancelAsyncCall):
        (Inspector::AsyncStackTrace::buildInspectorObject):
        (Inspector::AsyncStackTrace::truncate):
        (Inspector::AsyncStackTrace::remove):
        * inspector/AsyncStackTrace.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
        (Inspector::InspectorDebuggerAgent::didCancelAsyncCall):
        (Inspector::InspectorDebuggerAgent::willDispatchAsyncCall):
        (Inspector::InspectorDebuggerAgent::didDispatchAsyncCall):
        (Inspector::InspectorDebuggerAgent::didPause):
        (Inspector::InspectorDebuggerAgent::clearAsyncStackTraceData):
        (Inspector::InspectorDebuggerAgent::buildAsyncStackTrace): Deleted.
        (Inspector::InspectorDebuggerAgent::refAsyncCallData): Deleted.
        (Inspector::InspectorDebuggerAgent::derefAsyncCallData): Deleted.
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/protocol/Console.json:

2017-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Remote Inspector: Listing should be updated when a target gains or loses a debugger session
        https://bugs.webkit.org/show_bug.cgi?id=167449

        Reviewed by Brian Burg.

        * inspector/remote/RemoteInspector.h:
        * inspector/remote/RemoteInspector.mm:
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::updateTargetListing):
        (Inspector::RemoteInspector::receivedSetupMessage):
        (Inspector::RemoteInspector::receivedDidCloseMessage):
        (Inspector::RemoteInspector::receivedConnectionDiedMessage):
        Whenever we add/remove a connection we should update the listing properties
        for that target that corresponded to that connection. In this way group
        updating active sessions, the target, and pushing listing together.

2017-01-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        Lift template escape sequence restrictions in tagged templates
        https://bugs.webkit.org/show_bug.cgi?id=166871

        Reviewed by Saam Barati.

        This patch implements stage 3 Lifting Template Literal Restriction[1].
        Prior to this patch, template literal becomes syntax error if it contains
        invalid escape sequences. But it is too restricted; Template literal
        can have cooked and raw representations and only cooked representation
        can escape sequences. So even if invalid escape sequences are included,
        the raw representation can be valid.

        Lifting Template Literal Restriction relaxes the above restriction.
        When invalid escape sequence is included, if target template literals
        are used as tagged templates, we make the result of the template including
        the invalid escape sequence `undefined` instead of making it SyntaxError
        immediately. It allows us to accept the templates including invalid
        escape sequences in the raw representations in tagged templates.

        On the other hand, the raw representation is only used in tagged templates.
        So if invalid escape sequences are included in the usual template literals,
        we just make it SyntaxError as before.

        [1]: https://github.com/tc39/proposal-template-literal-revision

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TemplateStringNode::emitBytecode):
        (JSC::TemplateLiteralNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createTemplateString):
        * parser/Lexer.cpp:
        (JSC::Lexer<CharacterType>::parseUnicodeEscape):
        (JSC::Lexer<T>::parseTemplateLiteral):
        (JSC::Lexer<T>::lex):
        (JSC::Lexer<T>::scanTemplateString):
        (JSC::Lexer<T>::scanTrailingTemplateString): Deleted.
        * parser/Lexer.h:
        * parser/NodeConstructors.h:
        (JSC::TemplateStringNode::TemplateStringNode):
        * parser/Nodes.h:
        (JSC::TemplateStringNode::cooked):
        (JSC::TemplateStringNode::raw):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentElement):
        (JSC::Parser<LexerType>::parseTemplateString):
        (JSC::Parser<LexerType>::parseTemplateLiteral):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/ParserTokens.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createTemplateString):
        * runtime/TemplateRegistry.cpp:
        (JSC::TemplateRegistry::getTemplateObject):
        * runtime/TemplateRegistryKey.h:
        (JSC::TemplateRegistryKey::cookedStrings):
        (JSC::TemplateRegistryKey::create):
        (JSC::TemplateRegistryKey::TemplateRegistryKey):
        * runtime/TemplateRegistryKeyTable.cpp:
        (JSC::TemplateRegistryKeyTable::createKey):
        * runtime/TemplateRegistryKeyTable.h:

2017-01-27  Saam Barati  <sbarati@apple.com>

        Make the CLI for the sampling profiler better for inlined call site indices
        https://bugs.webkit.org/show_bug.cgi?id=167482

        Reviewed by Mark Lam.

        This patches changes the command line interface for the sampling
        profiler to also dump the machine frame that the semantic code
        origin is in if the semantic code origin is inlined. This helps
        when doing performance work because it's helpful to know the
        context that an inlined frame is in. Before, we used to just
        say it was in the baseline JIT if it didn't have its own optimized
        compile. Now, we can tell that its inlined into a DFG or FTL frame.

        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::buildSamples):
        * runtime/Options.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        (JSC::SamplingProfiler::reportTopFunctions):
        (JSC::SamplingProfiler::reportTopBytecodes):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::StackFrame::CodeLocation::hasCodeBlockHash):
        (JSC::SamplingProfiler::StackFrame::CodeLocation::hasBytecodeIndex):
        (JSC::SamplingProfiler::StackFrame::CodeLocation::hasExpressionInfo):
        (JSC::SamplingProfiler::StackFrame::hasExpressionInfo):
        (JSC::SamplingProfiler::StackFrame::lineNumber):
        (JSC::SamplingProfiler::StackFrame::columnNumber):
        (JSC::SamplingProfiler::StackFrame::hasBytecodeIndex): Deleted.
        (JSC::SamplingProfiler::StackFrame::hasCodeBlockHash): Deleted.

2017-01-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        Extend create_hash_table to specify Intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=167505

        Reviewed by Sam Weinig.

        This patch extends create_hash_table to specify Intrinsic.
        We can set Intrinsic in the static property table definition
        in runtime/XXX.h.

        And drop the adhoc code for String.fromCharCode in create_hash_table.

        * create_hash_table:
        * runtime/StringConstructor.cpp:

2017-01-27  Filip Pizlo  <fpizlo@apple.com>

        scanExternalRememberedSet needs to mergeIfNecessary
        https://bugs.webkit.org/show_bug.cgi?id=167523

        Reviewed by Keith Miller.
        
        The protocol for opaque roots is that if you add to them outside of draining, then you need to call
        mergeIfNecessary.
        
        This means that every MarkingConstraint that adds opaque roots needs to mergeIfNecessary after.
        
        scanExternalRememberedSet transitively calls addOpaqueRoot, is called from a MarkingConstraint, and
        was missing a call to mergeIfNecessary. This fixes it.

        * API/JSVirtualMachine.mm:
        (scanExternalRememberedSet):

2017-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r211247.

        * heap/GCAssertions.h:

2017-01-26  Keith Miller  <keith_miller@apple.com>

        classInfo should take a VM so it is not materialized from the object on each call
        https://bugs.webkit.org/show_bug.cgi?id=167424

        Rubber Stamped by Michael Saboff.

        Previously, classInfo() would get the VM from the target's
        MarkedBlock.  Most callers already have a VM on hand, so it is
        wasteful to compute the VM from the marked block every time. This
        patch refactors some of the most common callers of classInfo(),
        jsDynamicCast and inherits to take a VM as well.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::finishCreation):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::finishCreation):
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::asCallbackObject):
        (JSC::JSCallbackObject<Parent>::finishCreation):
        * API/JSObjectRef.cpp:
        (JSObjectSetPrototype):
        (classInfoPrivate):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (JSObjectGetPrivateProperty):
        (JSObjectSetPrivateProperty):
        (JSObjectDeletePrivateProperty):
        * API/JSTypedArray.cpp:
        (JSValueGetTypedArrayType):
        (JSObjectMakeTypedArrayWithArrayBuffer):
        (JSObjectMakeTypedArrayWithArrayBufferAndOffset):
        (JSObjectGetTypedArrayBytesPtr):
        (JSObjectGetTypedArrayLength):
        (JSObjectGetTypedArrayByteLength):
        (JSObjectGetTypedArrayByteOffset):
        (JSObjectGetTypedArrayBuffer):
        (JSObjectGetArrayBufferBytesPtr):
        (JSObjectGetArrayBufferByteLength):
        * API/JSValue.mm:
        (isDate):
        (isArray):
        (valueToObjectWithoutCopy):
        * API/JSValueRef.cpp:
        (JSValueIsArray):
        (JSValueIsDate):
        (JSValueIsObjectOfClass):
        * API/JSWeakObjectMapRefPrivate.cpp:
        * API/JSWrapperMap.mm:
        (tryUnwrapObjcObject):
        * API/ObjCCallbackFunction.h:
        * API/ObjCCallbackFunction.mm:
        (tryUnwrapConstructor):
        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptFunctionCall::call):
        * bytecode/CallVariant.h:
        (JSC::CallVariant::internalFunction):
        (JSC::CallVariant::function):
        (JSC::CallVariant::isClosureCall):
        (JSC::CallVariant::executable):
        (JSC::CallVariant::functionExecutable):
        (JSC::CallVariant::nativeExecutable):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::replacement):
        (JSC::CodeBlock::computeCapabilityLevel):
        (JSC::CodeBlock::nameForRegister):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount):
        * bytecode/ObjectPropertyCondition.cpp:
        (JSC::ObjectPropertyCondition::attemptToMakeEquivalenceWithoutBarrier):
        * bytecode/ObjectPropertyCondition.h:
        (JSC::ObjectPropertyCondition::isValidValueForPresence):
        * bytecode/PropertyCondition.cpp:
        (JSC::PropertyCondition::isValidValueForAttributes):
        (JSC::PropertyCondition::isValidValueForPresence):
        (JSC::PropertyCondition::attemptToMakeEquivalenceWithoutBarrier):
        * bytecode/PropertyCondition.h:
        * bytecode/SpeculatedType.cpp:
        (JSC::speculationFromCell):
        * debugger/Debugger.cpp:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::scope):
        (JSC::DebuggerCallFrame::type):
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::name):
        (JSC::DebuggerScope::location):
        * dfg/DFGAbstractInterpreter.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::AbstractInterpreter):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        (JSC::DFG::ByteCodeParser::planLoad):
        (JSC::DFG::ByteCodeParser::checkPresenceLike):
        (JSC::DFG::ByteCodeParser::load):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDesiredWeakReferences.cpp:
        (JSC::DFG::DesiredWeakReferences::reallyAdd):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupMakeRope):
        * dfg/DFGFrozenValue.h:
        (JSC::DFG::FrozenValue::FrozenValue):
        (JSC::DFG::FrozenValue::dynamicCast):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::tryGetConstantClosureVar):
        (JSC::DFG::Graph::tryGetFoldableView):
        (JSC::DFG::Graph::getRegExpPrototypeProperty):
        (JSC::DFG::Graph::isStringPrototypeMethodSane):
        (JSC::DFG::Graph::canOptimizeStringObjectAccess):
        * dfg/DFGLazyJSValue.cpp:
        (JSC::DFG::LazyJSValue::tryGetStringImpl):
        (JSC::DFG::LazyJSValue::tryGetString):
        * dfg/DFGLazyJSValue.h:
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::convertToPutStructureHint):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::dynamicCastConstant):
        (JSC::DFG::Node::castConstant):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIn):
        (JSC::DFG::SpeculativeJIT::compileMaterializeNewObject):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileIn):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringReplace):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::lastChanceToFinalize):
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/CodeBlockSet.h:
        * heap/GCAssertions.h:
        * heap/Heap.cpp:
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::protectedObjectTypeCounts):
        (JSC::Heap::objectTypeCounts):
        (JSC::Heap::deleteUnmarkedCompiledCode):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json):
        * heap/SlotVisitor.cpp:
        (JSC::validate):
        * inspector/InjectedScriptHost.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::reportAPIException):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::finishCreation):
        (Inspector::JSInjectedScriptHost::isHTMLAllCollection):
        (Inspector::JSInjectedScriptHost::subtype):
        (Inspector::JSInjectedScriptHost::functionDetails):
        (Inspector::JSInjectedScriptHost::getInternalProperties):
        (Inspector::JSInjectedScriptHost::proxyTargetValue):
        (Inspector::JSInjectedScriptHost::weakMapSize):
        (Inspector::JSInjectedScriptHost::weakMapEntries):
        (Inspector::JSInjectedScriptHost::weakSetSize):
        (Inspector::JSInjectedScriptHost::weakSetEntries):
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSInjectedScriptHostPrototype::finishCreation):
        (Inspector::jsInjectedScriptHostPrototypeAttributeEvaluate):
        (Inspector::jsInjectedScriptHostPrototypeFunctionInternalConstructorName):
        (Inspector::jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection):
        (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue):
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapSize):
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapEntries):
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetSize):
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetEntries):
        (Inspector::jsInjectedScriptHostPrototypeFunctionIteratorEntries):
        (Inspector::jsInjectedScriptHostPrototypeFunctionEvaluateWithScopeExtension):
        (Inspector::jsInjectedScriptHostPrototypeFunctionSubtype):
        (Inspector::jsInjectedScriptHostPrototypeFunctionFunctionDetails):
        (Inspector::jsInjectedScriptHostPrototypeFunctionGetInternalProperties):
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::finishCreation):
        (Inspector::toJSJavaScriptCallFrame): Deleted.
        * inspector/JSJavaScriptCallFrame.h:
        * inspector/JSJavaScriptCallFramePrototype.cpp:
        (Inspector::JSJavaScriptCallFramePrototype::finishCreation):
        (Inspector::jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension):
        (Inspector::jsJavaScriptCallFramePrototypeFunctionScopeDescriptions):
        (Inspector::jsJavaScriptCallFrameAttributeCaller):
        (Inspector::jsJavaScriptCallFrameAttributeSourceID):
        (Inspector::jsJavaScriptCallFrameAttributeLine):
        (Inspector::jsJavaScriptCallFrameAttributeColumn):
        (Inspector::jsJavaScriptCallFrameAttributeFunctionName):
        (Inspector::jsJavaScriptCallFrameAttributeScopeChain):
        (Inspector::jsJavaScriptCallFrameAttributeThisObject):
        (Inspector::jsJavaScriptCallFrameAttributeType):
        (Inspector::jsJavaScriptCallFrameIsTailDeleted):
        * inspector/ScriptArguments.cpp:
        (Inspector::ScriptArguments::getFirstArgumentAsString):
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::getPreview):
        * interpreter/Interpreter.cpp:
        (JSC::notifyDebuggerOfUnwinding):
        (JSC::Interpreter::unwind):
        (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown):
        (JSC::Interpreter::execute):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::update):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::readFrame):
        (JSC::StackVisitor::readNonInlinedFrame):
        (JSC::StackVisitor::Frame::calleeSaveRegisters):
        * jit/JITCode.cpp:
        (JSC::JITCode::execute):
        * jit/JITOperations.cpp:
        (JSC::operationNewFunctionCommon):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        * jsc.cpp:
        (WTF::CustomGetter::customGetter):
        (WTF::RuntimeArray::finishCreation):
        (WTF::RuntimeArray::lengthGetter):
        (WTF::DOMJITGetter::customGetter):
        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::slowCall):
        (WTF::DOMJITGetterComplex::functionEnableException):
        (WTF::DOMJITGetterComplex::customGetter):
        (WTF::DOMJITFunctionObject::safeFunction):
        (functionDescribeArray):
        (functionCreateElement):
        (functionGetElement):
        (functionSetElementRoot):
        (functionGetHiddenValue):
        (functionSetHiddenValue):
        (functionSetImpureGetterDelegate):
        (functionNoFTL):
        (functionDollarEvalScript):
        (functionDollarAgentBroadcast):
        (functionTransferArrayBuffer):
        (functionFindTypeForExpression):
        (functionReturnTypeFor):
        (functionHasBasicBlockExecuted):
        (functionBasicBlockExecutionCount):
        (functionEnsureArrayStorage):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::finishCreation):
        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::transferTo):
        * runtime/ArrayBuffer.h:
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::finishCreation):
        (JSC::arrayConstructorPrivateFuncIsArraySlow):
        (JSC::arrayConstructorPrivateFuncIsArrayConstructor):
        * runtime/ArrayConstructor.h:
        (JSC::isArrayConstructor): Deleted.
        * runtime/ArrayIteratorPrototype.cpp:
        (JSC::ArrayIteratorPrototype::finishCreation):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        * runtime/AsyncFunctionPrototype.cpp:
        (JSC::AsyncFunctionPrototype::finishCreation):
        * runtime/AtomicsObject.cpp:
        (JSC::AtomicsObject::finishCreation):
        (JSC::atomicsFuncWait):
        (JSC::atomicsFuncWake):
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::finishCreation):
        * runtime/BooleanObject.h:
        (JSC::asBooleanObject):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::finishCreation):
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/ConsoleObject.cpp:
        (JSC::ConsoleObject::finishCreation):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::finishCreation):
        * runtime/DateInstance.h:
        (JSC::asDateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::formateDateInstance):
        (JSC::DatePrototype::finishCreation):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToLocaleString):
        (JSC::dateProtoFuncToLocaleDateString):
        (JSC::dateProtoFuncToLocaleTimeString):
        (JSC::dateProtoFuncGetTime):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetMilliSeconds):
        (JSC::dateProtoFuncGetUTCMilliseconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::finishCreation):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::finishCreation):
        * runtime/ExceptionHelpers.cpp:
        (JSC::isTerminatedExecutionException):
        * runtime/ExceptionHelpers.h:
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        (JSC::ExecutableBase::dump):
        (JSC::ExecutableBase::hashFor):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/GeneratorFunctionPrototype.cpp:
        (JSC::GeneratorFunctionPrototype::finishCreation):
        * runtime/GeneratorPrototype.cpp:
        (JSC::GeneratorPrototype::finishCreation):
        * runtime/GetterSetter.h:
        * runtime/InspectorInstrumentationObject.cpp:
        (JSC::InspectorInstrumentationObject::finishCreation):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        (JSC::InternalFunction::createSubclassStructure):
        * runtime/InternalFunction.h:
        (JSC::asInternalFunction):
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::finishCreation):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorPrototypeGetterCompare):
        (JSC::IntlCollatorPrototypeFuncResolvedOptions):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::finishCreation):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototypeGetterFormat):
        (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::finishCreation):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        * runtime/IntlObjectInlines.h:
        (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor):
        * runtime/IteratorPrototype.cpp:
        (JSC::IteratorPrototype::finishCreation):
        * runtime/JSArray.h:
        (JSC::asArray):
        (JSC::isJSArray):
        * runtime/JSArrayBuffer.h:
        (JSC::toPossiblySharedArrayBuffer):
        (JSC::toUnsharedArrayBuffer):
        (JSC::JSArrayBuffer::toWrapped):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::arrayBufferFuncIsView):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):
        * runtime/JSArrayBufferView.h:
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::toWrapped):
        * runtime/JSBoundFunction.cpp:
        (JSC::isBoundFunction):
        (JSC::getBoundFunctionStructure):
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::dumpForBacktrace):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::inherits):
        (JSC::JSValue::classInfoOrNull):
        * runtime/JSCallee.cpp:
        (JSC::JSCallee::finishCreation):
        * runtime/JSCell.cpp:
        (JSC::JSCell::dumpToStream):
        (JSC::JSCell::className):
        (JSC::JSCell::isAnyWasmCallee):
        * runtime/JSCell.h:
        (JSC::jsCast):
        (JSC::jsDynamicCast):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::methodTable):
        (JSC::JSCell::inherits):
        (JSC::JSCell::classInfo):
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSCustomGetterSetterFunction::finishCreation):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::setData):
        (JSC::dataViewProtoGetterBuffer):
        (JSC::dataViewProtoGetterByteLength):
        (JSC::dataViewProtoGetterByteOffset):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):
        (JSC::JSFunction::allocateAndInitializeRareData):
        (JSC::JSFunction::initializeRareData):
        (JSC::RetrieveArgumentsFunctor::RetrieveArgumentsFunctor):
        (JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor):
        (JSC::RetrieveCallerFunctionFunctor::operator()):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::getOwnNonIndexPropertyNames):
        (JSC::getCalculatedDisplayName):
        (JSC::JSFunction::reifyBoundNameIfNeeded):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::toPossiblySharedNativeTypedView):
        (JSC::toUnsharedNativeTypedView):
        (JSC::JSGenericTypedArrayView<Adaptor>::toWrapped):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
        (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
        * runtime/JSGlobalObject.cpp:
        (JSC::getTemplateObject):
        (JSC::enqueueJob):
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncProtoGetter):
        (JSC::globalFuncProtoSetter):
        * runtime/JSInternalPromiseDeferred.cpp:
        (JSC::JSInternalPromiseDeferred::create):
        * runtime/JSLexicalEnvironment.h:
        (JSC::asActivation):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::finishCreation):
        (JSC::JSModuleLoader::evaluate):
        (JSC::JSModuleLoader::getModuleNamespaceObject):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::moduleNamespaceObjectSymbolIterator):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::finishCreation):
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSNativeStdFunction::finishCreation):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::finishCreation):
        (JSC::unwrapBoxedPrimitive):
        (JSC::Stringifier::Stringifier):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::className):
        (JSC::JSObject::toStringName):
        (JSC::JSObject::calculatedClassName):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::ensureInt32Slow):
        (JSC::JSObject::ensureDoubleSlow):
        (JSC::JSObject::ensureContiguousSlow):
        (JSC::JSObject::ensureArrayStorageSlow):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::getOwnStaticPropertySlot):
        (JSC::JSObject::findPropertyHashEntry):
        (JSC::JSObject::getOwnNonIndexPropertyNames):
        (JSC::JSObject::reifyAllStaticProperties):
        (JSC::JSObject::getOwnPropertyDescriptor):
        * runtime/JSObject.h:
        (JSC::JSObject::finishCreation):
        (JSC::JSNonFinalObject::finishCreation):
        (JSC::JSFinalObject::finishCreation):
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::create):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::finishCreation):
        (JSC::propertyNameIteratorFuncNext):
        * runtime/JSScope.cpp:
        (JSC::JSScope::symbolTable):
        * runtime/JSScope.h:
        * runtime/JSString.cpp:
        (JSC::JSString::dumpToStream):
        * runtime/JSStringIterator.cpp:
        (JSC::JSStringIterator::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::typedArrayViewPrivateFuncIsTypedArrayView):
        (JSC::typedArrayViewPrivateFuncLength):
        (JSC::typedArrayViewPrivateFuncGetOriginalConstructor):
        (JSC::typedArrayViewProtoGetterFuncToStringTag):
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/LazyClassStructure.cpp:
        (JSC::LazyClassStructure::Initializer::setConstructor):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/MapConstructor.cpp:
        (JSC::MapConstructor::finishCreation):
        * runtime/MapIteratorPrototype.cpp:
        (JSC::MapIteratorPrototype::finishCreation):
        (JSC::MapIteratorPrototypeFuncNext):
        * runtime/MapPrototype.cpp:
        (JSC::MapPrototype::finishCreation):
        (JSC::mapProtoFuncValues):
        (JSC::mapProtoFuncEntries):
        (JSC::mapProtoFuncKeys):
        (JSC::privateFuncMapIterator):
        (JSC::privateFuncMapIteratorNext):
        * runtime/MathObject.cpp:
        (JSC::MathObject::finishCreation):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        (JSC::moduleLoaderPrototypeRequestedModules):
        (JSC::moduleLoaderPrototypeModuleDeclarationInstantiation):
        (JSC::moduleLoaderPrototypeResolve):
        (JSC::moduleLoaderPrototypeFetch):
        (JSC::moduleLoaderPrototypeInstantiate):
        (JSC::moduleLoaderPrototypeGetModuleNamespaceObject):
        (JSC::moduleLoaderPrototypeEvaluate):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::finishCreation):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::finishCreation):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::finishCreation):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::finishCreation):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::finishCreation):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::toStringName):
        (JSC::ProxyObject::finishCreation):
        * runtime/ReflectObject.cpp:
        (JSC::ReflectObject::finishCreation):
        (JSC::reflectObjectConstruct):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::finishCreation):
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::constructRegExp):
        * runtime/RegExpConstructor.h:
        (JSC::asRegExpConstructor):
        (JSC::isRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::finishCreation):
        * runtime/RegExpObject.h:
        (JSC::asRegExpObject):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        (JSC::regExpProtoFuncTestFast):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncMatchFast):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoGetterGlobal):
        (JSC::regExpProtoGetterIgnoreCase):
        (JSC::regExpProtoGetterMultiline):
        (JSC::regExpProtoGetterSticky):
        (JSC::regExpProtoGetterUnicode):
        (JSC::regExpProtoGetterSource):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):
        (JSC::ScriptExecutable::newReplacementCodeBlockFor):
        * runtime/SetConstructor.cpp:
        (JSC::SetConstructor::finishCreation):
        * runtime/SetIteratorPrototype.cpp:
        (JSC::SetIteratorPrototype::finishCreation):
        (JSC::SetIteratorPrototypeFuncNext):
        * runtime/SetPrototype.cpp:
        (JSC::SetPrototype::finishCreation):
        (JSC::setProtoFuncValues):
        (JSC::setProtoFuncEntries):
        (JSC::privateFuncSetIterator):
        (JSC::privateFuncSetIteratorNext):
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::sourceURL):
        (JSC::StackFrame::functionName):
        * runtime/StringIteratorPrototype.cpp:
        (JSC::StringIteratorPrototype::finishCreation):
        * runtime/StringObject.cpp:
        (JSC::StringObject::finishCreation):
        * runtime/StringObject.h:
        (JSC::asStringObject):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        (JSC::replace):
        (JSC::stringProtoFuncReplaceUsingRegExp):
        (JSC::stringProtoFuncToString):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::setObjectToStringValue):
        * runtime/Symbol.cpp:
        (JSC::Symbol::finishCreation):
        * runtime/SymbolConstructor.cpp:
        (JSC::SymbolConstructor::finishCreation):
        * runtime/SymbolObject.cpp:
        (JSC::SymbolObject::finishCreation):
        * runtime/SymbolPrototype.cpp:
        (JSC::SymbolPrototype::finishCreation):
        (JSC::symbolProtoFuncToString):
        (JSC::symbolProtoFuncValueOf):
        * runtime/TestRunnerUtils.cpp:
        (JSC::getExecutableForFunction):
        * runtime/ThrowScope.cpp:
        (JSC::ThrowScope::throwException):
        * runtime/VM.cpp:
        (JSC::VM::throwException):
        * runtime/WeakMapConstructor.cpp:
        (JSC::WeakMapConstructor::finishCreation):
        * runtime/WeakMapPrototype.cpp:
        (JSC::WeakMapPrototype::finishCreation):
        (JSC::getWeakMapData):
        * runtime/WeakSetConstructor.cpp:
        (JSC::WeakSetConstructor::finishCreation):
        * runtime/WeakSetPrototype.cpp:
        (JSC::WeakSetPrototype::finishCreation):
        (JSC::getWeakMapData):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::codeBlockFromArg):
        * wasm/JSWebAssembly.cpp:
        (JSC::JSWebAssembly::finishCreation):
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::getWasmBufferFromValue):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finishCreation):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::grow):
        (JSC::JSWebAssemblyMemory::finishCreation):
        (JSC::JSWebAssemblyMemory::destroy):
        (JSC::JSWebAssemblyMemory::~JSWebAssemblyMemory): Deleted.
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::finishCreation):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::finishCreation):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::getMemory):
        * wasm/js/WebAssemblyModulePrototype.cpp:
        (JSC::webAssemblyModuleProtoCustomSections):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::getTable):
        (JSC::webAssemblyTableProtoFuncSet):

2017-01-26  Mark Lam  <mark.lam@apple.com>

        Fix missing exception check in genericTypedArrayViewProtoFuncSet().
        https://bugs.webkit.org/show_bug.cgi?id=166812
        <rdar://problem/29916672>

        Reviewed by Saam Barati.

        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSet):

2017-01-26  Commit Queue  <commit-queue@webkit.org>

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

        "It was a Kraken performance regression" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "OSR entry: delay outer-loop compilation when at inner-loop"
        https://bugs.webkit.org/show_bug.cgi?id=167149
        http://trac.webkit.org/changeset/211224

2017-01-26  Saam Barati  <sbarati@apple.com>

        Harden how the compiler references GC objects
        https://bugs.webkit.org/show_bug.cgi?id=167277
        <rdar://problem/30179506>

        Reviewed by Filip Pizlo.

        Since r210971, the DFG/FTL will flash safepoints before
        each phase. This means that there are more opportunities for
        a GC to happen while the compiler is running. Because of this,
        the compiler must keep track of all the heap pointers that are part
        of the Graph data structure. To accomplish this, I've designed
        a new type called RegisteredStructure that can only be constructed
        after the Graph becomes aware of its underlying Structure*. I
        designed this new type to have the type system in C++ help us catch
        errors where we're not informing the graph/plan of a heap pointer.
        I've made it a compile error to create an OpInfo with a pointer
        T* where T inherits from HeapCell. This encourages an OpInfo
        to be created with either a FrozenValue* or a RegisteredStructure.
        I've added similar compile time assertions for TrustedImmPtr in DFG::SpeculativeJIT
        and FTL::Output::constIntPtr. These static asserts don't save us from all bad
        programs because there are ways to write code that's incorrect that compiles,
        but the new types do help us ensure that the most obvious way of writing the
        code is correct.
        
        The reason this patch is so big is that I've strung RegisteredStructure and
        RegisteredStructureSet through the entire DFG/FTL.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::determineLiveness):
        * bytecode/StructureSet.cpp:
        (JSC::StructureSet::filter): Deleted.
        (JSC::StructureSet::filterArrayModes): Deleted.
        (JSC::StructureSet::speculationFromStructures): Deleted.
        (JSC::StructureSet::arrayModesFromStructures): Deleted.
        (JSC::StructureSet::validateReferences): Deleted.
        * bytecode/StructureSet.h:
        * dfg/DFGAbstractInterpreter.h:
        (JSC::DFG::AbstractInterpreter::filter):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult):
        (JSC::DFG::isToThisAnIdentity):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransition):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::filter):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::setType):
        (JSC::DFG::AbstractValue::mergeOSREntryValue):
        (JSC::DFG::AbstractValue::filter):
        (JSC::DFG::AbstractValue::changeStructure):
        (JSC::DFG::AbstractValue::contains):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::observeTransition):
        (JSC::DFG::AbstractValue::TransitionObserver::TransitionObserver):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::alreadyChecked):
        * dfg/DFGArrayifySlowPathGenerator.h:
        (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
        (JSC::DFG::ByteCodeParser::load):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::handlePutById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
        (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
        (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
        * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:
        (JSC::DFG::CallCreateDirectArgumentsSlowPathGenerator::CallCreateDirectArgumentsSlowPathGenerator):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::notifyCompilingStructureTransition):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::emitGetByOffset):
        (JSC::DFG::ConstantFoldingPhase::emitPutByOffset):
        (JSC::DFG::ConstantFoldingPhase::addBaseCheck):
        (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
        * dfg/DFGDesiredWeakReferences.cpp:
        (JSC::DFG::DesiredWeakReferences::reallyAdd):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::checkArray):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::Graph):
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::tryGetConstantProperty):
        (JSC::DFG::Graph::inferredValueForProperty):
        (JSC::DFG::Graph::visitChildren):
        (JSC::DFG::Graph::freeze):
        (JSC::DFG::Graph::registerStructure):
        (JSC::DFG::Graph::assertIsRegistered):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::registerStructure):
        (JSC::DFG::Graph::addStructureSet):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::branchWeakStructure):
        * dfg/DFGMultiGetByOffsetData.cpp:
        (JSC::DFG::MultiGetByOffsetCase::dumpInContext):
        * dfg/DFGMultiGetByOffsetData.h:
        (JSC::DFG::MultiGetByOffsetCase::MultiGetByOffsetCase):
        (JSC::DFG::MultiGetByOffsetCase::set):
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::convertToPutStructureHint):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToCheckStructure):
        (JSC::DFG::Node::structureSet):
        (JSC::DFG::Node::structure):
        (JSC::DFG::Node::OpInfoWrapper::OpInfoWrapper):
        (JSC::DFG::Node::OpInfoWrapper::operator=):
        (JSC::DFG::Node::OpInfoWrapper::asRegisteredStructure):
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGOpInfo.h:
        (JSC::DFG::OpInfo::OpInfo):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
        * dfg/DFGRegisteredStructure.h: Added.
        (JSC::DFG::RegisteredStructure::get):
        (JSC::DFG::RegisteredStructure::operator->):
        (JSC::DFG::RegisteredStructure::operator==):
        (JSC::DFG::RegisteredStructure::operator!=):
        (JSC::DFG::RegisteredStructure::operator bool):
        (JSC::DFG::RegisteredStructure::RegisteredStructure):
        (JSC::DFG::RegisteredStructure::createPrivate):
        * dfg/DFGRegisteredStructureSet.cpp: Added.
        (JSC::DFG::RegisteredStructureSet::filter):
        (JSC::DFG::RegisteredStructureSet::filterArrayModes):
        (JSC::DFG::RegisteredStructureSet::speculationFromStructures):
        (JSC::DFG::RegisteredStructureSet::arrayModesFromStructures):
        (JSC::DFG::RegisteredStructureSet::validateReferences):
        * dfg/DFGRegisteredStructureSet.h: Added.
        (JSC::DFG::RegisteredStructureSet::RegisteredStructureSet):
        (JSC::DFG::RegisteredStructureSet::onlyStructure):
        (JSC::DFG::RegisteredStructureSet::toStructureSet):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
        (JSC::DFG::SpeculativeJIT::emitGetCallee):
        (JSC::DFG::SpeculativeJIT::silentFill):
        (JSC::DFG::SpeculativeJIT::checkArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compileFromCharCode):
        (JSC::DFG::SpeculativeJIT::compileDoubleRep):
        (JSC::DFG::compileClampDoubleToByte):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        (JSC::DFG::SpeculativeJIT::compileArithRounding):
        (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon):
        (JSC::DFG::SpeculativeJIT::compileNewFunction):
        (JSC::DFG::SpeculativeJIT::compileCreateActivation):
        (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments):
        (JSC::DFG::SpeculativeJIT::compileCreateScopedArguments):
        (JSC::DFG::SpeculativeJIT::compileCreateClonedArguments):
        (JSC::DFG::SpeculativeJIT::compileSpread):
        (JSC::DFG::SpeculativeJIT::compileArraySlice):
        (JSC::DFG::SpeculativeJIT::compileTypeOf):
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOnCell):
        (JSC::DFG::SpeculativeJIT::compileNewTypedArray):
        (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
        (JSC::DFG::SpeculativeJIT::compileMaterializeNewObject):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::TrustedImmPtr::TrustedImmPtr):
        (JSC::DFG::SpeculativeJIT::TrustedImmPtr::weakPointer):
        (JSC::DFG::SpeculativeJIT::TrustedImmPtr::operator MacroAssembler::TrustedImmPtr):
        (JSC::DFG::SpeculativeJIT::TrustedImmPtr::asIntptr):
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject):
        (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * dfg/DFGStructureAbstractValue.cpp:
        (JSC::DFG::StructureAbstractValue::assertIsRegistered):
        (JSC::DFG::StructureAbstractValue::clobber):
        (JSC::DFG::StructureAbstractValue::observeTransition):
        (JSC::DFG::StructureAbstractValue::observeTransitions):
        (JSC::DFG::StructureAbstractValue::add):
        (JSC::DFG::StructureAbstractValue::merge):
        (JSC::DFG::StructureAbstractValue::mergeNotTop):
        (JSC::DFG::StructureAbstractValue::filter):
        (JSC::DFG::StructureAbstractValue::filterSlow):
        (JSC::DFG::StructureAbstractValue::filterClassInfoSlow):
        (JSC::DFG::StructureAbstractValue::contains):
        (JSC::DFG::StructureAbstractValue::isSubsetOf):
        (JSC::DFG::StructureAbstractValue::isSupersetOf):
        (JSC::DFG::StructureAbstractValue::overlaps):
        (JSC::DFG::StructureAbstractValue::isSubClassOf):
        (JSC::DFG::StructureAbstractValue::dumpInContext):
        * dfg/DFGStructureAbstractValue.h:
        (JSC::DFG::StructureAbstractValue::StructureAbstractValue):
        (JSC::DFG::StructureAbstractValue::operator=):
        (JSC::DFG::StructureAbstractValue::set):
        (JSC::DFG::StructureAbstractValue::toStructureSet):
        (JSC::DFG::StructureAbstractValue::at):
        (JSC::DFG::StructureAbstractValue::operator[]):
        (JSC::DFG::StructureAbstractValue::onlyStructure):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::StructureRegistrationPhase): Deleted.
        (JSC::DFG::StructureRegistrationPhase::run): Deleted.
        (JSC::DFG::StructureRegistrationPhase::registerStructures): Deleted.
        (JSC::DFG::StructureRegistrationPhase::registerStructure): Deleted.
        (JSC::DFG::StructureRegistrationPhase::assertAreRegistered): Deleted.
        (JSC::DFG::StructureRegistrationPhase::assertIsRegistered): Deleted.
        (JSC::DFG::performStructureRegistration): Deleted.
        * dfg/DFGStructureRegistrationPhase.h:
        * dfg/DFGTransition.cpp:
        (JSC::DFG::Transition::dumpInContext):
        * dfg/DFGTransition.h:
        (JSC::DFG::Transition::Transition):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::noticeStructureCheck):
        (JSC::DFG::TypeCheckHoistingPhase::noticeStructureCheckAccountingForArrayMode):
        * dfg/DFGValidate.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallObjectConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckStructure):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
        (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileAllocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::compileReallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiGetByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
        (JSC::FTL::DFG::LowerDFGToB3::compileOverridesHasInstance):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckStructureImmediate):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
        (JSC::FTL::DFG::LowerDFGToB3::compileLogShadowChickenTail):
        (JSC::FTL::DFG::LowerDFGToB3::checkStructure):
        (JSC::FTL::DFG::LowerDFGToB3::checkInferredType):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray):
        (JSC::FTL::DFG::LowerDFGToB3::allocateUninitializedContiguousJSArray):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::equalNullOrUndefined):
        (JSC::FTL::DFG::LowerDFGToB3::lowCell):
        (JSC::FTL::DFG::LowerDFGToB3::speculateStringObjectForStructureID):
        (JSC::FTL::DFG::LowerDFGToB3::weakPointer):
        (JSC::FTL::DFG::LowerDFGToB3::frozenPointer):
        (JSC::FTL::DFG::LowerDFGToB3::weakStructureID):
        (JSC::FTL::DFG::LowerDFGToB3::weakStructure):
        (JSC::FTL::DFG::LowerDFGToB3::crash):
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::weakPointer):
        (JSC::FTL::Output::constIntPtr):

2017-01-26  JF Bastien  <jfbastien@apple.com>

        OSR entry: delay outer-loop compilation when at inner-loop
        https://bugs.webkit.org/show_bug.cgi?id=167149

        Reviewed by Filip Pizlo.

        As of https://bugs.webkit.org/show_bug.cgi?id=155217 OSR
        compilation can be kicked off for an entry into an outer-loop,
        while executing an inner-loop. This is desirable because often the
        codegen from an inner-entry isn't as good as the codegen from an
        outer-entry, but execution from an inner-loop is often pretty hot
        and likely to kick off compilation. This approach provided nice
        speedups on Kraken because we'd select to enter to the outer-loop
        very reliably, which reduces variability (the inner-loop was
        selected roughly 1/5 times from my unscientific measurements).

        When compilation starts we take a snapshot of the JSValues at the
        current execution state using OSR's recovery mechanism. These
        values are passed to the compiler and are used as way to perform
        type profiling, and could be used to observe cell types as well as
        to perform predictions such as through constant propagation.

        It's therefore desired to enter from the outer-loop when we can,
        but we need to be executing from that location to capture the
        right JSValues, otherwise we're confusing the compiler and giving
        it inaccurate JSValues which can lead it to predict the wrong
        things, leading to suboptimal code or recompilation due to
        misprediction, or in super-corner-cases a crash.

        These effects are pretty hard to measure: Fil points out that
        marsalis-osr-entry really needs mustHandleValues (the JSValues
        from the point of execution) because right now it just happens to
        correctly guess int32. I tried removing mustHandleValues entirely
        and saw no slowdowns, but our benchmarks probably aren't
        sufficient to reliably find issues, sometimes because we happen to
        have sufficient mitigations.

        DFG tier-up was added here:
        https://bugs.webkit.org/show_bug.cgi?id=112838

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::JITCompiler):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGTierUpEntryTrigger.h: Copied from Source/JavaScriptCore/ftl/FTLOSREntry.h.
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback):
        (JSC::DFG::Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create):
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously):
        (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidComplete):
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):
        * ftl/FTLOSREntry.h:
        * jit/JITOperations.cpp:

2017-01-25  Saam Barati  <sbarati@apple.com>

        WebAssembly JS API: coerce return values from imports
        https://bugs.webkit.org/show_bug.cgi?id=165480
        <rdar://problem/29760318>

        Reviewed by Yusuke Suzuki.

        This patch does proper coercion for all possible
        JSValue return types from an imported function.
        
        It also adds the spec-compliant code to throw an exception
        when calling an import that has an i64 parameter or return
        value.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitJumpIfException):
        * jit/AssemblyHelpers.h:
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToJs):

2017-01-25  Filip Pizlo  <fpizlo@apple.com>

        jsc.cpp should have the $.agent stuff for testing SAB
        https://bugs.webkit.org/show_bug.cgi?id=167431

        Reviewed by Saam Barati.
        
        This adds some stuff that the SAB branch of test262 needs. None of this is exposed except for our
        own tests and the SAB branch of test262. We now pass all of the Atomics tests in the SAB branch
        of test262.
        
        * jsc.cpp:
        (Message::releaseContents):
        (Message::index):
        (GlobalObject::finishCreation):
        (GlobalObject::addFunction):
        (Message::Message):
        (Message::~Message):
        (Worker::Worker):
        (Worker::~Worker):
        (Worker::send):
        (Worker::receive):
        (Worker::current):
        (Worker::currentWorker):
        (Workers::Workers):
        (Workers::~Workers):
        (Workers::broadcast):
        (Workers::report):
        (Workers::tryGetReport):
        (Workers::getReport):
        (Workers::singleton):
        (functionDollarCreateRealm):
        (functionDollarDetachArrayBuffer):
        (functionDollarEvalScript):
        (functionDollarAgentStart):
        (functionDollarAgentReceiveBroadcast):
        (functionDollarAgentReport):
        (functionDollarAgentSleep):
        (functionDollarAgentBroadcast):
        (functionDollarAgentGetReport):
        (functionWaitForReport):
        (checkException):
        (runWithScripts):
        (runJSC):
        (jscmain):
        * runtime/JSArrayBuffer.h:

2017-01-25  Filip Pizlo  <fpizlo@apple.com>

        ARM/ARM64 stress/atomics-store-return.js fails
        <rdar://problem/30192652>

        Reviewed by Michael Saboff.
        
        The problem was relying on double->int casts for anything. We need to use toInt32().

        * runtime/AtomicsObject.cpp:
        (JSC::atomicsFuncCompareExchange):
        (JSC::atomicsFuncExchange):
        (JSC::atomicsFuncStore):

2017-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        collectMatchingElementsInFlatTree should not find elements inside an user agent shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=167409

        Reviewed by Antti Koivisto.

        Added matchingElementInFlatTree as a common identifier since it's required in the bindings code.

        * runtime/CommonIdentifiers.h:

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167394

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * runtime/CommonIdentifiers.h:

2017-01-24  Filip Pizlo  <fpizlo@apple.com>

        Atomics.store should return the int-converted value according to toInteger
        https://bugs.webkit.org/show_bug.cgi?id=167399

        Reviewed by Saam Barati.
        
        I keep getting this wrong, but I think I've finally done it right. What we want is for
        Atomics.store to return the value it was passed after toInteger, which doesn't clip the value to
        any kind of range. It does get truncated to double.
        
        This changes the code to pass those "integers" as doubles. It doesn't matter that this is slow,
        since all of these code paths are slow due to their need to check everything. We'll take care of
        that by making them intrinsic later.

        * runtime/AtomicsObject.cpp:
        (JSC::atomicsFuncAdd):
        (JSC::atomicsFuncAnd):
        (JSC::atomicsFuncCompareExchange):
        (JSC::atomicsFuncExchange):
        (JSC::atomicsFuncLoad):
        (JSC::atomicsFuncOr):
        (JSC::atomicsFuncStore):
        (JSC::atomicsFuncSub):
        (JSC::atomicsFuncXor):

2017-01-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Optimize Number#toString with Int52
        https://bugs.webkit.org/show_bug.cgi?id=167303

        Reviewed by Sam Weinig.

        In kraken crypto-sha256-iterative, we frequently call Number.prototype.toString with
        Int52. In that case, toString handles it in the generic double path. But we should
        have a fast path for this since it can be represented in int64_t.

        The stanford-crypto-sha256-iterative shows 1.6% performance improvement (on Linux machine hanayamata).

            Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc() between
            sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
            function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
            milliseconds.

                                                       baseline                  patched

            stanford-crypto-sha256-iterative        32.853+-0.075      ^      32.325+-0.055         ^ definitely 1.0163x faster

        * runtime/JSCJSValue.h:
        * runtime/NumberPrototype.cpp:
        (JSC::int52ToStringWithRadix):
        (JSC::toStringWithRadix):

2017-01-24  Michael Saboff  <msaboff@apple.com>

        InferredTypeTable entry manipulation is not TOCTOU race safe
        https://bugs.webkit.org/show_bug.cgi?id=167344

        Reviewed by Filip Pizlo.

        Made the accesses to table values safe from Time of Check,
        Time of Use races with local temporary values.

        Fixed point that we set an entry in the table to access the
        current table entry instead of using the local entry.  In that case,
        we reload the now changed entry.

        * runtime/InferredTypeTable.cpp:
        (JSC::InferredTypeTable::visitChildren):
        (JSC::InferredTypeTable::get):
        (JSC::InferredTypeTable::willStoreValue):
        (JSC::InferredTypeTable::makeTop):

2017-01-24  Filip Pizlo  <fpizlo@apple.com>

        Atomics.store should return the int-converted value, not the value that it stored
        https://bugs.webkit.org/show_bug.cgi?id=167395

        Reviewed by Saam Barati.
        
        Previously the code was based around passing a lambda that operated over the native type of the
        operation (so for example int8_t if we were doing things to Int8Arrays). But to support this
        behavior of store, we need it to be able to control how it converts its result to JSValue and it
        needs to see its argument as an int32_t. It turns out that it's easy for all of the functions in
        AtomicsObject.cpp to also adopt this protocol since the conversion to JSValue is just jsNumber()
        from the native type in those cases, and the conversion from int32_t is done for free in
        std::atomic.

        * runtime/AtomicsObject.cpp:
        (JSC::atomicsFuncAdd):
        (JSC::atomicsFuncAnd):
        (JSC::atomicsFuncCompareExchange):
        (JSC::atomicsFuncExchange):
        (JSC::atomicsFuncLoad):
        (JSC::atomicsFuncOr):
        (JSC::atomicsFuncStore):
        (JSC::atomicsFuncSub):
        (JSC::atomicsFuncXor):

2017-01-24  Filip Pizlo  <fpizlo@apple.com>

        -0 is a valid array index and AtomicsObject should know this
        https://bugs.webkit.org/show_bug.cgi?id=167386

        Reviewed by Mark Lam.

        * runtime/AtomicsObject.cpp: The bug title really says it all.

2017-01-24  Commit Queue  <commit-queue@webkit.org>

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

        introduces a subtle bug in InferredTypeTable, huge
        Octane/deltablue regression (Requested by pizlo on #webkit).

        Reverted changeset:

        "InferredTypeTable entry manipulation is not TOCTOU race safe"
        https://bugs.webkit.org/show_bug.cgi?id=167344
        http://trac.webkit.org/changeset/211091

2017-01-24  Filip Pizlo  <fpizlo@apple.com>

        Enable the stochastic space-time scheduler on the larger multicores
        https://bugs.webkit.org/show_bug.cgi?id=167382
        <rdar://problem/30173375>

        Rubber stamped by Saam Barati
        
        This looks like a 1.3% JetStream speed-up thanks to a 28% splay-latency improvement. This new
        scheduler seems to prevent all of the same pathologies as the old one prevented. But instead of
        periodically suspending the mutator, this new one will only suspend after an iteration of the
        constraint fixpoint. The length of that suspension length is random with the distribution being
        governed by mutatorUtilization. Once resumed, the mutator gets to run unimpeded until draining
        stalls.
        
        I'm enabling it on platforms as I benchmark those platforms. It's possible that we will want to
        use a different scheduler on different platforms.

        * runtime/Options.cpp:
        (JSC::overrideDefaults):

2017-01-24  Michael Saboff  <msaboff@apple.com>

        JSArray::tryCreateUninitialized should be called JSArray::tryCreateForInitializationPrivate
        https://bugs.webkit.org/show_bug.cgi?id=167334

        Rubber-stamped by Filip Pizlo.

        * dfg/DFGOperations.cpp:
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSArray.cpp:
        (JSC::JSArray::tryCreateForInitializationPrivate):
        (JSC::JSArray::fastSlice):
        (JSC::JSArray::tryCreateUninitialized): Deleted.
        * runtime/JSArray.h:
        (JSC::JSArray::tryCreateForInitializationPrivate):
        (JSC::constructArray):
        (JSC::constructArrayNegativeIndexed):
        (JSC::JSArray::tryCreateUninitialized): Deleted.
        * runtime/RegExpMatchesArray.cpp:
        (JSC::createEmptyRegExpMatchesArray):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):

2017-01-23  Michael Saboff  <msaboff@apple.com>

        InferredTypeTable entry manipulation is not TOCTOU race safe
        https://bugs.webkit.org/show_bug.cgi?id=167344

        Reviewed by Filip Pizlo.

        Made the accesses to table values safe from Time of Check,
        Time of Use races with local temporary values.

        * runtime/InferredTypeTable.cpp:
        (JSC::InferredTypeTable::visitChildren):
        (JSC::InferredTypeTable::get):
        (JSC::InferredTypeTable::willStoreValue):
        (JSC::InferredTypeTable::makeTop):

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to trigger a Garbage Collection
        https://bugs.webkit.org/show_bug.cgi?id=167345
        <rdar://problem/30102853>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Console.json:
        * inspector/protocol/Debugger.json:
        * inspector/protocol/Heap.json:
        * inspector/protocol/Runtime.json:
        These domains are supported by Worker backends. Label them.

        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.generate_domain):
        * inspector/scripts/codegen/models.py:
        (Protocol.parse_domain):
        (Domain.__init__):
        (Domains):
        Parse "workerSupported" and include a line in BackendCommands.js
        that calls to InspectorBackend.workerSupportedDomain().

        * inspector/scripts/tests/generic/domain-availability.json: Added.
        * inspector/scripts/tests/generic/expected/domain-availability.json-result: Added.
        * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result: Added.
        * inspector/scripts/tests/generic/worker-supported-domains.json: Added.
        Tests for domain "workerSupported" and "availability" properties.

2017-01-23  Saam Barati  <sbarati@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=167247
        JSC: operationSpreadGeneric uses the wrong global object for the builtin function and slow_path_spread consults the wrong global object to prove if the iterator protocol is unobservable
        <rdar://problem/30121809>

        Reviewed by Filip Pizlo.

        There were two bugs in the different tiers with respect to how
        spread handled global objects.
        
        The first was in the LLInt/baseline inside slow_path_spread:
        
        We consulted the lexical global object instead of the thing we're
        spreading's global object to determine if the array iterator protocol
        is unobservable. This is wrong if the incoming array is from a different
        global object. We must consult the incoming array's global object
        to determine if it can be spread using the fast path.
        
        The second was in operationSpreadGeneric in the DFG/FTL:
        
        We were always using the incoming array's global object, even
        when going down the slow path. This is wrong because we were
        fetching the builtin iteration function helper from the incoming
        array's global object, which meant that if the iterator function
        were to throw an exception, it could leak objects from a different
        global object. We should be executing the iterator function with
        the lexical global object.

        * dfg/DFGOperations.cpp:
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionGlobalObjectForObject):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSArray.h:
        * runtime/JSArrayInlines.h:
        (JSC::JSArray::isIteratorProtocolFastAndNonObservable):

2017-01-22  Filip Pizlo  <fpizlo@apple.com>

        Land the stochastic space-time scheduler disabled
        https://bugs.webkit.org/show_bug.cgi?id=167249

        Reviewed by Saam Barati.
        
        The space-time scheduler is pretty weird. It uses a periodic scheduler where the next period is
        simply determined by an integer multiple of time since when the scheduler last snapped phase. It
        snaps phase after constraint solving. Both the snapping of the phase after constraint solving and
        the periodicity appear to be necessary for good performance. For example, if the space-time
        scheduler decided that it was in the resume part of the phase just by virtue of having just
        resumed, then it would be empirically worse than our scheduler which asks "what time is it?" to
        decide whether it should be suspended or resumed even if it just suspended or resumed. I've spent
        a lot of time wondering why these two features are essential, and I think I found a reason.
        
        What's happening is that sometimes the GC has an overrun and its increment takes longer than it
        should have. The current scheduler forgives overruns when constraint solving, which seems to
        make sense because it cannot control whether constraint solving runs with the mutator resumed or
        suspended. It has to be suspended currently. Snapping phase after constraint solving accomplishes
        this. What's more surprising is how important it is to manage deadline misses during draining.
        The relevant kind of deadline miss is when doing mutator-suspended draining to catch up to the
        retreating wavefront. Deadline misses while doing this can happen systematically in some
        workloads, like JetStream/hash-map and some test in Speedometer. It's because they have some
        ginormous object and it takes like ~3ms+-1.5ms just to scan it. The space-time scheduler's use
        of time to decide what to do saves the day here: after the deadline miss, the scheduler will
        initially realize that it missed its deadline to resume the mutator. But as soon as it does this
        it asks: "based on current time since phase snap, what should I do?". In the case of a deadline
        miss, this question is essentially a weighted coin flip because of the high noise in the amount
        of time that it takes to do things in the GC. If you overrun, you will probably overrun by
        multiple milliseconds, which is enough that where you land in the space-time scheduler's timeline
        is random. The likelihood that you land in the "resume mutator" part of the timeline has a
        probability that is roughly the same as what the space-time scheduler calls mutator utilization.
        This is a super weird property. I did not intend for it to have this property, but it appears to
        be the most important property of this scheduler.
        
        Based on this, it seems that the fact that the space-time scheduler could suspend the mutator
        before draining runs out of work doesn't accomplish anything. As soon as you resume the
        mutator, you have a retreating wavefront to worry about. But if the collector is happily scanning
        things then it's almost certain that the collector will outpace the mutator. Also, anything that
        the mutator asks us to revisit is deferred anyway.
        
        In the past I've tried to replace the scheduler in one patch and this turned out to be annoying
        because even a poorly conceived scheduler should be iterated on. This patch lands a new scheduler
        called the StochasticSpaceTime scheduler. It replaces two of the known-good features of the old
        scheduler: (1) it forgives constraint pauses and (2) after deadline overrun its choice is random,
        weighted by the mutator utilization target. Unlike the old scheduler, this one will only suspend
        the mutator when the draining terminates, but it may pause for any amount of time after an
        iteration of constraint solving. It computes the targetPause by measuring constraint solving time
        and multiplying by the pauseScale (0.3 by default). If smaller then minimumPause (0.3ms by
        default), then it uses minimumPause instead. The stochastic scheduler will then definitely do at
        least targetPause worth of suspended draining after the constraint solving iteration, and then
        it will decide whether or not to do another one at random. The probability that it will choose to
        resume is exactly mutatorUtilization, which is computed exactly as before. Therefore, the
        probability of resumption starts at 0.7 and goes down as memory usage rises. Conversely, the
        probability that we will stay suspended starts at 0.3 and goes up from there.
        
        This new scheduler looks like it might be a 25% improvement on splay-latency. It also looks like
        a small progression on hash-map. Hash-map is a great test of one of the worst cases of retreating
        wavefront, since it is repeatedly storing to a ginormous array. This array is sure to take a
        while to scan, and to complete, the GC must be smart enough to visit any new objects it finds
        while scanning the array immediately after scanning that array. This new scheduler means that
        after scanning the array, the probability that you will scan whatever you found in it starts at
        0.3 and rises as the program allocates. It's sure to be 0.3, and not 0.3^k, because after the
        wavefront stops advancing, the only object on the mark stack after a constraint iteration will be
        that array. Since there is sure to be a 0.3ms or longer pause, the GC will be sure to start
        visiting this object. The GC can then complete if it just allows enough time after this to scan
        whatever new objects it finds. If scanning the array overruns the deadline (and it almost
        certainly will) then the probability that the GC keeps the mutator suspended is simply
        1 - mutatorUtilization.
        
        This scheduler is disabled by default. You can enable it with
        --useStochasticMutatorScheduler=true.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markToFixpoint):
        * heap/Heap.h:
        * heap/MarkingConstraintSet.cpp:
        (JSC::MarkingConstraintSet::didStartMarking):
        (JSC::MarkingConstraintSet::executeConvergenceImpl):
        (JSC::MarkingConstraintSet::resetStats): Deleted.
        (JSC::MarkingConstraintSet::executeBootstrap): Deleted.
        * heap/MarkingConstraintSet.h:
        * heap/MutatorScheduler.cpp:
        (JSC::MutatorScheduler::didReachTermination):
        (JSC::MutatorScheduler::synchronousDrainingDidStall):
        * heap/MutatorScheduler.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didReachTermination):
        (JSC::SlotVisitor::drainFromShared):
        * heap/StochasticSpaceTimeMutatorScheduler.cpp: Added.
        (JSC::StochasticSpaceTimeMutatorScheduler::Snapshot::Snapshot):
        (JSC::StochasticSpaceTimeMutatorScheduler::Snapshot::now):
        (JSC::StochasticSpaceTimeMutatorScheduler::Snapshot::bytesAllocatedThisCycle):
        (JSC::StochasticSpaceTimeMutatorScheduler::StochasticSpaceTimeMutatorScheduler):
        (JSC::StochasticSpaceTimeMutatorScheduler::~StochasticSpaceTimeMutatorScheduler):
        (JSC::StochasticSpaceTimeMutatorScheduler::state):
        (JSC::StochasticSpaceTimeMutatorScheduler::beginCollection):
        (JSC::StochasticSpaceTimeMutatorScheduler::didStop):
        (JSC::StochasticSpaceTimeMutatorScheduler::willResume):
        (JSC::StochasticSpaceTimeMutatorScheduler::didReachTermination):
        (JSC::StochasticSpaceTimeMutatorScheduler::didExecuteConstraints):
        (JSC::StochasticSpaceTimeMutatorScheduler::synchronousDrainingDidStall):
        (JSC::StochasticSpaceTimeMutatorScheduler::timeToStop):
        (JSC::StochasticSpaceTimeMutatorScheduler::timeToResume):
        (JSC::StochasticSpaceTimeMutatorScheduler::log):
        (JSC::StochasticSpaceTimeMutatorScheduler::endCollection):
        (JSC::StochasticSpaceTimeMutatorScheduler::setResumeTime):
        (JSC::StochasticSpaceTimeMutatorScheduler::bytesAllocatedThisCycleImpl):
        (JSC::StochasticSpaceTimeMutatorScheduler::bytesSinceBeginningOfCycle):
        (JSC::StochasticSpaceTimeMutatorScheduler::maxHeadroom):
        (JSC::StochasticSpaceTimeMutatorScheduler::headroomFullness):
        (JSC::StochasticSpaceTimeMutatorScheduler::mutatorUtilization):
        * heap/StochasticSpaceTimeMutatorScheduler.h: Added.
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        * runtime/Options.h:

2017-01-23  Mark Lam  <mark.lam@apple.com>

        Added a comment to clarify an assertion.

        Rubber-stamped by Filip Pizlo.

        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):

2017-01-23  Filip Pizlo  <fpizlo@apple.com>

        SharedArrayBuffer plus WebGL should not equal CRASH
        https://bugs.webkit.org/show_bug.cgi?id=167329

        Reviewed by Saam Barati.
        
        DOM unwrapping methods should return null rather than crashing. The code expects an
        unshared buffer, so we should return null when it's shared. The caller can then decide
        if they like null or not.

        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::toWrapped):

2017-01-23  Mark Lam  <mark.lam@apple.com>

        ObjCCallbackFunction::destroy() should not use jsCast().
        https://bugs.webkit.org/show_bug.cgi?id=167322

        Reviewed by Filip Pizlo.

        Since r210829, it is no longer correct for object destructors to use jsCast().
        Fixed ObjCCallbackFunction::destroy() to use a static_cast instead.

        * API/ObjCCallbackFunction.mm:
        (JSC::ObjCCallbackFunction::destroy):

2017-01-23  Michael Saboff  <msaboff@apple.com>

        IntlObject uses JSArray::tryCreateUninitialized in an unsafe way
        https://bugs.webkit.org/show_bug.cgi?id=167288

        Reviewed by Filip Pizlo.

        Refactored the following "create" methods into a "tryCreate" method and a
        "create" wrapper: JSArray::create(), Butterfly::create() and
        createArrayButterfly().

        Changed IntlObject.cpp to use JSArray::tryCreate() as it is simpler to use
        by not requiring the caller to be GC savey.  The performance benefits of
        tryCreateUninitialized() are not needed by the IntlObject c++ code.

        Did not add a new test as the bug caused LayoutTests/js/intl.html to fail
        reliably with the JSC option values scribbleFreeCells=true,
        collectContinuously=true and JSC_useGenerationalGC=false.

        * runtime/Butterfly.h:
        * runtime/ButterflyInlines.h:
        (JSC::Butterfly::tryCreate): Added.
        (JSC::Butterfly::create):
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList):
        (JSC::lookupSupportedLocales):
        (JSC::intlObjectFuncGetCanonicalLocales):
        * runtime/JSArray.h:
        (JSC::createContiguousArrayButterfly): Deleted.
        (JSC::tryCreateArrayButterfly): Added.
        (JSC::createArrayButterfly):
        (JSC::JSArray::tryCreate): Added.
        (JSC::JSArray::create):

2017-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        JavaScriptCore has a weak external symbol in it
        https://bugs.webkit.org/show_bug.cgi?id=167282

        Reviewed by Yusuke Suzuki.

        * debugger/Debugger.cpp:
        (JSC::Debugger::ProfilingClient::~ProfilingClient):
        * debugger/Debugger.h:
        Avoid possible weak external symbol.

2017-01-21  Chris Dumez  <cdumez@apple.com>

        JavaScript for-of does not work on a lot of collection types (e.g. HTMLCollection)
        https://bugs.webkit.org/show_bug.cgi?id=167091

        Reviewed by Darin Adler.

        Update Array methods to throw a TypeError when (this === null || this === undefined)
        instead of when (this == null). This is because (this == null) returns true for types
        that masquerades as undefined (such as document.all) and this prevented use of the
        Array API on such types. The specification only stays to use ToObject(), which throws
        when the input is undefined or null.

        The corresponding specification is at:
        - https://www.ecma-international.org/ecma-262/7.0/index.html#sec-array.prototype.values
        - https://www.ecma-international.org/ecma-262/7.0/index.html#sec-toobject

        * builtins/ArrayPrototype.js:
        (values):
        (keys):
        (entries):
        (reduce):
        (reduceRight):
        (every):
        (forEach):
        (filter):
        (map):
        (some):
        (fill):
        (find):
        (findIndex):
        (includes):
        (sort):
        (concatSlowPath):
        (copyWithin):

2017-01-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] export JSC::importModule API for WebCore dynamic import
        https://bugs.webkit.org/show_bug.cgi?id=167099

        Reviewed by Darin Adler.

        We newly expose JSC::importModule API. This can be used later
        from WebCore to implement WebCore side dynamic import.
        And JSC shell also uses this API.

        And this patch also cleans up module loader a bit:
        Dropping requestInstantiateAll.

        * builtins/BuiltinNames.h:
        * builtins/ModuleLoaderPrototype.js:
        (requestLink):
        (requestImportModule):
        (requestInstantiateAll): Deleted.
        (importModule): Deleted.
        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        * runtime/Completion.cpp:
        (JSC::importModule):
        * runtime/Completion.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::requestImportModule):
        * runtime/JSModuleLoader.h:
        * runtime/ModuleLoaderPrototype.cpp:

2017-01-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        dynamic import is ambiguous with import declaration at module code
        https://bugs.webkit.org/show_bug.cgi?id=167098

        Reviewed by Darin Adler.

        This patch fixes two syntax issues related to dynamic import.

        1. Fix member expression parsing with dynamic import results

        We should not return import expression immediately after parsing
        it in parseMemberExpression. This prohibits us to parse the following
        code,

            import("...").then(function () {
            });

        2. dynamic import with import declaration under the module context

        Before this patch, we always attempt to parse IMPORT as import declaration
        under the module context. It means that import call in the top level
        expression statement fails to be parsed since the parser attempts to parse
        it as import declaration.

            import("...")  // module top level statement.

        In this patch, we check the condition `[lookahead != (]` before starting
        parsing import declaration. This allows us to put import call in the module
        top level statement.

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

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove outdated ENABLE(CSP_NEXT) build flag
        https://bugs.webkit.org/show_bug.cgi?id=167252

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:

2017-01-20  Saam Barati  <sbarati@apple.com>

        We should flash a safepoint before each DFG/FTL phase
        https://bugs.webkit.org/show_bug.cgi?id=167234

        Reviewed by Filip Pizlo.

        The recent GC changes caused us to regress Kraken because of a
        longstanding issue that happened to be hit with higher frequency because
        of a change in timing between when a particular GC was happening and 
        when a particular FTL compilation was happening. The regression is caused
        by the GC was waiting for a large function to make it through the DFG portion
        of an FTL compilation. This was taking 20ms-30ms and started happened during a
        particular test with much higher frequency.
        
        This means that anytime the GC waits for this compilation, the test ran at least
        ~20ms slower because the GC waits for the compiler threads the mutator is stopped.
        
        It's good that we have such an easily reproducible case of this performance
        issue because it will effect many real JS programs, especially ones with
        large functions that get hot.
        
        The most straight forward solution to fix this is to flash a safepoint before
        each phase, allowing the GC to suspend the compiler if needed. In my testing,
        this progresses Kraken in the browser, and doesn't regress anything else. This
        solution also makes the most sense. I did some analysis on the compilation time
        of this function that took ~20-30ms to pass through the DFG phases, and
        the phase times were mostly evenly distributed. Some took longer than others,
        but no phase was longer than 3ms. Most were in the 0.25ms to 1.5ms range.

        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGSafepoint.cpp:
        (JSC::DFG::Safepoint::begin):
        * runtime/Options.h:

2017-01-20  Skachkov Oleksandr  <gskachkov@gmail.com>

        Super property access in base class constructor doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=166665

        Reviewed by Ryosuke Niwa.

        Allow to use super inside of the constructor for classes 
        without parent class.
        Parser checks if super used within the constructor and 
        add this information to function metedata, and later it is used
        during byte code generation.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseFunctionBody):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        * parser/Parser.h:
        (JSC::Scope::usesEval):
        (JSC::Scope::fillParametersForSourceProviderCache):
        (JSC::Scope::restoreFromSourceProviderCache):
        (JSC::Parser::adjustSuperBindingForBaseConstructor):
        * parser/SourceProviderCacheItem.h:
        (JSC::SourceProviderCacheItem::SourceProviderCacheItem):

2017-01-19  Chris Dumez  <cdumez@apple.com>

        iterable<> should be enabled on WK1
        https://bugs.webkit.org/show_bug.cgi?id=167221
        <rdar://problem/30108531>

        Reviewed by Youenn Fablet.

        * runtime/CommonIdentifiers.h:

2017-01-19  Filip Pizlo  <fpizlo@apple.com>

        Structure::pin() needs to be called while holding a lock
        https://bugs.webkit.org/show_bug.cgi?id=167220

        Reviewed by Saam Barati.

        Imagine this race: the mutator calls pin() and the collector calls visitChildren(),
        on the same Structure at the same time. In trunk pin() does not require a lock to be
        held and it doesn't grab any locks. Meanwhile visitChildren() grabs the lock, checks
        if the structure is pinned, and if not, it removes it by overwriting with zero. Now
        imagine how this plays out when pin() runs. Since pin() grabs no locks, it is
        irrelevant that visitChildren() grabs any locks. So, visitChildren() might check if
        the table is pinned before pin() pins it, and then clear the table after it was
        already pinned.

        The problem here is that pin() should be holding a lock. We could either make pin()
        grab that lock by itself, or what this patch does is makes the caller grab the lock.
        This is great because it means that sometimes we don't have to introduce any new
        locking.

        This fixes a materializePropertyTable() checkOffsetConsistency() crash that happens
        very rarely, but I was able to get it to reproduce with run-webkit-tests and
        aggressive GC settings.

        * runtime/ConcurrentJSLock.h:
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::attributeChangeTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::nonPropertyTransition):
        (JSC::Structure::pin):
        (JSC::Structure::pinForCaching):
        (JSC::Structure::add):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::checkOffsetConsistency):
        (JSC::Structure::add):
        (JSC::Structure::addPropertyWithoutTransition):

2017-01-19  Filip Pizlo  <fpizlo@apple.com>

        The mutator needs to fire a barrier after memmoving stuff around in an object that the GC scans
        https://bugs.webkit.org/show_bug.cgi?id=167208

        Reviewed by Saam Barati.
        
        It used to be that if you moved a value from one place to another in the same object
        then there is no need for a barrier because the generational GC would have no need to
        know that some old object still continues to refer to the same other old object.

        But the concurrent GC might scan that object as the mutator moves pointers around in
        it. If the ordering is right, this could mean that the collector never sees some of
        those pointers. This can be fixed by adding a barrier.

        This fixes the most obvious cases I found. There may be more and I'll continue to
        audit. Most of the other memmove users seem to already use some kind of synchronization
        to prevent this. For example, this can also be fixed by just holding the cell lock
        around the memmove since we're dealing with indexing storage and the GC reads that
        under the cell lock.

        * runtime/JSArray.cpp:
        (JSC::JSArray::shiftCountWithAnyIndexingType):
        (JSC::JSArray::unshiftCountWithAnyIndexingType):

2017-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Variation fonts are erroneously disabled on iOS
        https://bugs.webkit.org/show_bug.cgi?id=167172

        Reviewed by Simon Fraser.

        OpenSource builders don't seem to understand sdk=embedded*.

        * Configurations/FeatureDefines.xcconfig:

2017-01-19  Skachkov Oleksandr  <gskachkov@gmail.com>

        "this" missing after await in async arrow function
        https://bugs.webkit.org/show_bug.cgi?id=166919

        Reviewed by NOBODY Saam Barati.

        This patch fixed issue in async arrow function. Issue appears because in arrow
        function _this_ is loaded from arrow function virtual scope. 
        Async arrow function can be suspended and when resuming should be used _this_ from 
        virtual scope, to allow this we load _this_ from virtual scope before store it to 
        generator.generatorThis property 

        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionNode::emitBytecode):

2017-01-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [B3] B3 strength reduction could encounter Value without owner in PureCSE
        https://bugs.webkit.org/show_bug.cgi?id=167161

        Reviewed by Filip Pizlo.

        PureCSE relies on the fact that all the stored Values have owner member.
        This assumption is broken when you execute specializeSelect in B3ReduceStrength phase.
        It clears owner of Values which are in between Select and Check to clone them to then/else
        blocks. If these cleared Values are already stored in PureCSE map, this map poses a Value
        with nullptr owner in PureCSE.

        This patch changes PureCSE to ignore stored Values tha have nullptr owner. This even means
        that a client of PureCSE could deliberately null the owner if they wanted to signal the
        Value should be ignored.

        While PureCSE ignores chance for optimization if Value's owner is nullptr, in the current
        strength reduction algorithm, this does not hurt optimization because CSE will be eventually
        applied since the strength reduction phase want to reach fixed point. But even without
        this iterations, our result itself is valid since PureCSE is allowed to be conservative.

        * b3/B3PureCSE.cpp:
        (JSC::B3::PureCSE::findMatch):
        (JSC::B3::PureCSE::process):
        * b3/testb3.cpp:
        (JSC::B3::testCheckSelectAndCSE):
        (JSC::B3::run):

2017-01-18  Filip Pizlo  <fpizlo@apple.com>

        JSSegmentedVariableObject and its subclasses should have a sane destruction story
        https://bugs.webkit.org/show_bug.cgi?id=167193

        Reviewed by Saam Barati.
        
        Prior to this change, JSSegmentedVariableObjects' subclasses install finalizers that call
        destroy. They did this in random ways, which sometimes resulted in
        JSSegmentedVariableObject::~JSSegmentedVariableObject executing more than once (which worked
        because of the way that ~SegmentedVector is written). Maybe this works now, but it's a disaster
        waiting to happen.

        Fortunately we can now just give those things their own Subspace and teach it its own protocol of
        destruction. This change introduces JSSegmentedVariableObjectSubspace and stashes a m_classInfo
        in JSSegmentedVariableObject. Now, subclasses of JSSegmentedVariableObject are destructible in
        much the same way as JSDestructibleObject without having to be subclasses of
        JSDestructibleObject.

        * API/JSCallbackObject.cpp:
        (JSC::JSCallbackObject<JSGlobalObject>::create):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:
        (GlobalObject::create):
        * runtime/JSGlobalLexicalEnvironment.h:
        (JSC::JSGlobalLexicalEnvironment::create):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::create):
        (JSC::JSGlobalObject::finishCreation):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create): Deleted.
        (JSC::JSGlobalObject::finishCreation): Deleted.
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::destroy):
        (JSC::JSSegmentedVariableObject::JSSegmentedVariableObject):
        (JSC::JSSegmentedVariableObject::~JSSegmentedVariableObject):
        (JSC::JSSegmentedVariableObject::finishCreation):
        * runtime/JSSegmentedVariableObject.h:
        (JSC::JSSegmentedVariableObject::subspaceFor):
        (JSC::JSSegmentedVariableObject::classInfo):
        (JSC::JSSegmentedVariableObject::JSSegmentedVariableObject): Deleted.
        (JSC::JSSegmentedVariableObject::finishCreation): Deleted.
        * runtime/JSSegmentedVariableObjectSubspace.cpp: Added.
        (JSC::JSSegmentedVariableObjectSubspace::JSSegmentedVariableObjectSubspace):
        (JSC::JSSegmentedVariableObjectSubspace::~JSSegmentedVariableObjectSubspace):
        (JSC::JSSegmentedVariableObjectSubspace::finishSweep):
        (JSC::JSSegmentedVariableObjectSubspace::destroy):
        * runtime/JSSegmentedVariableObjectSubspace.h: Added.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * testRegExp.cpp:
        (GlobalObject::create):

2017-01-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: console.table only works for the first 5 properties
        https://bugs.webkit.org/show_bug.cgi?id=167175

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype.wrapTable):
        (InjectedScript.RemoteObject.createObjectPreviewForValue):
        (InjectedScript.RemoteObject.prototype._appendPropertyPreviews):
        Pass through secondLevelKeys. Though the keys are themselves ignored, the
        existence is a signal that we should send more than the first 5 properties.

2017-01-18  Antti Koivisto  <antti@apple.com>

        Only delete source provider caches on full collection
        https://bugs.webkit.org/show_bug.cgi?id=167173

        Reviewed by Andreas Kling.

        They are currently often wiped and recreated during page loading due to eden collections.

        It is not clear that tying the lifetime of these caches to gc makes sense at all but this
        should at least help some.

        * heap/Heap.cpp:
        (JSC::Heap::deleteSourceProviderCaches):

2017-01-18  Filip Pizlo  <fpizlo@apple.com>

        JSObjectSetPrivate should not use jsCast<>
        rdar://problem/30069096

        Reviewed by Keith Miller.

        * API/JSObjectRef.cpp:
        (JSObjectSetPrivate):

2017-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: remove an unnecessary include in generated Objective-C Inspector protocol code
        https://bugs.webkit.org/show_bug.cgi?id=167156

        Rubber-stamped by Geoffrey Garen.

        * inspector/scripts/codegen/objc_generator_templates.py:
        This include of config.h doesn't make sense when using the code generator
        outside of JavaScriptCore/WebKit. It is not necessary either, so remove it.

        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
        Rebaseline test results.

2017-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the JSCOnly build after r210844
        https://bugs.webkit.org/show_bug.cgi?id=167155

        Unreviewed buildfix.

        * heap/EdenGCActivityCallback.cpp:

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        Make opaque root scanning truly constraint-based
        https://bugs.webkit.org/show_bug.cgi?id=165760

        Reviewed by Geoffrey Garen.

        We have bugs when visitChildren() changes its mind about what opaque root to add, since
        we don't have barriers on opaque roots. This supposedly once worked for generational GC,
        and I started adding more barriers to support concurrent GC. But I think that the real
        bug here is that we want the JSObject->OpaqueRoot to be evaluated as a constraint that
        participates in the fixpoint. I like to think of this as an *output* constraint, because it
        is concerned with outgoing edges in the heap from the object that registered the constraint.
        An *input* constraint is like what Weak<> does when deciding whether the thing it points to
        should be live.

        Whether or not an object has output constraints depends on its type. So, we want the GC to
        have a feature where we rapidly call some function on all marked objects of some type.
        
        It's easy to rapidly scan all marked objects in a MarkedBlock. So, we want to allocate all
        objects that have output constraints in their own MarkedBlocks and we want to track the set
        of MarkedBlocks with output constraints.
        
        This patch makes it easy to have clients of JSC's internal C++ APIs create a Subspace - like
        what we used to call MarkedSpace::Subspace but now it's in the JSC namespace - which is
        a collection of objects that you can easily scan during GC from a MarkingConstraint. It's
        now possible for internal C++ API clients to register their own MarkingConstraints. The DOM
        now uses this to create two Subspaces (more on why two below) and it calls
        JSCell::visitOutputConstraints() on all of the marked objects in those subspaces using a new
        MarkingConstraint. That MarkingConstraint uses a new style of volatility, called
        SeldomGreyed, which is like GreyedByExecution except it is opportunistically not executed
        as roots in the hopes that their sole execution will be the snapshot-at-the-end. I also
        converted the CodeBlock rescan constraint to SeldomGreyed, since that's also an output
        constraint.
        
        This patch also uses Subspace for something pretty obvious: knowing how to call the
        destructor. Subspaces can specialize the sweep for their way of invoking destructors. We
        have the following subspaces:
        
        - auxiliary
        - cell
        - destructibleCell - for JSCell subclasses that have destructors and StructureIsImmortal
        - stringSpace - inlines ~JSString into the sweep, making string allocation 7% faster
        - destructibleObjectSpace - for JSDestructibleObject subclasses
        
        And WebCore adds:
        
        - outputConstraint - for JSDOMObjects that have a visitAdditionalChildren
        - globalObjectOutputConstraint - for JSDOMGlobalObjects that have a visitAdditionalChildren,
          since JSDOMGlobalObjects are not JSDestructibleObjects
        
        The Subspace for a type is selected by saying JSC::subspaceFor<Type>(vm). This calls
        Type::subspaceFor<Type>(vm). This allows cell classes to override subspaceFor<> and it
        allows any subspaceFor<> implementation to query static flags in the type. This is how
        JSCell::subspaceFor<> can select either cellSpace or destructibleCellSpace.
        
        This patch is mostly about:
        
        - Moving MarkedSpace::Subspace out of MarkedSpace and making it a nice class with a nice
          API. Almost all of its functionality is just taken out of MarkedSpace.
        - Converting users of the old API for allocating objects and getting MarkedAllocators, like
          heap.allocatorForObjectWithoutDestructor() and its friends. That would now say
          vm.cellSpace.allocatorFor().
        
        Altogether, this means that we only have a small regression on Dromaeo. The regression is
        due to the fact that we scan output constraints. Before the Subspace optimizations (see
        r209766, which was rolled out in r209812), this regression on Dromaeo/jslib was 2x but after
        the optimizations in this patch it's only 1.12x. Note that Dromaeo/jslib creats gigabytes of
        DOM nodes. Compared to web pages, this is a very extreme synthetic microbenchmark. Still, we
        like optimizing these because we don't want to presume what web pages will look like.
        
        The use of Subspaces to specialize destructors happened not because it's super necessary but
        because I wanted to introduce a single unified way of communicating to the GC how to treat
        different types. Any Subspace feature that allowed us to collect some types together would
        have to be mindful of the destructorness of objects. I could have turned this into a
        liability where each Subspace has two subsubspaces - one for destructor objects and one for
        non-destructor objects, which would have allowed me to keep the old sweep specialization
        code. Just days prior, mlam wanted to do something that was hard because of that old sweep
        specializer, so I decided to take the opportunity to fix the sweep specializer while also
        making Subspace be the one true way of teaching the GC about types. To validate that this
        actually does things, I added a JSStringSubspace and a test that shows that this is a 7%
        string allocation progression.
        
        In bug 167066, I'm getting rid of the rest of the code in JSC that would special-case for
        JSDestructibleObject vs StructureIsImmortal by using the GC's DestructionMode. After that,
        Subspace will be only mechanism by which JSC uses the GC to encode types.
        
        Prior to this change, having multiple MarkedSpace::Subspaces would have been expensive
        because they create a bunch of MarkedAllocators upfront. We now have the ability to create
        MarkedAllocators lazily. We create them on the first allocation from that size class or when
        a JIT asks for the MarkedAllocator. The concurrent JITs can ask for MarkedAllocators because
        their creation is under a lock.
        
        On my machine, this might be a 1.1% JetStream speed-up with 87% confidence and it might be
        a 0.4% PLT3 slow-down with 92% confidence. Note that 0.4% on PLT3 is the level of systematic
        error on PLT3 on my computer: I've seen definite 0.4% speed-ups and slow-downs that were not
        confirmed by any bot. Let's see what the bots say.
        
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfile::initialize):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileNewTypedArray):
        (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
        (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray):
        * heap/AllocatorAttributes.h:
        (JSC::AllocatorAttributes::AllocatorAttributes):
        * heap/ConstraintVolatility.h: Added.
        (WTF::printInternal):
        * heap/GCActivityCallback.cpp:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collectInThread):
        (JSC::Heap::stopTheWorld):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::bytesVisited):
        (JSC::Heap::addCoreConstraints):
        (JSC::Heap::addMarkingConstraint):
        (JSC::Heap::notifyIsSafeToCollect):
        (JSC::Heap::preventCollection):
        (JSC::Heap::allowCollection):
        (JSC::Heap::setMutatorShouldBeFenced):
        (JSC::Heap::buildConstraintSet): Deleted.
        (JSC::Heap::writeBarrierOpaqueRootSlow): Deleted.
        (JSC::Heap::addMutatorShouldBeFencedCache): Deleted.
        * heap/Heap.h:
        (JSC::Heap::mutatorExecutionVersion):
        (JSC::Heap::numOpaqueRoots):
        (JSC::Heap::vm): Deleted.
        (JSC::Heap::subspaceForObjectWithoutDestructor): Deleted.
        (JSC::Heap::subspaceForObjectDestructor): Deleted.
        (JSC::Heap::subspaceForAuxiliaryData): Deleted.
        (JSC::Heap::allocatorForObjectWithoutDestructor): Deleted.
        (JSC::Heap::allocatorForObjectWithDestructor): Deleted.
        (JSC::Heap::allocatorForAuxiliaryData): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::vm):
        (JSC::Heap::allocateWithDestructor): Deleted.
        (JSC::Heap::allocateWithoutDestructor): Deleted.
        (JSC::Heap::allocateObjectOfType): Deleted.
        (JSC::Heap::subspaceForObjectOfType): Deleted.
        (JSC::Heap::allocatorForObjectOfType): Deleted.
        (JSC::Heap::allocateAuxiliary): Deleted.
        (JSC::Heap::tryAllocateAuxiliary): Deleted.
        (JSC::Heap::tryReallocateAuxiliary): Deleted.
        (JSC::Heap::ascribeOwner): Deleted.
        (JSC::Heap::writeBarrierOpaqueRoot): Deleted.
        * heap/LargeAllocation.cpp:
        (JSC::LargeAllocation::tryCreate):
        (JSC::LargeAllocation::LargeAllocation):
        (JSC::LargeAllocation::~LargeAllocation):
        (JSC::LargeAllocation::sweep):
        * heap/LargeAllocation.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::MarkedAllocator):
        (JSC::MarkedAllocator::tryAllocateWithoutCollecting):
        (JSC::MarkedAllocator::tryAllocateIn):
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        (JSC::MarkedAllocator::tryAllocateBlock):
        (JSC::MarkedAllocator::shrink):
        (JSC::MarkedAllocator::markedSpace):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::nextAllocatorInSubspace):
        (JSC::MarkedAllocator::setNextAllocatorInSubspace):
        (JSC::MarkedAllocator::subspace):
        (JSC::MarkedAllocator::tryAllocate): Deleted.
        (JSC::MarkedAllocator::allocate): Deleted.
        (JSC::MarkedAllocator::forEachBlock): Deleted.
        * heap/MarkedAllocatorInlines.h: Added.
        (JSC::MarkedAllocator::tryAllocate):
        (JSC::MarkedAllocator::allocate):
        (JSC::MarkedAllocator::forEachBlock):
        (JSC::MarkedAllocator::forEachNotEmptyBlock):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::subspace):
        (JSC::MarkedBlock::Handle::sweep):
        (JSC::MarkedBlock::Handle::specializedSweep): Deleted.
        (JSC::MarkedBlock::Handle::sweepHelperSelectScribbleMode): Deleted.
        (JSC::MarkedBlock::Handle::sweepHelperSelectEmptyMode): Deleted.
        (JSC::MarkedBlock::Handle::sweepHelperSelectHasNewlyAllocated): Deleted.
        (JSC::MarkedBlock::Handle::sweepHelperSelectSweepMode): Deleted.
        (JSC::MarkedBlock::Handle::sweepHelperSelectMarksMode): Deleted.
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::visitWeakSet):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::Handle::isNewlyAllocatedStale):
        (JSC::MarkedBlock::Handle::hasAnyNewlyAllocated):
        (JSC::MarkedBlock::heap):
        (JSC::MarkedBlock::space):
        (JSC::MarkedBlock::Handle::space):
        (JSC::MarkedBlock::Handle::specializedSweep):
        (JSC::MarkedBlock::Handle::finishSweepKnowingSubspace):
        (JSC::MarkedBlock::Handle::sweepDestructionMode):
        (JSC::MarkedBlock::Handle::emptyMode):
        (JSC::MarkedBlock::Handle::scribbleMode):
        (JSC::MarkedBlock::Handle::newlyAllocatedMode):
        (JSC::MarkedBlock::Handle::marksMode):
        (JSC::MarkedBlock::Handle::forEachMarkedCell):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::initializeSizeClassForStepSize):
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::lastChanceToFinalize):
        (JSC::MarkedSpace::addMarkedAllocator):
        (JSC::MarkedSpace::allocate): Deleted.
        (JSC::MarkedSpace::tryAllocate): Deleted.
        (JSC::MarkedSpace::allocateLarge): Deleted.
        (JSC::MarkedSpace::tryAllocateLarge): Deleted.
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::heap):
        (JSC::MarkedSpace::allocatorLock):
        (JSC::MarkedSpace::subspaceForObjectsWithDestructor): Deleted.
        (JSC::MarkedSpace::subspaceForObjectsWithoutDestructor): Deleted.
        (JSC::MarkedSpace::subspaceForAuxiliaryData): Deleted.
        (JSC::MarkedSpace::allocatorFor): Deleted.
        (JSC::MarkedSpace::destructorAllocatorFor): Deleted.
        (JSC::MarkedSpace::auxiliaryAllocatorFor): Deleted.
        (JSC::MarkedSpace::allocateWithoutDestructor): Deleted.
        (JSC::MarkedSpace::allocateWithDestructor): Deleted.
        (JSC::MarkedSpace::allocateAuxiliary): Deleted.
        (JSC::MarkedSpace::tryAllocateAuxiliary): Deleted.
        (JSC::MarkedSpace::forEachSubspace): Deleted.
        * heap/MarkingConstraint.cpp:
        (JSC::MarkingConstraint::MarkingConstraint):
        * heap/MarkingConstraint.h:
        (JSC::MarkingConstraint::volatility):
        * heap/MarkingConstraintSet.cpp:
        (JSC::MarkingConstraintSet::resetStats):
        (JSC::MarkingConstraintSet::add):
        (JSC::MarkingConstraintSet::executeConvergenceImpl):
        * heap/MarkingConstraintSet.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::visitAsConstraint):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::addOpaqueRoot):
        (JSC::SlotVisitor::mergeIfNecessary):
        (JSC::SlotVisitor::mergeOpaqueRootsIfNecessary): Deleted.
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::setIgnoreNewOpaqueRoots):
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        (JSC::SlotVisitor::reportExternalMemoryVisited):
        * heap/Subspace.cpp: Added.
        (JSC::Subspace::Subspace):
        (JSC::Subspace::~Subspace):
        (JSC::Subspace::finishSweep):
        (JSC::Subspace::destroy):
        (JSC::Subspace::allocate):
        (JSC::Subspace::tryAllocate):
        (JSC::Subspace::allocatorForSlow):
        (JSC::Subspace::allocateSlow):
        (JSC::Subspace::tryAllocateSlow):
        * heap/Subspace.h: Added.
        (JSC::Subspace::tryAllocatorFor):
        (JSC::Subspace::allocatorFor):
        * heap/SubspaceInlines.h: Added.
        (JSC::Subspace::forEachMarkedBlock):
        (JSC::Subspace::forEachNotEmptyMarkedBlock):
        (JSC::Subspace::forEachLargeAllocation):
        (JSC::Subspace::forEachMarkedCell):
        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::specializedVisit):
        * heap/WeakBlock.h:
        * heap/WeakSet.h:
        (JSC::WeakSet::visit):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize):
        (JSC::AssemblyHelpers::emitAllocateVariableSized):
        (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_object):
        * jsc.cpp:
        * runtime/ButterflyInlines.h:
        (JSC::Butterfly::createUninitialized):
        (JSC::Butterfly::growArrayRight):
        * runtime/ClassInfo.h:
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createEmpty):
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::overrideThings):
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor):
        * runtime/HashMapImpl.h:
        (JSC::HashMapBuffer::create):
        * runtime/JSArray.cpp:
        (JSC::JSArray::tryCreateUninitialized):
        (JSC::JSArray::unshiftCountSlowCase):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
        * runtime/JSCell.h:
        (JSC::subspaceFor):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::visitOutputConstraints):
        (JSC::JSCell::subspaceFor):
        (JSC::allocateCell):
        * runtime/JSDestructibleObject.h:
        (JSC::JSDestructibleObject::subspaceFor):
        * runtime/JSDestructibleObjectSubspace.cpp: Added.
        (JSC::JSDestructibleObjectSubspace::JSDestructibleObjectSubspace):
        (JSC::JSDestructibleObjectSubspace::~JSDestructibleObjectSubspace):
        (JSC::JSDestructibleObjectSubspace::finishSweep):
        (JSC::JSDestructibleObjectSubspace::destroy):
        * runtime/JSDestructibleObjectSubspace.h: Added.
        * runtime/JSObject.h:
        (JSC::JSObject::JSObject):
        * runtime/JSObjectInlines.h:
        * runtime/JSSegmentedVariableObject.h:
        * runtime/JSString.h:
        (JSC::JSString::subspaceFor):
        * runtime/JSStringSubspace.cpp: Added.
        (JSC::JSStringSubspace::JSStringSubspace):
        (JSC::JSStringSubspace::~JSStringSubspace):
        (JSC::JSStringSubspace::finishSweep):
        (JSC::JSStringSubspace::destroy):
        * runtime/JSStringSubspace.h: Added.
        * runtime/RegExpMatchesArray.h:
        (JSC::tryCreateUninitializedRegExpMatchesArray):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-01-17  Michael Saboff  <msaboff@apple.com>

        Nested parenthesized regular expressions with non-zero minimum counts appear to hang and use lots of memory
        https://bugs.webkit.org/show_bug.cgi?id=167125

        Reviewed by Filip Pizlo.

        Changed Yarr to handle nested parenthesized subexpressions where the minimum count is
        not 0 directly in the Yarr interpreter.  Previously we'd factor an expression like
        (a|b)+ into (a|b)(a|b)* with special handling for captures.  This factoring was done
        using a deep copy that doubled the size of the resulting expresion for each nested 
        parenthesized subexpression.  Now the Yarr interpreter can directly process a regexp
        like (a|b){2,42}.  

        The parser will allow one level of nested, non-zero minimum, counted parenthesis using
        the old copy method.  After one level, it will generate parenthesis terms with a non-zero
        minimum.   Such an expression wasn't handled by the Yarr JIT before the change, so this
        change isn't a performance regression.

        Added a minimum count to the YarrPattern and ByteTerm classes, and then factored that
        minimum into the interpreter.  A non-zero minimum is only handled by the Yarr interpreter.
        If the Yarr JIT see such a term, it punts back to the interpreter.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
        (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
        (JSC::Yarr::Interpreter::matchCharacterClass):
        (JSC::Yarr::Interpreter::backtrackCharacterClass):
        (JSC::Yarr::Interpreter::matchBackReference):
        (JSC::Yarr::Interpreter::backtrackBackReference):
        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::matchParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::ByteCompiler::atomPatternCharacter):
        (JSC::Yarr::ByteCompiler::atomCharacterClass):
        (JSC::Yarr::ByteCompiler::atomBackReference):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::generateTerm):
        (JSC::Yarr::YarrGenerator::backtrackTerm):
        (JSC::Yarr::YarrGenerator::generate):
        (JSC::Yarr::YarrGenerator::backtrack):
        (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::copyTerm):
        (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
        (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm):
        (JSC::Yarr::PatternTerm::quantify):
        (JSC::Yarr::YarrPattern::reset):

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
        https://bugs.webkit.org/show_bug.cgi?id=116551
        <rdar://problem/13949830>

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        JSCell::classInfo() shouldn't have a bunch of mitigations for being called during destruction
        https://bugs.webkit.org/show_bug.cgi?id=167066

        Reviewed by Keith Miller and Michael Saboff.
        
        This reduces the size of JSCell::classInfo() by half and removes some checks that
        this function previously had to do in case it was called from destructors.
        
        I changed all of the destructors so that they don't call JSCell::classInfo() and I
        added an assertion to JSCell::classInfo() to catch cases where someone called it
        from a destructor accidentally.
        
        This means that we only have one place in destruction that needs to know the class:
        the sweeper's call to the destructor.
        
        One of the trickiest outcomes of this is the need to support inherits() tests in
        JSObjectGetPrivate(), when it is called from the destructor callback on the object
        being destructed. JSObjectGetPrivate() is undefined behavior anyway if you use it
        on any dead-but-not-destructed object other than the one being destructed right
        now. The purpose of the inherits() tests is to distinguish between different kinds
        of CallbackObjects, which may have different kinds of base classes. I think that
        this was always subtly wrong - for example, if the object being destructed is a
        JSGlobalObject then it's not a DestructibleObject, is not in a destructor block,
        but does not have an immortal Structure - so classInfo() is not valid. This fixes
        the issue by having ~JSCallbackObject know its classInfo. It now stashes its
        classInfo in VM so that JSObjectGetPrivate can use that classInfo if it detects
        that it's being used on a currently-destructing object.
        
        That was the only really weird part of this patch. The rest is mostly removing
        illegal uses of jsCast<> in destructors. There were a few other genuine uses of
        classInfo() but they were in code that already knew how to get its classInfo()
        using other means:
        
        - You can still say structure()->classInfo(), and I use this form in code that
          knows that its StructureIsImmortal.
        
        - You can use this->classInfo() if it's overridden, like in subclasses of
          JSDestructibleObject.
        
        Rolling this back in because I think I fixed the crashes.

        * API/JSAPIWrapperObject.mm:
        (JSAPIWrapperObjectHandleOwner::finalize):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::~JSCallbackObject):
        (JSC::JSCallbackObject<Parent>::init):
        * API/JSObjectRef.cpp:
        (classInfoPrivate):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        * bytecode/EvalCodeBlock.cpp:
        (JSC::EvalCodeBlock::destroy):
        * bytecode/FunctionCodeBlock.cpp:
        (JSC::FunctionCodeBlock::destroy):
        * bytecode/ModuleProgramCodeBlock.cpp:
        (JSC::ModuleProgramCodeBlock::destroy):
        * bytecode/ProgramCodeBlock.cpp:
        (JSC::ProgramCodeBlock::destroy):
        * bytecode/UnlinkedEvalCodeBlock.cpp:
        (JSC::UnlinkedEvalCodeBlock::destroy):
        * bytecode/UnlinkedFunctionCodeBlock.cpp:
        (JSC::UnlinkedFunctionCodeBlock::destroy):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::destroy):
        * bytecode/UnlinkedModuleProgramCodeBlock.cpp:
        (JSC::UnlinkedModuleProgramCodeBlock::destroy):
        * bytecode/UnlinkedProgramCodeBlock.cpp:
        (JSC::UnlinkedProgramCodeBlock::destroy):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::lastChanceToFinalize):
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::sweep):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::finalize):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::destroy):
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        (JSC::JSCell::callDestructor):
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::destroy):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::destroy):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::destroy):
        * runtime/JSSegmentedVariableObject.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::destroy):
        * runtime/VM.h:
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::destroy):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::destroy):
        * wasm/js/WebAssemblyToJSCallee.cpp:
        (JSC::WebAssemblyToJSCallee::WebAssemblyToJSCallee):
        (JSC::WebAssemblyToJSCallee::destroy):

2017-01-17  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/210821
        It was causing crashes.

        * API/JSAPIWrapperObject.mm:
        (JSAPIWrapperObjectHandleOwner::finalize):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::~JSCallbackObject):
        (JSC::JSCallbackObject<Parent>::init):
        * API/JSObjectRef.cpp:
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (classInfoPrivate): Deleted.
        * bytecode/EvalCodeBlock.cpp:
        (JSC::EvalCodeBlock::destroy):
        * bytecode/FunctionCodeBlock.cpp:
        (JSC::FunctionCodeBlock::destroy):
        * bytecode/ModuleProgramCodeBlock.cpp:
        (JSC::ModuleProgramCodeBlock::destroy):
        * bytecode/ProgramCodeBlock.cpp:
        (JSC::ProgramCodeBlock::destroy):
        * bytecode/UnlinkedEvalCodeBlock.cpp:
        (JSC::UnlinkedEvalCodeBlock::destroy):
        * bytecode/UnlinkedFunctionCodeBlock.cpp:
        (JSC::UnlinkedFunctionCodeBlock::destroy):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::destroy):
        * bytecode/UnlinkedModuleProgramCodeBlock.cpp:
        (JSC::UnlinkedModuleProgramCodeBlock::destroy):
        * bytecode/UnlinkedProgramCodeBlock.cpp:
        (JSC::UnlinkedProgramCodeBlock::destroy):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::lastChanceToFinalize):
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::sweep):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::finalize):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::destroy):
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        (JSC::JSCell::callDestructor):
        * runtime/JSLock.h:
        (JSC::JSLock::exclusiveThread):
        (JSC::JSLock::ownerThread): Deleted.
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::destroy):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::destroy):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::destroy):
        * runtime/JSSegmentedVariableObject.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::destroy):
        * runtime/VM.h:
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::destroy):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::destroy):
        * wasm/js/WebAssemblyToJSCallee.cpp:
        (JSC::WebAssemblyToJSCallee::WebAssemblyToJSCallee):
        (JSC::WebAssemblyToJSCallee::destroy):

2017-01-16  Filip Pizlo  <fpizlo@apple.com>

        JSCell::classInfo() shouldn't have a bunch of mitigations for being called during destruction
        https://bugs.webkit.org/show_bug.cgi?id=167066

        Reviewed by Keith Miller and Michael Saboff.
        
        This reduces the size of JSCell::classInfo() by half and removes some checks that
        this function previously had to do in case it was called from destructors.
        
        I changed all of the destructors so that they don't call JSCell::classInfo() and I
        added an assertion to JSCell::classInfo() to catch cases where someone called it
        from a destructor accidentally.
        
        This means that we only have one place in destruction that needs to know the class:
        the sweeper's call to the destructor.
        
        One of the trickiest outcomes of this is the need to support inherits() tests in
        JSObjectGetPrivate(), when it is called from the destructor callback on the object
        being destructed. JSObjectGetPrivate() is undefined behavior anyway if you use it
        on any dead-but-not-destructed object other than the one being destructed right
        now. The purpose of the inherits() tests is to distinguish between different kinds
        of CallbackObjects, which may have different kinds of base classes. I think that
        this was always subtly wrong - for example, if the object being destructed is a
        JSGlobalObject then it's not a DestructibleObject, is not in a destructor block,
        but does not have an immortal Structure - so classInfo() is not valid. This fixes
        the issue by having ~JSCallbackObject know its classInfo. It now stashes its
        classInfo in VM so that JSObjectGetPrivate can use that classInfo if it detects
        that it's being used on a currently-destructing object.
        
        That was the only really weird part of this patch. The rest is mostly removing
        illegal uses of jsCast<> in destructors. There were a few other genuine uses of
        classInfo() but they were in code that already knew how to get its classInfo()
        using other means:
        
        - You can still say structure()->classInfo(), and I use this form in code that
          knows that its StructureIsImmortal.
        
        - You can use this->classInfo() if it's overridden, like in subclasses of
          JSDestructibleObject.

        * API/JSAPIWrapperObject.mm:
        (JSAPIWrapperObjectHandleOwner::finalize):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::~JSCallbackObject):
        (JSC::JSCallbackObject<Parent>::init):
        * API/JSObjectRef.cpp:
        (classInfoPrivate):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        * bytecode/EvalCodeBlock.cpp:
        (JSC::EvalCodeBlock::destroy):
        * bytecode/FunctionCodeBlock.cpp:
        (JSC::FunctionCodeBlock::destroy):
        * bytecode/ModuleProgramCodeBlock.cpp:
        (JSC::ModuleProgramCodeBlock::destroy):
        * bytecode/ProgramCodeBlock.cpp:
        (JSC::ProgramCodeBlock::destroy):
        * bytecode/UnlinkedEvalCodeBlock.cpp:
        (JSC::UnlinkedEvalCodeBlock::destroy):
        * bytecode/UnlinkedFunctionCodeBlock.cpp:
        (JSC::UnlinkedFunctionCodeBlock::destroy):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::destroy):
        * bytecode/UnlinkedModuleProgramCodeBlock.cpp:
        (JSC::UnlinkedModuleProgramCodeBlock::destroy):
        * bytecode/UnlinkedProgramCodeBlock.cpp:
        (JSC::UnlinkedProgramCodeBlock::destroy):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::lastChanceToFinalize):
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::sweep):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::finalize):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::destroy):
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::classInfo):
        (JSC::JSCell::callDestructor):
        * runtime/JSLock.h:
        (JSC::JSLock::ownerThread):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::destroy):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::destroy):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::destroy):
        * runtime/JSSegmentedVariableObject.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::destroy):
        * runtime/VM.h:
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::destroy):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::destroy):
        * wasm/js/WebAssemblyToJSCallee.cpp:
        (JSC::WebAssemblyToJSCallee::WebAssemblyToJSCallee):
        (JSC::WebAssemblyToJSCallee::destroy):

2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Remove the REQUEST_ANIMATION_FRAME flag
        https://bugs.webkit.org/show_bug.cgi?id=156980
        <rdar://problem/25906849>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        WebAssembly: Suppress warnings & errors in GCC
        https://bugs.webkit.org/show_bug.cgi?id=167049

        Reviewed by Sam Weinig.

        * wasm/WasmFunctionParser.h:
        Add missing { } after the switch. Ideally, it is not necessary.
        But in GCC, it is required. Since this function is fairly large,
        I think the code generated by this does not cause performance
        regression.

        * wasm/WasmPageCount.h:
        UINT_MAX is defined in limits.h.

        * wasm/generateWasmValidateInlinesHeader.py:
        On the other hand, we use this suppress pragma here to solve the
        same problem in wasm/WasmFunctionParser.h. Since the load function
        is fairly small, the additional `return { };` may generate some
        suboptimal code. See bug 150794 for more detail.

2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        Reserve capacity for StringBuilder in unescape
        https://bugs.webkit.org/show_bug.cgi?id=167008

        Reviewed by Sam Weinig.

        `unescape` function is frequently called in Kraken sha256-iterative.
        This patch just reserves the capacity for the StringBuilder.

        Currently, we select the length of the string for the reserved capacity.
        It improves the performance 2.73%.

            Benchmark report for Kraken on sakura-trick.

            VMs tested:
            "baseline" at /home/yusukesuzuki/dev/WebKit/WebKitBuild/untot/Release/bin/jsc
            "patched" at /home/yusukesuzuki/dev/WebKit/WebKitBuild/un/Release/bin/jsc

            Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc() between
            sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
            function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
            milliseconds.

                                                       baseline                  patched

            stanford-crypto-sha256-iterative        51.609+-0.672             50.237+-0.860           might be 1.0273x faster

            <arithmetic>                            51.609+-0.672             50.237+-0.860           might be 1.0273x faster

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncUnescape):

2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(DETAILS_ELEMENT) guards
        https://bugs.webkit.org/show_bug.cgi?id=167042

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2017-01-11  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from more of "platform"
        https://bugs.webkit.org/show_bug.cgi?id=166809

        Reviewed by Sam Weinig.

        * inspector/JSInjectedScriptHost.h:
        (Inspector::JSInjectedScriptHost::impl): Simplified code since we don't need a
        const_cast here any more.
        * runtime/PrivateName.h:
        (JSC::PrivateName::uid): Ditto.

2017-01-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r210735.

        This change introduced LayoutTest and JSC test flakiness.

        Reverted changeset:

        "Reserve capacity for StringBuilder in unescape"
        https://bugs.webkit.org/show_bug.cgi?id=167008
        http://trac.webkit.org/changeset/210735

2017-01-13  Saam Barati  <sbarati@apple.com>

        Initialize the ArraySpecies watchpoint as Clear and transition to IsWatched once slice is called for the first time
        https://bugs.webkit.org/show_bug.cgi?id=167017
        <rdar://problem/30019309>

        Reviewed by Keith Miller and Filip Pizlo.

        This patch is to reverse the JSBench regression from r210695.
        
        The new state diagram for the array species watchpoint is as
        follows:
        
        1. On GlobalObject construction, it starts life out as ClearWatchpoint.
        2. When slice is called for the first time, we observe the state
        of the world, and either transition it to IsWatched if we were able
        to set up the object property conditions, or to IsInvalidated if we
        were not.
        3. The DFG compiler will now only lower slice as an intrinsic if
        it observed the speciesWatchpoint.state() as IsWatched.
        4. The IsWatched => IsInvalidated transition happens only when
        one of the object property condition watchpoints fire.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * runtime/ArrayPrototype.cpp:
        (JSC::speciesWatchpointIsValid):
        (JSC::speciesConstructArray):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint):
        (JSC::ArrayPrototype::initializeSpeciesWatchpoint): Deleted.
        * runtime/ArrayPrototype.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):

2017-01-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Reserve capacity for StringBuilder in unescape
        https://bugs.webkit.org/show_bug.cgi?id=167008

        Reviewed by Sam Weinig.

        `unescape` function is frequently called in Kraken sha256-iterative.
        This patch just reserves the capacity for the StringBuilder.

        Currently, we select the length of the string for the reserved capacity.
        It improves the performance 2.73%.

            Benchmark report for Kraken on sakura-trick.

            VMs tested:
            "baseline" at /home/yusukesuzuki/dev/WebKit/WebKitBuild/untot/Release/bin/jsc
            "patched" at /home/yusukesuzuki/dev/WebKit/WebKitBuild/un/Release/bin/jsc

            Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc() between
            sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
            function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
            milliseconds.

                                                       baseline                  patched

            stanford-crypto-sha256-iterative        51.609+-0.672             50.237+-0.860           might be 1.0273x faster

            <arithmetic>                            51.609+-0.672             50.237+-0.860           might be 1.0273x faster

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncUnescape):

2017-01-12  Saam Barati  <sbarati@apple.com>

        Add a slice intrinsic to the DFG/FTL
        https://bugs.webkit.org/show_bug.cgi?id=166707
        <rdar://problem/29913445>

        Reviewed by Filip Pizlo.

        The gist of this patch is to inline Array.prototype.slice
        into the DFG/FTL. The implementation in the DFG-backend
        and FTLLowerDFGToB3 is just a straight forward implementation
        of what the C function is doing. The more interesting bits
        of this patch are setting up the proper watchpoints and conditions
        in the executing code to prove that its safe to skip all of the
        observable JS actions that Array.prototype.slice normally does.
        
        We perform the following proofs:
        1. Array.prototype.constructor has not changed (via a watchpoint).
        2. That Array.prototype.constructor[Symbol.species] has not changed (via a watchpoint).
        3. The global object is not having a bad time.
        4. The array that is being sliced has an original array structure.
        5. Array.prototype/Object.prototype have not transitioned.
        
        Conditions 1, 2, and 3 are strictly required.
        
        4 is ensuring a couple things:
        1. That a "constructor" property hasn't been added to the array
        we're slicing since we're supposed to perform a Get(array, "constructor").
        2. That we're not slicing an instance of a subclass of Array.
        
        We could relax 4.1 in the future if we find other ways to test if
        the incoming array hasn't changed the "constructor" property. We
        would probably use TryGetById to do this.
        
        I'm seeing a 5% speedup on crypto-pbkdf2 and often a 1% speedup on
        the total benchmark (the results are sometimes noisy).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
        (JSC::DFG::CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArraySlice):
        (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::emitInitializeButterfly):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::emitInitializeButterfly):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::initializeArrayElements):
        (JSC::FTL::DFG::LowerDFGToB3::storeStructure):
        (JSC::FTL::DFG::LowerDFGToB3::allocateCell):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray):
        (JSC::FTL::DFG::LowerDFGToB3::allocateUninitializedContiguousJSArray):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        (JSC::speciesWatchpointIsValid):
        (JSC::speciesConstructArray):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        (JSC::ArrayPrototype::initializeSpeciesWatchpoint):
        (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire):
        (JSC::speciesWatchpointsValid): Deleted.
        (JSC::ArrayPrototype::attemptToInitializeSpeciesWatchpoint): Deleted.
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::speciesWatchpointStatus): Deleted.
        (): Deleted.
        * runtime/Intrinsic.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arraySpeciesWatchpoint):
        * runtime/Structure.h:

2017-01-12  Saam Barati  <sbarati@apple.com>

        Concurrent GC has a bug where we would detect a race but fail to rescan the object
        https://bugs.webkit.org/show_bug.cgi?id=166960
        <rdar://problem/29983526>

        Reviewed by Filip Pizlo and Mark Lam.

        We have code like this in JSC:
        
        ```
        Butterfly* butterfly = allocateMoreOutOfLineStorage(vm, oldOutOfLineCapacity, newOutOfLineCapacity);
        nukeStructureAndSetButterfly(vm, structureID, butterfly);
        structure->setLastOffset(newLastOffset);
        WTF::storeStoreFence();
        setStructureIDDirectly(structureID);
        ```
        
        Note that the collector could detect a race here, which sometimes
        incorrectly caused us to not visit the object again.
        
        Mutator Thread: M, Collector Thread: C, assuming sequential consistency via
        proper barriers:
        
        M: allocate new butterfly
        M: Set nuked structure ID
        M: Set butterfly (this does a barrier)
        C: Start scanning O
        C: load structure ID
        C: See it's nuked and bail, (we used to rely on a write barrier to rescan).
        
        We sometimes never rescanned here because we were calling
        setStructureIDDirectly which doesn't do a write barrier.
        (Note, the places that do this but call setStructure were
        OK because setStructure will perform a write barrier.)
        
        (This same issue also existed in places where the collector thread
        detected races for Structure::m_offset, but places that changed
        Structure::m_offset didn't perform a write barrier on the object
        after changing its Structure's m_offset.)
        
        To prevent such code from requiring every call site to perform
        a write barrier on the object, I've changed the collector code
        to keep a stack of cells to be revisited due to races. This stack
        is then consulted when we do marking. Because such races are rare,
        we have a single stack on Heap that is guarded by a lock.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::endMarking):
        (JSC::Heap::buildConstraintSet):
        (JSC::Heap::addToRaceMarkStack):
        * heap/Heap.h:
        (JSC::Heap::collectorSlotVisitor):
        (JSC::Heap::mutatorMarkStack): Deleted.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didRace):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::didRace):
        (JSC::SlotVisitor::didNotRace): Deleted.
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::didNotRace): Deleted.
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterfly):
        (JSC::JSObject::visitButterflyImpl):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::prepareToPutDirectWithoutTransition):
        * runtime/Structure.cpp:
        (JSC::Structure::flattenDictionaryStructure):

2017-01-12  Chris Dumez  <cdumez@apple.com>

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=166995

        Reviewed by Jer Noble.

        Add KEYBOARD_KEY_ATTRIBUTE / KEYBOARD_CODE_ATTRIBUTE to FeatureDefines.xcconfig
        as some people are having trouble building without it.

        * Configurations/FeatureDefines.xcconfig:

2017-01-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Implement InlineClassicScript
        https://bugs.webkit.org/show_bug.cgi?id=166925

        Reviewed by Ryosuke Niwa.

        Add ScriptFetcher field for SourceOrigin.

        * runtime/SourceOrigin.h:
        (JSC::SourceOrigin::SourceOrigin):
        (JSC::SourceOrigin::fetcher):

2017-01-11  Andreas Kling  <akling@apple.com>

        Crash when WebCore's GC heap grows way too large.
        <https://webkit.org/b/166875>
        <rdar://problem/27896585>

        Reviewed by Mark Lam.

        Add a simple API to JSC::Heap that allows setting a hard limit on the amount
        of live bytes. If this is exceeded, we crash with a recognizable signature.
        By default there is no limit.

        * heap/Heap.cpp:
        (JSC::Heap::didExceedMaxLiveSize):
        (JSC::Heap::updateAllocationLimits):
        * heap/Heap.h:
        (JSC::Heap::setMaxLiveSize):

2017-01-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        Decouple module loading initiator from ScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=166888

        Reviewed by Saam Barati and Ryosuke Niwa.

        Add ScriptFetcher and JSScriptFetcher.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/ModuleLoaderPrototype.js:
        (requestFetch):
        (requestInstantiate):
        (requestSatisfy):
        (requestInstantiateAll):
        (requestLink):
        (moduleEvaluation):
        (loadAndEvaluateModule):
        (importModule):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/Completion.cpp:
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        (JSC::linkAndEvaluateModule):
        * runtime/Completion.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::loadAndEvaluateModule):
        (JSC::JSModuleLoader::loadModule):
        (JSC::JSModuleLoader::linkAndEvaluateModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::JSModuleLoader::instantiate):
        (JSC::JSModuleLoader::evaluate):
        * runtime/JSModuleLoader.h:
        * runtime/JSScriptFetcher.cpp: Copied from Source/WebCore/dom/LoadableScript.cpp.
        (JSC::JSScriptFetcher::destroy):
        * runtime/JSScriptFetcher.h: Added.
        (JSC::JSScriptFetcher::createStructure):
        (JSC::JSScriptFetcher::create):
        (JSC::JSScriptFetcher::fetcher):
        (JSC::JSScriptFetcher::JSScriptFetcher):
        * runtime/JSType.h:
        * runtime/ScriptFetcher.h: Copied from Source/WebCore/dom/LoadableScript.cpp.
        (JSC::ScriptFetcher::~ScriptFetcher):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-01-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Implement JSSourceCode to propagate SourceCode in module pipeline
        https://bugs.webkit.org/show_bug.cgi?id=166861

        Reviewed by Saam Barati.

        Instead of propagating source code string, we propagate JSSourceCode
        cell in the module pipeline. This allows us to attach a metadata
        to the propagated source code string. In particular, it propagates
        SourceOrigin through the module pipeline.

        And it also fixes JSC shell to use Module source type for module source code.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/ModuleLoaderPrototype.js:
        (fulfillFetch):
        (requestFetch):
        * jsc.cpp:
        (GlobalObject::moduleLoaderFetch):
        (runWithScripts):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/Completion.cpp:
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::provide):
        * runtime/JSModuleLoader.h:
        * runtime/JSSourceCode.cpp: Added.
        (JSC::JSSourceCode::destroy):
        * runtime/JSSourceCode.h: Added.
        (JSC::JSSourceCode::createStructure):
        (JSC::JSSourceCode::create):
        (JSC::JSSourceCode::sourceCode):
        (JSC::JSSourceCode::JSSourceCode):
        * runtime/JSType.h:
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-01-10  Commit Queue  <commit-queue@webkit.org>

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

        "breaks web compatability" (Requested by keith_miller on
        #webkit).

        Reverted changeset:

        "Add support for global"
        https://bugs.webkit.org/show_bug.cgi?id=165171
        http://trac.webkit.org/changeset/210052

2017-01-10  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove most of the custom bindings for the WebGL code
        https://bugs.webkit.org/show_bug.cgi?id=166834

        Reviewed by Alex Christensen.

        * runtime/ArrayPrototype.h:
        * runtime/ObjectPrototype.h:
        Export the ClassInfo so it can be used from WebCore.

2017-01-09  Filip Pizlo  <fpizlo@apple.com>

        Streamline the GC barrier slowpath
        https://bugs.webkit.org/show_bug.cgi?id=166878

        Reviewed by Geoffrey Garen and Saam Barati.
        
        This implements two optimizations to the barrier:
        
        - Removes the write barrier buffer. This was just overhead.
        
        - Teaches the slow path how to white an object that was black but unmarked, ensuring that
          we don't take slow path for this object again.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStoreBarrier):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier):
        * heap/CellState.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::stopTheWorld):
        (JSC::Heap::writeBarrierSlowPath):
        (JSC::Heap::buildConstraintSet):
        (JSC::Heap::flushWriteBarrierBuffer): Deleted.
        * heap/Heap.h:
        (JSC::Heap::writeBarrierBuffer): Deleted.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        (JSC::SlotVisitor::setMarkedAndAppendToMarkStack):
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::visitChildren):
        * heap/WriteBarrierBuffer.cpp: Removed.
        * heap/WriteBarrierBuffer.h: Removed.
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::JSCell):
        * runtime/StructureIDBlob.h:
        (JSC::StructureIDBlob::StructureIDBlob):

2017-01-10  Mark Lam  <mark.lam@apple.com>

        Property setters should not be called for bound arguments list entries.
        https://bugs.webkit.org/show_bug.cgi?id=165631

        Reviewed by Filip Pizlo.

        * builtins/FunctionPrototype.js:
        (bind):
        - use @putByValDirect to set the bound arguments so that we don't consult the
          prototype chain for setters.

        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototypeGetterFormat):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        - no need to create a bound arguments array because these bound functions binds
          no arguments according to the spec.

2017-01-10  Skachkov Oleksandr  <gskachkov@gmail.com>

        Calling async arrow function which is in a class's member function will cause error
        https://bugs.webkit.org/show_bug.cgi?id=166879

        Reviewed by Saam Barati.

        Current patch fixed loading 'super' in async arrow function. Errored appear becuase 
        super was loaded always nevertherless if it used in async arrow function or not, but bytecompiler
        put to arrow function context only if it used within arrow function. So to fix this issue we need to 
        check if super was used in arrow function. 

        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionNode::emitBytecode):

2017-01-10  Commit Queue  <commit-queue@webkit.org>

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

        This change introduced JSC test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Implement JSSourceCode to propagate SourceCode in module
        pipeline"
        https://bugs.webkit.org/show_bug.cgi?id=166861
        http://trac.webkit.org/changeset/210537

2017-01-10  Commit Queue  <commit-queue@webkit.org>

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

        too crude for non-WebCore clients (Requested by kling on
        #webkit).

        Reverted changeset:

        "Crash when GC heap grows way too large."
        https://bugs.webkit.org/show_bug.cgi?id=166875
        http://trac.webkit.org/changeset/210540

2017-01-09  Filip Pizlo  <fpizlo@apple.com>

        JSArray has some object scanning races
        https://bugs.webkit.org/show_bug.cgi?id=166874

        Reviewed by Mark Lam.
        
        This fixes two separate bugs, both of which I detected by running
        array-splice-contiguous.js in extreme anger:
        
        1) Some of the paths of shifting and unshifting were not grabbing the internal cell
           lock. This was causing the array storage scan to crash, even though it was well
           synchronized (the scan does hold the lock). The fix is just to hold the lock anywhere
           that memmoves the innards of the butterfly.
        
        2) Out of line property scanning was synchronized using double collect snapshot. Array
           storage scanning was synchronized using locks. But what if array storage
           transformations messed up the out of line properties? It turns out that we actually
           need to hoist the array storage scanner's locking up into the double collect
           snapshot.
        
        I don't know how to write a test that does any better of a job of catching this than
        array-splice-contiguous.js.

        * heap/DeferGC.h: Make DisallowGC usable even if NDEBUG.
        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase):
        (JSC::JSArray::shiftCountWithArrayStorage):
        (JSC::JSArray::unshiftCountWithArrayStorage):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterflyImpl):

2017-01-10  Andreas Kling  <akling@apple.com>

        Crash when GC heap grows way too large.
        <https://webkit.org/b/166875>
        <rdar://problem/27896585>

        Reviewed by Mark Lam.

        Hard cap the JavaScript heap at 4GB of live objects (determined post-GC.)
        If we go past this limit, crash with a recognizable signature.

        * heap/Heap.cpp:
        (JSC::Heap::didExceedHeapSizeLimit):
        (JSC::Heap::updateAllocationLimits):

2017-01-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Implement JSSourceCode to propagate SourceCode in module pipeline
        https://bugs.webkit.org/show_bug.cgi?id=166861

        Reviewed by Saam Barati.

        Instead of propagating source code string, we propagate JSSourceCode
        cell in the module pipeline. This allows us to attach a metadata
        to the propagated source code string. In particular, it propagates
        SourceOrigin through the module pipeline.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/ModuleLoaderPrototype.js:
        (fulfillFetch):
        (requestFetch):
        * jsc.cpp:
        (GlobalObject::moduleLoaderFetch):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/Completion.cpp:
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::provide):
        * runtime/JSModuleLoader.h:
        * runtime/JSSourceCode.cpp: Added.
        (JSC::JSSourceCode::destroy):
        * runtime/JSSourceCode.h: Added.
        (JSC::JSSourceCode::createStructure):
        (JSC::JSSourceCode::create):
        (JSC::JSSourceCode::sourceCode):
        (JSC::JSSourceCode::JSSourceCode):
        * runtime/JSType.h:
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2017-01-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION (r210522): ASSERTION FAILED: divot.offset >= divotStart.offset seen with stress/import-basic.js and stress/import-from-eval.js
        https://bugs.webkit.org/show_bug.cgi?id=166873

        Reviewed by Saam Barati.

        The divot should be the end of `import` token.

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

2017-01-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop.

        * dfg/DFGPlanInlines.h:

2017-01-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Prototype dynamic-import
        https://bugs.webkit.org/show_bug.cgi?id=165724

        Reviewed by Saam Barati.

        In this patch, we implement stage3 dynamic-import proposal[1].
        This patch adds a new special operator `import`. And by using it, we can import
        the module dynamically from modules and scripts. Before this feature, the module
        is always imported statically and before executing the modules, importing the modules
        needs to be done. And especially, the module can only be imported from the module.
        So the classic script cannot import and use the modules. This dynamic-import relaxes
        the above restrictions.

        The typical dynamic-import form is the following.

            import("...").then(function (namespace) { ... });

        You can pass any AssignmentExpression for the import operator. So you can determine
        the importing modules dynamically.

            import(value).then(function (namespace) { ... });

        And previously the module import declaration is only allowed in the top level statements.
        But this import operator is just an expression. So you can use it in the function.
        And you can use it conditionally.

            async function go(cond)
            {
                if (cond)
                    return import("...");
                return undefined;
            }
            await go(true);

        Currently, this patch just implements this feature only for the JSC shell.
        JSC module loader requires a new hook, `importModule`. And the JSC shell implements
        this hook. So, for now, this dynamic-import is not available in the browser side.
        If you write this `import` call, it always returns the rejected promise.

        import is implemented like a special operator similar to `super`.
        This is because import is context-sensitive. If you call the `import`, the module
        key resolution is done based on the caller's running context.

        For example, if you are running the script which filename is "./ok/hello.js", the module
        key for the call`import("./resource/syntax.js")` becomes `"./ok/resource/syntax.js"`.
        But if you write the completely same import form in the script "./error/hello.js", the
        key becomes "./error/resource/syntax.js". So exposing this feature as the `import`
        function is misleading: this function becomes caller's context-sensitive. That's why
        dynamic-import is specified as a special operator.

        To resolve the module key, we need the caller's context information like the filename of
        the caller. This is provided by the SourceOrigin implemented in r210149.
        In the JSC shell implementation, this SourceOrigin holds the filename of the caller. So
        based on this implementation, the module loader resolve the module key.
        In the near future, we will extend this SourceOrigin to hold more information needed for
        the browser-side import implementation.

        [1]: https://tc39.github.io/proposal-dynamic-import/

        * builtins/ModuleLoaderPrototype.js:
        (importModule):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        (JSC::BytecodeGenerator::emitGetGlobalPrivate):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ImportNode::emitBytecode):
        * jsc.cpp:
        (absolutePath):
        (GlobalObject::moduleLoaderImportModule):
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        (runWithScripts):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createImportExpr):
        * parser/NodeConstructors.h:
        (JSC::ImportNode::ImportNode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isImportNode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createImportExpr):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncImportModule):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::getModuleNamespaceObject):
        * runtime/JSModuleLoader.h:
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeGetModuleNamespaceObject):

2017-01-08  Filip Pizlo  <fpizlo@apple.com>

        Make the collector's fixpoint smart about scheduling work
        https://bugs.webkit.org/show_bug.cgi?id=165910

        Reviewed by Keith Miller.
        
        Prior to this change, every time the GC would run any constraints in markToFixpoint, it
        would run all of the constraints. It would always run them in the same order. That means
        that so long as any one constraint was generating new work, we'd pay the price of all
        constraints. This is usually OK because most constraints are cheap but it artificially
        inflates the cost of slow constraints - especially ones that are expensive but usually
        generate no new work.
        
        This patch redoes how the GC runs constraints by applying ideas from data flow analysis.
        The GC now builds a MarkingConstraintSet when it boots up, and this contains all of the
        constraints as well as some meta-data about them. Now, markToFixpoint just calls into
        MarkingConstraintSet to execute constraints. Because constraint execution and scheduling
        need to be aware of each other, I rewrote markToFixpoint in such a way that it's more
        obvious how the GC goes between constraint solving, marking with stopped mutator, and
        marking with resumed mutator. This also changes the scheduler API in such a way that a
        synchronous stop-the-world collection no longer needs to do fake stop/resume - instead we
        just swap the space-time scheduler for the stop-the-world scheduler.
        
        This is a big streamlining of the GC. This is a speed-up in GC-heavy tests because we
        now execute most constraints exactly twice regardless of how many total fixpoint
        iterations we do. Now, when we run out of marking work, the constraint solver will just
        run the constraint that is most likely to generate new visiting work, and if it does
        generate work, then the GC now goes back to marking. Before, it would run *all*
        constraints and then go back to marking. The constraint solver is armed with three
        information signals that it uses to sort the constraints in order of descending likelihood
        to generate new marking work. Then it runs them in that order until it there is new
        marking work. The signals are:
        
        1) Whether the constraint is greyed by marking or execution. We call this the volatility
           of the constraint. For example, weak reference constraints have GreyedByMarking as
           their volatility because they are most likely to have something to say after we've done
           some marking. On the other hand, conservative roots have GreyedByExecution as their
           volatility because they will give new information anytime we let the mutator run. The
           constraint solver will only run GreyedByExecution constraints as roots and after the
           GreyedByMarking constraints go silent. This ensures that we don't try to scan
           conservative roots every time we need to re-run weak references and vice-versa.
           
           Another way to look at it is that the constraint solver tries to predict if the
           wavefront is advancing or retreating. The wavefront is almost certainly advancing so
           long as the mark stacks are non-empty or so long as at least one of the GreyedByMarking
           constraints is still producing work. Otherwise the wavefront is almost certainly
           retreating. It's most profitable to run GreyedByMarking constraints when the wavefront
           is advancing, and most profitable to run GreyedByExecution constraints when the
           wavefront is retreating.
           
           We use the predicted wavefront direction and the volatility of constraints as a
           first-order signal of constraint profitability.
        
        2) How much visiting work was created the last time the constraint ran. The solver
           remembers the lastVisitCount, and uses it to predict how much work the constraint will
           generate next time. In practice this means we will keep re-running the one interesting
           constraint until it shuts up.
        
        3) Optional work predictors for some constraints. The constraint that shuffles the mutator
           mark stack into the main SlotVisitor's mutator mark stack always knows exactly how much
           work it will create.
           
           The sum of (2) and (3) are used as a second-order signal of constraint profitability.
        
        The constraint solver will always run all of the GreyedByExecution constraints at GC
        start, since these double as the GC's roots. The constraint solver will always run all of
        the GreyedByMarking constraints the first time that marking stalls. Other than that, the
        solver will keep running constraints, sorted according to their likelihood to create work,
        until either work is created or we run out of constraints to run. GC termination happens
        when we run out of constraints to run.
        
        This new infrastructure means that we have a much better chance of dealing with worst-case
        DOM pathologies. If we can intelligently factor different evil DOM things into different
        constraints with the right work predictions then this could reduce the cost of those DOM
        things by a factor of N where N is the number of fixpoint iterations the GC typically
        does. N is usually around 5-6 even for simple heaps.
        
        My perf measurements say:
        
        PLT3: 0.02% faster with 5.3% confidence.
        JetStream: 0.15% faster with 17% confidence.
        Speedometer: 0.58% faster with 82% confidence.
        
        Here are the details from JetStream:
        
        splay: 1.02173x faster with 0.996841 confidence
        splay-latency: 1.0617x faster with 0.987462 confidence
        towers.c: 1.01852x faster with 0.92128 confidence
        crypto-md5: 1.06058x faster with 0.482363 confidence
        score: 1.00152x faster with 0.16892 confidence
        
        I think that Speedometer is legitimately benefiting from this change based on looking at
        --logGC=true output. We are now spending less time reexecuting expensive constraints. I
        think that JetStream/splay is also benefiting, because although the constraints it sees
        are cheap, it spends 30% of its time in GC so even small improvements matter.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::markCodeBlocks): Deleted.
        (JSC::DFG::Plan::rememberCodeBlocks): Deleted.
        * dfg/DFGPlan.h:
        * dfg/DFGPlanInlines.h: Added.
        (JSC::DFG::Plan::iterateCodeBlocksForGC):
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::markCodeBlocks): Deleted.
        (JSC::DFG::Worklist::rememberCodeBlocks): Deleted.
        (JSC::DFG::rememberCodeBlocks): Deleted.
        * dfg/DFGWorklist.h:
        * dfg/DFGWorklistInlines.h: Added.
        (JSC::DFG::iterateCodeBlocksForGC):
        (JSC::DFG::Worklist::iterateCodeBlocksForGC):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::writeBarrierCurrentlyExecuting): Deleted.
        * heap/CodeBlockSet.h:
        (JSC::CodeBlockSet::iterate): Deleted.
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterate):
        (JSC::CodeBlockSet::iterateCurrentlyExecuting):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocksWithoutHoldingLocks):
        (JSC::Heap::assertSharedMarkStacksEmpty):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::endMarking):
        (JSC::Heap::collectInThread):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::acquireAccessSlow):
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::buildConstraintSet):
        (JSC::Heap::notifyIsSafeToCollect):
        (JSC::Heap::ResumeTheWorldScope::ResumeTheWorldScope): Deleted.
        (JSC::Heap::ResumeTheWorldScope::~ResumeTheWorldScope): Deleted.
        (JSC::Heap::harvestWeakReferences): Deleted.
        (JSC::Heap::visitConservativeRoots): Deleted.
        (JSC::Heap::visitCompilerWorklistWeakReferences): Deleted.
        * heap/Heap.h:
        * heap/MarkingConstraint.cpp: Added.
        (JSC::MarkingConstraint::MarkingConstraint):
        (JSC::MarkingConstraint::~MarkingConstraint):
        (JSC::MarkingConstraint::resetStats):
        (JSC::MarkingConstraint::execute):
        * heap/MarkingConstraint.h: Added.
        (JSC::MarkingConstraint::index):
        (JSC::MarkingConstraint::abbreviatedName):
        (JSC::MarkingConstraint::name):
        (JSC::MarkingConstraint::lastVisitCount):
        (JSC::MarkingConstraint::quickWorkEstimate):
        (JSC::MarkingConstraint::workEstimate):
        (JSC::MarkingConstraint::volatility):
        * heap/MarkingConstraintSet.cpp: Added.
        (JSC::MarkingConstraintSet::ExecutionContext::ExecutionContext):
        (JSC::MarkingConstraintSet::ExecutionContext::didVisitSomething):
        (JSC::MarkingConstraintSet::ExecutionContext::shouldTimeOut):
        (JSC::MarkingConstraintSet::ExecutionContext::drain):
        (JSC::MarkingConstraintSet::ExecutionContext::didExecute):
        (JSC::MarkingConstraintSet::ExecutionContext::execute):
        (JSC::MarkingConstraintSet::MarkingConstraintSet):
        (JSC::MarkingConstraintSet::~MarkingConstraintSet):
        (JSC::MarkingConstraintSet::resetStats):
        (JSC::MarkingConstraintSet::add):
        (JSC::MarkingConstraintSet::executeBootstrap):
        (JSC::MarkingConstraintSet::executeConvergence):
        (JSC::MarkingConstraintSet::isWavefrontAdvancing):
        (JSC::MarkingConstraintSet::executeConvergenceImpl):
        (JSC::MarkingConstraintSet::executeAll):
        * heap/MarkingConstraintSet.h: Added.
        (JSC::MarkingConstraintSet::isWavefrontRetreating):
        * heap/MutatorScheduler.cpp: Added.
        (JSC::MutatorScheduler::MutatorScheduler):
        (JSC::MutatorScheduler::~MutatorScheduler):
        (JSC::MutatorScheduler::didStop):
        (JSC::MutatorScheduler::willResume):
        (JSC::MutatorScheduler::didExecuteConstraints):
        (JSC::MutatorScheduler::log):
        (JSC::MutatorScheduler::shouldStop):
        (JSC::MutatorScheduler::shouldResume):
        * heap/MutatorScheduler.h: Added.
        * heap/OpaqueRootSet.h:
        (JSC::OpaqueRootSet::add):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::visitAsConstraint):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::didReachTermination):
        (JSC::SlotVisitor::hasWork):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively):
        (JSC::SlotVisitor::addOpaqueRoot):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::addToVisitCount):
        * heap/SpaceTimeMutatorScheduler.cpp: Copied from Source/JavaScriptCore/heap/SpaceTimeScheduler.cpp.
        (JSC::SpaceTimeMutatorScheduler::Snapshot::Snapshot):
        (JSC::SpaceTimeMutatorScheduler::Snapshot::now):
        (JSC::SpaceTimeMutatorScheduler::Snapshot::bytesAllocatedThisCycle):
        (JSC::SpaceTimeMutatorScheduler::SpaceTimeMutatorScheduler):
        (JSC::SpaceTimeMutatorScheduler::~SpaceTimeMutatorScheduler):
        (JSC::SpaceTimeMutatorScheduler::state):
        (JSC::SpaceTimeMutatorScheduler::beginCollection):
        (JSC::SpaceTimeMutatorScheduler::didStop):
        (JSC::SpaceTimeMutatorScheduler::willResume):
        (JSC::SpaceTimeMutatorScheduler::didExecuteConstraints):
        (JSC::SpaceTimeMutatorScheduler::timeToStop):
        (JSC::SpaceTimeMutatorScheduler::timeToResume):
        (JSC::SpaceTimeMutatorScheduler::log):
        (JSC::SpaceTimeMutatorScheduler::endCollection):
        (JSC::SpaceTimeMutatorScheduler::bytesAllocatedThisCycleImpl):
        (JSC::SpaceTimeMutatorScheduler::bytesSinceBeginningOfCycle):
        (JSC::SpaceTimeMutatorScheduler::maxHeadroom):
        (JSC::SpaceTimeMutatorScheduler::headroomFullness):
        (JSC::SpaceTimeMutatorScheduler::mutatorUtilization):
        (JSC::SpaceTimeMutatorScheduler::collectorUtilization):
        (JSC::SpaceTimeMutatorScheduler::elapsedInPeriod):
        (JSC::SpaceTimeMutatorScheduler::phase):
        (JSC::SpaceTimeMutatorScheduler::shouldBeResumed):
        (JSC::SpaceTimeScheduler::Decision::targetMutatorUtilization): Deleted.
        (JSC::SpaceTimeScheduler::Decision::targetCollectorUtilization): Deleted.
        (JSC::SpaceTimeScheduler::Decision::elapsedInPeriod): Deleted.
        (JSC::SpaceTimeScheduler::Decision::phase): Deleted.
        (JSC::SpaceTimeScheduler::Decision::shouldBeResumed): Deleted.
        (JSC::SpaceTimeScheduler::Decision::timeToResume): Deleted.
        (JSC::SpaceTimeScheduler::Decision::timeToStop): Deleted.
        (JSC::SpaceTimeScheduler::SpaceTimeScheduler): Deleted.
        (JSC::SpaceTimeScheduler::snapPhase): Deleted.
        (JSC::SpaceTimeScheduler::currentDecision): Deleted.
        * heap/SpaceTimeMutatorScheduler.h: Copied from Source/JavaScriptCore/heap/SpaceTimeScheduler.h.
        (JSC::SpaceTimeScheduler::Decision::operator bool): Deleted.
        * heap/SpaceTimeScheduler.cpp: Removed.
        * heap/SpaceTimeScheduler.h: Removed.
        * heap/SynchronousStopTheWorldMutatorScheduler.cpp: Added.
        (JSC::SynchronousStopTheWorldMutatorScheduler::SynchronousStopTheWorldMutatorScheduler):
        (JSC::SynchronousStopTheWorldMutatorScheduler::~SynchronousStopTheWorldMutatorScheduler):
        (JSC::SynchronousStopTheWorldMutatorScheduler::state):
        (JSC::SynchronousStopTheWorldMutatorScheduler::beginCollection):
        (JSC::SynchronousStopTheWorldMutatorScheduler::timeToStop):
        (JSC::SynchronousStopTheWorldMutatorScheduler::timeToResume):
        (JSC::SynchronousStopTheWorldMutatorScheduler::endCollection):
        * heap/SynchronousStopTheWorldMutatorScheduler.h: Added.
        * heap/VisitingTimeout.h: Added.
        (JSC::VisitingTimeout::VisitingTimeout):
        (JSC::VisitingTimeout::visitCount):
        (JSC::VisitingTimeout::didVisitSomething):
        (JSC::VisitingTimeout::shouldTimeOut):
        * runtime/Options.h:

2017-01-09  Commit Queue  <commit-queue@webkit.org>

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

        "4% JSBench regression" (Requested by keith_mi_ on #webkit).

        Reverted changeset:

        "Add a slice intrinsic to the DFG/FTL"
        https://bugs.webkit.org/show_bug.cgi?id=166707
        http://trac.webkit.org/changeset/210476

2017-01-08  Andreas Kling  <akling@apple.com>

        Inject MarkedSpace size classes for a few more high-volume objects.
        <https://webkit.org/b/166815>

        Reviewed by Darin Adler.

        Add the following classes to the list of manually injected size classes:

            - JSString
            - JSFunction
            - PropertyTable
            - Structure

        Only Structure actually ends up with a new size class, the others already
        can't get any tighter due to the current MarkedBlock::atomSize being 16.
        I've put them in anyway to ensure that we have optimally carved-out cells
        for them in the future, should they grow.

        With this change, Structures get allocated in 128-byte cells instead of
        160-byte cells, giving us 25% more Structures per MarkedBlock.

        * heap/MarkedSpace.cpp:

2017-01-06  Saam Barati  <sbarati@apple.com>

        Add a slice intrinsic to the DFG/FTL
        https://bugs.webkit.org/show_bug.cgi?id=166707

        Reviewed by Filip Pizlo.

        The gist of this patch is to inline Array.prototype.slice
        into the DFG/FTL. The implementation in the DFG-backend
        and FTLLowerDFGToB3 is just a straight forward implementation
        of what the C function is doing. The more interesting bits
        of this patch are setting up the proper watchpoints and conditions
        in the executing code to prove that its safe to skip all of the
        observable JS actions that Array.prototype.slice normally does.
        
        We perform the following proofs:
        1. Array.prototype.constructor has not changed (via a watchpoint).
        2. That Array.prototype.constructor[Symbol.species] has not changed (via a watchpoint).
        3. The global object is not having a bad time.
        3. The array that is being sliced has an original array structure.
        5. Array.prototype/Object.prototype have not transitioned.
        
        Conditions 1, 2, and 3 are strictly required.
        
        4 is ensuring a couple things:
        1. That a "constructor" property hasn't been added to the array
        we're slicing since we're supposed to perform a Get(array, "constructor").
        2. That we're not slicing an instance of a subclass of Array.
        
        We could relax 4.1 in the future if we find other ways to test if
        the incoming array hasn't changed the "constructor" property.
        
        I'm seeing a 5% speedup on crypto-pbkdf2 and often a 1% speedup on
        the total benchmark (the results are sometimes noisy).

        * bytecode/ExitKind.cpp:
        (JSC::exitKindToString):
        * bytecode/ExitKind.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasArrayMode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArraySlice):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        (JSC::speciesWatchpointIsValid):
        (JSC::speciesConstructArray):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        (JSC::ArrayPrototype::initializeSpeciesWatchpoint):
        (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire):
        (JSC::speciesWatchpointsValid): Deleted.
        (JSC::ArrayPrototype::attemptToInitializeSpeciesWatchpoint): Deleted.
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::speciesWatchpointStatus): Deleted.
        (): Deleted.
        * runtime/Intrinsic.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arraySpeciesWatchpoint):

2017-01-06  Mark Lam  <mark.lam@apple.com>

        The ObjC API's JSVirtualMachine's map tables need to be guarded by a lock.
        https://bugs.webkit.org/show_bug.cgi?id=166778
        <rdar://problem/29761198>

        Reviewed by Filip Pizlo.

        Now that we have a concurrent GC, access to JSVirtualMachine's
        m_externalObjectGraph and m_externalRememberedSet need to be guarded by a lock
        since both the GC marker thread and the mutator thread may access them at the
        same time.

        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine addExternalRememberedObject:]):
        (-[JSVirtualMachine addManagedReference:withOwner:]):
        (-[JSVirtualMachine removeManagedReference:withOwner:]):
        (-[JSVirtualMachine externalDataMutex]):
        (scanExternalObjectGraph):
        (scanExternalRememberedSet):

        * API/JSVirtualMachineInternal.h:
        - Deleted externalObjectGraph method.  There's no need to expose this.

2017-01-06  Michael Saboff  <msaboff@apple.com>

        @putByValDirect in Array.of and Array.from overwrites non-writable/configurable properties
        https://bugs.webkit.org/show_bug.cgi?id=153486

        Reviewed by Saam Barati.

        Moved read only check in putDirect() to all paths.

        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putDirect):

2016-12-30  Filip Pizlo  <fpizlo@apple.com>

        DeferGC::~DeferGC should be super cheap
        https://bugs.webkit.org/show_bug.cgi?id=166626

        Reviewed by Saam Barati.
        
        Right now, ~DeferGC requires running the collector's full collectIfNecessaryOrDefer()
        hook, which is super big. Normally, that hook would only be called from GC slow paths,
        so it ought to be possible to add complex logic to it. It benefits the GC algorithm to
        make that code smart, not necessarily fast.

        The right thing for it to do is to have ~DeferGC check a boolean to see if
        collectIfNecessaryOrDefer() had previously deferred anything, and only call it if that
        is true. That's what this patch does.
        
        Unfortunately, this means that we lose the collectAccordingToDeferGCProbability mode,
        which we used for two tests. Since I could only see two tests that used this mode, I
        felt that it was better to enhance the GC than to keep the tests. I filed bug 166627 to
        bring back something like that mode.
        
        Although this patch does make some paths faster, its real goal is to ensure that bug
        165963 can add more logic to collectIfNecessaryOrDefer() without introducing a big
        regression. Until then, I wouldn't be surprised if this patch was a progression, but I'm
        not betting on it.

        * heap/Heap.cpp:
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::decrementDeferralDepthAndGCIfNeededSlow):
        (JSC::Heap::canCollect): Deleted.
        (JSC::Heap::shouldCollectHeuristic): Deleted.
        (JSC::Heap::shouldCollect): Deleted.
        (JSC::Heap::collectAccordingToDeferGCProbability): Deleted.
        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded): Deleted.
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::incrementDeferralDepth):
        (JSC::Heap::decrementDeferralDepth):
        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
        (JSC::Heap::mayNeedToStop):
        (JSC::Heap::stopIfNecessary):
        * runtime/Options.h:

2017-01-05  Filip Pizlo  <fpizlo@apple.com>

        AutomaticThread timeout shutdown leaves a small window where notify() would think that the thread is still running
        https://bugs.webkit.org/show_bug.cgi?id=166742

        Reviewed by Geoffrey Garen.
        
        Update to new AutomaticThread API.

        * dfg/DFGWorklist.cpp:

2017-01-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=166726

        Reviewed by Alex Christensen.

        Add include folder.

        * CMakeLists.txt:

2016-12-21  Brian Burg  <bburg@apple.com>

        Web Inspector: teach the protocol generator about platform-specific types, events, and commands
        https://bugs.webkit.org/show_bug.cgi?id=166003
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        This patch implements parser, model, and generator-side changes to account for
        platform-specific types, events, and commands. The 'platform' property is parsed
        for top-level definitions and assumed to be the 'generic' platform if none is specified.

        Since the generator's platform setting acts to filter definitions with an incompatible platform,
        all generators must be modified to consult a list of filtered types/commands/events for
        a domain instead of directly accessing Domain.{type_declarations, commands, events}. To prevent
        accidental misuse, hide those fields behind accessors (e.g., `all_type_declarations()`) so that they
        are still accessible if truly necessary, but not used by default and caused an error if not migrated.

        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator.domains_to_generate):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator.domains_to_generate):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator.domains_to_generate):
        (CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator.domains_to_generate):
        (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator._generate_forward_declarations):
        (_generate_typedefs_for_domain):
        (_generate_builders_for_domain):
        (_generate_forward_declarations_for_binding_traits):
        (_generate_declarations_for_enum_conversion_methods):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        (CppProtocolTypesImplementationGenerator._generate_builders_for_domain):
        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.should_generate_domain):
        (JSBackendCommandsGenerator.domains_to_generate):
        (JSBackendCommandsGenerator.generate_domain):
        (JSBackendCommandsGenerator.domains_to_generate.should_generate_domain): Deleted.
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator.domains_to_generate):
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_forward_declarations):
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator):
        (ObjCBackendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_implementation_for_domain):
        (ObjCConfigurationImplementationGenerator): Deleted.
        (ObjCConfigurationImplementationGenerator.__init__): Deleted.
        (ObjCConfigurationImplementationGenerator.output_filename): Deleted.
        (ObjCConfigurationImplementationGenerator.domains_to_generate): Deleted.
        (ObjCConfigurationImplementationGenerator.generate_output): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_domain): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_success_block_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_success_block_for_command.and): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_conversions_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_conversions_for_command.in_param_expression): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_invocation_for_command): Deleted.
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        (ObjCConfigurationHeaderGenerator.generate_output):
        (ObjCConfigurationHeaderGenerator._generate_properties_for_domain):
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        (ObjCConfigurationImplementationGenerator):
        (ObjCConfigurationImplementationGenerator.generate_output):
        (ObjCConfigurationImplementationGenerator._generate_configuration_implementation_for_domains):
        (ObjCConfigurationImplementationGenerator._generate_ivars):
        (ObjCConfigurationImplementationGenerator._generate_dealloc):
        (ObjCBackendDispatcherImplementationGenerator): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.__init__): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.output_filename): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.generate_output): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_configuration_implementation_for_domains): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_ivars): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_dealloc): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_setter_for_domain): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_event_dispatcher_getter_for_domain): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._variable_name_prefix_for_domain): Deleted.
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations):
        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator.generate_output):
        (ObjCHeaderGenerator._generate_forward_declarations):
        (ObjCHeaderGenerator._generate_enums):
        (ObjCHeaderGenerator._generate_types):
        (ObjCHeaderGenerator._generate_command_protocols):
        (ObjCHeaderGenerator._generate_event_interfaces):
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        (ObjCInternalHeaderGenerator.generate_output):
        (ObjCInternalHeaderGenerator._generate_event_dispatcher_private_interfaces):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate):
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_functions):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator.domains_to_generate):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_interface):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_implementation):
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator.domains_to_generate):
        (ObjCProtocolTypesImplementationGenerator.generate_type_implementations):

        * inspector/scripts/codegen/generator.py:
        (Generator.can_generate_platform):
        (Generator):
        (Generator.type_declarations_for_domain):
        (Generator.commands_for_domain):
        (Generator.events_for_domain):
        These are the core methods for computing whether a definition can be used given a target platform.

        (Generator.calculate_types_requiring_shape_assertions):
        (Generator._traverse_and_assign_enum_values):
        * inspector/scripts/codegen/models.py:
        (Protocol.parse_type_declaration):
        (Protocol.parse_command):
        (Protocol.parse_event):
        (Protocol.resolve_types):

        (Domain.__init__):
        (Domain):
        (Domain.all_type_declarations):
        (Domain.all_commands):
        (Domain.all_events):
        Hide fields behind these accessors so it's really obvious when we are ignoring platform filtering.

        (Domain.resolve_type_references):
        (TypeDeclaration.__init__):
        (Command.__init__):
        (Event.__init__):
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.should_generate_types_for_domain):
        (ObjCGenerator):
        (ObjCGenerator.should_generate_commands_for_domain):
        (ObjCGenerator.should_generate_events_for_domain):
        (ObjCGenerator.should_generate_domain_types_filter): Deleted.
        (ObjCGenerator.should_generate_domain_types_filter.should_generate_domain_types): Deleted.
        (ObjCGenerator.should_generate_domain_command_handler_filter): Deleted.
        (ObjCGenerator.should_generate_domain_command_handler_filter.should_generate_domain_command_handler): Deleted.
        (ObjCGenerator.should_generate_domain_event_dispatcher_filter): Deleted.
        (ObjCGenerator.should_generate_domain_event_dispatcher_filter.should_generate_domain_event_dispatcher): Deleted.
        Clean up some messy code that essentially did the same definition filtering as we must do for platforms.
        This will be enhanced in a future patch so that platform filtering will take priority over the target framework.

        The results above need rebaselining because the class names for two generators were swapped by accident.
        Fixing the names causes the order of generated files to change, and this generates ugly diffs because every
        generated file includes the same copyright block at the top.

        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:

        * inspector/scripts/tests/generic/expected/fail-on-command-with-invalid-platform.json-error: Added.
        * inspector/scripts/tests/generic/expected/fail-on-type-with-invalid-platform.json-error: Added.
        * inspector/scripts/tests/generic/fail-on-command-with-invalid-platform.json: Added.
        * inspector/scripts/tests/generic/fail-on-type-with-invalid-platform.json: Added.

        Add error test cases for invalid platforms in commands, types, and events.

        * inspector/scripts/tests/generic/definitions-with-mac-platform.json: Added.
        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result: Added.
        * inspector/scripts/tests/all/definitions-with-mac-platform.json: Added.
        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result: Added.
        * inspector/scripts/tests/ios/definitions-with-mac-platform.json: Added.
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result: Added.
        * inspector/scripts/tests/mac/definitions-with-mac-platform.json: Added.
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result: Added.

        Add a basic 4-way test that generates code for each platform from the same specification.
        With 'macos' platform for each definition, only 'all' and 'mac' generate anything interesting.

2017-01-03  Brian Burg  <bburg@apple.com>

        Web Inspector: teach the protocol generator about platform-specific types, events, and commands
        https://bugs.webkit.org/show_bug.cgi?id=166003
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        This patch implements parser, model, and generator-side changes to account for
        platform-specific types, events, and commands. The 'platform' property is parsed
        for top-level definitions and assumed to be the 'generic' platform if none is specified.

        Since the generator's platform setting acts to filter definitions with an incompatible platform,
        all generators must be modified to consult a list of filtered types/commands/events for
        a domain instead of directly accessing Domain.{type_declarations, commands, events}. To prevent
        accidental misuse, hide those fields behind accessors (e.g., `all_type_declarations()`) so that they
        are still accessible if truly necessary, but not used by default and caused an error if not migrated.

        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator.domains_to_generate):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator.domains_to_generate):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator.domains_to_generate):
        (CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator.domains_to_generate):
        (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator._generate_forward_declarations):
        (_generate_typedefs_for_domain):
        (_generate_builders_for_domain):
        (_generate_forward_declarations_for_binding_traits):
        (_generate_declarations_for_enum_conversion_methods):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        (CppProtocolTypesImplementationGenerator._generate_builders_for_domain):
        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.should_generate_domain):
        (JSBackendCommandsGenerator.domains_to_generate):
        (JSBackendCommandsGenerator.generate_domain):
        (JSBackendCommandsGenerator.domains_to_generate.should_generate_domain): Deleted.
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator.domains_to_generate):
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_forward_declarations):
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator):
        (ObjCBackendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_implementation_for_domain):
        (ObjCConfigurationImplementationGenerator): Deleted.
        (ObjCConfigurationImplementationGenerator.__init__): Deleted.
        (ObjCConfigurationImplementationGenerator.output_filename): Deleted.
        (ObjCConfigurationImplementationGenerator.domains_to_generate): Deleted.
        (ObjCConfigurationImplementationGenerator.generate_output): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_domain): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_handler_implementation_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_success_block_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_success_block_for_command.and): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_conversions_for_command): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_conversions_for_command.in_param_expression): Deleted.
        (ObjCConfigurationImplementationGenerator._generate_invocation_for_command): Deleted.
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        (ObjCConfigurationHeaderGenerator.generate_output):
        (ObjCConfigurationHeaderGenerator._generate_properties_for_domain):
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        (ObjCConfigurationImplementationGenerator):
        (ObjCConfigurationImplementationGenerator.generate_output):
        (ObjCConfigurationImplementationGenerator._generate_configuration_implementation_for_domains):
        (ObjCConfigurationImplementationGenerator._generate_ivars):
        (ObjCConfigurationImplementationGenerator._generate_dealloc):
        (ObjCBackendDispatcherImplementationGenerator): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.__init__): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.output_filename): Deleted.
        (ObjCBackendDispatcherImplementationGenerator.generate_output): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_configuration_implementation_for_domains): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_ivars): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_dealloc): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_setter_for_domain): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._generate_event_dispatcher_getter_for_domain): Deleted.
        (ObjCBackendDispatcherImplementationGenerator._variable_name_prefix_for_domain): Deleted.
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator.domains_to_generate):
        (ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations):
        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator.generate_output):
        (ObjCHeaderGenerator._generate_forward_declarations):
        (ObjCHeaderGenerator._generate_enums):
        (ObjCHeaderGenerator._generate_types):
        (ObjCHeaderGenerator._generate_command_protocols):
        (ObjCHeaderGenerator._generate_event_interfaces):
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        (ObjCInternalHeaderGenerator.generate_output):
        (ObjCInternalHeaderGenerator._generate_event_dispatcher_private_interfaces):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.domains_to_generate):
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_functions):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator.domains_to_generate):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_interface):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_implementation):
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator.domains_to_generate):
        (ObjCProtocolTypesImplementationGenerator.generate_type_implementations):

        * inspector/scripts/codegen/generator.py:
        (Generator.can_generate_platform):
        (Generator):
        (Generator.type_declarations_for_domain):
        (Generator.commands_for_domain):
        (Generator.events_for_domain):
        These are the core methods for computing whether a definition can be used given a target platform.

        (Generator.calculate_types_requiring_shape_assertions):
        (Generator._traverse_and_assign_enum_values):
        * inspector/scripts/codegen/models.py:
        (Protocol.parse_type_declaration):
        (Protocol.parse_command):
        (Protocol.parse_event):
        (Protocol.resolve_types):

        (Domain.__init__):
        (Domain):
        (Domain.all_type_declarations):
        (Domain.all_commands):
        (Domain.all_events):
        Hide fields behind these accessors so it's really obvious when we are ignoring platform filtering.

        (Domain.resolve_type_references):
        (TypeDeclaration.__init__):
        (Command.__init__):
        (Event.__init__):
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.should_generate_types_for_domain):
        (ObjCGenerator):
        (ObjCGenerator.should_generate_commands_for_domain):
        (ObjCGenerator.should_generate_events_for_domain):
        (ObjCGenerator.should_generate_domain_types_filter): Deleted.
        (ObjCGenerator.should_generate_domain_types_filter.should_generate_domain_types): Deleted.
        (ObjCGenerator.should_generate_domain_command_handler_filter): Deleted.
        (ObjCGenerator.should_generate_domain_command_handler_filter.should_generate_domain_command_handler): Deleted.
        (ObjCGenerator.should_generate_domain_event_dispatcher_filter): Deleted.
        (ObjCGenerator.should_generate_domain_event_dispatcher_filter.should_generate_domain_event_dispatcher): Deleted.
        Clean up some messy code that essentially did the same definition filtering as we must do for platforms.
        This will be enhanced in a future patch so that platform filtering will take priority over the target framework.

        The following results need rebaselining because the class names for two generators were swapped by accident.
        Fixing the names causes the order of generated files to change, and this generates ugly diffs because every
        generated file includes the same copyright block at the top.

        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:

2017-01-03  Brian Burg  <bburg@apple.com>

        Web Inspector: teach the protocol generator about platform-specific types, events, and commands
        https://bugs.webkit.org/show_bug.cgi?id=166003
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        Make it possible to test inspector protocol generator output for different platforms.

        Move existing tests to the generic/ subdirectory, as they are to be generated
        without any specific platform. Later, platform-specific generator behavior will be
        tested by cloning the same test to multiple platform directories.

        * inspector/scripts/tests{/ => /generic/}commands-with-async-attribute.json
        * inspector/scripts/tests{/ => /generic/}commands-with-optional-call-return-parameters.json
        * inspector/scripts/tests{/ => /generic/}domains-with-varying-command-sizes.json
        * inspector/scripts/tests{/ => /generic/}enum-values.json
        * inspector/scripts/tests{/ => /generic/}events-with-optional-parameters.json
        * inspector/scripts/tests{/ => /generic/}expected/commands-with-async-attribute.json-result
        * inspector/scripts/tests{/ => /generic/}expected/commands-with-optional-call-return-parameters.json-result
        * inspector/scripts/tests{/ => /generic/}expected/domains-with-varying-command-sizes.json-result
        * inspector/scripts/tests{/ => /generic/}expected/enum-values.json-result
        * inspector/scripts/tests{/ => /generic/}expected/events-with-optional-parameters.json-result
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-domain-availability.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-duplicate-command-call-parameter-names.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-duplicate-command-return-parameter-names.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-duplicate-event-parameter-names.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-duplicate-type-declarations.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-duplicate-type-member-names.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-enum-with-no-values.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-number-typed-optional-parameter-flag.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-number-typed-optional-type-member.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-string-typed-optional-parameter-flag.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-string-typed-optional-type-member.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-type-declaration-using-type-reference.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-type-reference-as-primitive-type.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-type-with-lowercase-name.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-unknown-type-reference-in-type-declaration.json-error
        * inspector/scripts/tests{/ => /generic/}expected/fail-on-unknown-type-reference-in-type-member.json-error
        * inspector/scripts/tests{/ => /generic/}expected/generate-domains-with-feature-guards.json-result
        * inspector/scripts/tests{/ => /generic/}expected/same-type-id-different-domain.json-result
        * inspector/scripts/tests{/ => /generic/}expected/shadowed-optional-type-setters.json-result
        * inspector/scripts/tests{/ => /generic/}expected/type-declaration-aliased-primitive-type.json-result
        * inspector/scripts/tests{/ => /generic/}expected/type-declaration-array-type.json-result
        * inspector/scripts/tests{/ => /generic/}expected/type-declaration-enum-type.json-result
        * inspector/scripts/tests{/ => /generic/}expected/type-declaration-object-type.json-result
        * inspector/scripts/tests{/ => /generic/}expected/type-requiring-runtime-casts.json-result
        * inspector/scripts/tests{/ => /generic/}fail-on-domain-availability.json
        * inspector/scripts/tests{/ => /generic/}fail-on-duplicate-command-call-parameter-names.json
        * inspector/scripts/tests{/ => /generic/}fail-on-duplicate-command-return-parameter-names.json
        * inspector/scripts/tests{/ => /generic/}fail-on-duplicate-event-parameter-names.json
        * inspector/scripts/tests{/ => /generic/}fail-on-duplicate-type-declarations.json
        * inspector/scripts/tests{/ => /generic/}fail-on-duplicate-type-member-names.json
        * inspector/scripts/tests{/ => /generic/}fail-on-enum-with-no-values.json
        * inspector/scripts/tests{/ => /generic/}fail-on-number-typed-optional-parameter-flag.json
        * inspector/scripts/tests{/ => /generic/}fail-on-number-typed-optional-type-member.json
        * inspector/scripts/tests{/ => /generic/}fail-on-string-typed-optional-parameter-flag.json
        * inspector/scripts/tests{/ => /generic/}fail-on-string-typed-optional-type-member.json
        * inspector/scripts/tests{/ => /generic/}fail-on-type-declaration-using-type-reference.json
        * inspector/scripts/tests{/ => /generic/}fail-on-type-reference-as-primitive-type.json
        * inspector/scripts/tests{/ => /generic/}fail-on-type-with-lowercase-name.json
        * inspector/scripts/tests{/ => /generic/}fail-on-unknown-type-reference-in-type-declaration.json
        * inspector/scripts/tests{/ => /generic/}fail-on-unknown-type-reference-in-type-member.json
        * inspector/scripts/tests{/ => /generic/}generate-domains-with-feature-guards.json
        * inspector/scripts/tests{/ => /generic/}same-type-id-different-domain.json
        * inspector/scripts/tests{/ => /generic/}shadowed-optional-type-setters.json
        * inspector/scripts/tests{/ => /generic/}type-declaration-aliased-primitive-type.json
        * inspector/scripts/tests{/ => /generic/}type-declaration-array-type.json
        * inspector/scripts/tests{/ => /generic/}type-declaration-enum-type.json
        * inspector/scripts/tests{/ => /generic/}type-declaration-object-type.json
        * inspector/scripts/tests{/ => /generic/}type-requiring-runtime-casts.json

2017-01-03  Brian Burg  <bburg@apple.com>

        Web Inspector: teach the protocol generator about platform-specific types, events, and commands
        https://bugs.webkit.org/show_bug.cgi?id=166003
        <rdar://problem/28718990>

        Reviewed by Joseph Pecoraro.

        Add a --platform argument to generate-inspector-protocol-bindings.py and propagate
        the specified platform to each generator. This will be used in the next few patches
        to exclude types, events, and commands that are unsupported by the backend platform.

        Covert all subclasses of Generator to pass along their positional arguments so that we
        can easily change base class arguments without editing all generator constructors.

        * inspector/scripts/codegen/cpp_generator.py:
        (CppGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCConfigurationImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        (ObjCConfigurationHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        (ObjCInternalHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator.__init__):
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator.__init__):
        Pass along *args instead of single positional arguments.

        * inspector/scripts/codegen/generator.py:
        (Generator.__init__):
        Save the target platform and add a getter.

        * inspector/scripts/codegen/models.py:
        (Platform):
        (Platform.__init__):
        (Platform.fromString):
        (Platforms):
        Define the allowed Platform instances (iOS, macOS, and Any).

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.and.__init__):
        * inspector/scripts/generate-inspector-protocol-bindings.py:
        (generate_from_specification):
        Pass along *args instead of single positional arguments.

2017-01-04  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: add Module.sections
        https://bugs.webkit.org/show_bug.cgi?id=165159
        <rdar://problem/29760326>

        Reviewed by Mark Lam.

        As described in: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymodulecustomsections

        This was added for Emscripten, and is likely to be used soon.

        * wasm/WasmFormat.h: custom sections are just name + bytes
        * wasm/WasmModuleParser.cpp: parse them, instead of skipping over
        * wasm/WasmModuleParser.h:
        * wasm/js/WebAssemblyModulePrototype.cpp: construct the Array of
        ArrayBuffer as described in the spec
        (JSC::webAssemblyModuleProtoCustomSections):

2017-01-04  Saam Barati  <sbarati@apple.com>

        We don't properly handle exceptions inside the nativeCallTrampoline macro in the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=163720

        Reviewed by Mark Lam.

        In the LLInt, we were incorrectly doing the exception check after the call.
        Before the exception check, we were unwinding to our caller's
        frame under the assumption that our caller was always a JS frame.
        This is incorrect, however, because our caller might be a C frame.
        One way that it can be a C frame is when C calls to JS, and JS tail
        calls to native. This patch fixes this bug by doing unwinding from
        the native callee's frame instead of its callers.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2017-01-03  JF Bastien  <jfbastien@apple.com>

        REGRESSION (r210244): Release JSC Stress test failure: wasm.yaml/wasm/js-api/wasm-to-wasm.js.default-wasm
        https://bugs.webkit.org/show_bug.cgi?id=166669
        <rdar://problem/29856455>

        Reviewed by Saam Barati.

        Bug #165282 added wasm -> wasm calls, but caused crashes in
        release builds because the pinned registers are also callee-saved
        and were being clobbered. B3 didn't see itself clobbering them
        when no memory was used, and therefore omitted a restore.

        This was causing the C++ code in callWebAssemblyFunction to crash
        because $r12 was 0, and it expected it to have its value prior to
        the call.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::createJSToWasmWrapper):

2017-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Address failures under LayoutTests/inspector/debugger/stepping
        https://bugs.webkit.org/show_bug.cgi?id=166300

        Reviewed by Brian Burg.

        * debugger/Debugger.cpp:
        (JSC::Debugger::continueProgram):
        When continuing, clear states that would have had us pause again.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didBecomeIdle):
        When resuming after becoming idle, be sure to clear Debugger state.

2017-01-03  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: check and test in-call / out-call values
        https://bugs.webkit.org/show_bug.cgi?id=164876
        <rdar://problem/29844107>

        Reviewed by Saam Barati.

        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToJs): fix the wasm -> JS call coercions for f32 /
        f64 which the assotiated tests inadvertently tripped on: the
        previous code wasn't correctly performing JSValue boxing for
        "double" values. This change is slightly involved because it
        requires two scratch registers to materialize the
        `DoubleEncodeOffset` value. This change therefore reorganizes the
        code to first generate traps, then handle all integers (freeing
        all GPRs), and then all the floating-point values.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction): Implement the defined semantics
        for mismatched arities when JS calls wasm:
        https://github.com/WebAssembly/design/blob/master/JS.md#exported-function-exotic-objects
          - i32 is 0, f32 / f64 are NaN.
          - wasm functions which return "void" are "undefined" in JS.

2017-01-03  Per Arne Vollan  <pvollan@apple.com>

        [Win] jsc.exe sometimes never exits.
        https://bugs.webkit.org/show_bug.cgi?id=158073

        Reviewed by Darin Adler.

        On Windows the thread specific destructor is also called when the main thread is exiting.
        This may lead to the main thread waiting forever for the machine thread lock when exiting,
        if the sampling profiler thread was terminated by the system while holding the machine
        thread lock.

        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::removeThread):

2017-01-02  Julien Brianceau  <jbriance@cisco.com>

        Remove sh4 specific code from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=166640

        Reviewed by Filip Pizlo.

        sh4-specific code does not compile for a while (r189884 at least).
        As nobody seems to have interest in this architecture anymore, let's
        remove this dead code and thus ease the burden for JSC maintainers.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Jump::Jump):
        (JSC::AbstractMacroAssembler::Jump::link):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerSH4.h: Removed.
        * assembler/MaxFrameExtentForSlowPathCall.h:
        * assembler/SH4Assembler.h: Removed.
        * bytecode/DOMJITAccessCasePatchpointParams.cpp:
        (JSC::SlowPathCallGeneratorWithArguments::generateImpl):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::debugCall):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsWithExecState):
        (JSC::CCallHelpers::prepareForTailCallSlow):
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/ExecutableAllocator.h:
        * jit/FPRInfo.h:
        * jit/GPRInfo.h:
        * jit/JITInlines.h:
        (JSC::JIT::callOperation):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOperations.cpp:
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        (JSC::RegisterSet::dfgCalleeSaveRegisters):
        * jit/ThunkGenerators.cpp:
        (JSC::nativeForGenerator):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * offlineasm/backends.rb:
        * offlineasm/instructions.rb:
        * offlineasm/sh4.rb: Removed.
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateEnter):
        (JSC::Yarr::YarrGenerator::generateReturn):

2017-01-02  JF Bastien  <jfbastien@apple.com>

        WebAssembly: handle and optimize wasm export → wasm import calls
        https://bugs.webkit.org/show_bug.cgi?id=165282

        Reviewed by Saam Barati.

          - Add a new JSType for WebAssemblyFunction, and use it when creating its
            structure. This will is used to quickly detect from wasm whether the import
            call is to another wasm module, or whether it's to JS.
          - Generate two stubs from the import stub generator: one for wasm->JS and one
            for wasm -> wasm. This is done at Module time. Which is called will only be
            known at Instance time, once we've received the import object. We want to
            avoid codegen at Instance time, so having both around is great.
          - Restore the WebAssembly global state (VM top Instance, and pinned registers)
            after call / call_indirect, and in the JS->wasm entry stub.
          - Pinned registers are now a global thing, not per-Memory, because the wasm ->
            wasm stubs are generated at Module time where we don't really have enough
            information to do the right thing (doing so would generate too much code).

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSType.h: add WebAssemblyFunctionType as a JSType
        * wasm/WasmB3IRGenerator.cpp: significantly rework how calls which
        could be external work, and how we save / restore global state:
        VM's top Instance, and pinned registers
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::getMemoryBaseAndSize):
        (JSC::Wasm::restoreWebAssemblyGlobalState):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::materializeImportJSCell):
        (JSC::Wasm::wasmToJS):
        (JSC::Wasm::wasmToWasm): the main goal of this patch was adding this function
        (JSC::Wasm::exitStubGenerator):
        * wasm/WasmBinding.h:
        * wasm/WasmFormat.h: Get rid of much of the function index space:
        we already have all of its information elsewhere, and as-is it
        provides no extra efficiency.
        (JSC::Wasm::ModuleInformation::functionIndexSpaceSize):
        (JSC::Wasm::ModuleInformation::isImportedFunctionFromFunctionIndexSpace):
        (JSC::Wasm::ModuleInformation::signatureIndexFromFunctionIndexSpace):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::FunctionParser):
        * wasm/WasmMemory.cpp: Add some logging.
        (JSC::Wasm::Memory::dump): this was nice when debugging
        (JSC::Wasm::Memory::makeString):
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::~Memory):
        (JSC::Wasm::Memory::grow):
        * wasm/WasmMemory.h: don't use extra indirection, it wasn't
        needed. Reorder some of the fields which are looked up at runtime
        so they're more cache-friendly.
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::mode):
        (JSC::Wasm::Memory::offsetOfSize):
        * wasm/WasmMemoryInformation.cpp: Pinned registers are now a
        global thing for all of JSC, not a per-Memory thing
        anymore. wasm->wasm calls are more complex otherwise: they have to
        figure out how to bridge between the caller and callee's
        special-snowflake pinning.
        (JSC::Wasm::PinnedRegisterInfo::get):
        (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
        (JSC::Wasm::MemoryInformation::MemoryInformation):
        * wasm/WasmMemoryInformation.h:
        * wasm/WasmModuleParser.cpp:
        * wasm/WasmModuleParser.h:
        * wasm/WasmPageCount.cpp: Copied from Source/JavaScriptCore/wasm/WasmBinding.h.
        (JSC::Wasm::PageCount::dump): nice for debugging
        * wasm/WasmPageCount.h:
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::takeWasmExitStubs):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::Signature::toString):
        (JSC::Wasm::Signature::dump):
        * wasm/WasmSignature.h:
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::offsetOfTable):
        (JSC::JSWebAssemblyInstance::offsetOfImportFunctions):
        (JSC::JSWebAssemblyInstance::offsetOfImportFunction):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::create):
        (JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):
        (JSC::JSWebAssemblyMemory::buffer):
        (JSC::JSWebAssemblyMemory::grow):
        * wasm/js/JSWebAssemblyMemory.h:
        (JSC::JSWebAssemblyMemory::memory):
        (JSC::JSWebAssemblyMemory::offsetOfMemory):
        (JSC::JSWebAssemblyMemory::offsetOfSize):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::signatureIndexFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::functionImportCount):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::create):
        (JSC::WebAssemblyFunction::createStructure):
        (JSC::WebAssemblyFunction::WebAssemblyFunction):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::wasmEntrypoint):
        (JSC::WebAssemblyFunction::offsetOfInstance):
        (JSC::WebAssemblyFunction::offsetOfWasmEntryPointCode):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance): always start with a dummy
        memory, so wasm->wasm calls don't need to null-check
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyModuleRecord.h:

2017-01-02  Saam Barati  <sbarati@apple.com>

        WebAssembly: Some loads don't take into account the offset
        https://bugs.webkit.org/show_bug.cgi?id=166616
        <rdar://problem/29841541>

        Reviewed by Keith Miller.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitLoadOp):

2017-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2017
        https://bugs.webkit.org/show_bug.cgi?id=166278

        Reviewed by Dan Bernstein.

        * Info.plist:

2016-12-28  Saam Barati  <sbarati@apple.com>

        WebAssembly: Don't allow duplicate export names
        https://bugs.webkit.org/show_bug.cgi?id=166490
        <rdar://problem/29815000>

        Reviewed by Keith Miller.

        * wasm/WasmModuleParser.cpp:

2016-12-28  Saam Barati  <sbarati@apple.com>

        Unreviewed. Fix jsc.cpp build error.

        * jsc.cpp:
        (functionTestWasmModuleFunctions):

2016-12-28  Saam Barati  <sbarati@apple.com>

        WebAssembly: Implement grow_memory and current_memory
        https://bugs.webkit.org/show_bug.cgi?id=166448
        <rdar://problem/29803676>

        Reviewed by Keith Miller.

        This patch implements grow_memory, current_memory, and WebAssembly.prototype.grow.
        See relevant spec texts here:
        
        https://github.com/WebAssembly/design/blob/master/Semantics.md#linear-memory-accesses
        https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymemoryprototypegrow
        
        I also fix a couple miscellaneous bugs:
        
        1. Data section now understands full init_exprs. 
        2. parseVarUint1 no longer has a bug where we allow values larger than 1 if
        their bottom 8 bits are zero.
        
        Since the JS API can now grow memory, we need to make calling an import
        and call_indirect refresh the base memory register and the size registers.

        * jsc.cpp:
        (functionTestWasmModuleFunctions):
        * runtime/Options.h:
        * runtime/VM.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::reloadPinnedRegisters):
        (JSC::Wasm::B3IRGenerator::emitReloadPinnedRegisters):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::Segment::create):
        * wasm/WasmFormat.h:
        (JSC::Wasm::I32InitExpr::I32InitExpr):
        (JSC::Wasm::I32InitExpr::globalImport):
        (JSC::Wasm::I32InitExpr::constValue):
        (JSC::Wasm::I32InitExpr::isConst):
        (JSC::Wasm::I32InitExpr::isGlobalImport):
        (JSC::Wasm::I32InitExpr::globalImportIndex):
        (JSC::Wasm::Segment::byte):
        (JSC::Wasm::ModuleInformation::importFunctionCount):
        (JSC::Wasm::ModuleInformation::hasMemory):
        * wasm/WasmFunctionParser.h:
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::grow):
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::size):
        (JSC::Wasm::Memory::sizeInPages):
        (JSC::Wasm::Memory::offsetOfMemory):
        (JSC::Wasm::Memory::isValid): Deleted.
        (JSC::Wasm::Memory::grow): Deleted.
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::makeI32InitExpr):
        * wasm/WasmModuleParser.h:
        * wasm/WasmPageCount.h:
        (JSC::Wasm::PageCount::bytes):
        (JSC::Wasm::PageCount::pageCount):
        (JSC::Wasm::PageCount::fromBytes):
        (JSC::Wasm::PageCount::operator+):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::parseVarUInt1):
        * wasm/WasmValidate.cpp:
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::offsetOfMemory):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::~JSWebAssemblyMemory):
        (JSC::JSWebAssemblyMemory::grow):
        * wasm/js/JSWebAssemblyMemory.h:
        (JSC::JSWebAssemblyMemory::offsetOfMemory):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::functionImportCount):
        (JSC::JSWebAssemblyModule::jsEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::wasmEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::importCount): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::getMemory):
        (JSC::webAssemblyMemoryProtoFuncBuffer):
        (JSC::webAssemblyMemoryProtoFuncGrow):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::dataSegmentFail):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/wasm.json:

2016-12-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use variadic templates in JSC Parser to clean up
        https://bugs.webkit.org/show_bug.cgi?id=166482

        Reviewed by Saam Barati.

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

2016-12-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        Propagate the source origin as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=166348

        Reviewed by Darin Adler.

        This patch introduces CallFrame::callerSourceOrigin, SourceOrigin class
        and SourceProvider::m_sourceOrigin. CallFrame::callerSourceOrigin returns
        an appropriate SourceOrigin if possible. If we cannot find the appropriate
        one, we just return null SourceOrigin.

        This paves the way for implementing the module dynamic-import[1].
        When the import operator is evaluated, it will resolve the module
        specifier with this propagated source origin of the caller function.

        To support import operator inside the dynamic code generation
        functions (like `eval`, `new Function`, indirect call to `eval`),
        we need to propagate the caller's source origin to the generated
        source code.

        We do not use sourceURL for that purpose. This is because we
        would like to keep sourceURL for `eval` / `new Function` null.
        This sourceURL will be used for the stack dump for errors with line/column
        numbers. Dumping the caller's sourceURL with line/column numbers are
        meaningless. So we would like to keep it null while we would like
        to propagate SourceOrigin for dynamic imports.

        [1]: https://github.com/tc39/proposal-dynamic-import

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        * API/JSScriptRef.cpp:
        (OpaqueJSScript::create):
        (OpaqueJSScript::vm):
        (OpaqueJSScript::OpaqueJSScript):
        (parseScript):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/builtins/builtins_templates.py:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::BuiltinExecutables):
        (JSC::BuiltinExecutables::createDefaultConstructor):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::createInjectedScript):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::parse):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::callerSourceOrigin):
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * jsc.cpp:
        (jscSource):
        (GlobalObject::finishCreation):
        (extractDirectoryName):
        (currentWorkingDirectory):
        (GlobalObject::moduleLoaderResolve):
        (functionRunString):
        (functionLoadString):
        (functionCallerSourceOrigin):
        (functionCreateBuiltin):
        (functionCheckModuleSyntax):
        (runInteractive):
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::SourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::sourceOrigin):
        (JSC::StringSourceProvider::create):
        (JSC::StringSourceProvider::StringSourceProvider):
        (JSC::WebAssemblySourceProvider::create):
        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionConstructor.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::sourceOrigin):
        * runtime/SourceOrigin.h: Added.
        (JSC::SourceOrigin::SourceOrigin):
        (JSC::SourceOrigin::string):
        (JSC::SourceOrigin::isNull):
        * tools/FunctionOverrides.cpp:
        (JSC::initializeOverrideInfo):

2016-12-24  Caio Lima  <ticaiolima@gmail.com>

        [test262] Fixing mapped arguments object property test case
        https://bugs.webkit.org/show_bug.cgi?id=159398

        Reviewed by Saam Barati.

        This patch changes GenericArguments' override mechanism to
        implement corret behavior on ECMAScript test262 suite test cases of
        mapped arguments object with non-configurable and non-writable
        property. Also it is ensuring that arguments[i]
        cannot be deleted when argument "i" is {configurable: false}.
        
        The previous implementation is against to the specification for 2 reasons:

        1. Every argument in arguments object are {writable: true} by default
           (http://www.ecma-international.org/ecma-262/7.0/index.html#sec-createunmappedargumentsobject).
           It means that we have to stop mapping a defined property index
           if the new property descriptor contains writable (i.e writable is
           present) and its value is false (also check
           https://tc39.github.io/ecma262/#sec-arguments-exotic-objects-defineownproperty-p-desc).
           Previous implementation considers {writable: false} if writable is
           not present.

        2. When a property is overriden, "delete" operation is always returning true. However
           delete operations should follow the specification.

        We created an auxilary boolean array named m_modifiedArgumentsDescriptor
        to store which arguments[i] descriptor was changed from its default
        property descriptor. This modification was necessary because m_overrides
        was responsible to keep this information at the same time
        of keeping information about arguments mapping. The problem of this apporach was
        that we needed to call overridesArgument(i) as soon as the ith argument's property
        descriptor was changed and it stops the argument's mapping as sideffect, producing
        wrong behavior.
        To keep tracking arguments mapping status, we renamed DirectArguments::m_overrides to
        DirectArguments::m_mappedArguments and now we it is responsible to manage if an
        argument[i] is mapped or not.
        With these 2 structures, now it is possible to an argument[i] have its property 
        descriptor modified and don't stop the mapping as soon as it happens. One example
        of that wrong behavior can be found on arguments-bizarre-behaviour-disable-enumerability
        test case, that now is fixed by this new mechanism.

        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments):
        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
        (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments):
        * jit/JITOperations.cpp:
        (JSC::canAccessArgumentIndexQuickly):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitDirectArgumentsGetByVal):
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::estimatedSize):
        (JSC::DirectArguments::visitChildren):
        (JSC::DirectArguments::overrideThings):
        (JSC::DirectArguments::overrideThingsIfNecessary):
        (JSC::DirectArguments::unmapArgument):
        (JSC::DirectArguments::copyToArguments):
        (JSC::DirectArguments::overridesSize):
        (JSC::DirectArguments::overrideArgument): Deleted.
        * runtime/DirectArguments.h:
        (JSC::DirectArguments::length):
        (JSC::DirectArguments::isMappedArgument):
        (JSC::DirectArguments::isMappedArgumentInDFG):
        (JSC::DirectArguments::getIndexQuickly):
        (JSC::DirectArguments::setIndexQuickly):
        (JSC::DirectArguments::overrodeThings):
        (JSC::DirectArguments::initModifiedArgumentsDescriptorIfNecessary):
        (JSC::DirectArguments::setModifiedArgumentDescriptor):
        (JSC::DirectArguments::isModifiedArgumentDescriptor):
        (JSC::DirectArguments::offsetOfMappedArguments):
        (JSC::DirectArguments::offsetOfModifiedArgumentsDescriptor):
        (JSC::DirectArguments::canAccessIndexQuickly): Deleted.
        (JSC::DirectArguments::canAccessArgumentIndexQuicklyInDFG): Deleted.
        (JSC::DirectArguments::offsetOfOverrides): Deleted.
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::visitChildren):
        (JSC::GenericArguments<Type>::getOwnPropertySlot):
        (JSC::GenericArguments<Type>::getOwnPropertySlotByIndex):
        (JSC::GenericArguments<Type>::getOwnPropertyNames):
        (JSC::GenericArguments<Type>::put):
        (JSC::GenericArguments<Type>::putByIndex):
        (JSC::GenericArguments<Type>::deleteProperty):
        (JSC::GenericArguments<Type>::deletePropertyByIndex):
        (JSC::GenericArguments<Type>::defineOwnProperty):
        (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor):
        (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptorIfNecessary):
        (JSC::GenericArguments<Type>::setModifiedArgumentDescriptor):
        (JSC::GenericArguments<Type>::isModifiedArgumentDescriptor):
        (JSC::GenericArguments<Type>::copyToArguments):
        * runtime/ScopedArguments.cpp:
        (JSC::ScopedArguments::visitChildren):
        (JSC::ScopedArguments::unmapArgument):
        (JSC::ScopedArguments::overrideArgument): Deleted.
        * runtime/ScopedArguments.h:
        (JSC::ScopedArguments::isMappedArgument):
        (JSC::ScopedArguments::isMappedArgumentInDFG):
        (JSC::ScopedArguments::getIndexQuickly):
        (JSC::ScopedArguments::setIndexQuickly):
        (JSC::ScopedArguments::initModifiedArgumentsDescriptorIfNecessary):
        (JSC::ScopedArguments::setModifiedArgumentDescriptor):
        (JSC::ScopedArguments::isModifiedArgumentDescriptor):
        (JSC::ScopedArguments::canAccessIndexQuickly): Deleted.
        (JSC::ScopedArguments::canAccessArgumentIndexQuicklyInDFG): Deleted.

2016-12-23  Mark Lam  <mark.lam@apple.com>

        Using Option::breakOnThrow() shouldn't crash while printing a null CodeBlock.
        https://bugs.webkit.org/show_bug.cgi?id=166466

        Reviewed by Keith Miller.

        * runtime/VM.cpp:
        (JSC::VM::throwException):

2016-12-23  Mark Lam  <mark.lam@apple.com>

        Enhance LLInt tracing to dump the codeBlock signature instead of just a pointer where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=166465

        Reviewed by Keith Miller.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::traceFunctionPrologue):

2016-12-23  Keith Miller  <keith_miller@apple.com>

        WebAssembly: trap on bad division.
        https://bugs.webkit.org/show_bug.cgi?id=164786

        Reviewed by Mark Lam.

        This patch adds traps for division / modulo by zero and for
        division by int_min / -1.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitChecksForModOrDiv):
        * wasm/WasmExceptionType.h:
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/wasm.json:

2016-12-23  Mark Lam  <mark.lam@apple.com>

        Fix broken LLINT_SLOW_PATH_TRACING build.
        https://bugs.webkit.org/show_bug.cgi?id=166463

        Reviewed by Keith Miller.

        * llint/LLIntExceptions.cpp:
        (JSC::LLInt::returnToThrow):
        (JSC::LLInt::callToThrow):
        * runtime/CommonSlowPathsExceptions.cpp:
        (JSC::CommonSlowPaths::interpreterThrowInCaller):

2016-12-22  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Make spec-tests/f32.wast.js and spec-tests/f64.wast.js pass
        https://bugs.webkit.org/show_bug.cgi?id=166447

        Reviewed by Saam Barati.

        We needed to treat -0.0 < 0.0 for floating point min/max. For min,
        the algorithm works because if a == b then a and b are not NaNs so
        either they are the same or they are some zero. When we or a and b
        either we get the same number back or we get -0.0. Similarly for
        max we use an and and the sign bit gets dropped if one is 0.0 and
        the other is -0.0, otherwise, we get the same number back.

        * wasm/wasm.json:

2016-12-22  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make calling Wasm functions that returns or takes an i64 as a parameter an early exception
        https://bugs.webkit.org/show_bug.cgi?id=166437
        <rdar://problem/29793949>

        Reviewed by Keith Miller.

        This patch makes it so that we throw an exception before we do
        anything else if we call a wasm function that either takes an
        i64 as an argument or returns an i64.

        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::WebAssemblyFunction):
        (JSC::WebAssemblyFunction::call): Deleted.
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::signatureIndex):
        (JSC::WebAssemblyFunction::jsEntrypoint):

2016-12-22  Keith Miller  <keith_miller@apple.com>

        Add BitOr for floating points to B3
        https://bugs.webkit.org/show_bug.cgi?id=166446

        Reviewed by Saam Barati.

        This patch does some slight refactoring to the ARM assembler,
        which groups all the vector floating point instructions together.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::vand):
        (JSC::ARM64Assembler::vorr):
        (JSC::ARM64Assembler::vectorDataProcessingLogical):
        (JSC::ARM64Assembler::vectorDataProcessing2Source): Deleted.
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::orDouble):
        (JSC::MacroAssemblerARM64::orFloat):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::orDouble):
        (JSC::MacroAssemblerX86Common::orFloat):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::orps_rr):
        * b3/B3ConstDoubleValue.cpp:
        (JSC::B3::ConstDoubleValue::bitOrConstant):
        (JSC::B3::ConstDoubleValue::bitXorConstant):
        * b3/B3ConstDoubleValue.h:
        * b3/B3ConstFloatValue.cpp:
        (JSC::B3::ConstFloatValue::bitOrConstant):
        (JSC::B3::ConstFloatValue::bitXorConstant):
        * b3/B3ConstFloatValue.h:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Validate.cpp:
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::Inst::shouldTryAliasingDef):
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp:
        (JSC::B3::bitOrDouble):
        (JSC::B3::testBitOrArgDouble):
        (JSC::B3::testBitOrArgsDouble):
        (JSC::B3::testBitOrArgImmDouble):
        (JSC::B3::testBitOrImmsDouble):
        (JSC::B3::bitOrFloat):
        (JSC::B3::testBitOrArgFloat):
        (JSC::B3::testBitOrArgsFloat):
        (JSC::B3::testBitOrArgImmFloat):
        (JSC::B3::testBitOrImmsFloat):
        (JSC::B3::testBitOrArgsFloatWithUselessDoubleConversion):
        (JSC::B3::run):

2016-12-22  Mark Lam  <mark.lam@apple.com>

        BytecodeGenerator::m_finallyDepth should be unsigned.
        https://bugs.webkit.org/show_bug.cgi?id=166438

        Reviewed by Saam Barati.

        Also removed FinallyContext::m_finallyDepth because it is not used.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::labelScopeDepth):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::FinallyContext::FinallyContext):
        (JSC::FinallyContext::finallyLabel):
        (JSC::FinallyContext::depth): Deleted.

2016-12-22  Mark Lam  <mark.lam@apple.com>

        De-duplicate finally blocks.
        https://bugs.webkit.org/show_bug.cgi?id=160168

        Reviewed by Saam Barati.

        JS execution can arrive at a finally block when there are abrupt completions from
        its try or catch block.  The abrupt completion types include Break,
        Continue, Return, and Throw.  The non-abrupt completion type is called Normal
        (i.e. the case of a try block falling through to the finally block).

        Previously, we enable each of these paths for abrupt completion (except for Throw)
        to run the finally block code by duplicating the finally block code at each of
        the sites that trigger those completions.  This patch fixes the implementation so
        that each of these abrupt completions will set a completionTypeRegister (plus a
        completionValueRegister for CompletionType::Return) and then jump to the
        relevant finally blocks, and continue to thread through subsequent outer finally
        blocks until execution reaches the outermost finally block that the completion
        type dictates.  We no longer duplicate the finally block code.

        The implementation details:
        1. We allocate a pair of registers (completionTypeRegister and completionValueRegister)
           just before entering the outermost try-catch-finally scope.

           On allocating the registers, we initialize the completionTypeRegister to
           CompletionType::Normal, and set the completionValueRegister to the empty
           JSValue.

        2. The completionTypeRegister will hold a CompletionType value.  This is how we
           encode the CompletionType value to be set:

           a. For Normal, Return, and Throw completion types: 
              - The completionTypeRegister is set to CompletionType::Normal,
                CompletionType::Return, and CompletionType::Throw respectively.

           b. For Break and Continue completion types:
              - The completionTypeRegister is set to a unique jumpID where the jumpID is
                computed as:

                jumpID = CompletionType::NumberOfTypes + bytecodeOffset

                The bytecodeOffset used here is the bytecodeOffset of the break or continue
                statement that triggered this completion.

        3. Each finally block will have 2 entries:
           a. the catch entry.
           b. the normal entry.

           The catch entry is recorded in the codeBlock's exception handler table,
           and can only be jumped to by the VM's exception handling mechanism.

           The normal entry is recorded in a FinallyContext (at bytecode generation time
           only) and is jumped to when we want enter the finally block due any of the
           other CompletionTypes.

        4. How each completion type works?

           CompletionType::Normal
           ======================
           We normally encounter this when falling through from a try or catch block to
           the finally block.  
          
           For the try block case, since completionTypeRegister is set to Normal by default,
           there's nothing more that needs to be done.

           For the catch block case, since we entered the catch block with an exception,
           completionTypeRegister may be set to Throw.  We'll need to set it to Normal
           before jumping to the finally block's normal entry.

           CompletionType::Break
           =====================
           When we emit bytecode for the BreakNode, we check if we have any FinallyContexts
           that we need to service before jumping to the breakTarget.  If we don't, then
           emit op_jump to the breakTarget as usual.  Otherwise:

           a. we'll register a jumpID and the breakTarget with the FinallyContext for the
              outermost finally block that we're supposed to run through.
           b. we'll also increment the numberOfBreaksOrContinues count in each FinallyContext
              from the innermost to the one for that outermost finally block.
           c. emit bytecode to set the completionTypeRegister to the jumpID.
           d. emit bytecode to jump to the normal entry of the innermost finally block.

           Each finally block will take care of cascading to the next outer finally block
           as needed (see (5) below).

           CompletionType::Continue
           ========================
           Since continues and breaks work the same way (i.e. with a jump), we handle this
           exactly the same way as CompletionType::Break, except that we use the
           continueTarget instead of the breakTarget.

           CompletionType::Return
           ======================
           When we emit bytecode for the ReturnNode, we check if we have any FinallyContexts
           at all on the m_controlFlowScopeStack.  If we don't, then emit op_ret as usual.
           Otherwise:

           a. emit bytecode to set the completionTypeRegister to CompletionType::Return.
           b. emit bytecode to move the return value into the completionValueRegister.
           c. emit bytecode to jump to the normal entry of the innermost finally block.

           Each finally block will take care of cascading to the next outer finally block
           as needed (see (5) below).

           CompletionType::Throw
           ======================
           At the catch entry a finally block, we:
           1. emit an op_catch that stores the caught Exception object in the
              completionValueRegister.
           2. emit bytecode to set the completionTypeRegister to CompletionType::Throw.
           3. Fall through or jump to the finally block's normal entry.

        5. What happens in each finally block?
           ==================================
           For details on the finally block's catch entry, see "CompletionType::Throw" in
           (4) above.

           The finally block's normal entry will:
           1. restore the scope of the finally block.
           2. save the completionTypeRegister in a savedCompletionTypeRegister.
           3. proceed to execute the body of the finally block.

           At the end of the finally block, we will emit bytecode check the
           savedCompletionTypeRegister for each completion type see emitFinallyCompletion())
           in the following order:
          
           a. Check for CompletionType::Normal
              ================================
              If savedCompletionTypeRegister is CompletionType::Normal, jump to the
              designated normalCompletion label.  We only need this check this finally
              block also needs to check for Break, Continue, or Return.  If not, the
              completion type check for CompletionType::Throw below will make this check
              redundant.

           b. Check for CompletionType::Break and Continue
              ============================================
              If the FinallyContext for this block has registered FinallyJumps, we'll
              check the jumpIDs against the savedCompletionTypeRegister.  If the jumpID
              matches, jump to the corresponding jumpTarget.

              If no jumpIDs match but the FinallyContext's numberOfBreaksOrContinues is
              greater than the number of registered FinallyJumps, then this means that
              we have a Break or Continue that needs to be handled by an outer finally
              block.  In that case, jump to the next outer finally block's normal entry.
             
           c. Check for CompletionType::Return
              ================================
              If this finally block is not the outermost and the savedCompletionTypeRegister
              is set to CompletionType::Return, then jump to the next outer finally
              block's normal entry.

              Otherwise, if this finally block is the outermost and the savedCompletionTypeRegister
              is set to CompletionType::Return, then execute op_ret and return the value
              in the completionValueRegister.

           d. CompletionType::Throw
              =====================
              If savedCompletionTypeRegister is CompletionType::Throw, then just re-throw the
              Exception object in the completionValueRegister.

           Detail 1: that we check the savedCompletionTypeRegister (and not the
           completionTypeRegister).  This is because the finally block may itself contain
           a try-finally, and this inner try-finally may have trashed the completionTypeRegister.
           Here's an example:

               try {
                   return "r1"; // Sets completionTypeRegister to CompletionType::Return;
               } finally {
                   // completionTypeRegister is CompletionType::Return here.

                   try {
                       ... // do stuff.
                   } finally {
                       ... // do more stuff.
                   }

                   // completionTypeRegister may be anything here depending on what
                   // was executed in the inner try-finally block above.

                   // Hence, finally completion here must be based on a saved copy of the
                   // completionTypeRegister when we entered this finally block.
               }

           Detail 2: the finally completion for CompletionType::Throw must always explicitly
           check if the savedCompletionTypeRegister is CompletionType::Throw before throwing.
           We cannot imply that it is so from the Throw case being last.  Here's why:

               // completionTypeRegister is CompletionType::Normal here.
               try {
                   return "r1"; // Sets completionTypeRegister to CompletionType::Return;
               } finally {
                   // completionTypeRegister is CompletionType::Return here.

                   try {
                       ... // do stuff.  No abrupt completions.
                   } finally {
                       // completionTypeRegister is CompletionType::Return here (from the outer try-finally).
                       // savedCompletionTypeRegister is set to completionTypeRegister (i.e. CompletionType::Return) here.

                       ... // do more stuff.  No abrupt completions.

                       // Unless there's an abrupt completion since entering the outer
                       // finally block, the savedCompletionTypeRegister will remain set
                       // to CompletionType::Return.  If we don't explicitly check if the
                       // savedCompletionTypeRegister is CompletionType::Throw before
                       // throwing here, we'll end up erroneously throwing "r1".
                   }

                   ...
               }

        6. restoreScopeRegister()
       
           Since the needed scope objects are always stored in a local, we can restore
           the scope register by simply moving from that local instead of going through
           op_get_parent_scope.

        7. m_controlFlowScopeStack needs to be a SegmentedVector instead of a Vector.
           This makes it easier to keep a pointer to the FinallyContext on that stack,
           and not have to worry about the vector being realloc'ed due to resizing. 

        Performance appears to be neutral both on ES6SampleBench (run via cli) and the
        JSC benchmarks.

        Relevant spec references:
        https://tc39.github.io/ecma262/#sec-completion-record-specification-type
        https://tc39.github.io/ecma262/#sec-try-statement-runtime-semantics-evaluation

        * bytecode/HandlerInfo.h:
        (JSC::HandlerInfoBase::typeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::popFinallyControlFlowScope):
        (JSC::BytecodeGenerator::allocateAndEmitScope):
        (JSC::BytecodeGenerator::pushTry):
        (JSC::BytecodeGenerator::popTry):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::restoreScopeRegister):
        (JSC::BytecodeGenerator::labelScopeDepthToLexicalScopeIndex):
        (JSC::BytecodeGenerator::labelScopeDepth):
        (JSC::BytecodeGenerator::pushLocalControlFlowScope):
        (JSC::BytecodeGenerator::popLocalControlFlowScope):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitIsNumber):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::allocateCompletionRecordRegisters):
        (JSC::BytecodeGenerator::releaseCompletionRecordRegisters):
        (JSC::BytecodeGenerator::emitJumpIf):
        (JSC::BytecodeGenerator::pushIteratorCloseControlFlowScope): Deleted.
        (JSC::BytecodeGenerator::popIteratorCloseControlFlowScope): Deleted.
        (JSC::BytecodeGenerator::emitComplexPopScopes): Deleted.
        (JSC::BytecodeGenerator::emitPopScopes): Deleted.
        (JSC::BytecodeGenerator::popTryAndEmitCatch): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::bytecodeOffsetToJumpID):
        (JSC::FinallyJump::FinallyJump):
        (JSC::FinallyContext::FinallyContext):
        (JSC::FinallyContext::outerContext):
        (JSC::FinallyContext::finallyLabel):
        (JSC::FinallyContext::depth):
        (JSC::FinallyContext::numberOfBreaksOrContinues):
        (JSC::FinallyContext::incNumberOfBreaksOrContinues):
        (JSC::FinallyContext::handlesReturns):
        (JSC::FinallyContext::setHandlesReturns):
        (JSC::FinallyContext::registerJump):
        (JSC::FinallyContext::numberOfJumps):
        (JSC::FinallyContext::jumps):
        (JSC::ControlFlowScope::ControlFlowScope):
        (JSC::ControlFlowScope::isLabelScope):
        (JSC::ControlFlowScope::isFinallyScope):
        (JSC::BytecodeGenerator::currentLexicalScopeIndex):
        (JSC::BytecodeGenerator::CompletionRecordScope::CompletionRecordScope):
        (JSC::BytecodeGenerator::CompletionRecordScope::~CompletionRecordScope):
        (JSC::BytecodeGenerator::completionTypeRegister):
        (JSC::BytecodeGenerator::completionValueRegister):
        (JSC::BytecodeGenerator::emitSetCompletionType):
        (JSC::BytecodeGenerator::emitSetCompletionValue):
        (JSC::BytecodeGenerator::isInFinallyBlock): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::TryNode::emitBytecode):

2016-12-22  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make the spec-tests/address.wast.js test pass
        https://bugs.webkit.org/show_bug.cgi?id=166429
        <rdar://problem/29793220>

        Reviewed by Keith Miller.

        Right now, provably out of bound loads/stores (given a load/store's constant
        offset) are not a validation error. However, we were failing to catch uint32_t
        overflows in release builds (we did have a debug assertion). To fix this,
        I now detect when uint32_t addition will overflow, and instead of emitting
        a normal load/store, I emit code that throws an out of bounds memory exception.

        * wasm/WasmB3IRGenerator.cpp:

2016-12-22  Keith Miller  <keith_miller@apple.com>

        WebAssembly: The validator should not allow unused stack entries at the end of a block
        https://bugs.webkit.org/show_bug.cgi?id=166411

        Reviewed by Saam Barati.

        This patch also cleans up some of the verbose mode logging.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::dumpExpressionStack):
        (JSC::Wasm::B3IRGenerator::dump):
        * wasm/WasmFunctionParser.h:
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::dumpExpressionStack):
        (JSC::Wasm::Validate::dump):

2016-12-22  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make the spec-tests/start.wast.js test pass
        https://bugs.webkit.org/show_bug.cgi?id=166416
        <rdar://problem/29784532>

        Reviewed by Yusuke Suzuki.

        To make the test run, I had to fix two bugs:
        
        1. We weren't properly finding the start function. There was code
        that would try to find the start function from the list of *exported*
        functions. This is wrong; the start function is an index into the
        function index space, which is the space for *imports* and *local*
        functions. So the code was just wrong in this respect, and I've
        fixed it do the right thing. We weren't sure if this was originally
        allowed or not in the spec, but it has been decided that it is allowed
        and the spec-tests test for it: https://github.com/WebAssembly/design/issues/896
        
        2. We were emitting a breakpoint for Unreachable. Instead of crashing,
        this opcode needs to throw an exception when executing.

        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmExceptionType.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyModuleRecord.h:

2016-12-21  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Fix decode floating point constants in unreachable code
        https://bugs.webkit.org/show_bug.cgi?id=166400

        Reviewed by Saam Barati.

        We decoded these as variable length but they should be fixed length.

        * wasm/WasmFunctionParser.h:

2016-12-21  Keith Miller  <keith_miller@apple.com>

        WebAssembly: Allow br, br_if, and br_table to act as a return
        https://bugs.webkit.org/show_bug.cgi?id=166393

        Reviewed by Saam Barati.

        This patch allows br, br_if, and br_table to treat branching to
        the size of the control stack to act as a return. This change was
        made by adding a new block type to the wasm function parser,
        TopLevel. Adding this new block eliminates a lot of the special
        case code we had in the parser previously. The only special case
        we need is when the end opcode is parsed from the top level.  The
        B3 IR generator needs to automatically emit a return at that
        point.

        Also, this patch adds the function number to validation errors
        in the function parser. The current error message is not helpful
        otherwise.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::ControlData::dump):
        (JSC::Wasm::B3IRGenerator::addTopLevel):
        * wasm/WasmFunctionParser.h:
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::ControlData::dump):
        (JSC::Wasm::Validate::Validate):
        (JSC::Wasm::Validate::addTopLevel):
        (JSC::Wasm::validateFunction):

2016-12-21  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: cleanup & pass VM around to {Compile/Runtime}Error
        https://bugs.webkit.org/show_bug.cgi?id=166295
        <rdar://problem/29762017>

        Reviewed by Mark Lam.

        Rename the create* functions, and pass VM around, as suggested for
        LinkError in #165805.

        At the same time, use the default source appender when
        constructing these error types, which gives a nice map back to the
        original source as part of the error message. This is clearer when
        using the current frame, so add that as well.

        * jit/ThunkGenerators.cpp:
        (JSC::throwExceptionFromWasmThunkGenerator):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::JSWebAssemblyCompileError::create):
        (JSC::createJSWebAssemblyCompileError):
        (JSC::createWebAssemblyCompileError): Deleted.
        * wasm/js/JSWebAssemblyCompileError.h:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::JSWebAssemblyRuntimeError::create):
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (JSC::JSWebAssemblyRuntimeError::create):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2016-12-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Fix modules document in features.json
        https://bugs.webkit.org/show_bug.cgi?id=166313

        Reviewed by Saam Barati.

        * features.json:

2016-12-20  Taras Tsugrii  <ttsugrii@fb.com>

        Fix undefined behavior caused by macro expansion producing 'defined'
        https://bugs.webkit.org/show_bug.cgi?id=166047

        Reviewed by Darin Adler.

        * API/JSBase.h:

2016-12-20  Keith Miller  <keith_miller@apple.com>

        Add support for global
        https://bugs.webkit.org/show_bug.cgi?id=165171

        Reviewed by Filip Pizlo.

        This patch adds spport for the global property on the global object.
        The global property spec is in stage three and is quite simple.
        For reference: http://tc39.github.io/proposal-global/

        * runtime/JSGlobalObject.cpp:

2016-12-20  Saam Barati  <sbarati@apple.com>

        WebAssembly: We should compile wasm functions in parallel
        https://bugs.webkit.org/show_bug.cgi?id=165993

        Reviewed by Keith Miller.

        This patch adds a very simple parallel compiler for Wasm code.
        This patch speeds up compiling the Unity headless benchmark by
        slightly more than 4x on my MBP. To make this safe, I perform
        all linking on the main thread. I also had to change some code
        inside Wasmb3IRGenerator to be thread safe.

        * b3/air/AirCustom.h:
        (JSC::B3::Air::WasmBoundsCheckCustom::generate):
        * b3/air/AirGenerationContext.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::emitExceptionCheck):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::setupFrameInPrologue):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:

2016-12-20  Brent Fulgham  <bfulgham@apple.com>

        Address some style problems found by static analysis
        https://bugs.webkit.org/show_bug.cgi?id=165975

        Reviewed by Alex Christensen.

        Correct the const-correctness of functions that are implemented using stricter
        const declarations.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorHeapAgent.cpp:
        * inspector/agents/InspectorHeapAgent.h:
        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/scripts/codegen/cpp_generator.py:
        (cpp_type_for_unchecked_formal_in_parameter): Update to match const declarations of
        implementation files.
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        Rebaselined results for "const Ptr* const" syntax.

2016-12-20  JF Bastien  <jfbastien@apple.com>

        WebAssembly: construct 32-bit encodedJSValue properly
        https://bugs.webkit.org/show_bug.cgi?id=166199

        Reviewed by Mark Lam.

        Constructing an encodedJSValue using `{ }` yields the wrong value
        on 32-bit platforms. WebAssembly doesn't currently target 32-bit
        platforms, but we may as well get it right.

        * wasm/JSWebAssembly.cpp:
        (JSC::webAssemblyCompileFunc):
        (JSC::webAssemblyValidateFunc):
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::toNonWrappingUint32):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::webAssemblyTableProtoFuncLength):
        (JSC::webAssemblyTableProtoFuncGrow):
        (JSC::webAssemblyTableProtoFuncGet):
        (JSC::webAssemblyTableProtoFuncSet):

2016-12-20  Dean Jackson  <dino@apple.com>

        Remove INDIE_UI
        https://bugs.webkit.org/show_bug.cgi?id=165881
        <rdar://problem/29672532>

        Reviewed by Simon Fraser.

        The Indie UI work has been discontinued.

        * Configurations/FeatureDefines.xcconfig:

2016-12-20  JF Bastien  <jfbastien@apple.com>

        WebAssembly API: implement WebAssembly.LinkError
        https://bugs.webkit.org/show_bug.cgi?id=165805
        <rdar://problem/29747874>

        Reviewed by Mark Lam.

        As described here: https://github.com/WebAssembly/design/pull/901
        Some TypeError and RangeError are now converted to WebAssembly.LinkError.

        * CMakeLists.txt: add files
        * DerivedSources.make: add autoget .lut.h files
        * JavaScriptCore.xcodeproj/project.pbxproj: add files
        * builtins/BuiltinNames.h: new name LinkError
        * runtime/JSGlobalObject.h: auto-register LinkError using existing macro magic
        * wasm/JSWebAssembly.h: make the new includes available
        * wasm/js/JSWebAssemblyLinkError.cpp: Copied from Source/JavaScriptCore/wasm/JSWebAssemblyCompileError.cpp.
        (JSC::JSWebAssemblyLinkError::create):
        (JSC::JSWebAssemblyLinkError::JSWebAssemblyLinkError):
        (JSC::createWebAssemblyLinkError):
        * wasm/js/JSWebAssemblyLinkError.h: Copied from Source/JavaScriptCore/wasm/JSWebAssemblyCompileError.h.
        (JSC::JSWebAssemblyLinkError::create):
        * wasm/js/WebAssemblyInstanceConstructor.cpp: update as per spec change
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyCompileErrorConstructor.cpp.
        (JSC::constructJSWebAssemblyLinkError):
        (JSC::callJSWebAssemblyLinkError):
        (JSC::WebAssemblyLinkErrorConstructor::create):
        (JSC::WebAssemblyLinkErrorConstructor::createStructure):
        (JSC::WebAssemblyLinkErrorConstructor::finishCreation):
        (JSC::WebAssemblyLinkErrorConstructor::WebAssemblyLinkErrorConstructor):
        (JSC::WebAssemblyLinkErrorConstructor::getConstructData):
        (JSC::WebAssemblyLinkErrorConstructor::getCallData):
        * wasm/js/WebAssemblyLinkErrorConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyCompileErrorConstructor.h.
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyCompileErrorPrototypr.cpp.
        (JSC::WebAssemblyLinkErrorPrototype::create):
        (JSC::WebAssemblyLinkErrorPrototype::createStructure):
        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
        (JSC::WebAssemblyLinkErrorPrototype::WebAssemblyLinkErrorPrototype):
        * wasm/js/WebAssemblyLinkErrorPrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyCompileErrorPrototypr.h.
        * wasm/js/WebAssemblyModuleRecord.cpp: update as per spec change
        (JSC::dataSegmentFail):
        (JSC::WebAssemblyModuleRecord::evaluate):

2016-12-20  JF Bastien  <jfbastien@apple.com>

        WebAssembly: unique function signatures
        https://bugs.webkit.org/show_bug.cgi?id=165957
        <rdar://problem/29735737>

        Reviewed by Saam Barati.

        Signatures in a Module's Type section can be duplicated, we
        therefore need to unique them so that call_indirect only needs to
        do a single integer compare to check that a callee's Signature is
        the same as the Signature declared at the call site. Without
        uniquing we'd either trap when duplicate Signatures are used, or
        we'd need to do multiple comparisons. This patch makes that narrow
        usecase function correctly.

        There's further complication when calling from wasm to
        wasm, in which case the Signatures must also match. Such
        cross-instance calls will be improved in bug #165282, but this
        patch sets the groundwork for it:

        - Signatures are now owned by SignatureInformation which lives on
          VM, and is shared by all Modules.
        - When parsing a Module, a Signature is created for every Type
          entry, and then uniqued by SignatureInformation's adopt
          method. Duplicate Signatures are dropped and the previous
          SignatureIndex is returned, new Signatures are adopted and a new
          SignatureIndex is created.
        - The SignatureIndex values are monotonic. 0 is used to represent
          invalid indices, which trap. This can only occur through Table.
        - SignatureInformation is used while generating code to map a
          SignatureIndex back to the Signature* when return / argument
          information is needed. This is a simple lookup into a Vector. It
          isn't used at runtime.
        - These Signatures live forever on VM because the bookkeeping
          likely isn't worth it. We may want to empty things out if all
          Modules die, this is tracked in bug #166037.
        - We can further improve things by bit-packing SignatureIndex with
          Code*, which is tracked by bug #165511.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/VM.h: wasm signatures are uniqued here, but aren't accessed frequently (only during parsing) so indirection is fine
        * wasm/WasmB3IRGenerator.cpp: use SignatureIndex instead of Signature* when appropriate, and when still using Signature* do so with its new API
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::importStubGenerator): use SignatureIndex
        * wasm/WasmBinding.h:
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::loadArguments):
        * wasm/WasmFormat.cpp: drive-by move of alloc/free functions to the implementation file, allows the .h file to drop an FastMalloc.h
        (JSC::Wasm::Segment::create):
        (JSC::Wasm::Segment::destroy):
        (JSC::Wasm::Segment::createPtr):
        * wasm/WasmFormat.h: move Signature to its own file
        (JSC::Wasm::CallableFunction::CallableFunction):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::FunctionParser):
        * wasm/WasmModuleParser.cpp:
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::ModuleParser):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::Parser):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmSignature.cpp: Added.
        (JSC::Wasm::Signature::dump):
        (JSC::Wasm::Signature::hash):
        (JSC::Wasm::Signature::create):
        (JSC::Wasm::Signature::createInvalid):
        (JSC::Wasm::Signature::destroy):
        (JSC::Wasm::SignatureInformation::~SignatureInformation):
        (JSC::Wasm::SignatureInformation::adopt):
        (JSC::Wasm::SignatureInformation::get):
        * wasm/WasmSignature.h: Added.
        (JSC::Wasm::Signature::Signature):
        (JSC::Wasm::Signature::storage):
        (JSC::Wasm::Signature::allocatedSize):
        (JSC::Wasm::Signature::returnType):
        (JSC::Wasm::Signature::returnCount):
        (JSC::Wasm::Signature::argumentCount):
        (JSC::Wasm::Signature::argument):
        (JSC::Wasm::Signature::operator==):
        (JSC::Wasm::SignatureHash::empty):
        (JSC::Wasm::SignatureHash::deleted):
        (JSC::Wasm::SignatureHash::SignatureHash):
        (JSC::Wasm::SignatureHash::operator==):
        (JSC::Wasm::SignatureHash::equal):
        (JSC::Wasm::SignatureHash::hash):
        (JSC::Wasm::SignatureHash::isHashTableDeletedValue):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::signatureForFunctionIndexSpace):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
        (JSC::JSWebAssemblyTable::clearFunction):
        (JSC::JSWebAssemblyTable::setFunction):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::call):
        (JSC::WebAssemblyFunction::create):
        (JSC::WebAssemblyFunction::WebAssemblyFunction):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::signatureIndex):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):

2016-12-20  Konstantin Tokarev  <annulen@yandex.ru>

        Modernize for loops in JSC
        https://bugs.webkit.org/show_bug.cgi?id=166060

        Reviewed by Yusuke Suzuki.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        (JSC::CodeBlock::jettison):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::tallyFrequentExitSites):
        (JSC::CodeBlock::nameForRegister):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue):
        * debugger/Debugger.cpp:
        (JSC::Debugger::applyBreakpoints):
        * dfg/DFGCPSRethreadingPhase.cpp:
        (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
        * dfg/DFGClobberSet.cpp:
        (JSC::DFG::ClobberSet::setOf):
        * dfg/DFGDesiredIdentifiers.cpp:
        (JSC::DFG::DesiredIdentifiers::reallyAdd):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::visitChildren):
        * dfg/DFGIntegerCheckCombiningPhase.cpp:
        (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGLICMPhase.cpp:
        (JSC::DFG::LICMPhase::run):
        * dfg/DFGMaximalFlushInsertionPhase.cpp:
        (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
        * dfg/DFGPutStackSinkingPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
        (JSC::DFG::SpeculativeJIT::linkBranches):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
        * dfg/DFGValidate.cpp:
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):
        * heap/HeapVerifier.cpp:
        (JSC::trimDeadObjectsFromList):
        (JSC::HeapVerifier::trimDeadObjects):
        * heap/LiveObjectList.cpp:
        (JSC::LiveObjectList::findObject):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::isPagedOut):
        * inspector/ScriptCallStack.cpp:
        (Inspector::ScriptCallStack::firstNonNativeCallFrame):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironment::markAllVariablesAsCaptured):
        (JSC::VariableEnvironment::hasCapturedVariables):
        * runtime/FunctionHasExecutedCache.cpp:
        (JSC::FunctionHasExecutedCache::hasExecutedAtOffset):
        (JSC::FunctionHasExecutedCache::getFunctionRanges):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::visitChildren):
        * runtime/TypeProfiler.cpp:
        (JSC::TypeProfiler::findLocation):
        * runtime/TypeSet.cpp:
        (JSC::TypeSet::addTypeInformation):
        (JSC::TypeSet::dumpTypes):
        * runtime/VM.cpp:
        (JSC::VM::gatherConservativeRoots):
        * runtime/WeakMapData.cpp:
        (JSC::WeakMapData::DeadKeyCleaner::visitWeakReferences):
        (JSC::WeakMapData::DeadKeyCleaner::finalizeUnconditionally):
        * tools/ProfileTreeNode.h:
        (JSC::ProfileTreeNode::dumpInternal):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):

2016-12-20  Konstantin Tokarev  <annulen@yandex.ru>

        __cpuid() requires <intrin.h> to be included
        https://bugs.webkit.org/show_bug.cgi?id=166051

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssemblerX86Common.h:

2016-12-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Enable ES6 Modules
        https://bugs.webkit.org/show_bug.cgi?id=165849

        Reviewed by Geoffrey Garen.

        * features.json:

2016-12-19  Mark Lam  <mark.lam@apple.com>

        Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 2: Rollout r209952.
        https://bugs.webkit.org/show_bug.cgi?id=166049

        Not reviewed.

        * bytecode/HandlerInfo.h:
        (JSC::HandlerInfoBase::typeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::pushIteratorCloseControlFlowScope):
        (JSC::BytecodeGenerator::popFinallyControlFlowScope):
        (JSC::BytecodeGenerator::popIteratorCloseControlFlowScope):
        (JSC::BytecodeGenerator::emitComplexPopScopes):
        (JSC::BytecodeGenerator::emitPopScopes):
        (JSC::BytecodeGenerator::pushTry):
        (JSC::BytecodeGenerator::popTryAndEmitCatch):
        (JSC::BytecodeGenerator::labelScopeDepth):
        (JSC::BytecodeGenerator::pushLocalControlFlowScope):
        (JSC::BytecodeGenerator::popLocalControlFlowScope):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::popTry): Deleted.
        (JSC::BytecodeGenerator::emitCatch): Deleted.
        (JSC::BytecodeGenerator::restoreScopeRegister): Deleted.
        (JSC::BytecodeGenerator::labelScopeDepthToLexicalScopeIndex): Deleted.
        (JSC::BytecodeGenerator::emitIsNumber): Deleted.
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded): Deleted.
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded): Deleted.
        (JSC::BytecodeGenerator::emitFinallyCompletion): Deleted.
        (JSC::BytecodeGenerator::allocateFinallyRegisters): Deleted.
        (JSC::BytecodeGenerator::releaseFinallyRegisters): Deleted.
        (JSC::BytecodeGenerator::emitCompareFinallyActionAndJumpIf): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::isInFinallyBlock):
        (JSC::FinallyJump::FinallyJump): Deleted.
        (JSC::FinallyContext::FinallyContext): Deleted.
        (JSC::FinallyContext::outerContext): Deleted.
        (JSC::FinallyContext::finallyLabel): Deleted.
        (JSC::FinallyContext::depth): Deleted.
        (JSC::FinallyContext::numberOfBreaksOrContinues): Deleted.
        (JSC::FinallyContext::incNumberOfBreaksOrContinues): Deleted.
        (JSC::FinallyContext::handlesReturns): Deleted.
        (JSC::FinallyContext::setHandlesReturns): Deleted.
        (JSC::FinallyContext::registerJump): Deleted.
        (JSC::FinallyContext::numberOfJumps): Deleted.
        (JSC::FinallyContext::jumps): Deleted.
        (JSC::ControlFlowScope::ControlFlowScope): Deleted.
        (JSC::ControlFlowScope::isLabelScope): Deleted.
        (JSC::ControlFlowScope::isFinallyScope): Deleted.
        (JSC::BytecodeGenerator::currentLexicalScopeIndex): Deleted.
        (JSC::BytecodeGenerator::FinallyRegistersScope::FinallyRegistersScope): Deleted.
        (JSC::BytecodeGenerator::FinallyRegistersScope::~FinallyRegistersScope): Deleted.
        (JSC::BytecodeGenerator::finallyActionRegister): Deleted.
        (JSC::BytecodeGenerator::finallyReturnValueRegister): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToNormalCompletion): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToJumpID): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyReturnValueRegister): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNormalCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotJump): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotThrowCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfCompletionTypeIsThrow): Deleted.
        (JSC::BytecodeGenerator::bytecodeOffsetToJumpID): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::TryNode::emitBytecode):

2016-12-19  Mark Lam  <mark.lam@apple.com>

        Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 1: Rollout r209974.
        https://bugs.webkit.org/show_bug.cgi?id=166049

        Not reviewed.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::allocateFinallyRegisters):
        (JSC::BytecodeGenerator::releaseFinallyRegisters):
        (JSC::BytecodeGenerator::emitCompareFinallyActionAndJumpIf):
        (JSC::BytecodeGenerator::allocateCompletionRecordRegisters): Deleted.
        (JSC::BytecodeGenerator::releaseCompletionRecordRegisters): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfCompletionType): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::FinallyJump::FinallyJump):
        (JSC::FinallyContext::registerJump):
        (JSC::BytecodeGenerator::FinallyRegistersScope::FinallyRegistersScope):
        (JSC::BytecodeGenerator::FinallyRegistersScope::~FinallyRegistersScope):
        (JSC::BytecodeGenerator::finallyActionRegister):
        (JSC::BytecodeGenerator::finallyReturnValueRegister):
        (JSC::BytecodeGenerator::emitSetFinallyActionToNormalCompletion):
        (JSC::BytecodeGenerator::emitSetFinallyActionToReturnCompletion):
        (JSC::BytecodeGenerator::emitSetFinallyActionToJumpID):
        (JSC::BytecodeGenerator::emitSetFinallyReturnValueRegister):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNormalCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotJump):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsReturnCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotReturnCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotThrowCompletion):
        (JSC::BytecodeGenerator::emitJumpIfCompletionTypeIsThrow):
        (JSC::BytecodeGenerator::bytecodeOffsetToJumpID):
        (JSC::bytecodeOffsetToJumpID): Deleted.
        (JSC::BytecodeGenerator::CompletionRecordScope::CompletionRecordScope): Deleted.
        (JSC::BytecodeGenerator::CompletionRecordScope::~CompletionRecordScope): Deleted.
        (JSC::BytecodeGenerator::completionTypeRegister): Deleted.
        (JSC::BytecodeGenerator::completionValueRegister): Deleted.
        (JSC::BytecodeGenerator::emitSetCompletionType): Deleted.
        (JSC::BytecodeGenerator::emitSetCompletionValue): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):

2016-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Assertion seen in InspectorDebuggerAgent::refAsyncCallData with Inspector open
        https://bugs.webkit.org/show_bug.cgi?id=166034
        <rdar://problem/29554366>

        Reviewed by Brian Burg.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::refAsyncCallData):
        Remove assertion. This assert can happen if the currently executing callback
        was just explicitly cancelled by script. Existing code already handles if
        no async data was found for the given identifier.

2016-12-18  Saam Barati  <sbarati@apple.com>

        WebAssembly: Implement the WebAssembly.compile and WebAssembly.validate
        https://bugs.webkit.org/show_bug.cgi?id=165936

        Reviewed by Mark Lam.

        The APIs are documented here:
        - https://github.com/WebAssembly/design/blob/master/JS.md#webassemblycompile
        - https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyvalidate

        * wasm/JSWebAssembly.cpp:
        (JSC::webAssemblyCompileFunc):
        (JSC::webAssemblyValidateFunc):
        (JSC::JSWebAssembly::finishCreation):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::parseAndValidateModule):
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::getWasmBufferFromValue):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        (JSC::callJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyModuleConstructor.h:

2016-12-18  Mark Lam  <mark.lam@apple.com>

        Rename finallyActionRegister to completionTypeRegister and only store int JSValues in it.
        https://bugs.webkit.org/show_bug.cgi?id=165979

        Reviewed by Saam Barati.

        This patch makes it so that we only store int JSValues in the finallyActionRegister
        thereby making type prediction on this register more successful for JITs.  In so
        doing, we are able to get some additional benefits:

        1. Renamed the following:
           FinallyRegistersScope => CompletionRecordScope
           finallyActionRegister => completionTypeRegister
           finallyReturnValueRegister => completionValueRegister

           These new names are more in line with the ES spec, which describes these
           values as the completion record and its type and value properties.
           https://tc39.github.io/ecma262/#sec-completion-record-specification-type

        2. We now think of the Break and Continue jumpIDs as encodings of CompletionType
           (in our implementation of completion type).  As a result, we only need one of
           each of the emitter methods for getting, setting, and compare-and-jump on the
           completion type.  The code using these methods also reads much clearer now.  

        3. Finally blocks' op_catch should now always pop the caught Exception object into
           the completionValueRegister instead of the completionTypeRegister (formerly
           finallyActionRegister). 

        Also removed the restoreScopeRegister() call in the IteratorClose catch block
        because that is an implementation specific synthesized catch block, and we
        can guarantee that it never needs to resolve any symbols from the scope.  Hence,
        there is no need to restore the scope register.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::allocateCompletionRecordRegisters):
        (JSC::BytecodeGenerator::releaseCompletionRecordRegisters):
        (JSC::BytecodeGenerator::emitJumpIfCompletionType):
        (JSC::BytecodeGenerator::allocateFinallyRegisters): Deleted.
        (JSC::BytecodeGenerator::releaseFinallyRegisters): Deleted.
        (JSC::BytecodeGenerator::emitCompareFinallyActionAndJumpIf): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::bytecodeOffsetToJumpID):
        (JSC::FinallyJump::FinallyJump):
        (JSC::FinallyContext::registerJump):
        (JSC::BytecodeGenerator::CompletionRecordScope::CompletionRecordScope):
        (JSC::BytecodeGenerator::CompletionRecordScope::~CompletionRecordScope):
        (JSC::BytecodeGenerator::completionTypeRegister):
        (JSC::BytecodeGenerator::completionValueRegister):
        (JSC::BytecodeGenerator::emitSetCompletionType):
        (JSC::BytecodeGenerator::emitSetCompletionValue):
        (JSC::BytecodeGenerator::FinallyRegistersScope::FinallyRegistersScope): Deleted.
        (JSC::BytecodeGenerator::FinallyRegistersScope::~FinallyRegistersScope): Deleted.
        (JSC::BytecodeGenerator::finallyActionRegister): Deleted.
        (JSC::BytecodeGenerator::finallyReturnValueRegister): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToNormalCompletion): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyActionToJumpID): Deleted.
        (JSC::BytecodeGenerator::emitSetFinallyReturnValueRegister): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNormalCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotJump): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotReturnCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotThrowCompletion): Deleted.
        (JSC::BytecodeGenerator::emitJumpIfCompletionTypeIsThrow): Deleted.
        (JSC::BytecodeGenerator::bytecodeOffsetToJumpID): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):

2016-12-17  Saam Barati  <sbarati@apple.com>

        WebAssembly: WasmB3IRGenerator uses WarmAny as a ValueRep but expects the incoming value to be a register
        https://bugs.webkit.org/show_bug.cgi?id=165989

        Reviewed by Mark Lam.

        The input should be constrained to a register to match what
        the patchpoint code expects.

        * wasm/WasmB3IRGenerator.cpp:

2016-12-17  Saam Barati  <sbarati@apple.com>

        WebAssembly: Change a RELEASE_ASSERT_NOT_REACHED to a jit.breakpoint() for now to allow us to run some wasm benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=165990

        Reviewed by Mark Lam.

        * wasm/WasmBinding.cpp:
        (JSC::Wasm::importStubGenerator):

2016-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Avoid some possible exceptions inspecting a JSContext
        https://bugs.webkit.org/show_bug.cgi?id=165986
        <rdar://problem/29551379>

        Reviewed by Matt Baker.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype.processProperties):
        Prefer String.prototype.endsWith now that it is available.

        (InjectedScript.prototype._describe):
        Prefer Function.prototype.toString for converting functions to String.
        Previously we were doing String(f) which would to Symbol.toPrimitive
        conversion which seems unnecessary here.

2016-12-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix GCC 6 build failure after r209952

        Return false, not nullptr, in function returning bool.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):

2016-12-16  Saam Barati  <sbarati@apple.com>

        WebAssembly: We still have some incorrect parsing productions inside unreachable code
        https://bugs.webkit.org/show_bug.cgi?id=165981

        Reviewed by Keith Miller.

        This hardens our parsing for CallIndirect and Loop/Block/If to be exactly like their reachable variant.
        
        It also fixes a more nefarious bug in which we were decoding an extra varuint32
        for Br/BrIf inside unreachable code.

        * wasm/WasmFunctionParser.h:

2016-12-16  Filip Pizlo  <fpizlo@apple.com>

        CellState should have members with accurate names
        https://bugs.webkit.org/show_bug.cgi?id=165969

        Reviewed by Mark Lam.
        
        This once again renames the members in CellState. I wanted to convey the following
        pieces of information in the names:
        
        - What does the state mean for Generational GC?
        - What does the state mean for Concurrent GC?
        - Does the state guarantee what it means, or is there some contingency?
        
        The names I came up with are:
        
        PossiblyOldOrBlack: An object in this state may be old, or may be black, depending on
            other things. If the mark bit is set then the object is either black or being
            blackened as we speak. It's going to survive the GC, so it will be old, but may be
            new now. In between GCs, objects in this state are definitely old. If the mark bit
            is not set, then the object is actually old and white.
        
        DefinitelyNewAndWhite: The object was just allocated so it is white (not marked) and
            new.
        
        DefinitelyGrey: The object is definitely grey - it will be rescanned in the future. It
            may be new or old depending on other things.

        * heap/CellState.h:
        * heap/Heap.cpp:
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::writeBarrierSlowPath):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        (JSC::SlotVisitor::setMarkedAndAppendToMarkStack):
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::visitChildren):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::JSCell):
        * runtime/StructureIDBlob.h:
        (JSC::StructureIDBlob::StructureIDBlob):

2016-12-16  Saam Barati  <sbarati@apple.com>

        B3::DoubleToFloatReduction will accidentally convince itself it converted a Phi from Double to Float and then convert uses of that Phi into a use of FloatToDouble(@Phi)
        https://bugs.webkit.org/show_bug.cgi?id=165946

        Reviewed by Keith Miller.

        This was happening because the phase will convert some Phi nodes
        from Double to Float. However, one place that did this conversion
        forgot to first check if the Phi was already a Float. If it's already
        a Float, a later part of the phase will be buggy if the phase claims that it has
        converted it from Double->Float. The reason is that at the end of the
        phase, we'll look for all uses of former Double Phi nodes and make them
        be a use of ConvertFloatToDouble on the Phi, instead of a use of the Phi itself.
        This is clearly wrong if the Phi were Float to begin with (and
        therefore, the uses were Float uses to begin with).

        * b3/B3ReduceDoubleToFloat.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testReduceFloatToDoubleValidates):
        (JSC::B3::run):

2016-12-16  Mark Lam  <mark.lam@apple.com>

        De-duplicate finally blocks.
        https://bugs.webkit.org/show_bug.cgi?id=160168

        Reviewed by Keith Miller.

        JS execution can arrive at a finally block when there are abrupt completions from
        its try or catch block.  The abrupt completion types include Break,
        Continue, Return, and Throw.  The non-abrupt completion type is called Normal
        (i.e. the case of a try block falling through to the finally block).

        Previously, we enable each of these paths for abrupt completion (except for Throw)
        to run the finally block code by duplicating the finally block code at each of
        the sites that trigger those completions.  This patch fixes the implementation so
        that each of these abrupt completions will set a finallyActionRegister (plus a
        finallyReturnValueRegister for CompletionType::Return) and then jump to the
        relevant finally blocks, and continue to thread through subsequent outer finally
        blocks until execution reaches the outermost finally block that the completion
        type dictates.  We no longer duplicate the finally block code.

        The implementation details:
        1. We allocate a pair of finallyActionRegister and finallyReturnValueRegister
           just before entering the outermost try-catch-finally scope.

           On allocating the registers, we set them to the empty JSValue.  This serves
           to set the completion type to CompletionType::Normal (see (2) below).

        2. The finallyActionRegister serves 2 purpose:
           a. indicates the CompletionType that triggered entry into the finally block.

              This is how we encode the completion type in the finallyActionRegister:
              1. CompletionType::Normal
                 - finallyActionRegister is set to the empty JSValue.
              2. CompletionType::Break
                 - finallyActionRegister is set to the int jumpID for the site of the break statement.
              3. CompletionType::Continue
                 - finallyActionRegister is set to the int jumpID for the site of the continue statement.
              4. CompletionType::Return
                 - finallyActionRegister is set to CompletionType::Return as an int JSValue.
                 - finallyReturnValueRegister is set to the value to be returned. 
              5. CompletionType::Throw
                 - finallyActionRegister is set to the exception object that was caught by the finally block.

              Hence, if the finallyActionRegister can either be:
              1. empty i.e. we're handling CompletionType::Normal.
              2. an int JSValue i.e. we're handling CompletionType::Break, Continue, or Return.
              3. an object i.e. we're handling CompletionType::Throw.

           b. stores the exception caught in the finally block if we're handing
              CompletionType::Throw.

        3. Each finally block will have 2 entries:
           a. the entry via throw.
           b. the normal entry.

           The entry via throw is recorded in the codeBlock's exception table, and can
           only be jumped to by the VM's exception handling mechanism.

           The normal entry is recorded in a FinallyContext (at bytecode generation time
           only) and is jumped to when we want enter the finally block due any of the
           other CompletionTypes.

        4. CompletionType::Normal
           ======================
           We encounter this when falling through from a try or catch block to the finally block.  
           
           For the try block case, since finallyActionRegister is set to Normal by default,
           there's nothing more that needs to be done.

           For the catch block case, since we entered the catch block with an exception,
           finallyActionRegister may be set to Throw.  We'll need to set it to Normal
           before jumping to the finally block's normal entry.

           CompletionType::Break
           =====================
           When we emit bytecode for the BreakNode, we check if we have any FinallyContexts
           that we need to service before jumping to the breakTarget.  If we do, then:
           a. we'll register a jumpID along with the breakTarget with the outermost FinallyContext.
           b. we'll also increment the numberOfBreaksOrContinues count in each FinallyContext
              from the innermost to the outermost.
           c. instead of emitting bytecode to jump to the breakTarget, we:
              1. emit bytecode to set finallyActionRegister to the jumpID.
              b. emit bytecode to jump to the normal entry of the innermost finally block.

           Each finally block will take care of cascading to the next outer finally block
           as needed (see (5) below).

           CompletionType::Continue
           ========================
           Since continues and breaks work the same way (i.e. with a jump), we handle this
           exactly the same way as CompletionType::Break, except that we use the
           continueTarget instead of the breakTarget.

           CompletionType::Return
           ======================
           When we emit bytecode for the ReturnNode, we check if we have any FinallyContexts
           at all on the m_controlFlowScopeStack.

           If so, then instead of emitting op_ret, we:
              1. emit bytecode to set finallyActionRegister to the CompletionType::Return.
              1. emit bytecode to move the return value into finallyReturnValueRegister.
              2. emit bytecode to jump to the normal entry of the innermost finally block.

           Each finally block will take care of cascading to the next outer finally block
           as needed (see (5) below).

           CompletionType::Throw
           ======================
           The op_catch of a finally block will always store the caught exception object
           in the finallyActionRegister.  This means we're handling CompletionType::Throw
           (see (2) above).

        5. What happens in each finally block?
           ==================================
           Only the finally block's entry via throw will have an op_catch that catches the
           pending exception (and stores it in the finallyActionRegister).  This throw
           entry then falls through to the normal entry.

           The finally block's normal entry will restore the scope of the finally block
           and proceed to execute its code.

           At the end of the finally block (see emitFinallyCompletion()), the finally
           block will check the finallyActionRegister for each completion type in the
           following order:
           
           a. CompletionType::Normal: jump to the code after the finally block as
              designated by a normalCompletion label.

           b. CompletionType::Break and Continue:
              If the FinallyContext for this block has registered FinallyJumps, we'll
              check for the jumpIDs against the finallyActionRegister.  If the jumpID
              matches, jump to the corresponding jumpTarget.

              If no jumpIDs match but the FinallyContext's numberOfBreaksOrContinues is
              greater than the number of registered FinallyJumps, then this means that
              we have a Break or Continue that needs to be handled by an outer finally
              block.  In that case, jump to the outer finally block's normal entry.
              
           c. CompletionType::Return:
              If this finally block is not the outermost and finallyActionRegister contains
              CompletionType::Return, then jump to the outer finally block's normal entry.

              Otherwise, if this finally block is the outermost and finallyActionRegister
              contains CompletionType::Return, then execute op_ret and return the value
              in finallyReturnValueRegister.

           d. CompletionType::Throw:
              If we're not handling any of the above cases, then just throw the
              finallyActionRegister which contains the exception to re-throw.

        6. restoreScopeRegister()
        
           Since the needed scope objects are always stored in a local, we can restore
           the scope register by simply moving from that local instead of going through
           op_get_parent_scope.

        7. m_controlFlowScopeStack needs to be a SegmentedVector instead of a Vector.
           This makes it easier to keep a pointer to the FinallyContext on that stack,
           and not have to worry about the vector being realloc'ed due to resizing. 

        Performance appears to be neutral both on ES6SampleBench (run via cli) and the
        JSC benchmarks.

        Relevant spec references:
        https://tc39.github.io/ecma262/#sec-completion-record-specification-type
        https://tc39.github.io/ecma262/#sec-try-statement-runtime-semantics-evaluation

        * bytecode/HandlerInfo.h:
        (JSC::HandlerInfoBase::typeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::popFinallyControlFlowScope):
        (JSC::BytecodeGenerator::allocateAndEmitScope):
        (JSC::BytecodeGenerator::pushTry):
        (JSC::BytecodeGenerator::popTry):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::restoreScopeRegister):
        (JSC::BytecodeGenerator::labelScopeDepthToLexicalScopeIndex):
        (JSC::BytecodeGenerator::labelScopeDepth):
        (JSC::BytecodeGenerator::pushLocalControlFlowScope):
        (JSC::BytecodeGenerator::popLocalControlFlowScope):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitIsNumber):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::allocateFinallyRegisters):
        (JSC::BytecodeGenerator::releaseFinallyRegisters):
        (JSC::BytecodeGenerator::emitCompareFinallyActionAndJumpIf):
        (JSC::BytecodeGenerator::pushIteratorCloseControlFlowScope): Deleted.
        (JSC::BytecodeGenerator::popIteratorCloseControlFlowScope): Deleted.
        (JSC::BytecodeGenerator::emitComplexPopScopes): Deleted.
        (JSC::BytecodeGenerator::emitPopScopes): Deleted.
        (JSC::BytecodeGenerator::popTryAndEmitCatch): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::FinallyJump::FinallyJump):
        (JSC::FinallyContext::FinallyContext):
        (JSC::FinallyContext::outerContext):
        (JSC::FinallyContext::finallyLabel):
        (JSC::FinallyContext::depth):
        (JSC::FinallyContext::numberOfBreaksOrContinues):
        (JSC::FinallyContext::incNumberOfBreaksOrContinues):
        (JSC::FinallyContext::handlesReturns):
        (JSC::FinallyContext::setHandlesReturns):
        (JSC::FinallyContext::registerJump):
        (JSC::FinallyContext::numberOfJumps):
        (JSC::FinallyContext::jumps):
        (JSC::ControlFlowScope::ControlFlowScope):
        (JSC::ControlFlowScope::isLabelScope):
        (JSC::ControlFlowScope::isFinallyScope):
        (JSC::BytecodeGenerator::currentLexicalScopeIndex):
        (JSC::BytecodeGenerator::FinallyRegistersScope::FinallyRegistersScope):
        (JSC::BytecodeGenerator::FinallyRegistersScope::~FinallyRegistersScope):
        (JSC::BytecodeGenerator::finallyActionRegister):
        (JSC::BytecodeGenerator::finallyReturnValueRegister):
        (JSC::BytecodeGenerator::emitSetFinallyActionToNormalCompletion):
        (JSC::BytecodeGenerator::emitSetFinallyActionToReturnCompletion):
        (JSC::BytecodeGenerator::emitSetFinallyActionToJumpID):
        (JSC::BytecodeGenerator::emitSetFinallyReturnValueRegister):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNormalCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotJump):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsReturnCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotReturnCompletion):
        (JSC::BytecodeGenerator::emitJumpIfFinallyActionIsNotThrowCompletion):
        (JSC::BytecodeGenerator::emitJumpIfCompletionTypeIsThrow):
        (JSC::BytecodeGenerator::bytecodeOffsetToJumpID):
        (JSC::BytecodeGenerator::isInFinallyBlock): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::TryNode::emitBytecode):

2016-12-16  Keith Miller  <keith_miller@apple.com>

        Add missing cases to parseUnreachableExpression and cleanup FunctionParser
        https://bugs.webkit.org/show_bug.cgi?id=165966

        Reviewed by Saam Barati.

        This patch adds a number of missing cases to the Wasm FunctionParser's unreachable
        code decoder. It also, removes unneeded OpType namespaces where they were not
        needed and has the unary / binary macros cover all the cases rather than
        just the simple cases.

        * wasm/WasmFunctionParser.h:

2016-12-16  Mark Lam  <mark.lam@apple.com>

        Add predecessor info to dumps from JSC_dumpBytecodeLivenessResults=true.
        https://bugs.webkit.org/show_bug.cgi?id=165958

        Reviewed by Saam Barati.

        Also:
        1. refactored the code to use a common lambda function to dump FastBitVectors.
        2. list successors by their block index instead of pointers.

        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::dumpResults):

2016-12-16  Saam Barati  <sbarati@apple.com>

        WebAssembly: WasmB3IRGenerator should throw exceptions instead of crash
        https://bugs.webkit.org/show_bug.cgi?id=165834

        Reviewed by Keith Miller.

        This patch generalizes how we throw exceptions in the Wasm::B3IRGenerator.
        There are still places where we need to throw exceptions and we don't, but
        this patch removes most of those places inside the IR generator. There are
        still a few places we need to throw exceptions inside the IR generator, like
        div/mod by 0. Those will be done in a separate patch. Also, there are
        still some stubs we need to throw exceptions from; those will also be
        done in a separate patch.

        All exceptions thrown from Wasm share a common stub. The ABI for the stub
        is to move the Wasm::ExceptionType into argGPR1 and jump to the stub.
        The stub will then throw an exception with an error message tailored
        to the particular Wasm::ExceptionType failure.

        This patch also refactors B3::Compilation. Before, B3::Compilation(VM, Procedure)
        constructor would compile a B3 function. This patch makes B3::Compilation a simple 
        tuple that keeps the necessary bits of B3 function alive in order to be runnable.
        There is a new function that actually does the compilation for you. It is:
        Compilation B3::compile(VM&, Procedure&)
        The reason for this change is that I'm now using B3::Compilation(CodeRef, OpaqueByproducts)
        constructor in Wasm code. It is weird to have a class both have a
        constructor that instantiates the tuple, and another that performs the
        compilation and then instantiates the tuple. It's more straight
        forward if Compilation's job wasn't to actually do the compilation
        but just to hold the necessary bits to keep a compiled B3 alive.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3Compilation.cpp:
        (JSC::B3::Compilation::Compilation):
        * b3/B3Compilation.h:
        * b3/B3Compile.cpp: Added.
        (JSC::B3::compile):
        * b3/B3Compile.h: Added.
        * b3/testb3.cpp:
        (JSC::B3::compile):
        * jit/ThunkGenerators.cpp:
        (JSC::throwExceptionFromWasmThunkGenerator):
        * jit/ThunkGenerators.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::emitExceptionCheck):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmExceptionType.h: Added.
        (JSC::Wasm::errorMessageForExceptionType):

2016-12-16  Keith Miller  <keith_miller@apple.com>

        i64.eqz should use an Int64 zero
        https://bugs.webkit.org/show_bug.cgi?id=165942

        Reviewed by Mark Lam.

        This patch fixes i64.eqz, which was using an Int32 zero
        for the comparison previously. This patch also, adds
        printing opcodes names in verbose mode.

        * wasm/WasmFunctionParser.h:
        * wasm/generateWasmOpsHeader.py:
        * wasm/wasm.json:

2016-12-15  Darin Adler  <darin@apple.com>

        Use asString instead of toWTFString, toString, or getString when we already checked isString
        https://bugs.webkit.org/show_bug.cgi?id=165895

        Reviewed by Yusuke Suzuki.

        Once we have called isString, we should always use asString and value rather than using
        functions that have to deal with non-JSString objects. This leads to slightly fewer branches,
        slightly less reference count churn, since the string is stored right inside the JSString,
        and obviates the need for exception handling.

        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue): Use asString/value instead of getString.
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationMapHash): Call jsMapHash with its new arguments.
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension): Use asString/value instead
        of toWTFString.
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension): Ditto.
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::getPreview): Use asString/tryGetValue, instead of the
        peculiar getString(nullptr) that was here before.
        * jsc.cpp:
        (functionGetGetterSetter): Use asString/toIdentifier instead of the much less efficient
        toWTFString/Identifier::fromString.
        (functionIsRope): Use asString instead of jsCast<JSString*>; same thing, but we should
        prefer the asString function, since it exists.
        (functionFindTypeForExpression): Use asString/value instead of getString.
        (functionHasBasicBlockExecuted): Ditto.
        (functionBasicBlockExecutionCount): Ditto.
        (functionCreateBuiltin): Use asString/value instead of toWTFString and removed
        unneeded RETURN_IF_EXCEPTION.
        (valueWithTypeOfWasmValue): Use asString instead of jsCast<String*>.
        (box): Ditto.
        * runtime/DateConstructor.cpp:
        (JSC::constructDate): Use asString/values instead of getString.
        * runtime/ExceptionHelpers.cpp:
        (JSC::errorDescriptionForValue): Tweaked formatting.

        * runtime/HashMapImpl.h:
        (JSC::jsMapHash): Changed this function to use asString/value.

        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::dumpInContextAssumingStructure): Use asString instead of
        jsCast<JSString*>.
        (JSC::JSValue::dumpForBacktrace): Ditto.
        * runtime/JSCJSValueInlines.h:
        (JSC::toPreferredPrimitiveType): Ditto.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval): Use asString/value instead of toWTFString.

        * runtime/JSString.cpp:
        (JSC::JSString::destroy): Streamlined by removing local variable.
        (JSC::JSString::estimatedSize): Use asString instead of jsCast<JSString*>.
        (JSC::JSString::visitChildren): Ditto.
        (JSC::JSString::toThis): Ditto.
        * runtime/JSString.h:
        (JSC::JSValue::toString): Ditto.
        (JSC::JSValue::toStringOrNull): Ditto.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncValueOf): Ditto.
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString): Ditto.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncRepeatCharacter): Ditto.
        (JSC::stringProtoFuncSubstr): Ditto.
        (JSC::builtinStringSubstrInternal): Simplified assertion by removing local variable.

2016-12-15  Keith Miller  <keith_miller@apple.com>

        Fix validation of non-void if blocks with no else
        https://bugs.webkit.org/show_bug.cgi?id=165938

        Reviewed by Saam Barati.

        We should not have been allowing non-void if-blocks that don't
        have an else. Since this causes a value to be placed on the
        stack that only appears under some control flow and not another.

        * wasm/WasmValidate.cpp:

2016-12-15  Filip Pizlo  <fpizlo@apple.com>

        Get rid of HeapRootVisitor and make SlotVisitor less painful to use
        https://bugs.webkit.org/show_bug.cgi?id=165911

        Reviewed by Geoffrey Garen.
        
        Previously we had two ways of adding a raw pointer to the GC's mark stack:
        
        - SlotVisitor::appendUnbarrieredXYZ() methods
        - HeapRootVisitor::visit() methods
        
        HeapRootVisitor existed only to prevent you from calling its non-WriteBarrier<> methods
        unless you had permission. But SlotVisitor would let you do it anyway, because that was
        a lot more practical.
        
        I think that we should just have one way to do it. This removes HeapRootVisitor. It
        also renames appendUnbarrieredXYZ to appendUnbarriered, and it removes the use of extra
        indirection (so you now pass const WriteBarrier<>& instead of WriteBarrier<>*).

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/builtins/builtins_templates.py:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitWeakly):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::determineLiveness):
        (JSC::CodeBlock::visitOSRExitTargets):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        * bytecode/DirectEvalCodeCache.cpp:
        (JSC::DirectEvalCodeCache::visitAggregate):
        * bytecode/InternalFunctionAllocationProfile.h:
        (JSC::InternalFunctionAllocationProfile::visitAggregate):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfile::visitAggregate):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::propagateTransitions):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::visitChildren):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::visitChildren):
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::visitChildren):
        * dfg/DFGDesiredTransitions.cpp:
        (JSC::DFG::DesiredTransition::visitChildren):
        * dfg/DFGDesiredWeakReferences.cpp:
        (JSC::DFG::DesiredWeakReferences::visitChildren):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::visitChildren):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::markCodeBlocks):
        (JSC::DFG::Plan::checkLivenessAndVisitChildren):
        * heap/HandleSet.cpp:
        (JSC::HandleSet::visitStrongHandles):
        * heap/HandleSet.h:
        * heap/HandleStack.cpp:
        (JSC::HandleStack::visit):
        * heap/HandleStack.h:
        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint):
        * heap/Heap.h:
        * heap/HeapRootVisitor.h: Removed.
        * heap/LargeAllocation.cpp:
        (JSC::LargeAllocation::visitWeakSet):
        * heap/LargeAllocation.h:
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::visitWeakSet):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::visitWeakSets):
        * heap/MarkedSpace.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendUnbarriered):
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::appendUnbarriered):
        (JSC::SlotVisitor::append):
        (JSC::SlotVisitor::appendHidden):
        (JSC::SlotVisitor::appendValues):
        (JSC::SlotVisitor::appendValuesHidden):
        (JSC::SlotVisitor::appendUnbarrieredPointer): Deleted.
        (JSC::SlotVisitor::appendUnbarrieredReadOnlyPointer): Deleted.
        (JSC::SlotVisitor::appendUnbarrieredValue): Deleted.
        (JSC::SlotVisitor::appendUnbarrieredReadOnlyValue): Deleted.
        (JSC::SlotVisitor::appendUnbarrieredWeak): Deleted.
        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::specializedVisit):
        (JSC::WeakBlock::visit):
        * heap/WeakBlock.h:
        * heap/WeakSet.h:
        (JSC::WeakSet::visit):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::visitChildren):
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::MarkingGCAwareJITStubRoutine::markRequiredObjectsInternal):
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallStubRoutine::markRequiredObjectsInternal):
        * jsc.cpp:
        (WTF::Element::visitChildren):
        (WTF::ImpureGetter::visitChildren):
        (WTF::SimpleObject::visitChildren):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::visitChildren):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/ArgList.h:
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::visitChildren):
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::visitChildren):
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::visitChildren):
        * runtime/Exception.cpp:
        (JSC::Exception::visitChildren):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::visitChildren):
        * runtime/FunctionRareData.cpp:
        (JSC::FunctionRareData::visitChildren):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/HashMapImpl.cpp:
        (JSC::HashMapBucket<Data>::visitChildren):
        (JSC::HashMapImpl<HashMapBucket>::visitChildren):
        * runtime/InferredTypeTable.cpp:
        (JSC::InferredTypeTable::visitChildren):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::visitChildren):
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::visitChildren):
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::IntlCollatorConstructor::visitChildren):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::visitChildren):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructor::visitChildren):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::visitChildren):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructor::visitChildren):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::visitChildren):
        * runtime/JSCallee.cpp:
        (JSC::JSCallee::visitChildren):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::visitChildren):
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSCustomGetterSetterFunction::visitChildren):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSMapIterator.cpp:
        (JSC::JSMapIterator::visitChildren):
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::visitChildren):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::visitChildren):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::visitChildren):
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSNativeStdFunction::visitChildren):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterflyImpl):
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::visitChildren):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::visitChildren):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::visitChildren):
        * runtime/JSScope.cpp:
        (JSC::JSScope::visitChildren):
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::visitChildren):
        * runtime/JSSetIterator.cpp:
        (JSC::JSSetIterator::visitChildren):
        * runtime/JSString.cpp:
        (JSC::JSRopeString::visitFibers):
        * runtime/JSSymbolTableObject.cpp:
        (JSC::JSSymbolTableObject::visitChildren):
        * runtime/JSWeakMap.cpp:
        (JSC::JSWeakMap::visitChildren):
        * runtime/JSWeakSet.cpp:
        (JSC::JSWeakSet::visitChildren):
        * runtime/JSWithScope.cpp:
        (JSC::JSWithScope::visitChildren):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/LazyClassStructure.cpp:
        (JSC::LazyClassStructure::visit):
        * runtime/LazyPropertyInlines.h:
        (JSC::ElementType>::visit):
        * runtime/MapBase.cpp:
        (JSC::MapBase<HashMapBucketType>::visitChildren):
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::visitChildren):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::visitChildren):
        * runtime/ProxyRevoke.cpp:
        (JSC::ProxyRevoke::visitChildren):
        * runtime/RegExpCachedResult.cpp:
        (JSC::RegExpCachedResult::visitChildren):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::visitChildren):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::visit):
        * runtime/ScopedArguments.cpp:
        (JSC::ScopedArguments::visitChildren):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::visitStrongReferences):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::visitChildren):
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildren):
        (JSC::Structure::markIfCheap):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::visitChildren):
        * runtime/TypeProfilerLog.cpp:
        (JSC::TypeProfilerLog::visit):
        * runtime/WeakMapData.cpp:
        (JSC::WeakMapData::DeadKeyCleaner::visitWeakReferences):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::visitChildren):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::visitChildren):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::visitChildren):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::visitChildren):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::visitChildren):

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2016-12-15  Keith Miller  <keith_miller@apple.com>

        Wasm should not create empty unlinked callsites
        https://bugs.webkit.org/show_bug.cgi?id=165933

        Reviewed by Mark Lam.

        Wasm would create holes in the unlinked callsite vector if B3 was able to
        eliminate the callsite.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addCall):

2016-12-15  JF Bastien  <jfbastien@apple.com>

        WebAssembly: improve compilation error messages
        https://bugs.webkit.org/show_bug.cgi?id=163919

        Reviewed by Saam Barati.

        The error handling messages were underwhelming because most
        locations merely returned `false` on failure. This patch uses
        std::expected to denote that failure isn't expected. Doing this
        makes it almost impossible to mess up the code: either a function
        returns a result (or a partial result for internal helpers) or an
        error. We're not synchronizing the error string with the m_failed
        bool anymore, and the caller will abort if they try to get a
        result but the outcome was an error.

        This also shortens the code significantly using macros, while also
        judiciously preventing inlining of error handling code and biasing
        towards success using UNLIKELY. This means that the generated code
        should be more efficient (no string formatting on success, and
        regalloc can avoid these unlikely paths).

        The patch adds a few missing checks as well, especially related to
        count limits and memory allocation failure.

        As a follow-up I'd like to improve WTF::makeString further, so it
        does coercions to string and understands ADL as I did in this
        patch.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::fail):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValidExternalKind):
        (JSC::Wasm::makeString):
        * wasm/WasmFunctionParser.h:
        * wasm/WasmModuleParser.cpp:
        * wasm/WasmModuleParser.h:
        * wasm/WasmParser.h:
        (JSC::Wasm::FailureHelper::makeString):
        (JSC::Wasm::Parser::fail):
        (JSC::Wasm::Parser<SuccessType>::Parser):
        (JSC::Wasm::Parser<SuccessType>::consumeCharacter):
        (JSC::Wasm::Parser<SuccessType>::consumeString):
        (JSC::Wasm::Parser<SuccessType>::consumeUTF8String):
        (JSC::Wasm::Parser<SuccessType>::parseVarUInt32):
        (JSC::Wasm::Parser<SuccessType>::parseVarUInt64):
        (JSC::Wasm::Parser<SuccessType>::parseVarInt32):
        (JSC::Wasm::Parser<SuccessType>::parseVarInt64):
        (JSC::Wasm::Parser<SuccessType>::parseUInt32):
        (JSC::Wasm::Parser<SuccessType>::parseUInt64):
        (JSC::Wasm::Parser<SuccessType>::parseUInt8):
        (JSC::Wasm::Parser<SuccessType>::parseInt7):
        (JSC::Wasm::Parser<SuccessType>::parseUInt7):
        (JSC::Wasm::Parser<SuccessType>::parseVarUInt1):
        (JSC::Wasm::Parser<SuccessType>::parseResultType):
        (JSC::Wasm::Parser<SuccessType>::parseValueType):
        (JSC::Wasm::Parser<SuccessType>::parseExternalKind):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/WasmSections.h:
        (JSC::Wasm::isValidSection):
        (JSC::Wasm::validateOrder):
        (JSC::Wasm::makeString):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::fail):
        (JSC::Wasm::Validate::addUnreachable):
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        * wasm/generateWasmOpsHeader.py:
        * wasm/generateWasmValidateInlinesHeader.py:
        (loadMacro):
        (storeMacro):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2016-12-15  JF Bastien  <jfbastien@apple.com>

        WebAssembly API: improve data section errors, initialize after Element
        https://bugs.webkit.org/show_bug.cgi?id=165733

        Reviewed by Keith Miller.

        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseData): Data section without Memory section or import is a validation error
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::dataSegmentFail):
        (JSC::WebAssemblyModuleRecord::evaluate): tighten checks (though the spec isn't fully baked), and move after Element initialization

2016-12-15  Keith Miller  <keith_miller@apple.com>

        Turn on WebAssembly by default
        https://bugs.webkit.org/show_bug.cgi?id=165918

        Reviewed by Saam Barati.

        * runtime/Options.h:

2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>

        Added missing override and final specifiers
        https://bugs.webkit.org/show_bug.cgi?id=165903

        Reviewed by Darin Adler.

        * bytecompiler/BytecodeGenerator.h:
        * jsc.cpp:
        * parser/Nodes.h:

2016-12-15  Chris Dumez  <cdumez@apple.com>

        Harden JSObject::getOwnPropertyDescriptor()
        https://bugs.webkit.org/show_bug.cgi?id=165908

        Reviewed by Geoffrey Garen.

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

2016-12-15  Keith Miller  <keith_miller@apple.com>

        Fix 64-bit shift family Wasm opcodes
        https://bugs.webkit.org/show_bug.cgi?id=165902

        Reviewed by Geoffrey Garen.

        The Int64 versions of the shift family B3 opcodes take an Int32
        for the shift value. Wasm, however, takes an i64, so we need to
        Trunc the shift value. Also, this fixes a bug where shr_u mapped
        to signed shift and shr_s mapped to the unsigned shift.

        * wasm/wasm.json:

2016-12-14  Keith Miller  <keith_miller@apple.com>

        Wasm should decode constants correctly
        https://bugs.webkit.org/show_bug.cgi?id=165886

        Reviewed by Saam Barati.

        This patch fixes how we decode the constant part of i32, i64, f32,
        and f64.const opcodes.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/wasm.json:

2016-12-14  Saam Barati  <sbarati@apple.com>

        WebAssembly: Add various low hanging fruit that will allow us to run the LLVM torture tests in Wasm
        https://bugs.webkit.org/show_bug.cgi?id=165883

        Reviewed by Keith Miller.

        This patch implements some low hanging fruit:
        - Exporting Table
        - Exporting Memory
        - Load16 with zero extension to both 32 and 64 bit values.
        - Fixes Unreachable to emit code that will prevent B3 from having a validation error.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addUnreachable):
        (JSC::Wasm::sizeOfLoadOp):
        (JSC::Wasm::B3IRGenerator::emitLoadOp):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseExport):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::addUnreachable):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::finishCreation):
        (JSC::WebAssemblyModuleRecord::link):

2016-12-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        Update ModuleLoader code by using the latest builtin primitives
        https://bugs.webkit.org/show_bug.cgi?id=165851

        Reviewed by Sam Weinig.

        Update the module loader code,

        1. Use @globalPrivate for the utilities, instead of setting them as the member of ModuleLoader.
        2. Use @putByValDirect instead of @push. @push is user-observable since it uses Set() operation
           and it can be observed by defining indexed setters in Array.prototype.

        * builtins/ModuleLoaderPrototype.js:
        (ensureRegistered):
        (fulfillFetch):
        (commitInstantiated):
        (requestFetch):
        (requestSatisfy):
        (setStateToMax): Deleted.
        (newRegistryEntry): Deleted.
        * runtime/ModuleLoaderPrototype.cpp:

2016-12-14  Michael Saboff  <msaboff@apple.com>

        The stress GC bot crashes in JavaScriptCore beneath ShadowChicken::update and Inspector::jsToInspectorValue
        https://bugs.webkit.org/show_bug.cgi?id=165871

        Reviewed by Mark Lam.

        This fixes two issues with the VM watch dog timer firing in a worker.

        The first issue has to do with bytecode ordering.  Prior to this change, the first few opcodes
        generated when the watch dog is enabled are:
                op_enter
                op_watchdog
                op_get_scope
        When the watchdog fires, the function will get an exception at op_watchdog.  In processing that exception,
        we'll try to update the ShadowChicken shadow stack.  That update assumes that if there is a scope 
        VirtualRegister allocated, then the slot contains a valid JSScope.  With the current bytecode ordering,
        this is not true at op_watchdog as op_enter will put JSUndefined in the scope slot.  It isn't until the
        op_get_scope gets processed that we'll have a valid scope in the slot.  The fix for this issue is to 
        ensure that op_get_scope happens before the op_watchdog.

        The second issue is that ScriptFunctionCall::call() will not tell its caller that a terminated
        execution exception happened.  Instead call() returns an empty JSValue.  InjectedScript::wrapCallFrames()
        wasn't checking for an empty JSValue, but was passing it to another function.  Added a short circuit
        return when call returns an empty JSValue.

        Added <https://bugs.webkit.org/show_bug.cgi?id=165875> to fix other callers of ScriptFunctionCall::call()
        to check for an empty JSValue return value.
        Also tracked with <rdar://problem/29671015>.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitEnter):
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::wrapCallFrames):

2016-12-14  Filip Pizlo  <fpizlo@apple.com>

        DirectTailCall implementation needs to tell the shuffler what to put into the ArgumentCount explicitly
        https://bugs.webkit.org/show_bug.cgi?id=165882

        Reviewed by Mark Lam.
        
        The CallFrameShuffler was assuming that the ArgumentCount that it should store into the
        callee frame is simply the size of the args vector.
        
        That's not true for DirectTailCall, which will pad the args vector with undefined if we
        are optimizing an arity mismatch. We need to pass the ArgumentCount explicitly in this
        case.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        * jit/CallFrameShuffleData.h:
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        (JSC::CallFrameShuffler::prepareAny):
        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2016-12-14  Keith Miller  <keith_miller@apple.com>

        WebAssembly JS API: implement Global
        https://bugs.webkit.org/show_bug.cgi?id=164133

        Reviewed by Saam Barati.

        This patch adds support for globals. It handles imports, exports
        and internal globals. In the MVP only internal globals are allowed
        to be mutable. This means we can store a C-array of 64-bit slots
        off the instance holding them. When globals are exported to JS
        they are done so as numbers. This means that i64 globals cannot be
        imported or exported.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::getGlobal):
        (JSC::Wasm::B3IRGenerator::setGlobal):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmFormat.h:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseGlobal):
        (JSC::Wasm::ModuleParser::parseExport):
        (JSC::Wasm::ModuleParser::parseElement):
        (JSC::Wasm::ModuleParser::parseInitExpr):
        (JSC::Wasm::ModuleParser::parseGlobalType):
        (JSC::Wasm::ModuleParser::parseData):
        * wasm/WasmModuleParser.h:
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::parseVarInt32):
        (JSC::Wasm::Parser::parseVarInt64):
        (JSC::Wasm::Parser::parseUInt64):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::hasMemory):
        (JSC::Wasm::Validate::Validate):
        (JSC::Wasm::Validate::getGlobal):
        (JSC::Wasm::Validate::setGlobal):
        (JSC::Wasm::validateFunction):
        * wasm/generateWasmOpsHeader.py:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        (JSC::JSWebAssemblyInstance::finishCreation):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::loadI32Global):
        (JSC::JSWebAssemblyInstance::loadI64Global):
        (JSC::JSWebAssemblyInstance::loadF32Global):
        (JSC::JSWebAssemblyInstance::loadF64Global):
        (JSC::JSWebAssemblyInstance::setGlobal):
        (JSC::JSWebAssemblyInstance::offsetOfGlobals):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::finishCreation):
        (JSC::WebAssemblyModuleRecord::link):

2016-12-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, re-enable concurrent GC on ARM64 now that the most likely culprit of the memory
        regressions is fixed. Lets see what the bots think!

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-14  Filip Pizlo  <fpizlo@apple.com>

        Devices with fewer cores should use a more aggressive GC schedule by default
        https://bugs.webkit.org/show_bug.cgi?id=165859

        Reviewed by Mark Lam.

        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint): Log when we have an unexpected delay in wake-up.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::drainInParallelPassively): Don't drain passively if there aren't many cores.
        * runtime/Options.cpp:
        (JSC::overrideDefaults): Change the heuristics if we have fewer cores.
        (JSC::Options::initialize):
        * runtime/Options.h:

2016-12-14  Mark Lam  <mark.lam@apple.com>

        BytecodeBasicBlock::computeImpl() should not keep iterating blocks if all jump targets have already been found.
        https://bugs.webkit.org/show_bug.cgi?id=165820

        Reviewed by Saam Barati.

        Currently, if an opcode is a branch type opcode, BytecodeBasicBlock::computeImpl()
        will iterate over all basic blocks looking for the block containing the jump
        target, and it will continue to do this even when all the jump targets have been
        found.  This is wasted work, and all the more so given that most branch type
        opcodes only have a single jump target.

        * bytecode/BytecodeBasicBlock.cpp:
        (JSC::BytecodeBasicBlock::computeImpl):

2016-12-14  Gavin Barraclough  <barraclough@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Unreviewed, re-landing this with fix (revert erroneous change to Options).

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/CellContainer.cpp: Added.
        (JSC::CellContainer::isNewlyAllocated):
        * heap/CellContainer.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::addBlock):
        (JSC::MarkedAllocator::removeBlock):
        (JSC::MarkedAllocator::dumpBits):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::forEachBitVector):
        (JSC::MarkedAllocator::forEachBitVectorWithName):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::tryCreate):
        (JSC::MarkedBlock::Handle::~Handle):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::Handle::specializedSweep):
        (JSC::MarkedBlock::Handle::sweepHelperSelectMarksMode):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):
        (JSC::MarkedBlock::Handle::dumpState):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::markingVersion):
        (JSC::MarkedBlock::isMarkedRaw):
        (JSC::MarkedBlock::isMarked):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::marksConveyLivenessDuringMarking):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::size):
        (JSC::StructureIDTable::get):

2016-12-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209766.

        Regressed Dromaeo JSLib by ~50%

        Reverted changeset:

        "Make opaque root scanning truly constraint-based"
        https://bugs.webkit.org/show_bug.cgi?id=165760
        http://trac.webkit.org/changeset/209766

2016-12-14  Commit Queue  <commit-queue@webkit.org>

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

        rolled out the wrong revision (Requested by pizlo on #webkit).

        Reverted changeset:

        "MarkedBlock::marksConveyLivenessDuringMarking should take
        into account collection scope"
        https://bugs.webkit.org/show_bug.cgi?id=165741
        http://trac.webkit.org/changeset/209795

2016-12-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, disable concurrent GC on ARM while we investigate a memory use regression.

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

        In old days, we frequently use the idiom like, `value.toString(exec)->value(exec)` to
        get WTFString from the given JSValue. But now, we have better function, `toWTFString`.
        `toWTFString` does not create intermediate JSString objects, then reduce unnecessary
        allocations.

        This patch mechanically replaces `value.toString(exec)->value(exec)` with `toWTFString(exec)`.

        * API/JSValueRef.cpp:
        (JSValueToStringCopy):
        * bindings/ScriptValue.cpp:
        (Deprecated::ScriptValue::toString):
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::reportAPIException):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension):
        * inspector/ScriptCallStackFactory.cpp:
        (Inspector::extractSourceInformationFromException):
        * runtime/ConsoleObject.cpp:
        (JSC::valueToStringWithUndefinedOrNullCheck):
        (JSC::valueOrDefaultLabelString):
        * runtime/DateConstructor.cpp:
        (JSC::dateParse):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedToString):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/InspectorInstrumentationObject.cpp:
        (JSC::inspectorInstrumentationObjectLog):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::fetch):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        * runtime/RegExpConstructor.cpp:
        (JSC::regExpCreate):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        (JSC::trimString):
        (JSC::stringProtoFuncStartsWith):
        (JSC::stringProtoFuncEndsWith):
        (JSC::stringProtoFuncIncludes):
        (JSC::builtinStringIncludesInternal):
        (JSC::stringProtoFuncNormalize):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::functionPrint):
        * wasm/js/JSWebAssemblyCompileError.h:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (JSC::JSWebAssemblyRuntimeError::create):

2016-12-14  Gavin Barraclough  <barraclough@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Unreviewed rollout due to performance regression.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/CellContainer.cpp: Removed.
        * heap/CellContainer.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::addBlock):
        (JSC::MarkedAllocator::removeBlock):
        (JSC::MarkedAllocator::dumpBits):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::forEachBitVector):
        (JSC::MarkedAllocator::forEachBitVectorWithName):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::tryCreate):
        (JSC::MarkedBlock::Handle::~Handle):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::Handle::specializedSweep):
        (JSC::MarkedBlock::Handle::sweepHelperSelectMarksMode):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):
        (JSC::MarkedBlock::Handle::dumpState): Deleted.
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::markingVersion): Deleted.
        (JSC::MarkedBlock::isMarkedRaw): Deleted.
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::marksConveyLivenessDuringMarking):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * runtime/Options.h:
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::get):
        (JSC::StructureIDTable::size): Deleted.

2016-12-13  Commit Queue  <commit-queue@webkit.org>

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

        Cause build failures (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "Use JSValue::toWTFString instead of calling toString(exec)
        and value(exec)"
        https://bugs.webkit.org/show_bug.cgi?id=165795
        http://trac.webkit.org/changeset/209792

2016-12-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use JSValue::toWTFString instead of calling toString(exec) and value(exec)
        https://bugs.webkit.org/show_bug.cgi?id=165795

        Reviewed by Saam Barati.

        In old days, we frequently use the idiom like, `value.toString(exec)->value(exec)` to
        get WTFString from the given JSValue. But now, we have better function, `toWTFString`.
        `toWTFString` does not create intermediate JSString objects, then reduce unnecessary
        allocations.

        This patch mechanically replaces `value.toString(exec)->value(exec)` with `toWTFString(exec)`.

        * API/JSValueRef.cpp:
        (JSValueToStringCopy):
        * bindings/ScriptValue.cpp:
        (Deprecated::ScriptValue::toString):
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::reportAPIException):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension):
        * inspector/ScriptCallStackFactory.cpp:
        (Inspector::extractSourceInformationFromException):
        * runtime/ConsoleObject.cpp:
        (JSC::valueToStringWithUndefinedOrNullCheck):
        (JSC::valueOrDefaultLabelString):
        * runtime/DateConstructor.cpp:
        (JSC::dateParse):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedToString):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/InspectorInstrumentationObject.cpp:
        (JSC::inspectorInstrumentationObjectLog):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toWTFStringSlowCase):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::fetch):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        * runtime/RegExpConstructor.cpp:
        (JSC::regExpCreate):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        (JSC::trimString):
        (JSC::stringProtoFuncStartsWith):
        (JSC::stringProtoFuncEndsWith):
        (JSC::stringProtoFuncIncludes):
        (JSC::builtinStringIncludesInternal):
        (JSC::stringProtoFuncNormalize):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::functionPrint):
        * wasm/js/JSWebAssemblyCompileError.h:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (JSC::JSWebAssemblyRuntimeError::create):

2016-12-13  Saam Barati  <sbarati@apple.com>

        WebAssembly: implement the elements section
        https://bugs.webkit.org/show_bug.cgi?id=165715

        Reviewed by Keith Miller.

        This is a straight forward implementation of the Element
        section in the Wasm spec:
        https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#element-section
        
        There are a few ambiguities I encountered when implementing this, so I've
        filed bugs against the Wasm design repo, and corresponding bugzilla bugs
        for us to address after they've been discussed by the various Wasm folks:
        - https://bugs.webkit.org/show_bug.cgi?id=165827
        - https://bugs.webkit.org/show_bug.cgi?id=165826
        - https://bugs.webkit.org/show_bug.cgi?id=165825

        * wasm/WasmFormat.h:
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseElement):
        (JSC::Wasm::ModuleParser::parseInitExpr):
        (JSC::Wasm::ModuleParser::parseData):
        * wasm/WasmModuleParser.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2016-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209544.

        Looks like r209489 did not cause the performance regression
        after all

        Reverted changeset:

        "Unreviewed, rolling out r209489."
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209544

2016-12-13  Saam Barati  <sbarati@apple.com>

        WebAssembly: implement the table section and table import
        https://bugs.webkit.org/show_bug.cgi?id=165716

        Reviewed by Keith Miller.

        This patch implements the Table space for wasm:
        https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#table-section

        It only implements defining and importing a table. The bulk
        of this patch is implementing the various wasm Table prototype
        methods and the underlying Table object:
        https://github.com/WebAssembly/design/blob/master/JS.md#webassemblytable-constructor

        This patch also fixes a bug in our implementation with call_indirect.
        We initially implemented call_indirect as a way to call functions that
        are imported or defined in the module. This was the wrong
        interpretation of the spec. Instead, call_indirect can only index into
        the table index space.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmFormat.h:
        (JSC::Wasm::TableInformation::TableInformation):
        (JSC::Wasm::TableInformation::operator bool):
        (JSC::Wasm::TableInformation::isImport):
        (JSC::Wasm::TableInformation::initial):
        (JSC::Wasm::TableInformation::maximum):
        (JSC::Wasm::CallableFunction::CallableFunction):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseResizableLimits):
        (JSC::Wasm::ModuleParser::parseTableHelper):
        (JSC::Wasm::ModuleParser::parseTable):
        (JSC::Wasm::ModuleParser::parseMemoryHelper):
        (JSC::Wasm::ModuleParser::parseExport):
        * wasm/WasmModuleParser.h:
        * wasm/js/JSWebAssemblyHelpers.h: Added.
        (JSC::toNonWrappingUint32):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::table):
        (JSC::JSWebAssemblyInstance::setTable):
        (JSC::JSWebAssemblyInstance::offsetOfTable):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::create):
        (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
        (JSC::JSWebAssemblyTable::visitChildren):
        (JSC::JSWebAssemblyTable::grow):
        (JSC::JSWebAssemblyTable::clearFunction):
        (JSC::JSWebAssemblyTable::setFunction):
        * wasm/js/JSWebAssemblyTable.h:
        (JSC::JSWebAssemblyTable::maximum):
        (JSC::JSWebAssemblyTable::size):
        (JSC::JSWebAssemblyTable::getFunction):
        (JSC::JSWebAssemblyTable::offsetOfSize):
        (JSC::JSWebAssemblyTable::offsetOfFunctions):
        (JSC::JSWebAssemblyTable::isValidSize):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::call):
        (JSC::WebAssemblyFunction::create):
        (JSC::WebAssemblyFunction::visitChildren):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::signature):
        (JSC::WebAssemblyFunction::wasmEntrypoint):
        (JSC::WebAssemblyFunction::webAssemblyCallee): Deleted.
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::finishCreation):
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::getTable):
        (JSC::webAssemblyTableProtoFuncLength):
        (JSC::webAssemblyTableProtoFuncGrow):
        (JSC::webAssemblyTableProtoFuncGet):
        (JSC::webAssemblyTableProtoFuncSet):
        (JSC::WebAssemblyTablePrototype::create):
        (JSC::WebAssemblyTablePrototype::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.h:

2016-12-13  Filip Pizlo  <fpizlo@apple.com>

        Add null checks to opaque root APIs.

        Rubber stamped by Saam Barati. 

        If we got a crash report about null in the opaque root HashSet, we would probably not
        celebrate how great it is that we found out about a new race - instead we would probably
        be annoyed that null wasn't just silently ignored.

        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::addOpaqueRoot):
        (JSC::SlotVisitor::containsOpaqueRoot):
        (JSC::SlotVisitor::containsOpaqueRootTriState):

2016-12-13  Filip Pizlo  <fpizlo@apple.com>

        Make opaque root scanning truly constraint-based
        https://bugs.webkit.org/show_bug.cgi?id=165760

        Reviewed by Saam Barati.
        
        We have bugs when visitChildren() changes its mind about what opaque root to add, since
        we don't have barriers on opaque roots. This supposedly once worked for generational GC,
        and I started adding more barriers to support concurrent GC. But I think that the real
        bug here is that we want the JSObject->OpaqueRoot to be evaluated as a constraint that
        participates in the fixpoint. A constraint is different from the normal visiting in that
        the GC will not wait for a barrier to rescan the object.
        
        So, it's now possible for any visitChildren() method to become a constraint by calling
        slotVisitor.rescanAsConstraint(). Because opaque roots are constraints, addOpaqueRoot()
        does rescanAsConstraint() for you.
        
        The constraint set is simply a HashSet<JSCell*> that accumulates with every
        rescanAsConstraint() call and is only cleared at the start of full GC. This trivially
        resolves most classes of GC bugs that would have arisen from opaque roots being changed
        in a way that the GC did not anticipate.
        
        Looks like this is perf-neutral.
        
        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::setMutatorShouldBeFenced):
        (JSC::Heap::writeBarrierOpaqueRootSlow): Deleted.
        (JSC::Heap::addMutatorShouldBeFencedCache): Deleted.
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::writeBarrierOpaqueRoot): Deleted.
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::visitWeakSets):
        * heap/MarkedSpace.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::visitSubsequently):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::addOpaqueRoot):
        (JSC::SlotVisitor::rescanAsConstraint):
        (JSC::SlotVisitor::mergeIfNecessary):
        (JSC::SlotVisitor::mergeOpaqueRootsAndConstraints):
        (JSC::SlotVisitor::mergeOpaqueRootsIfNecessary): Deleted.
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        (JSC::SlotVisitor::reportExternalMemoryVisited):
        (JSC::SlotVisitor::didNotRace):
        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::specializedVisit):
        (JSC::WeakBlock::visit):
        * heap/WeakBlock.h:
        * heap/WeakSet.h:
        (JSC::WeakSet::visit):

2016-12-13  Commit Queue  <commit-queue@webkit.org>

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

        "Broke ARMv7 builds" (Requested by msaboff on #webkit).

        Reverted changeset:

        "REGRESSION(r209653): speedometer crashes making virtual slow
        path tailcalls"
        https://bugs.webkit.org/show_bug.cgi?id=165748
        http://trac.webkit.org/changeset/209725

2016-12-13  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert the collectorPermittedIdleRatio back to 0 because of 100MB
        regression on membuster. Also, it didn't seem to help perf.

        * runtime/Options.h:

2016-12-13  JF Bastien  <jfbastien@apple.com>

        [WTF] Turn tryMakeString(), makeString() into variadic templates
        https://bugs.webkit.org/show_bug.cgi?id=147142

        Reviewed by Mark Lam.

        * runtime/JSStringBuilder.h:
        (JSC::jsMakeNontrivialString): remove WTF:: prefix, it isn't needed anymore
        * runtime/Lookup.cpp:
        (JSC::reifyStaticAccessor): remove WTF:: prefix, it isn't needed anymore
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString): remove WTF:: prefix, it isn't needed anymore

2016-12-12  Mark Lam  <mark.lam@apple.com>

        Rename BytecodeGenerator's ControlFlowContext to ControlFlowScope.
        https://bugs.webkit.org/show_bug.cgi?id=165777

        Reviewed by Keith Miller.

        The existing code sometimes refer to ControlFlowContext (and associated references)
        as context, and sometimes as scope.  Let's be consistent and always call it a scope.

        Also renamed push/popScopedControlFlowContext() to push/popLocalControlFlowScope()
        because these are only used when we inc/dec the m_localScopeDepth.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::emitPushWithScope):
        (JSC::BytecodeGenerator::emitPopWithScope):
        (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
        (JSC::BytecodeGenerator::pushIteratorCloseControlFlowScope):
        (JSC::BytecodeGenerator::popFinallyControlFlowScope):
        (JSC::BytecodeGenerator::popIteratorCloseControlFlowScope):
        (JSC::BytecodeGenerator::emitComplexPopScopes):
        (JSC::BytecodeGenerator::emitPopScopes):
        (JSC::BytecodeGenerator::pushLocalControlFlowScope):
        (JSC::BytecodeGenerator::popLocalControlFlowScope):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::pushFinallyContext): Deleted.
        (JSC::BytecodeGenerator::pushIteratorCloseContext): Deleted.
        (JSC::BytecodeGenerator::popFinallyContext): Deleted.
        (JSC::BytecodeGenerator::popIteratorCloseContext): Deleted.
        (JSC::BytecodeGenerator::pushScopedControlFlowContext): Deleted.
        (JSC::BytecodeGenerator::popScopedControlFlowContext): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):

2016-12-12  Filip Pizlo  <fpizlo@apple.com>

        GC scheduler should avoid consecutive pauses
        https://bugs.webkit.org/show_bug.cgi?id=165758

        Reviewed by Michael Saboff.
        
        This factors out the scheduler from lambdas in Heap::markToFixpoint to an actual class.
        It's called the SpaceTimeScheduler because it is a linear controller that ties the
        amount of time you spend on things to the amount of space you are using.
        
        This patch uses this refactoring to fix a bug where the GC would pause even though we
        still had time during a mutator timeslice. This is a 15% improvement on
        JetStream/splay-latency. Seems neutral on everything else. However, it's not at all
        clear if this is the right policy or not since retreating wavefront can sometimes be so
        sensitive to scheduling decisions. For this reason, there is a tunable option that lets
        you decide how long the GC will sit idle before the start of its timeslice.
        
        So, we can revert this policy change in this patch without reverting the patch.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint):
        * heap/Heap.h:
        * heap/SpaceTimeScheduler.cpp: Added.
        (JSC::SpaceTimeScheduler::Decision::targetMutatorUtilization):
        (JSC::SpaceTimeScheduler::Decision::targetCollectorUtilization):
        (JSC::SpaceTimeScheduler::Decision::elapsedInPeriod):
        (JSC::SpaceTimeScheduler::Decision::phase):
        (JSC::SpaceTimeScheduler::Decision::shouldBeResumed):
        (JSC::SpaceTimeScheduler::Decision::timeToResume):
        (JSC::SpaceTimeScheduler::Decision::timeToStop):
        (JSC::SpaceTimeScheduler::SpaceTimeScheduler):
        (JSC::SpaceTimeScheduler::snapPhase):
        (JSC::SpaceTimeScheduler::currentDecision):
        * heap/SpaceTimeScheduler.h: Added.
        (JSC::SpaceTimeScheduler::Decision::Decision):
        (JSC::SpaceTimeScheduler::Decision::operator bool):
        * runtime/Options.h:

2016-12-12  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
        https://bugs.webkit.org/show_bug.cgi?id=165748

        Reviewed by Filip Pizlo.

        The virtual slow path for tailcalls always passes arguments on the stack.
        The fix here is to link to the stack argument entrypoint instead of a register
        argument entrypoint.

        While fixing this bug, I found that we weren't clearing the code origin when
        shuffling the call frame for a register argument tailcall.

        Also rolling back in r209653, r209654, r209663, and r209673.

        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::prepareAny):
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):

2016-12-12  Mark Lam  <mark.lam@apple.com>

        Rename BytecodeGenerator's m_symbolTableStack to m_lexicalScopeStack.
        https://bugs.webkit.org/show_bug.cgi?id=165768

        Reviewed by Saam Barati.

        The lexical scope in "m_lexicalScopeStack" here refers to a pair of { } in the
        source code that bounds the scope of variables.

        There are 4 places in the code where we call m_symbolTableStack.append() to
        append a new stack entry.  In only 3 of the 4 cases, a symbol table is provided
        in the new stack entry.  In all 4 cases, a scope register is provided in the new
        stack entry.

        Also, 3 of the 4 functions that appends an entry to this stack are named:
        1. initializeVarLexicalEnvironment()
        2. pushLexicalScopeInternal()
        3. emitPushWithScope()

        The 4th function is the BytecodeGenerator constructor where it pushes the scope
        for a module environment.

        Based on these details, m_lexicalScopeStack is a better name for this stack than
        m_symbolTableStack.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::initializeArrowFunctionContextScopeIfNeeded):
        (JSC::BytecodeGenerator::initializeVarLexicalEnvironment):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::initializeBlockScopedFunctions):
        (JSC::BytecodeGenerator::hoistSloppyModeFunctionIfNecessary):
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration):
        (JSC::BytecodeGenerator::variable):
        (JSC::BytecodeGenerator::resolveType):
        (JSC::BytecodeGenerator::emitResolveScope):
        (JSC::BytecodeGenerator::emitPushWithScope):
        (JSC::BytecodeGenerator::emitPopWithScope):
        (JSC::BytecodeGenerator::pushFinallyContext):
        (JSC::BytecodeGenerator::pushIteratorCloseContext):
        (JSC::BytecodeGenerator::emitComplexPopScopes):
        (JSC::BytecodeGenerator::popTryAndEmitCatch):
        (JSC::BytecodeGenerator::emitPushFunctionNameScope):
        * bytecompiler/BytecodeGenerator.h:

2016-12-12  Saam Barati  <sbarati@apple.com>

        Unreviewed. Try to fix the cloop build.

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

2016-12-12  Michael Saboff  <msaboff@apple.com>

        FTL: Dumping disassembly requires that code origin is set when making polymorphic tail calls.
        https://bugs.webkit.org/show_bug.cgi?id=165747

        Reviewed by Filip Pizlo.

        Setting the code origin needs to be done for both the fast and slow path as we might need
        it when linking a polymorphic or virtual call stub.

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

2016-12-11  Saam Barati  <sbarati@apple.com>

        Unreviewed. Try to fix the linux build.

        * runtime/StackFrame.h:

2016-12-11  Saam Barati  <sbarati@apple.com>

        We should be able to throw exceptions from Wasm code and when Wasm frames are on the stack
        https://bugs.webkit.org/show_bug.cgi?id=165429

        Reviewed by Keith Miller.

        This patch teaches the stack walking runtime about wasm.
        To do this, I taught StackVisitor that a callee is not
        always an object.

        To be able to unwind callee save registers properly, I've given
        JSWebAssemblyCallee a list of RegisterAtOffsetList for the callee
        saves that B3 saved in the prologue. Also, because we have two
        B3Compilations per wasm function, one for wasm entrypoint, and
        one for the JS entrypoint, I needed to create a callee for each
        because they each might spill callee save registers.

        I also fixed a bug inside the Wasm::Memory constructor where we
        were trying to mmap the same number of bytes even after the first
        mmap failed. We should start by trying to mmap the maximum bytes,
        and if that fails, fall back to the specified initial bytes. However,
        the code was just mmapping the maximum twice. I've fixed that and
        also added a RELEASE_ASSERT_NOT_REACHED() for when the second mmap
        fails along with a FIXME to throw an OOM error.

        There was a second bug I fixed where JSModuleRecord was calling
        visitWeak on its CallLinkInfos inside ::visitChldren(). It needs
        to do this after marking. I changed JSModuleRecord to do what
        CodeBlock does and call visitWeak on its CallLinkInfos inside
        an UnconditionalFinalizer.

        * API/JSContextRef.cpp:
        (BacktraceFunctor::operator()):
        * inspector/ScriptCallStackFactory.cpp:
        (Inspector::createScriptCallStackFromException):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::vmEntryGlobalObject):
        * interpreter/CallFrame.h:
        (JSC::ExecState::callee):
        * interpreter/Interpreter.cpp:
        (JSC::GetStackTraceFunctor::operator()):
        (JSC::UnwindFunctor::operator()):
        (JSC::UnwindFunctor::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer):
        * interpreter/Interpreter.h:
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::update):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::StackVisitor):
        (JSC::StackVisitor::readFrame):
        (JSC::StackVisitor::readNonInlinedFrame):
        (JSC::StackVisitor::readInlinedFrame):
        (JSC::StackVisitor::Frame::isWasmFrame):
        (JSC::StackVisitor::Frame::codeType):
        (JSC::StackVisitor::Frame::calleeSaveRegisters):
        (JSC::StackVisitor::Frame::functionName):
        (JSC::StackVisitor::Frame::sourceURL):
        (JSC::StackVisitor::Frame::toString):
        (JSC::StackVisitor::Frame::hasLineAndColumnInfo):
        (JSC::StackVisitor::Frame::setToEnd):
        * interpreter/StackVisitor.h:
        (JSC::StackVisitor::Frame::callee):
        (JSC::StackVisitor::Frame::isNativeFrame):
        (JSC::StackVisitor::Frame::isJSFrame): Deleted.
        * jsc.cpp:
        (callWasmFunction):
        (functionTestWasmModuleFunctions):
        * runtime/Error.cpp:
        (JSC::addErrorInfoAndGetBytecodeOffset):
        * runtime/JSCell.cpp:
        (JSC::JSCell::isAnyWasmCallee):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::RetrieveArgumentsFunctor::operator()):
        (JSC::RetrieveCallerFunctionFunctor::operator()):
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::sourceID):
        (JSC::StackFrame::sourceURL):
        (JSC::StackFrame::functionName):
        (JSC::StackFrame::computeLineAndColumn):
        (JSC::StackFrame::toString):
        * runtime/StackFrame.h:
        (JSC::StackFrame::StackFrame):
        (JSC::StackFrame::hasLineAndColumnInfo):
        (JSC::StackFrame::hasBytecodeOffset):
        (JSC::StackFrame::bytecodeOffset):
        (JSC::StackFrame::isNative): Deleted.
        * runtime/VM.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::setupFrameInPrologue):
        * wasm/WasmFormat.h:
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::Memory):
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::isValid):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        (JSC::Wasm::Plan::initializeCallees):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::jsToWasmEntryPointForFunction): Deleted.
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::finishCreation):
        * wasm/js/JSWebAssemblyCallee.h:
        (JSC::JSWebAssemblyCallee::create):
        (JSC::JSWebAssemblyCallee::entrypoint):
        (JSC::JSWebAssemblyCallee::calleeSaveRegisters):
        (JSC::JSWebAssemblyCallee::jsToWasmEntryPoint): Deleted.
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        (JSC::JSWebAssemblyModule::visitChildren):
        (JSC::JSWebAssemblyModule::UnconditionalFinalizer::finalizeUnconditionally):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::jsEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::wasmEntrypointCalleeFromFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::setJSEntrypointCallee):
        (JSC::JSWebAssemblyModule::setWasmEntrypointCallee):
        (JSC::JSWebAssemblyModule::allocationSize):
        (JSC::JSWebAssemblyModule::calleeFromFunctionIndexSpace): Deleted.
        * wasm/js/JSWebAssemblyRuntimeError.h:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::call):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2016-12-11  Filip Pizlo  <fpizlo@apple.com>

        Re-enable concurrent GC.

        Rubber stampted by Saam Barati.
        
        This change actually landed in r209692 by accident.

        * runtime/Options.h:

2016-12-10  Filip Pizlo  <fpizlo@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Reviewed by Saam Barati.
        
        MarkedBlock::marksConveyLivenessDuringMarking thought that the off-by-one marking
        version indicated liveness during any collection when it's just during full collection.
        One of its users - MarkedBlock::sweep - knew this and had a special case, but the other
        one - MarkedBlock::isLive - didn't. So, I moved the special case into
        marksConveyLivenessDuringMarking.
        
        Also, this cleans up some remaining bitvector races.
        
        To find this bug, I significantly strengthened our assertions.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/CellContainer.cpp: Added.
        (JSC::CellContainer::isNewlyAllocated):
        * heap/CellContainer.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::addBlock):
        (JSC::MarkedAllocator::removeBlock):
        (JSC::MarkedAllocator::dumpBits):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::forEachBitVector):
        (JSC::MarkedAllocator::forEachBitVectorWithName):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::tryCreate):
        (JSC::MarkedBlock::Handle::~Handle):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::Handle::specializedSweep):
        (JSC::MarkedBlock::Handle::sweepHelperSelectMarksMode):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):
        (JSC::MarkedBlock::Handle::dumpState):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::markingVersion):
        (JSC::MarkedBlock::isMarkedRaw):
        (JSC::MarkedBlock::isMarked):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::marksConveyLivenessDuringMarking):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::size):
        (JSC::StructureIDTable::get):

2016-12-10  Filip Pizlo  <fpizlo@apple.com>

        The DOM should have an advancing wavefront opaque root barrier
        https://bugs.webkit.org/show_bug.cgi?id=165712

        Reviewed by Yusuke Suzuki.
        
        This exposes the ability to fire an advancing wavefront barrier on opaque roots. It also
        gives clients the ability to maintain their own cache of whether that barrier needs to
        be enabled.
        
        The DOM uses this to enable a very cheap barrier on the DOM. This is neutral on
        Speedometer and fixes another concurrent GC crash.

        * heap/Heap.cpp:
        (JSC::Heap::beginMarking):
        (JSC::Heap::endMarking):
        (JSC::Heap::writeBarrierOpaqueRootSlow):
        (JSC::Heap::addMutatorShouldBeFencedCache):
        (JSC::Heap::setMutatorShouldBeFenced):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::writeBarrierOpaqueRoot):

2016-12-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209653, r209654, r209663, and
        r209673.
        https://bugs.webkit.org/show_bug.cgi?id=165739

        speedometer crashes (Requested by pizlo on #webkit).

        Reverted changesets:

        "JSVALUE64: Pass arguments in platform argument registers when
        making JavaScript calls"
        https://bugs.webkit.org/show_bug.cgi?id=160355
        http://trac.webkit.org/changeset/209653

        "Unreviewed build fix for 32 bit builds."
        http://trac.webkit.org/changeset/209654

        "Unreviewed build fix for the CLOOP after r209653"
        http://trac.webkit.org/changeset/209663

        "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
        https://bugs.webkit.org/show_bug.cgi?id=165728
        http://trac.webkit.org/changeset/209673

2016-12-10  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()
        https://bugs.webkit.org/show_bug.cgi?id=165728

        Reviewed by Filip Pizlo.

        It can be the case that a JSValueReg's CachedRecovery is the source for mutliple
        GPRs. We only store the CachedRecovery in one slot of m_newRegisters to simplify
        the recovery process. This is also done for the case where the recovery source
        and destination are the same GPR.

        In light of this change, snapshot needs to be taught that one CacheRecovery is
        the source for multiple registers.  This is done by using a two step process.
        First find all the argument CachedRecovery's and create a vector mapping all of
        the target GPRs and the source recovery.  Then use that vector to get the
        recovery for each register.

        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot):

2016-12-10  Keith Miller  <keith_miller@apple.com>

        Fix indirect_call if the result type is used.
        https://bugs.webkit.org/show_bug.cgi?id=165727

        Reviewed by Michael Saboff.

        The patchpoint for indirect_call assumed that the callee would be
        in params[0]. This is not the case, however, if the callee returns
        a value.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addCallIndirect):

2016-12-10  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Include WTF, JSC, and WebCore headers automatically to targers using them
        https://bugs.webkit.org/show_bug.cgi?id=165686

        Reviewed by Michael Catanzaro.

        This change reduces duplication of include path lists between modules,
        and reduces future need for fixes like r209605 (broken build because of
        WebCore header suddenly becoming used in WebKit2).

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformJSCOnly.cmake:
        * PlatformMac.cmake:

2016-12-10  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix for the CLOOP after r209653

        * jit/GPRInfo.h:
        Provided a definition for NUMBER_OF_JS_FUNCTION_ARGUMENT_REGISTERS when the JIT is disabled.
        * jit/JITEntryPoints.h:
        Removed #if ENABLE(JIT) protection around contents.

2016-12-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Module namespace object behaves like immutable prototype exotic object
        https://bugs.webkit.org/show_bug.cgi?id=165598

        Reviewed by Mark Lam.

        In the latest ECMA262 draft, the module namespace object behaves like immutable prototype exotic object.
        https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects-setprototypeof-v

        * runtime/JSModuleNamespaceObject.h:

2016-12-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r208791): Assertion in testb3
        https://bugs.webkit.org/show_bug.cgi?id=165651

        Reviewed by Saam Barati.

        Accidentally we always use edx/rdx for the result of UDiv/UMod.
        But it is incorrect. We should use eax/rax for the result of UDiv.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lowerX86UDiv):

2016-12-09  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix for 32 bit builds.

        * dfg/DFGMinifiedNode.h:
        (JSC::DFG::MinifiedNode::argumentIndex): Added a static_cast<unsigned>().

2016-12-09  Michael Saboff  <msaboff@apple.com>

        JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
        https://bugs.webkit.org/show_bug.cgi?id=160355

        Reviewed by Filip Pizlo.

        This patch implements passing JavaScript function arguments in registers for 64 bit platforms.

        The implemented convention follows the ABI conventions for the associated platform.
        The first two arguments are the callee and argument count, the rest of the argument registers
        contain "this" and following argument until all platform argument registers are exhausted.
        Arguments beyond what fit in registers are placed on the stack in the same location as
        before this patch.

        For X86-64 non-Windows platforms, there are 6 argument registers specified in the related ABI.
        ARM64 has had argument registers.  This allows for 4 or 6 parameter values to be placed in
        registers on these respective platforms.  This patch doesn't implement passing arguments in
        registers for 32 bit platform, since most platforms have at most 4 argument registers
        specified and 32 bit platforms use two 32 bit registers/memory locations to store one JSValue.

        The call frame on the stack in unchanged in format and the arguments that are passed in
        registers use the corresponding call frame location as a spill location. Arguments can
        also be passed on the stack. The LLInt, baseline JIT'ed code as well as the initial entry
        from C++ code base arguments on the stack. DFG s and FTL generated code pass arguments
        via registers. All callees can accept arguments either in registers or on the stack.
        The callee is responsible for moving argument to its preferred location.

        The multiple entry points to JavaSCript code is now handled via the JITEntryPoints class and
        related code.  That class now has entries for StackArgsArityCheckNotRequired,
        StackArgsMustCheckArity and for platforms that support registers arguments,
        RegisterArgsArityCheckNotRequired, RegisterArgsMustCheckArity as well as and additional
        RegisterArgsPossibleExtraArgs entry point when extra registers argument are passed.
        This last case is needed to spill those extra arguments to the corresponding call frame
        slots.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3ArgumentRegValue.h:
        * b3/B3Validate.cpp:
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::setUpCall):
        (JSC::CallLinkInfo::argumentsLocation):
        (JSC::CallLinkInfo::argumentsInRegisters):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCPSRethreadingPhase.cpp:
        (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
        (JSC::DFG::CPSRethreadingPhase::specialCaseArguments):
        (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGCommon.h:
        * dfg/DFGDCEPhase.cpp:
        (JSC::DFG::DCEPhase::run):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::initArgumentRegisterValue):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::needsFlushedThis):
        (JSC::DFG::Graph::addImmediateShouldSpeculateInt32):
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::initialize):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        (JSC::DFG::JITCompiler::compileEntry): Deleted.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addJSDirectCall):
        (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord):
        (JSC::DFG::JITCompiler::JSDirectCallRecord::hasSlowCall):
        * dfg/DFGJITFinalizer.cpp:
        (JSC::DFG::JITFinalizer::JITFinalizer):
        (JSC::DFG::JITFinalizer::finalize):
        (JSC::DFG::JITFinalizer::finalizeFunction):
        * dfg/DFGJITFinalizer.h:
        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
        (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlock):
        * dfg/DFGMaximalFlushInsertionPhase.cpp:
        (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
        (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGMinifiedNode.cpp:
        (JSC::DFG::MinifiedNode::fromNode):
        * dfg/DFGMinifiedNode.h:
        (JSC::DFG::belongsInMinifiedGraph):
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::hasVariableAccessData):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::accessesStack):
        (JSC::DFG::Node::setVariableAccessData):
        (JSC::DFG::Node::hasArgumentRegisterIndex):
        (JSC::DFG::Node::argumentRegisterIndex):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOSREntrypointCreationPhase.cpp:
        (JSC::DFG::OSREntrypointCreationPhase::run):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGPredictionInjectionPhase.cpp:
        (JSC::DFG::PredictionInjectionPhase::run):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGPutStackSinkingPhase.cpp:
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::iterator::unlock):
        (JSC::DFG::RegisterBank::unlockAtIndex):
        * dfg/DFGSSAConversionPhase.cpp:
        (JSC::DFG::SSAConversionPhase::run):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::clearGenerationInfo):
        (JSC::DFG::dumpRegisterInfo):
        (JSC::DFG::SpeculativeJIT::dump):
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::setupArgumentRegistersForEntry):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::allocate):
        (JSC::DFG::SpeculativeJIT::spill):
        (JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):
        (JSC::DFG::JSValueOperand::JSValueOperand):
        (JSC::DFG::JSValueOperand::gprUseSpecific):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrEntryThunkGenerator):
        * dfg/DFGVariableEventStream.cpp:
        (JSC::DFG::VariableEventStream::reconstruct):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::allocateRegister):
        (JSC::DFG::VirtualRegisterAllocationPhase::run):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::~JITCode):
        (JSC::FTL::JITCode::initializeEntrypointThunk):
        (JSC::FTL::JITCode::setEntryFor):
        (JSC::FTL::JITCode::addressForCall):
        (JSC::FTL::JITCode::executableAddressAtOffset):
        (JSC::FTL::JITCode::initializeAddressForCall): Deleted.
        (JSC::FTL::JITCode::initializeArityCheckEntrypoint): Deleted.
        * ftl/FTLJITCode.h:
        * ftl/FTLJITFinalizer.cpp:
        (JSC::FTL::JITFinalizer::finalizeFunction):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArgumentRegister):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::argumentRegister):
        (JSC::FTL::Output::argumentRegisterInt32):
        * ftl/FTLOutput.h:
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::update):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitDumbVirtualCall):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::spillArgumentRegistersToFrameBeforePrologue):
        (JSC::AssemblyHelpers::spillArgumentRegistersToFrame):
        (JSC::AssemblyHelpers::fillArgumentRegistersFromFrameBeforePrologue):
        (JSC::AssemblyHelpers::emitPutArgumentToCallFrameBeforePrologue):
        (JSC::AssemblyHelpers::emitPutArgumentToCallFrame):
        (JSC::AssemblyHelpers::emitGetFromCallFrameHeaderBeforePrologue):
        (JSC::AssemblyHelpers::emitGetFromCallFrameArgumentBeforePrologue):
        (JSC::AssemblyHelpers::emitGetPayloadFromCallFrameHeaderBeforePrologue):
        (JSC::AssemblyHelpers::incrementCounter):
        * jit/CachedRecovery.cpp:
        (JSC::CachedRecovery::addTargetJSValueRegs):
        * jit/CachedRecovery.h:
        (JSC::CachedRecovery::gprTargets):
        (JSC::CachedRecovery::setWantedFPR):
        (JSC::CachedRecovery::wantedJSValueRegs):
        (JSC::CachedRecovery::setWantedJSValueRegs): Deleted.
        * jit/CallFrameShuffleData.h:
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        (JSC::CallFrameShuffler::dump):
        (JSC::CallFrameShuffler::tryWrites):
        (JSC::CallFrameShuffler::prepareAny):
        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot):
        (JSC::CallFrameShuffler::addNew):
        (JSC::CallFrameShuffler::initDangerFrontier):
        (JSC::CallFrameShuffler::updateDangerFrontier):
        (JSC::CallFrameShuffler::findDangerFrontierFrom):
        * jit/CallFrameShuffler64.cpp:
        (JSC::CallFrameShuffler::emitDisplace):
        * jit/GPRInfo.h:
        (JSC::JSValueRegs::operator==):
        (JSC::JSValueRegs::operator!=):
        (JSC::GPRInfo::toArgumentIndex):
        (JSC::argumentRegisterFor):
        (JSC::argumentRegisterForCallee):
        (JSC::argumentRegisterForArgumentCount):
        (JSC::argumentRegisterIndexForJSFunctionArgument):
        (JSC::jsFunctionArgumentForArgumentRegister):
        (JSC::argumentRegisterForFunctionArgument):
        (JSC::numberOfRegisterArgumentsFor):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        (JSC::JIT::link):
        (JSC::JIT::compileCTINativeCall): Deleted.
        * jit/JIT.h:
        (JSC::JIT::compileNativeCallEntryPoints):
        * jit/JITCall.cpp:
        (JSC::JIT::compileSetupVarargsFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCode.cpp:
        (JSC::JITCode::execute):
        (JSC::DirectJITCode::DirectJITCode):
        (JSC::DirectJITCode::initializeEntryPoints):
        (JSC::DirectJITCode::addressForCall):
        (JSC::NativeJITCode::addressForCall):
        (JSC::DirectJITCode::initializeCodeRef): Deleted.
        * jit/JITCode.h:
        (JSC::JITCode::executableAddress): Deleted.
        * jit/JITEntryPoints.h: Added.
        (JSC::JITEntryPoints::JITEntryPoints):
        (JSC::JITEntryPoints::entryFor):
        (JSC::JITEntryPoints::setEntryFor):
        (JSC::JITEntryPoints::offsetOfEntryFor):
        (JSC::JITEntryPoints::registerEntryTypeForArgumentCount):
        (JSC::JITEntryPoints::registerEntryTypeForArgumentType):
        (JSC::JITEntryPoints::clearEntries):
        (JSC::JITEntryPoints::operator=):
        (JSC::JITEntryPointsWithRef::JITEntryPointsWithRef):
        (JSC::JITEntryPointsWithRef::codeRef):
        (JSC::argumentsLocationFor):
        (JSC::registerEntryPointTypeFor):
        (JSC::entryPointTypeFor):
        (JSC::thunkEntryPointTypeFor):
        (JSC::JITJSCallThunkEntryPointsWithRef::JITJSCallThunkEntryPointsWithRef):
        (JSC::JITJSCallThunkEntryPointsWithRef::entryFor):
        (JSC::JITJSCallThunkEntryPointsWithRef::setEntryFor):
        (JSC::JITJSCallThunkEntryPointsWithRef::offsetOfEntryFor):
        (JSC::JITJSCallThunkEntryPointsWithRef::clearEntries):
        (JSC::JITJSCallThunkEntryPointsWithRef::codeRef):
        (JSC::JITJSCallThunkEntryPointsWithRef::operator=):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileJITEntryNativeCall):
        (JSC::JIT::privateCompileCTINativeCall): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileJITEntryNativeCall):
        (JSC::JIT::privateCompileCTINativeCall): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::jitEntryNativeCall):
        (JSC::JITThunks::jitEntryNativeConstruct):
        (JSC::JITThunks::jitEntryStub):
        (JSC::JITThunks::jitCallThunkEntryStub):
        (JSC::JITThunks::hostFunctionStub):
        (JSC::JITThunks::ctiNativeCall): Deleted.
        (JSC::JITThunks::ctiNativeConstruct): Deleted.
        * jit/JITThunks.h:
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::emitJumpIfNotInt32):
        (JSC::JSInterfaceJIT::emitLoadInt32):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::argumentRegisters):
        * jit/RegisterSet.h:
        * jit/Repatch.cpp:
        (JSC::linkSlowFor):
        (JSC::revertCall):
        (JSC::unlinkFor):
        (JSC::linkVirtualFor):
        (JSC::linkPolymorphicCall):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
        (JSC::SpecializedThunkJIT::checkJSStringArgument):
        (JSC::SpecializedThunkJIT::linkFailureHere):
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerator.h:
        * jit/ThunkGenerators.cpp:
        (JSC::createRegisterArgumentsSpillEntry):
        (JSC::slowPathFor):
        (JSC::linkCallThunkGenerator):
        (JSC::linkDirectCallThunkGenerator):
        (JSC::linkPolymorphicCallThunkGenerator):
        (JSC::virtualThunkFor):
        (JSC::nativeForGenerator):
        (JSC::nativeCallGenerator):
        (JSC::nativeTailCallGenerator):
        (JSC::nativeTailCallWithoutSavedTagsGenerator):
        (JSC::nativeConstructGenerator):
        (JSC::stringCharLoadRegCall):
        (JSC::charCodeAtThunkGenerator):
        (JSC::charAtThunkGenerator):
        (JSC::fromCharCodeThunkGenerator):
        (JSC::clz32ThunkGenerator):
        (JSC::sqrtThunkGenerator):
        (JSC::floorThunkGenerator):
        (JSC::ceilThunkGenerator):
        (JSC::truncThunkGenerator):
        (JSC::roundThunkGenerator):
        (JSC::expThunkGenerator):
        (JSC::logThunkGenerator):
        (JSC::absThunkGenerator):
        (JSC::imulThunkGenerator):
        (JSC::randomThunkGenerator):
        (JSC::boundThisNoArgsFunctionCallGenerator):
        * jit/ThunkGenerators.h:
        * jsc.cpp:
        (jscmain):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::setUpCall):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::functionForRegisterCallEntryThunkGenerator):
        (JSC::LLInt::functionForStackCallEntryThunkGenerator):
        (JSC::LLInt::functionForRegisterConstructEntryThunkGenerator):
        (JSC::LLInt::functionForStackConstructEntryThunkGenerator):
        (JSC::LLInt::functionForRegisterCallArityCheckThunkGenerator):
        (JSC::LLInt::functionForStackCallArityCheckThunkGenerator):
        (JSC::LLInt::functionForRegisterConstructArityCheckThunkGenerator):
        (JSC::LLInt::functionForStackConstructArityCheckThunkGenerator):
        (JSC::LLInt::functionForCallEntryThunkGenerator): Deleted.
        (JSC::LLInt::functionForConstructEntryThunkGenerator): Deleted.
        (JSC::LLInt::functionForCallArityCheckThunkGenerator): Deleted.
        (JSC::LLInt::functionForConstructArityCheckThunkGenerator): Deleted.
        * llint/LLIntThunks.h:
        * runtime/ArityCheckMode.h:
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        * runtime/ExecutableBase.h:
        (JSC::ExecutableBase::entrypointFor):
        (JSC::ExecutableBase::offsetOfEntryFor):
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        * runtime/JSBoundFunction.cpp:
        (JSC::boundThisNoArgsFunctionCall):
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::finishCreation):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::installCode):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::thunkGeneratorForIntrinsic):
        (JSC::VM::clearCounters):
        (JSC::VM::dumpCounters):
        * runtime/VM.h:
        (JSC::VM::getJITEntryStub):
        (JSC::VM::getJITCallThunkEntryStub):
        (JSC::VM::addressOfCounter):
        (JSC::VM::counterFor):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::importStubGenerator):

2016-12-09  Keith Miller  <keith_miller@apple.com>

        Wasm should support call_indirect
        https://bugs.webkit.org/show_bug.cgi?id=165718

        Reviewed by Filip Pizlo.

        This patch adds support for call_indirect. The basic framework for
        an indirect call is that the module holds a buffer containing a
        stub for each function in the index space. Whenever a function
        needs to do an indirect call it gets a index into that table. In
        order to ensure call_indirect is calling a valid function the
        functionIndexSpace also needs a pointer to a canonicalized
        signature. When making an indirect call, we first check the index
        is in range, then check the signature matches the value we were given.

        This patch also differentiates between FunctionIndexSpaces and
        ImmutableFunctionIndexSpaces. Since we don't know the size of the
        FunctionIndexSpace when we start parsing we need to be able to
        resize the IndexSpace. However, once we have finished parsing all
        the sections we want to prevent an relocation of the function
        index space pointer.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::setupCall):
        * wasm/WasmFormat.h:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser::setErrorMessage):
        (JSC::Wasm::FunctionParser<Context>::FunctionParser):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::takeFunctionIndexSpace):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::addCallIndirect):
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::signatureForFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::offsetOfFunctionIndexSpace):

2016-12-09  JF Bastien  <jfbastien@apple.com>

        WebAssembly: implement data section
        https://bugs.webkit.org/show_bug.cgi?id=165696

        Reviewed by Keith Miller.

        As specified in https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#data-section
        Note that some of the interesting corner cases are ill-defined by the spec: https://github.com/WebAssembly/design/issues/897

        * wasm/WasmFormat.h: segments are what represent sections of memory to initialize (similar to ELF's non-zero intializer data / rodata)
        (JSC::Wasm::Segment::make):
        (JSC::Wasm::Segment::destroy):
        (JSC::Wasm::Segment::byte):
        (JSC::Wasm::Segment::makePtr):
        * wasm/WasmModuleParser.cpp: parse the data section, and prevent a few overflows if a user passes in UINT_MAX (the loops would overflow)
        (JSC::Wasm::ModuleParser::parseType):
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseFunction):
        (JSC::Wasm::ModuleParser::parseExport):
        (JSC::Wasm::ModuleParser::parseCode):
        (JSC::Wasm::ModuleParser::parseData):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate): the only sensible time to initialize the data section is after linking, but before calling start, I test for this but the spec isn't clear it's correct yet

2016-12-09  Karim H  <karim@karhm.com>

        It is okay to turn undefined into null because we are producing values for a
        JSON representation (InspectorValue) and JSON has a `null` value and no
        `undefined` value.
        https://bugs.webkit.org/show_bug.cgi?id=165506

        Reviewed by Darin Adler.

        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r209554-209571): stress/poly-setter-combo crashing
        https://bugs.webkit.org/show_bug.cgi?id=165669

        Reviewed by Geoffrey Garen.
        
        We now rely on objects being zero-filled in a bunch of places, not just concurrent GC.
        So, we need 32-bit to do it too.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):

2016-12-09  Eric Carlson  <eric.carlson@apple.com>

        Annotate MediaStream and WebRTC idl with EnabledAtRuntime flag
        https://bugs.webkit.org/show_bug.cgi?id=165251

        Reviewed by Dean Jackson.

        Based on a patch by Dr Alex Gouaillard <agouaillard@gmail.com>

        * runtime/CommonIdentifiers.h: Add WebRTC and MediaStream identifiers.

2016-12-09  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: implement start function
        https://bugs.webkit.org/show_bug.cgi?id=165150

        Reviewed by Saam Barati.

        * wasm/WasmFormat.h: pass the start function around
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseTable): mark unreachable code
        (JSC::Wasm::ModuleParser::parseGlobal): mark unreachable code
        (JSC::Wasm::ModuleParser::parseStart): mark unreachable code
        (JSC::Wasm::ModuleParser::parseElement): mark unreachable code
        (JSC::Wasm::ModuleParser::parseData): mark unreachable code
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction): NFC: call the new function below
        (JSC::WebAssemblyFunction::call): separate this out so that the start function can use it
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::visitChildren): visit the start function
        (JSC::WebAssemblyModuleRecord::link): handle start function
        (JSC::WebAssemblyModuleRecord::evaluate): call the start function, if present
        * wasm/js/WebAssemblyModuleRecord.h:

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        GC might be forced to look at a nuked object due to ordering of AllocatePropertyStorage, MaterializeNewObject, and PutStructure
        https://bugs.webkit.org/show_bug.cgi?id=165672

        Reviewed by Geoffrey Garen.
        
        We need to make sure that the shady stuff in a property put happens after the
        PutByOffset, since the PutByOffset is the place where we materialize. More generally, we
        should strive to not have any fenceposts between Nodes where a GC would be illegal.
        
        This gets us most of the way there by separating NukeStructureAndSetButterfly from
        [Re]AllocatePropertyStorage. A transitioning put will now look something like:
        
            GetButterfly
            ReallocatePropertyStorage
            PutByOffset
            NukeStructureAndSetButterfly
            PutStructure
        
        Previously the structure would get nuked by ReallocatePropertyStorage, so if we placed
        an object materialization just after it (before the PutByOffset) then any GC that
        completed at that safepoint would encounter an unresolved visit race due to seeing a
        nuked structure. We cannot have nuked structures at safepoints, and this change makes
        sure that we don't - at least until someone tries to sink to the PutStructure. We will
        eventually have to create a combined SetStructureAndButterfly node, but we don't need it
        yet.
        
        This also fixes a goof where the DFG's AllocatePropertyStorage was nulling the structure
        instead of nuking it. This could easily have caused many crashes in GC.
        
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handlePutById):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::emitPutByOffset):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNukeStructureAndSetButterfly):
        (JSC::FTL::DFG::LowerDFGToB3::storageForTransition):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h: Fix a bug - make it possible to turn on concurrent GC optionally again.

2016-12-09  Chris Dumez  <cdumez@apple.com>

        Inline JSCell::toObject()
        https://bugs.webkit.org/show_bug.cgi?id=165679

        Reviewed by Geoffrey Garen.

        Inline JSCell::toObject() as it shows on Speedometer profiles.

        * runtime/JSCell.cpp:
        (JSC::JSCell::toObjectSlow):
        (JSC::JSCell::toObject): Deleted.
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::toObject):

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        Deploy OrdinalNumber in JSC::SourceCode
        https://bugs.webkit.org/show_bug.cgi?id=165687

        Reviewed by Michael Saboff.

        We have a lot of confusion between 1-based and 0-based counting in line
        and column numbers. Let's use OrdinalNumber to clear up the confusion.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitExpressionInfo):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::functionDetails):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::setCode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::Parser):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::firstLine):
        (JSC::SourceCode::startColumn):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::firstLine):
        (JSC::ScriptExecutable::startColumn):
        * tools/CodeProfile.h:
        (JSC::CodeProfile::CodeProfile):

2016-12-09  Saam Barati  <sbarati@apple.com>

        WebAssembly JS API: implement importing and defining Memory
        https://bugs.webkit.org/show_bug.cgi?id=164134

        Reviewed by Keith Miller.

        This patch implements the WebAssembly.Memory object. It refactors
        the code to now associate a Memory with the instance instead of
        the Module.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:
        (functionTestWasmModuleFunctions):
        * runtime/VM.h:
        * shell/CMakeLists.txt:
        * testWasm.cpp: Removed.
        This has bitrotted. I'm removing it.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::sizeOfLoadOp):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::ModuleInformation::~ModuleInformation): Deleted.
        * wasm/WasmFormat.h:
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::Memory):
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::size):
        (JSC::Wasm::Memory::initial):
        (JSC::Wasm::Memory::maximum):
        (JSC::Wasm::Memory::pinnedRegisters): Deleted.
        * wasm/WasmMemoryInformation.cpp: Added.
        (JSC::Wasm::MemoryInformation::MemoryInformation):
        * wasm/WasmMemoryInformation.h: Added.
        (JSC::Wasm::MemoryInformation::MemoryInformation):
        (JSC::Wasm::MemoryInformation::pinnedRegisters):
        (JSC::Wasm::MemoryInformation::initial):
        (JSC::Wasm::MemoryInformation::maximum):
        (JSC::Wasm::MemoryInformation::isImport):
        (JSC::Wasm::MemoryInformation::operator bool):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseMemoryHelper):
        (JSC::Wasm::ModuleParser::parseMemory):
        (JSC::Wasm::ModuleParser::parseExport):
        * wasm/WasmModuleParser.h:
        * wasm/WasmPageCount.h: Added. Implement a new way of describing Wasm
        pages and then asking for how many bytes a quantity of pages is. This
        class also makes it clear when we're talking about bytes or pages.

        (JSC::Wasm::PageCount::PageCount):
        (JSC::Wasm::PageCount::bytes):
        (JSC::Wasm::PageCount::isValid):
        (JSC::Wasm::PageCount::max):
        (JSC::Wasm::PageCount::operator bool):
        (JSC::Wasm::PageCount::operator<):
        (JSC::Wasm::PageCount::operator>):
        (JSC::Wasm::PageCount::operator>=):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::memory): Deleted.
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::hasMemory):
        (JSC::Wasm::Validate::Validate):
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/generateWasmValidateInlinesHeader.py:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::memory):
        (JSC::JSWebAssemblyInstance::setMemory):
        (JSC::JSWebAssemblyInstance::offsetOfImportFunctions):
        (JSC::JSWebAssemblyInstance::allocationSize):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::create):
        (JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):
        (JSC::JSWebAssemblyMemory::buffer):
        (JSC::JSWebAssemblyMemory::visitChildren):
        * wasm/js/JSWebAssemblyMemory.h:
        (JSC::JSWebAssemblyMemory::memory):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        Handle importing and creating of memory according
        to the spec. This also does the needed validation
        of making sure the memory defined in the module
        is compatible with the imported memory.

        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        (JSC::callJSWebAssemblyMemory):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::webAssemblyMemoryProtoFuncBuffer):
        (JSC::WebAssemblyMemoryPrototype::create):
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        * wasm/js/WebAssemblyMemoryPrototype.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::finishCreation):
        (JSC::WebAssemblyModuleRecord::link):

2016-12-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some resources fetched via Fetch API do not have data
        https://bugs.webkit.org/show_bug.cgi?id=165230
        <rdar://problem/29449220>

        Reviewed by Alex Christensen.

        * inspector/protocol/Page.json:
        Add new Fetch Page.ResourceType.

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        TextPosition and OrdinalNumber should be more like idiomatic numbers
        https://bugs.webkit.org/show_bug.cgi?id=165678

        Reviewed by Filip Pizlo.

        Adopt default constructor.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        * API/JSScriptRef.cpp:
        (OpaqueJSScript::OpaqueJSScript):
        * jsc.cpp:
        (functionCheckModuleSyntax):
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceProvider.h:
        (JSC::StringSourceProvider::create):
        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, disable concurrent GC for real.

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, disable concurrent GC while crashes get investigated.

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-09  Filip Pizlo  <fpizlo@apple.com>

        JSSegmentedVariableObject should keep its state private

        Rubber stamped by Michael Saboff.
        
        Its state fields were protected for no reason. They really should be private because
        you have to know to obey a particular concurrency protocol when accessing them.

        * runtime/JSSegmentedVariableObject.h:

2016-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed ARM buildfix after 209570.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::or32): Added.

2016-12-08  JF Bastien  <jfbastien@apple.com>

        WebAssembly: JSC::link* shouldn't need a CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=165591

        Reviewed by Keith Miller.

        Allow linking without a CodeBlock, which WebAssembly's wasm -> JS stubs does. This needs to work for polymorphic and virtual calls. This patch adds corresponding tests for this.

        * assembler/LinkBuffer.cpp:
        (JSC::shouldDumpDisassemblyFor): don't look at the tier option if there isn't a CodeBlock, only look at the global one. This is a WebAssembly function, so the tier information is irrelevant.
        * jit/Repatch.cpp:
        (JSC::isWebAssemblyToJSCallee): this is used in the link* functions below
        (JSC::linkFor):
        (JSC::linkVirtualFor):
        (JSC::linkPolymorphicCall):
        * runtime/Options.h: add an option to change the maximum number of polymorphic calls in stubs from wasm to JS, which will come in handy when we try to tune performance or try merging some of the WebAssembly stubs
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::importStubGenerator): remove the breakpoint since the code now works
        * wasm/js/WebAssemblyToJSCallee.h:

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        MultiPutByOffset should get a barrier if it transitions
        https://bugs.webkit.org/show_bug.cgi?id=165646

        Reviewed by Keith Miller.
        
        Previously, if we knew that we were storing a non-cell but we needed to transition, we
        would fail to add the barrier but the FTL's lowering expected the barrier to be there.
        
        Strictly, we need to "consider" the barrier on MultiPutByOffset if the value is
        possibly a cell or if the MultiPutByOffset may transition. Then "considering" the
        barrier implies checking if the base is possibly old.
        
        But because the barrier is so cheap anyway, this patch implements something safer: we
        just consider the barrier on MultiPutByOffset unconditionally, which opts it out of any
        barrier optimizations other than those based on the predicted state of the base. Those
        optimizations are already sound - for example they use doesGC() to detect safepoints
        and that function correctly predicts when MultiPutByOffset could GC.
        
        Because the barrier optimizations are only a very small speed-up, I think it's great to
        fix bugs by weakening the optimizer without cleverness.

        * dfg/DFGFixupPhase.cpp:
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::assertValidCell):

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Enable concurrent GC on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=165643

        Reviewed by Saam Barati.

        It looks stable enough to enable.

        * assembler/CPU.h:
        (JSC::useGCFences): Deleted.
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::mutatorFence):
        (JSC::AssemblyHelpers::storeButterfly):
        (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly):
        (JSC::AssemblyHelpers::emitInitializeInlineStorage):
        (JSC::AssemblyHelpers::emitInitializeOutOfLineStorage):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Disable collectContinuously if not useConcurrentGC

        Rubber stamped by Geoffrey Garen.

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop build.

        * runtime/JSObject.h:

2016-12-06  Filip Pizlo  <fpizlo@apple.com>

        Concurrent GC should be stable enough to land enabled on X86_64
        https://bugs.webkit.org/show_bug.cgi?id=164990

        Reviewed by Geoffrey Garen.
        
        This fixes a ton of performance and correctness bugs revealed by getting the concurrent GC to
        be stable enough to land enabled.
        
        I had to redo the JSObject::visitChildren concurrency protocol again. This time I think it's
        even more correct than ever!
        
        This is an enormous win on JetStream/splay-latency and Octane/SplayLatency. It looks to be
        mostly neutral on everything else, though Speedometer is showing statistically weak signs of a
        slight regression.

        * API/JSAPIWrapperObject.mm: Added locking.
        (JSC::JSAPIWrapperObject::visitChildren):
        * API/JSCallbackObject.h: Added locking.
        (JSC::JSCallbackObjectData::visitChildren):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): This had a TOCTOU race on shouldJettisonDueToOldAge.
        (JSC::EvalCodeCache::visitAggregate): Moved to EvalCodeCache.cpp.
        * bytecode/DirectEvalCodeCache.cpp: Added. Outlined some functions and made them use locks.
        (JSC::DirectEvalCodeCache::setSlow):
        (JSC::DirectEvalCodeCache::clear):
        (JSC::DirectEvalCodeCache::visitAggregate):
        * bytecode/DirectEvalCodeCache.h:
        (JSC::DirectEvalCodeCache::set):
        (JSC::DirectEvalCodeCache::clear): Deleted.
        * bytecode/UnlinkedCodeBlock.cpp: Added locking.
        (JSC::UnlinkedCodeBlock::visitChildren):
        (JSC::UnlinkedCodeBlock::setInstructions):
        (JSC::UnlinkedCodeBlock::shrinkToFit):
        * bytecode/UnlinkedCodeBlock.h: Added locking.
        (JSC::UnlinkedCodeBlock::addRegExp):
        (JSC::UnlinkedCodeBlock::addConstant):
        (JSC::UnlinkedCodeBlock::addFunctionDecl):
        (JSC::UnlinkedCodeBlock::addFunctionExpr):
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary):
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        * debugger/Debugger.cpp: Use the right delete API.
        (JSC::Debugger::recompileAllJSFunctions):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): Fix a pre-existing bug in ToFunction constant folding.
        * dfg/DFGClobberize.h: Add support for nuking.
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp: Add support for nuking.
        (JSC::DFG::clobbersExitState):
        * dfg/DFGFixupPhase.cpp: Add support for nuking.
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::indexForChecks):
        (JSC::DFG::FixupPhase::originForCheck):
        (JSC::DFG::FixupPhase::speculateForBarrier):
        (JSC::DFG::FixupPhase::insertCheck):
        (JSC::DFG::FixupPhase::fixupChecksInBlock):
        * dfg/DFGSpeculativeJIT.cpp: Add support for nuking.
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        * ftl/FTLLowerDFGToB3.cpp: Add support for nuking.
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::mutatorFence):
        (JSC::FTL::DFG::LowerDFGToB3::nukeStructureAndSetButterfly):
        (JSC::FTL::DFG::LowerDFGToB3::setButterfly): Deleted.
        * heap/CodeBlockSet.cpp: We need to be more careful about the CodeBlockSet workflow during GC, since we will allocate CodeBlocks in eden while collecting.
        (JSC::CodeBlockSet::clearMarksForFullCollection):
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/Heap.cpp: Added code to measure max pauses. Added a better collectContinuously mode.
        (JSC::Heap::lastChanceToFinalize): Stop the collectContinuously thread.
        (JSC::Heap::harvestWeakReferences): Inline SlotVisitor::harvestWeakReferences.
        (JSC::Heap::finalizeUnconditionalFinalizers): Inline SlotVisitor::finalizeUnconditionalReferences.
        (JSC::Heap::markToFixpoint): We need to do some MarkedSpace stuff before every conservative scan, rather than just at the start of marking, so we now call prepareForConservativeScan() before each conservative scan. Also call a less-parallel version of drainInParallel when the mutator is running.
        (JSC::Heap::collectInThread): Inline Heap::prepareForAllocation().
        (JSC::Heap::stopIfNecessarySlow): We need to be more careful about ensuring that we run finalization before and after stopping. Also, we should sanitize stack when stopping the world.
        (JSC::Heap::acquireAccessSlow): Add some optional debug prints.
        (JSC::Heap::handleNeedFinalize): Assert that we are running this when the world is not stopped.
        (JSC::Heap::finalize): Remove the old collectContinuously code.
        (JSC::Heap::requestCollection): We don't need to sanitize stack here anymore.
        (JSC::Heap::notifyIsSafeToCollect): Start the collectContinuously thread. It will request collection 1 KHz.
        (JSC::Heap::prepareForAllocation): Deleted.
        (JSC::Heap::preventCollection): Prevent any new concurrent GCs from being initiated.
        (JSC::Heap::allowCollection):
        (JSC::Heap::forEachSlotVisitor): Allows us to safely iterate slot visitors.
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::writeBarrier): If the 'to' cell is not NewWhite then it could be AnthraciteOrBlack. During a full collection, objects may be AnthraciteOrBlack from a previous GC. Turns out, we don't benefit from this optimization so we can just kill it.
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::buildSnapshot): This needs to use PreventCollectionScope to ensure snapshot soundness.
        * heap/ListableHandler.h:
        (JSC::ListableHandler::isOnList): Useful helper.
        * heap/LockDuringMarking.h:
        (JSC::lockDuringMarking): It's a locker that only locks while we're marking.
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::addBlock): Hold the bitvector lock while resizing.
        * heap/MarkedBlock.cpp: Hold the bitvector lock while accessing the bitvectors while the mutator is running.
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::prepareForConservativeScan): We used to do this in prepareForMarking, but we need to do it before each conservative scan not just before marking.
        (JSC::MarkedSpace::prepareForMarking): Remove the logic moved to prepareForConservativeScan.
        * heap/MarkedSpace.h:
        * heap/PreventCollectionScope.h: Added.
        * heap/SlotVisitor.cpp: Refactored drainFromShared so that we can write a similar function called drainInParallelPassively.
        (JSC::SlotVisitor::updateMutatorIsStopped): Update whether we can use "fast" scanning.
        (JSC::SlotVisitor::mutatorIsStoppedIsUpToDate):
        (JSC::SlotVisitor::didReachTermination):
        (JSC::SlotVisitor::hasWork):
        (JSC::SlotVisitor::drain): This now uses the rightToRun lock to allow the main GC thread to safepoint the workers.
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively): This runs marking with one fewer threads than normal. It's useful for when we have resumed the mutator, since then the mutator has a better chance of getting on a core.
        (JSC::SlotVisitor::addWeakReferenceHarvester):
        (JSC::SlotVisitor::addUnconditionalFinalizer):
        (JSC::SlotVisitor::harvestWeakReferences): Deleted.
        (JSC::SlotVisitor::finalizeUnconditionalFinalizers): Deleted.
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h: Outline stuff.
        (JSC::SlotVisitor::addWeakReferenceHarvester): Deleted.
        (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted.
        * runtime/InferredType.cpp: This needed thread safety.
        (JSC::InferredType::visitChildren): This needs to keep its structure finalizer alive until it runs.
        (JSC::InferredType::set):
        (JSC::InferredType::InferredStructureFinalizer::finalizeUnconditionally):
        * runtime/InferredType.h:
        * runtime/InferredValue.cpp: This needed thread safety.
        (JSC::InferredValue::visitChildren):
        (JSC::InferredValue::ValueCleanup::finalizeUnconditionally):
        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase): Update to use new butterfly API.
        (JSC::JSArray::unshiftCountWithArrayStorage): Update to use new butterfly API.
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::visitChildren): Thread safety.
        * runtime/JSCell.h:
        (JSC::JSCell::setStructureIDDirectly): This is used for nuking the structure.
        (JSC::JSCell::InternalLocker::InternalLocker): Deleted. The cell is now the lock.
        (JSC::JSCell::InternalLocker::~InternalLocker): Deleted. The cell is now the lock.
        * runtime/JSCellInlines.h:
        (JSC::JSCell::structure): Clean this up.
        (JSC::JSCell::lock): The cell is now the lock.
        (JSC::JSCell::tryLock):
        (JSC::JSCell::unlock):
        (JSC::JSCell::isLocked):
        (JSC::JSCell::lockInternalLock): Deleted.
        (JSC::JSCell::unlockInternalLock): Deleted.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren): Thread safety.
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): Thread safety.
        (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory): Thread safety.
        * runtime/JSObject.cpp:
        (JSC::JSObject::markAuxiliaryAndVisitOutOfLineProperties): Factor out this "easy" step of butterfly visiting.
        (JSC::JSObject::visitButterfly): Make this achieve 100% precision about structure-butterfly relationships. This relies on the mutator "nuking" the structure prior to "locked" structure-butterfly transitions.
        (JSC::JSObject::visitChildren): Use the new, nicer API.
        (JSC::JSFinalObject::visitChildren): Use the new, nicer API.
        (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists): Use the new butterfly API.
        (JSC::JSObject::createInitialUndecided): Use the new butterfly API.
        (JSC::JSObject::createInitialInt32): Use the new butterfly API.
        (JSC::JSObject::createInitialDouble): Use the new butterfly API.
        (JSC::JSObject::createInitialContiguous): Use the new butterfly API.
        (JSC::JSObject::createArrayStorage): Use the new butterfly API.
        (JSC::JSObject::convertUndecidedToContiguous): Use the new butterfly API.
        (JSC::JSObject::convertUndecidedToArrayStorage): Use the new butterfly API.
        (JSC::JSObject::convertInt32ToArrayStorage): Use the new butterfly API.
        (JSC::JSObject::convertDoubleToContiguous): Use the new butterfly API.
        (JSC::JSObject::convertDoubleToArrayStorage): Use the new butterfly API.
        (JSC::JSObject::convertContiguousToArrayStorage): Use the new butterfly API.
        (JSC::JSObject::increaseVectorLength): Use the new butterfly API.
        (JSC::JSObject::shiftButterflyAfterFlattening): Use the new butterfly API.
        * runtime/JSObject.h:
        (JSC::JSObject::setButterfly): This now does all of the fences. Only use this when you are not also transitioning the structure or the structure's lastOffset.
        (JSC::JSObject::nukeStructureAndSetButterfly): Use this when doing locked structure-butterfly transitions.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectWithoutTransition): Use the newly factored out API.
        (JSC::JSObject::prepareToPutDirectWithoutTransition): Factor this out!
        (JSC::JSObject::putDirectInternal): Use the newly factored out API.
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::finishCreation): Locks!
        (JSC::JSPropertyNameEnumerator::visitChildren): Locks!
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::visitChildren): Locks!
        * runtime/JSString.cpp:
        (JSC::JSString::visitChildren): Thread safety.
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::visitChildren): Thread safety.
        * runtime/Options.cpp: For now we disable concurrent GC on not-X86_64.
        (JSC::recomputeDependentOptions):
        * runtime/Options.h: Change the default max GC parallelism to 8. I don't know why it was still 7.
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::stackTracesAsJSON): This needs to defer GC before grabbing its lock.
        * runtime/SparseArrayValueMap.cpp: This needed thread safety.
        (JSC::SparseArrayValueMap::add):
        (JSC::SparseArrayValueMap::remove):
        (JSC::SparseArrayValueMap::visitChildren):
        * runtime/SparseArrayValueMap.h:
        * runtime/Structure.cpp: This had a race between addNewPropertyTransition and visitChildren.
        (JSC::Structure::Structure):
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::add): Help out with nuking support - the m_offset needs to play along.
        (JSC::Structure::visitChildren):
        * runtime/Structure.h: Make some useful things public - like the notion of a lastOffset.
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren): Thread safety!
        * runtime/StructureChain.h: Thread safety!
        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::allocateID): Ensure that we don't get nuked IDs.
        * runtime/StructureIDTable.h: Add the notion of a nuked ID! It's a bit that the runtime never sees except during specific shady actions like locked structure-butterfly transitions. "Nuking" tells the GC to steer clear and rescan once we fire the barrier.
        (JSC::nukedStructureIDBit):
        (JSC::nuke):
        (JSC::isNuked):
        (JSC::decontaminate):
        * runtime/StructureInlines.h:
        (JSC::Structure::hasIndexingHeader): Better API.
        (JSC::Structure::add):
        * runtime/VM.cpp: Better GC interaction.
        (JSC::VM::ensureWatchdog):
        (JSC::VM::deleteAllLinkedCode):
        (JSC::VM::deleteAllCode):
        * runtime/VM.h:
        (JSC::VM::getStructure): Why wasn't this always an API!
        * runtime/WebAssemblyExecutable.cpp:
        (JSC::WebAssemblyExecutable::visitChildren): Thread safety.

2016-12-08  Filip Pizlo  <fpizlo@apple.com>

        Enable SharedArrayBuffer, remove the flag
        https://bugs.webkit.org/show_bug.cgi?id=165614

        Rubber stamped by Geoffrey Garen.

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

2016-12-08  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: wire up Instance imports
        https://bugs.webkit.org/show_bug.cgi?id=165118

        Reviewed by Saam Barati.

        Change a bunch of the WebAssembly object model, and pipe the
        necessary changes to be able to call JS imports from
        WebAssembly. This will make it easier to call_indirect, and
        unblock many other missing features.

        As a follow-up I need to teach JSC::linkFor to live without a
        CodeBlock: wasm doesn't have one and the IC patching is sad. We'll
        switch on the callee (or its type?) and then use that as the owner
        (because the callee is alive if the instance is alive, ditto
        module, and module owns the CallLinkInfo).

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * interpreter/CallFrame.h:
        (JSC::ExecState::callee): give access to the callee as a JSCell
        * jit/RegisterSet.cpp: dead code from previous WebAssembly implementation
        * jsc.cpp:
        (callWasmFunction):
        (functionTestWasmModuleFunctions):
        * runtime/JSCellInlines.h:
        (JSC::ExecState::vm): check callee instead of jsCallee: wasm only has a JSCell and not a JSObject
        * runtime/VM.cpp:
        (JSC::VM::VM): store the "top" WebAssembly.Instance on entry to WebAssembly (and restore the previous one on exit)
        * runtime/VM.h:
        * testWasm.cpp:
        (runWasmTests):
        * wasm/JSWebAssembly.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator): pass unlinked calls around to shorten their lifetime: they're ony needed until the Plan is done
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::parseAndCompile): also pass in the function index space, so that imports can be signature-checked along with internal functions
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmBinding.cpp: Added.
        (JSC::Wasm::importStubGenerator): stubs from wasm to JS
        * wasm/WasmBinding.h: Copied from Source/JavaScriptCore/wasm/WasmValidate.h.
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::setupFrameInPrologue):
        * wasm/WasmFormat.h: fix the object model
        (JSC::Wasm::CallableFunction::CallableFunction):
        * wasm/WasmFunctionParser.h: simplify some of the failure condition checks
        (JSC::Wasm::FunctionParser<Context>::FunctionParser): need function index space, not just internal functions
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp: early-create some of the structures which will be needed later
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseFunction):
        (JSC::Wasm::ModuleParser::parseMemory):
        (JSC::Wasm::ModuleParser::parseExport):
        (JSC::Wasm::ModuleParser::parseCode):
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::functionIndexSpace):
        (JSC::Wasm::ModuleParser::functionLocations):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::consumeUTF8String):
        * wasm/WasmPlan.cpp: pass around the wasm objects at the right time, reducing their lifetime and making it easier to pass them around when needed
        (JSC::Wasm::Plan::run):
        (JSC::Wasm::Plan::initializeCallees):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::exports):
        (JSC::Wasm::Plan::internalFunctionCount):
        (JSC::Wasm::Plan::jsToWasmEntryPointForFunction):
        (JSC::Wasm::Plan::takeModuleInformation):
        (JSC::Wasm::Plan::takeCallLinkInfos):
        (JSC::Wasm::Plan::takeWasmToJSStubs):
        (JSC::Wasm::Plan::takeFunctionIndexSpace):
        * wasm/WasmValidate.cpp: check function index space instead of only internal functions
        (JSC::Wasm::Validate::addCall):
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h:
        * wasm/js/JSWebAssemblyCallee.cpp:
        (JSC::JSWebAssemblyCallee::finishCreation):
        * wasm/js/JSWebAssemblyCallee.h:
        (JSC::JSWebAssemblyCallee::create):
        (JSC::JSWebAssemblyCallee::jsToWasmEntryPoint):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h: hold the import functions off the end of the Instance
        (JSC::JSWebAssemblyInstance::importFunction):
        (JSC::JSWebAssemblyInstance::importFunctions):
        (JSC::JSWebAssemblyInstance::setImportFunction):
        (JSC::JSWebAssemblyInstance::offsetOfImportFunctions):
        (JSC::JSWebAssemblyInstance::offsetOfImportFunction):
        (JSC::JSWebAssemblyInstance::allocationSize):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        (JSC::JSWebAssemblyModule::visitChildren):
        * wasm/js/JSWebAssemblyModule.h: hold the link call info, the import function stubs, and the function index space
        (JSC::JSWebAssemblyModule::signatureForFunctionIndexSpace):
        (JSC::JSWebAssemblyModule::importCount):
        (JSC::JSWebAssemblyModule::calleeFromFunctionIndexSpace):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction): set top Instance on VM
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::instance):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance): handle function imports
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule): generate the stubs for import functions
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyToJSCallee.cpp: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyCallee.cpp.
        (JSC::WebAssemblyToJSCallee::create): dummy JSCell singleton which lives on the VM, and is put as the callee in the import stub's frame to identified it when unwinding
        (JSC::WebAssemblyToJSCallee::createStructure):
        (JSC::WebAssemblyToJSCallee::WebAssemblyToJSCallee):
        (JSC::WebAssemblyToJSCallee::finishCreation):
        (JSC::WebAssemblyToJSCallee::destroy):
        * wasm/js/WebAssemblyToJSCallee.h: Copied from Source/JavaScriptCore/wasm/WasmB3IRGenerator.h.

2016-12-08  Mark Lam  <mark.lam@apple.com>

        Enable JSC restricted options by default in the jsc shell.
        https://bugs.webkit.org/show_bug.cgi?id=165615

        Reviewed by Keith Miller.

        The jsc shell is only used for debugging and development testing.  We should
        allow it to use restricted options like JSC_useDollarVM even for release builds.

        * jsc.cpp:
        (jscmain):
        * runtime/Options.cpp:
        (JSC::Options::enableRestrictedOptions):
        (JSC::Options::isAvailable):
        (JSC::allowRestrictedOptions): Deleted.
        * runtime/Options.h:

2016-12-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209489.

        Likely caused large regressions on JetStream, Sunspider and
        Speedometer

        Reverted changeset:

        "Add system trace points for JavaScript VM entry/exit"
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209489

2016-12-08  Keith Miller  <keith_miller@apple.com>

        Move LEB tests to API tests
        https://bugs.webkit.org/show_bug.cgi?id=165586

        Reviewed by Saam Barati.

        Delete old stuff.

        * testWasm.cpp:
        (printUsageStatement):
        (CommandLine::parseArguments):
        (main):
        (runLEBTests): Deleted.

2016-12-07  JF Bastien  <jfbastien@apple.com>

        Cleanup WebAssembly's RETURN_IF_EXCEPTION
        https://bugs.webkit.org/show_bug.cgi?id=165595

        Reviewed by Filip Pizlo.

        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2016-12-07  Geoffrey Garen  <ggaren@apple.com>

        Renamed SourceCode members to match their accessor names
        https://bugs.webkit.org/show_bug.cgi?id=165573

        Reviewed by Keith Miller.

        startChar => startOffset
        endChar => endOffset

        * parser/UnlinkedSourceCode.h:
        (JSC::UnlinkedSourceCode::UnlinkedSourceCode):
        (JSC::UnlinkedSourceCode::view):
        (JSC::UnlinkedSourceCode::startOffset):
        (JSC::UnlinkedSourceCode::endOffset):
        (JSC::UnlinkedSourceCode::length):

2016-12-07  Keith Miller  <keith_miller@apple.com>

        Add more missing trivial wasm ops.
        https://bugs.webkit.org/show_bug.cgi?id=165564

        Reviewed by Geoffrey Garen.

        This patch adds the nop, drop, and tee_local opcodes.
        It also fixes an issue where we were not generating
        the proper enums for the grow_memory and current_memory
        opcodes.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/generateWasmOpsHeader.py:

2016-12-07  Geoffrey Garen  <ggaren@apple.com>

        Renamed source => parentSource
        https://bugs.webkit.org/show_bug.cgi?id=165570

        Reviewed by Keith Miller.

        For less confuse.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):

2016-12-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop translate phase in module loader
        https://bugs.webkit.org/show_bug.cgi?id=164861

        Reviewed by Saam Barati.

        Originally, this "translate" phase was introduced to the module loader.
        However, recent rework discussion[1] starts dropping this phase.
        And this "translate" phase is meaningless in the browser side module loader
        since this phase originally mimics the node.js's translation hook (like,
        transpiling CoffeeScript source to JavaScript).

        This "translate" phase is not necessary for the exposed HTML5
        <script type="module"> tag right now. Once the module loader pipeline is
        redefined and specified, we need to update the current loader anyway.
        So dropping "translate" phase right now is OK.

        This a bit simplifies the current module loader pipeline.

        [1]: https://github.com/whatwg/loader/issues/147

        * builtins/ModuleLoaderPrototype.js:
        (newRegistryEntry):
        (fulfillFetch):
        (requestFetch):
        (requestInstantiate):
        (provide):
        (fulfillTranslate): Deleted.
        (requestTranslate): Deleted.
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * jsc.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::translate): Deleted.
        * runtime/JSModuleLoader.h:
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeInstantiate):
        (JSC::moduleLoaderPrototypeTranslate): Deleted.

2016-12-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add ability to distinguish if a Script was parsed as a module
        https://bugs.webkit.org/show_bug.cgi?id=164900
        <rdar://problem/29323817>

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didParseSource):
        * inspector/protocol/Debugger.json:
        Add an optional event parameter to distinguish if a script was a module or not.

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Add system trace points for JavaScript VM entry/exit
        https://bugs.webkit.org/show_bug.cgi?id=165550

        Reviewed by Tim Horton.

        Add trace points for entry/exit into/out of the JS VM.

        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::VMEntryScope):
        (JSC::VMEntryScope::~VMEntryScope):

2016-12-06  Keith Miller  <keith_miller@apple.com>

        Add support for truncation operators
        https://bugs.webkit.org/show_bug.cgi?id=165519

        Reviewed by Geoffrey Garen.

        This patch adds initial support for truncation operators. The current patch
        does range based out of bounds checking, in the future we should use system
        register flags on ARM and other tricks on X86 improve the performance of
        these opcodes.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerARM64::truncateDoubleToInt64):
        (JSC::MacroAssemblerARM64::truncateDoubleToUint64):
        (JSC::MacroAssemblerARM64::truncateFloatToInt32):
        (JSC::MacroAssemblerARM64::truncateFloatToUint32):
        (JSC::MacroAssemblerARM64::truncateFloatToInt64):
        (JSC::MacroAssemblerARM64::truncateFloatToUint64):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::truncateFloatToInt32):
        (JSC::MacroAssemblerX86Common::truncateDoubleToUint32): Deleted.
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::truncateDoubleToUint32):
        (JSC::MacroAssemblerX86_64::truncateDoubleToInt64):
        (JSC::MacroAssemblerX86_64::truncateDoubleToUint64):
        (JSC::MacroAssemblerX86_64::truncateFloatToUint32):
        (JSC::MacroAssemblerX86_64::truncateFloatToInt64):
        (JSC::MacroAssemblerX86_64::truncateFloatToUint64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::cvttss2si_rr):
        (JSC::X86Assembler::cvttss2siq_rr):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncSF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncSF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncUF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncUF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncSF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncSF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):

2016-12-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused and mostly untested Page domain commands and events
        https://bugs.webkit.org/show_bug.cgi?id=165507

        Reviewed by Brian Burg.

        Remove unused and unsupported commands and events.

          - Page.setDocumentContent
          - Page.getScriptExecutionStatus
          - Page.setScriptExecutionDisabled
          - Page.handleJavaScriptDialog
          - Page.javascriptDialogOpening
          - Page.javascriptDialogClosed
          - Page.scriptsEnabled

        * inspector/protocol/Page.json:

2016-12-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Merge PromiseReactions
        https://bugs.webkit.org/show_bug.cgi?id=165526

        Reviewed by Sam Weinig.

        Our promise implementation has two arrays per Promise; promiseFulfillReactions and promiseRejectReactions.
        And everytime we call `promise.then`, we create two promise reactions for fullfill and reject.
        However, these two reactions and the arrays for reactions can be merged into one array and one reaction.
        It reduces the unnecessary object allocations.

        No behavior change.

        * builtins/BuiltinNames.h:
        * builtins/PromiseOperations.js:
        (globalPrivate.newPromiseReaction):
        (globalPrivate.triggerPromiseReactions):
        (globalPrivate.rejectPromise):
        (globalPrivate.fulfillPromise):
        (globalPrivate.promiseReactionJob):
        (globalPrivate.initializePromise):
        * builtins/PromisePrototype.js:
        (then):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::finishCreation):

2016-12-06  Mark Lam  <mark.lam@apple.com>

        GetByID IC is wrongly unwrapping the global proxy this value for getter/setters.
        https://bugs.webkit.org/show_bug.cgi?id=165401

        Reviewed by Saam Barati.

        When the this value for a property access is the JS global and that property
        access is via a GetterSetter, the underlying getter / setter functions would
        expect the this value they receive to be the JSProxy instance instead of the
        JSGlobalObject.  This is consistent with how the LLINT and runtime code behaves.
        The IC code should behave the same way.

        Also added some ASSERTs to document invariants in the code, and help detect
        bugs sooner if the code gets changed in a way that breaks those invariants in
        the future.

        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):

2016-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        DumpRenderTree ASSERT in JSC::ExecutableBase::isHostFunction seen on bots
        https://bugs.webkit.org/show_bug.cgi?id=165497
        <rdar://problem/29538973>

        Reviewed by Saam Barati.

        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        Defer collection when extracting and processing the samples to avoid
        any objects held by the samples from getting collected while processing.
        This is because while processing we call into functions that can
        allocate and we must prevent those functions from syncing with the
        GC thread which may collect other sample data yet to be processed.

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-12-06  Saam Barati  <sbarati@apple.com>

        Remove old Wasm object model
        https://bugs.webkit.org/show_bug.cgi?id=165481

        Reviewed by Keith Miller and Mark Lam.

        It's confusing to see code that consults both the old
        Wasm object model alongside the new one. The old object
        model is not a thing, and it's not being used. Let's
        remove it now to prevent further confusion.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::replacement):
        (JSC::CodeBlock::computeCapabilityLevel):
        (JSC::CodeBlock::updateAllPredictions):
        * bytecode/CodeBlock.h:
        * bytecode/WebAssemblyCodeBlock.cpp: Removed.
        * bytecode/WebAssemblyCodeBlock.h: Removed.
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::isSupportedForInlining):
        * interpreter/Interpreter.cpp:
        (JSC::GetStackTraceFunctor::operator()):
        (JSC::UnwindFunctor::operator()):
        (JSC::isWebAssemblyExecutable): Deleted.
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * runtime/ExecutableBase.cpp:
        (JSC::ExecutableBase::clearCode):
        * runtime/ExecutableBase.h:
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSFunctionInlines.h:
        (JSC::JSFunction::isBuiltinFunction):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * runtime/WebAssemblyExecutable.cpp: Removed.
        * runtime/WebAssemblyExecutable.h: Removed.

2016-12-06  JF Bastien  <jfbastien@apple.com>

        PureNaN: fix typo
        https://bugs.webkit.org/show_bug.cgi?id=165493

        Reviewed by Mark Lam.

        * runtime/PureNaN.h:

2016-12-06  Mark Lam  <mark.lam@apple.com>

        Introduce the concept of Immutable Prototype Exotic Objects to comply with the spec.
        https://bugs.webkit.org/show_bug.cgi?id=165227
        <rdar://problem/29442665>

        Reviewed by Saam Barati.

        * runtime/JSObject.cpp:
        (JSC::JSObject::setPrototypeWithCycleCheck):
        - This is where we check for immutable prototype exotic objects and refuse to set
          the prototype if needed.
          See https://tc39.github.io/ecma262/#sec-immutable-prototype-exotic-objects.

        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::isImmutablePrototypeExoticObject):
        * runtime/Structure.h:
        - Add flag for declaring immutable prototype exotic objects.

        * runtime/ObjectPrototype.h:
        - Declare that Object.prototype is an immutable prototype exotic object.
          See https://tc39.github.io/ecma262/#sec-properties-of-the-object-prototype-object.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorSetPrototypeOf):
        - Use better error messages.

2016-12-04  Darin Adler  <darin@apple.com>

        Use ASCIICType more, and improve it a little bit
        https://bugs.webkit.org/show_bug.cgi?id=165360

        Reviewed by Sam Weinig.

        * inspector/InspectorValues.cpp:
        (Inspector::readHexDigits): Use isASCIIHexDigit.
        (Inspector::hextoInt): Deleted.
        (decodeString): Use toASCIIHexValue.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseDigit): Use isASCIIDigit, isASCIIUpper, and isASCIILower.

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow): Use isASCIIDigit.

2016-12-06  Csaba Osztrogonác  <ossy@webkit.org>

        Add storeFence support for ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=164733

        Reviewed by Saam Barati.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::dmbISHST): Added.
        * assembler/ARMv7Assembler.h: Typo fixed, DMB has only T1 encoding.
        (JSC::ARMv7Assembler::dmbSY):
        (JSC::ARMv7Assembler::dmbISHST): Added.
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::storeFence):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::storeFence):

2016-12-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: remove ASSERT from InspectorDebuggerAgent::derefAsyncCallData
        https://bugs.webkit.org/show_bug.cgi?id=165413
        <rdar://problem/29517587>

        Reviewed by Brian Burg.

        DOMTimer::removeById can call into InspectorInstrumentation with an
        invalid identifier, so don't assert that async call data exists.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::derefAsyncCallData):

2016-12-05  Geoffrey Garen  <ggaren@apple.com>

        Fixed a bug in my last patch.

        Unreviewed.

        * bytecode/UnlinkedFunctionExecutable.h: Restore the conversion to
        one-based counting.

2016-12-05  Geoffrey Garen  <ggaren@apple.com>

        Moved start and end column linking into helper functions
        https://bugs.webkit.org/show_bug.cgi?id=165422

        Reviewed by Sam Weinig.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:

2016-12-05  Mark Lam  <mark.lam@apple.com>

        Fix JSC files so that we can build a release build with NDEBUG #undef'ed.
        https://bugs.webkit.org/show_bug.cgi?id=165409

        Reviewed by Keith Miller.

        This allows us to run a release build with DEBUG ASSERTs enabled.

        * bytecode/BytecodeLivenessAnalysis.cpp:
        * bytecode/UnlinkedEvalCodeBlock.cpp:
        * bytecode/UnlinkedFunctionCodeBlock.cpp:
        * bytecode/UnlinkedModuleProgramCodeBlock.cpp:
        * bytecode/UnlinkedProgramCodeBlock.cpp:
        * runtime/EvalExecutable.cpp:

2016-12-05  Geoffrey Garen  <ggaren@apple.com>

        Renamed source => parentSource
        https://bugs.webkit.org/show_bug.cgi?id=165419

        Reviewed by Saam Barati.

        This should help clarify that a FunctionExecutable holds the source
        code to its *parent* scope, and not its own SourceCode.

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:

2016-12-05  Geoffrey Garen  <ggaren@apple.com>

        ScriptExecutable should not contain a copy of firstLine and startColumn
        https://bugs.webkit.org/show_bug.cgi?id=165415

        Reviewed by Keith Miller.

        We already have this data in SourceCode.

        It's super confusing to have two copies of this data, where one is
        allowed to mutate. In reality, your line and column number never change.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        * runtime/CodeCache.h:
        (JSC::generateUnlinkedCodeBlock):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/FunctionExecutable.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::newCodeBlockFor):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::firstLine):
        (JSC::ScriptExecutable::startColumn):
        (JSC::ScriptExecutable::recordParse):

2016-12-05  Caitlin Potter  <caitp@igalia.com>

        [JSC] report unexpected token when "async" is followed by identifier 
        https://bugs.webkit.org/show_bug.cgi?id=165091

        Reviewed by Mark Lam.

        Report a SyntaxError, in order to report correct error in contexts
        an async ArrowFunction cannot occur. Also corrects errors in comment
        describing JSTokenType bitfield, which was added in r209293.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/ParserTokens.h:

2016-12-05  Keith Miller  <keith_miller@apple.com>

        Add Wasm i64 to i32 conversion.
        https://bugs.webkit.org/show_bug.cgi?id=165378

        Reviewed by Filip Pizlo.

        It turns out the wrap operation is just B3's Trunc.

        * wasm/wasm.json:

2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=165351

        Reviewed by Yusuke Suzuki.

        Some versions of Safari expect:

            Inspector::BackendDispatcher::reportProtocolError(WTF::Optional<long>, Inspector::BackendDispatcher::CommonErrorCode, WTF::String const&)
        
        Which we had updated to use std::optional. Expose a version with the original
        Symbol for these Safaris. This stub will just call through to the new version.

        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcher.h:

2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>

        Add __STDC_FORMAT_MACROS before inttypes.h is included
        https://bugs.webkit.org/show_bug.cgi?id=165374

        We need formatting macros like PRIu64 to be available in all places where
        inttypes.h header is used. All these usages get inttypes.h definitions
        via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
        macros are not used anymore since r185129.

        This patch fixes multiple build errors with MinGW and reduces number of
        independent __STDC_FORMAT_MACROS uses in the code base.

        Reviewed by Darin Adler.

        * disassembler/ARM64/A64DOpcode.cpp: Removed __STDC_FORMAT_MACROS
        because it is obtained via Assertions.h now
        * disassembler/ARM64Disassembler.cpp: Ditto.

2016-12-04  Keith Miller  <keith_miller@apple.com>

        Add support for Wasm ctz and popcnt
        https://bugs.webkit.org/show_bug.cgi?id=165369

        Reviewed by Saam Barati.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::countTrailingZeros32):
        (JSC::MacroAssemblerARM64::countTrailingZeros64):
        * assembler/MacroAssemblerX86Common.cpp:
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::countTrailingZeros32):
        (JSC::MacroAssemblerX86Common::supportsBMI1):
        (JSC::MacroAssemblerX86Common::ctzAfterBsf):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::countTrailingZeros64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::tzcnt_rr):
        (JSC::X86Assembler::tzcntq_rr):
        (JSC::X86Assembler::bsf_rr):
        (JSC::X86Assembler::bsfq_rr):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Ctz>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Ctz>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Popcnt>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Popcnt>):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):

2016-12-04  Saam Barati  <sbarati@apple.com>

        We should have a Wasm callee
        https://bugs.webkit.org/show_bug.cgi?id=165163

        Reviewed by Keith Miller.

        This patch adds JSWebAssemblyCallee and stores it into the
        callee slot in the call frame as part of the prologue of a
        wasm function. This is the first step in implementing
        unwinding from/through wasm frames. We will use the callee
        to identify that a machine frame belongs to wasm code.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:
        (callWasmFunction):
        (functionTestWasmModuleFunctions):
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSGlobalObject.cpp:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/JSWebAssembly.h:
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::setupFrameInPrologue):
        * wasm/WasmFormat.h:
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::initializeCallees):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::compiledFunction):
        (JSC::Wasm::Plan::getCompiledFunctions): Deleted.
        * wasm/js/JSWebAssemblyCallee.cpp: Added.
        (JSC::JSWebAssemblyCallee::JSWebAssemblyCallee):
        (JSC::JSWebAssemblyCallee::finishCreation):
        (JSC::JSWebAssemblyCallee::destroy):
        * wasm/js/JSWebAssemblyCallee.h: Added.
        (JSC::JSWebAssemblyCallee::create):
        (JSC::JSWebAssemblyCallee::createStructure):
        (JSC::JSWebAssemblyCallee::jsEntryPoint):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        (JSC::JSWebAssemblyModule::visitChildren):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::moduleInformation):
        (JSC::JSWebAssemblyModule::callee):
        (JSC::JSWebAssemblyModule::callees):
        (JSC::JSWebAssemblyModule::offsetOfCallees):
        (JSC::JSWebAssemblyModule::allocationSize):
        (JSC::JSWebAssemblyModule::compiledFunctions): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::create):
        (JSC::WebAssemblyFunction::visitChildren):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyFunction.h:
        (JSC::WebAssemblyFunction::webAssemblyCallee):
        (JSC::WebAssemblyFunction::instance):
        (JSC::WebAssemblyFunction::signature):
        (JSC::CallableWebAssemblyFunction::CallableWebAssemblyFunction): Deleted.
        (JSC::WebAssemblyFunction::webAssemblyFunctionCell): Deleted.
        * wasm/js/WebAssemblyFunctionCell.cpp:
        (JSC::WebAssemblyFunctionCell::create): Deleted.
        (JSC::WebAssemblyFunctionCell::WebAssemblyFunctionCell): Deleted.
        (JSC::WebAssemblyFunctionCell::destroy): Deleted.
        (JSC::WebAssemblyFunctionCell::createStructure): Deleted.
        * wasm/js/WebAssemblyFunctionCell.h:
        (JSC::WebAssemblyFunctionCell::function): Deleted.
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2016-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Assertion Failures breakpoint should respect global Breakpoints enabled setting
        https://bugs.webkit.org/show_bug.cgi?id=165277
        <rdar://problem/29467098>

        Reviewed by Mark Lam.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
        Check that breakpoints are active before pausing.

2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Refactor SymbolImpl layout
        https://bugs.webkit.org/show_bug.cgi?id=165247

        Reviewed by Darin Adler.

        Use SymbolImpl::{create, createNullSymbol} instead.

        * runtime/PrivateName.h:
        (JSC::PrivateName::PrivateName):

2016-12-03  JF Bastien  <jfbastien@apple.com>

        WebAssembly: update binary format to 0xD version
        https://bugs.webkit.org/show_bug.cgi?id=165345

        Reviewed by Keith Miller.

        As described in the following PR: https://github.com/WebAssembly/design/pull/836
        Originally committed in r209175, reverted in r209242, and fixed in r209284.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::zeroForType):
        (JSC::Wasm::B3IRGenerator::addConstant):
        (JSC::Wasm::createJSWrapper):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::marshallArgument):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::toString): Deleted.
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValueType):
        (JSC::Wasm::toB3Type): Deleted.
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parse):
        (JSC::Wasm::ModuleParser::parseType):
        * wasm/WasmModuleParser.h:
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::parseResultType):
        * wasm/generateWasm.py:
        (Wasm.__init__):
        * wasm/generateWasmOpsHeader.py:
        (cppMacro):
        (typeMacroizer):
        (opcodeMacroizer):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/wasm.json:

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Add Wasm copysign
        https://bugs.webkit.org/show_bug.cgi?id=165355

        Reviewed by Filip Pizlo.

        This patch also makes two other important changes:

        1) allows for i64 constants in the B3 generator language.
        2) Fixes a bug with F64ConvertUI64 where the operation returned a Float instead
           of a Double in B3.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        (CodeGenerator.generateOpcode):
        (generateConstCode):
        (generateI32ConstCode): Deleted.
        * wasm/wasm.json:

2016-12-03  Commit Queue  <commit-queue@webkit.org>

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

        broke the build (Requested by smfr on #webkit).

        Reverted changeset:

        "Add Wasm copysign"
        https://bugs.webkit.org/show_bug.cgi?id=165355
        http://trac.webkit.org/changeset/209298

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Add Wasm copysign
        https://bugs.webkit.org/show_bug.cgi?id=165355

        Reviewed by Filip Pizlo.

        This patch also makes two other important changes:

        1) allows for i64 constants in the B3 generator language.
        2) Fixes a bug with F64ConvertUI64 where the operation returned a Float instead
           of a Double in B3.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        (CodeGenerator.generateOpcode):
        (generateConstCode):
        (generateI32ConstCode): Deleted.
        * wasm/wasm.json:

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix git having a breakdown over trying to reland a rollout.

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Add Wasm floating point nearest and trunc
        https://bugs.webkit.org/show_bug.cgi?id=165339

        Reviewed by Saam Barati.

        This patch also allows any wasm primitive type to be passed as a
        string.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::nearestIntDouble):
        (JSC::MacroAssemblerARM64::nearestIntFloat):
        (JSC::MacroAssemblerARM64::truncDouble):
        (JSC::MacroAssemblerARM64::truncFloat):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::nearestIntDouble):
        (JSC::MacroAssemblerX86Common::nearestIntFloat):
        * jsc.cpp:
        (box):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Trunc>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Trunc>):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):

2016-12-02  Caitlin Potter  <caitp@igalia.com>

[JSC] add additional bit to JSTokenType bitfield
        https://bugs.webkit.org/show_bug.cgi?id=165091

        Reviewed by Geoffrey Garen.

        Avoid overflow which causes keyword tokens to be treated as unary
        tokens now that "async" is tokenized as a keyword, by granting an
        additional 64 bits to be occupied by token IDs.

        * parser/ParserTokens.h:

2016-12-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting
        https://bugs.webkit.org/show_bug.cgi?id=164492

        Reviewed by Dan Bernstein.

        * Configurations/JavaScriptCore.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to
        com.apple.$(PRODUCT_NAME:rfc1034identifier).
        * Info.plist: Changed CFBundleIdentifier's value from com.apple.${PRODUCT_NAME} to
        ${PRODUCT_BUNDLE_IDENTIFIER}.

2016-12-02  JF Bastien  <jfbastien@apple.com>

        WebAssembly: mark WasmOps.h as private
        https://bugs.webkit.org/show_bug.cgi?id=165335

        Reviewed by Mark Lam.

        * JavaScriptCore.xcodeproj/project.pbxproj: WasmOps.h will be used by non-JSC and should therefore be private

2016-12-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209275 and r209276.
        https://bugs.webkit.org/show_bug.cgi?id=165348

        "broke the arm build" (Requested by keith_miller on #webkit).

        Reverted changesets:

        "Add Wasm floating point nearest and trunc"
        https://bugs.webkit.org/show_bug.cgi?id=165339
        http://trac.webkit.org/changeset/209275

        "Unreviewed, forgot to change instruction after renaming."
        http://trac.webkit.org/changeset/209276

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Unreviewed, forgot to change instruction after renaming.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::nearestIntDouble):
        (JSC::MacroAssemblerARM64::nearestIntFloat):

2016-12-02  Keith Miller  <keith_miller@apple.com>

        Add Wasm floating point nearest and trunc
        https://bugs.webkit.org/show_bug.cgi?id=165339

        Reviewed by Filip Pizlo.

        This patch also allows any wasm primitive type to be passed as a
        string.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::nearestIntDouble):
        (JSC::MacroAssemblerARM64::nearestIntFloat):
        (JSC::MacroAssemblerARM64::truncDouble):
        (JSC::MacroAssemblerARM64::truncFloat):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::nearestIntDouble):
        (JSC::MacroAssemblerX86Common::nearestIntFloat):
        * jsc.cpp:
        (box):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Trunc>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Trunc>):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):

2016-12-02  JF Bastien  <jfbastien@apple.com>

        WebAssembly: revert patch causing odd breakage
        https://bugs.webkit.org/show_bug.cgi?id=165308

        Unreviewed.

        Bug #164724 seems to cause build issues which I haven't tracked down yet. WasmOps.h can't be found:
        ./Source/JavaScriptCore/wasm/WasmFormat.h:34:10: fatal error: 'WasmOps.h' file not found

        It's weird since the file is auto-generated and has been for a while. #164724 merely includes it in WasmFormat.h.

        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::zeroForType):
        (JSC::Wasm::B3IRGenerator::addConstant):
        (JSC::Wasm::createJSWrapper):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::marshallArgument):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::toString):
        * wasm/WasmFormat.h:
        (JSC::Wasm::toB3Type):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parse):
        (JSC::Wasm::ModuleParser::parseType):
        * wasm/WasmModuleParser.h:
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::parseResultType):
        * wasm/generateWasm.py:
        (Wasm.__init__):
        * wasm/generateWasmOpsHeader.py:
        (cppMacro):
        (opcodeMacroizer):
        (typeMacroizer): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/wasm.json:

2016-12-01  Brian Burg  <bburg@apple.com>

        Remote Inspector: fix weird typo in generated ObjC protocol type initializer implementations
        https://bugs.webkit.org/show_bug.cgi?id=165295
        <rdar://problem/29427778>

        Reviewed by Joseph Pecoraro.

        Remove a stray semicolon appended after custom initializer signatures.
        This is a syntax error when building with less lenient compiler warnings.

        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_required_members):
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:

2016-12-01  Saam Barati  <sbarati@apple.com>

        Rename CallFrame::callee() to CallFrame::jsCallee()
        https://bugs.webkit.org/show_bug.cgi?id=165293

        Reviewed by Keith Miller.

        Wasm will soon have its own Callee that doesn't derive
        from JSObject, but derives from JSCell. I want to introduce
        a new function like:
        ```
        CalleeBase* CallFrame::callee()
        ```
        
        once we have a Wasm callee. It only makes sense to name that
        function callee() and rename the current one turn to:
        ```
        JSObject* CallFrame::jsCallee()
        ```

        * API/APICallbackFunction.h:
        (JSC::APICallbackFunction::call):
        (JSC::APICallbackFunction::construct):
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::construct):
        (JSC::JSCallbackObject<Parent>::call):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::scope):
        (JSC::DebuggerCallFrame::type):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::friendlyFunctionName):
        * interpreter/CallFrame.h:
        (JSC::ExecState::jsCallee):
        (JSC::ExecState::callee): Deleted.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        (JSC::notifyDebuggerOfUnwinding):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::update):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::readNonInlinedFrame):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::traceFunctionPrologue):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/AsyncFunctionConstructor.cpp:
        (JSC::callAsyncFunctionConstructor):
        (JSC::constructAsyncFunctionConstructor):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructWithBooleanConstructor):
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createWithInlineFrame):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):
        * runtime/DateConstructor.cpp:
        (JSC::constructWithDateConstructor):
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::createByCopying):
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
        * runtime/ErrorConstructor.cpp:
        (JSC::Interpreter::constructWithErrorConstructor):
        (JSC::Interpreter::callErrorConstructor):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructWithFunctionConstructor):
        (JSC::callFunctionConstructor):
        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::callGeneratorFunctionConstructor):
        (JSC::constructGeneratorFunctionConstructor):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createSubclassStructure):
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::constructIntlCollator):
        (JSC::callIntlCollator):
        (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::constructIntlDateTimeFormat):
        (JSC::callIntlDateTimeFormat):
        (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::constructIntlNumberFormat):
        (JSC::callIntlNumberFormat):
        (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList):
        (JSC::defaultLocale):
        (JSC::lookupSupportedLocales):
        (JSC::intlObjectFuncGetCanonicalLocales):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::constructArrayBuffer):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):
        * runtime/JSBoundFunction.cpp:
        (JSC::boundThisNoArgsFunctionCall):
        (JSC::boundFunctionCall):
        (JSC::boundThisNoArgsFunctionConstruct):
        (JSC::boundFunctionConstruct):
        * runtime/JSCellInlines.h:
        (JSC::ExecState::vm):
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall):
        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSInternalPromiseConstructor.cpp:
        (JSC::constructPromise):
        * runtime/JSMapIterator.cpp:
        (JSC::JSMapIterator::createPair):
        (JSC::JSMapIterator::clone):
        * runtime/JSNativeStdFunction.cpp:
        (JSC::runStdFunction):
        * runtime/JSPromiseConstructor.cpp:
        (JSC::constructPromise):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::clone):
        * runtime/JSScope.h:
        (JSC::ExecState::lexicalGlobalObject):
        * runtime/JSSetIterator.cpp:
        (JSC::JSSetIterator::createPair):
        (JSC::JSSetIterator::clone):
        * runtime/JSStringIterator.cpp:
        (JSC::JSStringIterator::clone):
        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/MapPrototype.cpp:
        (JSC::mapProtoFuncValues):
        (JSC::mapProtoFuncEntries):
        (JSC::mapProtoFuncKeys):
        (JSC::privateFuncMapIterator):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::Interpreter::constructWithNativeErrorConstructor):
        (JSC::Interpreter::callNativeErrorConstructor):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        * runtime/ProxyObject.cpp:
        (JSC::performProxyCall):
        (JSC::performProxyConstruct):
        * runtime/ProxyRevoke.cpp:
        (JSC::performProxyRevoke):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructWithRegExpConstructor):
        (JSC::callRegExpConstructor):
        * runtime/ScopedArguments.cpp:
        (JSC::ScopedArguments::createByCopying):
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/SetPrototype.cpp:
        (JSC::setProtoFuncValues):
        (JSC::setProtoFuncEntries):
        (JSC::privateFuncSetIterator):
        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncIterator):
        * runtime/WeakMapConstructor.cpp:
        (JSC::constructWeakMap):
        * runtime/WeakSetConstructor.cpp:
        (JSC::constructWeakSet):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2016-12-01  Brian Burg  <bburg@apple.com>

        Web Inspector: generated code should use a framework-style import for *ProtocolArrayConversions.h
        https://bugs.webkit.org/show_bug.cgi?id=165281
        <rdar://problem/29427778>

        Reviewed by Joseph Pecoraro.

        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator.generate_output):
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:

2016-12-01  Geoffrey Garen  <ggaren@apple.com>

        SourceCodeKey should use unlinked source code
        https://bugs.webkit.org/show_bug.cgi?id=165286

        Reviewed by Saam Barati.

        This patch splits out UnlinkedSourceCode from SourceCode, and deploys
        UnlinkedSourceCode in SourceCodeKey.

        It's misleading to store SourceCode in SourceCodeKey because SourceCode
        has an absolute location whereas unlinked cached code has no location.

        I plan to deploy UnlinkedSourceCode in more places, to indicate code
        that has no absolute location.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * parser/SourceCode.cpp:
        (JSC::UnlinkedSourceCode::toUTF8):
        (JSC::SourceCode::toUTF8): Deleted.
        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::startColumn):
        (JSC::SourceCode::isHashTableDeletedValue): Deleted.
        (JSC::SourceCode::hash): Deleted.
        (JSC::SourceCode::view): Deleted.
        (JSC::SourceCode::providerID): Deleted.
        (JSC::SourceCode::isNull): Deleted.
        (JSC::SourceCode::provider): Deleted.
        (JSC::SourceCode::startOffset): Deleted.
        (JSC::SourceCode::endOffset): Deleted.
        (JSC::SourceCode::length): Deleted. Move a bunch of stuff in to a new
        base class, UnlinkedSourceCode.

        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::SourceCodeKey): Use UnlinkedSourceCode since code
        in the cache has no location.

        * parser/UnlinkedSourceCode.h: Copied from Source/JavaScriptCore/parser/SourceCode.h.
        (JSC::UnlinkedSourceCode::UnlinkedSourceCode):
        (JSC::UnlinkedSourceCode::provider):
        (JSC::SourceCode::SourceCode): Deleted.
        (JSC::SourceCode::isHashTableDeletedValue): Deleted.
        (JSC::SourceCode::hash): Deleted.
        (JSC::SourceCode::view): Deleted.
        (JSC::SourceCode::providerID): Deleted.
        (JSC::SourceCode::isNull): Deleted.
        (JSC::SourceCode::provider): Deleted.
        (JSC::SourceCode::firstLine): Deleted.
        (JSC::SourceCode::startColumn): Deleted.
        (JSC::SourceCode::startOffset): Deleted.
        (JSC::SourceCode::endOffset): Deleted.
        (JSC::SourceCode::length): Deleted.
        (JSC::makeSource): Deleted.
        (JSC::SourceCode::subExpression): Deleted.

        * runtime/CodeCache.h: Use UnlinkedSourceCode in the cache.

2016-12-01  Keith Miller  <keith_miller@apple.com>

        Add wasm int to floating point opcodes
        https://bugs.webkit.org/show_bug.cgi?id=165252

        Reviewed by Geoffrey Garen.

        This patch adds support for the Wasm integral type => floating point
        type conversion opcodes. Most of these were already supported by B3
        however there was no support for uint64 to float/double. Unfortunately,
        AFAIK x86_64 does not have a single instruction that performs this
        conversion. Since there is a signed conversion instruction on x86 we
        use that for all uint64s that don't have the top bit set. If they do have
        the top bit set we need to divide by 2 (rounding up) then convert the number
        with the signed conversion then double the result.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::convertUInt64ToDouble):
        (JSC::MacroAssemblerX86_64::convertUInt64ToFloat):
        * jsc.cpp:
        (valueWithTypeOfWasmValue):
        (box):
        (functionTestWasmModuleFunctions):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/wasm.json:

2016-12-01  Geoffrey Garen  <ggaren@apple.com>

        Renamed EvalCodeCache => DirectEvalCodeCache
        https://bugs.webkit.org/show_bug.cgi?id=165271

        Reviewed by Saam Barati.

        We only use this cache for DirectEval, not IndirectEval.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::DirectEvalCodeCache::visitAggregate):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::directEvalCodeCache):
        (JSC::CodeBlock::evalCodeCache): Deleted.
        * bytecode/DirectEvalCodeCache.h: Copied from Source/JavaScriptCore/bytecode/EvalCodeCache.h.
        (JSC::EvalCodeCache::CacheKey::CacheKey): Deleted.
        (JSC::EvalCodeCache::CacheKey::hash): Deleted.
        (JSC::EvalCodeCache::CacheKey::isEmptyValue): Deleted.
        (JSC::EvalCodeCache::CacheKey::operator==): Deleted.
        (JSC::EvalCodeCache::CacheKey::isHashTableDeletedValue): Deleted.
        (JSC::EvalCodeCache::CacheKey::Hash::hash): Deleted.
        (JSC::EvalCodeCache::CacheKey::Hash::equal): Deleted.
        (JSC::EvalCodeCache::tryGet): Deleted.
        (JSC::EvalCodeCache::set): Deleted.
        (JSC::EvalCodeCache::isEmpty): Deleted.
        (JSC::EvalCodeCache::clear): Deleted.
        * bytecode/EvalCodeCache.h: Removed.
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):

2016-12-01  Geoffrey Garen  <ggaren@apple.com>

        Removed some unnecessary indirection in code generation
        https://bugs.webkit.org/show_bug.cgi?id=165264

        Reviewed by Keith Miller.

        There's no need to route through JSGlobalObject when producing code --
        it just made the code harder to read.

        This patch moves functions from JSGlobalObject to their singleton
        call sites.

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedEvalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalEvalCodeBlock): Deleted.
        * runtime/CodeCache.h:
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        * runtime/IndirectEvalExecutable.cpp:
        (JSC::IndirectEvalExecutable::create):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::createProgramCodeBlock): Deleted.
        (JSC::JSGlobalObject::createLocalEvalCodeBlock): Deleted.
        (JSC::JSGlobalObject::createGlobalEvalCodeBlock): Deleted.
        (JSC::JSGlobalObject::createModuleProgramCodeBlock): Deleted.
        * runtime/JSGlobalObject.h:
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::create):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/ProgramExecutable.h:

2016-11-30  Darin Adler  <darin@apple.com>

        Roll out StringBuilder changes from the previous patch.
        They were a slowdown on a Kraken JSON test.

        * runtime/JSONObject.cpp:
        Roll out changes from below.

2016-11-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Specifying same module entry point multiple times cause TypeError
        https://bugs.webkit.org/show_bug.cgi?id=164858

        Reviewed by Saam Barati.

        Allow importing the same module multiple times. Previously, when specifying the same
        module in the <script type="module" src="here">, it throws TypeError.

        * builtins/ModuleLoaderPrototype.js:
        (requestFetch):
        (requestTranslate):
        (requestInstantiate):
        (requestSatisfy):

2016-11-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        WebAssembly JS API: export a module namespace object instead of a module environment
        https://bugs.webkit.org/show_bug.cgi?id=165121

        Reviewed by Saam Barati.

        This patch setup AbstractModuleRecord further for WebAssemblyModuleRecord.
        For exported entries in a wasm instance, we set up exported entries for
        AbstractModuleRecord. This allows us to export WASM exported functions in
        the module handling code.

        Since the exported entries in the abstract module record are correctly
        instantiated, the module namespace object for WASM module also starts
        working correctly. So we start exposing the module namespace object
        as `instance.exports` instead of the module environment object.

        And we move SourceCode, lexicalVariables, and declaredVariables fields to
        JSModuleRecord since they are related to JS source code (in the spec words,
        they are related to the source text module record).

        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::AbstractModuleRecord):
        * runtime/AbstractModuleRecord.h:
        (JSC::AbstractModuleRecord::sourceCode): Deleted.
        (JSC::AbstractModuleRecord::declaredVariables): Deleted.
        (JSC::AbstractModuleRecord::lexicalVariables): Deleted.
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::JSModuleRecord):
        * runtime/JSModuleRecord.h:
        (JSC::JSModuleRecord::sourceCode):
        (JSC::JSModuleRecord::declaredVariables):
        (JSC::JSModuleRecord::lexicalVariables):
        * wasm/WasmFormat.cpp:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finishCreation):
        * wasm/js/WebAssemblyFunction.cpp:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::create):
        (JSC::WebAssemblyModuleRecord::WebAssemblyModuleRecord):
        (JSC::WebAssemblyModuleRecord::finishCreation):
        WebAssemblyModuleRecord::link should perform linking things.
        So allocating exported entries should be done here.
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyModuleRecord.h:

2016-11-30  Mark Lam  <mark.lam@apple.com>

        TypeInfo::OutOfLineTypeFlags should be 16 bits in size.
        https://bugs.webkit.org/show_bug.cgi?id=165224

        Reviewed by Saam Barati.

        There's no reason for OutOfLineTypeFlags to be constraint to 8 bits since the
        space is available to us.  Making OutOfLineTypeFlags 16 bits brings TypeInfo up
        to 32 bits in size from the current 24 bits.

        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):

2016-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: inspector/sampling-profiler/* LayoutTests are flaky timeouts
        https://bugs.webkit.org/show_bug.cgi?id=164388
        <rdar://problem/29101555>

        Reviewed by Saam Barati.

        There was a possibility of a deadlock between the main thread and the GC thread
        with the SamplingProfiler lock when Inspector is processing samples to send to
        the frontend. The Inspector (main thread) was holding the SamplingProfiler lock
        while processing samples, which runs JavaScript that could trigger a GC, and
        GC then tries to acquire the SamplingProfiler lock to process unprocessed samples.

        A simple solution here is to tighten the bounds of when Inspector holds the
        SamplingProfiler lock. It only needs the lock when extracting samples from
        the SamplingProfiler. It doesn't need to hold the lock for processing those
        samples, which is what can run script and cause a GC.

        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        Tighten bounds of this lock to only where it is needed.

2016-11-30  Mark Lam  <mark.lam@apple.com>

        Proxy is not allowed in the global prototype chain.
        https://bugs.webkit.org/show_bug.cgi?id=165205

        Reviewed by Geoffrey Garen.

        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        - We'll now throw a TypeError if we detect a Proxy in the global prototype chain.

2016-11-30  Commit Queue  <commit-queue@webkit.org>

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

        "It regressed Octane/Raytrace and JetStream" (Requested by
        saamyjoon on #webkit).

        Reverted changeset:

        "We should support CreateThis in the FTL"
        https://bugs.webkit.org/show_bug.cgi?id=164904
        http://trac.webkit.org/changeset/209112

2016-11-30  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        Reviewed by Sam Weinig.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue): Use viewWithUnderlyingString when calling
        StringBuilder::appendQuotedJSONString, since it now takes a StringView and there is
        no benefit in creating a String for that function if one doesn't already exist.

2016-11-29  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: improve Instance
        https://bugs.webkit.org/show_bug.cgi?id=164757

        Reviewed by Keith Miller.

        An Instance's `exports` property wasn't populated with exports.

        According to the spec [0], `exports` should present itself as a WebAssembly
        Module Record. In order to do this we need to split JSModuleRecord into
        AbstractModuleRecord (without the `link` and `evaluate` functions), and
        JSModuleRecord (which implements link and evaluate). We can then have a separate
        WebAssemblyModuleRecord which shares most of the implementation.

        `exports` then maps function names to WebAssemblyFunction and
        WebAssemblyFunctionCell, which call into the B3-generated WebAssembly code.

        A follow-up patch will do imports.

        A few things of note:

         - Use Identifier instead of String. They get uniqued, we need them for the JSModuleNamespaceObject. This is safe because JSWebAssemblyModule creation is on the main thread.
         - JSWebAssemblyInstance needs to refer to the JSWebAssemblyModule used to create it, because the module owns the code, identifiers, etc. The world would be very sad if it got GC'd.
         - Instance.exports shouldn't use putWithoutTransition because it affects all Structures, whereas here each instance needs its own exports.
         - Expose the compiled functions, and pipe them to the InstanceConstructor. Start moving things around to split JSModuleRecord out into JS and WebAssembly parts.

          [0]: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstance-constructor

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/AbstractModuleRecord.cpp: Copied from Source/JavaScriptCore/runtime/JSModuleRecord.cpp, which I split in two
        (JSC::AbstractModuleRecord::AbstractModuleRecord):
        (JSC::AbstractModuleRecord::destroy):
        (JSC::AbstractModuleRecord::finishCreation):
        (JSC::AbstractModuleRecord::visitChildren):
        (JSC::AbstractModuleRecord::appendRequestedModule):
        (JSC::AbstractModuleRecord::addStarExportEntry):
        (JSC::AbstractModuleRecord::addImportEntry):
        (JSC::AbstractModuleRecord::addExportEntry):
        (JSC::identifierToJSValue):
        (JSC::AbstractModuleRecord::hostResolveImportedModule):
        (JSC::AbstractModuleRecord::ResolveQuery::ResolveQuery):
        (JSC::AbstractModuleRecord::ResolveQuery::isEmptyValue):
        (JSC::AbstractModuleRecord::ResolveQuery::isDeletedValue):
        (JSC::AbstractModuleRecord::ResolveQuery::Hash::hash):
        (JSC::AbstractModuleRecord::ResolveQuery::Hash::equal):
        (JSC::AbstractModuleRecord::cacheResolution):
        (JSC::getExportedNames):
        (JSC::AbstractModuleRecord::getModuleNamespace):
        (JSC::printableName):
        (JSC::AbstractModuleRecord::dump):
        * runtime/AbstractModuleRecord.h: Copied from Source/JavaScriptCore/runtime/JSModuleRecord.h.
        (JSC::AbstractModuleRecord::ImportEntry::isNamespace):
        (JSC::AbstractModuleRecord::sourceCode):
        (JSC::AbstractModuleRecord::moduleKey):
        (JSC::AbstractModuleRecord::requestedModules):
        (JSC::AbstractModuleRecord::exportEntries):
        (JSC::AbstractModuleRecord::importEntries):
        (JSC::AbstractModuleRecord::starExportEntries):
        (JSC::AbstractModuleRecord::declaredVariables):
        (JSC::AbstractModuleRecord::lexicalVariables):
        (JSC::AbstractModuleRecord::moduleEnvironment):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::webAssemblyModuleRecordStructure):
        (JSC::JSGlobalObject::webAssemblyFunctionStructure):
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::create):
        (JSC::JSModuleEnvironment::finishCreation):
        (JSC::JSModuleEnvironment::getOwnPropertySlot):
        (JSC::JSModuleEnvironment::getOwnNonIndexPropertyNames):
        (JSC::JSModuleEnvironment::put):
        (JSC::JSModuleEnvironment::deleteProperty):
        * runtime/JSModuleEnvironment.h:
        (JSC::JSModuleEnvironment::create):
        (JSC::JSModuleEnvironment::offsetOfModuleRecord):
        (JSC::JSModuleEnvironment::allocationSize):
        (JSC::JSModuleEnvironment::moduleRecord):
        (JSC::JSModuleEnvironment::moduleRecordSlot):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::JSModuleNamespaceObject::getOwnPropertySlot):
        * runtime/JSModuleNamespaceObject.h:
        (JSC::JSModuleNamespaceObject::create):
        (JSC::JSModuleNamespaceObject::moduleRecord):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::createStructure):
        (JSC::JSModuleRecord::create):
        (JSC::JSModuleRecord::JSModuleRecord):
        (JSC::JSModuleRecord::destroy):
        (JSC::JSModuleRecord::finishCreation):
        (JSC::JSModuleRecord::visitChildren):
        (JSC::JSModuleRecord::instantiateDeclarations):
        * runtime/JSModuleRecord.h:
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * wasm/JSWebAssembly.h:
        * wasm/WasmFormat.h: use Identifier instead of String
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parse):
        (JSC::Wasm::ModuleParser::parseType):
        (JSC::Wasm::ModuleParser::parseImport): fix off-by-one
        (JSC::Wasm::ModuleParser::parseFunction):
        (JSC::Wasm::ModuleParser::parseExport):
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::ModuleParser):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::run):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        (JSC::JSWebAssemblyInstance::finishCreation):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h:
        (JSC::JSWebAssemblyInstance::module):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::finishCreation):
        (JSC::JSWebAssemblyModule::visitChildren):
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::moduleInformation):
        (JSC::JSWebAssemblyModule::compiledFunctions):
        (JSC::JSWebAssemblyModule::exportSymbolTable):
        * wasm/js/WebAssemblyFunction.cpp: Added.
        (JSC::callWebAssemblyFunction):
        (JSC::WebAssemblyFunction::create):
        (JSC::WebAssemblyFunction::createStructure):
        (JSC::WebAssemblyFunction::WebAssemblyFunction):
        (JSC::WebAssemblyFunction::visitChildren):
        (JSC::WebAssemblyFunction::finishCreation):
        * wasm/js/WebAssemblyFunction.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h.
        (JSC::CallableWebAssemblyFunction::CallableWebAssemblyFunction):
        (JSC::WebAssemblyFunction::webAssemblyFunctionCell):
        * wasm/js/WebAssemblyFunctionCell.cpp: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h.
        (JSC::WebAssemblyFunctionCell::create):
        (JSC::WebAssemblyFunctionCell::WebAssemblyFunctionCell):
        (JSC::WebAssemblyFunctionCell::destroy):
        (JSC::WebAssemblyFunctionCell::createStructure):
        * wasm/js/WebAssemblyFunctionCell.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h.
        (JSC::WebAssemblyFunctionCell::function):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyModuleRecord.cpp: Added.
        (JSC::WebAssemblyModuleRecord::createStructure):
        (JSC::WebAssemblyModuleRecord::create):
        (JSC::WebAssemblyModuleRecord::WebAssemblyModuleRecord):
        (JSC::WebAssemblyModuleRecord::destroy):
        (JSC::WebAssemblyModuleRecord::finishCreation):
        (JSC::WebAssemblyModuleRecord::visitChildren):
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyModuleRecord.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h.

2016-11-29  Saam Barati  <sbarati@apple.com>

        We should be able optimize the pattern where we spread a function's rest parameter to another call
        https://bugs.webkit.org/show_bug.cgi?id=163865

        Reviewed by Filip Pizlo.

        This patch optimizes the following patterns to prevent both the allocation
        of the rest parameter, and the execution of the iterator protocol:
        
        ```
        function foo(...args) {
            let arr = [...args];
        }
        
        and
        
        function foo(...args) {
            bar(...args);
        }
        ```
        
        To do this, I've extended the arguments elimination phase to reason
        about Spread and NewArrayWithSpread. I've added two new nodes, PhantomSpread
        and PhantomNewArrayWithSpread. PhantomSpread is only allowed over rest
        parameters that don't escape. If the rest parameter *does* escape, we can't
        convert the spread into a phantom because it would not be sound w.r.t JS
        semantics because we would be reading from the call frame even though
        the rest array may have changed.
        
        Note that NewArrayWithSpread also understands what to do when one of its
        arguments is PhantomSpread(@PhantomCreateRest) even if it itself is escaped.
        
        PhantomNewArrayWithSpread is only allowed over a series of
        PhantomSpread(@PhantomCreateRest) nodes. Like with PhantomSpread, PhantomNewArrayWithSpread
        is only allowed if none of its arguments that are being spread are escaped
        and if it itself is not escaped.
        
        Because there is a dependency between a node being a candidate and
        the escaped state of the node's children, I've extended the notion
        of escaping a node inside the arguments elimination phase. Now, when
        any node is escaped, we must consider all other candidates that are may
        now no longer be valid.
        
        For example:
        
        ```
        function foo(...args) {
            escape(args);
            bar(...args);
        }
        ```
        
        In the above program, we don't know if the function call to escape()
        modifies args, therefore, the spread can not become phantom because
        the execution of the spread may not be as simple as reading the
        arguments from the call frame.
        
        Unfortunately, the arguments elimination phase does not consider control
        flow when doing its escape analysis. It would be good to integrate this
        phase with the object allocation sinking phase. To see why, consider
        an example where we don't eliminate the spread and allocation of the rest
        parameter even though we could:
        
        ```
        function foo(rareCondition, ...args) {
            bar(...args);
            if (rareCondition)
                baz(args);
        }
        ```
        
        There are only a few users of the PhantomSpread and PhantomNewArrayWithSpread
        nodes. PhantomSpread is only used by PhantomNewArrayWithSpread and NewArrayWithSpread.
        PhantomNewArrayWithSpread is only used by ForwardVarargs and the various
        *Call*ForwardVarargs nodes. The users of these phantoms know how to produce
        what the phantom node would have produced. For example, NewArrayWithSpread
        knows how to produce the values that would have been produced by PhantomSpread(@PhantomCreateRest)
        by directly reading from the call frame.
        
        This patch is a 6% speedup on my MBP on ES6SampleBench.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::tryAppendLea):
        * b3/B3ValueRep.h:
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createDefaultConstructor):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGForAllKills.h:
        (JSC::DFG::forAllKillsInBlock):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::constant):
        (JSC::DFG::Node::bitVector):
        (JSC::DFG::Node::isPhantomAllocation):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
        (JSC::DFG::LocalOSRAvailabilityCalculator::LocalOSRAvailabilityCalculator):
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOSRAvailabilityAnalysisPhase.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGPromotedHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGPromotedHeapLocation.h:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::getSpreadLengthFromInlineCallFrame):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * jit/SetupVarargsFrame.cpp:
        (JSC::emitSetupVarargsFrameFastCase):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionMaxArguments):
        * runtime/JSFixedArray.h:
        (JSC::JSFixedArray::createFromArray):

2016-11-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209058 and r209074.
        https://bugs.webkit.org/show_bug.cgi?id=165188

        These changes caused API test StringBuilderTest.Equal to crash
        and/or fail. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Streamline and speed up tokenizer and segmented string
        classes"
        https://bugs.webkit.org/show_bug.cgi?id=165003
        http://trac.webkit.org/changeset/209058

        "REGRESSION (r209058): API test StringBuilderTest.Equal
        crashing"
        https://bugs.webkit.org/show_bug.cgi?id=165142
        http://trac.webkit.org/changeset/209074

2016-11-29  Caitlin Potter  <caitp@igalia.com>

        [JSC] always wrap AwaitExpression operand in a new Promise
        https://bugs.webkit.org/show_bug.cgi?id=165181

        Reviewed by Yusuke Suzuki.

        Ensure operand of AwaitExpression is wrapped in a new Promise by
        explicitly creating a new Promise Capability and invoking its
        resolve callback. This avoids the specified short-circuit for
        Promise.resolve().

        * builtins/AsyncFunctionPrototype.js:
        (globalPrivate.asyncFunctionResume):

2016-11-29  Saam Barati  <sbarati@apple.com>

        We should support CreateThis in the FTL
        https://bugs.webkit.org/show_bug.cgi?id=164904

        Reviewed by Geoffrey Garen.

        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis):
        (JSC::FTL::DFG::LowerDFGToB3::storeStructure):
        (JSC::FTL::DFG::LowerDFGToB3::allocateCell):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
        * runtime/Structure.h:

2016-11-29  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/RegExp* files.
        https://bugs.webkit.org/show_bug.cgi?id=165054

        Reviewed by Saam Barati.

        Also replaced returning JSValue() with returning { }.

        * runtime/RegExpConstructor.cpp:
        (JSC::toFlags):
        (JSC::regExpCreate):
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::defineOwnProperty):
        (JSC::collectMatches):
        (JSC::RegExpObject::matchGlobal):
        * runtime/RegExpObjectInlines.h:
        (JSC::getRegExpObjectLastIndexAsUnsigned):
        (JSC::RegExpObject::execInline):
        (JSC::RegExpObject::matchInline):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::flagsString):
        (JSC::regExpProtoFuncToString):
        (JSC::regExpProtoFuncSplitFast):

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.

2016-11-29  Keith Miller  <keith_miller@apple.com>

        Add simple way to implement Wasm ops that require more than one B3 opcode
        https://bugs.webkit.org/show_bug.cgi?id=165129

        Reviewed by Geoffrey Garen.

        This patch adds a simple way to show the B3IRGenerator opcode script how
        to generate code for Wasm opcodes that do not have a one to one mapping.
        The syntax is pretty simple right now. There are only three things one
        can use as of this patch (although more things might be added in the future)
        1) Wasm opcode arguments: These are referred to as @<argument_number>. For example,
           I32.sub would map to Sub(@0, @1).
        2) 32-bit int constants: These are reffered to as i32(<value>). For example, i32.inc
           would map to Add(@0, i32(1))
        3) B3 opcodes: These are referred to as the B3 opcode name followed by the B3Value's constructor
           arguments. A value may take the result of another value as an argument. For example, you can do
           Div(Mul(@0, Add(@0, i32(1))), i32(2)) if there was a b3 opcode that computed the sum from 1 to n.

        These scripts are used to implement Wasm's eqz and floating point max/min opcodes. This patch
        also adds missing support for the Wasm Neg opcodes.

        * jsc.cpp:
        (box):
        (functionTestWasmModuleFunctions):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::toB3Op): Deleted.
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseBody):
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseType):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::parseUInt8):
        (JSC::Wasm::Parser::parseValueType):
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        (Source):
        (Source.__init__):
        (read):
        (lex):
        (CodeGenerator):
        (CodeGenerator.__init__):
        (CodeGenerator.advance):
        (CodeGenerator.token):
        (CodeGenerator.parseError):
        (CodeGenerator.consume):
        (CodeGenerator.generateParameters):
        (CodeGenerator.generateOpcode):
        (CodeGenerator.generate):
        (temp):
        (generateB3OpCode):
        (generateI32ConstCode):
        (generateB3Code):
        (generateSimpleCode):
        * wasm/wasm.json:

2016-11-29  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ProxyConstructor.cpp and ProxyObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165053

        Reviewed by Saam Barati.

        Also replaced returning JSValue() with returning { }.

        * runtime/ProxyConstructor.cpp:
        (JSC::constructProxyObject):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::structureForTarget):
        (JSC::performProxyGet):
        (JSC::ProxyObject::performInternalMethodGetOwnProperty):
        (JSC::ProxyObject::performHasProperty):
        (JSC::ProxyObject::getOwnPropertySlotCommon):
        (JSC::ProxyObject::performPut):
        (JSC::ProxyObject::putByIndexCommon):
        (JSC::performProxyCall):
        (JSC::performProxyConstruct):
        (JSC::ProxyObject::performDelete):
        (JSC::ProxyObject::performPreventExtensions):
        (JSC::ProxyObject::performIsExtensible):
        (JSC::ProxyObject::performDefineOwnProperty):
        (JSC::ProxyObject::performGetOwnPropertyNames):
        (JSC::ProxyObject::performSetPrototype):
        (JSC::ProxyObject::performGetPrototype):

2016-11-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Debugger should have an option for showing asynchronous call stacks
        https://bugs.webkit.org/show_bug.cgi?id=163230
        <rdar://problem/28698683>

        Reviewed by Joseph Pecoraro.

        * inspector/ScriptCallFrame.cpp:
        (Inspector::ScriptCallFrame::isNative):
        Encapsulate check for native code source URL.

        * inspector/ScriptCallFrame.h:
        * inspector/ScriptCallStack.cpp:
        (Inspector::ScriptCallStack::firstNonNativeCallFrame):
        (Inspector::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        Replace use of Console::StackTrace with Array<Console::CallFrame>.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::disable):
        (Inspector::InspectorDebuggerAgent::setAsyncStackTraceDepth):
        Set number of async frames to store (including boundary frames).
        A value of zero disables recording of async call stacks.

        (Inspector::InspectorDebuggerAgent::buildAsyncStackTrace):
        Helper function for building a linked list StackTraces.
        (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
        Store a call stack for the script that scheduled the async call.
        If the call repeats (e.g. setInterval), the starting reference count is
        set to 1. This ensures that dereffing after dispatch won't clear the stack.
        If another async call is currently being dispatched, increment the
        AsyncCallData reference count for that call.

        (Inspector::InspectorDebuggerAgent::didCancelAsyncCall):
        Decrement the reference count for the canceled call.

        (Inspector::InspectorDebuggerAgent::willDispatchAsyncCall):
        Set the identifier for the async callback currently being dispatched,
        so that if the debugger pauses during dispatch a stack trace can be
        associated with the pause location. If an async call is already being
        dispatched, which could be the case when a script schedules an async
        call in a nested runloop, do nothing.

        (Inspector::InspectorDebuggerAgent::didDispatchAsyncCall):
        Decrement the reference count for the canceled call.
        (Inspector::InspectorDebuggerAgent::didPause):
        If a stored stack trace exists for this location, convert to a protocol
        object and send to the frontend.

        (Inspector::InspectorDebuggerAgent::didClearGlobalObject):
        (Inspector::InspectorDebuggerAgent::clearAsyncStackTraceData):
        (Inspector::InspectorDebuggerAgent::refAsyncCallData):
        Increment AsyncCallData reference count.
        (Inspector::InspectorDebuggerAgent::derefAsyncCallData):
        Decrement AsyncCallData reference count. If zero, deref its parent
        (if it exists) and remove the AsyncCallData entry.

        * inspector/agents/InspectorDebuggerAgent.h:

        * inspector/protocol/Console.json:
        * inspector/protocol/Network.json:
        Replace use of Console.StackTrace with array of Console.CallFrame.

        * inspector/protocol/Debugger.json:
        New protocol command and event data.

2016-11-28  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        Reviewed by Sam Weinig.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue): Use viewWithUnderlyingString when calling
        StringBuilder::appendQuotedJSONString, since it now takes a StringView and there is
        no benefit in creating a String for that function if one doesn't already exist.

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/Intl* files.
        https://bugs.webkit.org/show_bug.cgi?id=165014

        Reviewed by Saam Barati.

        * runtime/IntlCollatorConstructor.cpp:
        (JSC::constructIntlCollator):
        (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorPrototypeFuncResolvedOptions):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::constructIntlDateTimeFormat):
        (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatFuncFormatDateTime):
        (JSC::IntlDateTimeFormatPrototypeGetterFormat):
        (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::constructIntlNumberFormat):
        (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatFuncFormatNumber):
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
        * runtime/IntlObject.cpp:
        (JSC::lookupSupportedLocales):
        * runtime/IntlObjectInlines.h:
        (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in IteratorOperations.h.
        https://bugs.webkit.org/show_bug.cgi?id=165015

        Reviewed by Saam Barati.

        * runtime/IteratorOperations.h:
        (JSC::forEachInIterable):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSArray* files.
        https://bugs.webkit.org/show_bug.cgi?id=165016

        Reviewed by Saam Barati.

        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::put):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCountWithAnyIndexingType):
        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::put):
        (JSC::JSArrayBuffer::defineOwnProperty):
        * runtime/JSArrayInlines.h:
        (JSC::getLength):
        (JSC::toLength):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSDataView.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165020

        Reviewed by Saam Barati.

        * runtime/JSDataView.cpp:
        (JSC::JSDataView::put):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSFunction.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165021

        Reviewed by Saam Barati.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/JSGenericTypedArrayView* files.
        https://bugs.webkit.org/show_bug.cgi?id=165022

        Reviewed by Saam Barati.

        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewFromIterator):
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/Operations.cpp/h.
        https://bugs.webkit.org/show_bug.cgi?id=165046

        Reviewed by Saam Barati.

        Also switched to using returning { } instead of JSValue().

        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        (JSC::jsIsObjectTypeOrNull):
        * runtime/Operations.h:
        (JSC::jsStringFromRegisterArray):
        (JSC::jsStringFromArguments):
        (JSC::jsLess):
        (JSC::jsLessEq):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSScope.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165047

        Reviewed by Saam Barati.

        * runtime/JSScope.cpp:
        (JSC::JSScope::resolve):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSTypedArrayViewPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165049

        Reviewed by Saam Barati.

        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::typedArrayViewPrivateFuncSort):
        (JSC::typedArrayViewProtoFuncSet):
        (JSC::typedArrayViewProtoFuncCopyWithin):
        (JSC::typedArrayViewProtoFuncIncludes):
        (JSC::typedArrayViewProtoFuncLastIndexOf):
        (JSC::typedArrayViewProtoFuncIndexOf):
        (JSC::typedArrayViewProtoFuncJoin):
        (JSC::typedArrayViewProtoGetterFuncBuffer):
        (JSC::typedArrayViewProtoGetterFuncLength):
        (JSC::typedArrayViewProtoGetterFuncByteLength):
        (JSC::typedArrayViewProtoGetterFuncByteOffset):
        (JSC::typedArrayViewProtoFuncReverse):
        (JSC::typedArrayViewPrivateFuncSubarrayCreate):
        (JSC::typedArrayViewProtoFuncSlice):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/Map* files.
        https://bugs.webkit.org/show_bug.cgi?id=165050

        Reviewed by Saam Barati.

        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/MapIteratorPrototype.cpp:
        (JSC::MapIteratorPrototypeFuncNext):
        * runtime/MapPrototype.cpp:
        (JSC::privateFuncMapIteratorNext):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in more miscellaneous files.
        https://bugs.webkit.org/show_bug.cgi?id=165102

        Reviewed by Saam Barati.

        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/Weak* files.
        https://bugs.webkit.org/show_bug.cgi?id=165096

        Reviewed by Geoffrey Garen.

        * runtime/WeakMapConstructor.cpp:
        (JSC::constructWeakMap):
        * runtime/WeakMapPrototype.cpp:
        (JSC::protoFuncWeakMapSet):
        * runtime/WeakSetConstructor.cpp:
        (JSC::constructWeakSet):
        * runtime/WeakSetPrototype.cpp:
        (JSC::protoFuncWeakSetAdd):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/String* files.
        https://bugs.webkit.org/show_bug.cgi?id=165067

        Reviewed by Saam Barati.

        * runtime/StringConstructor.cpp:
        (JSC::stringFromCodePoint):
        (JSC::constructWithStringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::StringObject::putByIndex):
        (JSC::StringObject::defineOwnProperty):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        (JSC::repeatCharacter):
        (JSC::replace):
        (JSC::stringProtoFuncReplaceUsingStringSearch):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCodePointAt):
        (JSC::stringProtoFuncConcat):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::splitStringByOneCharacterImpl):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::toLocaleCase):
        (JSC::trimString):
        (JSC::stringProtoFuncIncludes):
        (JSC::builtinStringIncludesInternal):
        (JSC::stringProtoFuncIterator):
        (JSC::normalize):
        (JSC::stringProtoFuncNormalize):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ObjectConstructor.cpp and ObjectPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165051

        Reviewed by Saam Barati.

        Also,
        1. Replaced returning JSValue() with returning { }.
        2. Replaced uses of exec->propertyNames() with vm.propertyNames.

        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyDescriptors):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorGetOwnPropertySymbols):
        (JSC::objectConstructorKeys):
        (JSC::ownEnumerablePropertyKeys):
        (JSC::toPropertyDescriptor):
        (JSC::defineProperties):
        (JSC::objectConstructorDefineProperties):
        (JSC::objectConstructorCreate):
        (JSC::setIntegrityLevel):
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorPreventExtensions):
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):
        (JSC::ownPropertyKeys):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):

2016-11-26  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in miscellaneous files.
        https://bugs.webkit.org/show_bug.cgi?id=165055

        Reviewed by Saam Barati.

        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncIMul):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        (JSC::moduleLoaderPrototypeRequestedModules):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::Interpreter::constructWithNativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/SetIteratorPrototype.cpp:
        (JSC::SetIteratorPrototypeFuncNext):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putEntry):
        (JSC::SparseArrayEntry::put):
        * runtime/TemplateRegistry.cpp:
        (JSC::TemplateRegistry::getTemplateObject):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ReflectObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165066

        Reviewed by Saam Barati.

        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectConstruct):
        (JSC::reflectObjectDefineProperty):
        (JSC::reflectObjectEnumerate):
        (JSC::reflectObjectGet):
        (JSC::reflectObjectGetOwnPropertyDescriptor):
        (JSC::reflectObjectGetPrototypeOf):
        (JSC::reflectObjectOwnKeys):
        (JSC::reflectObjectSet):

2016-11-24  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ArrayConstructor.cpp and ArrayPrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164972

        Reviewed by Geoffrey Garen.

        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        (JSC::putLength):
        (JSC::speciesWatchpointsValid):
        (JSC::speciesConstructArray):
        (JSC::shift):
        (JSC::unshift):
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::slowJoin):
        (JSC::fastJoin):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        (JSC::concatAppendOne):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        (JSC::ArrayPrototype::attemptToInitializeSpeciesWatchpoint):

2016-11-28  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in LLIntSlowPaths.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164969

        Reviewed by Geoffrey Garen.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::varargsSetup):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Import std::optional reference implementation as WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=164199

        Reviewed by Saam Barati and Sam Weinig.

        Previous WTF::Optional::operator= is not compatible to std::optional::operator=.
        std::optional::emplace has the same semantics to the previous one.
        So we change the code to use it.

        * Scripts/builtins/builtins_templates.py:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::commuteCompareToZeroIntoTest):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::commuteCompareToZeroIntoTest):
        * b3/B3CheckSpecial.cpp:
        (JSC::B3::CheckSpecial::forEachArg):
        (JSC::B3::CheckSpecial::shouldTryAliasingDef):
        * b3/B3CheckSpecial.h:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::scaleForShl):
        (JSC::B3::Air::LowerToAir::effectiveAddr):
        (JSC::B3::Air::LowerToAir::tryAppendLea):
        * b3/B3Opcode.cpp:
        (JSC::B3::invertedCompare):
        * b3/B3Opcode.h:
        * b3/B3PatchpointSpecial.cpp:
        (JSC::B3::PatchpointSpecial::forEachArg):
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::forEachArgImpl):
        * b3/B3StackmapSpecial.h:
        * b3/B3Value.cpp:
        (JSC::B3::Value::invertedCompare):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::isValidScale):
        (JSC::B3::Air::Arg::isValidAddrForm):
        (JSC::B3::Air::Arg::isValidIndexForm):
        (JSC::B3::Air::Arg::isValidForm):
        * b3/air/AirCustom.h:
        (JSC::B3::Air::PatchCustom::shouldTryAliasingDef):
        * b3/air/AirFixObviousSpills.cpp:
        * b3/air/AirInst.h:
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::Inst::shouldTryAliasingDef):
        * b3/air/AirIteratedRegisterCoalescing.cpp:
        * b3/air/AirSpecial.cpp:
        (JSC::B3::Air::Special::shouldTryAliasingDef):
        * b3/air/AirSpecial.h:
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::storageForGeneratorLocal):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::findPC):
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex):
        * bytecode/CodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::link):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::ObjectPatternNode::bindValue):
        * debugger/Debugger.cpp:
        (JSC::Debugger::resolveBreakpoint):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::currentPosition):
        * debugger/DebuggerParseData.cpp:
        (JSC::DebuggerPausePositions::breakpointLocationForLineColumn):
        * debugger/DebuggerParseData.h:
        * debugger/ScriptProfilingScope.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeDoubleUnaryOpEffects):
        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::findPC):
        * dfg/DFGJITCode.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
        * dfg/DFGSlowPathGenerator.h:
        (JSC::DFG::SlowPathGenerator::generate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
        (JSC::DFG::SpeculativeJIT::emitUntypedBitOp):
        (JSC::DFG::SpeculativeJIT::emitUntypedRightShiftBitOp):
        (JSC::DFG::SpeculativeJIT::compileMathIC):
        (JSC::DFG::SpeculativeJIT::compileArithDiv):
        (JSC::DFG::SpeculativeJIT::compileCallDOMGetter):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::findPC):
        * ftl/FTLJITCode.h:
        * heap/Heap.cpp:
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::collectInThread):
        (JSC::Heap::requestCollection):
        (JSC::Heap::willStartCollection):
        (JSC::Heap::didFinishCollection):
        (JSC::Heap::shouldDoFullCollection):
        * heap/Heap.h:
        (JSC::Heap::collectionScope):
        * heap/HeapSnapshot.cpp:
        (JSC::HeapSnapshot::nodeForCell):
        (JSC::HeapSnapshot::nodeForObjectIdentifier):
        * heap/HeapSnapshot.h:
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::dispatch):
        (Inspector::BackendDispatcher::sendPendingErrors):
        (Inspector::BackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcher.h:
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::nodeForHeapObjectIdentifier):
        (Inspector::InspectorHeapAgent::getPreview):
        (Inspector::InspectorHeapAgent::getRemoteObject):
        * inspector/agents/InspectorHeapAgent.h:
        * inspector/remote/RemoteConnectionToTarget.h:
        * inspector/remote/RemoteConnectionToTarget.mm:
        (Inspector::RemoteConnectionToTarget::targetIdentifier):
        (Inspector::RemoteConnectionToTarget::setup):
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/RemoteInspector.mm:
        (Inspector::RemoteInspector::updateClientCapabilities):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (_generate_declarations_for_enum_conversion_methods):
        (_generate_declarations_for_enum_conversion_methods.return_type_with_export_macro):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain.generate_conversion_method_body):
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * jit/JITCode.h:
        (JSC::JITCode::findPC):
        * jit/JITDivGenerator.cpp:
        (JSC::JITDivGenerator::generateFastPath):
        * jit/JITOperations.cpp:
        * jit/PCToCodeOriginMap.cpp:
        (JSC::PCToCodeOriginMap::findPC):
        * jit/PCToCodeOriginMap.h:
        * jsc.cpp:
        (WTF::RuntimeArray::getOwnPropertySlot):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * parser/ModuleAnalyzer.cpp:
        (JSC::ModuleAnalyzer::exportVariable):
        * runtime/ConcurrentJSLock.h:
        (JSC::ConcurrentJSLocker::ConcurrentJSLocker):
        * runtime/DefinePropertyAttributes.h:
        (JSC::DefinePropertyAttributes::writable):
        (JSC::DefinePropertyAttributes::configurable):
        (JSC::DefinePropertyAttributes::enumerable):
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::getOwnPropertySlot):
        (JSC::GenericArguments<Type>::put):
        (JSC::GenericArguments<Type>::deleteProperty):
        (JSC::GenericArguments<Type>::defineOwnProperty):
        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::get):
        * runtime/HashMapImpl.h:
        (JSC::concurrentJSMapHash):
        * runtime/Identifier.h:
        (JSC::parseIndex):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toNumberFromPrimitive):
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCJSValue.h:
        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView::toAdaptorNativeFromValueWithoutCoercion):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot):
        (JSC::JSGenericTypedArrayView<Adaptor>::put):
        * runtime/JSModuleRecord.cpp:
        * runtime/JSModuleRecord.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectAccessor):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::putDirectMayBeIndex):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::putOwnDataPropertyMayBeIndex):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putInline):
        * runtime/JSString.cpp:
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::getStringPropertySlot):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::parse):
        * runtime/MathCommon.h:
        (JSC::safeReciprocalForDivByConst):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncHasOwnProperty):
        * runtime/PropertyDescriptor.h:
        (JSC::toPropertyDescriptor):
        * runtime/PropertyName.h:
        (JSC::parseIndex):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::isStringOwnProperty):
        (JSC::StringObject::deleteProperty):
        * runtime/ToNativeFromValue.h:
        (JSC::toNativeFromValueWithoutCoercion):
        * runtime/TypedArrayAdaptors.h:
        (JSC::IntegralTypedArrayAdaptor::toNativeFromInt32WithoutCoercion):
        (JSC::IntegralTypedArrayAdaptor::toNativeFromUint32WithoutCoercion):
        (JSC::IntegralTypedArrayAdaptor::toNativeFromDoubleWithoutCoercion):
        (JSC::FloatTypedArrayAdaptor::toNativeFromInt32WithoutCoercion):
        (JSC::FloatTypedArrayAdaptor::toNativeFromDoubleWithoutCoercion):
        (JSC::Uint8ClampedAdaptor::toNativeFromInt32WithoutCoercion):
        (JSC::Uint8ClampedAdaptor::toNativeFromDoubleWithoutCoercion):

2016-11-26  Sam Weinig  <sam@webkit.org>

        Convert IntersectionObserver over to using RuntimeEnabledFeatures so it can be properly excluded from script
        https://bugs.webkit.org/show_bug.cgi?id=164965

        Reviewed by Simon Fraser.

        * runtime/CommonIdentifiers.h:
        Add identifiers needed for RuntimeEnabledFeatures.

2016-11-23  Zan Dobersek  <zdobersek@igalia.com>

        Remove ENABLE_ASSEMBLER_WX_EXCLUSIVE code
        https://bugs.webkit.org/show_bug.cgi?id=165027

        Reviewed by Darin Adler.

        Remove the code guarded with ENABLE(ASSEMBLER_WX_EXCLUSIVE).
        No port enables this and the guarded code doesn't build at all,
        so it's safe to say it's abandoned.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::reprotectRegion): Deleted.

2016-11-18  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSC profiler files.
        https://bugs.webkit.org/show_bug.cgi?id=164971

        Reviewed by Saam Barati.

        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::addSequenceProperties):
        * profiler/ProfilerCompilation.cpp:
        (JSC::Profiler::Compilation::toJS):
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::toJS):
        (JSC::Profiler::Database::toJSON):
        * profiler/ProfilerOSRExitSite.cpp:
        (JSC::Profiler::OSRExitSite::toJS):
        * profiler/ProfilerOriginStack.cpp:
        (JSC::Profiler::OriginStack::toJS):

2016-11-22  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in JSONObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165025

        Reviewed by Saam Barati.

        * runtime/JSONObject.cpp:
        (JSC::gap):
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncParse):
        (JSC::JSONProtoFuncStringify):
        (JSC::JSONStringify):

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Removed an extra space character at the end of line.

        Not reviewed.

        * runtime/JSCell.cpp:
        (JSC::JSCell::toNumber):

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in FunctionConstructor.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165011

        Reviewed by Saam Barati.

        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        (JSC::constructFunctionSkippingEvalEnabledCheck):

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in GetterSetter.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=165013

        Reviewed by Saam Barati.

        * runtime/GetterSetter.cpp:
        (JSC::callGetter):
        (JSC::callSetter):

2016-11-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Crash in com.apple.JavaScriptCore: WTF::ThreadSpecific<WTF::WTFThreadData, + 142
        https://bugs.webkit.org/show_bug.cgi?id=164898

        Reviewed by Darin Adler.

        The callsite object (JSArray) of tagged template literal is managed by WeakGCMap since
        same tagged template literal need to return an identical object.
        The problem is that we used TemplateRegistryKey as the key of the WeakGCMap. WeakGCMap
        can prune its entries in the collector thread. At that time, this TemplateRegistryKey
        is deallocated. Since it includes String (and then, StringImpl), we accidentally call
        ref(), deref() and StringImpl::destroy() in the different thread from the main thread
        while this TemplateRegistryKey is allocated in the main thread.

        Instead, we use TemplateRegistryKey* as the key of WeakGCMap. Then, to keep its liveness
        while the entry of the WeakGCMap is alive, the callsite object has the reference to
        the JSTemplateRegistryKey. And it holds Ref<TemplateRegistryKey>.

        And now we need to lookup WeakGCMap with TemplateRegistryKey*. To do so, we create
        interning system for TemplateRegistryKey. It is similar to AtomicStringTable and
        SymbolRegistry. TemplateRegistryKey is allocated from this table. This table atomize the
        TemplateRegistryKey. So we can use the pointer comparison between TemplateRegistryKey.
        It allows us to lookup the entry from WeakGCMap by TemplateRegistryKey*.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/BuiltinNames.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addTemplateRegistryKeyConstant):
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        * bytecompiler/BytecodeGenerator.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::getTemplateObject):
        * runtime/JSTemplateRegistryKey.cpp:
        (JSC::JSTemplateRegistryKey::JSTemplateRegistryKey):
        (JSC::JSTemplateRegistryKey::create):
        * runtime/JSTemplateRegistryKey.h:
        * runtime/TemplateRegistry.cpp:
        (JSC::TemplateRegistry::getTemplateObject):
        * runtime/TemplateRegistry.h:
        * runtime/TemplateRegistryKey.cpp: Copied from Source/JavaScriptCore/runtime/TemplateRegistry.h.
        (JSC::TemplateRegistryKey::~TemplateRegistryKey):
        * runtime/TemplateRegistryKey.h:
        (JSC::TemplateRegistryKey::calculateHash):
        (JSC::TemplateRegistryKey::create):
        (JSC::TemplateRegistryKey::TemplateRegistryKey):
        * runtime/TemplateRegistryKeyTable.cpp: Added.
        (JSC::TemplateRegistryKeyTranslator::hash):
        (JSC::TemplateRegistryKeyTranslator::equal):
        (JSC::TemplateRegistryKeyTranslator::translate):
        (JSC::TemplateRegistryKeyTable::~TemplateRegistryKeyTable):
        (JSC::TemplateRegistryKeyTable::createKey):
        (JSC::TemplateRegistryKeyTable::unregister):
        * runtime/TemplateRegistryKeyTable.h: Copied from Source/JavaScriptCore/runtime/JSTemplateRegistryKey.h.
        (JSC::TemplateRegistryKeyTable::KeyHash::hash):
        (JSC::TemplateRegistryKeyTable::KeyHash::equal):
        * runtime/VM.h:
        (JSC::VM::templateRegistryKeyTable):

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in runtime/Error* files.
        https://bugs.webkit.org/show_bug.cgi?id=164998

        Reviewed by Darin Adler.

        * runtime/ErrorConstructor.cpp:
        (JSC::Interpreter::constructWithErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in *Executable.cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=164996

        Reviewed by Darin Adler.

        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        * runtime/IndirectEvalExecutable.cpp:
        (JSC::IndirectEvalExecutable::create):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::prepareForExecutionImpl):

2016-11-20  Zan Dobersek  <zdobersek@igalia.com>

        [EncryptedMedia] Make EME API runtime-enabled
        https://bugs.webkit.org/show_bug.cgi?id=164927

        Reviewed by Jer Noble.

        * runtime/CommonIdentifiers.h: Add the necessary identifiers.

2016-11-20  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ConstructData.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164976

        Reviewed by Darin Adler.

        * runtime/ConstructData.cpp:
        (JSC::construct):

2016-11-20  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in CommonSlowPaths.cpp/h.
        https://bugs.webkit.org/show_bug.cgi?id=164975

        Reviewed by Darin Adler.

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

2016-11-20  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in DateConstructor.cpp and DatePrototype.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164995

        Reviewed by Darin Adler.

        * runtime/DateConstructor.cpp:
        (JSC::millisecondsFromComponents):
        (JSC::constructDate):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToPrimitiveSymbol):

2016-11-20  Caitlin Potter  <caitp@igalia.com>

        [JSC] speed up parsing of async functions
        https://bugs.webkit.org/show_bug.cgi?id=164808

        Reviewed by Yusuke Suzuki.

        Minor adjustments to Parser in order to mitigate slowdown with async
        function parsing enabled:

          - Tokenize "async" as a keyword
          - Perform less branching in various areas of the Parser

        * parser/Keywords.table:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::parseStatement):
        (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::createResolveAndUseVariable):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        (JSC::Parser<LexerType>::printUnexpectedTokenText):
        * parser/Parser.h:
        (JSC::isAnyContextualKeyword):
        (JSC::isIdentifierOrAnyContextualKeyword):
        (JSC::isSafeContextualKeyword):
        (JSC::Parser::matchSpecIdentifier):
        * parser/ParserTokens.h:
        * runtime/CommonIdentifiers.h:

2016-11-19  Mark Lam  <mark.lam@apple.com>

        Add --timeoutMultiplier option to allow some tests more time to run.
        https://bugs.webkit.org/show_bug.cgi?id=164951

        Reviewed by Yusuke Suzuki.

        * jsc.cpp:
        (timeoutThreadMain):
        - Modified to factor in a timeout multiplier that can adjust the timeout duration.
        (startTimeoutThreadIfNeeded):
        - Moved the code that starts the timeout thread here from main() so that we can
        call it after command line args have been parsed instead.
        (main):
        - Deleted old timeout thread starting code.
        (CommandLine::parseArguments):
        - Added parsing of the --timeoutMultiplier option.
        (jscmain):
        - Start the timeout thread if needed after we've parsed the command line args.

2016-11-19  Mark Lam  <mark.lam@apple.com>

        Fix missing exception checks in JSC inspector files.
        https://bugs.webkit.org/show_bug.cgi?id=164959

        Reviewed by Saam Barati.

        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::getInternalProperties):
        (Inspector::JSInjectedScriptHost::weakMapEntries):
        (Inspector::JSInjectedScriptHost::weakSetEntries):
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::scopeDescriptions):

2016-11-18  Mark Lam  <mark.lam@apple.com>

        Fix missing exception checks in DFGOperations.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164958

        Reviewed by Geoffrey Garen.

        * dfg/DFGOperations.cpp:

2016-11-18  Mark Lam  <mark.lam@apple.com>

        Fix exception scope verification failures in ShadowChicken.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164966

        Reviewed by Saam Barati.

        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::functionsOnStack):

2016-11-18  Jeremy Jones  <jeremyj@apple.com>

        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
        https://bugs.webkit.org/show_bug.cgi?id=163801

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2016-11-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::stronglyVisitStrongReferences):

2016-11-18  Filip Pizlo  <fpizlo@apple.com>

        Concurrent GC should be able to run splay in debug mode and earley/raytrace in release mode with no perf regression
        https://bugs.webkit.org/show_bug.cgi?id=164282

        Reviewed by Geoffrey Garen and Oliver Hunt.
        
        The two three remaining bugs were:

        - Improper ordering inside putDirectWithoutTransition() and friends. We need to make sure
          that the GC doesn't see the store to Structure::m_offset until we've resized the butterfly.
          That proved a bit tricky. On the other hand, this means that we could probably remove the
          requirement that the GC holds the Structure lock in some cases. I haven't removed that lock
          yet because I still think it might protect some weird cases, and it doesn't seem to cost us
          anything.
        
        - CodeBlock's GC strategy needed to be made thread-safe (visitWeakly, visitChildren, and
          their friends now hold locks) and incremental-safe (we need to update predictions in the
          finalizer to make sure we clear anything that was put into a value profile towards the end
          of GC).
        
        - The GC timeslicing scheduler needed to be made a bit more aggressive to deal with
          generational workloads like earley, raytrace, and CDjs. Once I got those benchmarks to run,
          I found that they would do many useless iterations of GC because they wouldn't pause long
          enough after rescanning weak references and roots. I added a bunch of knobs for forcing a
          pause. In the end, I realized that I could get the desired effect by putting a ceiling on
          mutator utilization. We want the GC to finish quickly if it is possible to do so, even if
          the amount of allocation that the mutator had done is low. Having a utilization ceiling
          seems to accomplish this for benchmarks with trivial heaps (earley and raytrace) as well as
          huge heaps (like CDjs in its "large" configuration).
        
        This preserves splay performance, makes the concurrent GC more stable, and makes the
        concurrent GC not a perf regression on earley or raytrace. It seems to give us great CDjs
        performance as well, but this is still hard to tell because we crash a lot in that benchmark.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::visitWeakly):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::shouldVisitStrongly):
        (JSC::CodeBlock::shouldJettisonDueToOldAge):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::determineLiveness):
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences):
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally):
        (JSC::CodeBlock::visitOSRExitTargets):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/Heap.cpp:
        (JSC::Heap::ResumeTheWorldScope::ResumeTheWorldScope):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::beginMarking):
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::collectInThread):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::mutatorFence):
        * heap/MarkedBlock.cpp:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::finishCreation):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectInternal):
        * runtime/Options.h:
        * runtime/Structure.cpp:
        (JSC::Structure::add):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::add):

2016-11-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generator functions should have a displayable name when shown in stack traces
        https://bugs.webkit.org/show_bug.cgi?id=164844
        <rdar://problem/29300697>

        Reviewed by Yusuke Suzuki.

        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createGeneratorFunctionBody):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGeneratorFunctionBody):
        New way to create a generator function with an inferred name.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseGeneratorFunctionSourceElements):
        * parser/Parser.h:
        Pass on the name of the generator wrapper function so we can
        use it on the inner generator function.

2016-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add an experimental API to find elements across shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=164851
        <rdar://problem/28220092>

        Reviewed by Sam Weinig.

        * runtime/CommonIdentifiers.h:

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop arguments.caller
        https://bugs.webkit.org/show_bug.cgi?id=164859

        Reviewed by Saam Barati.

        Originally, some JavaScript engine has `arguments.caller` property.
        But it easily causes some information leaks and it becomes obstacles
        for secure ECMAScript (SES). In ES5, we make it deprecated in strict
        mode. To do so, we explicitly set "caller" getter throwing TypeError
        to arguments in strict mode.

        But now, there is no modern engine which supports `arguments.caller`
        in sloppy mode. So the original compatibility problem is gone and
        "caller" getter in the strict mode arguments becomes meaningless.

        ES2017 drops this from the spec. In this patch, we also drop this
        `arguments.caller` in strict mode support.

        Note that Function#caller is still alive.

        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::getOwnPropertySlot):
        (JSC::ClonedArguments::put):
        (JSC::ClonedArguments::deleteProperty):
        (JSC::ClonedArguments::defineOwnProperty):
        (JSC::ClonedArguments::materializeSpecials):

2016-11-17  Mark Lam  <mark.lam@apple.com>

        Inlining should be disallowed when JSC_alwaysUseShadowChicken=true.
        https://bugs.webkit.org/show_bug.cgi?id=164893
        <rdar://problem/29146436>

        Reviewed by Saam Barati.

        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):

2016-11-17  Filip Pizlo  <fpizlo@apple.com>

        Speculatively disable eager object zero-fill on not-x86 to let the bots decide if that's a problem
        https://bugs.webkit.org/show_bug.cgi?id=164885

        Reviewed by Mark Lam.
        
        This adds a useGCFences() function that we use to guard all eager object zero-fill and the
        related fences. It currently returns true only on x86().
        
        The goal here is to get the bots to tell us if this code is responsible for perf issues on
        any non-x86 platforms. We have a few different paths that we can pursue if this turns out
        to be the case. Eager zero-fill is merely the easiest way to optimize out some fences, but
        we could get rid of it and instead teach B3 how to think about fences.

        * assembler/CPU.h:
        (JSC::useGCFences):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::mutatorFence):
        (JSC::FTL::DFG::LowerDFGToB3::setButterfly):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::mutatorFence):
        (JSC::AssemblyHelpers::storeButterfly):
        (JSC::AssemblyHelpers::emitInitializeInlineStorage):
        (JSC::AssemblyHelpers::emitInitializeOutOfLineStorage):

2016-11-17  Keith Miller  <keith_miller@apple.com>

        Add rotate to Wasm
        https://bugs.webkit.org/show_bug.cgi?id=164871

        Reviewed by Filip Pizlo.

        Add rotate left and rotate right to Wasm. These directly map to B3 opcodes.
        This also moves arm specific transformations of rotate left to lower macros
        after optimization. It's a bad idea to have platform specific canonicalizations
        in reduce strength since other optimizations may not be aware of it.

        Add a bug to do pure CSE after lower macros after optimization since we want to
        clean up RotL(value, Neg(Neg(shift))).

        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3LowerMacrosAfterOptimizations.cpp:
        * b3/B3ReduceStrength.cpp:
        * wasm/wasm.json:

2016-11-17  Keith Miller  <keith_miller@apple.com>

        Add sqrt to Wasm
        https://bugs.webkit.org/show_bug.cgi?id=164877

        Reviewed by Mark Lam.

        B3 already has a Sqrt opcode we just need to map Wasm to it.

        * wasm/wasm.json:

2016-11-17  Keith Miller  <keith_miller@apple.com>

        Add support for rotate in B3 and the relevant assemblers
        https://bugs.webkit.org/show_bug.cgi?id=164869

        Reviewed by Geoffrey Garen.

        This patch runs RotR and RotL (rotate right and left respectively)
        through B3 and B3's assemblers. One thing of note is that ARM64 does
        not support rotate left instead it allows negative right rotations.

        This patch also fixes a theoretical bug in the assembler where
        on X86 doing someShiftOp(reg, edx) would instead shift the shift
        amount by the value. Additionally, this patch refactors some
        of the X86 assembler to use templates when deciding how to format
        the appropriate shift instruction.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::rotateRight32):
        (JSC::MacroAssemblerARM64::rotateRight64):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::rotateRight32):
        (JSC::MacroAssemblerX86Common::rotateLeft32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::lshift64):
        (JSC::MacroAssemblerX86_64::rshift64):
        (JSC::MacroAssemblerX86_64::urshift64):
        (JSC::MacroAssemblerX86_64::rotateRight64):
        (JSC::MacroAssemblerX86_64::rotateLeft64):
        (JSC::MacroAssemblerX86_64::or64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::xorq_rm):
        (JSC::X86Assembler::shiftInstruction32):
        (JSC::X86Assembler::sarl_i8r):
        (JSC::X86Assembler::shrl_i8r):
        (JSC::X86Assembler::shll_i8r):
        (JSC::X86Assembler::rorl_i8r):
        (JSC::X86Assembler::rorl_CLr):
        (JSC::X86Assembler::roll_i8r):
        (JSC::X86Assembler::roll_CLr):
        (JSC::X86Assembler::shiftInstruction64):
        (JSC::X86Assembler::sarq_CLr):
        (JSC::X86Assembler::sarq_i8r):
        (JSC::X86Assembler::shrq_i8r):
        (JSC::X86Assembler::shlq_i8r):
        (JSC::X86Assembler::rorq_i8r):
        (JSC::X86Assembler::rorq_CLr):
        (JSC::X86Assembler::rolq_i8r):
        (JSC::X86Assembler::rolq_CLr):
        * b3/B3Common.h:
        (JSC::B3::rotateRight):
        (JSC::B3::rotateLeft):
        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::rotRConstant):
        (JSC::B3::Const32Value::rotLConstant):
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::rotRConstant):
        (JSC::B3::Const64Value::rotLConstant):
        * b3/B3Const64Value.h:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3ReduceStrength.cpp:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::rotRConstant):
        (JSC::B3::Value::rotLConstant):
        (JSC::B3::Value::effects):
        (JSC::B3::Value::key):
        (JSC::B3::Value::typeFor):
        * b3/B3Value.h:
        * b3/B3ValueKey.cpp:
        (JSC::B3::ValueKey::materialize):
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::isRotateRight32Valid):
        (JSC::B3::Air::isRotateLeft32Valid):
        (JSC::B3::Air::isRotateRight64Valid):
        (JSC::B3::Air::isRotateLeft64Valid):
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp:
        (JSC::B3::testRotR):
        (JSC::B3::testRotL):
        (JSC::B3::testRotRWithImmShift):
        (JSC::B3::testRotLWithImmShift):
        (JSC::B3::run):

2016-11-17  Saam Barati  <sbarati@apple.com>

        Remove async/await compile time flag and enable tests
        https://bugs.webkit.org/show_bug.cgi?id=164828
        <rdar://problem/28639334>

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::parseStatement):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        (JSC::Parser<LexerType>::parseUnaryExpression):

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] WTF::TemporaryChange with WTF::SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=164761

        Reviewed by Saam Barati.

        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/SetForScope.h: Removed.
        * debugger/Debugger.cpp:
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::dispatch):
        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::dispatchBreakpointActionLog):
        (Inspector::ScriptDebugServer::dispatchBreakpointActionSound):
        (Inspector::ScriptDebugServer::dispatchBreakpointActionProbe):
        (Inspector::ScriptDebugServer::sourceParsed):
        (Inspector::ScriptDebugServer::dispatchFunctionToListeners):
        * parser/Parser.cpp:

2016-11-16  Mark Lam  <mark.lam@apple.com>

        ExceptionFuzz needs to placate exception check verification before overwriting a thrown exception.
        https://bugs.webkit.org/show_bug.cgi?id=164843

        Reviewed by Keith Miller.

        The ThrowScope will check for unchecked simulated exceptions before throwing a
        new exception.  This ensures that we don't quietly overwrite a pending exception
        (which should never happen, with the only exception being to rethrow the same
        exception).  However, ExceptionFuzz works by intentionally throwing its own
        exception even when one may already exist thereby potentially overwriting an
        existing exception.  This is ok for ExceptionFuzz testing, but we need to placate
        the exception check verifier before ExceptionFuzz throws its own exception.

        * runtime/ExceptionFuzz.cpp:
        (JSC::doExceptionFuzzing):

2016-11-16  Geoffrey Garen  <ggaren@apple.com>

        UnlinkedCodeBlock should not have a starting line number
        https://bugs.webkit.org/show_bug.cgi?id=164838

        Reviewed by Mark Lam.

        Here's how the starting line number in UnlinkedCodeBlock used to work:

        (1) Assign the source code starting line number to the parser starting
        line number.

        (2) Assign (1) to the AST.

        (3) Subtract (1) from (2) and assign to UnlinkedCodeBlock.

        Then, when linking:

        (4) Add (3) to (1).

        This was an awesome no-op.

        Generally, unlinked code is code that is not tied to any particular
        web page or resource. So, it's inappropriate to think of it having a
        starting line number.

        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::recordParse):
        (JSC::UnlinkedCodeBlock::hasCapturedVariables):
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        * runtime/CodeCache.h:
        (JSC::generateUnlinkedCodeBlock):

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=164827

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2016-11-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r208811. It's not sound.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::mutatorFence):
        (JSC::FTL::DFG::LowerDFGToB3::setButterfly):
        (JSC::FTL::DFG::LowerDFGToB3::splatWordsIfMutatorIsFenced): Deleted.

2016-11-16  Keith Miller  <keith_miller@apple.com>

        Wasm function parser should use template functions for each binary and unary opcode
        https://bugs.webkit.org/show_bug.cgi?id=164835

        Reviewed by Mark Lam.

        This patch changes the wasm function parser to call into a template specialization
        for each binary/unary opcode. This change makes it easier to have custom implementations
        of various opcodes. It is also, in theory a speedup since it does not require switching
        on the opcode twice.

        * CMakeLists.txt:
        * DerivedSources.make:
        * wasm/WasmB3IRGenerator.cpp:
        (): Deleted.
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::binaryCase):
        (JSC::Wasm::FunctionParser<Context>::unaryCase):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmValidate.cpp:
        * wasm/generateWasm.py:
        (isBinary):
        (isSimple):
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py: Added.
        (generateSimpleCode):
        * wasm/generateWasmOpsHeader.py:
        (opcodeMacroizer):
        * wasm/generateWasmValidateInlinesHeader.py:

2016-11-16  Mark Lam  <mark.lam@apple.com>

        ExceptionFuzz functions should use its client's ThrowScope.
        https://bugs.webkit.org/show_bug.cgi?id=164834

        Reviewed by Geoffrey Garen.

        This is because ExceptionFuzz's purpose is to throw exceptions from its client at
        exception check sites.  Using the client's ThrowScope solves 2 problems:

        1. If ExceptionFuzz instantiates its own ThrowScope, the simulated throw will be
           mis-attributed to ExceptionFuzz when it should be attributed to its client.

        2. One way exception scope verification works is by having ThrowScopes assert
           that there are no unchecked simulated exceptions when the ThrowScope is
           instantiated.  However, ExceptionFuzz necessarily works by inserting
           doExceptionFuzzingIfEnabled() in between a ThrowScope that simulated a throw
           and an exception check.  If we declare a ThrowScope in ExceptionFuzz's code,
           we will be instantiating the ThrowScope between the point where a simulated
           throw occurs and where the needed exception check can occur.  Hence, having
           ExceptionFuzz instantiate its own ThrowScope will fail exception scope
           verification every time.

        Changing ExceptionFuzz to use its client's ThrowScope resolves both problems.

        Also fixed the THROW() macro in CommonSlowPaths.cpp to use the ThrowScope that
        already exists in every slow path function instead of creating a new one.

        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        * runtime/CommonSlowPaths.cpp:
        * runtime/ExceptionFuzz.cpp:
        (JSC::doExceptionFuzzing):
        * runtime/ExceptionFuzz.h:
        (JSC::doExceptionFuzzingIfEnabled):

2016-11-16  Filip Pizlo  <fpizlo@apple.com>

        Slight Octane regression from concurrent GC's eager object zero-fill
        https://bugs.webkit.org/show_bug.cgi?id=164823

        Reviewed by Geoffrey Garen.
        
        During concurrent GC, we need to eagerly zero-fill objects we allocate prior to
        executing the end-of-allocation fence. This causes some regressions. This is an attempt
        to fix those regressions by making them conditional on whether the mutator is fenced.
        
        This is a slight speed-up on raytrace and boyer, and hopefully it will fix the
        regression.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::splatWordsIfMutatorIsFenced):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::mutatorFence):
        (JSC::FTL::DFG::LowerDFGToB3::setButterfly):

2016-11-16  Mark Lam  <mark.lam@apple.com>

        Fix exception scope checking in JSGlobalObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=164831

        Reviewed by Saam Barati.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        - Use a CatchScope here because we don't ever expect JSGlobalObject initialization
          to fail with errors.
        (JSC::JSGlobalObject::put):
        - Fix exception check requirements.

2016-11-16  Keith Miller  <keith_miller@apple.com>

        Unreviewed, ARM build fix.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        (JSC::B3::Air::LowerToAir::lowerX86Div):
        (JSC::B3::Air::LowerToAir::lowerX86UDiv):

2016-11-15  Mark Lam  <mark.lam@apple.com>

        Make JSC test functions more robust.
        https://bugs.webkit.org/show_bug.cgi?id=164807

        Reviewed by Keith Miller.

        * jsc.cpp:
        (functionGetHiddenValue):
        (functionSetHiddenValue):

2016-11-15  Keith Miller  <keith_miller@apple.com>

        B3 should support UDiv/UMod
        https://bugs.webkit.org/show_bug.cgi?id=164811

        Reviewed by Filip Pizlo.

        This patch adds support for UDiv and UMod in B3. Many of the magic number
        cases have been ommited for now since they are unlikely to happen in wasm
        code. Most wasm code we will see is generated via llvm, which has more
        robust versions of what we would do anyway. Additionally, this patch
        links the new opcodes up to the wasm parser.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::uDiv32):
        (JSC::MacroAssemblerARM64::uDiv64):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::x86UDiv32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::x86UDiv64):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::divq_r):
        * b3/B3Common.h:
        (JSC::B3::chillUDiv):
        (JSC::B3::chillUMod):
        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::uDivConstant):
        (JSC::B3::Const32Value::uModConstant):
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::uDivConstant):
        (JSC::B3::Const64Value::uModConstant):
        * b3/B3Const64Value.h:
        * b3/B3LowerMacros.cpp:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        (JSC::B3::Air::LowerToAir::lowerX86UDiv):
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3ReduceStrength.cpp:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::uDivConstant):
        (JSC::B3::Value::uModConstant):
        (JSC::B3::Value::effects):
        (JSC::B3::Value::key):
        (JSC::B3::Value::typeFor):
        * b3/B3Value.h:
        * b3/B3ValueKey.cpp:
        (JSC::B3::ValueKey::materialize):
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::isX86UDiv32Valid):
        (JSC::B3::Air::isX86UDiv64Valid):
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp:
        (JSC::B3::testUDivArgsInt32):
        (JSC::B3::testUDivArgsInt64):
        (JSC::B3::testUModArgsInt32):
        (JSC::B3::testUModArgsInt64):
        (JSC::B3::run):
        * wasm/wasm.json:

2016-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Preview other CSS @media in browser window (print)
        https://bugs.webkit.org/show_bug.cgi?id=13530
        <rdar://problem/5712928>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Page.json:
        Update to preferred JSON style.

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert renaming useConcurrentJIT to useConcurrentJS.

        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * heap/Heap.cpp:
        (JSC::Heap::addToRememberedSet):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileNow):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/WriteBarrierInlines.h:
        (JSC::WriteBarrierBase<T>::set):
        (JSC::WriteBarrierBase<Unknown>::set):

2016-11-15  Geoffrey Garen  <ggaren@apple.com>

        Debugging and other tools should not disable the code cache
        https://bugs.webkit.org/show_bug.cgi?id=164802

        Reviewed by Mark Lam.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode): Updated for interface
        change.

        * parser/SourceCodeKey.h:
        (JSC::SourceCodeFlags::SourceCodeFlags):
        (JSC::SourceCodeFlags::bits):
        (JSC::SourceCodeKey::SourceCodeKey): Treat debugging and other tools
        as part of our key so that we can cache code while using tools. Be sure
        to include these bits in our hash function so you don't get storms of
        collisions as you open and close the Web Inspector.

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable): Treat tools as
        a part of our key instead of as a reason to disable caching.

        * runtime/CodeCache.h:

2016-11-15  Mark Lam  <mark.lam@apple.com>

        Remove JSString::SafeView and replace its uses with StringViewWithUnderlyingString.
        https://bugs.webkit.org/show_bug.cgi?id=164777

        Reviewed by Geoffrey Garen.

        JSString::SafeView no longer achieves its intended goal to make it easier to
        handle strings safely.  Its clients still need to do explicit exception checks in
        order to be correct.  We'll remove it and replace its uses with
        StringViewWithUnderlyingString instead which serves to gets the a StringView
        (which is what we really wanted from SafeView) and keeps the backing String alive
        while the view is in use.

        Also added some missing exception checks.

        * jsc.cpp:
        (printInternal):
        (functionDebug):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncJoin):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorFuncCompare):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncJoin):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::toStringView):
        (JSC::globalFuncParseFloat):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/JSString.h:
        (JSC::JSString::SafeView::is8Bit): Deleted.
        (JSC::JSString::SafeView::length): Deleted.
        (JSC::JSString::SafeView::SafeView): Deleted.
        (JSC::JSString::SafeView::get): Deleted.
        (JSC::JSString::view): Deleted.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncRepeatCharacter):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncNormalize):

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, remove bogus assertion.

        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint):

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        [mac-wk1 debug] ASSERTION FAILED: thisObject->m_propertyTableUnsafe
        https://bugs.webkit.org/show_bug.cgi?id=162986

        Reviewed by Saam Barati.
        
        This assertion is wrong for concurrent GC anyway, so this removes it.

        * runtime/Structure.cpp:
        (JSC::Structure::visitChildren):

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
        https://bugs.webkit.org/show_bug.cgi?id=164791

        Reviewed by Geoffrey Garen.
        
        Just renaming.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/ArrayProfile.cpp:
        (JSC::ArrayProfile::computeUpdatedPrediction):
        (JSC::ArrayProfile::briefDescription):
        (JSC::ArrayProfile::briefDescriptionWithoutUpdating):
        * bytecode/ArrayProfile.h:
        (JSC::ArrayProfile::observedArrayModes):
        (JSC::ArrayProfile::mayInterceptIndexedAccesses):
        (JSC::ArrayProfile::mayStoreToHole):
        (JSC::ArrayProfile::outOfBounds):
        (JSC::ArrayProfile::usesOriginalArrayStructures):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        (JSC::CallLinkStatus::computeFor):
        (JSC::CallLinkStatus::computeExitSiteData):
        (JSC::CallLinkStatus::computeFromCallLinkInfo):
        (JSC::CallLinkStatus::computeDFGStatuses):
        * bytecode/CallLinkStatus.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpValueProfiling):
        (JSC::CodeBlock::dumpArrayProfiling):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::getStubInfoMap):
        (JSC::CodeBlock::getCallLinkInfoMap):
        (JSC::CodeBlock::getByValInfoMap):
        (JSC::CodeBlock::addStubInfo):
        (JSC::CodeBlock::addByValInfo):
        (JSC::CodeBlock::addCallLinkInfo):
        (JSC::CodeBlock::resetJITData):
        (JSC::CodeBlock::shrinkToFit):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::addArrayProfile):
        (JSC::CodeBlock::getOrAddArrayProfile):
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
        (JSC::CodeBlock::updateAllArrayPredictions):
        (JSC::CodeBlock::nameForRegister):
        (JSC::CodeBlock::livenessAnalysisSlow):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setJITCode):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        (JSC::CodeBlock::addFrequentExitSite):
        (JSC::CodeBlock::hasExitSite):
        (JSC::CodeBlock::livenessAnalysis):
        * bytecode/DFGExitProfile.cpp:
        (JSC::DFG::ExitProfile::add):
        (JSC::DFG::ExitProfile::hasExitSite):
        (JSC::DFG::QueryableExitProfile::initialize):
        * bytecode/DFGExitProfile.h:
        (JSC::DFG::ExitProfile::hasExitSite):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::hasExitSite):
        (JSC::GetByIdStatus::computeFor):
        (JSC::GetByIdStatus::computeForStubInfo):
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetByIdStatus.h:
        * bytecode/LazyOperandValueProfile.cpp:
        (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
        (JSC::CompressedLazyOperandValueProfileHolder::add):
        (JSC::LazyOperandValueProfileParser::initialize):
        (JSC::LazyOperandValueProfileParser::prediction):
        * bytecode/LazyOperandValueProfile.h:
        * bytecode/MethodOfGettingAValueProfile.cpp:
        (JSC::MethodOfGettingAValueProfile::emitReportValue):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::hasExitSite):
        (JSC::PutByIdStatus::computeFor):
        (JSC::PutByIdStatus::computeForStubInfo):
        * bytecode/PutByIdStatus.h:
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureStubClearingWatchpoint::fireInternal):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileBase::briefDescription):
        (JSC::ValueProfileBase::computeUpdatedPrediction):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::fromObserved):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::withSpeculationFromProfile):
        (JSC::DFG::ArrayMode::withProfile):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getArrayMode):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::tryGetConstantClosureVar):
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionInjectionPhase.cpp:
        (JSC::DFG::PredictionInjectionPhase::run):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):
        * heap/Heap.cpp:
        (JSC::Heap::addToRememberedSet):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * jit/JITInlines.h:
        (JSC::JIT::chooseArrayMode):
        * jit/JITOperations.cpp:
        (JSC::tryGetByValOptimize):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByValWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileNow):
        * jit/Repatch.cpp:
        (JSC::repatchGetByID):
        (JSC::repatchPutByID):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::setUpCall):
        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::BytecodeSequence):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
        (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
        * runtime/ConcurrentJITLock.h: Removed.
        * runtime/ConcurrentJSLock.h: Copied from Source/JavaScriptCore/runtime/ConcurrentJITLock.h.
        (JSC::ConcurrentJSLockerBase::ConcurrentJSLockerBase):
        (JSC::ConcurrentJSLockerBase::~ConcurrentJSLockerBase):
        (JSC::GCSafeConcurrentJSLocker::GCSafeConcurrentJSLocker):
        (JSC::GCSafeConcurrentJSLocker::~GCSafeConcurrentJSLocker):
        (JSC::ConcurrentJSLocker::ConcurrentJSLocker):
        (JSC::ConcurrentJITLockerBase::ConcurrentJITLockerBase): Deleted.
        (JSC::ConcurrentJITLockerBase::~ConcurrentJITLockerBase): Deleted.
        (JSC::ConcurrentJITLockerBase::unlockEarly): Deleted.
        (JSC::GCSafeConcurrentJITLocker::GCSafeConcurrentJITLocker): Deleted.
        (JSC::GCSafeConcurrentJITLocker::~GCSafeConcurrentJITLocker): Deleted.
        (JSC::ConcurrentJITLocker::ConcurrentJITLocker): Deleted.
        * runtime/InferredType.cpp:
        (JSC::InferredType::canWatch):
        (JSC::InferredType::addWatchpoint):
        (JSC::InferredType::willStoreValueSlow):
        (JSC::InferredType::makeTopSlow):
        (JSC::InferredType::set):
        (JSC::InferredType::removeStructure):
        * runtime/InferredType.h:
        * runtime/InferredTypeTable.cpp:
        (JSC::InferredTypeTable::visitChildren):
        (JSC::InferredTypeTable::get):
        (JSC::InferredTypeTable::willStoreValue):
        (JSC::InferredTypeTable::makeTop):
        * runtime/InferredTypeTable.h:
        * runtime/JSEnvironmentRecord.cpp:
        (JSC::JSEnvironmentRecord::heapSnapshot):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::addGlobalVar):
        (JSC::JSGlobalObject::addStaticGlobals):
        * runtime/JSLexicalEnvironment.cpp:
        (JSC::JSLexicalEnvironment::getOwnNonIndexPropertyNames):
        * runtime/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::shiftButterflyAfterFlattening):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectInternal):
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::findVariableIndex):
        (JSC::JSSegmentedVariableObject::addVariables):
        (JSC::JSSegmentedVariableObject::heapSnapshot):
        * runtime/JSSegmentedVariableObject.h:
        * runtime/JSSymbolTableObject.cpp:
        (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTableGet):
        (JSC::symbolTablePut):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::matchConcurrently):
        (JSC::RegExp::compileMatchOnly):
        (JSC::RegExp::deleteCode):
        * runtime/RegExp.h:
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::takePropertyTableOrCloneIfPinned):
        (JSC::Structure::nonPropertyTransition):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::ensurePropertyReplacementWatchpointSet):
        (JSC::Structure::add):
        (JSC::Structure::remove):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::propertyReplacementWatchpointSet):
        (JSC::Structure::add):
        (JSC::Structure::remove):
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::visitChildren):
        (JSC::SymbolTable::localToEntry):
        (JSC::SymbolTable::entryFor):
        (JSC::SymbolTable::prepareForTypeProfiling):
        (JSC::SymbolTable::uniqueIDForVariable):
        (JSC::SymbolTable::uniqueIDForOffset):
        (JSC::SymbolTable::globalTypeSetForOffset):
        (JSC::SymbolTable::globalTypeSetForVariable):
        * runtime/SymbolTable.h:
        * runtime/TypeSet.cpp:
        (JSC::TypeSet::addTypeInformation):
        (JSC::TypeSet::invalidateCache):
        * runtime/TypeSet.h:
        (JSC::TypeSet::structureSet):
        * runtime/VM.h:
        * runtime/WriteBarrierInlines.h:
        (JSC::WriteBarrierBase<T>::set):
        (JSC::WriteBarrierBase<Unknown>::set):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::compile):
        (JSC::Yarr::byteCompile):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::BytecodePattern::BytecodePattern):

2016-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused and untested Page.setTouchEmulationEnabled command
        https://bugs.webkit.org/show_bug.cgi?id=164793

        Reviewed by Matt Baker.

        * inspector/protocol/Page.json:

2016-11-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Windows debug build after r208738
        https://bugs.webkit.org/show_bug.cgi?id=164727

        This static member variable can be touched outside of the JSC project
        since inlined MacroAssembler member functions read / write it.
        So it should be exported.

        * assembler/MacroAssemblerX86Common.h:

2016-11-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: inspector/worker/debugger-pause.html fails on WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=164787

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        Clear this DebuggerAgent state when we resume.

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to disable concurrent GC timeslicing
        https://bugs.webkit.org/show_bug.cgi?id=164788

        Reviewed by Saam Barati.
        
        Collector timeslicing means that the collector will try to pause once every 2ms. This is
        great because it throttles the mutator and prevents it from outpacing the collector. But
        it reduces some of the efficacy of the collectContinuously=true configuration: while
        it's great that collecting continuously means that the collector will also pause more
        frequently and so it will test the pausing code, it also means that the collector will
        spend less time running concurrently. The primary purpose of collectContinuously is to
        maximize the amount of time that the collector is running concurrently to the mutator to
        maximize the likelihood that a race will cause a detectable error.
        
        This adds an option to disable collector timeslicing (useCollectorTimeslicing=false).
        The idea is that we will usually use this in conjunction with collectContinuously=true
        to find race conditions during marking, but we can also use the two options
        independently to focus our testing on other things.

        * heap/Heap.cpp:
        (JSC::Heap::markToFixpoint):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::drainInParallel): We should have added this helper ages ago.
        * heap/SlotVisitor.h:
        * runtime/Options.h:

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        The concurrent GC should have a timeslicing controller
        https://bugs.webkit.org/show_bug.cgi?id=164783

        Reviewed by Geoffrey Garen.
        
        This adds a simple control system for deciding when the collector should let the mutator run
        and when it should stop the mutator. We definitely have to stop the mutator during certain
        collector phases, but during marking - which takes the most time - we can go either way.
        Normally we want to let the mutator run, but if the heap size starts to grow then we have to
        stop the mutator just to make sure it doesn't get too far ahead of the collector. That could
        lead to memory exhaustion, so it's better to just stop in that case.
        
        The controller tries to never stop the mutator for longer than short timeslices. It slices on
        a 2ms period (configurable via Options). The amount of that period that the collector spends
        with the mutator stopped is determined by the fraction of the collector's concurrent headroom
        that has been allocated over. The headroom is currently configured at 50% of what was
        allocated before the collector started.
        
        This moves a bunch of parameters into Options so that it's easier to play with different
        configurations.
        
        I tried these different values for the period:
        
        1ms: 30% worse than 2ms on splay-latency.
        2ms: best score on splay-latency: the tick time above the 99.5% percentile is <2ms.
        3ms: 40% worse than 2ms on splay-latency.
        4ms: 40% worse than 2ms on splay-latency.
        
        I also tried 100% headroom as an alternate to 50% and found it to be a worse.
        
        This patch is a 2x improvement on splay-latency with the default parameters and concurrent GC
        enabled. Prior to this change, the GC didn't have a good bound on its pause times, which
        would cause these problems. Concurrent GC is now 5.6x better on splay-latency than no
        concurrent GC.

        * heap/Heap.cpp:
        (JSC::Heap::ResumeTheWorldScope::ResumeTheWorldScope):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::collectInThread):
        * runtime/Options.h:

2016-11-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for CLoop after r208738
        https://bugs.webkit.org/show_bug.cgi?id=164727

        * jsc.cpp:
        (WTF::DOMJITFunctionObject::unsafeFunction):
        (WTF::DOMJITFunctionObject::finishCreation):

2016-11-15  Mark Lam  <mark.lam@apple.com>

        The jsc shell's setImpureGetterDelegate() should ensure that the set value is an ImpureGetter.
        https://bugs.webkit.org/show_bug.cgi?id=164781
        <rdar://problem/28418590>

        Reviewed by Geoffrey Garen and Michael Saboff.

        * jsc.cpp:
        (functionSetImpureGetterDelegate):

2016-11-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Allow using macro assembler scratches in FTL CheckDOM
        https://bugs.webkit.org/show_bug.cgi?id=164727

        Reviewed by Filip Pizlo.

        While CallDOMGetter can use macro assembler scratch registers, we previiously
        assumed that CheckDOM code generator does not use macro assembler scratch registers.
        It is currently true in x86 environment. But it is not true in the other environments.

        We should not limit DOMJIT::Patchpoint's functionality in such a way. We should allow
        arbitrary macro assembler operations inside the DOMJIT::Patchpoint. This patch allows
        CheckDOM to use macro assembler scratch registers.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        * jsc.cpp:
        (WTF::DOMJITFunctionObject::DOMJITFunctionObject):
        (WTF::DOMJITFunctionObject::createStructure):
        (WTF::DOMJITFunctionObject::create):
        (WTF::DOMJITFunctionObject::unsafeFunction):
        (WTF::DOMJITFunctionObject::safeFunction):
        (WTF::DOMJITFunctionObject::checkDOMJITNode):
        (WTF::DOMJITFunctionObject::finishCreation):
        (GlobalObject::finishCreation):
        (functionCreateDOMJITFunctionObject):

2016-11-14  Geoffrey Garen  <ggaren@apple.com>

        CodeCache should stop pretending to cache builtins
        https://bugs.webkit.org/show_bug.cgi?id=164750

        Reviewed by Saam Barati.

        We were passing JSParserBuiltinMode to all CodeCache functions, but the
        passed-in value was always NotBuiltin.

        Let's stop passing it.

        * parser/SourceCodeKey.h:
        (JSC::SourceCodeFlags::SourceCodeFlags):
        (JSC::SourceCodeKey::SourceCodeKey):
        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        (JSC::CodeCache::getUnlinkedProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalEvalCodeBlock):
        (JSC::CodeCache::getUnlinkedModuleProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        (JSC::generateUnlinkedCodeBlock):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::createProgramCodeBlock):
        (JSC::JSGlobalObject::createLocalEvalCodeBlock):
        (JSC::JSGlobalObject::createGlobalEvalCodeBlock):
        (JSC::JSGlobalObject::createModuleProgramCodeBlock):

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r208711-r208722): ASSERTION FAILED: hasInlineStorage()
        https://bugs.webkit.org/show_bug.cgi?id=164775

        Reviewed by Mark Lam and Keith Miller.
        
        We were calling inlineStorage() which asserts that inline storage is not empty. But we
        were calling it in a context where it could be empty and that's fine. So, we now call
        inlineStorageUnsafe().

        * runtime/JSObject.h:
        (JSC::JSFinalObject::JSFinalObject):

2016-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Unreviewed buildfix after r208720.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::storeFence): Stub function copied from MacroAssemblerARMv7.h.

2016-11-14  Caitlin Potter  <caitp@igalia.com>

        [JSC] do not reference AwaitExpression Promises in async function Promise chain
        https://bugs.webkit.org/show_bug.cgi?id=164753

        Reviewed by Yusuke Suzuki.

        Previously, long-running async functions which contained many AwaitExpressions
        would allocate and retain references to intermediate Promise objects for each `await`,
        resulting in a memory leak.

        To mitigate this leak, a reference to the original Promise (and its resolve and reject
        functions) associated with the async function are kept, and passed to each call to
        @asyncFunctionResume, while intermediate Promises are discarded. This is done by adding
        a new Register to the BytecodeGenerator to hold the PromiseCapability object associated
        with an async function wrapper. The capability is used to reject the Promise if an
        exception is thrown during parameter initialization, and is used to store the resulting
        value once the async function has terminated.

        * builtins/AsyncFunctionPrototype.js:
        (globalPrivate.asyncFunctionResume):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::promiseCapabilityRegister):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionNode::emitBytecode):

2016-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Worker debugging should pause all targets and view call frames in all targets
        https://bugs.webkit.org/show_bug.cgi?id=164305
        <rdar://problem/29056192>

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._propertyDescriptors):
        Accessing __proto__ does a ToThis(...) conversion on the receiver.
        In the case of GlobalObjects (such as WorkerGlobalScope when paused)
        this would return undefined and throw an exception. We can use
        Object.getPrototypeOf to avoid that conversion and possible error.

        * inspector/protocol/Debugger.json:
        Provide a new way to effectively `resume` + `pause` immediately.
        This must be implemented on the backend to correctly synchronize
        the resuming and pausing.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::continueUntilNextRunLoop):
        Treat this as `resume` and `pause`. Resume now, and trigger
        a pause if the VM becomes idle and we didn't pause before then
        (such as hitting a breakpoint after we resumed).

        (Inspector::InspectorDebuggerAgent::pause):
        (Inspector::InspectorDebuggerAgent::resume):
        (Inspector::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (Inspector::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        Clean up and correct pause on next statement logic.

        (Inspector::InspectorDebuggerAgent::registerIdleHandler):
        (Inspector::InspectorDebuggerAgent::willStepAndMayBecomeIdle):
        (Inspector::InspectorDebuggerAgent::didBecomeIdle):
        (Inspector::InspectorDebuggerAgent::didBecomeIdleAfterStepping): Deleted.
        The idle handler may now also trigger a pause in the case
        where continueUntilNextRunLoop resumed and wants to pause.

        (Inspector::InspectorDebuggerAgent::didPause):
        Eliminate the useless didPause. The DOMDebugger was keeping track
        of its own state that was worse then the state in DebuggerAgent.

2016-11-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix cloop.

        * runtime/JSCellInlines.h:

2016-11-14  Filip Pizlo  <fpizlo@apple.com>

        The GC should be optionally concurrent and disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=164454

        Reviewed by Geoffrey Garen.
        
        This started out as a patch to have the GC scan the stack at the end, and then the
        outage happened and I decided to pick a more aggresive target: give the GC a concurrent
        mode that can be enabled at runtime, and whose only effect is that it turns on the
        ResumeTheWorldScope. This gives our GC a really intuitive workflow: by default, the GC
        thread is running solo with the world stopped and the parallel markers converged and
        waiting. We have a parallel work scope to enable the parallel markers and now we have a
        ResumeTheWorldScope that will optionally resume the world and then stop it again.
        
        It's easy to make a concurrent GC that always instantly crashes. I can't promise that
        this one won't do that when you run it. I set a specific goal: I wanted to do >10
        concurrent GCs in debug mode with generations, optimizing JITs, and parallel marking
        disabled.
        
        To reach this milestone, I needed to do a bunch of stuff:
        
        - The mutator needs a separate mark stack for the barrier, since it will mutate this
          stack concurrently to the collector's slot visitors.
        
        - The use of CellState to indicate whether an object is being scanned the first time or
          a subsequent time was racy. It fails spectacularly when a barrier is fired at the same
          time as visitChildren is running or if the barrier runs at the same time as the GC
          marks the same object. So, I split SlotVisitor's mark stacks. It's now the case that
          you know why you're being scanned by looking at which stack you came off of.
        
        - All of root marking must be in the collector fixpoint. I renamed markRoots to
          markToFixpoint. They say concurrency is hard, but the collector looks more intuitive
          this way. We never gained anything from forcing people to make a choice between
          scanning something in the fixpoint versus outside of it. Because root scanning is
          cheap, we can afford to do it repeatedly, which means all root scanning can now do
          constraint-based marking (like: I'll mark you if that thing is marked).
        
        - JSObject::visitChildren's scanning of the butterfly raced with property additions,
          indexed storage transitions and resizing, and a bunch of miscellaneous dirty butterfly
          reshaping functions - like the one that flattens a dictionary and some sneaky
          ArrayStorage transformations. Many of these can be fixed by using store-store fences
          in the mutator and load-load fences in the collector. I've adopted the rule that the
          collector must always see either a butterfly and structure that match or a newer
          butterfly with an older structure, where their age is just one transition apart. This
          can be achieved with fences. For the cases where it breaks down, I added a lock to
          every JSCell. This is a full-fledged WTF lock that we sneak into two available bits in
          the indexingType. See the WTF ChangeLog for details.
          
          The mutator fencing rules are as follows:
          
          - Store-store fence before and after setting the butterfly.
          - Store-store fence before setting structure if you had changed the shape of the
            butterfly.
          - Store-store fence after initializing all fields in an allocation.
        
        - A dictionary Structure can change in strange ways while the GC is trying to scan it.
          So, JSObject::visitChildren will now grab the object's structure's lock if the
          object's structure is a dictionary. Dictionary structures are 1:1 with their object,
          so this does not reduce GC parallelism (super unlikely that the GC will simultaneously
          scan an object from two threads).
        
        - The GC can blow away a Structure's property table at any time. As a small consolation,
          it's now holding the Structure's lock when it does so. But there was tons of code in
          Structure that uses DeferGC to prevent the GC from blowing away the property table.
          This doesn't work with concurrent GC, since DeferGC only means that the GC won't run
          its safepoint (i.e. stop-the-world code) in the DeferGC region. It will still do
          marking and it was the Structure::visitChildren that would delete the table. It turns
          out that Structure's reliance on the property table not being deleted was the product
          of code rot. We already had functions that would materialize the table on demand. We
          were simply making the mistake of saying:
          
              structure->materializePropertyMap();
              ...
              structure->propertyTable()->things
          
          Instead of saying:
          
              PropertyTable* table = structure->ensurePropertyTable();
              ...
              table->things
          
          Switching the code to use the latter idiom allowed me to simplify the code a lot while
          fixing the race.
        
        - The LLInt's get_by_val handling was broken because the indexing shape constants were
          wrong. Once I started putting more things into the IndexingType, that started causing
          crashes for me. So I fixed LLInt. That turned out to be a lot of work, since that code
          had rotted in subtle ways.
        
        This is a speed-up in SunSpider, probably because of the LLInt fix. This is neutral on
        Octane and Kraken. It's a smaller slow-down on LongSpider, but I think we can ignore
        that (we don't view LongSpider as an official benchmark). By default, the concurrent GC
        is disabled: in all of the places where it would have resumed the world to run marking
        concurrently to the mutator, it will just skip the resume step. When you enable
        concurrent GC (--useConcurrentGC=true), it can sometimes run Octane/splay to completion.
        It seems to perform quite well: on my machine, it improves both splay-throughput and
        splay-latency. It's probably unstable for other programs.

        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine isOldExternalObject:]):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::storeFence):
        * bytecode/InlineAccess.cpp:
        (JSC::InlineAccess::dumpCacheSizesAndCrash):
        (JSC::InlineAccess::generateSelfPropertyAccess):
        (JSC::InlineAccess::generateArrayLength):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfile::offsetOfInlineCapacity):
        (JSC::ObjectAllocationProfile::ObjectAllocationProfile):
        (JSC::ObjectAllocationProfile::initialize):
        (JSC::ObjectAllocationProfile::inlineCapacity):
        (JSC::ObjectAllocationProfile::clear):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * dfg/DFGArrayifySlowPathGenerator.h:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOperations.cpp:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::markCodeBlocks):
        (JSC::DFG::Plan::rememberCodeBlocks):
        * dfg/DFGPlan.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
        (JSC::DFG::SpeculativeJIT::checkArray):
        (JSC::DFG::SpeculativeJIT::arrayify):
        (JSC::DFG::SpeculativeJIT::compileMakeRope):
        (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon):
        (JSC::DFG::SpeculativeJIT::compileCreateActivation):
        (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments):
        (JSC::DFG::SpeculativeJIT::compileSpread):
        (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileNewStringObject):
        (JSC::DFG::SpeculativeJIT::compileNewTypedArray):
        (JSC::DFG::SpeculativeJIT::compileStoreBarrier):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::markCodeBlocks):
        (JSC::DFG::Worklist::rememberCodeBlocks):
        (JSC::DFG::markCodeBlocks):
        (JSC::DFG::completeAllPlansForVM):
        (JSC::DFG::rememberCodeBlocks):
        * dfg/DFGWorklist.h:
        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
        (JSC::FTL::AbstractHeapRepository::computeRangesAndDecorateInstructions):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::~JITCode):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::splatWords):
        (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
        (JSC::FTL::DFG::LowerDFGToB3::isArrayType):
        (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier):
        (JSC::FTL::DFG::LowerDFGToB3::mutatorFence):
        (JSC::FTL::DFG::LowerDFGToB3::setButterfly):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::signExt32ToPtr):
        (JSC::FTL::Output::fence):
        * ftl/FTLOutput.h:
        * heap/CellState.h:
        * heap/GCSegmentedArray.h:
        * heap/Heap.cpp:
        (JSC::Heap::ResumeTheWorldScope::ResumeTheWorldScope):
        (JSC::Heap::ResumeTheWorldScope::~ResumeTheWorldScope):
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::harvestWeakReferences):
        (JSC::Heap::finalizeUnconditionalFinalizers):
        (JSC::Heap::completeAllJITPlans):
        (JSC::Heap::markToFixpoint):
        (JSC::Heap::gatherStackRoots):
        (JSC::Heap::beginMarking):
        (JSC::Heap::visitConservativeRoots):
        (JSC::Heap::visitCompilerWorklistWeakReferences):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::endMarking):
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::collectInThread):
        (JSC::Heap::stopTheWorld):
        (JSC::Heap::resumeTheWorld):
        (JSC::Heap::setGCDidJIT):
        (JSC::Heap::setNeedFinalize):
        (JSC::Heap::setMutatorWaiting):
        (JSC::Heap::clearMutatorWaiting):
        (JSC::Heap::finalize):
        (JSC::Heap::flushWriteBarrierBuffer):
        (JSC::Heap::writeBarrierSlowPath):
        (JSC::Heap::canCollect):
        (JSC::Heap::reportExtraMemoryVisited):
        (JSC::Heap::reportExternalMemoryVisited):
        (JSC::Heap::notifyIsSafeToCollect):
        (JSC::Heap::markRoots): Deleted.
        (JSC::Heap::visitExternalRememberedSet): Deleted.
        (JSC::Heap::visitSmallStrings): Deleted.
        (JSC::Heap::visitProtectedObjects): Deleted.
        (JSC::Heap::visitArgumentBuffers): Deleted.
        (JSC::Heap::visitException): Deleted.
        (JSC::Heap::visitStrongHandles): Deleted.
        (JSC::Heap::visitHandleStack): Deleted.
        (JSC::Heap::visitSamplingProfiler): Deleted.
        (JSC::Heap::visitTypeProfiler): Deleted.
        (JSC::Heap::visitShadowChicken): Deleted.
        (JSC::Heap::traceCodeBlocksAndJITStubRoutines): Deleted.
        (JSC::Heap::visitWeakHandles): Deleted.
        (JSC::Heap::flushOldStructureIDTables): Deleted.
        (JSC::Heap::stopAllocation): Deleted.
        * heap/Heap.h:
        (JSC::Heap::collectorSlotVisitor):
        (JSC::Heap::mutatorMarkStack):
        (JSC::Heap::mutatorShouldBeFenced):
        (JSC::Heap::addressOfMutatorShouldBeFenced):
        (JSC::Heap::slotVisitor): Deleted.
        (JSC::Heap::notifyIsSafeToCollect): Deleted.
        (JSC::Heap::barrierShouldBeFenced): Deleted.
        (JSC::Heap::addressOfBarrierShouldBeFenced): Deleted.
        * heap/MarkStack.cpp:
        (JSC::MarkStackArray::transferTo):
        * heap/MarkStack.h:
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::tryAllocateIn):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::Handle::specializedSweep):
        (JSC::MarkedBlock::Handle::sweep):
        (JSC::MarkedBlock::Handle::sweepHelperSelectMarksMode):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):
        (JSC::SetNewlyAllocatedFunctor::SetNewlyAllocatedFunctor): Deleted.
        (JSC::SetNewlyAllocatedFunctor::operator()): Deleted.
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::resumeAllocating):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::SlotVisitor):
        (JSC::SlotVisitor::~SlotVisitor):
        (JSC::SlotVisitor::reset):
        (JSC::SlotVisitor::clearMarkStacks):
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        (JSC::SlotVisitor::setMarkedAndAppendToMarkStack):
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::appendToMutatorMarkStack):
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::donateKnownParallel):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::containsOpaqueRoot):
        (JSC::SlotVisitor::donateAndDrain):
        (JSC::SlotVisitor::mergeOpaqueRoots):
        (JSC::SlotVisitor::dump):
        (JSC::SlotVisitor::clearMarkStack): Deleted.
        (JSC::SlotVisitor::opaqueRootCount): Deleted.
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::collectorMarkStack):
        (JSC::SlotVisitor::mutatorMarkStack):
        (JSC::SlotVisitor::isEmpty):
        (JSC::SlotVisitor::bytesVisited):
        (JSC::SlotVisitor::markStack): Deleted.
        (JSC::SlotVisitor::bytesCopied): Deleted.
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        (JSC::SlotVisitor::reportExternalMemoryVisited):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitStoreStructureWithTypeInfo):
        (JSC::AssemblyHelpers::barrierStoreLoadFence):
        (JSC::AssemblyHelpers::mutatorFence):
        (JSC::AssemblyHelpers::storeButterfly):
        (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded):
        (JSC::AssemblyHelpers::emitInitializeInlineStorage):
        (JSC::AssemblyHelpers::emitInitializeOutOfLineStorage):
        (JSC::AssemblyHelpers::jumpIfBarrierStoreLoadFenceNotNeeded): Deleted.
        * jit/JITInlines.h:
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        * jit/JITOperations.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emit_op_put_to_arguments):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/ButterflyInlines.h:
        (JSC::Butterfly::create):
        (JSC::Butterfly::createOrGrowPropertyStorage):
        * runtime/ConcurrentJITLock.h:
        (JSC::GCSafeConcurrentJITLocker::NoDefer::NoDefer): Deleted.
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::getOwnPropertySlotByIndex):
        (JSC::GenericArguments<Type>::putByIndex):
        * runtime/IndexingType.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase):
        (JSC::JSArray::unshiftCountWithArrayStorage):
        * runtime/JSCell.h:
        (JSC::JSCell::InternalLocker::InternalLocker):
        (JSC::JSCell::InternalLocker::~InternalLocker):
        (JSC::JSCell::atomicCompareExchangeCellStateWeakRelaxed):
        (JSC::JSCell::atomicCompareExchangeCellStateStrong):
        (JSC::JSCell::indexingTypeAndMiscOffset):
        (JSC::JSCell::indexingTypeOffset): Deleted.
        * runtime/JSCellInlines.h:
        (JSC::JSCell::JSCell):
        (JSC::JSCell::finishCreation):
        (JSC::JSCell::indexingTypeAndMisc):
        (JSC::JSCell::indexingType):
        (JSC::JSCell::setStructure):
        (JSC::JSCell::callDestructor):
        (JSC::JSCell::lockInternalLock):
        (JSC::JSCell::unlockInternalLock):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterfly):
        (JSC::JSObject::visitChildren):
        (JSC::JSFinalObject::visitChildren):
        (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists):
        (JSC::JSObject::createInitialUndecided):
        (JSC::JSObject::createInitialInt32):
        (JSC::JSObject::createInitialDouble):
        (JSC::JSObject::createInitialContiguous):
        (JSC::JSObject::createArrayStorage):
        (JSC::JSObject::convertUndecidedToArrayStorage):
        (JSC::JSObject::convertInt32ToArrayStorage):
        (JSC::JSObject::convertDoubleToArrayStorage):
        (JSC::JSObject::convertContiguousToArrayStorage):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::defineOwnIndexedProperty):
        (JSC::JSObject::increaseVectorLength):
        (JSC::JSObject::ensureLengthSlow):
        (JSC::JSObject::reallocateAndShrinkButterfly):
        (JSC::JSObject::allocateMoreOutOfLineStorage):
        (JSC::JSObject::shiftButterflyAfterFlattening):
        (JSC::JSObject::growOutOfLineStorage): Deleted.
        * runtime/JSObject.h:
        (JSC::JSFinalObject::JSFinalObject):
        (JSC::JSObject::setButterfly):
        (JSC::JSObject::getOwnNonIndexPropertySlot):
        (JSC::JSObject::fillCustomGetterPropertySlot):
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::setStructureAndButterfly): Deleted.
        (JSC::JSObject::setButterflyWithoutChangingStructure): Deleted.
        (JSC::JSObject::putDirectInternal): Deleted.
        (JSC::JSObject::putDirectWithoutTransition): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::getNonIndexPropertySlot):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectInternal):
        * runtime/Options.h:
        * runtime/SparseArrayValueMap.h:
        * runtime/Structure.cpp:
        (JSC::Structure::dumpStatistics):
        (JSC::Structure::findStructuresAndMapForMaterialization):
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::attributeChangeTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::takePropertyTableOrCloneIfPinned):
        (JSC::Structure::nonPropertyTransition):
        (JSC::Structure::isSealed):
        (JSC::Structure::isFrozen):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::pin):
        (JSC::Structure::pinForCaching):
        (JSC::Structure::willStoreValueSlow):
        (JSC::Structure::copyPropertyTableForPinning):
        (JSC::Structure::add):
        (JSC::Structure::remove):
        (JSC::Structure::getPropertyNamesFromStructure):
        (JSC::Structure::visitChildren):
        (JSC::Structure::materializePropertyMap): Deleted.
        (JSC::Structure::addPropertyWithoutTransition): Deleted.
        (JSC::Structure::removePropertyWithoutTransition): Deleted.
        (JSC::Structure::copyPropertyTable): Deleted.
        (JSC::Structure::createPropertyMap): Deleted.
        (JSC::PropertyTable::checkConsistency): Deleted.
        (JSC::Structure::checkConsistency): Deleted.
        * runtime/Structure.h:
        * runtime/StructureIDBlob.h:
        (JSC::StructureIDBlob::StructureIDBlob):
        (JSC::StructureIDBlob::indexingTypeIncludingHistory):
        (JSC::StructureIDBlob::setIndexingTypeIncludingHistory):
        (JSC::StructureIDBlob::indexingTypeIncludingHistoryOffset):
        (JSC::StructureIDBlob::indexingType): Deleted.
        (JSC::StructureIDBlob::setIndexingType): Deleted.
        (JSC::StructureIDBlob::indexingTypeOffset): Deleted.
        * runtime/StructureInlines.h:
        (JSC::Structure::get):
        (JSC::Structure::checkOffsetConsistency):
        (JSC::Structure::checkConsistency):
        (JSC::Structure::add):
        (JSC::Structure::remove):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::setPropertyTable):
        (JSC::Structure::putWillGrowOutOfLineStorage): Deleted.
        (JSC::Structure::propertyTable): Deleted.
        (JSC::Structure::suggestedNewOutOfLineStorageCapacity): Deleted.

2016-11-14  Keith Miller  <keith_miller@apple.com>

        Add Wasm select
        https://bugs.webkit.org/show_bug.cgi?id=164743

        Reviewed by Saam Barati.

        Also, this patch fixes an issue with the jsc.cpp test harness where negative numbers would be sign extended
        when they shouldn't be.

        * jsc.cpp:
        (box):
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::addSelect):

2016-11-11  Geoffrey Garen  <ggaren@apple.com>

        JSC should distinguish between local and global eval
        https://bugs.webkit.org/show_bug.cgi?id=164628

        Reviewed by Saam Barati.

        Local use of the 'eval' keyword and invocation of the global window.eval
        function are distinct operations in JavaScript.

        This patch splits out LocalEvalExecutable vs GlobalEvalExecutable in
        order to help distinguish these operations in code.

        Our code used to do some silly things for lack of distinguishing these
        cases. For example, it would double cache local eval in CodeCache and
        EvalCodeCache. This made CodeCache seem more complicated than it really
        was.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj: Added some files.

        * bytecode/CodeBlock.h:

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::tryGet):
        (JSC::EvalCodeCache::set):
        (JSC::EvalCodeCache::getSlow): Deleted. Moved code generation out of
        the cache to avoid tight coupling. Now the cache just caches.

        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecode/UnlinkedProgramCodeBlock.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension): Updated for interface
        changes.

        * interpreter/Interpreter.cpp:
        (JSC::eval): Moved code generation here so the cache didn't need to build
        it in.

        * llint/LLIntOffsetsExtractor.cpp:

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock): No need to check for TDZ
        variables any more. We only cache global programs, and global variable
        access always does TDZ checks.

        (JSC::CodeCache::getUnlinkedProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalEvalCodeBlock):
        (JSC::CodeCache::getUnlinkedModuleProgramCodeBlock):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):

        (JSC::CodeCache::CodeCache): Deleted.
        (JSC::CodeCache::~CodeCache): Deleted.
        (JSC::CodeCache::getGlobalCodeBlock): Deleted.
        (JSC::CodeCache::getProgramCodeBlock): Deleted.
        (JSC::CodeCache::getEvalCodeBlock): Deleted.
        (JSC::CodeCache::getModuleProgramCodeBlock): Deleted.
        (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Deleted.

        * runtime/CodeCache.h:
        (JSC::CodeCache::clear):
        (JSC::generateUnlinkedCodeBlock): Moved unlinked code block creation
        out of the CodeCache class and into a stand-alone function because
        we need it for local eval, which does not live in CodeCache.

        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::create): Deleted.
        * runtime/EvalExecutable.h:
        (): Deleted.
        * runtime/GlobalEvalExecutable.cpp: Added.
        (JSC::GlobalEvalExecutable::create):
        (JSC::GlobalEvalExecutable::GlobalEvalExecutable):
        * runtime/GlobalEvalExecutable.h: Added.
        * runtime/LocalEvalExecutable.cpp: Added.
        (JSC::LocalEvalExecutable::create):
        (JSC::LocalEvalExecutable::LocalEvalExecutable):
        * runtime/LocalEvalExecutable.h: Added. Split out Local vs Global
        EvalExecutable classes to distinguish these operations in code. The key
        difference is that LocalEvalExecutable does not live in the CodeCache
        and only lives in the EvalCodeCache.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::createProgramCodeBlock):
        (JSC::JSGlobalObject::createLocalEvalCodeBlock):
        (JSC::JSGlobalObject::createGlobalEvalCodeBlock):
        (JSC::JSGlobalObject::createModuleProgramCodeBlock):
        (JSC::JSGlobalObject::createEvalCodeBlock): Deleted.
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):

        * runtime/JSScope.cpp:
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        (JSC::JSScope::collectVariablesUnderTDZ): Deleted. We don't include
        global lexical variables in our concept of TDZ scopes anymore. Global
        variable access always does TDZ checks unconditionally. So, only closure
        scope accesses give specific consideration to TDZ checks.

        * runtime/JSScope.h:

2016-11-14  Caitlin Potter  <caitp@igalia.com>

        [JSC] Handle new_async_func / new_async_func_exp in DFG / FTL
        https://bugs.webkit.org/show_bug.cgi?id=164037

        Reviewed by Yusuke Suzuki.

        This patch introduces new_async_func / new_async_func_exp into DFG and FTL,
        in much the same capacity that https://trac.webkit.org/changeset/194216 added
        DFG / FTL support for generators: by adding new DFG nodes (NewAsyncFunction and
        PhantomNewAsyncFunction), rather than extending the existing NewFunction node type.

        Like NewFunction and PhantomNewFunction, and the Generator variants, allocation of
        async wrapper functions may be deferred or eliminated during the allocation sinking
        phase.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToPhantomNewFunction):
        (JSC::DFG::Node::convertToPhantomNewAsyncFunction):
        (JSC::DFG::Node::hasCellOperand):
        (JSC::DFG::Node::isFunctionAllocation):
        (JSC::DFG::Node::isPhantomFunctionAllocation):
        (JSC::DFG::Node::isPhantomAllocation):
        * dfg/DFGNodeType.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewFunction):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::asyncFunctionPrototype):
        (JSC::JSGlobalObject::asyncFunctionStructure):
        (JSC::JSGlobalObject::lazyAsyncFunctionStructure): Deleted.
        (JSC::JSGlobalObject::asyncFunctionPrototypeConcurrently): Deleted.
        (JSC::JSGlobalObject::asyncFunctionStructureConcurrently): Deleted.

2016-11-14  Mark Lam  <mark.lam@apple.com>

        Some of JSStringView::SafeView methods are not idiomatically safe for JSString to StringView conversions.
        https://bugs.webkit.org/show_bug.cgi?id=164701
        <rdar://problem/27462104>

        Reviewed by Darin Adler.

        The characters8(), characters16(), and operator[] in JSString::SafeView converts
        the underlying JSString to a StringView via get(), and then uses the StringView
        without first checking if an exception was thrown during the conversion.  This is
        unsafe because the conversion may have failed.
        
        Instead, we should remove these 3 convenience methods, and make the caller
        explicitly call get() and do the appropriate exception checks before using the
        StringView.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::toStringView):
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        (JSC::toSafeView): Deleted.
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/JSString.h:
        (JSC::JSString::SafeView::length):
        (JSC::JSString::SafeView::characters8): Deleted.
        (JSC::JSString::SafeView::characters16): Deleted.
        (JSC::JSString::SafeView::operator[]): Deleted.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncRepeatCharacter):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncNormalize):

2016-11-14  Mark Lam  <mark.lam@apple.com>

        RegExpObject::exec/match should handle errors gracefully.
        https://bugs.webkit.org/show_bug.cgi?id=155145
        <rdar://problem/27435934>

        Reviewed by Keith Miller.

        1. Added some missing exception checks to RegExpObject::execInline() and
           RegExpObject::matchInline().
        2. Updated related code to work with ExceptionScope verification requirements.

        * dfg/DFGOperations.cpp:
        * runtime/RegExpObjectInlines.h:
        (JSC::RegExpObject::execInline):
        (JSC::RegExpObject::matchInline):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTestFast):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncMatchFast):

2016-11-13  Mark Lam  <mark.lam@apple.com>

        Add debugging facility to limit the max single allocation size.
        https://bugs.webkit.org/show_bug.cgi?id=164681

        Reviewed by Keith Miller.

        Added JSC option to set FastMalloc's maxSingleAllocationSize for testing purposes.
        This option is only available on Debug builds.

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

2016-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Follow-up fix to r208639.

        Unreviewed fix. This is a straightfoward change where I forgot to
        switch from uncheckedArgument() to argument() in once case after
        dropping an argumentCount check. All other cases do this properly.
        This addresses an ASSERT seen on the bots running tests.

        * runtime/JSDataViewPrototype.cpp:
        (JSC::setData):

2016-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        test262: DataView with explicit undefined byteLength should be the same as it not being present
        https://bugs.webkit.org/show_bug.cgi?id=164453

        Reviewed by Darin Adler.

        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayView):
        Handle the special case of DataView construction with an undefined byteLength value.

2016-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        test262: DataView get methods should allow for missing offset, set methods should allow for missing value
        https://bugs.webkit.org/show_bug.cgi?id=164451

        Reviewed by Darin Adler.

        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        Missing offset is still valid and will be coerced to 0.

        (JSC::setData):
        Missing value is still valid and will be coerced to 0.

2016-11-11  Saam Barati  <sbarati@apple.com>

        We should have a more concise way of determining when we're varargs calling a function using rest parameters
        https://bugs.webkit.org/show_bug.cgi?id=164258

        Reviewed by Yusuke Suzuki.

        This patch adds two new bytecodes and DFG nodes for the following code patterns:

        ```
        foo(a, b, ...c)
        let x = [a, b, ...c];
        ```

        To do this, I've introduced two new bytecode operations (and their
        corresponding DFG nodes):

        op_spread and op_new_array_with_spread.

        op_spread takes a single input and performs the ES6 iteration protocol on it.
        It returns the result of doing the spread inside a new class I've
        made called JSFixedArray. JSFixedArray is a cell with a single 'size'
        field and a buffer of values allocated inline in the cell. Abstracting
        the protocol into a single node is good because it will make IR analysis
        in the future much simpler. For now, it's also good because it allows
        us to create fast paths for array iteration (which is quite common).
        This fast path allows us to emit really good code for array iteration
        inside the DFG/FTL.

        op_new_array_with_spread is a variable argument bytecode that also
        has a bit vector associated with it. The bit vector indicates if
        any particular argument is to be spread or not. Arguments that
        are spread are known to be JSFixedArray because we must emit an
        op_spread before op_new_array_with_spread consumes the value.
        For example, for this array:
        [a, b, ...c, d, ...e]
        we will have this bit vector:
        [0, 0, 1, 0, 1]

        The reason I've chosen this IR is that it will make eliminating
        a rest allocation for this type of code much easier:

        ```
        function foo(...args) {
            return bar(a, b, ...args);
        }
        ```

        It will be easier to analyze the IR now that the operations
        will be described at a high level.

        This patch is an ~8% speedup on ES6SampleBench on my MBP.

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/IteratorHelpers.js: Added.
        (performIteration):
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::generateConditionForSelfEquivalence):
        * bytecode/ObjectPropertyConditionSet.h:
        * bytecode/TrackedReferences.cpp:
        (JSC::TrackedReferences::check):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::bitVectors):
        (JSC::UnlinkedCodeBlock::bitVector):
        (JSC::UnlinkedCodeBlock::addBitVector):
        (JSC::UnlinkedCodeBlock::shrinkToFit):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewArrayWithSpread):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::watchHavingABadTime):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::isWatchingArrayIteratorProtocolWatchpoint):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::bitVector):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileSpread):
        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
        (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array_with_spread):
        (JSC::JIT::emit_op_spread):
        * jit/JITOperations.h:
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntSlowPaths.cpp:
        * llint/LowLevelInterpreter.asm:
        * runtime/ArrayIteratorAdaptiveWatchpoint.cpp: Added.
        (JSC::ArrayIteratorAdaptiveWatchpoint::ArrayIteratorAdaptiveWatchpoint):
        (JSC::ArrayIteratorAdaptiveWatchpoint::handleFire):
        * runtime/ArrayIteratorAdaptiveWatchpoint.h: Added.
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/IteratorOperations.h:
        (JSC::forEachInIterable):
        * runtime/JSCInlines.h:
        * runtime/JSFixedArray.cpp: Added.
        (JSC::JSFixedArray::visitChildren):
        * runtime/JSFixedArray.h: Added.
        (JSC::JSFixedArray::createStructure):
        (JSC::JSFixedArray::createFromArray):
        (JSC::JSFixedArray::get):
        (JSC::JSFixedArray::buffer):
        (JSC::JSFixedArray::size):
        (JSC::JSFixedArray::offsetOfSize):
        (JSC::JSFixedArray::offsetOfData):
        (JSC::JSFixedArray::create):
        (JSC::JSFixedArray::JSFixedArray):
        (JSC::JSFixedArray::allocationSize):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::objectPrototypeIsSane): Deleted.
        (JSC::JSGlobalObject::arrayPrototypeChainIsSane): Deleted.
        (JSC::JSGlobalObject::stringPrototypeChainIsSane): Deleted.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arrayIteratorProtocolWatchpoint):
        (JSC::JSGlobalObject::iteratorProtocolFunction):
        * runtime/JSGlobalObjectInlines.h: Added.
        (JSC::JSGlobalObject::objectPrototypeIsSane):
        (JSC::JSGlobalObject::arrayPrototypeChainIsSane):
        (JSC::JSGlobalObject::stringPrototypeChainIsSane):
        (JSC::JSGlobalObject::isArrayIteratorProtocolFastAndNonObservable):
        * runtime/JSType.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2016-11-11  Keith Miller  <keith_miller@apple.com>

        Move Wasm tests to JS
        https://bugs.webkit.org/show_bug.cgi?id=164611

        Reviewed by Geoffrey Garen.

        This patch translates most of the tests from testWasm.cpp to the JS testing api. Most of the
        ommited tests were earliest tests, which tested trivial things, like adding two
        constants. Some tests are ommited for other reasons, however. These are:

        1) Tests using I64 since the testing api does not yet know how to handle 64-bit numbers.  2)
        Tests that would validate the memory of the module once wasm was done with it since that's
        not really possible in JS.

        In order to make such a translation easier this patch also adds some features to the JS
        testing api:

        1) Blocks can now be done lexically by adding a lambda as the last argument of the block
        opcode. For example one can do:
            ...
            .Block("i32", b => b.I32Const(1) )

        and the nested lambda will automatically have an end attached.

        2) The JS testing api can now handle inline signature types.

        3) Relocate some code to make it easier to follow and prevent 44 space indentation.

        4) Rename varuint/varint to varuint32/varint32, this lets them be directly called from the
        wasm.json without being remapped.

        5) Add support for Memory and Function sections to the Builder.

        6) Add support for local variables.

        On the JSC side, we needed to expose a new function to validate the compiled wasm code
        behaves the way we expect. At least until the JS Wasm API is finished. The new validation
        function, testWasmModuleFunctions, takes an array buffer containing the wasm binary, the
        number of functions in the blob and tests for each of those functions.

        * jsc.cpp:
        (GlobalObject::finishCreation):
        (box):
        (callWasmFunction):
        (functionTestWasmModuleFunctions):
        * testWasm.cpp:
        (checkPlan):
        (runWasmTests):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parse):
        (JSC::Wasm::FunctionParser<Context>::parseBody):
        (JSC::Wasm::FunctionParser<Context>::parseBlock): Deleted.
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parseMemory):
        (JSC::Wasm::ModuleParser::parseExport):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::Plan):
        (JSC::Wasm::Plan::run):
        * wasm/WasmPlan.h:
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):

2016-11-11  Saam Barati  <sbarati@apple.com>

        Unreviewed try to fix windows build after https://bugs.webkit.org/show_bug.cgi?id=164650

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

2016-11-11  Saam Barati  <sbarati@apple.com>

        We recursively grab a lock in the DFGBytecodeParser causing us to deadlock
        https://bugs.webkit.org/show_bug.cgi?id=164650

        Reviewed by Geoffrey Garen.

        Some code was incorrectly holding a lock when recursively calling
        back into the bytecode parser's via inlining a put_by_val as a put_by_id.
        This can cause a deadlock if the inlinee CodeBlock is something we're
        already holding a lock for. I've changed the range of the lock holder
        to be as narrow as possible.

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

2016-11-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r208584.

        Seems to have regressed Speedometer by 1% on Mac

        Reverted changeset:

        "We should have a more concise way of determining when we're
        varargs calling a function using rest parameters"
        https://bugs.webkit.org/show_bug.cgi?id=164258
        http://trac.webkit.org/changeset/208584

2016-11-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r208117 and r208160.

        Regressed Speedometer by >1.5%

        Reverted changesets:

        "We should have a way of profiling when a get_by_id is pure
        and to emit a PureGetById in the DFG/FTL"
        https://bugs.webkit.org/show_bug.cgi?id=163305
        http://trac.webkit.org/changeset/208117

        "Debug JSC test microbenchmarks/pure-get-by-id-cse-2.js timing
        out"
        https://bugs.webkit.org/show_bug.cgi?id=164227
        http://trac.webkit.org/changeset/208160

2016-11-11  Saam Barati  <sbarati@apple.com>

        We should have a more concise way of determining when we're varargs calling a function using rest parameters
        https://bugs.webkit.org/show_bug.cgi?id=164258

        Reviewed by Yusuke Suzuki.

        This patch adds two new bytecodes and DFG nodes for the following code patterns:

        ```
        foo(a, b, ...c)
        let x = [a, b, ...c];
        ```

        To do this, I've introduced two new bytecode operations (and their
        corresponding DFG nodes):

        op_spread and op_new_array_with_spread.

        op_spread takes a single input and performs the ES6 iteration protocol on it.
        It returns the result of doing the spread inside a new class I've
        made called JSFixedArray. JSFixedArray is a cell with a single 'size'
        field and a buffer of values allocated inline in the cell. Abstracting
        the protocol into a single node is good because it will make IR analysis
        in the future much simpler. For now, it's also good because it allows
        us to create fast paths for array iteration (which is quite common).
        This fast path allows us to emit really good code for array iteration
        inside the DFG/FTL.

        op_new_array_with_spread is a variable argument bytecode that also
        has a bit vector associated with it. The bit vector indicates if
        any particular argument is to be spread or not. Arguments that
        are spread are known to be JSFixedArray because we must emit an
        op_spread before op_new_array_with_spread consumes the value.
        For example, for this array:
        [a, b, ...c, d, ...e]
        we will have this bit vector:
        [0, 0, 1, 0, 1]

        The reason I've chosen this IR is that it will make eliminating
        a rest allocation for this type of code much easier:

        ```
        function foo(...args) {
            return bar(a, b, ...args);
        }
        ```

        It will be easier to analyze the IR now that the operations
        will be described at a high level.

        This patch is an ~8% speedup on ES6SampleBench on my MBP.

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/IteratorHelpers.js: Added.
        (performIteration):
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::generateConditionForSelfEquivalence):
        * bytecode/ObjectPropertyConditionSet.h:
        * bytecode/TrackedReferences.cpp:
        (JSC::TrackedReferences::check):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::bitVectors):
        (JSC::UnlinkedCodeBlock::bitVector):
        (JSC::UnlinkedCodeBlock::addBitVector):
        (JSC::UnlinkedCodeBlock::shrinkToFit):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewArrayWithSpread):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::watchHavingABadTime):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::isWatchingArrayIteratorProtocolWatchpoint):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::bitVector):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileSpread):
        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
        (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array_with_spread):
        (JSC::JIT::emit_op_spread):
        * jit/JITOperations.h:
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntSlowPaths.cpp:
        * llint/LowLevelInterpreter.asm:
        * runtime/ArrayIteratorAdaptiveWatchpoint.cpp: Added.
        (JSC::ArrayIteratorAdaptiveWatchpoint::ArrayIteratorAdaptiveWatchpoint):
        (JSC::ArrayIteratorAdaptiveWatchpoint::handleFire):
        * runtime/ArrayIteratorAdaptiveWatchpoint.h: Added.
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/IteratorOperations.h:
        (JSC::forEachInIterable):
        * runtime/JSCInlines.h:
        * runtime/JSFixedArray.cpp: Added.
        (JSC::JSFixedArray::visitChildren):
        * runtime/JSFixedArray.h: Added.
        (JSC::JSFixedArray::createStructure):
        (JSC::JSFixedArray::createFromArray):
        (JSC::JSFixedArray::get):
        (JSC::JSFixedArray::buffer):
        (JSC::JSFixedArray::size):
        (JSC::JSFixedArray::offsetOfSize):
        (JSC::JSFixedArray::offsetOfData):
        (JSC::JSFixedArray::create):
        (JSC::JSFixedArray::JSFixedArray):
        (JSC::JSFixedArray::allocationSize):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::objectPrototypeIsSane): Deleted.
        (JSC::JSGlobalObject::arrayPrototypeChainIsSane): Deleted.
        (JSC::JSGlobalObject::stringPrototypeChainIsSane): Deleted.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arrayIteratorProtocolWatchpoint):
        (JSC::JSGlobalObject::iteratorProtocolFunction):
        * runtime/JSGlobalObjectInlines.h: Added.
        (JSC::JSGlobalObject::objectPrototypeIsSane):
        (JSC::JSGlobalObject::arrayPrototypeChainIsSane):
        (JSC::JSGlobalObject::stringPrototypeChainIsSane):
        (JSC::JSGlobalObject::isArrayIteratorProtocolFastAndNonObservable):
        * runtime/JSType.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2016-11-10  JF Bastien  <jfbastien@apple.com>

        ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
        https://bugs.webkit.org/show_bug.cgi?id=164597

        Reviewed by Keith Miller.

        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::parseVarUInt32): move closer to other parsers
        (JSC::Wasm::Parser::parseVarUInt64): move closer to other parsers

2016-11-10  Joseph Pecoraro  <pecoraro@apple.com>

        test262: DataView / TypedArray methods should throw RangeErrors for negative numbers (ToIndex)
        https://bugs.webkit.org/show_bug.cgi?id=164450

        Reviewed by Darin Adler.

        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::toIndex):
        Introduce a method for toIndex, which is used by DataView and TypedArrays
        to convert an argument to a number with the possibility of throwing
        RangeErrors for negative values. We also throw RangeErrors for large
        values, because wherever this is used we expect an unsigned.

        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::constructArrayBuffer):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::setData):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        Use toIndex instead of toUint32 where required.

2016-11-10  Mark Lam  <mark.lam@apple.com>

        A few bits of minor code clean up.
        https://bugs.webkit.org/show_bug.cgi?id=164523

        Reviewed by Yusuke Suzuki.

        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::dump):
        - Insert a space to make the dump more legible.

        * runtime/Options.h:
        - Fixed some typos.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplaceUsingRegExp):
        (JSC::stringProtoFuncReplaceUsingStringSearch):
        - Use the VM& that is already available.

2016-11-10  Mark Lam  <mark.lam@apple.com>

        Graph::methodOfGettingAValueProfileFor() should be returning the profile for the operand node.
        https://bugs.webkit.org/show_bug.cgi?id=164600
        <rdar://problem/28828676>

        Reviewed by Filip Pizlo.

        Currently, Graph::methodOfGettingAValueProfileFor() assumes that the operand DFG
        node that it is provided with always has a different origin than the node that is
        using that operand.  For example, in a DFG graph that looks like this:

            a: ...
            b: ArithAdd(@a, ...)

        ... when emitting speculation checks on @a for the ArithAdd node at @b,
        Graph::methodOfGettingAValueProfileFor() is passed @a, and expects @a's to
        originate from a different bytecode than @b.  The intent here is to get the
        profile for @a so that the OSR exit ramp for @b can update @a's profile with the
        observed result type from @a so that future type prediction on incoming args for
        the ArithAdd node can take this into consideration.

        However, op_negate can be compiled into the following series of nodes:

            a: ...
            b: BooleanToNumber(@a)
            c: DoubleRep(@b)
            d: ArithNegate(@c)

        All 3 nodes @b, @c, and @d maps to the same op_negate bytecode i.e. they have the
        same origin.  When the speculativeJIT emits a speculationCheck for DoubleRep, it
        calls Graph::methodOfGettingAValueProfileFor() to get the ArithProfile for the
        BooleanToNumber node.  But because all 3 nodes have the same origin,
        Graph::methodOfGettingAValueProfileFor() erroneously returns the ArithProfile for
        the op_negate.  Subsequently, the OSR exit ramp will modify the ArithProfile of
        the op_negate and corrupt its profile.  Instead, what the OSR exit ramp should be
        doing is update the ArithProfile of op_negate's operand i.e. BooleanToNumber's
        operand @a in this case.

        The fix is to always pass the current node we're generating code for (in addition
        to the operand node) to Graph::methodOfGettingAValueProfileFor().  This way, we
        know the profile is valid if and only if the current node and its operand node
        does not have the same origin.

        In this patch, we also fixed the following:
        1. Teach Graph::methodOfGettingAValueProfileFor() to get the profile for
           BooleanToNumber's operand if the operand node it is given is BooleanToNumber.
        2. Change JITCompiler::appendExceptionHandlingOSRExit() to explicitly pass an
           empty MethodOfGettingAValueProfile().  It was implicitly doing this before.
        3. Change SpeculativeJIT::emitInvalidationPoint() to pass an empty
           MethodOfGettingAValueProfile().  It has no child node.  Hence, it doesn't
           make sense to call Graph::methodOfGettingAValueProfileFor() for a child node
           that does not exist.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::appendExceptionHandlingOSRExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::emitInvalidationPoint):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::appendOSRExitDescriptor):

2016-11-10  Aaron Chu  <aaron_chu@apple.com>

        Web Inspector: AXI: clarify button roles (e.g. toggle or popup button)
        https://bugs.webkit.org/show_bug.cgi?id=130726
        <rdar://problem/16420420>

        Reviewed by Brian Burg.

        Add the isPopupButton flag to the AccessibilityProperties type.

        * inspector/protocol/DOM.json:

2016-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Unreviewed buildfix after r208450.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load8SignedExtendTo32): Added.

2016-11-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Avoid cloned arguments allocation in ArrayPrototype methods
        https://bugs.webkit.org/show_bug.cgi?id=164502

        Reviewed by Saam Barati.

        In many builtin functions, we use `arguments` to just get optional parameters.
        While FTL argument elimination can drop `arguments` allocations, it leaves
        the allocations in LLInt, Baseline, and DFG. And we found that DFG compiled
        Array#map is heavily used in ES6SampleBench/Basic. And it always creates
        a meaningless ClonedArguments.

        Using ES6 default parameter here is not a solution. It increases the number
        of parameters of the CodeBlock (not `function.length`). And the optional
        parameters in Array.prototype.xxx methods are not typically passed. For
        example, we typically do not pass `thisArg` to `Array.prototype.map` function.
        In this case, the arity check frequently fails. It requires the additional C
        call to fixup arguments and it becomes pure overhead.

        To solve this problem, this patch introduces a new bytecode intrinsic @argument().
        This offers the way to retrieve the argument value without increasing the
        arity of the function. And if the argument is not passed (out of bounds), it
        just returns `undefined`. The semantics of this intrinsic is the same to the C++
        ExecState::argument(). This operation does not require `arguments` object. And we
        can drop the `argument` references even in lower 3 tiers.

        We implement op_get_argument for this intrinsic. And later this will be converted
        to DFG GetArgument node. All the tiers handles this feature.

        This patch improves ES6SampleBench/Basic 13.8% in steady state. And in summary,
        it improves 4.5%.

        In the future, we can improve the implementation of the default parameters.
        Currently, the default parameter always increases the arity of the function. So
        if you do not pass the argument, the arity check fails. But since it is the default
        parameter, it is likely that we don't pass the argument. Using op_get_argument to
        implement the default parameter can decrease the case in which the arity check
        frequently fails. And it can change the builtin implementation to use the ES6
        default parameters instead of using the special @argument() intrinsic in the future.
        And at that case, the user code also receives the benefit.

        ES6SampleBench/Basic.
            Baseline:
                Running... Basic ( 1  to go)
                firstIteration:     39.38 ms +- 4.48 ms
                averageWorstCase:   20.79 ms +- 0.96 ms
                steadyState:        1959.22 ms +- 65.55 ms

            Patched:
                Running... Basic ( 1  to go)
                firstIteration:     37.85 ms +- 4.09 ms
                averageWorstCase:   18.60 ms +- 0.76 ms
                steadyState:        1721.89 ms +- 57.58 ms

        All summary.
            Baseline:
                summary:            164.34 ms +- 5.01 ms
            Patched:
                summary:            157.26 ms +- 5.96 ms

        * builtins/ArrayConstructor.js:
        * builtins/ArrayPrototype.js:
        (reduce):
        (reduceRight):
        (every):
        (forEach):
        (filter):
        (map):
        (some):
        (fill):
        (find):
        (findIndex):
        (includes):
        (copyWithin):
        * builtins/DatePrototype.js:
        (toLocaleString):
        (toLocaleDateString):
        (toLocaleTimeString):
        * builtins/MapPrototype.js:
        (forEach):
        * builtins/NumberPrototype.js:
        (toLocaleString):
        * builtins/SetPrototype.js:
        (forEach):
        * builtins/StringPrototype.js:
        (padStart):
        (padEnd):
        (localeCompare):
        * builtins/TypedArrayConstructor.js:
        * builtins/TypedArrayPrototype.js:
        (every):
        (fill):
        (find):
        (findIndex):
        (forEach):
        (some):
        (reduce):
        (reduceRight):
        (map):
        (filter):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        (JSC::CodeBlock::finishCreation):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetArgument):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_argument):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasArgumentIndex):
        (JSC::DFG::Node::argumentIndex):
        * dfg/DFGNodeType.h:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetArgument):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArgument):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_argument):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_get_argument):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2016-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DebuggerManager.Event.Resumed introduces test flakiness
        https://bugs.webkit.org/show_bug.cgi?id=161951
        <rdar://problem/28295767>

        Reviewed by Brian Burg.

        This removes an ambiguity in the protocol when stepping through
        JavaScript. Previously, when paused and issuing a Debugger.step*
        command the frontend would always receive a Debugger.resumed event and
        then, maybe, a Debugger.paused event indicating we paused again (after
        stepping). However, this ambiguity means that the frontend needs to
        wait for a short period of time to determine if we really resumed
        or not. And even still that decision may be incorrect if the step
        takes a sufficiently long period of time.

        The new approach removes this ambiguity. Now, in response to a
        Debugger.step* command the backend MUST send a single Debugger.paused
        event or Debugger.resumed event. Now the frontend knows that the
        next Debugger event it receives after issuing the step command is
        the result (stepped and paused, or stepped and resumed).

        To make resuming consistent in all cases, a Debugger.resume command
        will always respond with a Debugger.resumed event.

        Finally, Debugger.continueToLocation is treated like a "big step"
        in cases where we can resolve the location. If we can't resolve the
        location it is treated as a resume, maintaining the old behavior.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::stepOver):
        (Inspector::InspectorDebuggerAgent::stepInto):
        (Inspector::InspectorDebuggerAgent::stepOut):
        (Inspector::InspectorDebuggerAgent::willStepAndMayBecomeIdle):
        (Inspector::InspectorDebuggerAgent::didBecomeIdleAfterStepping):
        When stepping register a VM exit observer so that we can issue
        a Debugger.resumed event if the step caused us to exit the VM.

        (Inspector::InspectorDebuggerAgent::resume):
        Set a flag to issue a Debugger.resumed event once we break out
        of the nested run loop.

        (Inspector::InspectorDebuggerAgent::didPause):
        We are issuing Debugger.paused so clear the state to indicate that
        we no longer need to issue Debugger.resumed event, we have paused.

        (Inspector::InspectorDebuggerAgent::didContinue):
        Only issue the Debugger.resumed event if needed (explicitly asked
        to resume).

        (Inspector::InspectorDebuggerAgent::continueToLocation):
        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
        All places that do continueProgram should be audited. In error cases,
        if we are paused and continue we should remember to send Debugger.resumed.

        * inspector/protocol/Debugger.json:
        Clarify in the protocol description the contract of these methods.

2016-11-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Associate Worker Resources with the Worker and not the Page
        https://bugs.webkit.org/show_bug.cgi?id=164342
        <rdar://problem/29075775>

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Network.json:
        * inspector/protocol/Page.json:
        Associate Resource data with a target.

2016-11-09  Keith Miller  <keith_miller@apple.com>

        jsc CLI should work with the remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=164569

        Reviewed by Joseph Pecoraro.

        This patch enables using the remote inspector on the jsc CLI.
        In order to use the remote inspector, jsc users need to pass an option.

        * jsc.cpp:
        (CommandLine::parseArguments):
        (runJSC):

2016-11-09  Saam Barati  <sbarati@apple.com>

        Math.min()/Math.max() with no arguments is lowered incorrectly in the BytecodeParser
        https://bugs.webkit.org/show_bug.cgi?id=164464
        <rdar://problem/29131452>

        Reviewed by Darin Adler.

        We were incorrectly matching this pattern inside the bytecode parser
        to return NaN. Instead, we must return:
          Infinity for Math.min()
         -Infinity for Math.max()

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

2016-11-09  Saam Barati  <sbarati@apple.com>

        TypeProfiler and running GC collection on another thread don't play nicely with each other
        https://bugs.webkit.org/show_bug.cgi?id=164441
        <rdar://problem/29132174>

        Reviewed by Geoffrey Garen.

        This fix here is simple: we now treat the type profiler log as a GC root.
        GC will make sure that we mark any values/structures that are in the log.
        It's easy to reason about the correctness of this, and it also solves
        the problem that we were clearing the log on the GC thread. Clearing the
        log on the GC thread was a problem because when we clear the log, we may
        allocate, which we're not allowed to do from the GC thread.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        (JSC::Heap::visitTypeProfiler):
        (JSC::Heap::collectInThread):
        * heap/Heap.h:
        * runtime/TypeProfilerLog.cpp:
        (JSC::TypeProfilerLog::processLogEntries):
        (JSC::TypeProfilerLog::visit):
        * runtime/TypeProfilerLog.h:

2016-11-09  JF Bastien  <jfbastien@apple.com>

        WebAssembly: Silence noisy warning
        https://bugs.webkit.org/show_bug.cgi?id=164459

        Reviewed by Yusuke Suzuki.

        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::Plan):

2016-11-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] The implementation of 8 bit operation in MacroAssembler should care about uint8_t / int8_t
        https://bugs.webkit.org/show_bug.cgi?id=164432

        Reviewed by Michael Saboff.

        Except for X86, our supported MacroAssemblers do not have native 8bit instructions.
        It means that all the 8bit instructions are converted to 32bit operations by using
        scratch registers. For example, ARM64 branch8 implementation is the following.

            Jump branch8(RelationCondition cord, Address left, TrustedImm32 right)
            {
                TrustedImm32 right8(static_cast<int8_t>(right.m_value));
                load8(left, getCachedMemoryTempRegisterIDAndInvalidate());
                return branch32(cone, memoryTempRegister, right8);
            }

        The problem is that we exclusively use zero-extended load instruction (load8). Even
        for signed RelationConditions, we do not perform sign extension. It makes signed
        operations with negative numbers incorrect! Consider the |left| address holds `-1`
        in int8_t form. However load8 will load it as 255 into 32bit register. On the other hand,
        |right| will be sign extended. If you pass 0 as |right| and LessThan condition, this
        branch8 should jump based on the answer of `-1 < 0`. But the current MacroAssembler
        performs `255 < 0` in int32_t context and returns the incorrect result.

        We should follow the x86 model. So we should select the appropriate load operation and masking
        operation based on the RelationCondition. This patch introduces mask8OnCondition and load8OnCondition.
        And we use them in 8bit operations including branch8, branchTest8, compare8, and test8.

        We intentionally do not change anything on x86 assembler since it has the native signed 8bit operations.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::isSigned):
        (JSC::MacroAssembler::isUnsigned):
        (JSC::MacroAssembler::branchTest8):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch8):
        (JSC::MacroAssemblerARM::branchTest8):
        (JSC::MacroAssemblerARM::compare8):
        (JSC::MacroAssemblerARM::test8):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::load8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::branch8):
        (JSC::MacroAssemblerARM64::branchTest8):
        (JSC::MacroAssemblerARM64::compare8):
        (JSC::MacroAssemblerARM64::test8):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branch8):
        (JSC::MacroAssemblerARMv7::branchTest8):
        (JSC::MacroAssemblerARMv7::compare8):
        (JSC::MacroAssemblerARMv7::test8):
        * assembler/MacroAssemblerHelpers.h: Added.
        (JSC::MacroAssemblerHelpers::isSigned):
        (JSC::MacroAssemblerHelpers::isUnsigned):
        (JSC::MacroAssemblerHelpers::mask8OnCondition):
        (JSC::MacroAssemblerHelpers::load8OnCondition):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branch8):
        (JSC::MacroAssemblerMIPS::compare8):
        (JSC::MacroAssemblerMIPS::branchTest8):
        (JSC::MacroAssemblerMIPS::test8):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::branchTest8):
        (JSC::MacroAssemblerSH4::branch8):
        (JSC::MacroAssemblerSH4::compare8):
        (JSC::MacroAssemblerSH4::test8):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::branch8):

2016-11-08  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION: date-format-tofte.js is super slow
        https://bugs.webkit.org/show_bug.cgi?id=164499

        Reviewed by Sam Weinig.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::CacheKey::operator==): Use character comparison,
        not pointer comparison. (This function was always wrong, but I started
        calling it in more places.)

2016-11-08  Saam Barati  <sbarati@apple.com>

        REGRESSION: Crashes in StringImpl destructor during GC when clearing the HasOwnPropertyCache
        https://bugs.webkit.org/show_bug.cgi?id=164433

        Reviewed by Mark Lam.

        Clearing the HasOwnPropertyCache will call deref() on the StringImpls
        in the cache. We were doing this from the collector thread, which is
        not allowed. It must be done from the mutator thread. We now clear the
        cache in Heap::finalize() which happens before the mutator begins
        executing JS after a collection happens.

        * heap/Heap.cpp:
        (JSC::Heap::collectInThread):
        (JSC::Heap::finalize):

2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed compilation of LLInt with MinGW
        https://bugs.webkit.org/show_bug.cgi?id=164449

        Reviewed by Michael Catanzaro.

        MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
        other platforms.

        * llint/LowLevelInterpreter.cpp: Include LLIntAssembly.h with
        appropriate preamble.

2016-11-04  Filip Pizlo  <fpizlo@apple.com>

        WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
        https://bugs.webkit.org/show_bug.cgi?id=152045

        Reviewed by Andy Estes.
        
        Probably the nicest example of why this patch is a good idea is the change in
        AtomicsObject.cpp.

        * jit/ICStats.cpp:
        (JSC::ICStats::ICStats):
        * runtime/AtomicsObject.cpp:
        (JSC::atomicsFuncWait):

2016-11-04  JF Bastien  <jfbastien@apple.com>

        testWASM should be very sad if no options are provided
        https://bugs.webkit.org/show_bug.cgi?id=164444

        Reviewed by Saam Barati.

        Detect missing or invalid options on the command line.

        * testWasm.cpp:
        (CommandLine::parseArguments):

2016-11-04  Mark Lam  <mark.lam@apple.com>

        Error description code should be able to handle Symbol values.
        https://bugs.webkit.org/show_bug.cgi?id=164436
        <rdar://problem/29115583>

        Reviewed by Filip Pizlo and Saam Barati.

        Previously, we try to toString() the Symbol value, resulting in it throwing an
        exception in errorDescriptionForValue() which breaks the invariant that
        errorDescriptionForValue() should not throw.

        We fixed this by making errorDescriptionForValue() aware of the Symbol type, and
        not so a toString() on Symbol values.  Also fixed notAFunctionSourceAppender()
        to build a nicer message for Symbol values.

        * runtime/ExceptionHelpers.cpp:
        (JSC::errorDescriptionForValue):
        (JSC::notAFunctionSourceAppender):

2016-11-02  Geoffrey Garen  <ggaren@apple.com>

        EvalCodeCache should not give up in strict mode and other cases
        https://bugs.webkit.org/show_bug.cgi?id=164357

        Reviewed by Michael Saboff.

        EvalCodeCache gives up in non-trivial cases because generated eval code
        can't soundly migrate from, for example, a let scope to a non-let scope.
        The number of cases has grown over time.

        Instead, let's cache eval code based on the location of the call to
        eval(). That way, we never relocate the code, and it's sound to make
        normal assumptions about our surrounding scope.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::CacheKey::CacheKey): Use CallSiteIndex to uniquely
        identify the location of our call to eval().

        (JSC::EvalCodeCache::CacheKey::hash):
        (JSC::EvalCodeCache::CacheKey::operator==):
        (JSC::EvalCodeCache::CacheKey::Hash::equal): Use CallSiteIndex instead
        of lots of other flags.

        (JSC::EvalCodeCache::tryGet): No need to include details that are implied
        by our CallSiteIndex.

        (JSC::EvalCodeCache::getSlow): No need to skip caching in complex
        situations. We promise we'll never relocate the cached code.

        (JSC::EvalCodeCache::isCacheableScope): Deleted.
        (JSC::EvalCodeCache::isCacheable): Deleted.

        * interpreter/Interpreter.cpp:
        (JSC::eval): Pass through a CallSiteIndex to uniquely identify this call
        to eval().

2016-11-04  Keith Miller  <keith_miller@apple.com>

        Add support for Wasm br_table
        https://bugs.webkit.org/show_bug.cgi?id=164429

        Reviewed by Michael Saboff.

        This patch adds support for Wasm br_table. The Wasm br_table
        opcode essentially directly maps to B3's switch opcode.

        There are also three other minor changes:
        1) all non-argument locals should be initialized to zero at function entry.
        2) add new setErrorMessage member to WasmFunctionParser.h
        3) return does not decode an extra immediate anymore.

        * testWasm.cpp:
        (runWasmTests):
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser::setErrorMessage):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        (JSC::Wasm::FunctionParser<Context>::popExpressionStack):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::checkBranchTarget):
        (JSC::Wasm::Validate::addBranch):
        (JSC::Wasm::Validate::addSwitch):

2016-11-04  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: implement more sections
        https://bugs.webkit.org/show_bug.cgi?id=164023

        Reviewed by Keith Miller.

        On the JSC side:

         - Put in parser stubs for all WebAssembly sections.
         - Parse Import, Export sections.
         - Use tryReserveCapacity instead of reserve, and bail out of the parser if it fails. This prevents the parser from bringing everything down when faced with a malicious input.
         - Encapsulate all parsed module information into its own structure, making it easier to pass around (from parser to Plan to Module to Instance).
         - Create WasmFormat.cpp to hold parsed module information's dtor to avoid including WasmMemory.h needlessly.
         - Remove all remainders of polyfill-prototype-1, and update license.
         - Add missing WasmOps.h and WasmValidateInlines.h auto-generation for cmake build.

        On the Builder.js testing side:

         - Implement Type, Import (function only), Export (function only) sections.
         - Check section order and uniqueness.
         - Optionally auto-generate the Type section from subsequent Export / Import / Code entries.
         - Allow re-exporting an import.

        * CMakeLists.txt: missing auto-genration
        * JavaScriptCore.xcodeproj/project.pbxproj: merge conflict
        * testWasm.cpp: update for API changes, no functional change
        (checkPlan):
        (runWasmTests):
        * wasm/WasmFormat.cpp: add a dtor which requires extra headers which I'd rather not include in WasmFormat.h
        (JSC::Wasm::ModuleInformation::~ModuleInformation):
        * wasm/WasmFormat.h: Add External, Import, Functioninformation, Export, ModuleInformation, CompiledFunction, and remove obsolete stuff which was a holdover from the first implementation (all that code is now gone, so remove its license)
        (JSC::Wasm::External::isValid):
        * wasm/WasmModuleParser.cpp: simplify some, make names consistent with the WebAssembly section names, check memory allocations so they can fail early
        (JSC::Wasm::ModuleParser::parse):
        (JSC::Wasm::ModuleParser::parseType):
        (JSC::Wasm::ModuleParser::parseImport):
        (JSC::Wasm::ModuleParser::parseFunction):
        (JSC::Wasm::ModuleParser::parseTable):
        (JSC::Wasm::ModuleParser::parseMemory):
        (JSC::Wasm::ModuleParser::parseGlobal):
        (JSC::Wasm::ModuleParser::parseExport):
        (JSC::Wasm::ModuleParser::parseStart):
        (JSC::Wasm::ModuleParser::parseElement):
        (JSC::Wasm::ModuleParser::parseCode): avoid overflow through function size.
        (JSC::Wasm::ModuleParser::parseData):
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::moduleInformation):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser::consumeUTF8String): add as required by spec
        (JSC::Wasm::Parser::parseExternalKind): add as per spec
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::Plan): fix some ownership, improve some error messages
        * wasm/WasmPlan.h: fix some ownership
        (JSC::Wasm::Plan::getModuleInformation):
        (JSC::Wasm::Plan::getMemory):
        (JSC::Wasm::Plan::compiledFunctionCount):
        (JSC::Wasm::Plan::compiledFunction):
        (JSC::Wasm::Plan::getCompiledFunctions):
        * wasm/WasmSections.h: macroize with description, so that error messages are super pretty. This could be auto-generated.
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create): take module information
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule): ditto
        * wasm/js/JSWebAssemblyModule.h:
        (JSC::JSWebAssemblyModule::moduleInformation):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance): check that modules with imports are instantiated with an import object, as per spec. This needs to be tested.
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::constructJSWebAssemblyMemory):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::constructJSWebAssemblyTable):

2016-11-03  Mark Lam  <mark.lam@apple.com>

        ClonedArguments need to also support haveABadTime mode.
        https://bugs.webkit.org/show_bug.cgi?id=164200
        <rdar://problem/27211336>

        Reviewed by Geoffrey Garen.

        For those who are not familiar with the parlance, "have a bad time" in the VM
        means that Object.prototype has been modified in such a way that we can no longer
        trivially do indexed property accesses without consulting the Object.prototype.
        This defeats JIT indexed put optimizations, and hence, makes the VM "have a
        bad time".

        Once the VM enters haveABadTime mode, all existing objects are converted to use
        slow put storage.  Thereafter, JSArrays are always created with slow put storage.
        JSObjects are always created with a blank indexing type.  When a new indexed
        property is put into the new object, its indexing type will be converted to the
        slow put array indexing type just before we perform the put operation.  This is
        how we ensure that the objects will also use slow put storage.

        However, ClonedArguments is an object which was previously created unconditionally
        to use contiguous storage.  Subsequently, if we try to call Object.preventExtensions()
        on that ClonedArguments object, Object.preventExtensions() will:
        1. make the ClonedArguments enter dictionary indexing mode, which means it will
        2. first ensure that the ClonedArguments is using slow put array storage via
           JSObject::ensureArrayStorageSlow().

        However, JSObject::ensureArrayStorageSlow() expects that we never see an object
        with contiguous storage once we're in haveABadTime mode.  Our ClonedArguments
        object did not obey this invariant.

        The fix is to make the ClonedArguments factories create objects that use slow put
        array storage when in haveABadTime mode.  This means:

        1. JSGlobalObject::haveABadTime() now changes m_clonedArgumentsStructure to use
           its slow put version.

           Also the caching of the slow put version of m_regExpMatchesArrayStructure,
           because we only need to create it when we are having a bad time. 

        2. The ClonedArguments factories now allocates a butterfly with slow put array
           storage if we're in haveABadTime mode.

           Also added some assertions in ClonedArguments' factory methods to ensure that
           the created object has the slow put indexing type when it needsSlowPutIndexing().

        3. DFGFixupPhase now watches the havingABadTimeWatchpoint because ClonedArguments'
           structure will change when having a bad time.

        4. DFGArgumentEliminationPhase and DFGVarargsForwardingPhase need not be changed
           because it is still valid to eliminate the creation of the arguments object
           even having a bad time, as long as the arguments object does not escape.

        5. The DFGAbstractInterpreterInlines now checks for haveABadTime, and sets the
           predicted type to be SpecObject.

        Note: this issue does not apply to DirectArguments and ScopedArguments because
        they use a blank indexing type (just like JSObject).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::dump):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createEmpty):
        (JSC::ClonedArguments::createWithInlineFrame):
        (JSC::ClonedArguments::createWithMachineFrame):
        (JSC::ClonedArguments::createByCopyingFrom):
        (JSC::ClonedArguments::createStructure):
        (JSC::ClonedArguments::createSlowPutStructure):
        * runtime/ClonedArguments.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::haveABadTime):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:

2016-11-03  Filip Pizlo  <fpizlo@apple.com>

        DFG plays fast and loose with the shadow values of a Phi
        https://bugs.webkit.org/show_bug.cgi?id=164309

        Reviewed by Saam Barati.
        
        Oh boy, what an embarrassing mistake! The style of SSA I like to use avoids block/value
        tuples as parameters of a Phi, thereby simplifying CFG transformations and making Phi largely
        not a special case for most compiler transforms. It does this by introducing another value
        called Upsilon, which stores a value into some Phi.
        
        B3 uses this also. The easiest way to understand what Upsilon/Phi behave like is to look at
        the B3->Air lowering. Air is not SSA - it has Tmps that you can assign to and use as many
        times as you like. B3 allocates one Tmp per Value, and an extra "phiTmp" for Phis, so that
        Phis get two Tmps total. Upsilon stores the value into the phiTmp of the Phi, while Phi moves
        the value from its phiTmp to its tmp.
        
        This is necessary to support scenarios like this:
        
            a: Phi()
            b: Upsilon(@x, ^a)
            c: Use(@a)
        
        Here, we want @c to see @a's value before @b. That's a very basic requirement of SSA: that
        the a value (like @a) doesn't change during its lifetime.
        
        Unfortunately, DFG's liveness analysis, abstract interpreter, and integer range optimization
        all failed to correctly model Upsilon/Phi this way. They would assume that it's accurate to
        model the Upsilon as storing into the Phi directly.
        
        Because DFG does flow analysis over SSA, making it correct means enabling it to speak of the
        shadow value. This change addresses this problem by introducing the concept of a
        NodeFlowProjection. This is a key that lets us speak of both a Node's primary value and its
        optional "shadow" value. Liveness, AI, and integer range are now keyed by NodeFlowProjection
        rather than Node*. Conceptually this turns out to be a very simple change, but it does touch
        a good amount of code.
        
        This looks to be perf-neutral.

        Rolled back in after fixing the debug build.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/air/AirLiveness.h:
        (JSC::B3::Air::TmpLivenessAdapter::numIndices):
        (JSC::B3::Air::StackSlotLivenessAdapter::numIndices):
        (JSC::B3::Air::RegLivenessAdapter::numIndices):
        (JSC::B3::Air::AbstractLiveness::AbstractLiveness):
        (JSC::B3::Air::TmpLivenessAdapter::maxIndex): Deleted.
        (JSC::B3::Air::StackSlotLivenessAdapter::maxIndex): Deleted.
        (JSC::B3::Air::RegLivenessAdapter::maxIndex): Deleted.
        * dfg/DFGAbstractInterpreter.h:
        (JSC::DFG::AbstractInterpreter::forNode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::dump):
        * dfg/DFGAtTailAbstractState.cpp:
        (JSC::DFG::AtTailAbstractState::createValueForNode):
        (JSC::DFG::AtTailAbstractState::forNode):
        * dfg/DFGAtTailAbstractState.h:
        * dfg/DFGBasicBlock.h:
        * dfg/DFGCombinedLiveness.cpp:
        (JSC::DFG::liveNodesAtHead):
        * dfg/DFGCombinedLiveness.h:
        * dfg/DFGFlowIndexing.cpp: Added.
        (JSC::DFG::FlowIndexing::FlowIndexing):
        (JSC::DFG::FlowIndexing::~FlowIndexing):
        (JSC::DFG::FlowIndexing::recompute):
        * dfg/DFGFlowIndexing.h: Added.
        (JSC::DFG::FlowIndexing::graph):
        (JSC::DFG::FlowIndexing::numIndices):
        (JSC::DFG::FlowIndexing::index):
        (JSC::DFG::FlowIndexing::shadowIndex):
        (JSC::DFG::FlowIndexing::nodeProjection):
        * dfg/DFGFlowMap.h: Added.
        (JSC::DFG::FlowMap::FlowMap):
        (JSC::DFG::FlowMap::resize):
        (JSC::DFG::FlowMap::graph):
        (JSC::DFG::FlowMap::at):
        (JSC::DFG::FlowMap::atShadow):
        (WTF::printInternal):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::Graph):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::abstractValuesCache): Deleted.
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::InPlaceAbstractState):
        (JSC::DFG::InPlaceAbstractState::beginBasicBlock):
        (JSC::DFG::setLiveValues):
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):
        (JSC::DFG::InPlaceAbstractState::merge):
        * dfg/DFGInPlaceAbstractState.h:
        (JSC::DFG::InPlaceAbstractState::createValueForNode):
        (JSC::DFG::InPlaceAbstractState::forNode):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGLivenessAnalysisPhase.cpp:
        (JSC::DFG::LivenessAnalysisPhase::LivenessAnalysisPhase):
        (JSC::DFG::LivenessAnalysisPhase::run):
        (JSC::DFG::LivenessAnalysisPhase::processBlock):
        (JSC::DFG::LivenessAnalysisPhase::addChildUse): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::NodeComparator::operator()):
        (JSC::DFG::nodeListDump):
        (JSC::DFG::nodeMapDump):
        (JSC::DFG::nodeValuePairListDump):
        (JSC::DFG::nodeComparator): Deleted.
        * dfg/DFGNodeAbstractValuePair.cpp: Added.
        (JSC::DFG::NodeAbstractValuePair::dump):
        * dfg/DFGNodeAbstractValuePair.h: Added.
        (JSC::DFG::NodeAbstractValuePair::NodeAbstractValuePair):
        * dfg/DFGNodeFlowProjection.cpp: Added.
        (JSC::DFG::NodeFlowProjection::dump):
        * dfg/DFGNodeFlowProjection.h: Added.
        (JSC::DFG::NodeFlowProjection::NodeFlowProjection):
        (JSC::DFG::NodeFlowProjection::operator bool):
        (JSC::DFG::NodeFlowProjection::kind):
        (JSC::DFG::NodeFlowProjection::node):
        (JSC::DFG::NodeFlowProjection::operator*):
        (JSC::DFG::NodeFlowProjection::operator->):
        (JSC::DFG::NodeFlowProjection::hash):
        (JSC::DFG::NodeFlowProjection::operator==):
        (JSC::DFG::NodeFlowProjection::operator!=):
        (JSC::DFG::NodeFlowProjection::operator<):
        (JSC::DFG::NodeFlowProjection::operator>):
        (JSC::DFG::NodeFlowProjection::operator<=):
        (JSC::DFG::NodeFlowProjection::operator>=):
        (JSC::DFG::NodeFlowProjection::isHashTableDeletedValue):
        (JSC::DFG::NodeFlowProjection::isStillValid):
        (JSC::DFG::NodeFlowProjection::forEach):
        (JSC::DFG::NodeFlowProjectionHash::hash):
        (JSC::DFG::NodeFlowProjectionHash::equal):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:

2016-11-03  Commit Queue  <commit-queue@webkit.org>

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

        broke the build (Requested by smfr on #webkit).

        Reverted changeset:

        "DFG plays fast and loose with the shadow values of a Phi"
        https://bugs.webkit.org/show_bug.cgi?id=164309
        http://trac.webkit.org/changeset/208364

2016-11-03  Filip Pizlo  <fpizlo@apple.com>

        DFG plays fast and loose with the shadow values of a Phi
        https://bugs.webkit.org/show_bug.cgi?id=164309

        Reviewed by Saam Barati.
        
        Oh boy, what an embarrassing mistake! The style of SSA I like to use avoids block/value
        tuples as parameters of a Phi, thereby simplifying CFG transformations and making Phi largely
        not a special case for most compiler transforms. It does this by introducing another value
        called Upsilon, which stores a value into some Phi.
        
        B3 uses this also. The easiest way to understand what Upsilon/Phi behave like is to look at
        the B3->Air lowering. Air is not SSA - it has Tmps that you can assign to and use as many
        times as you like. B3 allocates one Tmp per Value, and an extra "phiTmp" for Phis, so that
        Phis get two Tmps total. Upsilon stores the value into the phiTmp of the Phi, while Phi moves
        the value from its phiTmp to its tmp.
        
        This is necessary to support scenarios like this:
        
            a: Phi()
            b: Upsilon(@x, ^a)
            c: Use(@a)
        
        Here, we want @c to see @a's value before @b. That's a very basic requirement of SSA: that
        the a value (like @a) doesn't change during its lifetime.
        
        Unfortunately, DFG's liveness analysis, abstract interpreter, and integer range optimization
        all failed to correctly model Upsilon/Phi this way. They would assume that it's accurate to
        model the Upsilon as storing into the Phi directly.
        
        Because DFG does flow analysis over SSA, making it correct means enabling it to speak of the
        shadow value. This change addresses this problem by introducing the concept of a
        NodeFlowProjection. This is a key that lets us speak of both a Node's primary value and its
        optional "shadow" value. Liveness, AI, and integer range are now keyed by NodeFlowProjection
        rather than Node*. Conceptually this turns out to be a very simple change, but it does touch
        a good amount of code.
        
        This looks to be perf-neutral.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/air/AirLiveness.h:
        (JSC::B3::Air::TmpLivenessAdapter::numIndices):
        (JSC::B3::Air::StackSlotLivenessAdapter::numIndices):
        (JSC::B3::Air::RegLivenessAdapter::numIndices):
        (JSC::B3::Air::AbstractLiveness::AbstractLiveness):
        (JSC::B3::Air::TmpLivenessAdapter::maxIndex): Deleted.
        (JSC::B3::Air::StackSlotLivenessAdapter::maxIndex): Deleted.
        (JSC::B3::Air::RegLivenessAdapter::maxIndex): Deleted.
        * dfg/DFGAbstractInterpreter.h:
        (JSC::DFG::AbstractInterpreter::forNode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::dump):
        * dfg/DFGAtTailAbstractState.cpp:
        (JSC::DFG::AtTailAbstractState::createValueForNode):
        (JSC::DFG::AtTailAbstractState::forNode):
        * dfg/DFGAtTailAbstractState.h:
        * dfg/DFGBasicBlock.h:
        * dfg/DFGCombinedLiveness.cpp:
        (JSC::DFG::liveNodesAtHead):
        * dfg/DFGCombinedLiveness.h:
        * dfg/DFGFlowIndexing.cpp: Added.
        (JSC::DFG::FlowIndexing::FlowIndexing):
        (JSC::DFG::FlowIndexing::~FlowIndexing):
        (JSC::DFG::FlowIndexing::recompute):
        * dfg/DFGFlowIndexing.h: Added.
        (JSC::DFG::FlowIndexing::graph):
        (JSC::DFG::FlowIndexing::numIndices):
        (JSC::DFG::FlowIndexing::index):
        (JSC::DFG::FlowIndexing::shadowIndex):
        (JSC::DFG::FlowIndexing::nodeProjection):
        * dfg/DFGFlowMap.h: Added.
        (JSC::DFG::FlowMap::FlowMap):
        (JSC::DFG::FlowMap::resize):
        (JSC::DFG::FlowMap::graph):
        (JSC::DFG::FlowMap::at):
        (JSC::DFG::FlowMap::atShadow):
        (WTF::printInternal):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::Graph):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::abstractValuesCache): Deleted.
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::InPlaceAbstractState):
        (JSC::DFG::InPlaceAbstractState::beginBasicBlock):
        (JSC::DFG::setLiveValues):
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):
        (JSC::DFG::InPlaceAbstractState::merge):
        * dfg/DFGInPlaceAbstractState.h:
        (JSC::DFG::InPlaceAbstractState::createValueForNode):
        (JSC::DFG::InPlaceAbstractState::forNode):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGLivenessAnalysisPhase.cpp:
        (JSC::DFG::LivenessAnalysisPhase::LivenessAnalysisPhase):
        (JSC::DFG::LivenessAnalysisPhase::run):
        (JSC::DFG::LivenessAnalysisPhase::processBlock):
        (JSC::DFG::LivenessAnalysisPhase::addChildUse): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::NodeComparator::operator()):
        (JSC::DFG::nodeListDump):
        (JSC::DFG::nodeMapDump):
        (JSC::DFG::nodeValuePairListDump):
        (JSC::DFG::nodeComparator): Deleted.
        * dfg/DFGNodeAbstractValuePair.cpp: Added.
        (JSC::DFG::NodeAbstractValuePair::dump):
        * dfg/DFGNodeAbstractValuePair.h: Added.
        (JSC::DFG::NodeAbstractValuePair::NodeAbstractValuePair):
        * dfg/DFGNodeFlowProjection.cpp: Added.
        (JSC::DFG::NodeFlowProjection::dump):
        * dfg/DFGNodeFlowProjection.h: Added.
        (JSC::DFG::NodeFlowProjection::NodeFlowProjection):
        (JSC::DFG::NodeFlowProjection::operator bool):
        (JSC::DFG::NodeFlowProjection::kind):
        (JSC::DFG::NodeFlowProjection::node):
        (JSC::DFG::NodeFlowProjection::operator*):
        (JSC::DFG::NodeFlowProjection::operator->):
        (JSC::DFG::NodeFlowProjection::hash):
        (JSC::DFG::NodeFlowProjection::operator==):
        (JSC::DFG::NodeFlowProjection::operator!=):
        (JSC::DFG::NodeFlowProjection::operator<):
        (JSC::DFG::NodeFlowProjection::operator>):
        (JSC::DFG::NodeFlowProjection::operator<=):
        (JSC::DFG::NodeFlowProjection::operator>=):
        (JSC::DFG::NodeFlowProjection::isHashTableDeletedValue):
        (JSC::DFG::NodeFlowProjection::isStillValid):
        (JSC::DFG::NodeFlowProjection::forEach):
        (JSC::DFG::NodeFlowProjectionHash::hash):
        (JSC::DFG::NodeFlowProjectionHash::equal):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:

2016-11-03  Keith Miller  <keith_miller@apple.com>

        Unreviewed, changelog fix due to failed git rebase..

2016-11-03  Keith Miller  <keith_miller@apple.com>

        Wasm starts a new stack whenever it adds a new block and has return types for blocks.
        https://bugs.webkit.org/show_bug.cgi?id=164100

        Reviewed by Saam Barati.

        This patch overhauls much of the Wasm function parser, validator, and B3 IR generator
        to work with block return types. In Wasm, blocks can act as expressions and have a
        return value. Most of the control flow operators needed to be rewritten in order to
        support this feature. To enable return types the function parser needed to be able
        to save and restore the expression stack from previous blocks, which is done via the
        control stack.

        This patch also removes the lazy continuation block system added previously. It's
        not clear if there would be any performance win from such a system. There are likely
        many other things with orders of magnitude more impact on B3 IR generation. The
        complexity cost of such a system is not worth the effort without sufficient evidence
        otherwise.

        * testWasm.cpp:
        (runWasmTests):
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseBlock):
        (JSC::Wasm::FunctionParser<Context>::addReturn):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        (JSC::Wasm::FunctionParser<Context>::popExpressionStack):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::ControlData::hasNonVoidSignature):
        (JSC::Wasm::Validate::addElse):
        (JSC::Wasm::Validate::addElseToUnreachable):
        (JSC::Wasm::Validate::addBranch):
        (JSC::Wasm::Validate::endBlock):
        (JSC::Wasm::Validate::addEndToUnreachable):
        (JSC::Wasm::Validate::dump):
        (JSC::Wasm::validateFunction):
        (JSC::Wasm::Validate::isContinuationReachable): Deleted.

2016-11-03  Saam Barati  <sbarati@apple.com>

        Asking for a value profile prediction should be defensive against not finding a value profile
        https://bugs.webkit.org/show_bug.cgi?id=164306

        Reviewed by Mark Lam.

        Currently, the code that calls CodeBlock::valueProfilePredictionForBytecodeOffset
        in the DFG assumes it will always be at a value producing node. However, this isn't
        true if we tail call from an inlined setter. When we're at a tail call, we try
        to find the first caller that isn't a tail call to see what value the
        tail_call produces. If we inline a setter, however, we will end up finding
        the put_by_id as our first non-tail-called "caller", and that won't have a
        value profile associated with it since it's not a value producing node.
        CodeBlock::valueProfilePredictionForBytecodeOffset should be defensive
        against finding a null value profile.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):

2016-11-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix CLoop build after r208320.
        https://bugs.webkit.org/show_bug.cgi?id=162980

        Add required forward declarations.

        * domjit/DOMJITHeapRange.cpp:
        * domjit/DOMJITSignature.h:
        * runtime/VM.h:

2016-11-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add DOMJIT::Signature
        https://bugs.webkit.org/show_bug.cgi?id=162980

        Reviewed by Saam Barati and Sam Weinig.

        This patch introduces a new mechanism called DOMJIT::Signature. We can annotate the function with DOMJIT::Signature.
        DOMJIT::Signature has type information of that function. And it also maintains the effect of the function and the
        pointer to the unsafe function. The unsafe function means the function without type and argument count checks.
        By using these information, we can separate type and argument count checks from the function. And we can emit
        these things as DFG checks and convert the function call itself to CallDOM node. CallDOM node can call the unsafe
        function directly without any checks. Furthermore, this CallDOM node can represent its own clobberizing rules based
        on DOMJIT::Effect maintained by DOMJIT::Signature. It allows us to make opaque Call node to a CallDOM node that
        merely reads some part of heap. These changes (1) can drop duplicate type checks in DFG, (2) offer ability to move
        CallDOM node to somewhere, and (3) track more detailed heap reads and writes of CallDOM nodes.

        We first emit Call node with DOMJIT::Signature in DFGByteCodeParser. And in the fixup phase, we attempt to lower
        Call node to CallDOM node with checks & edge filters. This is because we do not know the type predictions in
        DFGByteCodeParser phase. If we always emit CallDOM node in DFGByteCodeParser, if we evaluate `div.getAttribute(true)`
        thingy, the Uncountable OSR exits repeatedly happen because AI figures out the abstract value is cleared.

        Currently, DOMJIT signature only allows the types that can reside in GPR. This is because the types of the unsafe
        function arguments are represented as the sequence of void*. In the future, we will extend to accept other types like
        float, double etc.

        We annotate several functions in Element. In particular, we annotate Element::getAttribute. This allows us to perform
        LICM in Dromaeo dom-attr test. In the Dromaeo dom-attr getAttribute test, we can see 32x improvement. (134974.8 v.s. 4203.4)

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CallVariant.h:
        (JSC::CallVariant::functionExecutable):
        (JSC::CallVariant::nativeExecutable):
        (JSC::CallVariant::signatureFor):
        * bytecode/SpeculatedType.h:
        (JSC::isNotStringSpeculation):
        (JSC::isNotInt32Speculation):
        (JSC::isNotBooleanSpeculation):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::attemptToInlineCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleDOMJITCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::attemptToMakeCallDOM):
        (JSC::DFG::FixupPhase::fixupCheckDOM):
        (JSC::DFG::FixupPhase::fixupCallDOM):
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::convertToCallDOM):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::shouldSpeculateNotInt32):
        (JSC::DFG::Node::shouldSpeculateNotBoolean):
        (JSC::DFG::Node::shouldSpeculateNotString):
        (JSC::DFG::Node::hasSignature):
        (JSC::DFG::Node::signature):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * domjit/DOMJITEffect.h:
        (JSC::DOMJIT::Effect::Effect):
        (JSC::DOMJIT::Effect::forWrite):
        (JSC::DOMJIT::Effect::forRead):
        (JSC::DOMJIT::Effect::forReadWrite):
        (JSC::DOMJIT::Effect::forPure):
        (JSC::DOMJIT::Effect::forDef):
        (JSC::DOMJIT::Effect::mustGenerate):
        In clang, we cannot make this Effect constructor constexpr if we use Optional<HeapRange>.
        So we use HeapRange::top() for Nullopt def now.

        * domjit/DOMJITHeapRange.h:
        (JSC::DOMJIT::HeapRange::fromRaw):
        (JSC::DOMJIT::HeapRange::operator bool):
        (JSC::DOMJIT::HeapRange::operator==):
        (JSC::DOMJIT::HeapRange::operator!=):
        (JSC::DOMJIT::HeapRange::fromConstant):
        * domjit/DOMJITSignature.h: Copied from Source/JavaScriptCore/domjit/DOMJITEffect.h.
        (JSC::DOMJIT::Signature::Signature):
        (JSC::DOMJIT::Signature::argumentCount):
        (JSC::DOMJIT::Signature::checkDOM):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        * jit/JITOperations.h:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITThunks.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::create):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        * runtime/JSFunction.h:
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSNativeStdFunction::create):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectNativeFunction):
        * runtime/JSObject.h:
        * runtime/Lookup.h:
        (JSC::HashTableValue::functionLength):
        (JSC::HashTableValue::signature):
        (JSC::reifyStaticProperty):
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::NativeExecutable):
        * runtime/NativeExecutable.h:
        * runtime/PropertySlot.h:
        * runtime/VM.cpp:
        (JSC::VM::getHostFunction):
        * runtime/VM.h:

2016-11-02  Andreas Kling  <akling@apple.com>

        MarkedSpace should have specialized size classes for popular engine objects.
        <https://webkit.org/b/164345>

        Reviewed by Filip Pizlo.

        The MarkedSpace size classes were recently reworked to minimize wasted space
        at the end of MarkedBlocks.

        However, we know that some specific objects will be allocated in very high volume.
        Adding specialized size classes for those object sizes achieves greater utilization
        since we're basically guaranteed to allocate them all the time.

        Inject specialized size classes for these four objects:

            - FunctionCodeBlock
                560 bytes instead of 624
                28 per block instead of 26 (+2)

            - FunctionExecutable
                176 bytes instead of 224
                92 per block instead of 72 (+20)

            - UnlinkedFunctionCodeBlock
                256 bytes instead of 320
                63 per block instead of 50 (+13)

            - UnlinkedFunctionExecutable
                192 bytes instead of 224
                84 per block instead of 72 (+12)

        * heap/MarkedSpace.cpp:

2016-11-02  Geoffrey Garen  <ggaren@apple.com>

        One file per class for UnlinkedCodeBlock.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=164348

        Reviewed by Saam Barati.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/FunctionCodeBlock.h:
        * bytecode/ModuleProgramCodeBlock.h:
        * bytecode/ProgramCodeBlock.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedEvalCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionExecutable::destroy): Deleted.
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock): Deleted.
        * bytecode/UnlinkedEvalCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp.
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::estimatedSize): Deleted.
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::getLineAndColumn): Deleted.
        (JSC::dumpLineColumnEntry): Deleted.
        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
        (JSC::UnlinkedProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionExecutable::destroy): Deleted.
        (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::instructions): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForIndex): Deleted.
        (JSC::UnlinkedCodeBlock::applyModification): Deleted.
        * bytecode/UnlinkedEvalCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h.
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedSimpleJumpTable::add): Deleted.
        (JSC::UnlinkedInstruction::UnlinkedInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::isConstructor): Deleted.
        (JSC::UnlinkedCodeBlock::isStrictMode): Deleted.
        (JSC::UnlinkedCodeBlock::usesEval): Deleted.
        (JSC::UnlinkedCodeBlock::parseMode): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunction): Deleted.
        (JSC::UnlinkedCodeBlock::derivedContextType): Deleted.
        (JSC::UnlinkedCodeBlock::evalContextType): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunctionContext): Deleted.
        (JSC::UnlinkedCodeBlock::isClassContext): Deleted.
        (JSC::UnlinkedCodeBlock::hasExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::setThisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setScopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::usesGlobalObject): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setNumParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addParameter): Deleted.
        (JSC::UnlinkedCodeBlock::numParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addRegExp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfRegExps): Deleted.
        (JSC::UnlinkedCodeBlock::regexp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfIdentifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addConstant): Deleted.
        (JSC::UnlinkedCodeBlock::registerIndexForLinkTimeConstant): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegisters): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegister): Deleted.
        (JSC::UnlinkedCodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfJumpTargets): Deleted.
        (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::jumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::lastJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::isBuiltinFunction): Deleted.
        (JSC::UnlinkedCodeBlock::constructorKind): Deleted.
        (JSC::UnlinkedCodeBlock::superBinding): Deleted.
        (JSC::UnlinkedCodeBlock::scriptMode): Deleted.
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        (JSC::UnlinkedCodeBlock::numCalleeLocals): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::functionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::functionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionExprs): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::exceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addObjectAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addValueProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addLLIntCallLinkInfo): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfLLintCallLinkInfos): Deleted.
        (JSC::UnlinkedCodeBlock::codeType): Deleted.
        (JSC::UnlinkedCodeBlock::thisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::scopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfPropertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::constantBufferCount): Deleted.
        (JSC::UnlinkedCodeBlock::addConstantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::constantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::hasRareData): Deleted.
        (JSC::UnlinkedCodeBlock::recordParse): Deleted.
        (JSC::UnlinkedCodeBlock::sourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::sourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::codeFeatures): Deleted.
        (JSC::UnlinkedCodeBlock::hasCapturedVariables): Deleted.
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        (JSC::UnlinkedCodeBlock::lineCount): Deleted.
        (JSC::UnlinkedCodeBlock::startColumn): Deleted.
        (JSC::UnlinkedCodeBlock::endColumn): Deleted.
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::hasOpProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::UnlinkedCodeBlock::didOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::setDidOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::finishCreation): Deleted.
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock): Deleted.
        * bytecode/UnlinkedFunctionCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp.
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::estimatedSize): Deleted.
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::getLineAndColumn): Deleted.
        (JSC::dumpLineColumnEntry): Deleted.
        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
        (JSC::UnlinkedProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedEvalCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionExecutable::destroy): Deleted.
        (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::instructions): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForIndex): Deleted.
        (JSC::UnlinkedCodeBlock::applyModification): Deleted.
        * bytecode/UnlinkedFunctionCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h.
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedSimpleJumpTable::add): Deleted.
        (JSC::UnlinkedInstruction::UnlinkedInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::isConstructor): Deleted.
        (JSC::UnlinkedCodeBlock::isStrictMode): Deleted.
        (JSC::UnlinkedCodeBlock::usesEval): Deleted.
        (JSC::UnlinkedCodeBlock::parseMode): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunction): Deleted.
        (JSC::UnlinkedCodeBlock::derivedContextType): Deleted.
        (JSC::UnlinkedCodeBlock::evalContextType): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunctionContext): Deleted.
        (JSC::UnlinkedCodeBlock::isClassContext): Deleted.
        (JSC::UnlinkedCodeBlock::hasExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::setThisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setScopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::usesGlobalObject): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setNumParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addParameter): Deleted.
        (JSC::UnlinkedCodeBlock::numParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addRegExp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfRegExps): Deleted.
        (JSC::UnlinkedCodeBlock::regexp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfIdentifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addConstant): Deleted.
        (JSC::UnlinkedCodeBlock::registerIndexForLinkTimeConstant): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegisters): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegister): Deleted.
        (JSC::UnlinkedCodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfJumpTargets): Deleted.
        (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::jumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::lastJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::isBuiltinFunction): Deleted.
        (JSC::UnlinkedCodeBlock::constructorKind): Deleted.
        (JSC::UnlinkedCodeBlock::superBinding): Deleted.
        (JSC::UnlinkedCodeBlock::scriptMode): Deleted.
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        (JSC::UnlinkedCodeBlock::numCalleeLocals): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::functionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::functionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionExprs): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::exceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addObjectAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addValueProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addLLIntCallLinkInfo): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfLLintCallLinkInfos): Deleted.
        (JSC::UnlinkedCodeBlock::codeType): Deleted.
        (JSC::UnlinkedCodeBlock::thisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::scopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfPropertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::constantBufferCount): Deleted.
        (JSC::UnlinkedCodeBlock::addConstantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::constantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::hasRareData): Deleted.
        (JSC::UnlinkedCodeBlock::recordParse): Deleted.
        (JSC::UnlinkedCodeBlock::sourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::sourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::codeFeatures): Deleted.
        (JSC::UnlinkedCodeBlock::hasCapturedVariables): Deleted.
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        (JSC::UnlinkedCodeBlock::lineCount): Deleted.
        (JSC::UnlinkedCodeBlock::startColumn): Deleted.
        (JSC::UnlinkedCodeBlock::endColumn): Deleted.
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::hasOpProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::UnlinkedCodeBlock::didOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::setDidOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::finishCreation): Deleted.
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock): Deleted.
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::destroy):
        * bytecode/UnlinkedGlobalCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h.
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedSimpleJumpTable::add): Deleted.
        (JSC::UnlinkedInstruction::UnlinkedInstruction): Deleted.
        (): Deleted.
        (JSC::UnlinkedCodeBlock::isConstructor): Deleted.
        (JSC::UnlinkedCodeBlock::isStrictMode): Deleted.
        (JSC::UnlinkedCodeBlock::usesEval): Deleted.
        (JSC::UnlinkedCodeBlock::parseMode): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunction): Deleted.
        (JSC::UnlinkedCodeBlock::derivedContextType): Deleted.
        (JSC::UnlinkedCodeBlock::evalContextType): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunctionContext): Deleted.
        (JSC::UnlinkedCodeBlock::isClassContext): Deleted.
        (JSC::UnlinkedCodeBlock::hasExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::setThisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setScopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::usesGlobalObject): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setNumParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addParameter): Deleted.
        (JSC::UnlinkedCodeBlock::numParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addRegExp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfRegExps): Deleted.
        (JSC::UnlinkedCodeBlock::regexp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfIdentifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addConstant): Deleted.
        (JSC::UnlinkedCodeBlock::registerIndexForLinkTimeConstant): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegisters): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegister): Deleted.
        (JSC::UnlinkedCodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfJumpTargets): Deleted.
        (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::jumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::lastJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::isBuiltinFunction): Deleted.
        (JSC::UnlinkedCodeBlock::constructorKind): Deleted.
        (JSC::UnlinkedCodeBlock::superBinding): Deleted.
        (JSC::UnlinkedCodeBlock::scriptMode): Deleted.
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        (JSC::UnlinkedCodeBlock::numCalleeLocals): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::functionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::functionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionExprs): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::exceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addObjectAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addValueProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addLLIntCallLinkInfo): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfLLintCallLinkInfos): Deleted.
        (JSC::UnlinkedCodeBlock::codeType): Deleted.
        (JSC::UnlinkedCodeBlock::thisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::scopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfPropertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::constantBufferCount): Deleted.
        (JSC::UnlinkedCodeBlock::addConstantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::constantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::hasRareData): Deleted.
        (JSC::UnlinkedCodeBlock::recordParse): Deleted.
        (JSC::UnlinkedCodeBlock::sourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::sourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::codeFeatures): Deleted.
        (JSC::UnlinkedCodeBlock::hasCapturedVariables): Deleted.
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        (JSC::UnlinkedCodeBlock::lineCount): Deleted.
        (JSC::UnlinkedCodeBlock::startColumn): Deleted.
        (JSC::UnlinkedCodeBlock::endColumn): Deleted.
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::hasOpProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::UnlinkedCodeBlock::didOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::setDidOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::finishCreation): Deleted.
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary): Deleted.
        * bytecode/UnlinkedModuleProgramCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp.
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::estimatedSize): Deleted.
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::getLineAndColumn): Deleted.
        (JSC::dumpLineColumnEntry): Deleted.
        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
        (JSC::UnlinkedProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedEvalCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionExecutable::destroy): Deleted.
        (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::instructions): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForIndex): Deleted.
        (JSC::UnlinkedCodeBlock::applyModification): Deleted.
        * bytecode/UnlinkedModuleProgramCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h.
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedSimpleJumpTable::add): Deleted.
        (JSC::UnlinkedInstruction::UnlinkedInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::isConstructor): Deleted.
        (JSC::UnlinkedCodeBlock::isStrictMode): Deleted.
        (JSC::UnlinkedCodeBlock::usesEval): Deleted.
        (JSC::UnlinkedCodeBlock::parseMode): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunction): Deleted.
        (JSC::UnlinkedCodeBlock::derivedContextType): Deleted.
        (JSC::UnlinkedCodeBlock::evalContextType): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunctionContext): Deleted.
        (JSC::UnlinkedCodeBlock::isClassContext): Deleted.
        (JSC::UnlinkedCodeBlock::hasExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::setThisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setScopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::usesGlobalObject): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setNumParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addParameter): Deleted.
        (JSC::UnlinkedCodeBlock::numParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addRegExp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfRegExps): Deleted.
        (JSC::UnlinkedCodeBlock::regexp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfIdentifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addConstant): Deleted.
        (JSC::UnlinkedCodeBlock::registerIndexForLinkTimeConstant): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegisters): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegister): Deleted.
        (JSC::UnlinkedCodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfJumpTargets): Deleted.
        (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::jumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::lastJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::isBuiltinFunction): Deleted.
        (JSC::UnlinkedCodeBlock::constructorKind): Deleted.
        (JSC::UnlinkedCodeBlock::superBinding): Deleted.
        (JSC::UnlinkedCodeBlock::scriptMode): Deleted.
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        (JSC::UnlinkedCodeBlock::numCalleeLocals): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::functionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::functionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionExprs): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::exceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addObjectAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addValueProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addLLIntCallLinkInfo): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfLLintCallLinkInfos): Deleted.
        (JSC::UnlinkedCodeBlock::codeType): Deleted.
        (JSC::UnlinkedCodeBlock::thisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::scopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfPropertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::constantBufferCount): Deleted.
        (JSC::UnlinkedCodeBlock::addConstantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::constantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::hasRareData): Deleted.
        (JSC::UnlinkedCodeBlock::recordParse): Deleted.
        (JSC::UnlinkedCodeBlock::sourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::sourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::codeFeatures): Deleted.
        (JSC::UnlinkedCodeBlock::hasCapturedVariables): Deleted.
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        (JSC::UnlinkedCodeBlock::lineCount): Deleted.
        (JSC::UnlinkedCodeBlock::startColumn): Deleted.
        (JSC::UnlinkedCodeBlock::endColumn): Deleted.
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::hasOpProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::UnlinkedCodeBlock::didOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::setDidOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::finishCreation): Deleted.
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock): Deleted.
        * bytecode/UnlinkedProgramCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp.
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::estimatedSize): Deleted.
        (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::getLineAndColumn): Deleted.
        (JSC::dumpLineColumnEntry): Deleted.
        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::visitChildren): Deleted.
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock): Deleted.
        (JSC::UnlinkedModuleProgramCodeBlock::destroy): Deleted.
        (JSC::UnlinkedEvalCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionCodeBlock::destroy): Deleted.
        (JSC::UnlinkedFunctionExecutable::destroy): Deleted.
        (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::instructions): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::handlerForIndex): Deleted.
        (JSC::UnlinkedCodeBlock::applyModification): Deleted.
        * bytecode/UnlinkedProgramCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h.
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedSimpleJumpTable::add): Deleted.
        (JSC::UnlinkedInstruction::UnlinkedInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::isConstructor): Deleted.
        (JSC::UnlinkedCodeBlock::isStrictMode): Deleted.
        (JSC::UnlinkedCodeBlock::usesEval): Deleted.
        (JSC::UnlinkedCodeBlock::parseMode): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunction): Deleted.
        (JSC::UnlinkedCodeBlock::derivedContextType): Deleted.
        (JSC::UnlinkedCodeBlock::evalContextType): Deleted.
        (JSC::UnlinkedCodeBlock::isArrowFunctionContext): Deleted.
        (JSC::UnlinkedCodeBlock::isClassContext): Deleted.
        (JSC::UnlinkedCodeBlock::hasExpressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::expressionInfo): Deleted.
        (JSC::UnlinkedCodeBlock::setThisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setScopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::usesGlobalObject): Deleted.
        (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::globalObjectRegister): Deleted.
        (JSC::UnlinkedCodeBlock::setNumParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addParameter): Deleted.
        (JSC::UnlinkedCodeBlock::numParameters): Deleted.
        (JSC::UnlinkedCodeBlock::addRegExp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfRegExps): Deleted.
        (JSC::UnlinkedCodeBlock::regexp): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfIdentifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifier): Deleted.
        (JSC::UnlinkedCodeBlock::identifiers): Deleted.
        (JSC::UnlinkedCodeBlock::addConstant): Deleted.
        (JSC::UnlinkedCodeBlock::registerIndexForLinkTimeConstant): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegisters): Deleted.
        (JSC::UnlinkedCodeBlock::constantRegister): Deleted.
        (JSC::UnlinkedCodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfJumpTargets): Deleted.
        (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::jumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::lastJumpTarget): Deleted.
        (JSC::UnlinkedCodeBlock::isBuiltinFunction): Deleted.
        (JSC::UnlinkedCodeBlock::constructorKind): Deleted.
        (JSC::UnlinkedCodeBlock::superBinding): Deleted.
        (JSC::UnlinkedCodeBlock::scriptMode): Deleted.
        (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
        (JSC::UnlinkedCodeBlock::numCalleeLocals): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::functionDecl): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::functionExpr): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfFunctionExprs): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::exceptionHandler): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addArrayAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addObjectAllocationProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addValueProfile): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles): Deleted.
        (JSC::UnlinkedCodeBlock::addLLIntCallLinkInfo): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfLLintCallLinkInfos): Deleted.
        (JSC::UnlinkedCodeBlock::codeType): Deleted.
        (JSC::UnlinkedCodeBlock::thisRegister): Deleted.
        (JSC::UnlinkedCodeBlock::scopeRegister): Deleted.
        (JSC::UnlinkedCodeBlock::addPropertyAccessInstruction): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfPropertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::propertyAccessInstructions): Deleted.
        (JSC::UnlinkedCodeBlock::constantBufferCount): Deleted.
        (JSC::UnlinkedCodeBlock::addConstantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::constantBuffer): Deleted.
        (JSC::UnlinkedCodeBlock::hasRareData): Deleted.
        (JSC::UnlinkedCodeBlock::recordParse): Deleted.
        (JSC::UnlinkedCodeBlock::sourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::sourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective): Deleted.
        (JSC::UnlinkedCodeBlock::codeFeatures): Deleted.
        (JSC::UnlinkedCodeBlock::hasCapturedVariables): Deleted.
        (JSC::UnlinkedCodeBlock::firstLine): Deleted.
        (JSC::UnlinkedCodeBlock::lineCount): Deleted.
        (JSC::UnlinkedCodeBlock::startColumn): Deleted.
        (JSC::UnlinkedCodeBlock::endColumn): Deleted.
        (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::hasOpProfileControlFlowBytecodeOffsets): Deleted.
        (JSC::UnlinkedCodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::UnlinkedCodeBlock::didOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::setDidOptimize): Deleted.
        (JSC::UnlinkedCodeBlock::finishCreation): Deleted.
        (JSC::UnlinkedCodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        * runtime/CodeCache.cpp:
        * runtime/EvalExecutable.h:
        * runtime/JSModuleRecord.cpp:

2016-11-02  Saam Barati  <sbarati@apple.com>

        Allocation elimination of rest parameter doesn't take into account indexed properties on Array.prototype/Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=164301

        Reviewed by Geoffrey Garen.

        We weren't taking into account indexed properties on the __proto__
        of the rest parameter. This made the code for doing out of bound
        accesses incorrect since it just assumed it's safe for the result of
        an out of bound access to be undefined. This broke the semantics
        of JS code when there was an indexed property on the Array.prototype
        or Object.prototype.

        This patch makes sure we set up the proper watchpoints for making
        sure out of bound accesses are safe to return undefined.

        * dfg/DFGArgumentsEliminationPhase.cpp:

2016-11-02  Geoffrey Garen  <ggaren@apple.com>

        One file per class for CodeBlock.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=164343

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CallLinkInfo.cpp:
        * bytecode/CodeBlock.cpp:
        (JSC::FunctionCodeBlock::destroy): Deleted.
        (JSC::WebAssemblyCodeBlock::destroy): Deleted.
        (JSC::ProgramCodeBlock::destroy): Deleted.
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        (JSC::EvalCodeBlock::destroy): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        * bytecode/EvalCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/CodeBlock.cpp.
        (JSC::FunctionCodeBlock::destroy): Deleted.
        (JSC::WebAssemblyCodeBlock::destroy): Deleted.
        (JSC::ProgramCodeBlock::destroy): Deleted.
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        (JSC::CodeBlock::inferredName): Deleted.
        (JSC::CodeBlock::hasHash): Deleted.
        (JSC::CodeBlock::isSafeToComputeHash): Deleted.
        (JSC::CodeBlock::hash): Deleted.
        (JSC::CodeBlock::sourceCodeForTools): Deleted.
        (JSC::CodeBlock::sourceCodeOnOneLine): Deleted.
        (JSC::CodeBlock::hashAsStringIfPossible): Deleted.
        (JSC::CodeBlock::dumpAssumingJITType): Deleted.
        (JSC::CodeBlock::dump): Deleted.
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpSource): Deleted.
        (JSC::CodeBlock::dumpBytecode): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        (JSC::sizeInBytes): Deleted.
        (JSC::CodeBlock::CodeBlock): Deleted.
        (JSC::CodeBlock::finishCreation): Deleted.
        (JSC::CodeBlock::~CodeBlock): Deleted.
        (JSC::CodeBlock::setConstantRegisters): Deleted.
        (JSC::CodeBlock::setAlternative): Deleted.
        (JSC::CodeBlock::setNumParameters): Deleted.
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        (JSC::CodeBlock::specialOSREntryBlockOrNull): Deleted.
        (JSC::CodeBlock::visitWeakly): Deleted.
        (JSC::CodeBlock::estimatedSize): Deleted.
        (JSC::CodeBlock::visitChildren): Deleted.
        (JSC::CodeBlock::shouldVisitStrongly): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToWeakReference): Deleted.
        (JSC::timeToLive): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToOldAge): Deleted.
        (JSC::shouldMarkTransition): Deleted.
        (JSC::CodeBlock::propagateTransitions): Deleted.
        (JSC::CodeBlock::determineLiveness): Deleted.
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted.
        (JSC::CodeBlock::clearLLIntGetByIdCache): Deleted.
        (JSC::CodeBlock::finalizeLLIntInlineCaches): Deleted.
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        (JSC::CodeBlock::getStubInfoMap): Deleted.
        (JSC::CodeBlock::getCallLinkInfoMap): Deleted.
        (JSC::CodeBlock::getByValInfoMap): Deleted.
        (JSC::CodeBlock::addStubInfo): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::findStubInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        (JSC::CodeBlock::addCallLinkInfo): Deleted.
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex): Deleted.
        (JSC::CodeBlock::resetJITData): Deleted.
        (JSC::CodeBlock::visitOSRExitTargets): Deleted.
        (JSC::CodeBlock::stronglyVisitStrongReferences): Deleted.
        (JSC::CodeBlock::stronglyVisitWeakReferences): Deleted.
        (JSC::CodeBlock::baselineAlternative): Deleted.
        (JSC::CodeBlock::baselineVersion): Deleted.
        (JSC::CodeBlock::hasOptimizedReplacement): Deleted.
        (JSC::CodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::CodeBlock::handlerForIndex): Deleted.
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex): Deleted.
        (JSC::CodeBlock::removeExceptionHandlerForCallSite): Deleted.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::columnNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::CodeBlock::hasOpDebugForLineAndColumn): Deleted.
        (JSC::CodeBlock::shrinkToFit): Deleted.
        (JSC::CodeBlock::linkIncomingCall): Deleted.
        (JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
        (JSC::CodeBlock::unlinkIncomingCalls): Deleted.
        (JSC::CodeBlock::newReplacement): Deleted.
        (JSC::CodeBlock::replacement): Deleted.
        (JSC::CodeBlock::computeCapabilityLevel): Deleted.
        (JSC::CodeBlock::jettison): Deleted.
        (JSC::CodeBlock::globalObjectFor): Deleted.
        (JSC::RecursionCheckFunctor::RecursionCheckFunctor): Deleted.
        (JSC::RecursionCheckFunctor::operator()): Deleted.
        (JSC::RecursionCheckFunctor::didRecurse): Deleted.
        (JSC::CodeBlock::noticeIncomingCall): Deleted.
        (JSC::CodeBlock::reoptimizationRetryCounter): Deleted.
        (JSC::CodeBlock::setCalleeSaveRegisters): Deleted.
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::countReoptimization): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::codeTypeThresholdMultiplier): Deleted.
        (JSC::CodeBlock::optimizationThresholdScalingFactor): Deleted.
        (JSC::clipThreshold): Deleted.
        (JSC::CodeBlock::adjustedCounterValue): Deleted.
        (JSC::CodeBlock::checkIfOptimizationThresholdReached): Deleted.
        (JSC::CodeBlock::optimizeNextInvocation): Deleted.
        (JSC::CodeBlock::dontOptimizeAnytimeSoon): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::optimizeAfterLongWarmUp): Deleted.
        (JSC::CodeBlock::optimizeSoon): Deleted.
        (JSC::CodeBlock::forceOptimizationSlowPathConcurrently): Deleted.
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): Deleted.
        (JSC::CodeBlock::adjustedExitCountThreshold): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimization): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop): Deleted.
        (JSC::CodeBlock::shouldReoptimizeNow): Deleted.
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow): Deleted.
        (JSC::CodeBlock::getArrayProfile): Deleted.
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        (JSC::CodeBlock::codeOrigins): Deleted.
        (JSC::CodeBlock::numberOfDFGIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): Deleted.
        (JSC::CodeBlock::updateAllValueProfilePredictions): Deleted.
        (JSC::CodeBlock::updateAllArrayPredictions): Deleted.
        (JSC::CodeBlock::updateAllPredictions): Deleted.
        (JSC::CodeBlock::shouldOptimizeNow): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::dumpValueProfiles): Deleted.
        (JSC::CodeBlock::frameRegisterCount): Deleted.
        (JSC::CodeBlock::stackPointerOffset): Deleted.
        (JSC::CodeBlock::predictedMachineCodeSize): Deleted.
        (JSC::CodeBlock::usesOpcode): Deleted.
        (JSC::CodeBlock::nameForRegister): Deleted.
        (JSC::CodeBlock::valueProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::validate): Deleted.
        (JSC::CodeBlock::beginValidationDidFail): Deleted.
        (JSC::CodeBlock::endValidationDidFail): Deleted.
        (JSC::CodeBlock::addBreakpoint): Deleted.
        (JSC::CodeBlock::setSteppingMode): Deleted.
        (JSC::CodeBlock::addRareCaseProfile): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForPC): Deleted.
        (JSC::CodeBlock::couldTakeSpecialFastCase): Deleted.
        (JSC::CodeBlock::capabilityLevel): Deleted.
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::findPC): Deleted.
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        (JSC::CodeBlock::jitSoon): Deleted.
        (JSC::CodeBlock::dumpMathICStats): Deleted.
        (JSC::CodeBlock::livenessAnalysisSlow): Deleted.
        * bytecode/EvalCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * bytecode/FunctionCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/CodeBlock.cpp.
        (JSC::WebAssemblyCodeBlock::destroy): Deleted.
        (JSC::ProgramCodeBlock::destroy): Deleted.
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        (JSC::EvalCodeBlock::destroy): Deleted.
        (JSC::CodeBlock::inferredName): Deleted.
        (JSC::CodeBlock::hasHash): Deleted.
        (JSC::CodeBlock::isSafeToComputeHash): Deleted.
        (JSC::CodeBlock::hash): Deleted.
        (JSC::CodeBlock::sourceCodeForTools): Deleted.
        (JSC::CodeBlock::sourceCodeOnOneLine): Deleted.
        (JSC::CodeBlock::hashAsStringIfPossible): Deleted.
        (JSC::CodeBlock::dumpAssumingJITType): Deleted.
        (JSC::CodeBlock::dump): Deleted.
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpSource): Deleted.
        (JSC::CodeBlock::dumpBytecode): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        (JSC::sizeInBytes): Deleted.
        (JSC::CodeBlock::CodeBlock): Deleted.
        (JSC::CodeBlock::finishCreation): Deleted.
        (JSC::CodeBlock::~CodeBlock): Deleted.
        (JSC::CodeBlock::setConstantRegisters): Deleted.
        (JSC::CodeBlock::setAlternative): Deleted.
        (JSC::CodeBlock::setNumParameters): Deleted.
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        (JSC::CodeBlock::specialOSREntryBlockOrNull): Deleted.
        (JSC::CodeBlock::visitWeakly): Deleted.
        (JSC::CodeBlock::estimatedSize): Deleted.
        (JSC::CodeBlock::visitChildren): Deleted.
        (JSC::CodeBlock::shouldVisitStrongly): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToWeakReference): Deleted.
        (JSC::timeToLive): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToOldAge): Deleted.
        (JSC::shouldMarkTransition): Deleted.
        (JSC::CodeBlock::propagateTransitions): Deleted.
        (JSC::CodeBlock::determineLiveness): Deleted.
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted.
        (JSC::CodeBlock::clearLLIntGetByIdCache): Deleted.
        (JSC::CodeBlock::finalizeLLIntInlineCaches): Deleted.
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        (JSC::CodeBlock::getStubInfoMap): Deleted.
        (JSC::CodeBlock::getCallLinkInfoMap): Deleted.
        (JSC::CodeBlock::getByValInfoMap): Deleted.
        (JSC::CodeBlock::addStubInfo): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::findStubInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        (JSC::CodeBlock::addCallLinkInfo): Deleted.
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex): Deleted.
        (JSC::CodeBlock::resetJITData): Deleted.
        (JSC::CodeBlock::visitOSRExitTargets): Deleted.
        (JSC::CodeBlock::stronglyVisitStrongReferences): Deleted.
        (JSC::CodeBlock::stronglyVisitWeakReferences): Deleted.
        (JSC::CodeBlock::baselineAlternative): Deleted.
        (JSC::CodeBlock::baselineVersion): Deleted.
        (JSC::CodeBlock::hasOptimizedReplacement): Deleted.
        (JSC::CodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::CodeBlock::handlerForIndex): Deleted.
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex): Deleted.
        (JSC::CodeBlock::removeExceptionHandlerForCallSite): Deleted.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::columnNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::CodeBlock::hasOpDebugForLineAndColumn): Deleted.
        (JSC::CodeBlock::shrinkToFit): Deleted.
        (JSC::CodeBlock::linkIncomingCall): Deleted.
        (JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
        (JSC::CodeBlock::unlinkIncomingCalls): Deleted.
        (JSC::CodeBlock::newReplacement): Deleted.
        (JSC::CodeBlock::replacement): Deleted.
        (JSC::CodeBlock::computeCapabilityLevel): Deleted.
        (JSC::CodeBlock::jettison): Deleted.
        (JSC::CodeBlock::globalObjectFor): Deleted.
        (JSC::RecursionCheckFunctor::RecursionCheckFunctor): Deleted.
        (JSC::RecursionCheckFunctor::operator()): Deleted.
        (JSC::RecursionCheckFunctor::didRecurse): Deleted.
        (JSC::CodeBlock::noticeIncomingCall): Deleted.
        (JSC::CodeBlock::reoptimizationRetryCounter): Deleted.
        (JSC::CodeBlock::setCalleeSaveRegisters): Deleted.
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::countReoptimization): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::codeTypeThresholdMultiplier): Deleted.
        (JSC::CodeBlock::optimizationThresholdScalingFactor): Deleted.
        (JSC::clipThreshold): Deleted.
        (JSC::CodeBlock::adjustedCounterValue): Deleted.
        (JSC::CodeBlock::checkIfOptimizationThresholdReached): Deleted.
        (JSC::CodeBlock::optimizeNextInvocation): Deleted.
        (JSC::CodeBlock::dontOptimizeAnytimeSoon): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::optimizeAfterLongWarmUp): Deleted.
        (JSC::CodeBlock::optimizeSoon): Deleted.
        (JSC::CodeBlock::forceOptimizationSlowPathConcurrently): Deleted.
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): Deleted.
        (JSC::CodeBlock::adjustedExitCountThreshold): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimization): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop): Deleted.
        (JSC::CodeBlock::shouldReoptimizeNow): Deleted.
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow): Deleted.
        (JSC::CodeBlock::getArrayProfile): Deleted.
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        (JSC::CodeBlock::codeOrigins): Deleted.
        (JSC::CodeBlock::numberOfDFGIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): Deleted.
        (JSC::CodeBlock::updateAllValueProfilePredictions): Deleted.
        (JSC::CodeBlock::updateAllArrayPredictions): Deleted.
        (JSC::CodeBlock::updateAllPredictions): Deleted.
        (JSC::CodeBlock::shouldOptimizeNow): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::dumpValueProfiles): Deleted.
        (JSC::CodeBlock::frameRegisterCount): Deleted.
        (JSC::CodeBlock::stackPointerOffset): Deleted.
        (JSC::CodeBlock::predictedMachineCodeSize): Deleted.
        (JSC::CodeBlock::usesOpcode): Deleted.
        (JSC::CodeBlock::nameForRegister): Deleted.
        (JSC::CodeBlock::valueProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::validate): Deleted.
        (JSC::CodeBlock::beginValidationDidFail): Deleted.
        (JSC::CodeBlock::endValidationDidFail): Deleted.
        (JSC::CodeBlock::addBreakpoint): Deleted.
        (JSC::CodeBlock::setSteppingMode): Deleted.
        (JSC::CodeBlock::addRareCaseProfile): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForPC): Deleted.
        (JSC::CodeBlock::couldTakeSpecialFastCase): Deleted.
        (JSC::CodeBlock::capabilityLevel): Deleted.
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::findPC): Deleted.
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        (JSC::CodeBlock::jitSoon): Deleted.
        (JSC::CodeBlock::dumpMathICStats): Deleted.
        (JSC::CodeBlock::livenessAnalysisSlow): Deleted.
        * bytecode/FunctionCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * bytecode/GlobalCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * bytecode/ModuleProgramCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/CodeBlock.cpp.
        (JSC::FunctionCodeBlock::destroy): Deleted.
        (JSC::WebAssemblyCodeBlock::destroy): Deleted.
        (JSC::ProgramCodeBlock::destroy): Deleted.
        (JSC::EvalCodeBlock::destroy): Deleted.
        (JSC::CodeBlock::inferredName): Deleted.
        (JSC::CodeBlock::hasHash): Deleted.
        (JSC::CodeBlock::isSafeToComputeHash): Deleted.
        (JSC::CodeBlock::hash): Deleted.
        (JSC::CodeBlock::sourceCodeForTools): Deleted.
        (JSC::CodeBlock::sourceCodeOnOneLine): Deleted.
        (JSC::CodeBlock::hashAsStringIfPossible): Deleted.
        (JSC::CodeBlock::dumpAssumingJITType): Deleted.
        (JSC::CodeBlock::dump): Deleted.
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpSource): Deleted.
        (JSC::CodeBlock::dumpBytecode): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        (JSC::sizeInBytes): Deleted.
        (JSC::CodeBlock::CodeBlock): Deleted.
        (JSC::CodeBlock::finishCreation): Deleted.
        (JSC::CodeBlock::~CodeBlock): Deleted.
        (JSC::CodeBlock::setConstantRegisters): Deleted.
        (JSC::CodeBlock::setAlternative): Deleted.
        (JSC::CodeBlock::setNumParameters): Deleted.
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        (JSC::CodeBlock::specialOSREntryBlockOrNull): Deleted.
        (JSC::CodeBlock::visitWeakly): Deleted.
        (JSC::CodeBlock::estimatedSize): Deleted.
        (JSC::CodeBlock::visitChildren): Deleted.
        (JSC::CodeBlock::shouldVisitStrongly): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToWeakReference): Deleted.
        (JSC::timeToLive): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToOldAge): Deleted.
        (JSC::shouldMarkTransition): Deleted.
        (JSC::CodeBlock::propagateTransitions): Deleted.
        (JSC::CodeBlock::determineLiveness): Deleted.
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted.
        (JSC::CodeBlock::clearLLIntGetByIdCache): Deleted.
        (JSC::CodeBlock::finalizeLLIntInlineCaches): Deleted.
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        (JSC::CodeBlock::getStubInfoMap): Deleted.
        (JSC::CodeBlock::getCallLinkInfoMap): Deleted.
        (JSC::CodeBlock::getByValInfoMap): Deleted.
        (JSC::CodeBlock::addStubInfo): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::findStubInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        (JSC::CodeBlock::addCallLinkInfo): Deleted.
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex): Deleted.
        (JSC::CodeBlock::resetJITData): Deleted.
        (JSC::CodeBlock::visitOSRExitTargets): Deleted.
        (JSC::CodeBlock::stronglyVisitStrongReferences): Deleted.
        (JSC::CodeBlock::stronglyVisitWeakReferences): Deleted.
        (JSC::CodeBlock::baselineAlternative): Deleted.
        (JSC::CodeBlock::baselineVersion): Deleted.
        (JSC::CodeBlock::hasOptimizedReplacement): Deleted.
        (JSC::CodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::CodeBlock::handlerForIndex): Deleted.
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex): Deleted.
        (JSC::CodeBlock::removeExceptionHandlerForCallSite): Deleted.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::columnNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::CodeBlock::hasOpDebugForLineAndColumn): Deleted.
        (JSC::CodeBlock::shrinkToFit): Deleted.
        (JSC::CodeBlock::linkIncomingCall): Deleted.
        (JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
        (JSC::CodeBlock::unlinkIncomingCalls): Deleted.
        (JSC::CodeBlock::newReplacement): Deleted.
        (JSC::CodeBlock::replacement): Deleted.
        (JSC::CodeBlock::computeCapabilityLevel): Deleted.
        (JSC::CodeBlock::jettison): Deleted.
        (JSC::CodeBlock::globalObjectFor): Deleted.
        (JSC::RecursionCheckFunctor::RecursionCheckFunctor): Deleted.
        (JSC::RecursionCheckFunctor::operator()): Deleted.
        (JSC::RecursionCheckFunctor::didRecurse): Deleted.
        (JSC::CodeBlock::noticeIncomingCall): Deleted.
        (JSC::CodeBlock::reoptimizationRetryCounter): Deleted.
        (JSC::CodeBlock::setCalleeSaveRegisters): Deleted.
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::countReoptimization): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::codeTypeThresholdMultiplier): Deleted.
        (JSC::CodeBlock::optimizationThresholdScalingFactor): Deleted.
        (JSC::clipThreshold): Deleted.
        (JSC::CodeBlock::adjustedCounterValue): Deleted.
        (JSC::CodeBlock::checkIfOptimizationThresholdReached): Deleted.
        (JSC::CodeBlock::optimizeNextInvocation): Deleted.
        (JSC::CodeBlock::dontOptimizeAnytimeSoon): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::optimizeAfterLongWarmUp): Deleted.
        (JSC::CodeBlock::optimizeSoon): Deleted.
        (JSC::CodeBlock::forceOptimizationSlowPathConcurrently): Deleted.
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): Deleted.
        (JSC::CodeBlock::adjustedExitCountThreshold): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimization): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop): Deleted.
        (JSC::CodeBlock::shouldReoptimizeNow): Deleted.
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow): Deleted.
        (JSC::CodeBlock::getArrayProfile): Deleted.
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        (JSC::CodeBlock::codeOrigins): Deleted.
        (JSC::CodeBlock::numberOfDFGIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): Deleted.
        (JSC::CodeBlock::updateAllValueProfilePredictions): Deleted.
        (JSC::CodeBlock::updateAllArrayPredictions): Deleted.
        (JSC::CodeBlock::updateAllPredictions): Deleted.
        (JSC::CodeBlock::shouldOptimizeNow): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::dumpValueProfiles): Deleted.
        (JSC::CodeBlock::frameRegisterCount): Deleted.
        (JSC::CodeBlock::stackPointerOffset): Deleted.
        (JSC::CodeBlock::predictedMachineCodeSize): Deleted.
        (JSC::CodeBlock::usesOpcode): Deleted.
        (JSC::CodeBlock::nameForRegister): Deleted.
        (JSC::CodeBlock::valueProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::validate): Deleted.
        (JSC::CodeBlock::beginValidationDidFail): Deleted.
        (JSC::CodeBlock::endValidationDidFail): Deleted.
        (JSC::CodeBlock::addBreakpoint): Deleted.
        (JSC::CodeBlock::setSteppingMode): Deleted.
        (JSC::CodeBlock::addRareCaseProfile): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForPC): Deleted.
        (JSC::CodeBlock::couldTakeSpecialFastCase): Deleted.
        (JSC::CodeBlock::capabilityLevel): Deleted.
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::findPC): Deleted.
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        (JSC::CodeBlock::jitSoon): Deleted.
        (JSC::CodeBlock::dumpMathICStats): Deleted.
        (JSC::CodeBlock::livenessAnalysisSlow): Deleted.
        * bytecode/ModuleProgramCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * bytecode/ProgramCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/CodeBlock.cpp.
        (JSC::FunctionCodeBlock::destroy): Deleted.
        (JSC::WebAssemblyCodeBlock::destroy): Deleted.
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        (JSC::EvalCodeBlock::destroy): Deleted.
        (JSC::CodeBlock::inferredName): Deleted.
        (JSC::CodeBlock::hasHash): Deleted.
        (JSC::CodeBlock::isSafeToComputeHash): Deleted.
        (JSC::CodeBlock::hash): Deleted.
        (JSC::CodeBlock::sourceCodeForTools): Deleted.
        (JSC::CodeBlock::sourceCodeOnOneLine): Deleted.
        (JSC::CodeBlock::hashAsStringIfPossible): Deleted.
        (JSC::CodeBlock::dumpAssumingJITType): Deleted.
        (JSC::CodeBlock::dump): Deleted.
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpSource): Deleted.
        (JSC::CodeBlock::dumpBytecode): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        (JSC::sizeInBytes): Deleted.
        (JSC::CodeBlock::CodeBlock): Deleted.
        (JSC::CodeBlock::finishCreation): Deleted.
        (JSC::CodeBlock::~CodeBlock): Deleted.
        (JSC::CodeBlock::setConstantRegisters): Deleted.
        (JSC::CodeBlock::setAlternative): Deleted.
        (JSC::CodeBlock::setNumParameters): Deleted.
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        (JSC::CodeBlock::specialOSREntryBlockOrNull): Deleted.
        (JSC::CodeBlock::visitWeakly): Deleted.
        (JSC::CodeBlock::estimatedSize): Deleted.
        (JSC::CodeBlock::visitChildren): Deleted.
        (JSC::CodeBlock::shouldVisitStrongly): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToWeakReference): Deleted.
        (JSC::timeToLive): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToOldAge): Deleted.
        (JSC::shouldMarkTransition): Deleted.
        (JSC::CodeBlock::propagateTransitions): Deleted.
        (JSC::CodeBlock::determineLiveness): Deleted.
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted.
        (JSC::CodeBlock::clearLLIntGetByIdCache): Deleted.
        (JSC::CodeBlock::finalizeLLIntInlineCaches): Deleted.
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        (JSC::CodeBlock::getStubInfoMap): Deleted.
        (JSC::CodeBlock::getCallLinkInfoMap): Deleted.
        (JSC::CodeBlock::getByValInfoMap): Deleted.
        (JSC::CodeBlock::addStubInfo): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::findStubInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        (JSC::CodeBlock::addCallLinkInfo): Deleted.
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex): Deleted.
        (JSC::CodeBlock::resetJITData): Deleted.
        (JSC::CodeBlock::visitOSRExitTargets): Deleted.
        (JSC::CodeBlock::stronglyVisitStrongReferences): Deleted.
        (JSC::CodeBlock::stronglyVisitWeakReferences): Deleted.
        (JSC::CodeBlock::baselineAlternative): Deleted.
        (JSC::CodeBlock::baselineVersion): Deleted.
        (JSC::CodeBlock::hasOptimizedReplacement): Deleted.
        (JSC::CodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::CodeBlock::handlerForIndex): Deleted.
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex): Deleted.
        (JSC::CodeBlock::removeExceptionHandlerForCallSite): Deleted.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::columnNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::CodeBlock::hasOpDebugForLineAndColumn): Deleted.
        (JSC::CodeBlock::shrinkToFit): Deleted.
        (JSC::CodeBlock::linkIncomingCall): Deleted.
        (JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
        (JSC::CodeBlock::unlinkIncomingCalls): Deleted.
        (JSC::CodeBlock::newReplacement): Deleted.
        (JSC::CodeBlock::replacement): Deleted.
        (JSC::CodeBlock::computeCapabilityLevel): Deleted.
        (JSC::CodeBlock::jettison): Deleted.
        (JSC::CodeBlock::globalObjectFor): Deleted.
        (JSC::RecursionCheckFunctor::RecursionCheckFunctor): Deleted.
        (JSC::RecursionCheckFunctor::operator()): Deleted.
        (JSC::RecursionCheckFunctor::didRecurse): Deleted.
        (JSC::CodeBlock::noticeIncomingCall): Deleted.
        (JSC::CodeBlock::reoptimizationRetryCounter): Deleted.
        (JSC::CodeBlock::setCalleeSaveRegisters): Deleted.
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::countReoptimization): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::codeTypeThresholdMultiplier): Deleted.
        (JSC::CodeBlock::optimizationThresholdScalingFactor): Deleted.
        (JSC::clipThreshold): Deleted.
        (JSC::CodeBlock::adjustedCounterValue): Deleted.
        (JSC::CodeBlock::checkIfOptimizationThresholdReached): Deleted.
        (JSC::CodeBlock::optimizeNextInvocation): Deleted.
        (JSC::CodeBlock::dontOptimizeAnytimeSoon): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::optimizeAfterLongWarmUp): Deleted.
        (JSC::CodeBlock::optimizeSoon): Deleted.
        (JSC::CodeBlock::forceOptimizationSlowPathConcurrently): Deleted.
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): Deleted.
        (JSC::CodeBlock::adjustedExitCountThreshold): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimization): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop): Deleted.
        (JSC::CodeBlock::shouldReoptimizeNow): Deleted.
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow): Deleted.
        (JSC::CodeBlock::getArrayProfile): Deleted.
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        (JSC::CodeBlock::codeOrigins): Deleted.
        (JSC::CodeBlock::numberOfDFGIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): Deleted.
        (JSC::CodeBlock::updateAllValueProfilePredictions): Deleted.
        (JSC::CodeBlock::updateAllArrayPredictions): Deleted.
        (JSC::CodeBlock::updateAllPredictions): Deleted.
        (JSC::CodeBlock::shouldOptimizeNow): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::dumpValueProfiles): Deleted.
        (JSC::CodeBlock::frameRegisterCount): Deleted.
        (JSC::CodeBlock::stackPointerOffset): Deleted.
        (JSC::CodeBlock::predictedMachineCodeSize): Deleted.
        (JSC::CodeBlock::usesOpcode): Deleted.
        (JSC::CodeBlock::nameForRegister): Deleted.
        (JSC::CodeBlock::valueProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::validate): Deleted.
        (JSC::CodeBlock::beginValidationDidFail): Deleted.
        (JSC::CodeBlock::endValidationDidFail): Deleted.
        (JSC::CodeBlock::addBreakpoint): Deleted.
        (JSC::CodeBlock::setSteppingMode): Deleted.
        (JSC::CodeBlock::addRareCaseProfile): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForPC): Deleted.
        (JSC::CodeBlock::couldTakeSpecialFastCase): Deleted.
        (JSC::CodeBlock::capabilityLevel): Deleted.
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::findPC): Deleted.
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        (JSC::CodeBlock::jitSoon): Deleted.
        (JSC::CodeBlock::dumpMathICStats): Deleted.
        (JSC::CodeBlock::livenessAnalysisSlow): Deleted.
        * bytecode/ProgramCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::WebAssemblyCodeBlock::create): Deleted.
        (JSC::WebAssemblyCodeBlock::createStructure): Deleted.
        (JSC::WebAssemblyCodeBlock::WebAssemblyCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * bytecode/WebAssemblyCodeBlock.cpp: Copied from Source/JavaScriptCore/bytecode/CodeBlock.cpp.
        (JSC::FunctionCodeBlock::destroy): Deleted.
        (JSC::ProgramCodeBlock::destroy): Deleted.
        (JSC::ModuleProgramCodeBlock::destroy): Deleted.
        (JSC::EvalCodeBlock::destroy): Deleted.
        (JSC::CodeBlock::inferredName): Deleted.
        (JSC::CodeBlock::hasHash): Deleted.
        (JSC::CodeBlock::isSafeToComputeHash): Deleted.
        (JSC::CodeBlock::hash): Deleted.
        (JSC::CodeBlock::sourceCodeForTools): Deleted.
        (JSC::CodeBlock::sourceCodeOnOneLine): Deleted.
        (JSC::CodeBlock::hashAsStringIfPossible): Deleted.
        (JSC::CodeBlock::dumpAssumingJITType): Deleted.
        (JSC::CodeBlock::dump): Deleted.
        (JSC::idName): Deleted.
        (JSC::CodeBlock::registerName): Deleted.
        (JSC::CodeBlock::constantName): Deleted.
        (JSC::regexpToSourceString): Deleted.
        (JSC::regexpName): Deleted.
        (JSC::debugHookName): Deleted.
        (JSC::CodeBlock::printUnaryOp): Deleted.
        (JSC::CodeBlock::printBinaryOp): Deleted.
        (JSC::CodeBlock::printConditionalJump): Deleted.
        (JSC::CodeBlock::printGetByIdOp): Deleted.
        (JSC::dumpStructure): Deleted.
        (JSC::dumpChain): Deleted.
        (JSC::CodeBlock::printGetByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printPutByIdCacheStatus): Deleted.
        (JSC::CodeBlock::printCallOp): Deleted.
        (JSC::CodeBlock::printPutByIdOp): Deleted.
        (JSC::CodeBlock::dumpSource): Deleted.
        (JSC::CodeBlock::dumpBytecode): Deleted.
        (JSC::CodeBlock::dumpExceptionHandlers): Deleted.
        (JSC::CodeBlock::beginDumpProfiling): Deleted.
        (JSC::CodeBlock::dumpValueProfiling): Deleted.
        (JSC::CodeBlock::dumpArrayProfiling): Deleted.
        (JSC::CodeBlock::dumpRareCaseProfile): Deleted.
        (JSC::CodeBlock::dumpArithProfile): Deleted.
        (JSC::CodeBlock::printLocationAndOp): Deleted.
        (JSC::CodeBlock::printLocationOpAndRegisterOperand): Deleted.
        (JSC::sizeInBytes): Deleted.
        (JSC::CodeBlock::CodeBlock): Deleted.
        (JSC::CodeBlock::finishCreation): Deleted.
        (JSC::CodeBlock::~CodeBlock): Deleted.
        (JSC::CodeBlock::setConstantRegisters): Deleted.
        (JSC::CodeBlock::setAlternative): Deleted.
        (JSC::CodeBlock::setNumParameters): Deleted.
        (JSC::EvalCodeCache::visitAggregate): Deleted.
        (JSC::CodeBlock::specialOSREntryBlockOrNull): Deleted.
        (JSC::CodeBlock::visitWeakly): Deleted.
        (JSC::CodeBlock::estimatedSize): Deleted.
        (JSC::CodeBlock::visitChildren): Deleted.
        (JSC::CodeBlock::shouldVisitStrongly): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToWeakReference): Deleted.
        (JSC::timeToLive): Deleted.
        (JSC::CodeBlock::shouldJettisonDueToOldAge): Deleted.
        (JSC::shouldMarkTransition): Deleted.
        (JSC::CodeBlock::propagateTransitions): Deleted.
        (JSC::CodeBlock::determineLiveness): Deleted.
        (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted.
        (JSC::CodeBlock::clearLLIntGetByIdCache): Deleted.
        (JSC::CodeBlock::finalizeLLIntInlineCaches): Deleted.
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
        (JSC::CodeBlock::getStubInfoMap): Deleted.
        (JSC::CodeBlock::getCallLinkInfoMap): Deleted.
        (JSC::CodeBlock::getByValInfoMap): Deleted.
        (JSC::CodeBlock::addStubInfo): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::findStubInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        (JSC::CodeBlock::addCallLinkInfo): Deleted.
        (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex): Deleted.
        (JSC::CodeBlock::resetJITData): Deleted.
        (JSC::CodeBlock::visitOSRExitTargets): Deleted.
        (JSC::CodeBlock::stronglyVisitStrongReferences): Deleted.
        (JSC::CodeBlock::stronglyVisitWeakReferences): Deleted.
        (JSC::CodeBlock::baselineAlternative): Deleted.
        (JSC::CodeBlock::baselineVersion): Deleted.
        (JSC::CodeBlock::hasOptimizedReplacement): Deleted.
        (JSC::CodeBlock::handlerForBytecodeOffset): Deleted.
        (JSC::CodeBlock::handlerForIndex): Deleted.
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex): Deleted.
        (JSC::CodeBlock::removeExceptionHandlerForCallSite): Deleted.
        (JSC::CodeBlock::lineNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::columnNumberForBytecodeOffset): Deleted.
        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Deleted.
        (JSC::CodeBlock::hasOpDebugForLineAndColumn): Deleted.
        (JSC::CodeBlock::shrinkToFit): Deleted.
        (JSC::CodeBlock::linkIncomingCall): Deleted.
        (JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
        (JSC::CodeBlock::unlinkIncomingCalls): Deleted.
        (JSC::CodeBlock::newReplacement): Deleted.
        (JSC::CodeBlock::replacement): Deleted.
        (JSC::CodeBlock::computeCapabilityLevel): Deleted.
        (JSC::CodeBlock::jettison): Deleted.
        (JSC::CodeBlock::globalObjectFor): Deleted.
        (JSC::RecursionCheckFunctor::RecursionCheckFunctor): Deleted.
        (JSC::RecursionCheckFunctor::operator()): Deleted.
        (JSC::RecursionCheckFunctor::didRecurse): Deleted.
        (JSC::CodeBlock::noticeIncomingCall): Deleted.
        (JSC::CodeBlock::reoptimizationRetryCounter): Deleted.
        (JSC::CodeBlock::setCalleeSaveRegisters): Deleted.
        (JSC::roundCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::countReoptimization): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::codeTypeThresholdMultiplier): Deleted.
        (JSC::CodeBlock::optimizationThresholdScalingFactor): Deleted.
        (JSC::clipThreshold): Deleted.
        (JSC::CodeBlock::adjustedCounterValue): Deleted.
        (JSC::CodeBlock::checkIfOptimizationThresholdReached): Deleted.
        (JSC::CodeBlock::optimizeNextInvocation): Deleted.
        (JSC::CodeBlock::dontOptimizeAnytimeSoon): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::optimizeAfterLongWarmUp): Deleted.
        (JSC::CodeBlock::optimizeSoon): Deleted.
        (JSC::CodeBlock::forceOptimizationSlowPathConcurrently): Deleted.
        (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): Deleted.
        (JSC::CodeBlock::adjustedExitCountThreshold): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimization): Deleted.
        (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop): Deleted.
        (JSC::CodeBlock::shouldReoptimizeNow): Deleted.
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow): Deleted.
        (JSC::CodeBlock::getArrayProfile): Deleted.
        (JSC::CodeBlock::addArrayProfile): Deleted.
        (JSC::CodeBlock::getOrAddArrayProfile): Deleted.
        (JSC::CodeBlock::codeOrigins): Deleted.
        (JSC::CodeBlock::numberOfDFGIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::updateAllPredictionsAndCountLiveness): Deleted.
        (JSC::CodeBlock::updateAllValueProfilePredictions): Deleted.
        (JSC::CodeBlock::updateAllArrayPredictions): Deleted.
        (JSC::CodeBlock::updateAllPredictions): Deleted.
        (JSC::CodeBlock::shouldOptimizeNow): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::dumpValueProfiles): Deleted.
        (JSC::CodeBlock::frameRegisterCount): Deleted.
        (JSC::CodeBlock::stackPointerOffset): Deleted.
        (JSC::CodeBlock::predictedMachineCodeSize): Deleted.
        (JSC::CodeBlock::usesOpcode): Deleted.
        (JSC::CodeBlock::nameForRegister): Deleted.
        (JSC::CodeBlock::valueProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::validate): Deleted.
        (JSC::CodeBlock::beginValidationDidFail): Deleted.
        (JSC::CodeBlock::endValidationDidFail): Deleted.
        (JSC::CodeBlock::addBreakpoint): Deleted.
        (JSC::CodeBlock::setSteppingMode): Deleted.
        (JSC::CodeBlock::addRareCaseProfile): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForBytecodeOffset): Deleted.
        (JSC::CodeBlock::arithProfileForPC): Deleted.
        (JSC::CodeBlock::couldTakeSpecialFastCase): Deleted.
        (JSC::CodeBlock::capabilityLevel): Deleted.
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::findPC): Deleted.
        (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        (JSC::CodeBlock::jitSoon): Deleted.
        (JSC::CodeBlock::dumpMathICStats): Deleted.
        (JSC::CodeBlock::livenessAnalysisSlow): Deleted.
        * bytecode/WebAssemblyCodeBlock.h: Copied from Source/JavaScriptCore/bytecode/CodeBlock.h.
        (): Deleted.
        (JSC::CodeBlock::unlinkedCodeBlock): Deleted.
        (JSC::CodeBlock::numParameters): Deleted.
        (JSC::CodeBlock::numCalleeLocals): Deleted.
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::offsetOfNumParameters): Deleted.
        (JSC::CodeBlock::alternative): Deleted.
        (JSC::CodeBlock::forEachRelatedCodeBlock): Deleted.
        (JSC::CodeBlock::specializationKind): Deleted.
        (JSC::CodeBlock::isStrictMode): Deleted.
        (JSC::CodeBlock::ecmaMode): Deleted.
        (JSC::CodeBlock::isKnownNotImmediate): Deleted.
        (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted.
        (JSC::CodeBlock::stubInfoBegin): Deleted.
        (JSC::CodeBlock::stubInfoEnd): Deleted.
        (JSC::CodeBlock::callLinkInfosBegin): Deleted.
        (JSC::CodeBlock::callLinkInfosEnd): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::bytecodeOffset): Deleted.
        (JSC::CodeBlock::numberOfInstructions): Deleted.
        (JSC::CodeBlock::instructions): Deleted.
        (JSC::CodeBlock::instructionCount): Deleted.
        (JSC::CodeBlock::setJITCode): Deleted.
        (JSC::CodeBlock::jitCode): Deleted.
        (JSC::CodeBlock::jitCodeOffset): Deleted.
        (JSC::CodeBlock::jitType): Deleted.
        (JSC::CodeBlock::hasBaselineJITProfiling): Deleted.
        (JSC::CodeBlock::capabilityLevelState): Deleted.
        (JSC::CodeBlock::ownerExecutable): Deleted.
        (JSC::CodeBlock::ownerScriptExecutable): Deleted.
        (JSC::CodeBlock::vm): Deleted.
        (JSC::CodeBlock::setThisRegister): Deleted.
        (JSC::CodeBlock::thisRegister): Deleted.
        (JSC::CodeBlock::usesEval): Deleted.
        (JSC::CodeBlock::setScopeRegister): Deleted.
        (JSC::CodeBlock::scopeRegister): Deleted.
        (JSC::CodeBlock::codeType): Deleted.
        (JSC::CodeBlock::putByIdContext): Deleted.
        (JSC::CodeBlock::source): Deleted.
        (JSC::CodeBlock::sourceOffset): Deleted.
        (JSC::CodeBlock::firstLineColumnOffset): Deleted.
        (JSC::CodeBlock::numberOfJumpTargets): Deleted.
        (JSC::CodeBlock::jumpTarget): Deleted.
        (JSC::CodeBlock::numberOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfileForArgument): Deleted.
        (JSC::CodeBlock::numberOfValueProfiles): Deleted.
        (JSC::CodeBlock::valueProfile): Deleted.
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset): Deleted.
        (JSC::CodeBlock::totalNumberOfValueProfiles): Deleted.
        (JSC::CodeBlock::getFromAllValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        (JSC::CodeBlock::numberOfArrayProfiles): Deleted.
        (JSC::CodeBlock::arrayProfiles): Deleted.
        (JSC::CodeBlock::numberOfExceptionHandlers): Deleted.
        (JSC::CodeBlock::exceptionHandler): Deleted.
        (JSC::CodeBlock::hasExpressionInfo): Deleted.
        (JSC::CodeBlock::hasCodeOrigins): Deleted.
        (JSC::CodeBlock::canGetCodeOrigin): Deleted.
        (JSC::CodeBlock::codeOrigin): Deleted.
        (JSC::CodeBlock::addFrequentExitSite): Deleted.
        (JSC::CodeBlock::hasExitSite): Deleted.
        (JSC::CodeBlock::exitProfile): Deleted.
        (JSC::CodeBlock::lazyOperandValueProfiles): Deleted.
        (JSC::CodeBlock::numberOfIdentifiers): Deleted.
        (JSC::CodeBlock::identifier): Deleted.
        (JSC::CodeBlock::constants): Deleted.
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::addConstant): Deleted.
        (JSC::CodeBlock::addConstantLazily): Deleted.
        (JSC::CodeBlock::constantRegister): Deleted.
        (JSC::CodeBlock::isConstantRegisterIndex): Deleted.
        (JSC::CodeBlock::getConstant): Deleted.
        (JSC::CodeBlock::constantSourceCodeRepresentation): Deleted.
        (JSC::CodeBlock::functionDecl): Deleted.
        (JSC::CodeBlock::numberOfFunctionDecls): Deleted.
        (JSC::CodeBlock::functionExpr): Deleted.
        (JSC::CodeBlock::regexp): Deleted.
        (JSC::CodeBlock::numberOfConstantBuffers): Deleted.
        (JSC::CodeBlock::addConstantBuffer): Deleted.
        (JSC::CodeBlock::constantBufferAsVector): Deleted.
        (JSC::CodeBlock::constantBuffer): Deleted.
        (JSC::CodeBlock::heap): Deleted.
        (JSC::CodeBlock::globalObject): Deleted.
        (JSC::CodeBlock::livenessAnalysis): Deleted.
        (JSC::CodeBlock::numberOfSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTable): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::numberOfStringSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        (JSC::CodeBlock::evalCodeCache): Deleted.
        (JSC::CodeBlock::checkIfJITThresholdReached): Deleted.
        (JSC::CodeBlock::dontJITAnytimeSoon): Deleted.
        (JSC::CodeBlock::llintExecuteCounter): Deleted.
        (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted.
        (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): Deleted.
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecuteCounter): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold): Deleted.
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount): Deleted.
        (JSC::CodeBlock::jitExecuteCounter): Deleted.
        (JSC::CodeBlock::optimizationDelayCounter): Deleted.
        (JSC::CodeBlock::osrExitCounter): Deleted.
        (JSC::CodeBlock::countOSRExit): Deleted.
        (JSC::CodeBlock::addressOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::offsetOfOSRExitCounter): Deleted.
        (JSC::CodeBlock::calleeSaveRegisters): Deleted.
        (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): Deleted.
        (JSC::CodeBlock::optimizeAfterWarmUp): Deleted.
        (JSC::CodeBlock::numberOfDFGCompiles): Deleted.
        (JSC::CodeBlock::hasDebuggerRequests): Deleted.
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        (JSC::CodeBlock::removeBreakpoint): Deleted.
        (JSC::CodeBlock::clearDebuggerRequests): Deleted.
        (JSC::CodeBlock::wasCompiledWithDebuggingOpcodes): Deleted.
        (JSC::CodeBlock::clearExceptionHandlers): Deleted.
        (JSC::CodeBlock::appendExceptionHandler): Deleted.
        (JSC::CodeBlock::tallyFrequentExitSites): Deleted.
        (JSC::CodeBlock::replaceConstant): Deleted.
        (JSC::CodeBlock::timeSinceCreation): Deleted.
        (JSC::CodeBlock::createRareDataIfNecessary): Deleted.
        (JSC::GlobalCodeBlock::GlobalCodeBlock): Deleted.
        (JSC::ProgramCodeBlock::create): Deleted.
        (JSC::ProgramCodeBlock::createStructure): Deleted.
        (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted.
        (JSC::ModuleProgramCodeBlock::create): Deleted.
        (JSC::ModuleProgramCodeBlock::createStructure): Deleted.
        (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted.
        (JSC::EvalCodeBlock::create): Deleted.
        (JSC::EvalCodeBlock::createStructure): Deleted.
        (JSC::EvalCodeBlock::variable): Deleted.
        (JSC::EvalCodeBlock::numVariables): Deleted.
        (JSC::EvalCodeBlock::EvalCodeBlock): Deleted.
        (JSC::EvalCodeBlock::unlinkedEvalCodeBlock): Deleted.
        (JSC::FunctionCodeBlock::create): Deleted.
        (JSC::FunctionCodeBlock::createStructure): Deleted.
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Deleted.
        (JSC::ExecState::r): Deleted.
        (JSC::ExecState::uncheckedR): Deleted.
        (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted.
        (JSC::ScriptExecutable::forEachCodeBlock): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * dfg/DFGByteCodeParser.cpp:
        * interpreter/Interpreter.cpp:
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        * llint/LLIntSlowPaths.cpp:
        * runtime/CommonSlowPaths.h:
        * runtime/EvalExecutable.cpp:
        * runtime/ExecutableBase.cpp:
        * runtime/FunctionExecutable.cpp:
        * runtime/FunctionExecutableDump.cpp:
        * runtime/ModuleProgramExecutable.cpp:
        * runtime/ProgramExecutable.cpp:
        * runtime/ScriptExecutable.cpp:
        * runtime/ScriptExecutable.h:
        * runtime/TestRunnerUtils.cpp:
        * runtime/VM.cpp:
        * runtime/WebAssemblyExecutable.cpp:
        * tools/JSDollarVMPrototype.cpp:

2016-11-01  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move interfaces and typed arrays over to JSDOMConvert
        https://bugs.webkit.org/show_bug.cgi?id=164256

        Reviewed by Alex Christensen.

        * runtime/JSArrayBuffer.h:
        (JSC::JSArrayBuffer::toWrapped):
        Change return type to ArrayBuffer* to match WebCore's expectation.

2016-11-02  Filip Pizlo  <fpizlo@apple.com>

        The GC should be in a thread
        https://bugs.webkit.org/show_bug.cgi?id=163562

        Reviewed by Geoffrey Garen and Andreas Kling.
        
        In a concurrent GC, the work of collecting happens on a separate thread. This patch
        implements this, and schedules the thread the way that a concurrent GC thread would be
        scheduled. But, the GC isn't actually concurrent yet because it calls stopTheWorld() before
        doing anything and calls resumeTheWorld() after it's done with everything. The next step will
        be to make it really concurrent by basically calling stopTheWorld()/resumeTheWorld() around
        bounded snippets of work while making most of the work happen with the world running. Our GC
        will probably always have stop-the-world phases because the semantics of JSC weak references
        call for it.
        
        This implements concurrent GC scheduling. This means that there is no longer a
        Heap::collect() API. Instead, you can call collectAsync() which makes sure that a GC is
        scheduled (it will do nothing if one is scheduled or ongoing) or you can call collectSync()
        to schedule a GC and wait for it to happen. I made our debugging stuff call collectSync().
        It should be a goal to never call collectSync() except for debugging or benchmark harness
        hacks.
        
        The collector thread is an AutomaticThread, so it won't linger when not in use. It works on
        a ticket-based system, like you would see at the DMV. A ticket is a 64-bit integer. There are
        two ticket counters: last granted and last served. When you request a collection, last
        granted is incremented and its new value given to you. When a collection completes, last
        served is incremented. collectSync() waits until last served catches up to what last granted
        had been at the time you requested a GC. This means that if you request a sync GC in the
        middle of an async GC, you will wait for that async GC to finish and then you will request
        and wait for your sync GC.
        
        The synchronization between the collector thread and the main threads is complex. The
        collector thread needs to be able to ask the main thread to stop. It needs to be able to do
        some post-GC clean-up, like the synchronous CodeBlock and LargeAllocation sweeps, on the main
        thread. The collector needs to be able to ask the main thread to execute a cross-modifying
        code fence before running any JIT code, since the GC might aid the JIT worklist and run JIT
        finalization. It's possible for the GC to want the main thread to run something at the same
        time that the main thread wants to wait for the GC. The main thread needs to be able to run
        non-JSC stuff without causing the GC to completely stall. The main thread needs to be able
        to query its own state (is there a request to stop?) and change it (running JSC versus not)
        quickly, since this may happen on hot paths. This kind of intertwined system of requests,
        notifications, and state changes requires a combination of lock-free algorithms and waiting.
        So, this is all implemented using a Atomic<unsigned> Heap::m_worldState, which has bits to
        represent things being requested by the collector and the heap access state of the mutator. I
        am borrowing a lot of terms that I've seen in other VMs that I've worked on. Here's what they
        mean:
        
        - Stop the world: make sure that either the mutator is not running, or that it's not running
          code that could mess with the heap.
        
        - Heap access: the mutator is said to have heap access if it could mess with the heap.
        
        If you stop the world and the mutator doesn't have heap access, all you're doing is making
        sure that it will block when it tries to acquire heap access. This means that our GC is
        already fully concurrent in cases where the GC is requested while the mutator has no heap
        access. This probably won't happen, but if it did then it should just work. Usually, stopping
        the world means that we state our shouldStop request with m_worldState, and a future call
        to Heap::stopIfNecessary() will go to slow path and stop. The act of stopping or waiting to
        acquire heap access is managed by using ParkingLot API directly on m_worldState. This works
        out great because it would be very awkward to get the same functionality using locks and
        condition variables, since we want stopIfNecessary/acquireAccess/requestAccess fast paths
        that are single atomic instructions (load/CAS/CAS, respectively). The mutator will call these
        things frequently. Currently we have Heap::stopIfNecessary() polling on every allocator slow
        path, but we may want to make it even more frequent than that.
        
        Currently only JSC API clients benefit from the heap access optimization. The DOM forces us
        to assume that heap access is permanently on, since DOM manipulation doesn't always hold the
        JSLock. We could still allow the GC to proceed when the runloop is idle by having the GC put
        a task on the runloop that just calls stopIfNecessary().
        
        This is perf neutral. The only behavior change that clients ought to observe is that marking
        and the weak fixpoint happen on a separate thread. Marking was already parallel so it already
        handled multiple threads, but now it _never_ runs on the main thread. The weak fixpoint
        needed some help to be able to run on another thread - mostly because there was some code in
        IndexedDB that was using thread specifics in the weak fixpoint.

        * API/JSBase.cpp:
        (JSSynchronousEdenCollectForDebugging):
        * API/JSManagedValue.mm:
        (-[JSManagedValue initWithValue:]):
        * heap/EdenGCActivityCallback.cpp:
        (JSC::EdenGCActivityCallback::doCollection):
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        * heap/Heap.cpp:
        (JSC::Heap::Thread::Thread):
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::markRoots):
        (JSC::Heap::gatherStackRoots):
        (JSC::Heap::deleteUnmarkedCompiledCode):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::shouldCollectInThread):
        (JSC::Heap::collectInThread):
        (JSC::Heap::stopTheWorld):
        (JSC::Heap::resumeTheWorld):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::acquireAccessSlow):
        (JSC::Heap::releaseAccessSlow):
        (JSC::Heap::handleDidJIT):
        (JSC::Heap::handleNeedFinalize):
        (JSC::Heap::setDidJIT):
        (JSC::Heap::setNeedFinalize):
        (JSC::Heap::waitWhileNeedFinalize):
        (JSC::Heap::finalize):
        (JSC::Heap::requestCollection):
        (JSC::Heap::waitForCollection):
        (JSC::Heap::didFinishCollection):
        (JSC::Heap::canCollect):
        (JSC::Heap::shouldCollectHeuristic):
        (JSC::Heap::shouldCollect):
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::collectAccordingToDeferGCProbability):
        (JSC::Heap::collect): Deleted.
        (JSC::Heap::collectWithoutAnySweep): Deleted.
        (JSC::Heap::collectImpl): Deleted.
        * heap/Heap.h:
        (JSC::Heap::ReleaseAccessScope::ReleaseAccessScope):
        (JSC::Heap::ReleaseAccessScope::~ReleaseAccessScope):
        * heap/HeapInlines.h:
        (JSC::Heap::acquireAccess):
        (JSC::Heap::releaseAccess):
        (JSC::Heap::stopIfNecessary):
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::gatherConservativeRoots):
        (JSC::MachineThreads::gatherFromCurrentThread): Deleted.
        * heap/MachineStackMarker.h:
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::completeAllForVM):
        * jit/JITWorklist.h:
        * jsc.cpp:
        (functionFullGC):
        (functionEdenGC):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::willReleaseLock):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::JSDollarVMPrototype::edenGC):

2016-11-02  Michael Saboff  <msaboff@apple.com>

        Crash beneath SlotVisitor::drain @ cooksillustrated.com
        https://bugs.webkit.org/show_bug.cgi?id=164304

        Reviewed by Mark Lam.

        Added back write barrier for the base cell of put-by_id in the LLInt when the structure is
        changed.  Also removed the unused macro "storeStructureWithTypeInfo".

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2016-11-02  Keith Miller  <keith_miller@apple.com>

        We should not pop from an empty stack in the Wasm function parser.
        https://bugs.webkit.org/show_bug.cgi?id=164275

        Reviewed by Filip Pizlo.

        This patch prevents an issue in the wasm parser where we might
        accidentially pop from the expression stack without if there
        are no entries. It also fixes a similar issue with else
        blocks where a user might try to put an else on the top level
        of a function.

        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::popExpressionStack):
        * wasm/WasmValidate.cpp:
        (JSC::Wasm::Validate::setErrorMessage):

2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableByteStreamController
        https://bugs.webkit.org/show_bug.cgi?id=164014

        Reviewed by Youenn Fablet.

        Added flag for the byte stream part of Readable Streams API.

        * Configurations/FeatureDefines.xcconfig:

2016-11-02  Per Arne Vollan  <pvollan@apple.com>

        [Win] Copy build results to AAS 'Program Files' folder.
        https://bugs.webkit.org/show_bug.cgi?id=164273

        Reviewed by Brent Fulgham.

        The preferred location for the binaries is the AAS 'Program Files' folder.

        * JavaScriptCore.vcxproj/JavaScriptCore.proj:

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Remove CUSTOM_ELEMENTS build flag
        https://bugs.webkit.org/show_bug.cgi?id=164267

        Reviewed by Antti Koivisto.

        Removed the build flag.

        * Configurations/FeatureDefines.xcconfig:

2016-11-01  Keith Miller  <keith_miller@apple.com>

        Add a WASM function validator.
        https://bugs.webkit.org/show_bug.cgi?id=161707

        Reviewed by Saam Barati.

        This is a new template specialization of the Wasm FunctionParser class.  Instead of having
        the FunctionParser track what B3 values each stack entry refers to the validator has each
        entry refer to the type of the stack entry. Additionally, the control stack tracks what type
        of block the object is and what the result type of the block is. The validation functions
        for unary, binary, and memory operations are autogenerated by the
        generateWasmValidateInlinesHeader.py script.

        There are still a couple issue with validating that will be addressed in follow-up patches.
        1) We need to handle result types from basic blocks. https://bugs.webkit.org/show_bug.cgi?id=164100
        2) We need to handle popping things from stacks when they don't exist. https://bugs.webkit.org/show_bug.cgi?id=164275

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * testWasm.cpp:
        (runWasmTests):
        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmFormat.cpp: Added.
        (JSC::Wasm::toString):
        * wasm/WasmFormat.h:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::Plan):
        * wasm/WasmValidate.cpp: Added.
        (JSC::Wasm::Validate::ControlData::ControlData):
        (JSC::Wasm::Validate::ControlData::dump):
        (JSC::Wasm::Validate::ControlData::type):
        (JSC::Wasm::Validate::ControlData::signature):
        (JSC::Wasm::Validate::addConstant):
        (JSC::Wasm::Validate::isContinuationReachable):
        (JSC::Wasm::Validate::errorMessage):
        (JSC::Wasm::Validate::Validate):
        (JSC::Wasm::Validate::addArguments):
        (JSC::Wasm::Validate::addLocal):
        (JSC::Wasm::Validate::getLocal):
        (JSC::Wasm::Validate::setLocal):
        (JSC::Wasm::Validate::addBlock):
        (JSC::Wasm::Validate::addLoop):
        (JSC::Wasm::Validate::addIf):
        (JSC::Wasm::Validate::addElse):
        (JSC::Wasm::Validate::addReturn):
        (JSC::Wasm::Validate::addBranch):
        (JSC::Wasm::Validate::endBlock):
        (JSC::Wasm::Validate::addCall):
        (JSC::Wasm::Validate::unify):
        (JSC::Wasm::Validate::dump):
        (JSC::Wasm::validateFunction):
        * wasm/WasmValidate.h: Added.
        * wasm/generateWasmValidateInlinesHeader.py: Added.
        (cppType):
        (toCpp):
        (unaryMacro):
        (binaryMacro):
        (loadMacro):
        (storeMacro):

2016-11-01  Saam Barati  <sbarati@apple.com>

        We should be able to eliminate rest parameter allocations
        https://bugs.webkit.org/show_bug.cgi?id=163925

        Reviewed by Filip Pizlo.

        This is the first step towards eliminating rest parameter
        allocations when they're spread to other function calls:
        `function foo(...args) { bar(...args); }`
        
        This patch simply removes the allocation for rest parameter
        allocations using the same escape analysis that is performed
        in the argument elimination phase. I've added a new rule to
        the phase to make sure that CheckStructure doesn't count as
        an escape for an allocation since this often shows up in code
        like this:
        
        ```
        function foo(...args) {
            let r = [];
            for (let i = 0; i < args.length; i++)
                r.push(args[i]);
            return r;
        }
        ```
        
        The above program now entirely eliminates the allocation for args
        compiled in the FTL. Programs like this also eliminate the allocation
        for args:
        
        ```
        function foo(...args) { return [args.length, args[0]]; }
        
        function bar(...args) { return someOtherFunction.apply(null, args); }
        ```
        
        This patch extends the arguments elimination phase to understand
        the concept that we may want to forward arguments, or get from
        the arguments region, starting at some offset. The offset is the
        number of names parameter before the rest parameter. For example:
        
        ```
        function foo(a, b, ...args) { return bar.apply(null, args); }
        ```
        
        Will forward arguments starting at the *third* argument.
        Our arguments forwarding code already had the notion of starting
        from some offset, however, I found bugs in that code. I extended
        it to work properly for rest parameters with arbitrary skip offsets.
        
        And this program:
        ```
        function foo(...args) {
            let r = [];
            for (let i = 0; i < args.length; i++)
                r.push(args[i]);
            return r;
        }
        ```
        
        Knows to perform the GetMyArgumentByVal* with an offset of 3
        inside the loop. To make this work, I taught GetMyArgumentByVal 
        and GetMyArgumentByValOutOfBounds to take an offset representing
        the number of arguments to skip.
        
        This patch is a ~20% speedup on microbenchmarks.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGArgumentsUtilities.cpp:
        (JSC::DFG::emitCodeToGetArgumentsArrayLength):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::constant):
        (JSC::DFG::Node::isPhantomAllocation):
        (JSC::DFG::Node::numberOfArgumentsToSkip):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOperations.cpp:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCreateRest):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsStart):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * jit/SetupVarargsFrame.cpp:
        (JSC::emitSetVarargsFrame):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::restParameterStructure):

2016-11-01  Geoffrey Garen  <ggaren@apple.com>

        Lots of stderr logging in JSManagedValue
        https://bugs.webkit.org/show_bug.cgi?id=164279
        <rdar://problem/28949886>

        Reviewed by Filip Pizlo.

        Revert an accidental change in <https://trac.webkit.org/changeset/205462>.

        * API/JSManagedValue.mm:
        (-[JSManagedValue initWithValue:]):

2016-11-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r208208 and r208210.
        https://bugs.webkit.org/show_bug.cgi?id=164276

        This change caused 28 JSC test failures. (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "We should be able to eliminate rest parameter allocations"
        https://bugs.webkit.org/show_bug.cgi?id=163925
        http://trac.webkit.org/changeset/208208

        "Fix the EFL build."
        http://trac.webkit.org/changeset/208210

2016-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: Add the support for custom elements
        https://bugs.webkit.org/show_bug.cgi?id=164266
        <rdar://problem/29038883>

        Reviewed by Joseph Pecoraro.

        Added customElementState of type CustomElementState to reflect the custom element state on each DOM node
        along with customElementStateChanged which fires when the custom element state changes.

        * inspector/protocol/DOM.json:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Fix the EFL build.

        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationMaterializeObjectInOSR):

2016-10-29  Filip Pizlo  <fpizlo@apple.com>

        JSC should support SharedArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=163986

        Reviewed by Keith Miller.
        
        This implements https://tc39.github.io/ecmascript_sharedmem/shmem.html.
        
        There is now a new SharedArrayBuffer type. In the JS runtime, which includes typed array
        types, the SharedArrayBuffer is a drop-in replacement for ArrayBuffer, even though they are
        distinct types (new SharedArrayBuffer() instanceof ArrayBuffer == false and vice versa). The
        DOM will not recognize SharedArrayBuffer, or any typed array that wraps it, to ensure safety.
        This matches what other browsers intend to do, see
        https://github.com/tc39/ecmascript_sharedmem/issues/38. API is provided for the DOM to opt
        into SharedArrayBuffer. One notable place is postMessage, which will share the
        SharedArrayBuffer's underlying data storage with other workers. This creates a pool of shared
        memory that the workers can use to talk to each other.
        
        There is also an Atomics object in global scope, which exposes sequentially consistent atomic
        operations: add, and, compareExchange, exchange, load, or, store, sub, and xor. Additionally
        it exposes a Atomics.isLockFree utility, which takes a byte amount and returns true or false.
        Also there is Atomics.wake/wait, which neatly map to ParkingLot.
        
        Accesses to typed arrays that wrap SharedArrayBuffer are optimized by JSC the same way as
        always. I believe that DFG and B3 already obey the following memory model, which I believe is
        a bit weaker than Cambridge and a bit stronger than what is being proposed for
        SharedArrayBuffer. To predict a program's behavior under the B3 memory model, imagine the
        space of all possible programs that would result from running an optimizer that adversarially
        follows B3's transformation rules. B3 transformations are correct if the newly created
        program is equivalent to the old one, assuming that any opaque effect in IR (like the reads
        and writes of a patchpoint/call/fence) could perform any load/store that satisfies the
        B3::Effects summary. Opaque effects are a way of describing an infinite set of programs: any
        program that only does the effects summarized in B3::Effects belongs to the set. For example,
        this prevents motion of operations across fences since fences are summarized as opaque
        effects that could read or write memory. This rule alone is not enough, because it leaves the
        door open for turning an atomic operation (like a load) into a non-atomic one (like a load
        followed by a store of the same value back to the same location or multiple loads). This is
        not an optimization that either our compiler or the CPU would want to do. One way to think of
        what exactly is forbidden is that B3 transformations that mess with memory accesses can only
        reorder them or remove them. This means that for any execution of the untransformed program,
        the corresponding execution of the transformed program (i.e. with the same input arguments
        and the same programs filled in for the opaque effects) must have the same loads and stores,
        with some removed and some reordered. This is a fairly simple mental model that B3 and DFG
        already follow and it's based on existing abstractions for the infinite set of programs
        inside an opaque effect (DFG's AbstractHeaps and B3's Effects).
        
        This patch makes all atomics operations intrinsic, but the DFG doesn't know about any of them
        yet. That's covered by bug 164108.
        
        This ought to be perf-neutral, but I am still running tests to confirm this. I'm also still
        writing new tests to cover all of the Atomics functionality and the behavior of SAB objects.

        * API/JSTypedArray.cpp:
        (JSObjectGetTypedArrayBytesPtr):
        (JSObjectGetTypedArrayBuffer):
        (JSObjectMakeArrayBufferWithBytesNoCopy):
        * API/tests/CompareAndSwapTest.cpp:
        (Bitmap::concurrentTestAndSet):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
        * heap/Heap.cpp:
        (JSC::Heap::reportExtraMemoryVisited):
        (JSC::Heap::reportExternalMemoryVisited):
        * jsc.cpp:
        (functionTransferArrayBuffer):
        * runtime/ArrayBuffer.cpp:
        (JSC::SharedArrayBufferContents::SharedArrayBufferContents):
        (JSC::SharedArrayBufferContents::~SharedArrayBufferContents):
        (JSC::ArrayBufferContents::ArrayBufferContents):
        (JSC::ArrayBufferContents::operator=):
        (JSC::ArrayBufferContents::~ArrayBufferContents):
        (JSC::ArrayBufferContents::clear):
        (JSC::ArrayBufferContents::destroy):
        (JSC::ArrayBufferContents::reset):
        (JSC::ArrayBufferContents::tryAllocate):
        (JSC::ArrayBufferContents::makeShared):
        (JSC::ArrayBufferContents::transferTo):
        (JSC::ArrayBufferContents::copyTo):
        (JSC::ArrayBufferContents::shareWith):
        (JSC::ArrayBuffer::create):
        (JSC::ArrayBuffer::createAdopted):
        (JSC::ArrayBuffer::createFromBytes):
        (JSC::ArrayBuffer::tryCreate):
        (JSC::ArrayBuffer::createUninitialized):
        (JSC::ArrayBuffer::tryCreateUninitialized):
        (JSC::ArrayBuffer::createInternal):
        (JSC::ArrayBuffer::ArrayBuffer):
        (JSC::ArrayBuffer::slice):
        (JSC::ArrayBuffer::sliceImpl):
        (JSC::ArrayBuffer::makeShared):
        (JSC::ArrayBuffer::setSharingMode):
        (JSC::ArrayBuffer::transferTo):
        (JSC::ArrayBuffer::transfer): Deleted.
        * runtime/ArrayBuffer.h:
        (JSC::arrayBufferSharingModeName):
        (JSC::SharedArrayBufferContents::data):
        (JSC::ArrayBufferContents::data):
        (JSC::ArrayBufferContents::sizeInBytes):
        (JSC::ArrayBufferContents::isShared):
        (JSC::ArrayBuffer::sharingMode):
        (JSC::ArrayBuffer::isShared):
        (JSC::ArrayBuffer::gcSizeEstimateInBytes):
        (JSC::arrayBufferDestructorNull): Deleted.
        (JSC::arrayBufferDestructorDefault): Deleted.
        (JSC::ArrayBufferContents::ArrayBufferContents): Deleted.
        (JSC::ArrayBufferContents::transfer): Deleted.
        (JSC::ArrayBufferContents::copyTo): Deleted.
        (JSC::ArrayBuffer::create): Deleted.
        (JSC::ArrayBuffer::createAdopted): Deleted.
        (JSC::ArrayBuffer::createFromBytes): Deleted.
        (JSC::ArrayBuffer::tryCreate): Deleted.
        (JSC::ArrayBuffer::createUninitialized): Deleted.
        (JSC::ArrayBuffer::tryCreateUninitialized): Deleted.
        (JSC::ArrayBuffer::createInternal): Deleted.
        (JSC::ArrayBuffer::ArrayBuffer): Deleted.
        (JSC::ArrayBuffer::slice): Deleted.
        (JSC::ArrayBuffer::sliceImpl): Deleted.
        (JSC::ArrayBufferContents::tryAllocate): Deleted.
        (JSC::ArrayBufferContents::~ArrayBufferContents): Deleted.
        * runtime/ArrayBufferSharingMode.h: Added.
        * runtime/ArrayBufferView.h:
        (JSC::ArrayBufferView::possiblySharedBuffer):
        (JSC::ArrayBufferView::unsharedBuffer):
        (JSC::ArrayBufferView::isShared):
        (JSC::ArrayBufferView::buffer): Deleted.
        * runtime/AtomicsObject.cpp: Added.
        (JSC::AtomicsObject::AtomicsObject):
        (JSC::AtomicsObject::create):
        (JSC::AtomicsObject::createStructure):
        (JSC::AtomicsObject::finishCreation):
        (JSC::atomicsFuncAdd):
        (JSC::atomicsFuncAnd):
        (JSC::atomicsFuncCompareExchange):
        (JSC::atomicsFuncExchange):
        (JSC::atomicsFuncIsLockFree):
        (JSC::atomicsFuncLoad):
        (JSC::atomicsFuncOr):
        (JSC::atomicsFuncStore):
        (JSC::atomicsFuncSub):
        (JSC::atomicsFuncWait):
        (JSC::atomicsFuncWake):
        (JSC::atomicsFuncXor):
        * runtime/AtomicsObject.h: Added.
        * runtime/CommonIdentifiers.h:
        * runtime/DataView.cpp:
        (JSC::DataView::wrap):
        * runtime/GenericTypedArrayViewInlines.h:
        (JSC::GenericTypedArrayView<Adaptor>::subarray):
        * runtime/Intrinsic.h:
        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::finishCreation):
        (JSC::JSArrayBuffer::isShared):
        (JSC::JSArrayBuffer::sharingMode):
        * runtime/JSArrayBuffer.h:
        (JSC::toPossiblySharedArrayBuffer):
        (JSC::toUnsharedArrayBuffer):
        (JSC::JSArrayBuffer::toWrapped):
        (JSC::toArrayBuffer): Deleted.
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSArrayBufferConstructor::JSArrayBufferConstructor):
        (JSC::JSArrayBufferConstructor::finishCreation):
        (JSC::JSArrayBufferConstructor::create):
        (JSC::constructArrayBuffer):
        * runtime/JSArrayBufferConstructor.h:
        (JSC::JSArrayBufferConstructor::sharingMode):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):
        (JSC::JSArrayBufferPrototype::JSArrayBufferPrototype):
        (JSC::JSArrayBufferPrototype::finishCreation):
        (JSC::JSArrayBufferPrototype::create):
        * runtime/JSArrayBufferPrototype.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::finishCreation):
        (JSC::JSArrayBufferView::visitChildren):
        (JSC::JSArrayBufferView::unsharedBuffer):
        (JSC::JSArrayBufferView::unsharedJSBuffer):
        (JSC::JSArrayBufferView::possiblySharedJSBuffer):
        (JSC::JSArrayBufferView::neuter):
        (JSC::JSArrayBufferView::toWrapped): Deleted.
        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::jsBuffer): Deleted.
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::isShared):
        (JSC::JSArrayBufferView::possiblySharedBuffer):
        (JSC::JSArrayBufferView::possiblySharedImpl):
        (JSC::JSArrayBufferView::unsharedImpl):
        (JSC::JSArrayBufferView::byteOffset):
        (JSC::JSArrayBufferView::toWrapped):
        (JSC::JSArrayBufferView::buffer): Deleted.
        (JSC::JSArrayBufferView::impl): Deleted.
        (JSC::JSArrayBufferView::neuter): Deleted.
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::possiblySharedTypedImpl):
        (JSC::JSDataView::unsharedTypedImpl):
        (JSC::JSDataView::getTypedArrayImpl):
        (JSC::JSDataView::typedImpl): Deleted.
        * runtime/JSDataView.h:
        (JSC::JSDataView::possiblySharedBuffer):
        (JSC::JSDataView::unsharedBuffer):
        (JSC::JSDataView::buffer): Deleted.
        * runtime/JSDataViewPrototype.cpp:
        (JSC::dataViewProtoGetterBuffer):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::toPossiblySharedNativeTypedView):
        (JSC::toUnsharedNativeTypedView):
        (JSC::JSGenericTypedArrayView<Adaptor>::toWrapped):
        (JSC::JSGenericTypedArrayView::typedImpl): Deleted.
        (JSC::toNativeTypedView): Deleted.
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::create):
        (JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::getTypedArrayImpl):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoGetterFuncBuffer):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.cpp:
        (JSC::createAtomicsProperty):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arrayBufferPrototype):
        (JSC::JSGlobalObject::arrayBufferStructure):
        * runtime/MathObject.cpp:
        * runtime/RuntimeFlags.h:
        * runtime/SimpleTypedArrayController.cpp:
        (JSC::SimpleTypedArrayController::toJS):
        * runtime/TypedArrayType.h:
        (JSC::typedArrayTypeForType):

2016-10-31  Saam Barati  <sbarati@apple.com>

        We should be able to eliminate rest parameter allocations
        https://bugs.webkit.org/show_bug.cgi?id=163925

        Reviewed by Filip Pizlo.

        This is the first step towards eliminating rest parameter
        allocations when they're spread to other function calls:
        `function foo(...args) { bar(...args); }`
        
        This patch simply removes the allocation for rest parameter
        allocations using the same escape analysis that is performed
        in the argument elimination phase. I've added a new rule to
        the phase to make sure that CheckStructure doesn't count as
        an escape for an allocation since this often shows up in code
        like this:
        
        ```
        function foo(...args) {
            let r = [];
            for (let i = 0; i < args.length; i++)
                r.push(args[i]);
            return r;
        }
        ```
        
        The above program now entirely eliminates the allocation for args
        compiled in the FTL. Programs like this also eliminate the allocation
        for args:
        
        ```
        function foo(...args) { return [args.length, args[0]]; }
        
        function bar(...args) { return someOtherFunction.apply(null, args); }
        ```
        
        This patch extends the arguments elimination phase to understand
        the concept that we may want to forward arguments, or get from
        the arguments region, starting at some offset. The offset is the
        number of names parameter before the rest parameter. For example:
        
        ```
        function foo(a, b, ...args) { return bar.apply(null, args); }
        ```
        
        Will forward arguments starting at the *third* argument.
        Our arguments forwarding code already had the notion of starting
        from some offset, however, I found bugs in that code. I extended
        it to work properly for rest parameters with arbitrary skip offsets.
        
        And this program:
        ```
        function foo(...args) {
            let r = [];
            for (let i = 0; i < args.length; i++)
                r.push(args[i]);
            return r;
        }
        ```
        
        Knows to perform the GetMyArgumentByVal* with an offset of 3
        inside the loop. To make this work, I taught GetMyArgumentByVal 
        and GetMyArgumentByValOutOfBounds to take an offset representing
        the number of arguments to skip.
        
        This patch is a ~20% speedup on microbenchmarks.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGArgumentsUtilities.cpp:
        (JSC::DFG::emitCodeToGetArgumentsArrayLength):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::constant):
        (JSC::DFG::Node::isPhantomAllocation):
        (JSC::DFG::Node::numberOfArgumentsToSkip):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOperations.cpp:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCreateRest):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureRegistrationPhase.cpp:
        (JSC::DFG::StructureRegistrationPhase::run):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsStart):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * jit/SetupVarargsFrame.cpp:
        (JSC::emitSetVarargsFrame):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::restParameterStructure):

2016-10-31  Mark Lam  <mark.lam@apple.com>

        Add $vm.codeBlockFor() debugging utility.
        https://bugs.webkit.org/show_bug.cgi?id=164192

        Reviewed by Saam Barati.

        Sometimes, while debugging, it would be nice if we can get the codeBlock info for
        a function.  Amongst other uses, this is useful for checking what optimization
        level the function is currently at.  With $vm.codeBlockFor(), we can now do this.
        For example, when JS_useDollarVM=true:

            print("test's codeBlock = " + $vm.codeBlockFor(test)); // prints function test's codeBlock.

        Also added some comments to clarify some pre-existing code.

        * tools/JSDollarVMPrototype.cpp:
        (JSC::functionCodeBlockForFrame):
        (JSC::codeBlockFromArg):
        (JSC::functionCodeBlockFor):
        (JSC::JSDollarVMPrototype::finishCreation):

2016-10-31  Saam Barati  <sbarati@apple.com>

        GetByOffset rule is has incorrect assumptions inside arguments elimination phase
        https://bugs.webkit.org/show_bug.cgi?id=164239
        <rdar://problem/29032041>

        Reviewed by Keith Miller.

        The rule for GetByOffset assumes that a child will always be transformed before 
        the user of a child is by assuming its child will already be a phantom allocation.
        This will almost certainly be true because of how we generate bytecode for
        arguments allocation and how traversal of the graph works using blocksInNaturalOrder.
        However, there is no guarantee that blocksInNaturalOrder must first traverse a
        block's dominator before the block being dominated. Since it's unlikely that this
        bug will ever be seen by real code, this fix is mostly for maintaining good hygiene.

        * dfg/DFGArgumentsEliminationPhase.cpp:

2016-10-31  Simon Fraser  <simon.fraser@apple.com>

        Implement IntersectionObserver
        https://bugs.webkit.org/show_bug.cgi?id=159475

        Reviewed by Ryosuke Niwa.

        Add ENABLE_INTERSECTION_OBSERVER, enabled by default.

        * Configurations/FeatureDefines.xcconfig:

2016-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide an opportunity to clear ScriptValues associated with debugged target
        https://bugs.webkit.org/show_bug.cgi?id=164167
        <rdar://problem/29010148>

        Reviewed by Mark Lam.

        * inspector/InspectorAgentBase.h:
        (Inspector::InspectorAgentBase::discardValues):
        * inspector/InspectorAgentRegistry.cpp:
        (Inspector::AgentRegistry::~AgentRegistry):
        (Inspector::AgentRegistry::discardValues):
        * inspector/InspectorAgentRegistry.h:
        New standard agent method to allow the agent to discard values.

        * inspector/agents/InspectorConsoleAgent.h:
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::discardValues):
        Discard ScriptValues in ConsoleMessages.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::globalObjectDestroyed):
        Global object is going away, discard values.

2016-10-31  Keith Miller  <keith_miller@apple.com>

        autogenerated files from wasm.json should be in derived sources.
        https://bugs.webkit.org/show_bug.cgi?id=164152

        Reviewed by Filip Pizlo.

        Add two new python scripts to the build. These scripts do what the
        old js script in JSTests did. Previously, changes to wasm.json needed
        to be manually reflected in WasmOps.h. This patch will auto-build from
        the json file. That system was unsustainable, especially as future patches
        will likely add more autogenerated files. The generated header files are
        identical other than the comment at the top and the order of the opcodes.
        I believe ordering difference just has to do with the iteration order for
        sets.

        * DerivedSources.make:
        * wasm/WasmOps.h: Removed.
        * wasm/generateWasm.py: Added.
        (Wasm):
        (Wasm.__init__):
        (opcodeIterator):
        (toCpp):
        (isNormal):
        (isUnary):
        (isBinary):
        * wasm/generateWasmOpsHeader.py: Added.
        (cppMacro):
        (opcodeMacroizer):
        (ceilDiv):
        (bitSet):
        (BinaryOpType):
        (UnaryOpType):
        (LoadOpType):
        (StoreOpType):
        * wasm/wasm.json: Added.

2016-10-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] JSON.stringify should handle Proxy which is non JSArray but isArray is true
        https://bugs.webkit.org/show_bug.cgi?id=164123

        Reviewed by Mark Lam.

        When JSON.stringify encounter the undefined value, the result depends
        on the context. If it is produced under the object property context, we ignore
        that property. On the other hand, if it is produced under the array element
        context, we produce "null".

        For example,
            // https://tc39.github.io/ecma262/#sec-serializejsonobject section 8.b.
            // Skip the property that value is undefined.
            JSON.stringify({ value: undefined });  // => "{}"

            // https://tc39.github.io/ecma262/#sec-serializejsonarray section 8.b.
            // Write "null" when the element is undefined.
            JSON.stringify([undefined]);           // => "[null]"

        At that time, we decide the context based on the `holder->inherits(JSArray::info())`.
        But it is not correct since we have a holder that creates the array element context
        but it is not JSArray subtype. ES6 Proxy to an array is one example. In that case,
        `isArray(exec, proxy)` returns `true`, but `inherits(JSArray::info())` returns false.
        Since we already have this `isArray()` value in Stringifier::Holder, we should reuse
        this here. And this is the correct behavior in the ES6 spec.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::isArray):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::Holder):
        (JSC::Stringifier::Holder::appendNextProperty):

2016-10-29  Saam Barati  <sbarati@apple.com>

        We should have a way of profiling when a get_by_id is pure and to emit a PureGetById in the DFG/FTL
        https://bugs.webkit.org/show_bug.cgi?id=163305

        Reviewed by Keith Miller.

        This creates a new GetById node in the DFG called PureGetById. We emit a
        PureGetById when we profile that a get_by_id in the baseline never does
        side effects. PureGetById speculates on the fact that it won't do side
        effects. If it realizes that it must perform side effects, it will perform
        the side effect, but also invalidate the CodeBlock that compiled it,
        which will cause us to exit once we return back to the compiled code.
        This allows us to have stricter clobberize rules for PureGetById which
        model how getOwnPropertySlot(VMInquiry) behaves. This means that PureGetByIds
        can be CSEd with each other, and that other things are more likely to
        be CSEd around a PureGetById. To profile if a get_by_id does side
        effects, I've added an extra bit into StructureStubInfo that we write
        to when performing a get_by_id slow path call. If we notice that we
        never do effects, inside the ByteCodeParser, we will emit a PureGetById
        instead of a GetById.

        To justify the performance benefit of this patch, I ran the suite of
        benchmarks with useAccessInlining=false. This meant that we don't compile
        any (Multi)GetByOffset/(Multi)PutByOffset. This was just to try to see if
        this patch is worth anything at all in a world where we emit many
        PureGetByIds. Running the benchmarks under this mode showed a 3.5% octane
        improvement and a 15% kraken improvement. However, when running benchmarks
        with useAccessInlining=true (the default JSC state), this patch is neutral.
        I think the main reason for this is that the DFG is good at knowing when to
        emit (Multi)GetByOffset, and most benchmarks that would benefit from
        PureGetById are already emitting (Multi)GetByOffset. However, PureGetById can be
        profitable when we encounter code that is too polymorphic for (Multi)GetByOffset.
        It's reasonable to expect that JS code in the wild will fall into this use
        case even though it might not be represented in some of the major JS benchmarks.
        I wrote some microbenchmarks to demonstrate the benefits of PureGetById CSE,
        and they were 30% (eliminating a few PureGetById from an add expression)
        to 10x faster (eliminating a PureGetById in a loop).

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::canBecomeGetArrayLength):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToGetByOffset):
        (JSC::DFG::Node::convertToMultiGetByOffset):
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileTryGetById):
        (JSC::DFG::SpeculativeJIT::compilePureGetById):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetById):
        (JSC::FTL::DFG::LowerDFGToB3::getById):
        * jit/JITOperations.cpp:
        (JSC::pureGetByIdCommon):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_try_get_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_try_get_by_id):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByIdFunction):
        (JSC::appropriateGenericGetByIdFunction):
        (JSC::tryCacheGetByID):
        * jit/Repatch.h:
        * profiler/ProfilerJettisonReason.cpp:
        (WTF::printInternal):
        * profiler/ProfilerJettisonReason.h:

2016-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints not working in scripts with unicode characters
        https://bugs.webkit.org/show_bug.cgi?id=164172
        <rdar://problem/28895862>

        Reviewed by Ryosuke Niwa.

        * parser/Parser.h:
        (JSC::parse):
        Ensure we pass the debuggerParseData struct to get populated in the
        non 8bit string case!

2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Include identifier name in CallDOMGetter to dump it
        https://bugs.webkit.org/show_bug.cgi?id=164161

        Reviewed by Mark Lam.

        This patch adds an identifier number to CallDOMGetterData and use it when dumping the data.
        CallDOMGetter did not include identifier. It made CallDOMGetter super hard to debug when dumping DFG graph.

        The dump becomes like this.

            CallDOMGetter(Cell:@21, JS|MustGen|UseAsOther, Nonboolint32, id0{customGetter}, domJIT = 0x42f8a0, R:World, W:Heap, Exits, ClobbersExit, bc#15)  predicting Nonboolint32

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::ByteCodeParser::handleGetById):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGNode.h:

2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Rename CallDOM to CallDOMGetter
        https://bugs.webkit.org/show_bug.cgi?id=164157

        Reviewed by Keith Miller.

        Rename CallDOM to CallDOMGetter to represent that
        this is used for DOMJIT getter explicitly.
        CallDOM will be used for DOM functions (like element.getAttribute()) later.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::emitDOMJITGetter):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::blessCallDOMGetter):
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::blessCallDOM): Deleted.
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasCallDOMGetterData):
        (JSC::DFG::Node::callDOMGetterData):
        (JSC::DFG::Node::hasCallDOMData): Deleted.
        (JSC::DFG::Node::callDOMData): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOMGetter):
        (JSC::DFG::SpeculativeJIT::compileCallDOM): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * domjit/DOMJITCallDOMGetterPatchpoint.h: Renamed from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (JSC::DOMJIT::CallDOMGetterPatchpoint::create):
        * domjit/DOMJITGetterSetter.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): Deleted.
        * jsc.cpp:

2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix in CLoop builds after r208063.

        Include required headers.

        * parser/Parser.h:
        * runtime/Completion.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:

2016-10-28  Ryan Haddad  <ryanhaddad@apple.com>

        Update reference files for builtins generator tests after r208063.

        Unreviewed test gardening.

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:

2016-10-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add wasm/js directory to JSC include directories in CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=164145

        Reviewed by Michael Catanzaro.

        Attempt to fix CMake ports. We include a file under wasm/js.
        But we didn't add it to JSC include directories.

        * CMakeLists.txt:

2016-10-27  Geoffrey Garen  <ggaren@apple.com>

        One file per class for Executable.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=164099

        Reviewed by Saam Barati.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/builtins/builtins_generate_combined_implementation.py:
        (BuiltinsCombinedImplementationGenerator.generate_secondary_header_includes):
        * Scripts/builtins/builtins_generate_separate_implementation.py:
        (BuiltinsSeparateImplementationGenerator.generate_secondary_header_includes):
        * builtins/BuiltinExecutables.cpp:
        * bytecode/CallVariant.h:
        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        (JSC::ScriptExecutable::prepareForExecution):
        * bytecode/CodeOrigin.cpp:
        * bytecode/EvalCodeCache.h:
        * bytecode/InlineCallFrame.cpp:
        * bytecode/UnlinkedCodeBlock.cpp:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        * bytecompiler/StaticPropertyAnalysis.h:
        * debugger/DebuggerLocation.cpp:
        * dfg/DFGCapabilities.h:
        * dfg/DFGOSRExitPreparation.cpp:
        * dfg/DFGToFTLDeferredCompilationCallback.cpp:
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:
        * interpreter/StackVisitor.cpp:
        * jit/JITThunks.cpp:
        * jit/JITToDFGDeferredCompilationCallback.cpp:
        * jit/SpecializedThunkJIT.h:
        * llint/LLIntOffsetsExtractor.cpp:
        * parser/Parser.h:
        * runtime/CallData.cpp:
        * runtime/ConstructData.cpp:
        * runtime/EvalExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/EvalExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/Executable.cpp: Removed.
        * runtime/Executable.h: Removed.
        * runtime/ExecutableBase.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/ExecutableBase.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/FunctionExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/FunctionExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/FunctionExecutableDump.h:
        * runtime/JSArray.cpp:
        * runtime/JSFunctionInlines.h:
        * runtime/JSModuleRecord.cpp:
        * runtime/JSObject.cpp:
        * runtime/Lookup.cpp:
        * runtime/ModuleProgramExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/ModuleProgramExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/NativeExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/NativeExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/ProgramExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/ProgramExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/SamplingProfiler.cpp:
        * runtime/ScriptExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable): Deleted.
        (JSC::WebAssemblyExecutable::destroy): Deleted.
        (JSC::WebAssemblyExecutable::visitChildren): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        * runtime/ScriptExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (): Deleted.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.
        * runtime/StringConstructor.cpp:
        * runtime/StringPrototype.cpp:
        * runtime/WebAssemblyExecutable.cpp: Copied from Source/JavaScriptCore/runtime/Executable.cpp.
        (JSC::ExecutableBase::destroy): Deleted.
        (JSC::ExecutableBase::clearCode): Deleted.
        (JSC::NativeExecutable::create): Deleted.
        (JSC::NativeExecutable::destroy): Deleted.
        (JSC::NativeExecutable::createStructure): Deleted.
        (JSC::NativeExecutable::finishCreation): Deleted.
        (JSC::NativeExecutable::NativeExecutable): Deleted.
        (JSC::ScriptExecutable::ScriptExecutable): Deleted.
        (JSC::ScriptExecutable::destroy): Deleted.
        (JSC::ScriptExecutable::installCode): Deleted.
        (JSC::ScriptExecutable::newCodeBlockFor): Deleted.
        (JSC::ScriptExecutable::newReplacementCodeBlockFor): Deleted.
        (JSC::setupLLInt): Deleted.
        (JSC::setupJIT): Deleted.
        (JSC::ScriptExecutable::prepareForExecutionImpl): Deleted.
        (JSC::EvalExecutable::create): Deleted.
        (JSC::EvalExecutable::EvalExecutable): Deleted.
        (JSC::EvalExecutable::destroy): Deleted.
        (JSC::ProgramExecutable::ProgramExecutable): Deleted.
        (JSC::ProgramExecutable::destroy): Deleted.
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable): Deleted.
        (JSC::ModuleProgramExecutable::create): Deleted.
        (JSC::ModuleProgramExecutable::destroy): Deleted.
        (JSC::FunctionExecutable::FunctionExecutable): Deleted.
        (JSC::FunctionExecutable::finishCreation): Deleted.
        (JSC::FunctionExecutable::destroy): Deleted.
        (JSC::samplingDescription): Deleted.
        (JSC::EvalExecutable::visitChildren): Deleted.
        (JSC::ProgramExecutable::checkSyntax): Deleted.
        (JSC::ProgramExecutable::initializeGlobalProperties): Deleted.
        (JSC::ProgramExecutable::visitChildren): Deleted.
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::baselineCodeBlockFor): Deleted.
        (JSC::FunctionExecutable::visitChildren): Deleted.
        (JSC::FunctionExecutable::fromGlobalCode): Deleted.
        (JSC::ExecutableBase::dump): Deleted.
        (JSC::ExecutableBase::hashFor): Deleted.
        (JSC::NativeExecutable::hashFor): Deleted.
        (JSC::ScriptExecutable::hashFor): Deleted.
        * runtime/WebAssemblyExecutable.h: Copied from Source/JavaScriptCore/runtime/Executable.h.
        (JSC::isCall): Deleted.
        (JSC::ExecutableBase::ExecutableBase): Deleted.
        (JSC::ExecutableBase::finishCreation): Deleted.
        (JSC::ExecutableBase::isEvalExecutable): Deleted.
        (JSC::ExecutableBase::isFunctionExecutable): Deleted.
        (JSC::ExecutableBase::isProgramExecutable): Deleted.
        (JSC::ExecutableBase::isModuleProgramExecutable): Deleted.
        (JSC::ExecutableBase::isHostFunction): Deleted.
        (JSC::ExecutableBase::isWebAssemblyExecutable): Deleted.
        (JSC::ExecutableBase::createStructure): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
        (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
        (JSC::ExecutableBase::entrypointFor): Deleted.
        (JSC::ExecutableBase::offsetOfJITCodeWithArityCheckFor): Deleted.
        (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
        (JSC::ExecutableBase::hasJITCodeForCall): Deleted.
        (JSC::ExecutableBase::hasJITCodeForConstruct): Deleted.
        (JSC::ExecutableBase::hasJITCodeFor): Deleted.
        (JSC::ExecutableBase::intrinsic): Deleted.
        (JSC::ExecutableBase::intrinsicFor): Deleted.
        (JSC::ScriptExecutable::source): Deleted.
        (JSC::ScriptExecutable::sourceID): Deleted.
        (JSC::ScriptExecutable::sourceURL): Deleted.
        (JSC::ScriptExecutable::firstLine): Deleted.
        (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::hasOverrideLineNumber): Deleted.
        (JSC::ScriptExecutable::overrideLineNumber): Deleted.
        (JSC::ScriptExecutable::lastLine): Deleted.
        (JSC::ScriptExecutable::startColumn): Deleted.
        (JSC::ScriptExecutable::endColumn): Deleted.
        (JSC::ScriptExecutable::typeProfilingStartOffset): Deleted.
        (JSC::ScriptExecutable::typeProfilingEndOffset): Deleted.
        (JSC::ScriptExecutable::usesEval): Deleted.
        (JSC::ScriptExecutable::usesArguments): Deleted.
        (JSC::ScriptExecutable::isArrowFunctionContext): Deleted.
        (JSC::ScriptExecutable::isStrictMode): Deleted.
        (JSC::ScriptExecutable::derivedContextType): Deleted.
        (JSC::ScriptExecutable::evalContextType): Deleted.
        (JSC::ScriptExecutable::ecmaMode): Deleted.
        (JSC::ScriptExecutable::setNeverInline): Deleted.
        (JSC::ScriptExecutable::setNeverOptimize): Deleted.
        (JSC::ScriptExecutable::setNeverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::setDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::setCanUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::neverInline): Deleted.
        (JSC::ScriptExecutable::neverOptimize): Deleted.
        (JSC::ScriptExecutable::neverFTLOptimize): Deleted.
        (JSC::ScriptExecutable::didTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::isInliningCandidate): Deleted.
        (JSC::ScriptExecutable::isOkToOptimize): Deleted.
        (JSC::ScriptExecutable::canUseOSRExitFuzzing): Deleted.
        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop): Deleted.
        (JSC::ScriptExecutable::features): Deleted.
        (JSC::ScriptExecutable::recordParse): Deleted.
        (JSC::ScriptExecutable::finishCreation): Deleted.
        (JSC::ScriptExecutable::prepareForExecution): Deleted.

2016-10-20  Caitlin Potter  <caitp@igalia.com>

        [JSC] implement runtime for async functions
        https://bugs.webkit.org/show_bug.cgi?id=163760

        Reviewed by Yusuke Suzuki.

        Async functions generate bytecode equivalent to the following, which is
        highly dependent on the Generator implementation:

        ```
        // Before translation:
        async function asyncfn() {}

        // After translation:
        function asyncfn() {
            let generator = {
                @generatorNext: function(@generator, @generatorState, @generatorValue, @generatorResumeMode, @generatorFrameState) {
                    // Body of async function
                },
                @generatorState: 0,
                @generatorThis: this,
                @generatorFrameState: <frame state>,
            };
            return @asyncFunctionResume(generator, undefined, GeneratorResumeMode::NormalMode);
        }
        ```

        Await Expressions are equivalent to non-delegating Yield expressions, and emit identical bytecode.

        There are some caveats to be addressed later:

        1) the `op_to_this` is always performed, whether it's used or not, like normal generators. (https://bugs.webkit.org/show_bug.cgi?id=151586)

        2) for async arrow functions, the home object is always stored on the "body" function, regardless of whether it's needed or
        not, for the same reason as #1 (and should also be fixed as part of https://bugs.webkit.org/show_bug.cgi?id=151586)

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/AsyncFunctionPrototype.js: Added.
        (asyncFunctionResume):
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::isArrowFunction):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewFunctionExpressionCommon):
        (JSC::BytecodeGenerator::emitNewArrowFunctionExpression):
        (JSC::BytecodeGenerator::emitNewFunction):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionNode::emitBytecode):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emit_op_new_async_func):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_async_func_exp):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        * parser/Parser.h:
        (JSC::Scope::setSourceParseMode):
        * parser/ParserModes.h:
        (JSC::isGeneratorOrAsyncFunctionBodyParseMode):
        (JSC::isGeneratorOrAsyncFunctionWrapperParseMode):
        * runtime/AsyncFunctionConstructor.cpp: Added.
        (JSC::AsyncFunctionConstructor::AsyncFunctionConstructor):
        (JSC::AsyncFunctionConstructor::finishCreation):
        (JSC::callAsyncFunctionConstructor):
        (JSC::constructAsyncFunctionConstructor):
        (JSC::AsyncFunctionConstructor::getCallData):
        (JSC::AsyncFunctionConstructor::getConstructData):
        * runtime/AsyncFunctionConstructor.h: Added.
        (JSC::AsyncFunctionConstructor::create):
        (JSC::AsyncFunctionConstructor::createStructure):
        * runtime/AsyncFunctionPrototype.cpp: Added.
        (JSC::AsyncFunctionPrototype::AsyncFunctionPrototype):
        (JSC::AsyncFunctionPrototype::finishCreation):
        * runtime/AsyncFunctionPrototype.h: Added.
        (JSC::AsyncFunctionPrototype::create):
        (JSC::AsyncFunctionPrototype::createStructure):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionConstructor.h:
        * runtime/JSAsyncFunction.cpp: Added.
        (JSC::JSAsyncFunction::JSAsyncFunction):
        (JSC::JSAsyncFunction::createImpl):
        (JSC::JSAsyncFunction::create):
        (JSC::JSAsyncFunction::createWithInvalidatedReallocationWatchpoint):
        * runtime/JSAsyncFunction.h: Added.
        (JSC::JSAsyncFunction::allocationSize):
        (JSC::JSAsyncFunction::createStructure):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::lazyAsyncFunctionStructure):
        (JSC::JSGlobalObject::asyncFunctionPrototype):
        (JSC::JSGlobalObject::asyncFunctionPrototypeConcurrently):
        (JSC::JSGlobalObject::asyncFunctionStructure):
        (JSC::JSGlobalObject::asyncFunctionStructureConcurrently):

2016-10-27  Mark Lam  <mark.lam@apple.com>

        JSFunction::put() should not allow caching of lazily reified properties.
        https://bugs.webkit.org/show_bug.cgi?id=164081

        Reviewed by Geoffrey Garen.

        It is incorrect for JSFunction::put() to return PutPropertySlots that indicates
        that its lazily reified properties (e.g. .caller, and .arguments) are cacheable.
        The reason for this is:

        1. Currently, a cacheable put may only consist of the following types of put
           operations:
           a. putting a new property at an offset in the object storage.
           b. changing the value of an existing property at an offset in the object storage.
           c. invoking the setter for a property at an offset in the object storage.

           Returning a PutPropertySlot that indicates the property is cacheable means that
           the property put must be one of the above operations.

           For lazily reified properties, JSFunction::put() implements complex conditional
           behavior that is different than the set of cacheable put operations above.
           Hence, it should not claim that the property put is cacheable.

        2. Cacheable puts are cached on the original structure of the object before the
           put operation.

           Reifying a lazy property will trigger a structure transition.  Even though
           subsequent puts to such a property may be cacheable after the structure
           transition, it is incorrect to indicate that the property put is cacheable
           because the caching is on the original structure, not the new transitioned
           structure.

        Also fixed some missing exception checks.

        * jit/JITOperations.cpp:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        (JSC::JSFunction::reifyLazyPropertyIfNeeded):
        (JSC::JSFunction::reifyBoundNameIfNeeded):
        * runtime/JSFunction.h:

2016-10-27  Caitlin Potter  <caitp@igalia.com>

        [JSC] forbid lexical redeclaration of generator formal parameters
        https://bugs.webkit.org/show_bug.cgi?id=163930

        Reviewed by Yusuke Suzuki.

        Also forbids "arguments" and "eval" as generator argument names in strict mode.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::declareRestOrNormalParameter):
        * parser/Parser.h:
        (JSC::Parser::declareVariable):
        (JSC::Parser::hasDeclaredParameter):
        (JSC::Parser::isValidStrictMode):

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include ConsoleAgent in Workers - real console.log support
        https://bugs.webkit.org/show_bug.cgi?id=163844
        <rdar://problem/28903328>

        Reviewed by Brian Burg.

        * inspector/protocol/Worker.json:

2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Introduce Page WorkerAgent and Worker InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=163817
        <rdar://problem/28899063>

        Reviewed by Brian Burg.

        * CMakeLists.txt:
        * DerivedSources.make:
        * inspector/protocol/Worker.json: Added.
        New Worker domain.

2016-10-26  JF Bastien  <jfbastien@apple.com>

        WebAssembly API: implement Instance

        As described in: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstance-objects

         - Take ownership of Wasm::Plan's compilation result when successfully creating a JSWebAssemblyModule object.
         - Construct a basic Instance with a Module.
         - Handle second argument (importObject) of WebAssembly.Instance.
         - Add reference text from the spec to WebAssembly.Module's code.
         - Expose and test an empty 'exports' ModuleNamespaceObject on WebAssembly.Instance.

        The implementation isn't complete yet: it relies on further work for which I've filed bugs.

        WebAssembly API: implement Instance
        https://bugs.webkit.org/show_bug.cgi?id=163998

        Reviewed by Keith Miller.

        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::getFunctions): allow transfering state out
        (JSC::Wasm::Plan::getMemory): allow transfering state out
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::create):
        (JSC::JSWebAssemblyInstance::finishCreation): set the ModuleNamespaceObject, and expose it as "exports"
        (JSC::JSWebAssemblyInstance::visitChildren): visit the ModuleNamespaceObject child
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule): move in the compiled functions and the memory
        * wasm/js/JSWebAssemblyModule.h:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance): take the Module, extract the Plan's results, and create the (empty for now) ModuleNamespaceObject
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule): add a few comments from the spec, and pass out the Plan's results

2016-10-26  Brian Burg  <bburg@apple.com>

        Web Inspector: remove unused bool return value from FrontendChannel::sendMessageToFrontend
        https://bugs.webkit.org/show_bug.cgi?id=164046

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendChannel.h:
        * inspector/remote/RemoteConnectionToTarget.h:
        * inspector/remote/RemoteConnectionToTarget.mm:
        (Inspector::RemoteConnectionToTarget::sendMessageToFrontend):

2016-10-26  JF Bastien  <jfbastien@apple.com>

        WebAssembly: remove now-dead JSWasmModule
        https://bugs.webkit.org/show_bug.cgi?id=164044

        Reviewed by Keith Miller.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Executable.cpp:
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable):
        (JSC::WebAssemblyExecutable::visitChildren):
        * runtime/Executable.h:
        * wasm/JSWasmModule.cpp: Removed.
        * wasm/JSWasmModule.h: Removed.
        * wasm/WasmModuleParser.cpp:

2016-10-26  Mark Lam  <mark.lam@apple.com>

        JSGenericTypedArrayView::set() should check for exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=164007
        <rdar://problem/28853775>

        Reviewed by Filip Pizlo.

        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::set):

2016-10-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
        https://bugs.webkit.org/show_bug.cgi?id=163900

        Reviewed by Sam Weinig.

        The IDL tells the conservative result type. While we use the heap prediction
        for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
        we leverage the type told by IDL to produce the abstract value with the proven type
        in AI. It effectively drops unnecessary type checks followed by CallDOM operations.

        For example, when you write the code like,

            if (node.nodeType === 9) {
                // document.
            }

        Previously, we inserted a Int32 check for the result of node.nodeType.
        It is dropped now.

        We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
        are correctly dropped when executing JSTests/stress/domjit-getter.js.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * domjit/DOMJITGetterSetter.h:
        (JSC::DOMJIT::GetterSetter::GetterSetter):
        (JSC::DOMJIT::GetterSetter::resultType):
        * jsc.cpp:
        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):

2016-10-25  Mark Lam  <mark.lam@apple.com>

        String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
        https://bugs.webkit.org/show_bug.cgi?id=163996
        <rdar://problem/28263117>

        Reviewed by Geoffrey Garen.

        String.prototype.replace() uses a Vector internally for bookkeeping work.
        Currently, if this vector gets too big, we just crash on allocation failure.
        While this is correct behavior, it is not too friendly.

        We now detect the imminent failure, and throw a OutOfMemoryError instead.

        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
        (JSC::stringProtoFuncReplaceUsingRegExp):

2016-10-25  Mark Lam  <mark.lam@apple.com>

        Rename the reject() helper function to something more meaningful.
        https://bugs.webkit.org/show_bug.cgi?id=163549

        Reviewed by Saam Barati.

        We'll rename reject() to typeError().  The intuition behind this is that all the
        clients that uses this function will return typeError(..., shouldThrow, ...).
        In a sense, they are returning a "type" of TypeError (which happened to be the
        value false).  In addition, it may also throw a JS TypeError if the shouldThrow
        parameter is true.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/GetterSetter.cpp:
        (JSC::callSetter):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::setLengthWithArrayStorage):
        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::put):
        (JSC::JSArrayBuffer::defineOwnProperty):
        * runtime/JSArrayBufferView.cpp:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        (JSC::JSValue::putToPrimitiveByIndex):
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::put):
        (JSC::JSDataView::defineOwnProperty):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::JSObject::defineOwnIndexedProperty):
        (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
        (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
        (JSC::validateAndApplyPropertyDescriptor):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putInline):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::setPrototype):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::defineOwnProperty):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
        * runtime/Reject.h: Removed.
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putEntry):
        (JSC::SparseArrayValueMap::putDirect):
        (JSC::SparseArrayEntry::put):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::StringObject::putByIndex):
        * runtime/TypeError.h: Copied from Source/JavaScriptCore/runtime/Reject.h.
        (JSC::typeError):
        (JSC::reject): Deleted.

2016-10-25  Filip Pizlo  <fpizlo@apple.com>

        HeapTimer should not hardcode all of its subclasses and USE(CF) shouldn't be a bizarre special case
        https://bugs.webkit.org/show_bug.cgi?id=163947

        Reviewed by Geoffrey Garen.

        I want to introduce another HeapTimer. Prior to this change, that would have meant writing
        exact copies of that timer's logic for each platform that has a HeapTimer (CF, GLIB, and
        EFL). That logic would in turn be a duplicate of the logic already present in
        IncrementalSweeper and GCActivityCallback: all of the subclasses of HeapTimer have their
        own code for scheduling timers, so a new subclass would have to duplicate that code. Then,
        to add insult to injury, the USE(CF) version of HeapTimer would have to have an extra case
        for that new subclass since it doesn't use virtual methods effectively.

        This changes HeapTimer on USE(CF) to know to get its runloop from Heap and to use virtual
        methods effectively so that it doesn't have to know about all of its subclasses.

        This also moves IncrementalSweeper's code for scheduling timers into HeapTimer. This means
        that future subclasses of HeapTimer could simply use that logic.

        This keeps changes to GCActivityCallback to a minimum. It still has a lot of
        platform-specific code and I'm not sure that this code can be trivially deduplicated since
        that code has more quirks. That's fine for now, since I mainly just need a sane way of
        creating new timers that use IncrementalSweeper-like scheduling logic.

        * heap/EdenGCActivityCallback.cpp:
        * heap/EdenGCActivityCallback.h:
        * heap/FullGCActivityCallback.cpp:
        * heap/FullGCActivityCallback.h:
        * heap/GCActivityCallback.cpp:
        (JSC::GCActivityCallback::GCActivityCallback):
        * heap/GCActivityCallback.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * heap/Heap.h:
        (JSC::Heap::runLoop):
        * heap/HeapTimer.cpp:
        (JSC::HeapTimer::HeapTimer):
        (JSC::HeapTimer::setRunLoop):
        (JSC::HeapTimer::~HeapTimer):
        (JSC::HeapTimer::timerDidFire):
        (JSC::HeapTimer::scheduleTimer):
        (JSC::HeapTimer::cancelTimer):
        (JSC::retainAPILock): Deleted.
        (JSC::releaseAPILock): Deleted.
        * heap/HeapTimer.h:
        * heap/IncrementalSweeper.cpp:
        (JSC::IncrementalSweeper::scheduleTimer):
        (JSC::IncrementalSweeper::cancelTimer): Deleted.
        * heap/IncrementalSweeper.h:

2016-10-25  JF Bastien  <jfbastien@apple.com>

        Remove redundant argument count check

        Indexing argument out of bounds already returns jsUndefined().

        Remove redundant argument count check
        https://bugs.webkit.org/show_bug.cgi?id=163957

        Reviewed by Keith Miller.

        * runtime/ErrorConstructor.cpp:
        (JSC::Interpreter::constructWithErrorConstructor):
        (JSC::Interpreter::callErrorConstructor):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2016-10-25  Mark Lam  <mark.lam@apple.com>

        Add ThrowScope::release() calls at all call sites of jsMakeNontrivialString().
        https://bugs.webkit.org/show_bug.cgi?id=163990

        Reviewed by Geoffrey Garen.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):

2016-10-25  Mark Lam  <mark.lam@apple.com>

        JSStringJoiner::joinedLength() should limit joined string lengths to INT_MAX.
        https://bugs.webkit.org/show_bug.cgi?id=163937
        <rdar://problem/28642990>

        Reviewed by Geoffrey Garen.

        JSStringJoiner::joinedLength() was previously limiting it to UINT_MAX.  This is
        inconsistent with other parts of string code which expects a max length of INT_MAX.
        This is now fixed.

        Also fixed jsMakeNontrivialString() to ensure that the resultant string length
        is valid.  It was previously allowing lengths greater than INT_MAX.  This was
        caught by the new assertion in JSString::setLength().

        There are already pre-existing assertions in various JSString::finishCreation()
        which do RELEASE_ASSERTs on the string length.  To be consistent, I'm making the
        assertion in JSString::setLength() a RELEASE_ASSERT.  If this proves to be a
        performance issue, I'll change this to a debug ASSERT later.

        * runtime/JSString.cpp:
        (JSC::JSRopeString::resolveRopeInternal8):
        (JSC::JSRopeString::resolveRopeInternal8NoSubstring):
        (JSC::JSRopeString::resolveRopeInternal16):
        (JSC::JSRopeString::resolveRopeInternal16NoSubstring):
        (JSC::JSRopeString::resolveRopeToAtomicString):
        (JSC::JSRopeString::resolveRopeToExistingAtomicString):
        (JSC::JSRopeString::resolveRope):
        (JSC::JSRopeString::resolveRopeSlowCase8):
        (JSC::JSRopeString::resolveRopeSlowCase):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::finishCreation):
        (JSC::JSString::length):
        (JSC::JSString::isValidLength):
        (JSC::JSString::toBoolean):
        (JSC::JSString::canGetIndex):
        (JSC::JSString::setLength):
        (JSC::JSString::getStringPropertySlot):
        (JSC::JSRopeString::unsafeView):
        (JSC::JSRopeString::viewWithUnderlyingString):
        * runtime/JSStringBuilder.h:
        (JSC::jsMakeNontrivialString):
        * runtime/JSStringJoiner.cpp:
        (JSC::JSStringJoiner::joinedLength):

2016-10-25  JF Bastien  <jfbastien@apple.com>

        WebAssembly: fix unknown section name handling, and check for section size overflow
        https://bugs.webkit.org/show_bug.cgi?id=163959

        See: https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#high-level-structure

        Name length and name are already included in the payload length.

        Reviewed by Filip Pizlo.

        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parse):

2016-10-25  Christopher Reid  <Christopher.Reid@am.sony.com>

        jsc.cpp is leaking memory allocated by readline in runInteractive
        https://bugs.webkit.org/show_bug.cgi?id=163958

        According to http://web.mit.edu/gnu/doc/html/rlman_2.html,
        "The line readline returns is allocated with malloc ();
        you should free () the line when you are done with it."
        The memory allocated by readline is not being freed when it should.

        Reviewed by Mark Lam.

        * jsc.cpp:

2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Check if jscLib and WebKitGUID targets exist before using them
        https://bugs.webkit.org/show_bug.cgi?id=163945

        Reviewed by Alex Christensen.

        Currently these targets are used under WIN32 condition, however they
        are defined in PlatformWin.cmake, causing CMake warnings if port
        supports WIN32 but does not use PlatformWin.cmake

        * shell/CMakeLists.txt:

2016-10-25  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: implement Module

        This implementation allows us to:
         - Syncrhonously create a WebAssembly.Module with a typed array.
         - Creates a compilation plan.
         - Parse the Module and creates corresponding code.
         - Throw WebAssembly.CompileError with mildly helpful [*] error messages on
           failure.

        Consult the API documentation for expected behavior: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymodule-constructor

        For now the implementation discards the generated code.

        The next steps will be:
         - Expose a Module's exports.
         - Implement WebAssembly.Instance, which allows instantiating and running a
           compiled Module.
         - Beef up the testing infrastructure under JSTests/wasm so that more complex
           modules can be created and tested (instead of writing the bits by hand).

        This patch also:
         - Adds assert.instanceof in assert.js.
         - Refactors Wasm::Parser and friends to accept const uint8_t* as well as a
           Vector, to avoid copying when invoked synchronously.
         - Remove useless Structure from some of the wasm constructors: they're already
           on the JSGlobalObject, visited properly and all.
         - Fix off-by-one error in parsing: Parser::parseUInt32 failed if the integer
           was exactly at end of file.

         [*] On error messages while parsing: I filed https://bugs.webkit.org/show_bug.cgi?id=163919

        WebAssembly JS API: implement Module
        https://bugs.webkit.org/show_bug.cgi?id=163903

        Reviewed by Keith Miller.

        * runtime/ExceptionHelpers.cpp:
        (JSC::defaultSourceAppender): make this public so that WebAssembly can use it: it generates those fancy (evaluating '...') messages at the end
        * runtime/ExceptionHelpers.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): remove the useless Structure from the WebAssembly objects (it's already in this file, no need to hold two references and visit them twice)
        * testWasm.cpp:
        (runWasmTests): update API
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::parseAndCompile): use updated API
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::FunctionParser): use updated API
        (JSC::Wasm::FunctionParser<Context>::parseExpression): use updated API
        * wasm/WasmModuleParser.cpp:
        (JSC::Wasm::ModuleParser::parse): generate error messages
        * wasm/WasmModuleParser.h:
        (JSC::Wasm::ModuleParser::ModuleParser):
        (JSC::Wasm::ModuleParser::failed):
        (JSC::Wasm::ModuleParser::errorMessage):
        (JSC::Wasm::ModuleParser::functionInformation):
        (JSC::Wasm::ModuleParser::memory):
        * wasm/WasmParser.h: use update non-public API
        (JSC::Wasm::Parser::parseVarUInt32):
        (JSC::Wasm::Parser::parseVarUInt64):
        (JSC::Wasm::Parser::source):
        (JSC::Wasm::Parser::length):
        (JSC::Wasm::Parser::Parser):
        (JSC::Wasm::Parser::consumeCharacter):
        (JSC::Wasm::Parser::consumeString):
        (JSC::Wasm::Parser::parseUInt32):
        (JSC::Wasm::Parser::parseUInt7):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::Plan):
        (JSC::Wasm::Plan::~Plan):
        * wasm/WasmPlan.h:
        (JSC::Wasm::Plan::failed):
        (JSC::Wasm::Plan::errorMessage):
        (JSC::Wasm::Plan::resultSize):
        (JSC::Wasm::Plan::result):
        (JSC::Wasm::Plan::memory):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::createWebAssemblyCompileError): makes it easier to throw a WebAssembly.CompileError from Module
        * wasm/js/JSWebAssemblyCompileError.h:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::WebAssemblyCompileErrorConstructor::create):
        (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
        * wasm/js/WebAssemblyCompileErrorConstructor.h:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::WebAssemblyInstanceConstructor::create):
        (JSC::WebAssemblyInstanceConstructor::finishCreation):
        (JSC::WebAssemblyInstanceConstructor::visitChildren):
        * wasm/js/WebAssemblyInstanceConstructor.h:
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::WebAssemblyMemoryConstructor::create):
        (JSC::WebAssemblyMemoryConstructor::finishCreation):
        (JSC::WebAssemblyMemoryConstructor::visitChildren):
        * wasm/js/WebAssemblyMemoryConstructor.h:
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::constructJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::create):
        (JSC::WebAssemblyModuleConstructor::finishCreation):
        (JSC::WebAssemblyModuleConstructor::visitChildren):
        * wasm/js/WebAssemblyModuleConstructor.h:
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::WebAssemblyRuntimeErrorConstructor::create):
        (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.h:
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::WebAssemblyTableConstructor::create):
        (JSC::WebAssemblyTableConstructor::finishCreation):
        (JSC::WebAssemblyTableConstructor::visitChildren):
        * wasm/js/WebAssemblyTableConstructor.h:

2016-10-25  Keith Miller  <keith_miller@apple.com>

        Add trivial Wasm conversion opcodes
        https://bugs.webkit.org/show_bug.cgi?id=163950

        Reviewed by Filip Pizlo.

        This patch differentiates between Wasm opcodes that are trivially mapped to a B3 opcode and
        those that are not.  Some of the Wasm opcodes that are currently a non-simple opcode will
        become simple as we add B3 opcodes for Wasm operations.  The remaining opcodes will need to
        be added via patchpoints in a later patch.

        * wasm/WasmB3IRGenerator.cpp:
        * wasm/WasmOps.h:
        (JSC::Wasm::isSimple):

2016-10-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Arrow functions with concise bodies cannot return regular expressions
        https://bugs.webkit.org/show_bug.cgi?id=163162

        Reviewed by Filip Pizlo.

        When we encounter the RegExp in the parser, we first scan it as / or /=.
        And if / or /= is parsed under the primary expression context, we rescan it
        as RegExp. However, we did not update the token record information. So the
        token record still says "I'm / or /=".

        When we parse the string "() => /hello/", the last token becomes "/", which is
        the first character of the RegExp, instead of "/hello/". Since the arrow
        function parsing utilizes the end offset of the last token, we accidentally
        recognize the range of the above arrow function as "() => /".

        In this patch, we update the token when rescanning under the RegExp context.
        This logic is similar to parsing Tail Template Literal token.

        We also refine the error message for regular expression literals. And since
        the REGEXP token is now introduced, the other error messages using that token
        are improved too.

        Currently, unterminated error messages can be seen in Parser.cpp. However,
        these messages cannot be shown to users if the lexer has m_error. So these
        code is meaningless. I'll move these tokenizing errors to the lexer in the
        subsequent patch[1].

        [1]: https://bugs.webkit.org/show_bug.cgi?id=163928

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::fillTokenInfo):
        (JSC::Lexer<T>::lex):
        (JSC::Lexer<T>::scanRegExp):
        (JSC::Lexer<T>::scanTrailingTemplateString):
        (JSC::Lexer<T>::skipRegExp): Deleted.
        * parser/Lexer.h:
        (JSC::Lexer::getToken):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        * parser/Parser.h:
        (JSC::Parser::getToken):
        * parser/ParserTokens.h:

2016-10-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] CMake build type is not set.
        https://bugs.webkit.org/show_bug.cgi?id=163917

        Reviewed by Alex Christensen.

        The CMAKE_BUILD_TYPE variable should be set to Debug or Release.

        * JavaScriptCore.vcxproj/JavaScriptCore.proj:

2016-10-24  Chris Dumez  <cdumez@apple.com>

        Reduce special handling for typed arrays in JSDOMConvert.h
        https://bugs.webkit.org/show_bug.cgi?id=163907

        Reviewed by Sam Weinig.

        Reduce special handling for typed arrays in JSDOMConvert.h by adding a toWrapped() static
        function on JSGenericTypedArrayView, similarly to other wrapper types.

        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView::typedImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::toWrapped):

2016-10-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT][DFG] CallDOM never writes Stack
        https://bugs.webkit.org/show_bug.cgi?id=163926

        Reviewed by Filip Pizlo and Saam Barati.

        There is no way to write(Stack) in CallDOM.
        This worst case (the most clobbering case) scenario
        should be aligned to the one of Call, read(World) and write(Heap).

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

2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
        https://bugs.webkit.org/show_bug.cgi?id=163657

        Reviewed by Saam Barati.

        This patch introduces DOMJIT::Effect. It describes the side effects of
        the DOMJIT::CallDOMPatchpoint. DOMJIT::CallDOMPatchpoint can use this
        feature to teach the compilers about the effects. And the compilers
        will perform CSE based on the reported effects.

        As the same to B3's HeapRange, the effects are represented as a pair of
        integers. [begin, end) pair will represents the range of the abstract
        heap. We encode the abstract heap hierarchy into these pairs. Like,

                                Root: [0, 32)
                 Child1: [0, 20)             Child2: [20, 32)
        Child11: [0, 4) Child12: [4, 20)

        This simplifies the representation of the abstract heap. And WebCore
        just tells pairs of integers and it does not tell any detailed hierarchy.
        So, DFG and FTL can optimize DOM operations without deep knowledge of
        the DOM abstract heap hierarchy. For example, WebCore will tell that
        firstChild will read Node_firstChild abstract heap. But this information
        is encoded to the pair and DFG does not know the details. But still
        DFG can understand the abstract heap hierarchy and can query whether the
        given abstract heap overlaps with some abstract heap.

        The heap range told by the WebCore is represented as DOMJIT::HeapRange.
        DFG will handle this under the DOMState abstract heap. DOMJIT::HeapRange
        is stored in DFG::AbstractHeap's Payload. We maintain the hierarchy by
        DOMJIT::HeapRange in the DOMState abstract heap. We add a necessary
        handling in DFG's AbstractHeap and ClobberSet.

        And we also introduce DOMStateLoc for HeapLocation. It is combined with
        DOMState AbstractHeap with DOMJIT::HeapRange. For example, we can
        represent Node.firstChild as `read(DOMState:Node_firstChild)` and
        `def(HeapLocation(node, DOMState:Node_firstChild))` thingy. This allows us
        to perform CSE onto DOM getters that will read some of DOM heap!

        For simplicity, we convert CallDOM from NodeVarArgs to the normal one.
        CallDOM is now just used for DOMJIT getter. So its children is at most 2.
        It may have either 1 or 2 children. If the global object is required
        by CallDOMPatchpoint, it has 2 children. And we changed the order of
        the children to further simplify the code. Before this change, the order
        is 1: globalObject 2: base. After this patch, the order becomes 1: base,
        and 2: globalObject. And the child2 may not exists if the global object
        is not required. We changed all the existing DOMJIT patchpoint to this
        form.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::emitDOMJITGetter):
        * dfg/DFGAbstractHeap.cpp:
        (JSC::DFG::AbstractHeap::dump):
        * dfg/DFGAbstractHeap.h:
        (JSC::DFG::AbstractHeap::isStrictSubtypeOf):
        (JSC::DFG::AbstractHeap::overlaps):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::blessCallDOM):
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        * dfg/DFGClobberSet.cpp:
        (JSC::DFG::ClobberSet::overlaps):
        * dfg/DFGClobberSet.h:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        * dfg/DFGHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGHeapLocation.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasCallDOMData):
        (JSC::DFG::Node::callDOMData):
        (JSC::DFG::Node::hasCallDOMPatchpoint): Deleted.
        (JSC::DFG::Node::callDOMPatchpoint): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        * domjit/DOMJITAbstractHeap.cpp: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (JSC::DOMJIT::AbstractHeap::compute):
        (JSC::DOMJIT::AbstractHeap::dump):
        (JSC::DOMJIT::AbstractHeap::shallowDump):
        (JSC::DOMJIT::AbstractHeap::deepDump):
        * domjit/DOMJITAbstractHeap.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (JSC::DOMJIT::AbstractHeap::AbstractHeap):
        (JSC::DOMJIT::AbstractHeap::setParent):
        (JSC::DOMJIT::AbstractHeap::isRoot):
        (JSC::DOMJIT::AbstractHeap::isComputed):
        (JSC::DOMJIT::AbstractHeap::range):
        * domjit/DOMJITCallDOMPatchpoint.h:
        * domjit/DOMJITEffect.h: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (JSC::DOMJIT::Effect::forReadWrite):
        (JSC::DOMJIT::Effect::forPure):
        (JSC::DOMJIT::Effect::forDef):
        (JSC::DOMJIT::Effect::mustGenerate):
        * domjit/DOMJITHeapRange.cpp: Copied from Source/JavaScriptCore/domjit/DOMJITCallDOMPatchpoint.h.
        (JSC::DOMJIT::HeapRange::dump):
        * domjit/DOMJITHeapRange.h: Added.
        (JSC::DOMJIT::HeapRange::HeapRange):
        (JSC::DOMJIT::HeapRange::fromRaw):
        (JSC::DOMJIT::HeapRange::begin):
        (JSC::DOMJIT::HeapRange::end):
        (JSC::DOMJIT::HeapRange::rawRepresentation):
        (JSC::DOMJIT::HeapRange::operator bool):
        (JSC::DOMJIT::HeapRange::operator==):
        (JSC::DOMJIT::HeapRange::top):
        (JSC::DOMJIT::HeapRange::none):
        (JSC::DOMJIT::HeapRange::isStrictSubtypeOf):
        (JSC::DOMJIT::HeapRange::isSubtypeOf):
        (JSC::DOMJIT::HeapRange::overlaps):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        * jsc.cpp:

2016-10-24  Alex Christensen  <achristensen@webkit.org>

        JSONParse should not crash with null Strings
        https://bugs.webkit.org/show_bug.cgi?id=163918
        <rdar://problem/28834095>

        Reviewed by Michael Saboff.

        When JSONParse is called with a null String, it calls String::is8bit, which dereferences a null pointer.
        This is happening with new work in the Fetch API, but callers of JSONParse should not have to check
        if the String is null.

        * API/tests/JSONParseTest.cpp: Added.
        (testJSONParse):
        * API/tests/JSONParseTest.h: Added.
        * API/tests/testapi.c:
        (main):
        Test parsing null Strings.  They should have the same result as parsing empty Strings.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSONObject.cpp:
        (JSC::JSONParse):
        Check for null Strings.
        * shell/PlatformWin.cmake:

2016-10-24  Devin Rousso  <dcrousso+webkit@gmail.com>

        Web Inspector: Scope chain shouldn't show empty Closure sections
        https://bugs.webkit.org/show_bug.cgi?id=152348

        Reviewed by Joseph Pecoraro.

        * inspector/InjectedScriptSource.js:
        (isEmptyObject):
        (InjectedScript.CallFrameProxy._createScopeJson):
        If the scope object has no properties, set empty to true.

        * inspector/protocol/Debugger.json:
        Added empty property to Scope type.

2016-10-24  Keith Miller  <keith_miller@apple.com>

        Wasm should support floating point operations.
        https://bugs.webkit.org/show_bug.cgi?id=163770

        Reviewed by Michael Saboff.

        Since we now have a Double => Float Trunc in B3, we can now support calls in Wasm
        that take floating point arguments. This patch also enables most of the Wasm
        floating point operations, as the associated B3 opcode has been linked via wasm.json.
        If there is no direct mapping to a B3 opcode the Wasm is not yet implemented. This
        patch also fixes a bug in calls where the arguments would be reversed.

        * testWasm.cpp:
        (cast):
        (invoke):
        (boxf):
        (boxd):
        (runWasmTests):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::createJSWrapper):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallingConvention::loadArguments):
        (JSC::Wasm::CallingConvention::setupCall):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmOps.h:

2016-10-24  Mark Lam  <mark.lam@apple.com>

        Dumping of op_negate bytecode is broken.
        https://bugs.webkit.org/show_bug.cgi?id=163896

        Reviewed by Darin Adler.

        It thinks the bytecode consists of only 3 machine words, when it consists of 4.
        This is now fixed.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):

2016-10-24  Youenn Fablet  <youenn@apple.com>

        Activate WEB_RTC compilation flags for Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=163886

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2016-10-23  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Build fix for Clang and libstdc++ configurations.

        * b3/testb3.cpp:
        (JSC::B3::testAbsArgWithEffectfulDoubleConversion): Explicitly cast the
        float-typed return value of fabs(float) to double in order to avoid
        ambiguous calls to isIdentical().
        (JSC::B3::testSqrtArgWithEffectfulDoubleConversion): Ditto for sqrt(float).

2016-10-22  Chris Dumez  <cdumez@apple.com>

        WebGLRenderingContextBase.bufferData() should use a union instead of overloading
        https://bugs.webkit.org/show_bug.cgi?id=163795

        Reviewed by Darin Adler.

        * runtime/ArrayBufferView.h:
        (JSC::ArrayBufferView::data):
        Add a data() method which aliases baseAddress() to align the API with
        ArrayBuffer and reduce special handling at call sites.

        * runtime/JSArrayBuffer.h:
        (JSC::toArrayBuffer):
        (JSC::JSArrayBuffer::toWrapped):
        Add toWrapped() method similarly with WebCore wrapper types to
        reduce special handling of JSArrayBuffer type.

        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::toWrapped):
        * runtime/JSArrayBufferView.h:
        Add toWrapped() method similarly with WebCore wrapper types to
        reduce special handling of JSArrayBufferView type.

2016-10-21  Filip Pizlo  <fpizlo@apple.com>

        Slow and big Heap methods should not be inline
        https://bugs.webkit.org/show_bug.cgi?id=163802

        Reviewed by Keith Miller.

        JSC often suffers from the inline cargo cult, and Heap is a prime example. This outlines a
        bunch of Heap methods that are either already very big, or call out-of-line methods, or call
        very big methods, or are not called often enough for inlining to matter.

        This simplifies concurrent GC work because I'm so tired of recompiling the world when I touch
        one of these methods.

        This looks to be perf-neutral.

        * heap/Heap.cpp:
        (JSC::Heap::shouldCollect):
        (JSC::Heap::isCurrentThreadBusy):
        (JSC::Heap::reportExtraMemoryVisited):
        (JSC::Heap::reportExternalMemoryVisited):
        (JSC::Heap::collectIfNecessaryOrDefer):
        (JSC::Heap::collectAccordingToDeferGCProbability):
        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
        (JSC::Heap::registerWeakGCMap):
        (JSC::Heap::unregisterWeakGCMap):
        (JSC::Heap::didAllocateBlock):
        (JSC::Heap::didFreeBlock):
        * heap/HeapInlines.h:
        (JSC::Heap::shouldCollect): Deleted.
        (JSC::Heap::isCurrentThreadBusy): Deleted.
        (JSC::Heap::reportExtraMemoryVisited): Deleted.
        (JSC::Heap::reportExternalMemoryVisited): Deleted.
        (JSC::Heap::collectIfNecessaryOrDefer): Deleted.
        (JSC::Heap::collectAccordingToDeferGCProbability): Deleted.
        (JSC::Heap::decrementDeferralDepthAndGCIfNeeded): Deleted.
        (JSC::Heap::registerWeakGCMap): Deleted.
        (JSC::Heap::unregisterWeakGCMap): Deleted.
        (JSC::Heap::didAllocateBlock): Deleted.
        (JSC::Heap::didFreeBlock): Deleted.

2016-10-21  Saam Barati  <sbarati@apple.com>

        SpeculativeJIT::compileTryGetById needs to pass in NeedsToSpill along both the cell speculation and untyped speculation path
        https://bugs.webkit.org/show_bug.cgi?id=163622

        Reviewed by Yusuke Suzuki.

        We were passing in DontSpill in the Untyped:child1() case, which caused us
        not to spill the base register. This is obviously wrong because the
        DFG's register allocator expected the base to still be in the register
        that it allocated for it after the TryGetById node executed.

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

2016-10-21  Keith Miller  <keith_miller@apple.com>

        Expand Trunc in B3 to support Double to Float
        https://bugs.webkit.org/show_bug.cgi?id=163809

        Reviewed by Geoffrey Garen.

        This feature is useful for passing floating point arguments via registers.
        Currently, ArgumentRegValue returns a the full 64-bit register. Thus, we
        need a way to indicate to B3 that we only want the low 32-bits.

        * b3/B3Common.h:
        (JSC::B3::isIdentical):
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Opcode.h:
        * b3/B3ReduceStrength.cpp:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::typeFor):
        * b3/testb3.cpp:
        (JSC::B3::testAddFPRArgsFloat):
        (JSC::B3::testCeilArgWithEffectfulDoubleConversion):
        (JSC::B3::testFloorArgWithEffectfulDoubleConversion):
        (JSC::B3::testDoubleProducerPhiToFloatConversionWithDoubleConsumer):
        (JSC::B3::run):

2016-10-21  Keith Miller  <keith_miller@apple.com>

        Rename WASM to Wasm
        https://bugs.webkit.org/show_bug.cgi?id=163796

        Rubber stamped by Filip Pizlo.

        * CMakeLists.txt:
        * Configurations/ToolExecutable.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntThunks.cpp:
        (JSC::vmEntryToWasm):
        (JSC::vmEntryToWASM): Deleted.
        * llint/LLIntThunks.h:
        * runtime/Executable.cpp:
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable):
        * runtime/Executable.h:
        * shell/CMakeLists.txt:
        * testWASM.cpp:
        (runWASMTests): Deleted.
        * testWasm.cpp: Renamed from Source/JavaScriptCore/testWASM.cpp.
        (CommandLine::CommandLine):
        (printUsageStatement):
        (CommandLine::parseArguments):
        (runLEBTests):
        (invoke):
        (box):
        (runWasmTests):
        (main):
        * wasm/JSWASMModule.cpp:
        (JSC::JSWASMModule::JSWASMModule): Deleted.
        (JSC::JSWASMModule::destroy): Deleted.
        (JSC::JSWASMModule::visitChildren): Deleted.
        * wasm/JSWASMModule.h:
        (JSC::JSWASMModule::create): Deleted.
        (JSC::JSWASMModule::createStructure): Deleted.
        (JSC::JSWASMModule::i32Constants): Deleted.
        (JSC::JSWASMModule::f32Constants): Deleted.
        (JSC::JSWASMModule::f64Constants): Deleted.
        (JSC::JSWASMModule::signatures): Deleted.
        (JSC::JSWASMModule::functionImports): Deleted.
        (JSC::JSWASMModule::functionImportSignatures): Deleted.
        (JSC::JSWASMModule::globalVariableTypes): Deleted.
        (JSC::JSWASMModule::functionDeclarations): Deleted.
        (JSC::JSWASMModule::functionPointerTables): Deleted.
        (JSC::JSWASMModule::arrayBuffer): Deleted.
        (JSC::JSWASMModule::functions): Deleted.
        (JSC::JSWASMModule::functionStartOffsetsInSource): Deleted.
        (JSC::JSWASMModule::functionStackHeights): Deleted.
        (JSC::JSWASMModule::globalVariables): Deleted.
        (JSC::JSWASMModule::importedFunctions): Deleted.
        * wasm/JSWasmModule.cpp: Renamed from Source/JavaScriptCore/wasm/JSWASMModule.cpp.
        (JSC::JSWasmModule::JSWasmModule):
        (JSC::JSWasmModule::destroy):
        (JSC::JSWasmModule::visitChildren):
        * wasm/JSWasmModule.h: Renamed from Source/JavaScriptCore/wasm/JSWASMModule.h.
        (JSC::JSWasmModule::create):
        (JSC::JSWasmModule::createStructure):
        (JSC::JSWasmModule::i32Constants):
        (JSC::JSWasmModule::f32Constants):
        (JSC::JSWasmModule::f64Constants):
        (JSC::JSWasmModule::signatures):
        (JSC::JSWasmModule::functionImports):
        (JSC::JSWasmModule::functionImportSignatures):
        (JSC::JSWasmModule::globalVariableTypes):
        (JSC::JSWasmModule::functionDeclarations):
        (JSC::JSWasmModule::functionPointerTables):
        (JSC::JSWasmModule::arrayBuffer):
        (JSC::JSWasmModule::functions):
        (JSC::JSWasmModule::functionStartOffsetsInSource):
        (JSC::JSWasmModule::functionStackHeights):
        (JSC::JSWasmModule::globalVariables):
        (JSC::JSWasmModule::importedFunctions):
        * wasm/WASMB3IRGenerator.cpp:
        (JSC::WASM::createJSWrapper): Deleted.
        (JSC::WASM::parseAndCompile): Deleted.
        * wasm/WASMCallingConvention.cpp:
        (JSC::WASM::jscCallingConvention): Deleted.
        (JSC::WASM::wasmCallingConvention): Deleted.
        * wasm/WASMCallingConvention.h:
        (JSC::WASM::CallingConvention::CallingConvention): Deleted.
        (JSC::WASM::CallingConvention::marshallArgumentImpl): Deleted.
        (JSC::WASM::CallingConvention::marshallArgument): Deleted.
        (JSC::WASM::CallingConvention::loadArguments): Deleted.
        (JSC::WASM::CallingConvention::setupCall): Deleted.
        (JSC::WASM::nextJSCOffset): Deleted.
        * wasm/WASMFormat.h:
        (JSC::WASM::toB3Type): Deleted.
        (JSC::WASM::isValueType): Deleted.
        * wasm/WASMFunctionParser.h:
        (JSC::WASM::FunctionParser<Context>::FunctionParser): Deleted.
        (JSC::WASM::FunctionParser<Context>::parse): Deleted.
        (JSC::WASM::FunctionParser<Context>::parseBlock): Deleted.
        (JSC::WASM::FunctionParser<Context>::parseExpression): Deleted.
        (JSC::WASM::FunctionParser<Context>::parseUnreachableExpression): Deleted.
        * wasm/WASMMemory.cpp:
        (JSC::WASM::Memory::Memory): Deleted.
        * wasm/WASMMemory.h:
        (JSC::WASM::Memory::~Memory): Deleted.
        (JSC::WASM::Memory::memory): Deleted.
        (JSC::WASM::Memory::size): Deleted.
        (JSC::WASM::Memory::pinnedRegisters): Deleted.
        (JSC::WASM::Memory::mode): Deleted.
        (JSC::WASM::Memory::grow): Deleted.
        (JSC::WASM::Memory::offsetOfSize): Deleted.
        * wasm/WASMModuleParser.cpp:
        (JSC::WASM::ModuleParser::parse): Deleted.
        (JSC::WASM::ModuleParser::parseMemory): Deleted.
        (JSC::WASM::ModuleParser::parseFunctionTypes): Deleted.
        (JSC::WASM::ModuleParser::parseFunctionSignatures): Deleted.
        (JSC::WASM::ModuleParser::parseFunctionDefinitions): Deleted.
        * wasm/WASMModuleParser.h:
        (JSC::WASM::ModuleParser::ModuleParser): Deleted.
        (JSC::WASM::ModuleParser::functionInformation): Deleted.
        (JSC::WASM::ModuleParser::memory): Deleted.
        * wasm/WASMOps.h:
        (JSC::WASM::isValidOpType): Deleted.
        (JSC::WASM::isControlOp): Deleted.
        * wasm/WASMParser.h:
        (JSC::WASM::Parser::parseVarUInt32): Deleted.
        (JSC::WASM::Parser::parseVarUInt64): Deleted.
        (JSC::WASM::Parser::Parser): Deleted.
        (JSC::WASM::Parser::consumeCharacter): Deleted.
        (JSC::WASM::Parser::consumeString): Deleted.
        (JSC::WASM::Parser::parseUInt32): Deleted.
        (JSC::WASM::Parser::parseUInt7): Deleted.
        (JSC::WASM::Parser::parseVarUInt1): Deleted.
        (JSC::WASM::Parser::parseValueType): Deleted.
        * wasm/WASMPlan.cpp:
        (JSC::WASM::Plan::Plan): Deleted.
        * wasm/WASMSections.h:
        (JSC::WASM::Sections::validateOrder): Deleted.
        * wasm/WasmB3IRGenerator.cpp: Renamed from Source/JavaScriptCore/wasm/WASMB3IRGenerator.cpp.
        (dumpProcedure):
        (JSC::Wasm::createJSWrapper):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmB3IRGenerator.h: Renamed from Source/JavaScriptCore/wasm/WASMB3IRGenerator.h.
        * wasm/WasmCallingConvention.cpp: Renamed from Source/JavaScriptCore/wasm/WASMCallingConvention.cpp.
        (JSC::Wasm::jscCallingConvention):
        (JSC::Wasm::wasmCallingConvention):
        * wasm/WasmCallingConvention.h: Renamed from Source/JavaScriptCore/wasm/WASMCallingConvention.h.
        (JSC::Wasm::CallingConvention::CallingConvention):
        (JSC::Wasm::CallingConvention::marshallArgumentImpl):
        (JSC::Wasm::CallingConvention::marshallArgument):
        (JSC::Wasm::CallingConvention::loadArguments):
        (JSC::Wasm::CallingConvention::setupCall):
        (JSC::Wasm::nextJSCOffset):
        * wasm/WasmFormat.h: Renamed from Source/JavaScriptCore/wasm/WASMFormat.h.
        (JSC::Wasm::toB3Type):
        (JSC::Wasm::isValueType):
        * wasm/WasmFunctionParser.h: Renamed from Source/JavaScriptCore/wasm/WASMFunctionParser.h.
        (JSC::Wasm::FunctionParser<Context>::FunctionParser):
        (JSC::Wasm::FunctionParser<Context>::parse):
        (JSC::Wasm::FunctionParser<Context>::parseBlock):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmMemory.cpp: Renamed from Source/JavaScriptCore/wasm/WASMMemory.cpp.
        (JSC::Wasm::Memory::Memory):
        * wasm/WasmMemory.h: Renamed from Source/JavaScriptCore/wasm/WASMMemory.h.
        (JSC::Wasm::Memory::~Memory):
        (JSC::Wasm::Memory::memory):
        (JSC::Wasm::Memory::size):
        (JSC::Wasm::Memory::pinnedRegisters):
        (JSC::Wasm::Memory::mode):
        (JSC::Wasm::Memory::grow):
        (JSC::Wasm::Memory::offsetOfSize):
        * wasm/WasmModuleParser.cpp: Renamed from Source/JavaScriptCore/wasm/WASMModuleParser.cpp.
        (JSC::Wasm::ModuleParser::parse):
        (JSC::Wasm::ModuleParser::parseMemory):
        (JSC::Wasm::ModuleParser::parseFunctionTypes):
        (JSC::Wasm::ModuleParser::parseFunctionSignatures):
        (JSC::Wasm::ModuleParser::parseFunctionDefinitions):
        * wasm/WasmModuleParser.h: Renamed from Source/JavaScriptCore/wasm/WASMModuleParser.h.
        (JSC::Wasm::ModuleParser::ModuleParser):
        (JSC::Wasm::ModuleParser::functionInformation):
        (JSC::Wasm::ModuleParser::memory):
        * wasm/WasmOps.h: Renamed from Source/JavaScriptCore/wasm/WASMOps.h.
        (JSC::Wasm::isValidOpType):
        (JSC::Wasm::isControlOp):
        * wasm/WasmParser.h: Renamed from Source/JavaScriptCore/wasm/WASMParser.h.
        (JSC::Wasm::Parser::parseVarUInt32):
        (JSC::Wasm::Parser::parseVarUInt64):
        (JSC::Wasm::Parser::Parser):
        (JSC::Wasm::Parser::consumeCharacter):
        (JSC::Wasm::Parser::consumeString):
        (JSC::Wasm::Parser::parseUInt32):
        (JSC::Wasm::Parser::parseUInt7):
        (JSC::Wasm::Parser::parseVarUInt1):
        (JSC::Wasm::Parser::parseValueType):
        * wasm/WasmPlan.cpp: Renamed from Source/JavaScriptCore/wasm/WASMPlan.cpp.
        (JSC::Wasm::Plan::Plan):
        * wasm/WasmPlan.h: Renamed from Source/JavaScriptCore/wasm/WASMPlan.h.
        * wasm/WasmSections.h: Renamed from Source/JavaScriptCore/wasm/WASMSections.h.
        (JSC::Wasm::Sections::validateOrder):

2016-10-21  Caitlin Potter  <caitp@igalia.com>

        [JSC] don't crash when arguments to `new Function()` produce unexpected AST
        https://bugs.webkit.org/show_bug.cgi?id=163748

        Reviewed by Mark Lam.

        The ASSERT(statement); and ASSERT(funcDecl); lines are removed, replaced with blocks
        to report a generic Parser error message. These lines are only possible to be reached
        if the input string produced an unexpected AST, which previously could be used to crash
        the process via ASSERT failure.

        The node type assertions are left in the tree, as it should be impossible for a top-level
        `{` to produce anything other than a Block node. If the node turns out not to be a Block,
        it indicates that the (C++) caller of this function (E.g in FunctionConstructor.cpp), is
        doing something incorrect. Similarly, it should be impossible for the `funcDecl` node to
        be anything other than a function declaration given the conventions of the caller of this
        function.

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

2016-10-20  Keith Miller  <keith_miller@apple.com>

        Add support for WASM calls
        https://bugs.webkit.org/show_bug.cgi?id=161727

        Reviewed by Filip Pizlo and Michael Saboff.

        Add support for WASM calls. Since most of the work for this was already done when we added
        WASM Memory, this is mostly just cleanup work.  The main interesting part of this patch is
        how we link calls to other WASM functions in the same module. Since a WASM callee may not
        have been compiled by the time the current function has started compilation we don't know
        what address we need to call to.  For each callsite in the compiling function, WASM
        remembers the CodeLocationCall and the target function index. Once all WASM functions are
        compiled, each callsite is linked to the appropriate entrypoint.

        * testWASM.cpp:
        (runWASMTests):
        * wasm/WASMB3IRGenerator.cpp:
        (JSC::WASM::createJSWrapper):
        (JSC::WASM::parseAndCompile):
        * wasm/WASMB3IRGenerator.h:
        * wasm/WASMCallingConvention.cpp:
        (JSC::WASM::jscCallingConvention):
        (JSC::WASM::wasmCallingConvention):
        * wasm/WASMCallingConvention.h:
        (JSC::WASM::CallingConvention::CallingConvention):
        (JSC::WASM::CallingConvention::marshallArgumentImpl):
        (JSC::WASM::CallingConvention::marshallArgument):
        (JSC::WASM::CallingConvention::loadArguments):
        (JSC::WASM::CallingConvention::setupCall):
        (JSC::WASM::CallingConvention::iterate): Deleted.
        * wasm/WASMFormat.h:
        * wasm/WASMFunctionParser.h:
        (JSC::WASM::FunctionParser<Context>::FunctionParser):
        (JSC::WASM::FunctionParser<Context>::parseBlock):
        (JSC::WASM::FunctionParser<Context>::parseExpression):
        * wasm/WASMModuleParser.cpp:
        (JSC::WASM::ModuleParser::parse):
        * wasm/WASMOps.h:
        * wasm/WASMParser.h:
        (JSC::WASM::Parser::parseVarUInt32):
        (JSC::WASM::Parser::parseVarUInt64):
        * wasm/WASMPlan.cpp:
        (JSC::WASM::Plan::Plan):

2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement InputEvent.getTargetRanges() for the input events spec
        https://bugs.webkit.org/show_bug.cgi?id=162947
        <rdar://problem/28853079>

        Reviewed by Darin Adler.

        Boilerplate change to add a runtime guard for InputEvents-related IDL interfaces. See WebCore ChangeLog entry
        for more details.

        * runtime/CommonIdentifiers.h:

2016-10-20  Zan Dobersek  <zdobersek@igalia.com>

        Fix JSC cast-align compiler warnings on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=163744

        Reviewed by Mark Lam.

        Use the reinterpret_cast_ptr workaround in a few places where
        the cast alignment warning is being thrown by the GCC compiler
        when compiling for the ARMv7 architecture.

        * heap/Heap.cpp:
        (JSC::Zombify::visit):
        * heap/HeapCell.h:
        (JSC::HeapCell::zap):
        (JSC::HeapCell::isZapped):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::specializedSweep):

2016-10-20  Filip Pizlo  <fpizlo@apple.com>

        The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting
        https://bugs.webkit.org/show_bug.cgi?id=163738

        Reviewed by Geoffrey Garen.

        We need to know if we're currently in an allocation slow path, so that code can assert that
        it's not being used from inside a destructor that runs during a sweep. We need to know if
        we're currently collecting, because some code behaves differently during collection, and
        other code wants to assert that it's not being used from inside a visitChildren method that
        runs during marking. If we are collecting, we need to know if it's an eden collection or a
        full collection. If we are requesting a collection, we need to know if we're requesting an
        eden collection, a full collection, or any kind of collection.

        Prior to this change, you would reason about all of these things using the HeapOperation. It
        had the following states: NoOperation, Allocation, FullCollection, EdenCollection, and
        AnyCollection. NoOperation versus Allocation was primarily for asserting that sweep didn't
        call arbitrary JS. FullCollection versus EdenCollection was about describing generations. We
        would even use HeapOperation in places where we knew that it could only be either Full or
        Eden, because we just needed a variable to tell us which generation we were talking about.
        It was all very confusing.

        Where it completely breaks down is the fact that a concurrent GC has two logical threads, the
        mutator and the collector, which can change state independently. The mutator can be
        allocating. It can also be doing some work to help the GC. That's three states: running,
        allocating, or helping GC. At the same time, the GC thread could either be running or not,
        and if it's running, it could be a full collection or an eden collection. Because the mutator
        and collector can run at the same time, it means that if we used one enum, we would need nine
        states: every combination of mutator running, allocating, or helping GC, crossed with
        collector not running, running eden, or running full. So, this change decouples mutator state
        from collector state and uses two separate fields with two different types.

        Mutator state is described using MutatorState, which can be either MutatorState::Running,
        MutatorState::Allocating, or MutatorState::HelpingGC.

        Collector state is described using Optional<CollectionScope>. CollectionScope describes how
        big the scope of the collection is, and it can be either CollectionScope::Eden or
        CollectionScope::Full. If the Optional is Nullopt, it means that we are not collecting. This
        way, you can treat collectionScope as a boolean (an Optional is true iff it's engaged). You
        can pass around just a CollectionScope if you know that you must be collecting and you just
        want to know about the generation. Also, we can use Nullopt in methods that request
        collection, which those methods take to mean that they can run any kind of collection (the
        old AnyCollection).

        Another use of HeapOperation was to answer questions about whether the caller is running as
        part of the GC or as part of the mutator. Optional<CollectionScope> does not answer this,
        since code that runs in the mutator while the mutator is not HelpingGC at the same time as
        the collector is running should run as if it was part of the mutator not as if it was part of
        the GC. MutatorState is needed to answer this question, but it doesn't tell the whole story
        since code that runs in the collector thread at the same time as the mutator is running
        should run as if it was part of the GC not as if it was part of the mutator. So, we need to
        know if we're on the collector thread or the mutator thread. We already have a WTF facility
        for this, which answers if a thread is a GC thread. But we already use this to answer a
        stronger question: are we part of the parallel GC helpers? Some functions in the GC, like
        mark bit queries, will work fine in a concurrent collector thread so long as there is no
        parallel marking. So, this change also changes WTF's mayBeGCThread to tell what kind of GC
        thread we may be: either GCThreadType::Main or GCThreadType::Helper. The parallel GC safety
        checks look for GCThreadType::Helper. The "should I run as mutator" query can now be answered
        by checking with mayBeGCThread, which returns Optional<GCThreadType>; if engaged, then run as
        GC, else run as GC if MutatorState is HelpingGC, else run as mutator.

        This doesn't change the way that the GC behaves, but it does change how the GC represents a
        fundamental piece of state. So, it's a big change. It should be perf-neutral (still testing).

        * API/JSBase.cpp:
        (JSSynchronousEdenCollectForDebugging):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::jettison):
        * dfg/DFGWorklist.cpp:
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * heap/AllocatingScope.h: Added.
        (JSC::AllocatingScope::AllocatingScope):
        (JSC::AllocatingScope::~AllocatingScope):
        * heap/AllocationScope.h: Removed.
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced):
        * heap/CodeBlockSet.h:
        * heap/CollectionScope.cpp: Added.
        (JSC::collectionScopeName):
        (WTF::printInternal):
        * heap/CollectionScope.h: Added.
        * heap/EdenGCActivityCallback.cpp:
        (JSC::EdenGCActivityCallback::doCollection):
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        * heap/GCTypeMap.h:
        (JSC::GCTypeMap::operator[]):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::markRoots):
        (JSC::Heap::beginMarking):
        (JSC::Heap::visitSmallStrings):
        (JSC::Heap::updateObjectCounts):
        (JSC::Heap::deleteAllCodeBlocks):
        (JSC::Heap::deleteUnmarkedCompiledCode):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collect):
        (JSC::Heap::collectWithoutAnySweep):
        (JSC::Heap::collectImpl):
        (JSC::Heap::willStartCollection):
        (JSC::Heap::flushWriteBarrierBuffer):
        (JSC::Heap::pruneStaleEntriesFromWeakGCMaps):
        (JSC::Heap::notifyIncrementalSweeper):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::didFinishCollection):
        (JSC::Heap::isValidAllocation):
        (JSC::Heap::shouldDoFullCollection):
        * heap/Heap.h:
        (JSC::Heap::mutatorState):
        (JSC::Heap::collectionScope):
        (JSC::Heap::operationInProgress): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::shouldCollect):
        (JSC::Heap::isCurrentThreadBusy):
        (JSC::Heap::isMarked):
        (JSC::Heap::reportExtraMemoryVisited):
        (JSC::Heap::reportExternalMemoryVisited):
        (JSC::Heap::collectAccordingToDeferGCProbability):
        (JSC::Heap::isBusy): Deleted.
        (JSC::Heap::isCollecting): Deleted.
        * heap/HeapObserver.h:
        * heap/HeapOperation.cpp: Removed.
        * heap/HeapOperation.h: Removed.
        * heap/HeapVerifier.cpp:
        (JSC::HeapVerifier::initializeGCCycle):
        (JSC::HeapVerifier::reportObject):
        (JSC::HeapVerifier::collectionTypeName): Deleted.
        * heap/HeapVerifier.h:
        (JSC::HeapVerifier::GCCycle::collectionTypeName): Deleted.
        * heap/HelpingGCScope.h: Added.
        (JSC::HelpingGCScope::HelpingGCScope):
        (JSC::HelpingGCScope::~HelpingGCScope):
        * heap/LargeAllocation.cpp:
        (JSC::LargeAllocation::flip):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::doTestCollectionsIfNeeded):
        (JSC::MarkedAllocator::allocateSlowCaseImpl):
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::prepareForAllocation):
        (JSC::MarkedSpace::visitWeakSets):
        (JSC::MarkedSpace::reapWeakSets):
        (JSC::MarkedSpace::prepareForMarking):
        (JSC::MarkedSpace::beginMarking):
        (JSC::MarkedSpace::snapshotUnswept):
        * heap/MutatorState.cpp: Added.
        (WTF::printInternal):
        * heap/MutatorState.h: Added.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didStartMarking):
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::protocolTypeForHeapOperation):
        (Inspector::InspectorHeapAgent::didGarbageCollect):
        * inspector/agents/InspectorHeapAgent.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        * jsc.cpp:
        (functionFullGC):
        (functionEdenGC):
        * runtime/Completion.cpp:
        (JSC::evaluate):
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        (JSC::linkAndEvaluateModule):
        * runtime/JSLock.cpp:
        (JSC::JSLock::DropAllLocks::DropAllLocks):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::needsToBeVisited):
        * runtime/VM.h:
        (JSC::VM::isCollectorBusyOnCurrentThread):
        (JSC::VM::isCollectorBusy): Deleted.
        * tools/JSDollarVMPrototype.cpp:
        (JSC::JSDollarVMPrototype::edenGC):

2016-10-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Drop isEnvironmentRecord type info flag and use JSType information instead
        https://bugs.webkit.org/show_bug.cgi?id=163761

        Reviewed by Keith Miller.

        When we call a function in the following form,

            var charAt = String.prototype.charAt;
            charAt();  // |this| becomes the global object.

        we should see |this| as undefined/null. In StringPrototype.cpp,
        we use IsEnvironmentRecord type info flag to check whther the
        given |this| is an environment record.
        However, type info flag is precious thing and only StringPrototype.cpp
        uses IsEnvironmentRecord. In addition to that, JSType should
        already knows whether the given object is an environment record.
        So IsEnvironmentRecord type info flag should be dropped.

        This patch adds a new JSType, StrictEvalActivation. And we add a new
        method JSObject::isEnvironmentRecord(). This method uses JSType to
        return the result. And we drop IsEnvironmentRecord type info flag.
        This patch makes a room for putting one bit flag to the out of line
        type info flag. Previously, it is already exhausted.

        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/JSObject.h:
        (JSC::JSObject::isStrictEvalActivation):
        (JSC::JSObject::isEnvironmentRecord):
        * runtime/JSSymbolTableObject.h:
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::newImpurePropertyFiresWatchpoints):
        (JSC::TypeInfo::isEnvironmentRecord): Deleted.
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::createStructure):
        * runtime/StringPrototype.cpp:
        (JSC::checkObjectCoercible):

2016-10-20  JF Bastien  <jfbastien@apple.com>

        WebAssembly API: implement exception constructors properly

         - Rename WebAssemblyObject to JSWebAssembly for consistency.
         - WebAssembly object now has its own prototype: add WebAssemblyPrototype, and
           use it to register JSWebAssembly's function properties through auto-generated
           .lut.h, instead of manually.
         - The error constructors used to throw (e.g. `new WebAssembly.CompileError()`).
         - Register WebAssembly's constructors from the global object, and hold a
           reference to their structure and prototype so that invoking the constructor
           can use the structure directly from the global object.
         - Add a prototype base field to global object creation. Previous ones all had
           Object's prototype as their base, but WebAssembly's error constructors have
           Error as their base.
         - Test for the error object's correctness.
         - Add missing #if ENABLE(WEBASSEMBLY)

        WebAssembly API: implement exception constructors properly
        https://bugs.webkit.org/show_bug.cgi?id=163699

        Reviewed by Keith Miller.

        * CMakeLists.txt: rename WebAssemblyObject -> JSWebAssembly; add a .lut.h file
        * DerivedSources.make: new .lut.h file
        * JavaScriptCore.xcodeproj/project.pbxproj: ditto
        * runtime/JSGlobalObject.cpp: new prototypeBase macro
        (JSC::JSGlobalObject::init): register WebAssembly constructors here
        (JSC::JSGlobalObject::visitChildren): use the macro to visit
        * runtime/JSGlobalObject.h: declare the WebAssembly constructor macro
        * wasm/JSWebAssembly.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::JSWebAssembly::create):
        (JSC::JSWebAssembly::createStructure):
        (JSC::JSWebAssembly::finishCreation):
        (JSC::JSWebAssembly::JSWebAssembly):
        * wasm/JSWebAssembly.h: Renamed from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/WebAssemblyObject.cpp: Removed.
        * wasm/js/JSWebAssemblyCompileError.cpp:
        * wasm/js/JSWebAssemblyCompileError.h:
        (JSC::JSWebAssemblyCompileError::create): string convenience
        * wasm/js/JSWebAssemblyInstance.cpp:
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyMemory.cpp:
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/JSWebAssemblyModule.cpp:
        * wasm/js/JSWebAssemblyModule.h:
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (JSC::JSWebAssemblyRuntimeError::create): string convenience
        * wasm/js/JSWebAssemblyTable.cpp:
        * wasm/js/JSWebAssemblyTable.h:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):don't throw, create the object
        (JSC::WebAssemblyCompileErrorConstructor::finishCreation):no need for the structure, it's on the global object
        * wasm/js/WebAssemblyCompileErrorConstructor.h:
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        * wasm/js/WebAssemblyCompileErrorPrototype.h:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        * wasm/js/WebAssemblyInstanceConstructor.h:
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        * wasm/js/WebAssemblyInstancePrototype.h:
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        * wasm/js/WebAssemblyMemoryConstructor.h:
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        * wasm/js/WebAssemblyMemoryPrototype.h:
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        * wasm/js/WebAssemblyModuleConstructor.h:
        * wasm/js/WebAssemblyModulePrototype.cpp:
        * wasm/js/WebAssemblyModulePrototype.h:
        * wasm/js/WebAssemblyPrototype.cpp: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyCompileErrorPrototype.cpp.
        (JSC::webAssemblyFunctionValidate):
        (JSC::webAssemblyFunctionCompile):
        (JSC::WebAssemblyPrototype::create):
        (JSC::WebAssemblyPrototype::createStructure):
        (JSC::WebAssemblyPrototype::finishCreation):
        (JSC::WebAssemblyPrototype::WebAssemblyPrototype):
        * wasm/js/WebAssemblyPrototype.h: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.h.
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):don't throw, create the object
        (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):no need for the structure, it's on the global object
        * wasm/js/WebAssemblyRuntimeErrorConstructor.h:
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        * wasm/js/WebAssemblyRuntimeErrorPrototype.h:
        * wasm/js/WebAssemblyTableConstructor.cpp:
        * wasm/js/WebAssemblyTableConstructor.h:
        * wasm/js/WebAssemblyTablePrototype.cpp:
        * wasm/js/WebAssemblyTablePrototype.h:

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2016-10-20  Caitlin Potter  <caitp@igalia.com>

        [JSC] disallow references to `await` in AsyncFunction formal parameters
        https://bugs.webkit.org/show_bug.cgi?id=163694

        Reviewed by Saam Barati.

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

2016-10-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Move InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero to out of line type info flags
        https://bugs.webkit.org/show_bug.cgi?id=163716

        Reviewed by Saam Barati.

        We found that all the accesses to the InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero flag is
        done through the Structure. There is no user that accesses this flag in the cell inlined member. And JIT
        code does not access it directly. That means that we can move this flag from inlined flags to out of line
        flags. This patch moves it to the out of line flags. And make one bit empty in inlined flags. Later this
        new empty flag will be used by megamorphic DOMJIT implementation.

        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::hasStaticPropertyTable):
        (JSC::TypeInfo::interceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero):

2016-10-20  Keith Miller  <keith_miller@apple.com>

        Invalid assertion in arguments elimination
        https://bugs.webkit.org/show_bug.cgi?id=163740
        <rdar://problem/27911462>

        Reviewed by Michael Saboff.

        The DFGFTL's arguments elimination phase incorrectly asserted that a GetFromArguments' first
        child would always be a CreateDirectArguments.  While we only create the
        op_get_from_arguments bytecode pointing to a create_direct_arguments, its possible for a
        number of reasons that a DFG GetFromArguments may not point to a CreateDirectArguments. For
        example, if we are OSR entering in some function with direct arguments the
        CreateDirectArguments node might become ExtractOSREntryLocals.

        * dfg/DFGArgumentsEliminationPhase.cpp:

2016-10-20  Caitlin Potter  <caitp@igalia.com>

        [JSC] throw TypeError when constructing dynamically created JSGeneratorFunction
        https://bugs.webkit.org/show_bug.cgi?id=163714

        Reviewed by Mark Lam.

        According to CreateDynamicFunction() (https://tc39.github.io/ecma262/#sec-createdynamicfunction),
        non-normal functions are not constructors. Previously, dynamically created functions would always
        be constructible, and so it was possible to evaluate `new  (function*() {}.constructor())`,
        and have it return an Iterator object.

        This change selects a dynamically created function's ConstructAbility based on its parse mode instead.

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

2016-10-19  JF Bastien  <jfbastien@apple.com>

        create_hash_table: allow empty tables

        The Windows build was broken by because I added empty tables and Windows insists that empty tables are horrible. Put in dummy entries in that case.

        create_hash_table: allow empty tables
        https://bugs.webkit.org/show_bug.cgi?id=163701

        Reviewed by Keith Miller.

        * create_hash_table:

2016-10-19  JF Bastien  <jfbastien@apple.com>

        JavaScript WebAssembly API: baby steps

         - Expand WebAssembly constructors into their own files. This requires a lot of
           boilerplate, as well as adding the .lut.h files. All of the
           JSWebAssembly*.{h,cpp}, as well as Constructor and Prototype files, are
           currently the same between the 4 specified WebAssembly constructors. It'll be
           easy to implement individual functions on constructed objects as per the
           spec, and have each of these files diverge. The error constructors are also
           similar, except that their instance derives from ErrorInstance.
         - Use constructor macro when initializing the global object.
         - Dramatically improve testing of the WebAssembly API by checking for
           properties specified in the spec [*].
         - Clean up assert.js' exception testing.
         - Fix a copy-paste bug in wasm.json: floating-point const return values were
           swapped.

        [*] https://github.com/WebAssembly/design/blob/master/JS.md

        Implement more of the JavaScript WebAssembly API
        https://bugs.webkit.org/show_bug.cgi?id=163571

        Reviewed by Keith Miller.

        * CMakeLists.txt: add .lut.h generation
        * DerivedSources.make: ditto
        * JavaScriptCore.xcodeproj/project.pbxproj: add .lut.h generation and all the new files
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): use macro to list all constructors
        * wasm/WebAssemblyObject.cpp: unboilerplate, all constructors into their own files
        * wasm/WebAssemblyObject.h: ditto
        * wasm/js/JSWebAssemblyCompileError.cpp: Added.
        (JSC::JSWebAssemblyCompileError::create):
        (JSC::JSWebAssemblyCompileError::createStructure):
        (JSC::JSWebAssemblyCompileError::JSWebAssemblyCompileError):
        (JSC::JSWebAssemblyCompileError::finishCreation):
        (JSC::JSWebAssemblyCompileError::destroy):
        (JSC::JSWebAssemblyCompileError::visitChildren):
        * wasm/js/JSWebAssemblyCompileError.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/JSWebAssemblyInstance.cpp: Added.
        (JSC::JSWebAssemblyInstance::create):
        (JSC::JSWebAssemblyInstance::createStructure):
        (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance):
        (JSC::JSWebAssemblyInstance::finishCreation):
        (JSC::JSWebAssemblyInstance::destroy):
        (JSC::JSWebAssemblyInstance::visitChildren):
        * wasm/js/JSWebAssemblyInstance.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/JSWebAssemblyMemory.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::JSWebAssemblyMemory::create):
        (JSC::JSWebAssemblyMemory::createStructure):
        (JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):
        (JSC::JSWebAssemblyMemory::finishCreation):
        (JSC::JSWebAssemblyMemory::destroy):
        (JSC::JSWebAssemblyMemory::visitChildren):
        * wasm/js/JSWebAssemblyMemory.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/JSWebAssemblyModule.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::JSWebAssemblyModule::create):
        (JSC::JSWebAssemblyModule::createStructure):
        (JSC::JSWebAssemblyModule::JSWebAssemblyModule):
        (JSC::JSWebAssemblyModule::finishCreation):
        (JSC::JSWebAssemblyModule::destroy):
        (JSC::JSWebAssemblyModule::visitChildren):
        * wasm/js/JSWebAssemblyModule.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/JSWebAssemblyRuntimeError.cpp: Added.
        (JSC::JSWebAssemblyRuntimeError::create):
        (JSC::JSWebAssemblyRuntimeError::createStructure):
        (JSC::JSWebAssemblyRuntimeError::JSWebAssemblyRuntimeError):
        (JSC::JSWebAssemblyRuntimeError::finishCreation):
        (JSC::JSWebAssemblyRuntimeError::destroy):
        (JSC::JSWebAssemblyRuntimeError::visitChildren):
        * wasm/js/JSWebAssemblyRuntimeError.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/JSWebAssemblyTable.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::JSWebAssemblyTable::create):
        (JSC::JSWebAssemblyTable::createStructure):
        (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
        (JSC::JSWebAssemblyTable::finishCreation):
        (JSC::JSWebAssemblyTable::destroy):
        (JSC::JSWebAssemblyTable::visitChildren):
        * wasm/js/JSWebAssemblyTable.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyCompileError):
        (JSC::callJSWebAssemblyCompileError):
        (JSC::WebAssemblyCompileErrorConstructor::create):
        (JSC::WebAssemblyCompileErrorConstructor::createStructure):
        (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
        (JSC::WebAssemblyCompileErrorConstructor::WebAssemblyCompileErrorConstructor):
        (JSC::WebAssemblyCompileErrorConstructor::getConstructData):
        (JSC::WebAssemblyCompileErrorConstructor::getCallData):
        (JSC::WebAssemblyCompileErrorConstructor::visitChildren):
        * wasm/js/WebAssemblyCompileErrorConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyCompileErrorConstructor::CompileErrorStructure):
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyCompileErrorPrototype::create):
        (JSC::WebAssemblyCompileErrorPrototype::createStructure):
        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
        (JSC::WebAssemblyCompileErrorPrototype::WebAssemblyCompileErrorPrototype):
        * wasm/js/WebAssemblyCompileErrorPrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyInstanceConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyInstance):
        (JSC::callJSWebAssemblyInstance):
        (JSC::WebAssemblyInstanceConstructor::create):
        (JSC::WebAssemblyInstanceConstructor::createStructure):
        (JSC::WebAssemblyInstanceConstructor::finishCreation):
        (JSC::WebAssemblyInstanceConstructor::WebAssemblyInstanceConstructor):
        (JSC::WebAssemblyInstanceConstructor::getConstructData):
        (JSC::WebAssemblyInstanceConstructor::getCallData):
        (JSC::WebAssemblyInstanceConstructor::visitChildren):
        * wasm/js/WebAssemblyInstanceConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyInstanceConstructor::InstanceStructure):
        * wasm/js/WebAssemblyInstancePrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyInstancePrototype::create):
        (JSC::WebAssemblyInstancePrototype::createStructure):
        (JSC::WebAssemblyInstancePrototype::finishCreation):
        (JSC::WebAssemblyInstancePrototype::WebAssemblyInstancePrototype):
        * wasm/js/WebAssemblyInstancePrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyMemoryConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyMemory):
        (JSC::callJSWebAssemblyMemory):
        (JSC::WebAssemblyMemoryConstructor::create):
        (JSC::WebAssemblyMemoryConstructor::createStructure):
        (JSC::WebAssemblyMemoryConstructor::finishCreation):
        (JSC::WebAssemblyMemoryConstructor::WebAssemblyMemoryConstructor):
        (JSC::WebAssemblyMemoryConstructor::getConstructData):
        (JSC::WebAssemblyMemoryConstructor::getCallData):
        (JSC::WebAssemblyMemoryConstructor::visitChildren):
        * wasm/js/WebAssemblyMemoryConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyMemoryConstructor::MemoryStructure):
        * wasm/js/WebAssemblyMemoryPrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyMemoryPrototype::create):
        (JSC::WebAssemblyMemoryPrototype::createStructure):
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        (JSC::WebAssemblyMemoryPrototype::WebAssemblyMemoryPrototype):
        * wasm/js/WebAssemblyMemoryPrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyModuleConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyModule):
        (JSC::callJSWebAssemblyModule):
        (JSC::WebAssemblyModuleConstructor::create):
        (JSC::WebAssemblyModuleConstructor::createStructure):
        (JSC::WebAssemblyModuleConstructor::finishCreation):
        (JSC::WebAssemblyModuleConstructor::WebAssemblyModuleConstructor):
        (JSC::WebAssemblyModuleConstructor::getConstructData):
        (JSC::WebAssemblyModuleConstructor::getCallData):
        (JSC::WebAssemblyModuleConstructor::visitChildren):
        * wasm/js/WebAssemblyModuleConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyModuleConstructor::ModuleStructure):
        * wasm/js/WebAssemblyModulePrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyModulePrototype::create):
        (JSC::WebAssemblyModulePrototype::createStructure):
        (JSC::WebAssemblyModulePrototype::finishCreation):
        (JSC::WebAssemblyModulePrototype::WebAssemblyModulePrototype):
        * wasm/js/WebAssemblyModulePrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyRuntimeError):
        (JSC::callJSWebAssemblyRuntimeError):
        (JSC::WebAssemblyRuntimeErrorConstructor::create):
        (JSC::WebAssemblyRuntimeErrorConstructor::createStructure):
        (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
        (JSC::WebAssemblyRuntimeErrorConstructor::WebAssemblyRuntimeErrorConstructor):
        (JSC::WebAssemblyRuntimeErrorConstructor::getConstructData):
        (JSC::WebAssemblyRuntimeErrorConstructor::getCallData):
        (JSC::WebAssemblyRuntimeErrorConstructor::visitChildren):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyRuntimeErrorConstructor::RuntimeErrorStructure):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyRuntimeErrorPrototype::create):
        (JSC::WebAssemblyRuntimeErrorPrototype::createStructure):
        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
        (JSC::WebAssemblyRuntimeErrorPrototype::WebAssemblyRuntimeErrorPrototype):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        * wasm/js/WebAssemblyTableConstructor.cpp: Added.
        (JSC::constructJSWebAssemblyTable):
        (JSC::callJSWebAssemblyTable):
        (JSC::WebAssemblyTableConstructor::create):
        (JSC::WebAssemblyTableConstructor::createStructure):
        (JSC::WebAssemblyTableConstructor::finishCreation):
        (JSC::WebAssemblyTableConstructor::WebAssemblyTableConstructor):
        (JSC::WebAssemblyTableConstructor::getConstructData):
        (JSC::WebAssemblyTableConstructor::getCallData):
        (JSC::WebAssemblyTableConstructor::visitChildren):
        * wasm/js/WebAssemblyTableConstructor.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyTableConstructor::TableStructure):
        * wasm/js/WebAssemblyTablePrototype.cpp: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.
        (JSC::WebAssemblyTablePrototype::create):
        (JSC::WebAssemblyTablePrototype::createStructure):
        (JSC::WebAssemblyTablePrototype::finishCreation):
        (JSC::WebAssemblyTablePrototype::WebAssemblyTablePrototype):
        * wasm/js/WebAssemblyTablePrototype.h: Copied from Source/JavaScriptCore/wasm/WebAssemblyObject.h.

2016-10-19  Caitlin Potter  <caitp@igalia.com>

        [JSC] forbid "use strict" directive in generator functions with non-simple parameters
        https://bugs.webkit.org/show_bug.cgi?id=163683

        Reviewed by Geoffrey Garen.

        Because generator functions and async functions both have an implicit
        inner function whose arguments are inherited from its parent, "use strict"
        directives within these functions did not yield a SyntaxError.

        Now, the correct syntax error is reported, fixing several test262 failures
        for generators and async functions.

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

2016-10-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207557.

        This change caused animations/font-variations tests to time
        out on pre-Sierra Macs.

        Reverted changeset:

        "[macOS] [iOS] Disable variation fonts on macOS El Capitan and
        iOS 9"
        https://bugs.webkit.org/show_bug.cgi?id=163374
        http://trac.webkit.org/changeset/207557

2016-10-19  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should use AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=163686

        Reviewed by Geoffrey Garen.

        Change the JITWorklist to use AutomaticThread, so that the Baseline JIT's concurrent
        compiler thread shuts down automatically after inactivity.

        With this change, all of JSC's threads shut down automatically. If you run splay for a few
        seconds (which fires up all threads - compiler and GC) and then go to sleep for a second,
        you'll see that the only threads left are the main thread and the bmalloc thread.

        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Thread::Thread):
        (JSC::JITWorklist::JITWorklist):
        (JSC::JITWorklist::completeAllForVM):
        (JSC::JITWorklist::poll):
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileNow):
        (JSC::JITWorklist::finalizePlans):
        (JSC::JITWorklist::runThread): Deleted.
        * jit/JITWorklist.h:

2016-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] [iOS] Disable variation fonts on macOS El Capitan and iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=163374

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2016-10-19  Aaron Chu  <aaron_chu@apple.com>

        Web Inspector: AXI: expose computed tree node and heading level
        https://bugs.webkit.org/show_bug.cgi?id=130825
        <rdar://problem/16442349>

        Reviewed by Joseph Pecoraro.

        Exposing two new accessibility properties: Heading Level and Hierarchical Level.

        * inspector/protocol/DOM.json:

2016-10-18  Filip Pizlo  <fpizlo@apple.com>

        DFG worklist should use AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=163615

        Reviewed by Mark Lam.

        AutomaticThread is a new feature in WTF that allows you to easily create worker threads that
        shut down automatically. This changes DFG::Worklist to use AutomaticThread, so that its
        threads shut down automatically, too. This has the potential to save a lot of memory.

        This required some improvements to AutomaticThread: Worklist likes to be able to keep state
        around for the whole lifetime of a thread, and so it likes knowing when threads are born and
        when they die. I added virtual methods for that. Also, Worklist uses notifyOne() so I added
        that, too.

        This looks to be perf-neutral.

        * dfg/DFGThreadData.cpp:
        (JSC::DFG::ThreadData::ThreadData):
        * dfg/DFGThreadData.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::ThreadBody::ThreadBody):
        (JSC::DFG::Worklist::Worklist):
        (JSC::DFG::Worklist::~Worklist):
        (JSC::DFG::Worklist::finishCreation):
        (JSC::DFG::Worklist::isActiveForVM):
        (JSC::DFG::Worklist::enqueue):
        (JSC::DFG::Worklist::compilationState):
        (JSC::DFG::Worklist::waitUntilAllPlansForVMAreReady):
        (JSC::DFG::Worklist::removeAllReadyPlansForVM):
        (JSC::DFG::Worklist::completeAllReadyPlansForVM):
        (JSC::DFG::Worklist::rememberCodeBlocks):
        (JSC::DFG::Worklist::visitWeakReferences):
        (JSC::DFG::Worklist::removeDeadPlans):
        (JSC::DFG::Worklist::removeNonCompilingPlansForVM):
        (JSC::DFG::Worklist::queueLength):
        (JSC::DFG::Worklist::dump):
        (JSC::DFG::Worklist::runThread): Deleted.
        (JSC::DFG::Worklist::threadFunction): Deleted.
        * dfg/DFGWorklist.h:

2016-10-19  Dan Bernstein  <mitz@apple.com>

        [Xcode] JavaScriptCore fails to build when CLANG_WARN_DOCUMENTATION_COMMENTS is enabled
        https://bugs.webkit.org/show_bug.cgi?id=163642

        Reviewed by Darin Adler.

        * API/JSClassRef.cpp: Removed a bad headerdoc comment inside an implementation file.
        * API/JSContext.h: Changed @methodgroup to @functiongroup, because the compiler requires the
          former to be followed by a method (and we have a property), but not the latter. Changed
          a couple of instances of “method” to “@method”. Removed empty @param entries.
        * API/JSContextRefInternal.h: Named a parameter referenced in a @param entry.
        * API/JSContextRefPrivate.h: Ditto.
        * API/JSManagedValue.h: Removed empty @param entries.
        * API/JSObjectRef.h: Corrected parameter name in @param entry.
        * API/JSTypedArray.h: Ditto.
        * API/JSValue.h: Removed empty @param entries, changed @methodgroup to @functiongroup, and
          changed @method to @property where appropriate. Removed empty @param entries.
        * API/JSValueRef.h: Named a parameter referenced in a @param entry.
        * API/JSWeakObjectMapRefPrivate.h: Ditto.
        * Configurations/Base.xcconfig: Enabled CLANG_WARN_DOCUMENTATION_COMMENTS. Made the compiler
          treat the icu headers as system headers, to stop it from emitting warnings about headers
          we don’t want to change.
        * Configurations/ToolExecutable.xcconfig: Made the compiler treat the icu headers as system
          headers.

2016-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed ARM buildfix after r207475.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::relinkJumpToNop):

2016-10-18  Mark Lam  <mark.lam@apple.com>

        Invoking Object.prototype.__proto__ accessors directly should throw a TypeError.
        https://bugs.webkit.org/show_bug.cgi?id=154377
        <rdar://problem/27330808>

        Reviewed by Filip Pizlo and Saam Barati.

        In a scenario where we cache the __proto__ accessors in global variables, and
        later explicitly invoke those accessors as functions, the spec for Function Calls
        (see https://tc39.github.io/ecma262/#sec-function-calls) states that the function
        ref value is of type Reference, and base of ref is an Environment Record.  Then,
        it follows that the thisValue should be set to refEnv.WithBaseObject()
        (see section 4.b.ii of 12.3.4.1 at
        https://tc39.github.io/ecma262/#sec-function-calls-runtime-semantics-evaluation).

        refEnv in this case is the environment record that the cached accessors were
        found in i.e. the global object.  The WithBaseObject() of the global object is
        undefined (see details about WithBaseObject at
        https://tc39.github.io/ecma262/#sec-environment-records).

        Hence, the __proto__ accessors should see a thisValue of undefined, and throw
        TypeErrors.  See https://tc39.github.io/ecma262/#sec-get-object.prototype.__proto__,
        https://tc39.github.io/ecma262/#sec-set-object.prototype.__proto__,
        https://tc39.github.io/ecma262/#sec-toobject, and
        https://tc39.github.io/ecma262/#sec-requireobjectcoercible.

        In JSC's implementation, the callee needs to do a ToThis operation on the
        incoming "this" argument in order to get the specified thisValue.  The
        implementations of the __proto__ accessors were not doing this correctly.  This
        has now been fixed.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncProtoGetter):
        (JSC::globalFuncProtoSetter):

2016-10-18  Sam Weinig  <sam@webkit.org>

        Replace std::experimental::variant with WTF::Variant (or similar)
        https://bugs.webkit.org/show_bug.cgi?id=163626

        Reviewed by Chris Dumez.

        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
        into the WTF namespace.

        * domjit/DOMJITReg.h:
        (JSC::DOMJIT::Reg::gpr):
        (JSC::DOMJIT::Reg::fpr):
        (JSC::DOMJIT::Reg::jsValueRegs):

2016-10-18  Keith Miller  <keith_miller@apple.com>

        GetByVal to GetById conversion in the DFG is incorrect for getters with control flow
        https://bugs.webkit.org/show_bug.cgi?id=163629

        Reviewed by Yusuke Suzuki.

        This patch fixes a bug in the DFG when attempt to convert a
        GetByVal into a GetById. While converting the GetByVal, during
        handleGetById in the Bytecode parser, we would mistakenly use the
        opcode length of op_get_by_id rather than op_get_by_val. This causes
        the new basic block we create to point to the wrong offset. In the
        added test this will cause us to infinite loop.

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

2016-10-18  Dean Jackson  <dino@apple.com>

        Remove CSS_SHAPES feature definition. This should always be on.
        https://bugs.webkit.org/show_bug.cgi?id=163628
        <rdar://problem/28834613>
        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2016-10-18  Michael Saboff  <msaboff@apple.com>

        Add JSC option to show time spent in each optimization phase
        https://bugs.webkit.org/show_bug.cgi?id=163617

        Reviewed by Saam Barati.

        Added reportDFGPhaseTimes option.  This outputs one line per phase similar to
            Phase CPS rethreading took 0.2661 ms

        One line is output for each phase run.

        * dfg/DFGPhase.h:
        (JSC::DFG::runAndLog):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThread):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:

2016-10-18  Filip Pizlo  <fpizlo@apple.com>

        WTF should make it easier to create threads that die automatically after inactivity
        https://bugs.webkit.org/show_bug.cgi?id=163576

        Reviewed by Andreas Kling.

        Added a sleepSeconds() function, which made it easier for me to test this change.

        The WTF changes in this patch change how the JSC GC manages threads: the GC threads will now
        shut down automatically after 1 second of inactivity. Maybe this will save some memory.

        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionSleepSeconds):

2016-10-18  Keith Miller  <keith_miller@apple.com>

        Cleanup Wasm memory.
        https://bugs.webkit.org/show_bug.cgi?id=163601

        Reviewed by Saam Barati.

        There were a couple of issues with the original Wasm memory patch.
        This is a follow-up patch to fix those issues.

        * wasm/WASMMemory.cpp:
        (JSC::WASM::Memory::Memory):
        * wasm/WASMMemory.h:

2016-10-15  Filip Pizlo  <fpizlo@apple.com>

        DFG and FTL should be able to use DirectCall ICs when they proved the callee or its executable
        https://bugs.webkit.org/show_bug.cgi?id=163371

        Reviewed by Geoffrey Garen and Saam Barati.

        This adds a new kind of call inline cache for when the DFG can prove what the callee
        executable is. In those cases, we can skip some of the things that the traditional call IC
        would do:

        - No need to check who the callee is.
        - No need to do arity checks.

        This case isn't as simple as just emitting a call instruction since the callee may not be
        compiled at the time that the caller is compiled. So, we need lazy resolution. Also, the
        callee may be jettisoned independently of the caller, so we need to be able to revert the
        call to an unlinked state. This means that we need almost all of the things that
        CallLinkInfo has. CallLinkInfo already knows about different kinds of calls. This patch
        teaches it about new "Direct" call types.

        The direct non-tail call IC looks like this:

                set up arguments
            FastPath:
                call _SlowPath
                lea -FrameSize(%rbp), %rsp

            SlowPath:
                pop
                call operationLinkDirectCall
                check exception
                jmp FastPath

        The job of operationLinkDirectCall is to link the fast path's call entrypoint of the callee.
        This means that in steady state, a call is just that: a call. There are no extra branches or
        checks.

        The direct tail call IC is a bit more complicated because the act of setting up arguments
        destroys our frame, which would prevent us from being able to throw an exception if we
        failed to compile the callee. So, direct tail call ICs look like this:

                jmp _SlowPath
            FastPath:
                set up arguments
                jmp 0 // patch to jump to callee

            SlowPath:
                silent spill
                call operationLinkDirectCall
                silent fill
                check exception
                jmp FastPath

        The jmp to the slow path is patched to be a fall-through jmp when we link the call.

        Direct calls mean less code at call sites, fewer checks on the steady state call fast path,
        and no need for arity fixup. This looks like a slight speed-up (~0.8%) on both Octane and
        AsmBench.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::relinkJumpToNop):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::relinkJumpToNop):
        (JSC::ARMv7Assembler::relinkJump): Deleted.
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::repatchJumpToNop):
        (JSC::AbstractMacroAssembler::repatchJump): Deleted.
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::relinkJumpToNop):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::callReturnLocation):
        (JSC::CallLinkInfo::patchableJump):
        (JSC::CallLinkInfo::hotPathBegin):
        (JSC::CallLinkInfo::slowPathStart):
        (JSC::CallLinkInfo::setCallee):
        (JSC::CallLinkInfo::clearCallee):
        (JSC::CallLinkInfo::callee):
        (JSC::CallLinkInfo::setCodeBlock):
        (JSC::CallLinkInfo::clearCodeBlock):
        (JSC::CallLinkInfo::codeBlock):
        (JSC::CallLinkInfo::setLastSeenCallee):
        (JSC::CallLinkInfo::clearLastSeenCallee):
        (JSC::CallLinkInfo::lastSeenCallee):
        (JSC::CallLinkInfo::haveLastSeenCallee):
        (JSC::CallLinkInfo::setExecutableDuringCompilation):
        (JSC::CallLinkInfo::executable):
        (JSC::CallLinkInfo::setMaxNumArguments):
        (JSC::CallLinkInfo::visitWeak):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::specializationKindFor):
        (JSC::CallLinkInfo::callModeFor):
        (JSC::CallLinkInfo::isDirect):
        (JSC::CallLinkInfo::nearCallMode):
        (JSC::CallLinkInfo::isLinked):
        (JSC::CallLinkInfo::setCallLocations):
        (JSC::CallLinkInfo::addressOfMaxNumArguments):
        (JSC::CallLinkInfo::maxNumArguments):
        (JSC::CallLinkInfo::isTailCall): Deleted.
        (JSC::CallLinkInfo::setUpCallFromFTL): Deleted.
        (JSC::CallLinkInfo::callReturnLocation): Deleted.
        (JSC::CallLinkInfo::hotPathBegin): Deleted.
        (JSC::CallLinkInfo::callee): Deleted.
        (JSC::CallLinkInfo::setLastSeenCallee): Deleted.
        (JSC::CallLinkInfo::clearLastSeenCallee): Deleted.
        (JSC::CallLinkInfo::lastSeenCallee): Deleted.
        (JSC::CallLinkInfo::haveLastSeenCallee): Deleted.
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeDFGStatuses):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::forEachReg):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::findTerminal):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCallWithoutSettingResult):
        (JSC::DFG::ByteCodeParser::handleCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::parameterSlotsForArgCount):
        * dfg/DFGGraph.h:
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::mergeToSuccessors):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addJSDirectCall):
        (JSC::DFG::JITCompiler::addJSDirectTailCall):
        (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
        (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord):
        (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord):
        (JSC::DFG::JITCompiler::currentJSCallIndex): Deleted.
        * dfg/DFGNode.cpp:
        (JSC::DFG::Node::convertToDirectCall):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isTerminal):
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasCellOperand):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITCall.cpp:
        (JSC::JIT::compileSetupVarargsFrame):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileSetupVarargsFrame):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/Repatch.cpp:
        (JSC::linkDirectFor):
        (JSC::revertCall):
        * jit/Repatch.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * runtime/Executable.cpp:
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::prepareForExecution):
        * runtime/Options.h:

2016-10-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Not emit exception case if it is not necessary
        https://bugs.webkit.org/show_bug.cgi?id=163589

        Reviewed by Sam Weinig.

        We should not emit exception case if we do not use the slow path calls.
        For example, nodeType accessor does not use the slow path calls.

        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::emitDOMJITGetter):

2016-10-18  Caitlin Potter  <caitp@igalia.com>

        [JSC] ES6 Method functions should not have prototype
        https://bugs.webkit.org/show_bug.cgi?id=162530

        Reviewed by Saam Barati.

        ECMA-262 only adds "prototype" properties to specific syntactic function forms.
        Specific items which do not contain "prototype" include (most) built-in functions (such as Math.pow),
        MethodDefinitions which are not either class "constructor" methods or GeneratorMethods, AsyncFunctions,
        and ArrowFunctions.

        For details, see the following spec text, and the difference between GeneratorMethod evaluation and
        the evaluation of other MethodDefinition forms.

        - https://tc39.github.io/ecma262/#sec-method-definitions-runtime-semantics-propertydefinitionevaluation
        - https://tc39.github.io/ecma262/#sec-arrow-function-definitions-runtime-semantics-evaluation
        - https://tc39.github.io/ecmascript-asyncawait/#async-function-instances
        - https://tc39.github.io/ecma262/#sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation


        * runtime/Executable.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::deleteProperty):

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * runtime/Executable.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnNonIndexPropertyNames):
        (JSC::JSFunction::put):
        (JSC::JSFunction::deleteProperty):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller):

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Use NativeCallFrameTracer for operations used for DOMJIT slow calls
        https://bugs.webkit.org/show_bug.cgi?id=163586

        Reviewed by Saam Barati.

        C functions called from the DOMJIT slow path calls should use NativeCallFrameTracer.
        This fixes the debug assertion caused in r207427.

        * bytecode/DOMJITAccessCasePatchpointParams.cpp:
        (JSC::SlowPathCallGeneratorWithArguments::generateImpl):
        (JSC::DOMJITAccessCasePatchpointParams::emitSlowPathCalls):
        * bytecode/DOMJITAccessCasePatchpointParams.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::emitDOMJITGetter):
        * jsc.cpp:
        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::slowCall):
        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::slowCall):

2016-10-17  Keith Miller  <keith_miller@apple.com>

        Add support for WASM Memory.
        https://bugs.webkit.org/show_bug.cgi?id=161710

        Reviewed by Geoffrey Garen.

        This patch add initial support for WASM memory operations. First,
        it adds the concept of a WASM Module memory management object.
        This object currently mmaps a 32-bit address space for WASM use,
        although it marks all the memory outside the current breakpoint as
        PROT_NONE. For now, we do a range check on each store and load. In
        the future, we should change this to be an signal handler that
        checks what module the program trapped in.

        Additionally, this patch changes the way that our temporary tests
        call into WASM code. There is now a true "thunk" that relocates
        arguments and calls into WASM. This thunk does not tail call
        because we use pinned values to memory base-pointer and
        size. We use the new B3 pinned register api to pin the values.

        * CMakeLists.txt:
        * Configurations/ToolExecutable.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * testWASM.cpp:
        (runWASMTests):
        (main):
        * wasm/WASMB3IRGenerator.cpp:
        (JSC::WASM::createJSWrapper):
        (JSC::WASM::parseAndCompile):
        * wasm/WASMB3IRGenerator.h:
        * wasm/WASMCallingConvention.h:
        (JSC::WASM::CallingConvention::iterate):
        (JSC::WASM::CallingConvention::setupCall):
        (JSC::WASM::nextJSCOffset):
        * wasm/WASMFormat.h:
        * wasm/WASMFunctionParser.h:
        (JSC::WASM::FunctionParser<Context>::parseExpression):
        * wasm/WASMMemory.cpp: Copied from Source/JavaScriptCore/wasm/WASMPlan.cpp.
        (JSC::WASM::Memory::Memory):
        * wasm/WASMMemory.h: Copied from Source/JavaScriptCore/wasm/WASMModuleParser.h.
        (JSC::WASM::Memory::~Memory):
        (JSC::WASM::Memory::memory):
        (JSC::WASM::Memory::size):
        (JSC::WASM::Memory::pinnedRegisters):
        (JSC::WASM::Memory::mode):
        (JSC::WASM::Memory::growMemory):
        (JSC::WASM::Memory::offsetOfSize):
        * wasm/WASMModuleParser.cpp:
        (JSC::WASM::ModuleParser::parse):
        (JSC::WASM::ModuleParser::parseMemory):
        * wasm/WASMModuleParser.h:
        (JSC::WASM::ModuleParser::functionInformation):
        (JSC::WASM::ModuleParser::memory):
        * wasm/WASMOps.h:
        * wasm/WASMPlan.cpp:
        (JSC::WASM::Plan::Plan):
        * wasm/WASMPlan.h:
        * wasm/WASMSections.h:

2016-10-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add toggles for debugger pauses at console.assert failures
        https://bugs.webkit.org/show_bug.cgi?id=139542
        <rdar://problem/19281600>

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::disable):
        (Inspector::InspectorDebuggerAgent::setPauseOnAssertions):
        Toggle pause on assertions state. Default is disabled,
        and disable it when frontends disconnect.

        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
        Instead of using the PauseOnAllExceptions state, use this
        new state specific to assertions.

        * inspector/protocol/Debugger.json:
        New protocol method to toggle pausing on assertions.

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT][JSC] Add Option::useDOMJIT
        https://bugs.webkit.org/show_bug.cgi?id=163457

        Reviewed by Saam Barati.

        Add an option to switch the DOMJIT optimization.

        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleGetById):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/Options.h:

2016-10-17  Filip Pizlo  <fpizlo@apple.com>

        Air::IRC doesn't need to have a special-case for uncolored Tmps since they all get colored
        https://bugs.webkit.org/show_bug.cgi?id=163548
        <rdar://problem/28804381>

        Reviewed by Geoffrey Garen.

        Before r207408, IRC had a mode where it would silently assign the first assignable register (so
        %rax, %xmm0, etc) to any tmp that was not colorable due to a pathological interference fencepost.
        We reason about interference at instruction boundaries. This means that if you have, for example,
        an instruction that clobbers all registers late followed by an instruction that has an early def
        in the same register file, then the early def will not be colorable because it interferes with
        all registers. This already happens in our tests, but IRC silently returns the first assignable
        register to such tmps. For some reason the resulting code works OK - probably because this tends
        to only be hit by fuzzing, which may not then stress that code enough to shake out the register
        corruption. Also, this can only happen for floating point registers, so it's hard to get an
        exciting crash. The worst case is that your numbers get all messed up.

        This change fixes the issue:

        - IRC will now crash if it can't color a tmp.

        - IRC doesn't crash on our tests anymore because I added a padInterference() utility that works
          around the interference problem by inserting Nops to pad between those instructions where
          conflating their early and late actions into one interference fencepost could create an
          uncolorable graph.

        See https://bugs.webkit.org/show_bug.cgi?id=163548#c2 for a detailed discussion of how the
        problem can arise.

        This problem almost made me want to abandon our use of interference at instruction boundaries,
        and introduce something more comprehensive, like interference at various stages of an
        instruction's execution. The reason why I didn't do this is that this problem only arises in well
        confined corner cases: you need an instruction that does a late use or def followed by an
        instruction that does an early def. Register clobbers count as defs for this equation.
        Fortunately, early defs are rare, and even when they do happen, you still need the previous
        instruction to have a late something. Late uses are rare and many instructions don't have defs at
        all, which means that it's actually pretty common for an instruction to not have anything late.
        This means that the padInterference() strategy is ideal: our algorithms stay simple because they
        only have to worry about interference at boundaries, and we rarely insert any Nops in
        padInterference() so the IR stays nice and compact. Those Nops get removed by any phase that does
        DCE, which includes eliminateDeadCode(), allocateStack(), and reportUsedRegisters(). In practice
        allocateStack() kills them.

        This also finally refactors our passing of RegisterSet to pass it by value, since it's small
        enough that we're not gaining anything by using references. On x86, RegisterSet ought to be
        smaller than a pointer.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3StackmapSpecial.cpp:
        (JSC::B3::StackmapSpecial::extraClobberedRegs):
        (JSC::B3::StackmapSpecial::extraEarlyClobberedRegs):
        * b3/B3StackmapSpecial.h:
        * b3/air/AirCCallSpecial.cpp:
        (JSC::B3::Air::CCallSpecial::extraEarlyClobberedRegs):
        (JSC::B3::Air::CCallSpecial::extraClobberedRegs):
        * b3/air/AirCCallSpecial.h:
        * b3/air/AirInst.h:
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::Inst::extraClobberedRegs):
        (JSC::B3::Air::Inst::extraEarlyClobberedRegs):
        * b3/air/AirIteratedRegisterCoalescing.cpp:
        (JSC::B3::Air::iteratedRegisterCoalescing):
        * b3/air/AirPadInterference.cpp: Added.
        (JSC::B3::Air::padInterference):
        * b3/air/AirPadInterference.h: Added.
        * b3/air/AirSpecial.h:
        * b3/air/AirSpillEverything.cpp:
        (JSC::B3::Air::spillEverything):
        * jit/RegisterSet.h:
        (JSC::RegisterSet::isEmpty):

2016-10-17  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: implement basic stub

        Implement the global WebAssembly JavaScript object, and its constructor +
        function properties as described in:
          https://github.com/WebAssembly/design/blob/master/JS.md

        These don't do anything at the moment, the parent bug will take care of adding
        more functionality and associated tests.

        WebAssembly JS API: implement basic stub
        https://bugs.webkit.org/show_bug.cgi?id=163404

        Reviewed by Keith Miller.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/BuiltinNames.h: register the new WebAssembly object's name and its constructor properties
        * jsc.cpp: remove useless include
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): add the WebAssembly global object and its constructor properties, but only if the JSC option enables it
        * runtime/Options.h: add the useWebAssembly (alias: enableWebAssembly) option, defaulting to false
        * wasm/WebAssemblyObject.cpp: Added.
        (JSC::WebAssemblyObject::create): boilerplate
        (JSC::WebAssemblyObject::createStructure): boilerplate
        (JSC::WebAssemblyObject::finishCreation): boilerplate
        (JSC::WebAssemblyObject::WebAssemblyObject): boilerplate
        (JSC::wasmObjectFuncvalidate): auto-throws for now
        (JSC::wasmObjectFunccompile): auto-throws for now
        * wasm/WebAssemblyObject.h: Added.

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

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

        Previous build fix r207428 broke all the builds.

        * bytecode/PolymorphicAccess.h:

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for GTK and Windows
        https://bugs.webkit.org/show_bug.cgi?id=163223

        Attempt to fix build failures in GTK port and Windows port.

        * bytecode/PolymorphicAccess.cpp:
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::SpillState::SpillState):

2016-10-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Use DOMJIT::Patchpoint in IC
        https://bugs.webkit.org/show_bug.cgi?id=163223

        Reviewed by Saam Barati.

        This patch uses DOMJIT::Patchpoint to inline DOM accesses even in IC!
        It is useful for Baseline JIT cases and GetById cases in DFG and FTL.
        In AccessCase, we construct the environment that allows DOMJIT::Patchpoint
        to emit code and make DOMJIT accessors inlined in IC.

        To allow DOMJIT::Patchpoint to emit code, we create a mechanism to emit calls
        required in DOMJIT::Patchpoint. This system is useful when we create the super-
        polymorphic support[1] later. And inlining mechanism is useful even after
        introducing super-polymorphic support since it can work even after we fire the
        watchpoint for super-polymorphic handling.

        This patch improves Dromaeo dom-traverse 8% (263.95 runs/s v.s. 244.07 runs/s).

        [1]: https://bugs.webkit.org/show_bug.cgi?id=163226

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/DOMJITAccessCasePatchpointParams.cpp: Added.
        (JSC::SlowPathCallGeneratorWithArguments::SlowPathCallGeneratorWithArguments):
        (JSC::SlowPathCallGeneratorWithArguments::generateImpl):
        (JSC::DOMJITAccessCasePatchpointParams::emitSlowPathCalls):
        * bytecode/DOMJITAccessCasePatchpointParams.h: Copied from Source/JavaScriptCore/ftl/FTLDOMJITPatchpointParams.h.
        (JSC::DOMJITAccessCasePatchpointParams::DOMJITAccessCasePatchpointParams):
        (JSC::DOMJITAccessCasePatchpointParams::SlowPathCallGenerator::~SlowPathCallGenerator):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::liveRegistersForCall):
        (JSC::AccessGenerationState::liveRegistersToPreserveAtExceptionHandlingCallSite):
        (JSC::calleeSaveRegisters):
        (JSC::AccessGenerationState::calculateLiveRegistersForCallAndExceptionHandling):
        (JSC::AccessGenerationState::restoreLiveRegistersFromStackForCallWithThrownException):
        (JSC::AccessGenerationState::restoreLiveRegistersFromStackForCall):
        (JSC::AccessGenerationState::callSiteIndexForExceptionHandlingOrOriginal):
        (JSC::AccessGenerationState::originalExceptionHandler):
        (JSC::AccessCase::generateImpl):
        (JSC::AccessCase::emitDOMJITGetter):
        (JSC::PolymorphicAccess::regenerate):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCall): Deleted.
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::SpillState::isEmpty):
        (JSC::AccessGenerationState::setSpillStateForJSGetterSetter):
        (JSC::AccessGenerationState::spillStateForJSGetterSetter):
        (JSC::AccessGenerationState::liveRegistersForCall): Deleted.
        (JSC::AccessGenerationState::numberOfStackBytesUsedForRegisterPreservation): Deleted.
        (JSC::AccessGenerationState::liveRegistersToPreserveAtExceptionHandlingCallSite): Deleted.
        * dfg/DFGDOMJITPatchpointParams.cpp:
        * dfg/DFGDOMJITPatchpointParams.h:
        * domjit/DOMJITPatchpoint.h:
        * domjit/DOMJITPatchpointParams.h:
        (JSC::DOMJIT::PatchpointParams::addSlowPathCall):
        * ftl/FTLDOMJITPatchpointParams.cpp:
        * ftl/FTLDOMJITPatchpointParams.h:
        * jsc.cpp:
        (WTF::DOMJITNode::checkDOMJITNode):
        (WTF::DOMJITGetterComplex::DOMJITGetterComplex):
        (WTF::DOMJITGetterComplex::createStructure):
        (WTF::DOMJITGetterComplex::create):
        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
        (WTF::DOMJITGetterComplex::domJITNodeGetterSetter):
        (WTF::DOMJITGetterComplex::finishCreation):
        (WTF::DOMJITGetterComplex::functionEnableException):
        (WTF::DOMJITGetterComplex::customGetter):
        (GlobalObject::finishCreation):
        (functionCreateDOMJITGetterComplexObject):

2016-10-17  Saam Barati  <sbarati@apple.com>

        Build fix for HasOwnPropertyCache::Entry caused slowdown by introducing a constructor that doesn't use move semantics for the RefPtr<UniquedStringImpl> parameter
        https://bugs.webkit.org/show_bug.cgi?id=163490

        Reviewed by Darin Adler.

        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::Entry::Entry):
        (JSC::HasOwnPropertyCache::tryAdd):

2016-10-17  Mark Lam  <mark.lam@apple.com>

        Use the reject() helper function for conditionally throwing TypeErrors.
        https://bugs.webkit.org/show_bug.cgi?id=163491

        Reviewed by Filip Pizlo.

        In some places where we may conditionally throw a TypeError (e.g. when in strict
        mode), we already use the reject() helper function to conditionally throw the
        TypeError.  Doing so makes the code mode compact.  This patch applies this idiom
        consistently in all places that throws TypeError where appropriate.

        This patch also does the following:
        1. Make the reject() helper function take an ASCIILiteral instead of a const char*
           because we always pass it a literal string anyway.
        2. Change the reject helper() to take a ThrowScope&.  This allows the thrown
           error to be attributed to its caller.
        3. When an error message string is instantiated repeatedly in more than 1 place,
           create a common copy of that literal string in JSObject.cpp (if one doesn't
           already exist) and use that common string in all those places.
        4. Since I was auditing call sites of throwTypeError() to check if they should be
           using the reject() helper instead, I also fixed those up to pass the error
           message as an ASCIILiteral where appropriate.
        5. In functions that I touched, change the code to not recompute the VM& when it
           is already available.

        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/ArrayPrototype.cpp:
        (JSC::shift):
        (JSC::unshift):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncReverse):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/GetterSetter.cpp:
        (JSC::callSetter):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::setLengthWithArrayStorage):
        (JSC::JSArray::pop):
        * runtime/JSArrayBuffer.cpp:
        (JSC::JSArrayBuffer::put):
        (JSC::JSArrayBuffer::defineOwnProperty):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        (JSC::JSValue::putToPrimitiveByIndex):
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::put):
        (JSC::JSDataView::defineOwnProperty):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView::setIndex):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::defineOwnProperty):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::JSObject::defineOwnIndexedProperty):
        (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
        (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
        (JSC::validateAndApplyPropertyDescriptor):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putInline):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::setPrototype):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTablePut):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::defineOwnProperty):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
        * runtime/Reject.h:
        (JSC::reject):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putEntry):
        (JSC::SparseArrayValueMap::putDirect):
        (JSC::SparseArrayEntry::put):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::StringObject::putByIndex):
        * runtime/SymbolConstructor.cpp:
        (JSC::symbolConstructorKeyFor):

2016-10-16  Filip Pizlo  <fpizlo@apple.com>

        Air::IRC needs to place all Tmps on some worklist, even if they have no interference edges
        https://bugs.webkit.org/show_bug.cgi?id=163509

        Reviewed by Mark Lam.

        The worklist building function in IRC skips temporaries that have no degree. This doesn't appear
        to be necessary. This has been there since the original IRC commit. It hasn't caused bugs because
        ordinarily, the only way to have a tmp with no degree is to not have any mention of that tmp. But
        while working on bug 163371, I hit a crazy corner case where a temporary would have no
        interference edges (i.e. no degree). Here's how it happens:

        A spill tmp from a previous iteration of IRC may have no degree: imagine a tmp that is live
        everywhere and interferes with everyone, but has one use like:

        Move %ourTmp, %someOtherTmp

        Where there are no other tmps live.  After spill conversion, this may look like:

        Move (ourSpill), %newTmp
        Move %newTmp, %someOtherTmp

        Of course, we'd rather not get this kind of spill code but it's totally possible because we now
        have a bunch of random conditions under which we won't slap the spill address directly into the
        Move.

        After this happens, assuming that the only thing live was %someOtherTmp, we will have zero degree
        for %newTmp because the Move is coalescable and does not contribute to interference.

        Then, we might coalesce %someOtherTmp with %newTmp.  Once this happens, if we make the %newTmp be
        the master, we're in deep trouble because %newTmp is not on any worklist.

        I don't know how to reproduce this except through the patch in bug 163371. Removing the two lines
        of code that skipped no-degree tmps causes no regressions, and resolves the problem I was having.

        * b3/air/AirIteratedRegisterCoalescing.cpp:

2016-10-15  Mark Lam  <mark.lam@apple.com>

        Add a $vm.getpid() method.
        https://bugs.webkit.org/show_bug.cgi?id=163493

        Reviewed by Saam Barati.

        This is especially useful when we need to know the pid of an instance of jsc in
        the foreground that we're trying to attach a debugger to while the JSC tests are
        running in the background with a gazillion other jsc processes live at the same
        time.

        Currently, $vm.getpid() is only supported on non-Windows platforms.
        According to https://msdn.microsoft.com/en-us/library/ms235372.aspx, getpid() is
        deprecated.  According to https://msdn.microsoft.com/en-us/library/t2y34y40.aspx,
        _getpid() cannot be used in applications that execute in the Windows Runtime.

        Since this is only a debugging tool and is not a required feature, I'll defer
        the Windows implementation of this function till the time when someone actually
        needs it.

        * tools/JSDollarVMPrototype.cpp:
        (JSC::functionGetPID):
        (JSC::JSDollarVMPrototype::finishCreation):

2016-10-15  Saam Barati  <sbarati@apple.com>

        Assertion failed under operationToLowerCase with a rope with zero length
        https://bugs.webkit.org/show_bug.cgi?id=163314

        Reviewed by Mark Lam.

        There are some ways to get JSC to create empty rope strings. ToLowerCase
        inside the DFG/FTL goes to the slow path when the argument is a rope.
        operationToLowerCase was calling into a WTF string function that
        assumed we are passing it a this value that has non-zero length.
        However, we were calling it with a string that did have zero length.
        To fix this, we make operationToLowerCase return the empty JSString
        if it is going to make a string with zero length.

        * dfg/DFGOperations.cpp:
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionIsRope):

2016-10-14  Benjamin Poulain  <bpoulain@apple.com>

        [JSC] op_negate should with any type
        https://bugs.webkit.org/show_bug.cgi?id=162587

        Reviewed by Saam Barati.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        ArithNegate is quite simple. If the input is double, the output
        is double. The other cases are set from the LLInt slow case.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        Tweak a bit the IntegerRangeOptimizationPhase when simplifying
        ArithAbs to ArithNegate.
        We should not do the conversion if the target nodes OSR Exits
        on different input than the source node.

        In particular, Checked ArithNegate exits on zero while
        ArithAbs has not problem with it.
        Unchecked ArithAbs() do not OSR Exit on INT_MIN, ArithNeg
        should not either.

        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithNegate):
        (JSC::DFG::SpeculativeJIT::compileMathIC):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):

        * jit/JITNegGenerator.cpp:
        (JSC::JITNegGenerator::generateFastPath):
        * jit/JITOperations.cpp:
        Add result profiling in baseline to have types we can use
        in DFG and FTL.

2016-10-14  Keith Miller  <keith_miller@apple.com>

        B3 needs a special WasmAddress Opcode
        https://bugs.webkit.org/show_bug.cgi?id=163394

        Reviewed by Filip Pizlo.

        This patch adds support for WasmAddress. WasmAddress will be used by
        Wasm to compute the address of a memory operation from the pinned
        base pointer. WasmAddress takes an IntPtr so we can avoid emitting
        unnecessary Move32s in Air. This could happen in the following case:

        @ptr = Trunc(...)
        WasmAddress(@ptr, pinnedGPR)
        ...
        PatchPoint(...) // Do Wasm call
        WasmAddress(@ptr, pinnedGPR)
        ...

        In this case we will not be able to CSE the WasmAddresses since the
        call writes to pinnedGPR. Thus if WasmAddress took an Int32 we would need
        to emit an extra Move32 at the second WasmAddress to ensure it saw a proper
        32-bit value. If Wasm ensures that there there is a leading ZExt32 then
        the duplicated moves become unnecessary.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::effectiveAddr):
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects):
        * b3/B3WasmAddressValue.cpp: Added.
        (JSC::B3::WasmAddressValue::~WasmAddressValue):
        (JSC::B3::WasmAddressValue::dumpMeta):
        (JSC::B3::WasmAddressValue::cloneImpl):
        (JSC::B3::WasmAddressValue::WasmAddressValue):
        * b3/B3WasmAddressValue.h: Added.
        * b3/testb3.cpp:
        (JSC::B3::testWasmAddress):
        (JSC::B3::run):

2016-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        test262: @isConstructor incorrectly thinks Math.cos is a constructor
        https://bugs.webkit.org/show_bug.cgi?id=163437

        Reviewed by Saam Barati.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getConstructData):
        By default, Host JSFunctions are not constructable. They get
        the default callHostFunctionAsConstructor native constructor.
        When getting construct data we can return ConstructType::None
        in these cases instead of indicating it might be constructable
        and later throwing an exception when construction is attempted.

2016-10-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207322.

        This change caused JSC test failures

        Reverted changeset:

        "Fix Array.prototype.splice ES6 compliance."
        https://bugs.webkit.org/show_bug.cgi?id=163372
        http://trac.webkit.org/changeset/207322

2016-10-14  Mark Lam  <mark.lam@apple.com>

        JSON.parse should not modify frozen objects.
        https://bugs.webkit.org/show_bug.cgi?id=163430

        Reviewed by Saam Barati.

        The ES6 spec for JSON.parse (https://tc39.github.io/ecma262/#sec-json.parse and
        https://tc39.github.io/ecma262/#sec-internalizejsonproperty) states that it uses
        CreateDataProperty() (https://tc39.github.io/ecma262/#sec-createdataproperty) to
        set values returned by a reviver.  The spec for CreateDataPropertyOrThrow states:

        "This abstract operation creates a property whose attributes are set to the same
        defaults used for properties created by the ECMAScript language assignment
        operator. Normally, the property will not already exist. If it does exist and is
        not configurable or if O is not extensible, [[DefineOwnProperty]] will return
        false."

        Note: CreateDataProperty() will not throw a TypeError.

        Since the properties of frozen objects are not extensible, not configurable, and
        not writeable, JSON.parse should fail to write to any frozen objects.  Similarly,
        JSON.parse should fail to delete properties in frozen objects.

        In JSON.parse(), we previously write to array elements using the form of
        putDirectIndex() that uses mode PutDirectIndexLikePutDirect.  This makes it so
        that the write (i.e. put) is always successful.  We've now fixed this to use
        PutDirectIndexShouldNotThrow mode instead, which will fail to put the element if
        the array is not writeable.

        Also changed Walker::walk() to use the version of methodTable() that takes a VM&
        since the VM& is already available.

        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):

2016-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        test262: Failure with RegExp.prototype.compile when pattern is undefined
        https://bugs.webkit.org/show_bug.cgi?id=163431

        Reviewed by Yusuke Suzuki.

        If pattern is undefined let P be the empty String.
        https://tc39.github.io/ecma262/#sec-regexpinitialize

        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):

2016-10-13  Joseph Pecoraro  <pecoraro@apple.com>

        Exception message for expressions with multiple bracket accesses is inconsistent / incorrect
        https://bugs.webkit.org/show_bug.cgi?id=163426

        Reviewed by Geoffrey Garen.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::BracketAccessorNode::emitBytecode):
        It matters where emitExpressionInfo is called since it gathers
        info about where we are in the instruction stream. We need to
        emit it before the bytecode that we want to associate the data
        with. In this case, before the getById / getByVal.

2016-10-13  Mark Lam  <mark.lam@apple.com>

        Fix Array.prototype.splice ES6 compliance.
        https://bugs.webkit.org/show_bug.cgi?id=163372

        Reviewed by Geoffrey Garen and Yusuke Suzuki.

        Our Array.prototype.splice implementation neglected to set length on the result
        array (step 12 of https://tc39.github.io/ecma262/#sec-array.prototype.splice) in
        a certain code path.  This is now fixed.

        I'm deferring the implementation of step 8 till later because it requires more
        careful consideration and the fix is of a lesser value (and therefore, of less
        urgency).  See https://bugs.webkit.org/show_bug.cgi?id=163417

        Also added some needed exception checks and assertions.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):

2016-10-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping highlight for dot/bracket expressions in if statements highlights subset of the expression
        https://bugs.webkit.org/show_bug.cgi?id=163378
        <rdar://problem/28749376>

        Reviewed by Saam Barati.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        Since each expression builds on the previous, always keep the starting
        location the first location.

2016-10-13  Per Arne Vollan  <pvollan@apple.com>

        [Win64] Compile fix.
        https://bugs.webkit.org/show_bug.cgi?id=163384

        Reviewed by Brent Fulgham.

        Fix use of potentially uninitialized variable.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2016-10-12  Chris Dumez  <cdumez@apple.com>

        [Web IDL] Drop support for legacy [ConstructorConditional=*]
        https://bugs.webkit.org/show_bug.cgi?id=163368

        Reviewed by Ryosuke Niwa.

        Drop ENABLE_DOM4_EVENTS_CONSTRUCTOR compiler flag.

        * Configurations/FeatureDefines.xcconfig:

2016-10-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: step-into `console.log(o)` should not step through inspector javascript
        https://bugs.webkit.org/show_bug.cgi?id=161656
        <rdar://problem/28181123>

        Reviewed by Timothy Hatcher.

        * debugger/Debugger.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::pauseIfNeeded):
        If the Script is blacklisted skip checking if we need to pause.

        (JSC::Debugger::isBlacklisted):
        (JSC::Debugger::addToBlacklist):
        (JSC::Debugger::clearBlacklist):
        Add the ability to add a Script to a blacklist. Currently the blacklist
        only prevents pausing in the Script.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::isWebKitInjectedScript):
        (Inspector::InspectorDebuggerAgent::didParseSource):
        Always add Internal InjectedScripts to the Debugger's blacklist.

        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
        Clear blacklists when clearing debugger state.

2016-10-12  Keith Miller  <keith_miller@apple.com>

        B3 needs a special WasmBoundsCheck Opcode
        https://bugs.webkit.org/show_bug.cgi?id=163246

        Reviewed by Filip Pizlo.

        This patch adds a new Opcode, WasmBoundsCheck, as well as a B3::Value subclass for it,
        WasmBoundsCheckValue. WasmBoundsCheckValue takes three pieces of information. The first is
        the Int32 pointer value used to be used by the Load.  Next is the pinned register. The
        pinned register must be pinned by calling proc.setPinned() prior to compiling the
        Procedure. Lastly, the WasmBoundsCheckValue takes an offset. The WasmBoundsCheckValue is
        will then emit code that side-exits if the Int64 sum of the offset and pointer is greater
        than or equal to the value in the pinnedRegister. Instead of taking a generator for each
        value like Check/Patchpoint, WasmBoundsCheck gets its generator directly off Air::Code. In
        Air this patch adds a new Custom opcode, WasmBoundsCheck.

        In the future we should add WasmBoundsCheck to CSE so it can eliminate redundant bounds
        checks. At the first cut, we can remove any WasmBoundsCheck dominated by another
        WasmBoundsCheck with the same pointer and pinnedGPR, and a larger offset.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::imm):
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::setWasmBoundsCheckGenerator):
        * b3/B3Procedure.h:
        (JSC::B3::Procedure::setWasmBoundsCheckGenerator):
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects):
        (JSC::B3::Value::typeFor):
        * b3/B3WasmBoundsCheckValue.cpp: Added.
        (JSC::B3::WasmBoundsCheckValue::~WasmBoundsCheckValue):
        (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue):
        (JSC::B3::WasmBoundsCheckValue::dumpMeta):
        * b3/B3WasmBoundsCheckValue.h: Added.
        (JSC::B3::WasmBoundsCheckValue::accepts):
        (JSC::B3::WasmBoundsCheckValue::pinnedGPR):
        (JSC::B3::WasmBoundsCheckValue::offset):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::setWasmBoundsCheckGenerator):
        (JSC::B3::Air::Code::wasmBoundsCheckGenerator):
        * b3/air/AirCustom.cpp:
        (JSC::B3::Air::WasmBoundsCheckCustom::isValidForm):
        * b3/air/AirCustom.h:
        (JSC::B3::Air::WasmBoundsCheckCustom::forEachArg):
        (JSC::B3::Air::WasmBoundsCheckCustom::isValidFormStatic):
        (JSC::B3::Air::WasmBoundsCheckCustom::admitsStack):
        (JSC::B3::Air::WasmBoundsCheckCustom::isTerminal):
        (JSC::B3::Air::WasmBoundsCheckCustom::hasNonArgNonControlEffects):
        (JSC::B3::Air::WasmBoundsCheckCustom::generate):
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp:
        (JSC::B3::testWasmBoundsCheck):
        (JSC::B3::run):

2016-10-12  Filip Pizlo  <fpizlo@apple.com>

        The blackening of CellState is a bad way of tracking if the object is being marked for the first time
        https://bugs.webkit.org/show_bug.cgi?id=163343

        Reviewed by Mark Lam.

        When I first added the concept of NewGrey/OldGrey, I had the SlotVisitor store the old cell
        state in itself, so that it could use it to decide what to do for reportExtraMemoryVisited().

        Then I changed it in a recent commit, because I wanted the freedom to have SlotVisitor visit
        multiple objects in tandem. But I never ended up using this capability. Still, I liked the
        new way better: instead of the SlotVisitor rembemering the state-before-blackening, we would
        make the object's state reflect whether it was black for the first time or not. That seemed
        convenient.

        Unfortunately it's wrong. After we blacken the object, a concurrent barrier could instantly
        grey it. Then we would forget that we are visiting this object for the first time.
        Subsequent visits will think that they are not the first. So, we will fail to do the right
        thing in reportExtraMemoryVisited().

        So, this reverts that change. This is a little more than just a revert, though. I've changed
        the terminology a bit. For example, I got tired of reading Black and having to remind myself
        that it really means that the object has begun being visited, instead of the more strict
        meaning that implies that it has already been visited. We want to say that it's Black or
        currently being scanned. I'm going to adopt Siebert's term for this: Anthracite [1]. So, our
        black CellState is now called AnthraciteOrBlack.

        [1] https://pdfs.semanticscholar.org/7ae4/633265aead1f8835cf7966e179d02c2c8a4b.pdf

        * heap/CellState.h:
        (JSC::isBlack): Deleted.
        (JSC::blacken): Deleted.
        * heap/Heap.cpp:
        (JSC::Heap::addToRememberedSet):
        (JSC::Heap::writeBarrierSlowPath):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::reportExtraMemoryVisited):
        (JSC::Heap::reportExternalMemoryVisited):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::visitChildren):
        * heap/SlotVisitor.h:
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::reportExtraMemoryVisited):
        (JSC::SlotVisitor::reportExternalMemoryVisited):
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:

2016-10-12  Mark Lam  <mark.lam@apple.com>

        Rename variables in arrayProtoFuncSplice() to match names in the spec.
        https://bugs.webkit.org/show_bug.cgi?id=163354

        Reviewed by Saam Barati.

        This will make it easier to see whether the code matches the spec or not.
        Ref: https://tc39.github.io/ecma262/#sec-array.prototype.splice

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):

2016-10-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT][JSC] Explore the way to embed nodeType into JSC::JSType in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=163245

        Reviewed by Filip Pizlo.

        We reserve the highest bit of JSC::JSType for extensions outside JSC.
        JSC does not use JSType bits so many: only 52 types are defined.

        And we extend CallDOM patchpoint to claim that it does not require a global object.
        This global object is used to generate a DOM wrapper. However, nodeType does not require
        it since it just returns integer. In the future, we will extend CallDOM to claim
        its result type. And we can decide this `requireGlobalObject` condition automatically
        according to the result type.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasCheckDOMPatchpoint):
        (JSC::DFG::Node::checkDOMPatchpoint):
        (JSC::DFG::Node::hasCallDOMPatchpoint):
        (JSC::DFG::Node::callDOMPatchpoint):
        (JSC::DFG::Node::hasDOMJIT): Deleted.
        (JSC::DFG::Node::domJIT): Deleted.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        (JSC::DFG::SpeculativeJIT::compileCheckDOM):
        * domjit/DOMJITCallDOMPatchpoint.h: Copied from Source/JavaScriptCore/domjit/DOMJITGetterSetter.h.
        (JSC::DOMJIT::CallDOMPatchpoint::create):
        * domjit/DOMJITGetterSetter.h:
        * domjit/DOMJITPatchpoint.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        * jsc.cpp:
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LowLevelInterpreter.asm:
        * runtime/JSType.h:

2016-10-12  Keith Miller  <keith_miller@apple.com>

        Handle non-function, non-undefined comparator in Array.prototype.sort
        https://bugs.webkit.org/show_bug.cgi?id=163085

        Reviewed by Yusuke Suzuki.

        * builtins/ArrayPrototype.js:
        (sort.comparatorSort):
        (sort.stringSort):
        (sort):

2016-10-12  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r207179): ASSERTION FAILED: node.cell != previousCell
        https://bugs.webkit.org/show_bug.cgi?id=163337

        Reviewed by Mark Lam.

        It turns out that HeapSnapshot was not down with revisiting. The concurrent GC is going to be
        built around the idea that we can revisit objects many times. This means that any action that
        should only take place once per object must check the object's state. This fixes the snapshot
        code to do this.

        While writing this code, I realized that we're actually doing this check incorrectly, so I
        filed bug 163343. That bug requires a race, so we aren't going to see it yet.

        * heap/HeapSnapshot.cpp:
        (JSC::HeapSnapshot::finalize):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendToMarkStack):
        (JSC::SlotVisitor::visitChildren):

2016-10-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve support for logging Proxy objects in console
        https://bugs.webkit.org/show_bug.cgi?id=163323
        <rdar://problem/28432553>

        Reviewed by Timothy Hatcher.

        This is based off of similiar patches in Blink for Proxy handling.

        * bindings/ScriptValue.cpp:
        (Deprecated::ScriptValue::isEqual):
        Use strict equality. This is the intent, and it prevents the possibility of triggering
        primitive conversion on objects in previous ConsoleMessage argument lists.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._propertyDescriptors):
        Bail if the object is a Proxy.

        (InjectedScript.prototype._describe):
        Provide a friendlier name, "Proxy" instead of "ProxyObject".

        (InjectedScript.RemoteObject):
        When generating a preview for a Proxy object, generate it from the final target
        and mark it as lossy so that the object can always be expanded to get the internal
        target/handler properties.

        * inspector/JSInjectedScriptHost.h:
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::subtype):
        New subtype for Proxy objects.

        (Inspector::JSInjectedScriptHost::proxyTargetValue):
        Resolve the final target value for a Proxy.

        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSInjectedScriptHostPrototype::finishCreation):
        (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue):
        Add the new method.

        * inspector/ScriptArguments.cpp:
        (Inspector::ScriptArguments::getFirstArgumentAsString):
        Avoid triggering Proxy traps on a Proxy object when getting a quick
        string description for ConsoleMessages.

        * inspector/protocol/Runtime.json:
        Add new "proxy" subtype.

2016-10-12  Joseph Pecoraro  <pecoraro@apple.com>

        Emit DebugHooks uniformly with pause locations instead of having separate pause locations and op_debug emits
        https://bugs.webkit.org/show_bug.cgi?id=162809

        Reviewed by Geoffrey Garen.

        Change how BytecodeGeneration emits debug hooks to be more consistent.
        Previously most nodes individually generated their own debug hook
        and we asserted that it matched a breakpoint location identified
        by the parser. This could get out of sync, or nodes could forget to
        emit debug hooks expected by the parser.

        With this change, we always check and emit a debug hook for any
        node. The default behavior is for BytecodeGenerator::emitNode
        to emit the debug hook when emitting the node itself. This covers
        the majority of cases (statements).

        There are a few exceptions where we continue to need to customize
        emitting debug hooks:

            1. Nodes with emitBytecodeInConditionContext
                - non-Expression nodes customize how they emit their children
                - constants conditions may emit nothing, but we had recorded a breakpoint location so emit a debug hook
                - always emit one debug hook in case we recorded a breakpoint location, but avoid emitting multiple
                  in nodes which may call up to the ExpressionNode::emitBytecodeInConditionContext base impl.
            2. Specialized Debug Hooks
                - such as hooks for Program start/end, debugger statements, etc.
            3. Debug Hooks in for..of / for..in that don't correspond to re-emitting nodes
                - such as pausing on the assignment expression inside these loops

        The majority of nodes no longer have custom emits.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNodeInTailPosition):
        (JSC::BytecodeGenerator::emitNodeInConditionContext):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::emitEnumeration):
        By default, when emitting a node check if we should also emit an op_debug for it.
        This default DebugHook is WillExecuteStatement, which is a normal pause point.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ConstantNode::emitBytecodeInConditionContext):
        (JSC::LogicalNotNode::emitBytecodeInConditionContext):
        (JSC::BinaryOpNode::emitBytecodeInConditionContext):
        (JSC::LogicalOpNode::emitBytecodeInConditionContext):
        The parser would have generated a pause location for these conditions
        no matter what constant folding and re-writing these nodes may perform.
        So, when emitting these nodes in condition context check if they need
        emit their own debug hook.

        (JSC::EmptyStatementNode::emitBytecode):
        (JSC::ExprStatementNode::emitBytecode):
        (JSC::DeclarationStatement::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::WithNode::emitBytecode):
        (JSC::SwitchNode::emitBytecode):
        (JSC::ThrowNode::emitBytecode):
        No longer need to custom emit debug hooks. The default emitNode will handle these.

        (JSC::ForInNode::emitBytecode):
        Include extra debug hooks the user expects to return back to the assignment
        expression in the loop header before starting the body again. The same is done
        for for..of with emitEnumeration.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createExportDefaultDeclaration):
        (JSC::ASTBuilder::createExportLocalDeclaration):
        These are no longer needed to fake-satisfy assertions. We never wanted to
        emit debug hooks for these inner statements because the export statement
        will already have the debug hooks.

        (JSC::ASTBuilder::createForInLoop):
        (JSC::ASTBuilder::createForOfLoop):
        Include the correct location where the declaration starts.

        (JSC::ASTBuilder::breakpointLocation):
        Simplify to a general implementation for Node.

        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createForInLoop):
        (JSC::SyntaxChecker::createForOfLoop):
        Ignore the new extra parameter.

        * parser/Nodes.h:
        (JSC::Node::needsDebugHook):
        (JSC::Node::setNeedsDebugHook):
        (JSC::ExpressionNode::needsDebugHook): Deleted.
        (JSC::ExpressionNode::setNeedsDebugHook): Deleted.
        (JSC::StatementNode::isEmptyStatement): Deleted.
        (JSC::StatementNode::needsDebugHook): Deleted.
        (JSC::StatementNode::setNeedsDebugHook): Deleted.
        Move debug hook logic into the base Node class.

        (JSC::StatementNode::isDebuggerStatement):
        Provide a way to distinguish a debugger statement.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseForStatement):
        Provide the location before the declaration starts.

2016-10-12  Mark Lam  <mark.lam@apple.com>

        Array.prototype.slice should not modify frozen objects.
        https://bugs.webkit.org/show_bug.cgi?id=163338

        Reviewed by Filip Pizlo.

        1. The ES6 spec for Array.prototype.slice
           (https://tc39.github.io/ecma262/#sec-array.prototype.slice) states that it uses
           the CreateDataPropertyOrThrow()
           (https://tc39.github.io/ecma262/#sec-createdatapropertyorthrow) to add items to
           the result array.  The spec for CreateDataPropertyOrThrow states:

           "This abstract operation creates a property whose attributes are set to the
           same defaults used for properties created by the ECMAScript language assignment
           operator. Normally, the property will not already exist. If it does exist and
           is not configurable or if O is not extensible, [[DefineOwnProperty]] will
           return false causing this operation to throw a TypeError exception."

        2. Array.prototype.slice also uses a Set function
           (https://tc39.github.io/ecma262/#sec-set-o-p-v-throw) to set the "length"
           property and passes true for the Throw argument.  Ultimately, it ends up
           calling the OrdinarySet function
           (https://tc39.github.io/ecma262/#sec-ordinaryset) that will fail if the
           property is not writable.  This failure should result in a TypeError being
           thrown in Set.

           Since the properties of frozen objects are not extensible, not configurable,
           and not writeable, Array.prototype.slice should fail to write to the result
           array if it is frozen.

        If the source array being sliced has 1 or more elements, (1) will take effect
        when we try to set the element in the non-writeable result obj.
        If the source array being sliced has 0 elements, we will not set any elements and
        (1) will not trigger.  Subsequently, (2) will take effect when we will try to
        set the length of the result obj.

        * runtime/ArrayPrototype.cpp:
        (JSC::putLength):
        (JSC::setLength):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):

2016-10-12  Filip Pizlo  <fpizlo@apple.com>

        Remove JITWriteBarrier.h
        https://bugs.webkit.org/show_bug.cgi?id=163334

        Reviewed by Mark Lam.

        I guess that the idea of JITWriteBarrier was to make sure that if you slap some heap pointer
        bits into machine code, then you better execute a barrier on the code block. But it's a
        complicated piece of code, and I can never remember how it quite works. These days it looks
        vestigial, particularly since only the CallLinkInfo patchable callee immediate uses it. It's
        not really necessary to have something like this, since our convention is that any pointer
        stored in machine code must always be shadowed in the GC heap. I think that convention has
        won by overwhelming majority, so we should finally remove JITWriteBarrier.

        A practical outcome of this change is that it makes it easier to implement DirectCall ICs,
        which will have to store the callee in the CallLinkInfo but not in the machine code.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::setCallee):
        (JSC::CallLinkInfo::clearCallee):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::setCallee): Deleted.
        (JSC::CallLinkInfo::clearCallee): Deleted.
        * heap/SlotVisitor.h:
        * jit/JITWriteBarrier.h: Removed.

2016-10-12  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix for GCC 4.9 after r207186.
        https://bugs.webkit.org/show_bug.cgi?id=163255

        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::Entry::Entry):

2016-10-11  Saam Barati  <sbarati@apple.com>

        HasOwnPropertyCache needs to ref the UniquedStringImpls it sees
        https://bugs.webkit.org/show_bug.cgi?id=163255

        Reviewed by Geoffrey Garen.

        The cache needs to be responsible for ensuring that things
        in the cache stay alive. Before, it wasn't doing this, and
        that was wrong.

        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::Entry::operator=):
        (JSC::HasOwnPropertyCache::operator delete):
        (JSC::HasOwnPropertyCache::create):
        (JSC::HasOwnPropertyCache::get):
        (JSC::HasOwnPropertyCache::tryAdd):
        (JSC::HasOwnPropertyCache::clear):
        (JSC::HasOwnPropertyCache::zeroBuffer):

2016-10-06  Filip Pizlo  <fpizlo@apple.com>

        MarkedBlock should know what objects are live during marking
        https://bugs.webkit.org/show_bug.cgi?id=162309

        Reviewed by Geoffrey Garen.

        It used to be that we would forget which objects are live the moment we started collection.
        That's because the flip at the beginning clears all mark bits.

        But we already have a facility for tracking objects that are live-but-not-marked. It's called
        newlyAllocated. So, instead of clearing mark bits, we want to just transfer them to
        newlyAllocated. Then we want to clear all newlyAllocated after GC.

        This implements such an approach, along with a versioning optimization for newlyAllocated.
        Instead of walking the whole heap to clear newlyAllocated bits at the end of the GC, we bump
        the newlyAllocatedVersion, which causes MarkedBlock to treat newlyAllocated as if it was
        clear.

        We could have even avoided allocating newlyAllocated in most cases, since empirically most
        blocks are either completely empty or completely full. An earlier version of this patch did
        this, but it was not better than this patch. In fact, it seemed to actually be worse for PLT
        and membuster.

        To validate this change, we now run the conservative scan after the beginMarking flip. And it
        totally works!

        This is a huge step towards concurrent GC. It means that we ought to be able to run the
        allocator while marking. Since we already separately made it possible to run the barrier
        while marking, this means that we're pretty much ready for some serious concurrency action.

        This appears to be perf-neutral and space-neutral.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlockSet::mark): Deleted.
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::writeBarrierCurrentlyExecuting):
        (JSC::CodeBlockSet::clearCurrentlyExecuting):
        (JSC::CodeBlockSet::writeBarrierCurrentlyExecutingCodeBlocks): Deleted.
        * heap/CodeBlockSet.h:
        * heap/CodeBlockSetInlines.h: Added.
        (JSC::CodeBlockSet::mark):
        * heap/ConservativeRoots.cpp:
        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        (JSC::Heap::beginMarking):
        (JSC::Heap::collectImpl):
        (JSC::Heap::writeBarrierCurrentlyExecutingCodeBlocks):
        (JSC::Heap::clearCurrentlyExecutingCodeBlocks):
        * heap/Heap.h:
        * heap/HeapUtil.h:
        (JSC::HeapUtil::findGCObjectPointersForMarking):
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::isPagedOut):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::Handle):
        (JSC::MarkedBlock::Handle::sweepHelperSelectHasNewlyAllocated):
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::lastChanceToFinalize):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::resetAllocated):
        (JSC::MarkedBlock::resetMarks):
        (JSC::MarkedBlock::setNeedsDestruction):
        (JSC::MarkedBlock::Handle::didAddToAllocator):
        (JSC::MarkedBlock::Handle::isLive):
        (JSC::MarkedBlock::Handle::isLiveCell):
        (JSC::MarkedBlock::clearMarks): Deleted.
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::newlyAllocatedVersion):
        (JSC::MarkedBlock::Handle::hasAnyNewlyAllocated): Deleted.
        (JSC::MarkedBlock::Handle::clearNewlyAllocated): Deleted.
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::Handle::cellsPerBlock):
        (JSC::MarkedBlock::Handle::isLive):
        (JSC::MarkedBlock::Handle::isLiveCell):
        (JSC::MarkedBlock::Handle::isNewlyAllocatedStale):
        (JSC::MarkedBlock::Handle::hasAnyNewlyAllocatedWithSweep):
        (JSC::MarkedBlock::Handle::hasAnyNewlyAllocated):
        (JSC::MarkedBlock::heap):
        (JSC::MarkedBlock::space):
        (JSC::MarkedBlock::Handle::space):
        (JSC::MarkedBlock::resetMarkingVersion): Deleted.
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::beginMarking):
        (JSC::MarkedSpace::endMarking):
        (JSC::MarkedSpace::clearNewlyAllocated): Deleted.
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::nextVersion):
        (JSC::MarkedSpace::newlyAllocatedVersion):
        (JSC::MarkedSpace::markingVersion): Deleted.
        * runtime/SamplingProfiler.cpp:

2016-10-11  Mark Lam  <mark.lam@apple.com>

        Array.prototype.concat should not modify frozen objects.
        https://bugs.webkit.org/show_bug.cgi?id=163302

        Reviewed by Filip Pizlo.

        The ES6 spec for Array.prototype.concat states that it uses the
        CreateDataPropertyOrThrow() to add items to the result array.  The spec for
        CreateDataPropertyOrThrow states:

        "This abstract operation creates a property whose attributes are set to the same
        defaults used for properties created by the ECMAScript language assignment
        operator. Normally, the property will not already exist. If it does exist and is
        not configurable or if O is not extensible, [[DefineOwnProperty]] will return
        false causing this operation to throw a TypeError exception."

        Since the properties of frozen objects are not extensible, not configurable, and
        not writable, Array.prototype.concat should fail to write to the result array if
        it is frozen.

        Ref: https://tc39.github.io/ecma262/#sec-array.prototype.concat,
        https://tc39.github.io/ecma262/#sec-createdatapropertyorthrow, and
        https://tc39.github.io/ecma262/#sec-createdataproperty.

        The fix consists of 2 parts:
        1. moveElement() should use the PutDirectIndexShouldThrow mode when invoking
           putDirectIndex(), and
        2. SparseArrayValueMap::putDirect() should check for the case where the property
           is read only.

        (2) ensures that we don't write into a non-writable property.
        (1) ensures that we throw a TypeError for attempts to write to a non-writeable
        property.

        * runtime/ArrayPrototype.cpp:
        (JSC::moveElements):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putDirect):

2016-10-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] DOMJIT::Patchpoint should have a way to receive constant folded arguments
        https://bugs.webkit.org/show_bug.cgi?id=163224

        Reviewed by Filip Pizlo.

        We use the GetGlobalObject DFG node to retrieve a global object from a DOM node.
        This global object is necessary to check whether the world is normal before entering
        the fast path of looking up the DOM wrapper cache.
        We can sometimes constant-fold this GetGlobalObject. For example, if we performed
        CheckStructure, the structure can offer the information about the possible result
        of GetGlobalObject. By using this constant-folded global object, we can drop some
        checks.

        This patch introduces the way to tell the constant-folded values to DOMJIT::Patchpoint.
        We pass DOMJIT::Value instead of DOMJIT::Reg as a parameter of DOMJIT::PatchpointParams.
        This DOMJIT::Value is a pair of DOMJIT::Reg and JSValue. If the given parameter has a
        constant value, this JSValue is filled with it.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGDOMJITPatchpointParams.h:
        (JSC::DFG::DOMJITPatchpointParams::DOMJITPatchpointParams):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        (JSC::DFG::SpeculativeJIT::compileCheckDOM):
        * domjit/DOMJITPatchpointParams.h:
        (JSC::DOMJIT::PatchpointParams::at):
        (JSC::DOMJIT::PatchpointParams::operator[]):
        (JSC::DOMJIT::PatchpointParams::PatchpointParams):
        * domjit/DOMJITValue.h: Copied from Source/JavaScriptCore/dfg/DFGDOMJITPatchpointParams.h.
        (JSC::DOMJIT::Value::Value):
        (JSC::DOMJIT::Value::isGPR):
        (JSC::DOMJIT::Value::isFPR):
        (JSC::DOMJIT::Value::isJSValueRegs):
        (JSC::DOMJIT::Value::gpr):
        (JSC::DOMJIT::Value::fpr):
        (JSC::DOMJIT::Value::jsValueRegs):
        (JSC::DOMJIT::Value::reg):
        (JSC::DOMJIT::Value::value):
        * ftl/FTLDOMJITPatchpointParams.h:
        (JSC::FTL::DOMJITPatchpointParams::DOMJITPatchpointParams):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):

2016-10-10  Filip Pizlo  <fpizlo@apple.com>

        Air should be able to replace constant materializations with adds
        https://bugs.webkit.org/show_bug.cgi?id=162749

        Reviewed by Yusuke Suzuki.

        We have a lot of defenses against emitting code that materializes huge contants. But if we do
        end up with such code in the backend, it's better to convert those materializations into add
        instructions by checking if other registers are known to contain nearby constants. That's
        what this patch does.

        * b3/air/AirFixObviousSpills.cpp:
        * b3/testb3.cpp:

2016-10-11  Filip Pizlo  <fpizlo@apple.com>

        B3->Air lowering needs the same defenses in effectiveAddr() that it has in tryAppendLea()
        https://bugs.webkit.org/show_bug.cgi?id=163264

        Reviewed by Mark Lam.

        When writing the lea patch (r207039), I was very careful about how I convert a Shl into a
        BaseIndex scale. But I forgot to check if the older code for creating BaseIndexes for
        effectiveAddr() got this right. It turns out that the older code missed the <<32 corner
        case.

        It's sad that the two paths can't share all of their code, but it's somewhat inevitable due
        to how matching an address and matching a lea have to do very different things. Matching a
        lea means creating an instruction that is distinct from other instructions to do multiple
        math operations at once. Matching an address means making some instruction do extra work
        for free. Also, address matching can take advantage of the fact that the offset is already
        associated with the memory operation by strength reduction - lea matching can't do this; it
        has to figure out Add(@value, $const) on its own. This change makes the situation slightly
        more sane by adding a scaleForShl() helper that handles this weird case. It's based on the
        new Shl handling from r207039, and exposes it as an API for effectiveAddr() to use.

        The testLoadBaseIndexShift32() used to crash. I don't think that this case affects JS
        content, since <<32 is such a bizarre outlier. I don't think we even have a path along
        which the FTL would emit a 64-bit <<32. It probably won't even affect WebAssembly since
        that uses 32-bit pointers, so we won't see 64-bit <<32 in effectiveAddr() there.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::scaleForShl):
        (JSC::B3::Air::LowerToAir::effectiveAddr):
        (JSC::B3::Air::LowerToAir::tryAppendLea):
        (JSC::B3::Air::LowerToAir::crossesInterference): Deleted.
        * b3/testb3.cpp:
        (JSC::B3::testLoadBaseIndexShift2):
        (JSC::B3::testLoadBaseIndexShift32):
        (JSC::B3::run):

2016-10-11  Saam Barati  <sbarati@apple.com>

        ValueAdd should be constant folded if the operands are constant String,Primitive or Primitive,String
        https://bugs.webkit.org/show_bug.cgi?id=163182

        Reviewed by Filip Pizlo.

        This code pattern shows up in Dromaeo, so it's worth optimizing for.
        This might also show up in real world JS code due to inlining and other
        types of constant folding.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGLazyJSValue.cpp:
        (JSC::DFG::LazyJSValue::getValue):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):

2016-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Add ENABLE_ENCRYPTED_MEDIA configuration option
        https://bugs.webkit.org/show_bug.cgi?id=163219

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        Add the ENABLE_ENCRYPTED_MEDIA configuration option. It will be used
        to enable or disable the new EME implementation at build-time.

2016-10-10  Filip Pizlo  <fpizlo@apple.com>

        B3->Air lowering should be able to emit complex leas on x86
        https://bugs.webkit.org/show_bug.cgi?id=163234

        Reviewed by Saam Barati.

        This adds comprehensive support for emitting lea on x86.

        When adding this, I found that it was useful to also finally add more reassociation. That
        reduces the amount of patterns that the instruction selector has to deal with.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::lea32):
        (JSC::MacroAssembler::lea64):
        (JSC::MacroAssembler::lea): Deleted.
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::commitInternal):
        (JSC::B3::Air::LowerToAir::tryAppendLea):
        (JSC::B3::Air::LowerToAir::lower):
        (JSC::B3::Air::LowerToAir::createSelect): Deleted.
        * b3/B3ReduceStrength.cpp:
        * b3/B3Value.h:
        * b3/B3ValueInlines.h:
        (JSC::B3::Value::isRepresentableAs):
        (JSC::B3::Value::representableAs): Deleted.
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp: Lots of tests for lea and reassociation.

2016-10-10  Mark Lam  <mark.lam@apple.com>

        Change ArrayPrototype.cpp's putLength() and setLength() to take a VM& so that we can use vm.propertyNames.
        https://bugs.webkit.org/show_bug.cgi?id=163260

        Reviewed by Saam Barati.

        In all cases where we call these, we already have the VM& anyway.

        * runtime/ArrayPrototype.cpp:
        (JSC::putLength):
        (JSC::setLength):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):

2016-10-10  Mark Lam  <mark.lam@apple.com>

        Rename the StrictModeReadonlyPropertyWriteError string to ReadonlyPropertyWriteError.
        https://bugs.webkit.org/show_bug.cgi?id=163239

        Reviewed by Filip Pizlo.

        This string is also used for reporting the same error in cases which have nothing
        to do with strict mode.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/GetterSetter.cpp:
        (JSC::callSetter):
        * runtime/JSArray.cpp:
        (JSC::JSArray::setLengthWithArrayStorage):
        (JSC::JSArray::pop):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        (JSC::JSValue::putToPrimitiveByIndex):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::put):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::put):
        (JSC::JSModuleNamespaceObject::putByIndex):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
        (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putInline):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTablePut):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::putEntry):
        (JSC::SparseArrayEntry::put):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        (JSC::StringObject::putByIndex):

2016-10-10  Saam Barati  <sbarati@apple.com>

        compileCheckStringIdent in the FTL is wrong
        https://bugs.webkit.org/show_bug.cgi?id=163215

        Reviewed by Mark Lam and Filip Pizlo.

        lowStringIdent() returns the StringImpl pointer. The compileCheckStringIdent()
        was treating its return value as the actual JSString. This is wrong.

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

2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Node accessors in DOMJIT
        https://bugs.webkit.org/show_bug.cgi?id=163005

        Reviewed by Filip Pizlo.

        Add some helper methods and offsetOfXXX for JSC::Weak since it is used
        for DOM wrapper caching.

        And make DOMJIT::Patchpoint in FTL closer to one in DFG. We add resultConstraint
        to avoid the situation that the same register is allocated to child and result.

        We also extend DOMJIT::Patchpoint to tell useTagTypeNumberRegister / useTagMaskRegister.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * domjit/DOMJITSlowPathCalls.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        * heap/WeakImpl.h:
        (JSC::WeakImpl::offsetOfJSValue):
        (JSC::WeakImpl::offsetOfWeakHandleOwner):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::boxCell):
        (JSC::AssemblyHelpers::boxInt32): Deleted.
        * jit/JITOperations.h:

2016-10-09  Filip Pizlo  <fpizlo@apple.com>

        Air should expose API for pinning registers
        https://bugs.webkit.org/show_bug.cgi?id=163175

        Reviewed by Keith Miller.

        You can now call Procedure::pinRegister(), or Code::pinRegister(), and it will make this
        register behave as follows:

        - B3 and Air will emit no code that modifies the value in this register, except if that
          happens via a Patchpoint or stackmap constraint (i.e. the user explicitly asked for it).
        - B3 and Air will allow others to modify the register. For example, if the register is not
          callee-save, then the compiler knows that the register's value will be trashed by any
          C-style call.
        - Air will be happy to emit code that reads from this register, including coalescing tmps
          with it, so longer as there is no interference (i.e. no chance of the register's value
          changing). For example, if we went back to having pinned tag registers, we would tell B3
          to use them by (1) excluding them from any clobber set (easy, since they're callee save)
          and (2) emitting ArgumentReg to grab their value. There's a test that does this.

        This is accomplished by taking regsInPriorityOrder() and making it a method of Code. Air
        already used this API when choosing registers in register allocation. Code now also vends a
        mutableRegs() set, which is derived from regsInPriorityOrder(), that can quickly tell you if
        a register can be mutated. Doing it this way means that most of this is a purely mechanical
        change. The calls to mutableRegs() are the places where we had to change logic:

        - The register allocators needs to know that coalescing with a precolored pinned tmp is free.
        - The callee-save handler needs to know that we're not supposed to save/restore pinned
          registers.

        Note that in this scheme, pinned registers are simply registers that do not appear in
        regsInPriorityOrder(). This means, for example, that we will now say that FP is pinned. So,
        this means that you can also pin registers by calling setRegsInPriorityOrder() and passing a
        vector that excludes some registers. More generally, this means that clients can now tweak
        the register allocator's register preferences, since the ordering in that list reflects the
        order in which the allocator will try registers.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::pinRegister):
        * b3/B3Procedure.h:
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        (JSC::B3::Air::Code::setRegsInPriorityOrder):
        (JSC::B3::Air::Code::pinRegister):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::regsInPriorityOrder):
        (JSC::B3::Air::Code::mutableRegs):
        (JSC::B3::Air::Code::isPinned):
        (JSC::B3::Air::Code::regsInPriorityOrderImpl):
        (JSC::B3::Air::Code::proc): Deleted.
        * b3/air/AirEmitShuffle.cpp:
        (JSC::B3::Air::emitShuffle):
        * b3/air/AirEmitShuffle.h:
        * b3/air/AirHandleCalleeSaves.cpp:
        (JSC::B3::Air::handleCalleeSaves):
        * b3/air/AirIteratedRegisterCoalescing.cpp:
        * b3/air/AirLowerAfterRegAlloc.cpp:
        (JSC::B3::Air::lowerAfterRegAlloc):
        * b3/air/AirRegisterPriority.cpp: Removed.
        * b3/air/AirRegisterPriority.h: Removed.
        * b3/air/AirSpillEverything.cpp:
        (JSC::B3::Air::spillEverything):
        * b3/air/testair.cpp:
        (JSC::B3::Air::testShuffleBroadcastAllRegs):
        (JSC::B3::Air::testShuffleShiftAllRegs):
        (JSC::B3::Air::testShuffleRotateAllRegs):
        (JSC::B3::Air::testShuffleShiftMemoryAllRegs):
        (JSC::B3::Air::testShuffleShiftMemoryAllRegs64):
        (JSC::B3::Air::testShuffleShiftMemoryAllRegsMixedWidth):
        (JSC::B3::Air::testShuffleRotateMemoryAllRegs64):
        (JSC::B3::Air::testShuffleRotateMemoryAllRegsMixedWidth):
        * b3/testb3.cpp:
        (JSC::B3::testPinRegisters):
        (JSC::B3::run):
        * jit/RegisterSet.h:

2016-10-08  Filip Pizlo  <fpizlo@apple.com>

        B3 should know about mutable pinned registers
        https://bugs.webkit.org/show_bug.cgi?id=163172

        Reviewed by Keith Miller.

        If we have mutable pinned registers then we need to know which operations mutate them. At
        first I considered making this into a heap range thing, but I think that this would be very
        confusing. Also, in the future, we might want to make Effects track register sets of
        clobbered registers (see bug 163173).

        * b3/B3Effects.cpp:
        (JSC::B3::Effects::interferes):
        (JSC::B3::Effects::operator==):
        (JSC::B3::Effects::dump):
        * b3/B3Effects.h:
        (JSC::B3::Effects::forCall):
        (JSC::B3::Effects::mustExecute):

2016-10-08  Saam Barati  <sbarati@apple.com>

        HasIndexedProperty clobberize rule is wrong for Array::ForceOSRExit
        https://bugs.webkit.org/show_bug.cgi?id=159942
        <rdar://problem/27328836>

        Reviewed by Filip Pizlo.

        When HasIndexedProperty has a ForceOSRExit array mode, it should
        report to write to side state, like the ForceOSRExit node, and the
        other nodes with ForceOSRExit array mode.

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

2016-10-07  Mark Lam  <mark.lam@apple.com>

        Object.freeze() and seal() should throw if [[PreventExtensions]]() fails.
        https://bugs.webkit.org/show_bug.cgi?id=163160

        Reviewed by Saam Barati.

        See https://tc39.github.io/ecma262/#sec-object.freeze,
        https://tc39.github.io/ecma262/#sec-object.seal, and
        https://tc39.github.io/ecma262/#sec-setintegritylevel.  We need to call
        preventExtensions first before proceeding to freeze / seal the object.  If
        preventExtensions fails, we should throw a TypeError.

        * runtime/ObjectConstructor.cpp:
        (JSC::setIntegrityLevel):
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):

2016-10-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Support slow path call
        https://bugs.webkit.org/show_bug.cgi?id=162978

        Reviewed by Saam Barati.

        One of the most important features required in DOMJIT::Patchpoint is slow path calls.
        DOM operation typically returns DOMWrapper object. At that time, if wrapper cache hits, we can go
        to the fast path. However, if we cannot use the cache, we need to go to the slow path to call toJS function.
        At that time, slow path call functionality is necessary.

        This patch expose DOMJIT::PatchpointParams::addSlowPathCall. We can request slow path call code generation
        through this interface. DOMJIT::PatchpointParams automatically leverages appropriate slow path call systems
        in each tier. In DFG, we use slow path call system. In FTL, we implement slow path call by using addLatePath
        to construct slow path call. But these details are completely hidden by DOMJIT::PatchpointParams. Users can
        just use addSlowPathCall.

        Since DFG and FTL slow path call systems are implemented in variadic templates, directly using this means
        that we need to expose core part of DFG and FTL. For example, DFG::SpeculativeJIT need to be exposed in
        such a design. That is too bad. Instead, we use magical macro in DOMJITSlowPathCalls.h. We can list up the
        call signatures in DOMJIT_SLOW_PATH_CALLS. DOMJIT uses these signatures to generate an interface to request
        slow path calls inside DFG and FTL instead of exposing everything.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGCommon.h:
        * dfg/DFGDOMJITPatchpointParams.cpp: Copied from Source/JavaScriptCore/domjit/DOMJITPatchpointParams.h.
        (JSC::DFG::dispatch):
        * dfg/DFGDOMJITPatchpointParams.h: Copied from Source/JavaScriptCore/domjit/DOMJITPatchpointParams.h.
        (JSC::DFG::DOMJITPatchpointParams::DOMJITPatchpointParams):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        (JSC::DFG::SpeculativeJIT::compileCheckDOM):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::extractResult): Deleted.
        * domjit/DOMJITPatchpointParams.h:
        (JSC::DOMJIT::PatchpointParams::addSlowPathCall):
        * domjit/DOMJITSlowPathCalls.h: Copied from Source/JavaScriptCore/domjit/DOMJITPatchpointParams.h.
        * ftl/FTLDOMJITPatchpointParams.cpp: Added.
        (JSC::FTL::dispatch):
        * ftl/FTLDOMJITPatchpointParams.h: Copied from Source/JavaScriptCore/domjit/DOMJITPatchpointParams.h.
        (JSC::FTL::DOMJITPatchpointParams::DOMJITPatchpointParams):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        * jit/GPRInfo.h:
        (JSC::extractResult):
        * jsc.cpp:

2016-10-06  Saam Barati  <sbarati@apple.com>

        HasOwnPropertyCache flattening dictionaries is causing insane memory usage with the uBlock Safari extension
        https://bugs.webkit.org/show_bug.cgi?id=163091

        Reviewed by Mark Lam.

        I'm investigating a real fix for this in:
        https://bugs.webkit.org/show_bug.cgi?id=163092
        However, it's best to get this out of trunk for now.

        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::tryAdd):

2016-10-06  Keith Miller  <keith_miller@apple.com>

        getInternalObjcObject should validate the JSManagedObject's value.
        https://bugs.webkit.org/show_bug.cgi?id=162985

        Reviewed by Geoffrey Garen.

        Previously, if, for instance, the JSManagedObject's weak value had been
        cleared we would call tryUnwrapObjcObject with a nil context and value.
        This triggered assertions failures as those functions expect their inputs
        to be valid.

        * API/JSVirtualMachine.mm:
        (getInternalObjcObject):

2016-10-06  Brian Burg  <bburg@apple.com>

        Web Inspector: RemoteInspector should cache client capabilities for off-main thread usage
        https://bugs.webkit.org/show_bug.cgi?id=163039
        <rdar://problem/28571460>

        Reviewed by Timothy Hatcher.

        The fix in r206797 was incorrect because listings are always pushed out on the XPC connection queue.
        Instead of delaying the listing needlessly, RemoteInspector should cache the capabilities of its
        client while on the main thread, then use the cached struct data on the XPC connection queue rather
        than directly accessing m_client. This is similar to how RemoteConnectionToTarget marshalls listing
        information from arbitrary queues into m_targetListingMap, which can then be read from any queue.

        * inspector/remote/RemoteInspector.h:
        * inspector/remote/RemoteInspector.mm:
        (Inspector::RemoteInspector::updateClientCapabilities): Cache the capabilities.
        (Inspector::RemoteInspector::setRemoteInspectorClient):
        Re-cache the capabilities. Scope the lock to avoid reentrant locking.

        (Inspector::RemoteInspector::clientCapabilitiesDidChange): Cache the capabilities.
        (Inspector::RemoteInspector::pushListingsNow): Use cached client capabilities.
        (Inspector::RemoteInspector::receivedGetListingMessage): Revert the change in r206797.
        (Inspector::RemoteInspector::receivedAutomationSessionRequestMessage):

2016-10-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore][JSC] Use new @throwTypeError and @throwRangeError intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=163001

        Reviewed by Keith Miller.

        Previously, the argument of @throwXXXError intrinsics must be string literal.
        But it is error-prone restriction. This patch relaxes the restriction to accept
        arbitrary values. To keep emitted bytecode small, if the argument is string literal,
        we generate the same bytecode as before. If the argument is not string literal,
        we evaluate it and perform to_string before passing to throw_static_error.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitThrowStaticError):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwTypeError):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwRangeError):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add @throwXXXError bytecode intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=162995

        Reviewed by Saam Barati.

        Builtin JS code need to check arguments carefully since it is somewhat standard library for JS.
        So bunch of `throw new @TypeError("...")` exists while usual code does not have so many.
        However the above code bloats 32 instructions per site, enlarges the size of bytecodes of builtins,
        and prevent us from inlining. We should have a way to reduce this size.

        Fortunately, we already have such a opcode: op_throw_static_error. In this patch,
        1. We extends op_throw_static_error to throw arbitrary errors. Previously, only TypeError and ReferenceError are allowed.
           We can embed ErrorType enum in op_throw_static_error to throw any types of errors.
        2. We introduce several new bytecode intrinsics, `@throwTypeError("...")`, `@throwRangeError("...")`,
           and `@throwOutOfMemoryError()`. And use it inside builtin JS instead of `throw new @TypeError("...")` thingy.
        3. DFG Node for throw_static_error is incorrectly named as "ThrowReferenceError". This patch renames it to "ThrowStaticError".

        * builtins/ArrayConstructor.js:
        * builtins/ArrayIteratorPrototype.js:
        (next):
        * builtins/ArrayPrototype.js:
        (values):
        (keys):
        (entries):
        (reduce):
        (reduceRight):
        (every):
        (forEach):
        (filter):
        (map):
        (some):
        (fill):
        (find):
        (findIndex):
        (includes):
        (sort):
        (concatSlowPath):
        (copyWithin):
        * builtins/DatePrototype.js:
        (toLocaleString.toDateTimeOptionsAnyAll):
        (toLocaleString):
        (toLocaleDateString.toDateTimeOptionsDateDate):
        (toLocaleDateString):
        (toLocaleTimeString.toDateTimeOptionsTimeTime):
        (toLocaleTimeString):
        * builtins/FunctionPrototype.js:
        (bind):
        * builtins/GeneratorPrototype.js:
        (globalPrivate.generatorResume):
        * builtins/GlobalOperations.js:
        (globalPrivate.speciesConstructor):
        * builtins/MapPrototype.js:
        (forEach):
        * builtins/ModuleLoaderPrototype.js:
        (provide):
        * builtins/ObjectConstructor.js:
        (values):
        (entries):
        (assign):
        * builtins/PromiseConstructor.js:
        (race):
        (reject):
        (resolve):
        * builtins/PromiseOperations.js:
        (globalPrivate.newPromiseCapability.executor):
        (globalPrivate.newPromiseCapability):
        (globalPrivate.initializePromise):
        * builtins/PromisePrototype.js:
        * builtins/ReflectObject.js:
        (apply):
        (deleteProperty):
        (has):
        * builtins/RegExpPrototype.js:
        (globalPrivate.regExpExec):
        (match):
        (replace):
        (search):
        (split):
        (intrinsic.RegExpTestIntrinsic.test):
        * builtins/SetPrototype.js:
        (forEach):
        * builtins/StringConstructor.js:
        (raw):
        * builtins/StringIteratorPrototype.js:
        (next):
        * builtins/StringPrototype.js:
        (match):
        (globalPrivate.repeatSlowPath):
        (repeat):
        (padStart):
        (padEnd):
        (intrinsic.StringPrototypeReplaceIntrinsic.replace):
        (localeCompare):
        (search):
        (split):
        * builtins/TypedArrayConstructor.js:
        (of):
        (from):
        * builtins/TypedArrayPrototype.js:
        (globalPrivate.typedArraySpeciesConstructor):
        (every):
        (find):
        (findIndex):
        (forEach):
        (some):
        (subarray):
        (reduce):
        (reduceRight):
        (map):
        (filter):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitThrowStaticError):
        (JSC::BytecodeGenerator::emitThrowReferenceError):
        (JSC::BytecodeGenerator::emitThrowTypeError):
        (JSC::BytecodeGenerator::emitThrowRangeError):
        (JSC::BytecodeGenerator::emitThrowOutOfMemoryError):
        (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwTypeError):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwRangeError):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwOutOfMemoryError):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw_static_error):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_throw_static_error): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL): Deleted.
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/Error.cpp:
        (JSC::createError):
        (WTF::printInternal):
        * runtime/Error.h:

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix CLoop build after r206846
        https://bugs.webkit.org/show_bug.cgi?id=162941

        Attempt to fix CLoop build part 2. r206847 was not valid.

        * jsc.cpp:

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

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

        DOMJIT::Patchpoint part should be guarded by ENABLE(JIT).

        * jsc.cpp:

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add initial CheckDOM and CallDOM implementations
        https://bugs.webkit.org/show_bug.cgi?id=162941

        Reviewed by Filip Pizlo.

        This patch implements a prototype of DOMJIT accelerated getter.
        We add two new DFG nodes, CheckDOM and CallDOM.

        CheckDOM is used to filter inappropriate |this| object for DOM getter. Its functionality
        is equivalent to jsDynamicCast's Check. You can use like "CheckDOM, @1, JSNode::info()",
        and this CheckDOM incurs a BadType exit if the class of the given @1 is not a subclass of
        JSNode::info().

        CallDOM is used to emit actual DOM operations. It takes GlobalObject and checked DOM
        object. And it returns JSValue as its result.

        Both CheckDOM and CallDOM can take a DOMJIT::Patchpoint. This is somewhat code snippet
        generator, and is injectable to DFG and FTL. DFG and FTL set up registers correctly
        according to DOMJIT::Patchpoint's requirement and invoke this patchpoint generator to emit code.
        While CallDOM always requires a patchpoint, ideally CheckDOM does not require it since
        isSubclassOf check can be implemented in DFG / FTL side. However, some classes have a
        faster way to query isSubclassOf. For example, JSNode in WebCore introduces a special
        JSType to optimize this query. CheckDOM's patchpoint gives us a chance to emit special
        faster code for such a case.

        By leveraging above nodes, we can construct DOMJIT accelerated getter. When DFG recognizes the
        given getter call is CustomGetter and it has DOMJIT::GetterSetter information, DFG emits the above nodes.
        We implemented a prototype in jsc.cpp shell as DOMJITGetter to test the functionality.

        Notes about the future extensions.

        1. Currently, we do not allow CallDOM to emit any function calls. This will be extended by
           adding `addSlowPathCall` functionality to DOMJIT::Patchpoint later. Interesting thing is that
           we need to create an abstraction over DFG slow path call and FTL slow path call!

        2. CheckDOM is not handled in DFGTypeCheckHoistingPhase yet. And we have a chance to merge several CheckDOM into one.
           For example, given CheckDOM A and CheckDOM B to the same target. If A is subclass of B, we can merge them to CheckDOM A.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3Effects.h:
        (JSC::B3::Effects::forCheck):
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByIdStatus::makesCalls):
        (JSC::GetByIdStatus::dump):
        * bytecode/GetByIdStatus.h:
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::isCustom):
        (JSC::GetByIdStatus::takesSlowPath):
        (JSC::GetByIdStatus::isSimple): Deleted.
        * bytecode/SpeculatedType.cpp:
        (JSC::speculationFromClassInfo):
        * dfg/DFGAbstractInterpreter.h:
        (JSC::DFG::AbstractInterpreter::filterClassInfo):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::filterClassInfo):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::filterClassInfo):
        * dfg/DFGAbstractValue.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::ByteCodeParser::handleGetById):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasDOMJIT):
        (JSC::DFG::Node::domJIT):
        (JSC::DFG::Node::hasClassInfo):
        (JSC::DFG::Node::classInfo):
        (JSC::DFG::Node::OpInfoWrapper::OpInfoWrapper):
        (JSC::DFG::Node::OpInfoWrapper::operator=):
        * dfg/DFGNodeType.h:
        * dfg/DFGOpInfo.h:
        (JSC::DFG::OpInfo::OpInfo):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::allocateTemporaryRegistersForPatchpoint):
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        (JSC::DFG::SpeculativeJIT::compileCheckDOM):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureAbstractValue.cpp:
        (JSC::DFG::StructureAbstractValue::filterClassInfoSlow):
        (JSC::DFG::StructureAbstractValue::isSubClassOf):
        * dfg/DFGStructureAbstractValue.h:
        (JSC::DFG::StructureAbstractValue::filterClassInfo):
        (JSC::DFG::StructureAbstractValue::filter): Deleted.
        * domjit/DOMJITPatchpointParams.h: Copied from Source/JavaScriptCore/dfg/DFGOpInfo.h.
        (JSC::DOMJIT::PatchpointParams::~PatchpointParams):
        (JSC::DOMJIT::PatchpointParams::size):
        (JSC::DOMJIT::PatchpointParams::at):
        (JSC::DOMJIT::PatchpointParams::operator[]):
        (JSC::DOMJIT::PatchpointParams::gpScratch):
        (JSC::DOMJIT::PatchpointParams::fpScratch):
        (JSC::DOMJIT::PatchpointParams::PatchpointParams):
        * domjit/DOMJITReg.h: Added.
        (JSC::DOMJIT::Reg::Reg):
        (JSC::DOMJIT::Reg::isGPR):
        (JSC::DOMJIT::Reg::isFPR):
        (JSC::DOMJIT::Reg::isJSValueRegs):
        (JSC::DOMJIT::Reg::gpr):
        (JSC::DOMJIT::Reg::fpr):
        (JSC::DOMJIT::Reg::jsValueRegs):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnreachable): Deleted.
        * jit/AssemblyHelpers.h:
        * jsc.cpp:
        (WTF::DOMJITNode::DOMJITNode):
        (WTF::DOMJITNode::createStructure):
        (WTF::DOMJITNode::create):
        (WTF::DOMJITNode::value):
        (WTF::DOMJITNode::offsetOfValue):
        (WTF::DOMJITGetter::DOMJITGetter):
        (WTF::DOMJITGetter::createStructure):
        (WTF::DOMJITGetter::create):
        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
        (WTF::DOMJITGetter::domJITNodeGetterSetter):
        (WTF::DOMJITGetter::finishCreation):
        (WTF::DOMJITGetter::customGetter):
        (GlobalObject::finishCreation):
        (functionCreateDOMJITNodeObject):
        (functionCreateDOMJITGetterObject):

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Do not construct Simple GetByIdStatus against self-custom-accessor case
        https://bugs.webkit.org/show_bug.cgi?id=162993

        Reviewed by Filip Pizlo.

        We accidentally created a Simple GetByIdStatus against self-custom-accessor case: the object has own custom accessor property and get_by_id hits.
        If we returned such a result, the GetById will be turned to GetByOffset and it looks up incorrect thing like CustomGetterSetter object.
        We do not hit this bug before since maybe there is no object that has own custom-accessor and this custom-accessor does not raise an error.
        For example, "Node.prototype" has "firstChild" custom accessor. But since "Node.prototype" itself does not have Node::info(), "Node.prototype.firstChild"
        access always raises an error. I guess all the custom accessors follow this pattern. This bug is uncovered when testing DOMJIT (This bug causes crash and
        it can occur even if we disabled DOMJIT).

        But such a assumption is not guaranteed. In this patch, we fix this by not returning Simple GetById.

        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByIdStatus::computeFor):

2016-10-05  Saam Barati  <sbarati@apple.com>

        PCToCodeOriginMap builder should use labelIgnoringWatchpoints() inside the DFG
        https://bugs.webkit.org/show_bug.cgi?id=162936

        Reviewed by Michael Saboff.

        label() may insert nops because of an InvalidationPoint. It does that
        because we don't want code that comes after an InvalidationPoint that isn't
        effected by the invalidation point to be overwritten if we fire the
        InvalidationPoint. PCToCodeOriginMap just grabs labels to build
        a mapping, it never emits code that actually jumps to those labels.
        Therefore, it should never cause us to emit nops.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):

2016-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Put variation fonts work behind a compile-time flag
        https://bugs.webkit.org/show_bug.cgi?id=162949

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2016-10-05  Andy VanWagoner  <thetalecrafter@gmail.com>

        [INTL] Implement Intl.getCanonicalLocales
        https://bugs.webkit.org/show_bug.cgi?id=162768

        Reviewed by Benjamin Poulain.

        Implement Intl.getCanonicalLocales from ECMA 402 (3rd edition)
        http://ecma-international.org/ecma-402/3.0/index.html#sec-intl.getcanonicallocales

        Reuse canonicalizeLocaleList and copy the results into a new JSArray.

        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        (JSC::intlObjectFuncGetCanonicalLocales):

2016-10-05  Michael Saboff  <msaboff@apple.com>

        Bad ASSERT in ClonedArguments::createByCopyingFrom()
        https://bugs.webkit.org/show_bug.cgi?id=162988

        Reviewed by Keith Miller.

        Removed bogus assert.

        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createByCopyingFrom):

2016-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=162903

        Reviewed by Alex Christensen.

        Rename build guards for the remaining implementation of the legacy EME API
        to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
        of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.

        * Configurations/FeatureDefines.xcconfig:

2016-10-05  Csaba Osztrogonác  <ossy@webkit.org>

        ARM EABI buildfix after r206778
        https://bugs.webkit.org/show_bug.cgi?id=162964

        Unreviewed trivial fix.

        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupArgumentsWithExecState):

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

        String.prototype.toLowerCase should be a DFG/FTL intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=162887

        Reviewed by Filip Pizlo and Yusuke Suzuki.

        This patch makes ToLowerCase an intrinsic in the DFG/FTL. On the fast
        path, the intrinsic will loop over an 8-bit string ensuring it's already
        lower case, and simply return the string. In the slow path, it'll call
        into C code to make a new string.

        This is a 7-8% speedup on ES6SampleBench/Basic.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToLowerCase):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase):
        * jit/JITOperations.h:
        * runtime/Intrinsic.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):

2016-10-04  Brian Burg  <bburg@apple.com>

        Web Inspector: don't synchronously send a listing message if we might need to query _WKAutomationDelegate
        https://bugs.webkit.org/show_bug.cgi?id=162810
        <rdar://problem/28571460>

        Reviewed by Timothy Hatcher.

        We shouldn't ever access the _WKAutomationDelegate through RemoteInspector::Client methods
        off of the main thread, because it could cause problems. This happens when we pushListingsNow()
        in response to a WIRApplicationGetListingMessage XPC message. In this case, just use
        pushListingsSoon() since it dispatches on the correct (main) queue to gather listing information.

        This may induce a slight update delay when first connecting to the UIProcess through RemoteInspector,
        but this is at most 200ms and will coalesce with other updates that happen when UIProcess gets set up.

        There are no other code paths through RemoteInspector (for UIProcess) that could cause a call
        to pushListingsNow(), so this only needs to be changed in the XPC message handler.

        * inspector/remote/RemoteInspector.mm:
        (Inspector::RemoteInspector::receivedGetListingMessage):

2016-10-04  JF Bastien  <jfbastien@apple.com>

        WebAssembly: handle a few corner cases
        https://bugs.webkit.org/show_bug.cgi?id=162884

        Reviewed by Keith Miller.

        * wasm/JSWASMModule.cpp: missing include broke cmake build
        * wasm/WASMFunctionParser.h:
        (JSC::WASM::FunctionParser<Context>::parseBlock): check op is valid
        (JSC::WASM::FunctionParser<Context>::parseExpression): switch covers all cases
        * wasm/WASMOps.h:
        (JSC::WASM::isValidOpType): op is valid
        * wasm/WASMParser.h:
        (JSC::WASM::Parser::consumeString): avoid str[i] being one-past-the-end
        (JSC::WASM::Parser::parseUInt32): shift math around to avoid overflow

2016-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION (r206778): Release JSC test ChakraCore.yaml/ChakraCore/test/Error/validate_line_column.js.default failing
        https://bugs.webkit.org/show_bug.cgi?id=162937

        Reviewed by Saam Barati.

        We dropped expression info accidentally at r206777.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCallDefineProperty):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::ClassExprNode::emitBytecode):

2016-10-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
        https://bugs.webkit.org/show_bug.cgi?id=162916

        Reviewed by Filip Pizlo.

        In this patch, we introduce DOMJIT::GetterSetter.
        This class maintains information required to emit JIT code in DFG and FTL.
        DOMJIT::GetterSetter has 2 virtual functions: checkDOM and callDOM.
        These functions can return a DOMJIT::Patchpoint that allows us to inject
        appropriate machine code during DFG and FTL phases. DFG and FTL will invoke
        these functions to get a patchpoint. And this patchpoint will be used to
        emit code corresponding to CheckDOM and CallDOM DFG nodes, which will be added
        in subsqeunt patch.

        We propagate DOMJIT::GetterSetter through PropertySlot, AccessCase, GetByIdVariant,
        and GetByIdStatus along with CustomGetter to teach DFG that this custom access
        code has a chance to be inlined with this DOMJIT::GetterSetter information.
        Instead of propagating CustomGetterSetter holding DOMJIT::GetterSetter and CustomGetter,
        we propagate CustomGetter and DOMJIT::GetterSetter. This is because of the current
        CustomGetterSetter design that we reify CustomGetterSetters only when we need to reify
        all the properties. This design allows us to avoid frequent CustomGetterSetter allocations
        and structure transitions.

        Currently, domJIT field is always nullptr since there is no DOMJITAttribute user.
        When we add this, we will add code handling this DOMJIT::GetterSetter in DFG::ByteCodeParser.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetByIdVariant.cpp:
        (JSC::GetByIdVariant::GetByIdVariant):
        (JSC::GetByIdVariant::operator=):
        (JSC::GetByIdVariant::attemptToMerge):
        (JSC::GetByIdVariant::dumpInContext):
        * bytecode/GetByIdVariant.h:
        (JSC::GetByIdVariant::domJIT):
        (JSC::GetByIdVariant::intrinsic): Deleted.
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::get):
        (JSC::AccessCase::clone):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessCase::domJIT):
        (JSC::AccessCase::RareData::RareData):
        * dfg/DFGNode.h:
        * domjit/DOMJITGetterSetter.h: Added.
        (JSC::DOMJIT::GetterSetter::GetterSetter):
        (JSC::DOMJIT::GetterSetter::~GetterSetter):
        (JSC::DOMJIT::GetterSetter::getter):
        (JSC::DOMJIT::GetterSetter::setter):
        (JSC::DOMJIT::GetterSetter::thisClassInfo):
        * domjit/DOMJITPatchpoint.h: Added.
        (JSC::DOMJIT::Patchpoint::create):
        (JSC::DOMJIT::Patchpoint::setGenerator):
        (JSC::DOMJIT::Patchpoint::generator):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetByID):
        * runtime/CustomGetterSetter.h:
        * runtime/JSObject.h:
        (JSC::JSObject::fillCustomGetterPropertySlot):
        * runtime/Lookup.h:
        (JSC::HashTableValue::domJIT):
        (JSC::getStaticPropertySlotFromTable):
        (JSC::putEntry):
        (JSC::reifyStaticProperty):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::domJIT):
        (JSC::PropertySlot::setCacheableCustom):

2016-09-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add a new byte code op_define_property instead of calling defineProperty
        https://bugs.webkit.org/show_bug.cgi?id=162108

        Reviewed by Saam Barati.

        To construct ES6 class, we emitted bytecode that performs the following operations.

            1. construct a new object
            2. put "configurable", "enumerable" etc. fields
            3. call "defineProperty" function

        However, this approach has problems. Every time we define a class method, we need to create
        a new object to represent property descriptor. This can be removed if we can introduce
        a special bytecode or special function.

        This patch introduces new bytecodes, op_define_data_property and op_define_accessor_property.
        Instead of taking an object, they takes several registers to avoid object allocations.
        We're planning to use this bytecode to implement Object.defineProperty in builtin JS next.
        This allows us to leverage object allocation sinking. And it also gives us a chance to use
        faster ::get and ::hasProperty in JS.

        Originally, I attempted to create one bytecode, op_define_property. However, it takes too many
        children in DFG and uses so many registers in DFG. This leads tricky program in 32bit platforms.
        Furthermore, it does not fit to the number of x64 argument registers. So instead, we introduce
        two bytecodes.

        And for op_define_accessor_property, we perform CellUse edge filter to getter and setter children.
        This edge filter makes us possible to use SpeculateCellOperand and reduce the number of used registers
        in comparison with JSValueOperand. To make children Cells even if we do not specify some accessors (for
        example, { get: func, set: null } case), we fill registers with special throwTypeErrorFunction.
        The attributes bitset keep information like "This property descriptor only has getter slot".

        In these two bytecodes, we take attributes (configurable, enumerable, writable, hasGetter etc.) as
        register instead of embedding constant int value because we will use these bytecodes to implement
        Object.defineProperty next. In Object.defineProperty case, an attributes are not statically defined
        at bytecode compiling time.

        Run ES6SampleBench/Air 20 times. The result shows ~2% performance improvement.

        Baseline:
            firstIteration:     84.05 ms +- 4.37 ms
            averageWorstCase:   40.54 ms +- 2.81 ms
            steadyState:        3317.49 ms +- 48.25 ms
            summary:            223.51 ms +- 5.07 ms

        Patched:
            firstIteration:     84.46 ms +- 4.22 ms
            averageWorstCase:   41.48 ms +- 2.33 ms
            steadyState:        3253.48 ms +- 29.31 ms
            summary:            224.40 ms +- 4.72 ms

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/BytecodeList.json:
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeOffset):
        (JSC::computeDefsForBytecodeOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):
        * bytecode/SpecialPointer.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitMoveLinkTimeConstant):
        (JSC::BytecodeGenerator::emitCallDefineProperty):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::BitwiseNotNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        (JSC::ObjectPatternNode::bindValue):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileDefineDataProperty):
        (JSC::DFG::SpeculativeJIT::compileDefineAccessorProperty):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileDefineDataProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileDefineAccessorProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByValWithThis): Deleted.
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::setupFourStubArgsGPR): Deleted.
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupFourStubArgsGPR):
        (JSC::CCallHelpers::setupFiveStubArgsGPR):
        (JSC::CCallHelpers::setupArgumentsWithExecState):
        (JSC::CCallHelpers::setupStubArgsGPR):
        (JSC::CCallHelpers::prepareForTailCallSlow): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_define_data_property):
        (JSC::JIT::emit_op_define_accessor_property):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/DefinePropertyAttributes.h: Added.
        (JSC::DefinePropertyAttributes::DefinePropertyAttributes):
        (JSC::DefinePropertyAttributes::rawRepresentation):
        (JSC::DefinePropertyAttributes::hasValue):
        (JSC::DefinePropertyAttributes::setValue):
        (JSC::DefinePropertyAttributes::hasGet):
        (JSC::DefinePropertyAttributes::setGet):
        (JSC::DefinePropertyAttributes::hasSet):
        (JSC::DefinePropertyAttributes::setSet):
        (JSC::DefinePropertyAttributes::writable):
        (JSC::DefinePropertyAttributes::configurable):
        (JSC::DefinePropertyAttributes::enumerable):
        (JSC::DefinePropertyAttributes::setWritable):
        (JSC::DefinePropertyAttributes::setConfigurable):
        (JSC::DefinePropertyAttributes::setEnumerable):
        (JSC::DefinePropertyAttributes::fillWithTriState):
        (JSC::DefinePropertyAttributes::extractTriState):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::throwTypeErrorFunction):
        (JSC::JSGlobalObject::definePropertyFunction): Deleted.
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::addDefineProperty): Deleted.
        * runtime/ObjectConstructor.h:
        * runtime/PropertyDescriptor.h:
        (JSC::toPropertyDescriptor):

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

        Follow up fix to GetMapBucket and MapHash speculating on child node types.
        To fix this, on 32-bit platforms, we do not speculate on the child
        type since we just call into C code for these nodes.

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

2016-10-03  Saam Barati  <sbarati@apple.com>

        GetMapBucket node should speculate on the type of its 'key' child
        https://bugs.webkit.org/show_bug.cgi?id=161638

        Reviewed by Filip Pizlo.

        This eliminates type-check branches when we've already
        proven the type of the incoming key. Also, it reduces
        the branches we emit when type checking the bucket's key.

        This is a 2-3% speedup on ES6SampleBench/Basic.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):

2016-10-03  Christopher Reid  <Christopher.Reid@am.sony.com>

        Offline asm should not output masm assembly when using a x86_64 asm backend
        https://bugs.webkit.org/show_bug.cgi?id=162705

        When cross compiling on windows to Clang, masm was being generated simply because
        the os was windows. This change adds a command line parameter --assembler=MASM
        to set the output assembly to masm.
        The functions isGCC and isCompilingToWindows were removed as they are no longer called.

        Reviewed by Mark Lam.

        * CMakeLists.txt:
        * offlineasm/asm.rb:
        * offlineasm/x86.rb:

2016-10-03  JF Bastien  <jfbastien@apple.com>

        Auto-generate WASMOps.h, share with testing JSON file
        https://bugs.webkit.org/show_bug.cgi?id=162870

        Reviewed by Keith Miller.

        Add a few new opcodes, but keep this mostly as-is for now. I want
        to generate smarter code but will do so in a later update to
        reduce disruption.

        * wasm/WASMOps.h: auto-generated from ./JSTests/stress/wasm/to-c++.js

2016-10-03  Michael Saboff  <msaboff@apple.com>

        Creating pcToOriginMap in FTL shouldn't insert unnecessary NOPs
        https://bugs.webkit.org/show_bug.cgi?id=162879

        Reviewed by Filip Pizlo.

        If there is a recent watchpoint label, using MacroAssembler::label() will pad
        the instruction stream with NOPs to provide space for a jump.  This changes
        Air::generate() to use labelIgnoringWatchpoints() to create pcToOriginMap
        entries to eliminate unneccesary NOPs.

        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generate):
        * b3/testb3.cpp:
        (JSC::B3::testPCOriginMapDoesntInsertNops): New test.
        (JSC::B3::run):

2016-10-03  Saam Barati  <sbarati@apple.com>

        MapHash should speculate on the type of its child node
        https://bugs.webkit.org/show_bug.cgi?id=161922

        Reviewed by Filip Pizlo.

        This allows us to remove runtime type checks when we've already
        proven the type of the incoming value.

        This is a 2-3% speedup on ES6SampleBench/Basic.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::wangsInt64Hash):
        (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):

2016-10-03  Filip Pizlo  <fpizlo@apple.com>

        B3 trapping memory accesses should be documented
        https://bugs.webkit.org/show_bug.cgi?id=162845

        Reviewed by Geoffrey Garen.

        While writing some documentation, I found some small holes in the code.

        * b3/B3Effects.cpp:
        (JSC::B3::Effects::operator==): Need this to write tests.
        (JSC::B3::Effects::operator!=): Need this to write tests.
        * b3/B3Effects.h:
        * b3/B3HeapRange.h:
        * b3/B3MemoryValue.cpp:
        (JSC::B3::MemoryValue::dumpMeta): Sometimes the heap range dump won't show you the memory value's actual range. This makes the dump show you the actual range in that case.
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects): While documenting this, I remembered that trapping also has to imply reading top. I fixed this.
        * b3/testb3.cpp:
        (JSC::B3::testTrappingLoad): Added checks for the effects of trapping loads.
        (JSC::B3::testTrappingStore): Added checks for the effects of trapping stores.
        (JSC::B3::testMoveConstants): Made this not crash with validation.

2016-10-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] GeneratorFunction (a.k.a. GeneratorWrapperFunction)'s prototype object does not have constructor property
        https://bugs.webkit.org/show_bug.cgi?id=162849

        Reviewed by Geoffrey Garen.

        Since GeneratorFunction is not constructible, GeneratorFunction.prototype does not have "constructor" property.

            function* generatorFunction() { }
            generatorFunction.prototype.constructor // undefined

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):

2016-10-03  Nicolas Breidinger  <Nicolas.Breidinger@sony.com>

        JSStringRef should define JSChar without platform checks
        https://bugs.webkit.org/show_bug.cgi?id=162808

        Reviewed by Mark Lam.

        * API/JSStringRef.h:

2016-10-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Align attributes of Generator related properties to spec
        https://bugs.webkit.org/show_bug.cgi?id=162839

        Reviewed by Saam Barati.

        This patch fixes attributes of Generator related properties.
        These fixes are covered by test262.

        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::GeneratorFunctionConstructor::finishCreation):
        * runtime/GeneratorFunctionConstructor.h:
        * runtime/GeneratorFunctionPrototype.cpp:
        (JSC::GeneratorFunctionPrototype::finishCreation):
        * runtime/GeneratorFunctionPrototype.h:
        * runtime/GeneratorPrototype.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2016-10-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] GeneratorFunction constructor should instantiate generator function
        https://bugs.webkit.org/show_bug.cgi?id=162838

        Reviewed by Saam Barati.

        GeneratorFunction's constructor should return an instance of JSGeneratorFunction
        instead of JSFunction. In this patch, we fix the following 2 things.

        1. GeneratorFunction constructor should use JSGeneratorFunction

            Previously, we used JSFunction to construct a result. It's wrong. We use JSGeneratorFunction.

        2. Pass newTarget into GeneratorFunction constructor to make it subclassible

            We did not leverage newTarget when using GeneratorFunction constructor.
            Using it correctly to create the subclass Structure and making GeneratorFunction subclassible.

        Test262 test covers (1), but (2) is not covered. We add tests that covers both to stress tests.

        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::constructGeneratorFunctionConstructor):
        * runtime/JSGeneratorFunction.cpp:
        (JSC::JSGeneratorFunction::JSGeneratorFunction):
        (JSC::JSGeneratorFunction::createImpl):
        (JSC::JSGeneratorFunction::create):
        (JSC::JSGeneratorFunction::createWithInvalidatedReallocationWatchpoint):
        * runtime/JSGeneratorFunction.h:

2016-10-01  Filip Pizlo  <fpizlo@apple.com>

        Get rid of isMarkedOrNewlyAllocated
        https://bugs.webkit.org/show_bug.cgi?id=162842

        Reviewed by Dan Bernstein.

        This function has become dead code. This change removes it.

        * heap/CellContainer.h:
        * heap/CellContainerInlines.h:
        (JSC::CellContainer::isMarkedOrNewlyAllocated): Deleted.
        * heap/LargeAllocation.h:
        (JSC::LargeAllocation::isLive):
        (JSC::LargeAllocation::isMarkedOrNewlyAllocated): Deleted.
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::isMarkedOrNewlyAllocated): Deleted.
        (JSC::MarkedBlock::isMarkedOrNewlyAllocated): Deleted.
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::isMarkedOrNewlyAllocated): Deleted.
        (JSC::MarkedBlock::isMarkedOrNewlyAllocated): Deleted.

2016-10-01  Joseph Pecoraro  <pecoraro@apple.com>

        Rename DebugHookID to DebugHookType
        https://bugs.webkit.org/show_bug.cgi?id=162820

        Reviewed by Alex Christensen.

        * bytecode/CodeBlock.cpp:
        (JSC::debugHookName):
        (JSC::CodeBlock::dumpBytecode):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDebugHook):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::debug):
        * interpreter/Interpreter.h:
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping to a line with an autoContinue breakpoint should still pause
        https://bugs.webkit.org/show_bug.cgi?id=161712
        <rdar://problem/28193970>

        Reviewed by Brian Burg.

        * debugger/Debugger.cpp:
        (JSC::Debugger::pauseIfNeeded):
        If we stepped to an auto-continue breakpoint we should continue
        stepping, not just continue.

2016-09-30  Filip Pizlo  <fpizlo@apple.com>

        B3 should support trapping memory accesses
        https://bugs.webkit.org/show_bug.cgi?id=162689

        Reviewed by Geoffrey Garen.

        This adds a traps flag to B3::Kind. It also makes B3::Kind work more like Air::Kind, in the
        sense that it's a bag of distinct bits - it doesn't need to be a union unless we get enough
        things that it would make a difference.

        The only analysis that needs to know about traps is effects. It now knows that traps implies
        sideExits, which means that this turns off DCE. The only optimization that needs to know
        about traps is eliminateCommonSubexpressions(), which needs to pessimize its store
        elimination if the store traps.

        The hard part of this change is teaching the instruction selector to faithfully carry the
        traps flag down to Air. I got this to work by making ArgPromise a non-copyable object that
        knows whether you've used it in an instruction. It knows when you call consume(). If you do
        this then ArgPromise cannot be destructed without first passing your inst through it. This,
        along with a few other hacks, means that all of the load-op and load-op-store fusions
        correctly carry the trap bit: if any of the B3 loads or stores involved traps then you get
        traps in Air.

        This framework also sets us up to do bug 162688, since the ArgPromise::inst() hook is
        powerful enough to allow wrapping the instruction with a Patch.

        I added some tests to testb3 that verify that optimizations are appropriately inhibited and
        that the traps flag survives until the bitter end of Air.

        * b3/B3EliminateCommonSubexpressions.cpp:
        * b3/B3Kind.cpp:
        (JSC::B3::Kind::dump):
        * b3/B3Kind.h:
        (JSC::B3::Kind::Kind):
        (JSC::B3::Kind::hasExtraBits):
        (JSC::B3::Kind::isChill):
        (JSC::B3::Kind::setIsChill):
        (JSC::B3::Kind::hasTraps):
        (JSC::B3::Kind::traps):
        (JSC::B3::Kind::setTraps):
        (JSC::B3::Kind::operator==):
        (JSC::B3::Kind::hash):
        (JSC::B3::trapping):
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::ArgPromise::swap):
        (JSC::B3::Air::LowerToAir::ArgPromise::ArgPromise):
        (JSC::B3::Air::LowerToAir::ArgPromise::operator=):
        (JSC::B3::Air::LowerToAir::ArgPromise::~ArgPromise):
        (JSC::B3::Air::LowerToAir::ArgPromise::setTraps):
        (JSC::B3::Air::LowerToAir::ArgPromise::consume):
        (JSC::B3::Air::LowerToAir::ArgPromise::inst):
        (JSC::B3::Air::LowerToAir::trappingInst):
        (JSC::B3::Air::LowerToAir::loadPromiseAnyOpcode):
        (JSC::B3::Air::LowerToAir::appendUnOp):
        (JSC::B3::Air::LowerToAir::appendBinOp):
        (JSC::B3::Air::LowerToAir::tryAppendStoreUnOp):
        (JSC::B3::Air::LowerToAir::tryAppendStoreBinOp):
        (JSC::B3::Air::LowerToAir::appendStore):
        (JSC::B3::Air::LowerToAir::append):
        (JSC::B3::Air::LowerToAir::createGenericCompare):
        (JSC::B3::Air::LowerToAir::createBranch):
        (JSC::B3::Air::LowerToAir::createCompare):
        (JSC::B3::Air::LowerToAir::createSelect):
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects):
        * b3/B3Value.h:
        * b3/air/AirCode.h:
        * b3/testb3.cpp:
        (JSC::B3::testTrappingLoad):
        (JSC::B3::testTrappingStore):
        (JSC::B3::testTrappingLoadAddStore):
        (JSC::B3::testTrappingLoadDCE):
        (JSC::B3::testTrappingStoreElimination):
        (JSC::B3::run):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping over/out of a function sometimes resumes instead of taking you to caller
        https://bugs.webkit.org/show_bug.cgi?id=162802
        <rdar://problem/28569982>

        Reviewed by Mark Lam.

        * debugger/Debugger.cpp:
        (JSC::Debugger::stepOverStatement):
        (JSC::Debugger::stepOutOfFunction):
        Enable stepping mode when we start stepping.

2016-09-30  Filip Pizlo  <fpizlo@apple.com>

        B3::moveConstants should be able to edit code to minimize the number of constants
        https://bugs.webkit.org/show_bug.cgi?id=162764

        Reviewed by Saam Barati.

        There are some interesting cases where we can reduce the number of constant materializations if
        we teach moveConstants() how to edit code. The two examples that this patch supports are:

            - Loads and stores from a constant pointer. Since loads and stores get an offset for free
              and the instruction selector is really good at handling it, and since we can query Air to
              see what kinds of offsets are legal, we can sometimes avoid using a constant pointer that
              is specific to the absolute address of that load and instead pick some other constant
              that is within offset distance of ours.

            - Add and Sub by a constant (x + c, x - c). Since x + c = x - -c and x - c = x + -c, we can
              flip Add to Sub or vice versa if the negated constant is available.

        This change makes moveConstants() pick the most dominant constant that works for an value. In
        the case of memory accesses, it uses Air::Arg::isValidAddrForm() to work out what other
        constants would work. In the case of Add/Sub, it simply looks for the negated constant. This
        should result in something like a minimal number of constants since these rules always pick the
        most dominant constant that works - so if an Add's constant is already most dominant then
        nothing changes, but if the negated one is more dominant then it becomes a Sub.

        This is a 0.5% speed-up on LongSpider and neutral elsewhere. It's a speed-up because the
        absolute address thing reduces the number of address materializations that we have to do, while
        the add/sub thing prevents us from having to materialize 0x1000000000000 to box doubles.
        However, this may introduce a pathology, which I've filed a bug for: bug 162796.

        * b3/B3MoveConstants.cpp:
        * b3/B3MoveConstants.h:
        * b3/B3UseCounts.h:
        * b3/air/AirFixObviousSpills.cpp:
        * b3/testb3.cpp:
        (JSC::B3::testMoveConstants):
        (JSC::B3::run):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Fix modules tests after r206653 handle breakpoint locations in import/export statements
        https://bugs.webkit.org/show_bug.cgi?id=162807

        Reviewed by Mark Lam.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createExportDefaultDeclaration):
        (JSC::ASTBuilder::createExportLocalDeclaration):
        Don't record an extra breakpoint location for the statement
        within an export statement.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseModuleSourceElements):
        Record a pause location for import/export statements.

2016-09-30  Mark Lam  <mark.lam@apple.com>

        Remove the dumping of the stack back trace in VM::verifyExceptionCheckNeedIsSatisfied().
        https://bugs.webkit.org/show_bug.cgi?id=162797

        Reviewed by Geoffrey Garen.

        This is because the RELEASE_ASSERT() that follows immediately after will also
        dump the stack back trace.  Hence, the first dump will be redundant.

        Also removed an extra space in the dataLog output.

        * runtime/VM.cpp:
        (JSC::VM::verifyExceptionCheckNeedIsSatisfied):

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping through `a(); b(); c();` it is unclear where we are and what is about to execute
        https://bugs.webkit.org/show_bug.cgi?id=161658
        <rdar://problem/28181254>

        Reviewed by Geoffrey Garen.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        Updated pause location for unary expressions.

2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Breakpoints on blank lines or comments don't break
        https://bugs.webkit.org/show_bug.cgi?id=9885
        <rdar://problem/6134406>

        Reviewed by Mark Lam.

        This change introduces a way to perform a Debugger Parse of a script.
        This debugger parse gathers a list of breakpoint locations, which
        the backend uses to resolve breakpoint locations that came from the
        Inspector frontend to the exact location we would actually pause.
        We gather this information from the parser so that we can eagerly
        get this information without requiring the code to have executed (the
        real op_debugs are generated during bytecode generation when code
        is actually evaluated).

        If an input location was on a line with whitespace or a comment, the
        resolved breakpoint location would be before the next statement that
        will be executed. That may be the next line, or even later. We also
        update our policy when setting breakpoints on and around function
        statements to better match user expectations.

        For example, when resolving breakpoints in:

            1.  // Comment
            2.  before;
            3.
            4.  function foo() {
            5.      inside;
            6.  }
            7.
            8.  after;

        A breakpoint on line 1, a comment, resolves to line 2 the next
        statement that will execute.

        A breakpoint on line 3 or 7, empty lines, resolves to line 8 the next
        statement that will execute. This skips past the definition of foo,
        just like stepping would have done. The creation of foo would have
        been hoisted, which would have happened before execution of the
        other statements.

        A breakpoint on line 4, a function signature, resolves to line 5,
        inside the function. Users would expect to pause inside of a function
        when setting a breakpoint on that function's name or opening brace.

        A breakpoint on line 6, a function's closing brace, resolves to
        line 6. The debugger will pause whenever execution leaves foo due to
        a return and not an exception. This matches stepping behavior. An
        explicit or implicit return (the implicit return undefined) will
        pause on the closing brace as we leave the function, giving users
        an opportunity to inspect the final state before leaving.

        --

        At this point, op_debug's are still emitted at custom locations during
        bytecode generation of other statements / expressions. In order to
        ensure the generated op_debugs correspond to locations the Parser
        determined were breakpoint locations, the Parser sets a "needs debug
        hook" flag on the nodes it will use for breakpoint locations, and
        we assert during bytecode generation that op_debugs are only emitted
        for nodes that were marked as needing debug hooks.

        This still leaves open the possibility that the Parser will mark
        some nodes that get missed during bytecode generation, so we might
        fail to emit some op_debugs. The next step will be eliminating the
        custom emitDebugHooks spread across StatementNode and ExpressionNode
        subclasses, and instead always generating op_debugs whenever we
        emit a flagged node.

        --

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        New DebuggerParseData files.

        * API/JSScriptRef.cpp:
        (OpaqueJSScript::OpaqueJSScript):
        * jsc.cpp:
        (functionCheckModuleSyntax):
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::SourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::sourceType):
        (JSC::StringSourceProvider::create):
        (JSC::StringSourceProvider::StringSourceProvider):
        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
        (JSC::SourceProvider::startPosition): Deleted.
        Add a new type on SourceProvider to distinguish if its script was
        intended to be a Script, Module, or WebAssembly. This information
        will be needed to know how to best parse this file when the
        debugger decides to lazily parse.

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
        (JSC::WebAssemblyExecutable::WebAssemblyExecutable):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        ASSERT the SourceProvider type matches the executable type we are
        creating for it.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::breakpointLocation):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::operatorStackPop):
        When gathering breakpoint positions, get the position from the
        current node. In the SyntaxChecker, return an invalid position.

        * parser/Nodes.h:
        (JSC::ExpressionNode::needsDebugHook):
        (JSC::ExpressionNode::setNeedsDebugHook):
        (JSC::StatementNode::needsDebugHook):
        (JSC::StatementNode::setNeedsDebugHook):
        When gathering breakpoint positions, mark the node as needing
        a debug hook. For now we assert op_debugs generated must come
        from these nodes. Later we should just generate op_debugs for
        these nodes.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::Parser):
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::parseDoWhileStatement):
        (JSC::Parser<LexerType>::parseWhileStatement):
        (JSC::Parser<LexerType>::parseArrowFunctionSingleExpressionBodySourceElements):
        (JSC::Parser<LexerType>::parseForStatement):
        (JSC::Parser<LexerType>::parseWithStatement):
        (JSC::Parser<LexerType>::parseSwitchStatement):
        (JSC::Parser<LexerType>::parseStatement):
        (JSC::Parser<LexerType>::parseFunctionBody):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseIfStatement):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        * parser/Parser.h:
        (JSC::parse):
        Add an optional DebuggerParseData struct to the Parser. When available
        the Parser will gather debugger data, and parse all functions with the
        ASTBuilder instead of SyntaxChecking inner functions.

        * debugger/DebuggerParseData.cpp: Added.
        (JSC::DebuggerPausePositions::breakpointLocationForLineColumn):
        (JSC::DebuggerPausePositions::sort):
        (JSC::gatherDebuggerParseData):
        (JSC::gatherDebuggerParseDataForSource):
        * debugger/DebuggerParseData.h: Copied from Source/JavaScriptCore/debugger/DebuggerPrimitives.h.
        (JSC::DebuggerPausePositions::DebuggerPausePositions):
        (JSC::DebuggerPausePositions::appendPause):
        (JSC::DebuggerPausePositions::appendEntry):
        (JSC::DebuggerPausePositions::appendLeave):
        The DebuggerParseData struct currently only contains a list of pause positions.
        Once populated it can resolve an input location to a pause position.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitDebugHook):
        (JSC::BytecodeGenerator::emitEnumeration):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::EmptyStatementNode::emitBytecode):
        (JSC::DebuggerStatementNode::emitBytecode):
        (JSC::ExprStatementNode::emitBytecode):
        (JSC::DeclarationStatement::emitBytecode):
        (JSC::IfElseNode::emitBytecode):
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::WithNode::emitBytecode):
        (JSC::SwitchNode::emitBytecode):
        (JSC::ThrowNode::emitBytecode):
        Emit op_debugs for the nodes themselves. Assert when we do that the
        Parser had marked them as needing a debug hook.

        * debugger/Breakpoint.h:
        (JSC::Breakpoint::Breakpoint):
        A breakpoint may be resolved or unresolved. Debugger::resolveBreakpoint
        must be used to resolve the breakpoint. Most methods now require a
        resolved breakpoint.

        * debugger/Debugger.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::detach):
        (JSC::Debugger::toggleBreakpoint):
        (JSC::Debugger::debuggerParseData):
        (JSC::Debugger::resolveBreakpoint):
        (JSC::Debugger::setBreakpoint):
        (JSC::Debugger::clearParsedData):
        Provide a public method to resolve a breakpoint location in a script.
        This will gather debugger parse data for the script if none is available.
        Ensure clients have resolved a breakpoint before attempting to set it.
        Currently we allow only a single breakpoint at a location. This may
        need to change if multiple breakpoints resolve to the same location
        but have different actions.

        * inspector/ScriptDebugListener.h:
        ScriptDebugServer::Script is effectively duplicating most of the data from
        a SourceProvider. We should eliminate this and just use SourceProvider.

        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::setBreakpointActions):
        (Inspector::ScriptDebugServer::removeBreakpointActions):
        (Inspector::ScriptDebugServer::getActionsForBreakpoint):
        (Inspector::ScriptDebugServer::clearBreakpointActions):
        (Inspector::ScriptDebugServer::evaluateBreakpointAction):
        (Inspector::ScriptDebugServer::dispatchDidParseSource):
        (Inspector::ScriptDebugServer::handleBreakpointHit):
        (Inspector::ScriptDebugServer::setBreakpoint): Deleted.
        (Inspector::ScriptDebugServer::removeBreakpoint): Deleted.
        (Inspector::ScriptDebugServer::clearBreakpoints): Deleted.
        * inspector/ScriptDebugServer.h:
        Reduce ScriptDebugServer's involvement in breakpoints to just handling
        breakpoint actions. Eventually we should eliminate it alltogether and
        fold breakpoint logic into Debugger or DebugAgent.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::buildDebuggerLocation):
        (Inspector::parseLocation):
        (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
        (Inspector::InspectorDebuggerAgent::setBreakpoint):
        (Inspector::InspectorDebuggerAgent::didSetBreakpoint):
        (Inspector::InspectorDebuggerAgent::resolveBreakpoint):
        (Inspector::InspectorDebuggerAgent::removeBreakpoint):
        (Inspector::InspectorDebuggerAgent::continueToLocation):
        (Inspector::InspectorDebuggerAgent::didParseSource):
        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
        The Inspector can set breakpoints in multiple ways.
        Ensure that once we have the Script that we always
        resolve the breakpoint location before setting the
        breakpoint. The different paths are:

        - setBreakpoint(scriptId, location)
          - Here we know the SourceProvider by its SourceID
            - resolve and set

        - setBreakpointByURL(url, location)
          - Search for existing Scripts that match the URL
            - resolve in each and set
          - When new Scripts are parsed that match the URL
            - resolve and set


2016-09-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Stepping out of a function finishes the line that called it.
        https://bugs.webkit.org/show_bug.cgi?id=155325
        <rdar://problem/25094578>

        Reviewed by Mark Lam.

        Also addresses:
        <https://webkit.org/b/161721> Web Inspector: Stepping all the way through program should not cause a pause on the next program that executes
        <https://webkit.org/b/161716> Web Inspector: Stepping into a function / program should not require stepping to the first statement

        This change introduces a new op_debug hook: WillExecuteExpression.
        Currently this new hook is only used for pausing at function calls.
        We may decide to add it to other places later where pausing with
        finer granularity then statements (or lines) if useful.

        This updates the location and behavior of some of the existing debug
        hooks, to be more consistent and useful if the exact location of the
        pause is displayed. For example, in control flow statements like
        `if` and `while`, the pause location is the expression itself that
        will be evaluated, not the location of the `if` or `while` keyword.
        For example:

            if (|condition)
            while (|condition)

        Finally, this change gets rid of some unnecessary / useless pause
        locations such as on entering a function and on entering a program.
        These pauses are not needed because if there is a statement, we
        would pause before the statement and it is equivalent. We continue
        to pause when leaving a function via stepping by uniformly jumping
        to the closing brace of the function. This gives users a chance
        to observe state before leaving the function.

        * bytecode/CodeBlock.cpp:
        (JSC::debugHookName):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::dumpLineColumnEntry):
        Logging strings for the new debug hook.

        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCallInTailPosition):
        (JSC::BytecodeGenerator::emitCallEval):
        (JSC::BytecodeGenerator::emitCallVarargsInTailPosition):
        (JSC::BytecodeGenerator::emitConstructVarargs):
        (JSC::BytecodeGenerator::emitCallForwardArgumentsInTailPosition):
        (JSC::BytecodeGenerator::emitCallDefineProperty):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitGetTemplateObject):
        (JSC::BytecodeGenerator::emitIteratorNext):
        (JSC::BytecodeGenerator::emitIteratorNextWithValue):
        (JSC::BytecodeGenerator::emitIteratorClose):
        (JSC::BytecodeGenerator::emitDelegateYield):
        All emitCall variants now take an enum to decide whether or not to
        emit the WillExecuteExpression debug hook.

        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        In the two real implementations, actually decide to emit the debug
        hook or not based on the parameter.

        (JSC::BytecodeGenerator::emitEnumeration):
        This is shared looping code used by for..of iteration of iterables.
        When used by ForOfNode, we want to emit a pause location during
        iteration.

        (JSC::BytecodeGenerator::emitWillLeaveCallFrameDebugHook):
        This is shared call frame leave code to emit a consistent pause
        location when leaving a function.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_tailCallForwardArguments):
        (JSC::FunctionCallBracketNode::emitBytecode):
        (JSC::FunctionCallDotNode::emitBytecode):
        (JSC::CallFunctionCallDotNode::emitBytecode):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        (JSC::TaggedTemplateNode::emitBytecode):
        (JSC::ArrayPatternNode::bindValue):
        All tail position calls are the function calls that we want to emit
        debug hooks for. All non-tail call calls appear to be internal
        implementation details, and these should not have the debug hook.

        (JSC::IfElseNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::WithNode::emitBytecode):
        (JSC::SwitchNode::emitBytecode):
        Make the pause location consistent at the expression.

        (JSC::DoWhileNode::emitBytecode):
        Make the pause location consistent at the expression.
        Remove the errant pause at the do's '}' when entering the do block.

        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitMultiLoopBytecode):
        (JSC::ForOfNode::emitBytecode):
        Make the pause location consistent at expressions.
        Also allow stepping to the traditional for loop's
        update expression, which was previously not possible.

        (JSC::ReturnNode::emitBytecode):
        (JSC::FunctionNode::emitBytecode):
        Make the pause location when leaving a function consistently be the
        function's closing brace. The two cases are stepping through a return
        statement, or the implicit return undefined at the end of a function.

        (JSC::LabelNode::emitBytecode):
        (JSC::TryNode::emitBytecode):
        Remove unnecessary pauses that add no value, as they contain a
        statement and we will then pause at that statement.

        * parser/Nodes.h:
        (JSC::StatementNode::isFunctionNode):
        (JSC::StatementNode::isForOfNode):
        (JSC::EnumerationNode::lexpr):
        (JSC::ForOfNode::isForOfNode):
        New virtual methods to distinguish different nodes.

        * debugger/Debugger.h:
        Rename m_pauseAtNextStatement to m_pauseAtNextOpportunity.
        This is the finest granularity of stepping, and it can be
        pausing at a location that is not a statement.
        Introduce state to properly handle step out and stepping
        when there are multiple expressions in a statement.

        * debugger/Debugger.cpp:
        (JSC::Debugger::Debugger):
        (JSC::Debugger::setPauseOnNextStatement):
        (JSC::Debugger::breakProgram):
        (JSC::Debugger::continueProgram):
        (JSC::Debugger::stepIntoStatement):
        (JSC::Debugger::exception):
        (JSC::Debugger::didReachBreakpoint):

        Use new variable names, and clarify if we should attempt
        to pause or not.

        (JSC::Debugger::stepOutOfFunction):
        Set a new state to indicate a step out action.

        (JSC::Debugger::updateCallFrame):
        (JSC::Debugger::updateCallFrameAndPauseIfNeeded): Deleted.
        (JSC::Debugger::updateCallFrameInternal):
        (JSC::Debugger::pauseIfNeeded):
        Allow updateCallFrame to either attempt a pause or not.

        (JSC::Debugger::atStatement):
        Attempt pause and reset the at first expression flag.

        (JSC::Debugger::atExpression):
        Attempt a pause when not stepping over. Also skip
        the first expression pause, since that would be
        equivalent to when we paused for the expression.

        (JSC::Debugger::callEvent):
        Do not pause when entering a function.

        (JSC::Debugger::returnEvent):
        Attempt pause when leaving a function.
        If the user did a step-over and is leaving the
        function, then behave like step-out.

        (JSC::Debugger::unwindEvent):
        Behave like return except don't change any
        pausing states. If we needed to pause the
        Debugger::exception will have handled it.

        (JSC::Debugger::willExecuteProgram):
        Do not pause when entering a program.

        (JSC::Debugger::didExecuteProgram):
        Attempt pause when leaving a program that has a caller.
        This can be useful for exiting an eval(...) program.
        Otherwise treat this like return, and step-over out
        of the program should behave like step-out. We use
        pause at next opportunity because there may be extra
        callframes we do not know about.
        When the program doesn't have a parent, clear all
        our state so we don't errantly pause on the next
        JavaScript microtask that gets executed.

        (JSC::Debugger::clearNextPauseState):
        Helper to clear all of the pause states now that
        it happens in a couple places.

        * interpreter/Interpreter.cpp:
        (JSC::notifyDebuggerOfUnwinding):
        Treat unwinding slightly differently from returning.
        We will not want to pause when unwinding callframes.

        (JSC::Interpreter::debug):
        * interpreter/Interpreter.h:
        New debug hook.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::stepInto):
        (Inspector::InspectorDebuggerAgent::didPause):
        * inspector/agents/InspectorDebuggerAgent.h:
        Remove unnecessary stepInto code notification for listeners.
        The listeners are never notified if the debugger resumes,
        so whatever state they were setting by this is going to
        get out of date.

2016-09-30  Saam Barati  <sbarati@apple.com>

        Arrow functions should not allow duplicate parameter names
        https://bugs.webkit.org/show_bug.cgi?id=162741

        Reviewed by Filip Pizlo.

        This patch makes parsing arrow function parameters throw
        a syntax error when there are duplicate parameter names.
        It also starts to make some syntax errors for arrow functions
        better, however, this is trickier than it seems since we need
        to choose between two parsing productions when we decide to
        throw a syntax error. I'm going to work on this problem
        in another patch specifically devoted to making the error
        messages better for parsing arrow functions:
        https://bugs.webkit.org/show_bug.cgi?id=162794

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::isArrowFunctionParameters):
        (JSC::Parser<LexerType>::parseFormalParameters):
        (JSC::Parser<LexerType>::parseFunctionParameters):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        * parser/Parser.h:

2016-09-30  Mark Lam  <mark.lam@apple.com>

        Use topVMEntryFrame to determine whether to skip the re-throw of a simulated throw.
        https://bugs.webkit.org/show_bug.cgi?id=162793

        Reviewed by Saam Barati.

        Change the ThrowScope destructor to use topVMEntryFrame (instead of topCallFrame)
        in the determination of whether to skip the re-throw of a simulated throw.  This
        is needed because the topCallFrame is not updated in operationConstructArityCheck()
        (and does not need to be), whereas topVMEntryFrame is always updated properly.
        Hence, we should just switch to using the more reliable topVMEntryFrame instead.

        This issue was discovered by existing JSC tests when exception check validation
        is enabled.

        * runtime/ThrowScope.cpp:
        (JSC::ThrowScope::~ThrowScope):

2016-09-30  Filip Pizlo  <fpizlo@apple.com>

        64-bit LLInt needs to have a concurrency-aware barrier
        https://bugs.webkit.org/show_bug.cgi?id=162790

        Reviewed by Mark Lam.

        In a concurrent GC the barrier definitely has to be after the store, not before it.

        * llint/LowLevelInterpreter64.asm:

2016-09-29  Filip Pizlo  <fpizlo@apple.com>

        Air should have a way of expressing additional instruction flags
        https://bugs.webkit.org/show_bug.cgi?id=162699

        Reviewed by Mark Lam.

        This follows a similar change in B3 (r206595) and replaces Air::Opcode with Air::Kind,
        which holds onto the opcode and some additional flags. Because Air is an orthogonal ISA
        (the opcode tells you what the operation does but each operand is allowed to also contain
        effectively instructions for what to do to read or write that operand), the flags are
        meant to be orthogonal to opcode. This allows us to say things like Add32<Trap>, which
        makes sense if any of the operands to the Add32 are addresses.

        To demonstrate the flags facility this partly adds a trap flag to Air. B3 doesn't use it
        yet, but I made sure that Air respects it. Basically that means blocking DCE when the flag
        is set, by making it imply hasNonArgNonControlEffects.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3CheckSpecial.cpp:
        (JSC::B3::Air::numB3Args):
        (JSC::B3::CheckSpecial::Key::Key):
        (JSC::B3::CheckSpecial::Key::dump):
        (JSC::B3::CheckSpecial::CheckSpecial):
        (JSC::B3::CheckSpecial::hiddenBranch):
        (JSC::B3::CheckSpecial::forEachArg):
        (JSC::B3::CheckSpecial::generate):
        (JSC::B3::CheckSpecial::dumpImpl):
        (JSC::B3::CheckSpecial::deepDumpImpl):
        * b3/B3CheckSpecial.h:
        (JSC::B3::CheckSpecial::Key::Key):
        (JSC::B3::CheckSpecial::Key::operator==):
        (JSC::B3::CheckSpecial::Key::kind):
        (JSC::B3::CheckSpecial::Key::hash):
        (JSC::B3::CheckSpecial::Key::opcode): Deleted.
        * b3/B3Kind.cpp:
        (JSC::B3::Kind::dump):
        * b3/air/AirDumpAsJS.cpp:
        (JSC::B3::Air::dumpAsJS):
        * b3/air/AirFixObviousSpills.cpp:
        * b3/air/AirFixPartialRegisterStalls.cpp:
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generate):
        * b3/air/AirHandleCalleeSaves.cpp:
        (JSC::B3::Air::handleCalleeSaves):
        * b3/air/AirInst.cpp:
        (JSC::B3::Air::Inst::jsHash):
        (JSC::B3::Air::Inst::dump):
        * b3/air/AirInst.h:
        (JSC::B3::Air::Inst::Inst):
        (JSC::B3::Air::Inst::kind):
        (JSC::B3::Air::Inst::operator bool):
        (JSC::B3::Air::Inst::opcode): Deleted.
        * b3/air/AirInstInlines.h:
        (JSC::B3::Air::Inst::extraClobberedRegs):
        (JSC::B3::Air::Inst::extraEarlyClobberedRegs):
        (JSC::B3::Air::Inst::forEachDefWithExtraClobberedRegs):
        (JSC::B3::Air::Inst::reportUsedRegisters):
        (JSC::B3::Air::Inst::shouldTryAliasingDef):
        * b3/air/AirIteratedRegisterCoalescing.cpp:
        * b3/air/AirKind.cpp: Added.
        (JSC::B3::Air::Kind::dump):
        * b3/air/AirKind.h: Added.
        (JSC::B3::Air::Kind::Kind):
        (JSC::B3::Air::Kind::operator==):
        (JSC::B3::Air::Kind::operator!=):
        (JSC::B3::Air::Kind::hash):
        (JSC::B3::Air::Kind::operator bool):
        * b3/air/AirLowerAfterRegAlloc.cpp:
        (JSC::B3::Air::lowerAfterRegAlloc):
        * b3/air/AirLowerEntrySwitch.cpp:
        (JSC::B3::Air::lowerEntrySwitch):
        * b3/air/AirLowerMacros.cpp:
        (JSC::B3::Air::lowerMacros):
        * b3/air/AirOptimizeBlockOrder.cpp:
        (JSC::B3::Air::optimizeBlockOrder):
        * b3/air/AirReportUsedRegisters.cpp:
        (JSC::B3::Air::reportUsedRegisters):
        * b3/air/AirSimplifyCFG.cpp:
        (JSC::B3::Air::simplifyCFG):
        * b3/air/AirTmpWidth.cpp:
        (JSC::B3::Air::TmpWidth::recompute):
        * b3/air/AirUseCounts.h:
        (JSC::B3::Air::UseCounts::UseCounts):
        * b3/air/AirValidate.cpp:
        * b3/air/opcode_generator.rb:
        * b3/testb3.cpp:
        (JSC::B3::testTernarySubInstructionSelection):
        (JSC::B3::testBranchBitAndImmFusion):

2016-09-29  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(r206555): It made Dromaeo/jslib-style-jquery.html crash
        https://bugs.webkit.org/show_bug.cgi?id=162721

        Reviewed by Keith Miller.

        The put_by_id-in-put_by_val optimization had the write barrier in the wrong place and
        incorrectly filtered on value instead of base.

        No reduced test case. You really need to run Dromaeo/jslib to catch it. I love Dromaeo's
        ability to catch GC bugs.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitPutByValWithCachedId):

2016-09-29  Joseph Pecoraro  <pecoraro@apple.com>

        Arrow functions do not infer name from computed property but normal functions do
        https://bugs.webkit.org/show_bug.cgi?id=162720

        Reviewed by Saam Barati.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded):
        Set function name on arrow functions as well.

2016-09-29  Joseph Pecoraro  <pecoraro@apple.com>

        test262: class and function names should be inferred in assignment
        https://bugs.webkit.org/show_bug.cgi?id=146262

        Reviewed by Saam Barati.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::appendParameter):
        (JSC::ASTBuilder::appendArrayPatternEntry):
        (JSC::ASTBuilder::appendObjectPatternEntry):
        (JSC::ASTBuilder::tryInferFunctionNameInPattern):
        Assign names to default value functions and classes in destructuring.

        (JSC::ASTBuilder::createAssignResolve):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::makeAssignNode):
        Assign names to both normal and arrow functions.

        * parser/Nodes.h:
        (JSC::ExpressionNode::isBaseFuncExprNode):
        Both functions and arrow functions infer name, they both extend
        this base so give the base an is check.

2016-09-28  Filip Pizlo  <fpizlo@apple.com>

        B3 opcodes should leave room for flags
        https://bugs.webkit.org/show_bug.cgi?id=162692

        Reviewed by Keith Miller.

        It used to be that the main thing that determined what a Value did was the opcode. The
        Opcode was how you knew what subclass of Value you had. The opcode told you what the Value
        actually did. This change replaces Opcode with Kind, which is a tuple of opcode and other
        stuff.

        Opcodes are great, and that's how most compilers work. But opcodes are one-dimensional. Here
        is how this manifests. Say you have an opcode, like Load. You will be happy if your IR has
        one Load opcode. But then, you might add Load8S/Load8Z/Load16S/Load16Z opcodes, as we have
        done in B3. B3 has one dimension of Load opcodes, which determines something like the C type
        of the load. But in the very near future, we will want to add two more dimensions to Loads:

        - A flag to say if the load traps.
        - A flag to say if the load has acquire semantics.

        Mapping these three dimensions (type, trap, acquire) onto the one-dimensional Opcode space
        would create mayham: Load8S, Load8STrap, Load8SAcquire, Load8STrapAcquire, Load8Z,
        Load8ZTrap, etc.

        This happens in other parts of the IR. For example, we have a dimension of arithmetic
        operations: add, sub, mul, div, mod, etc. Then we have the chill flag. But since opcodes
        are one-dimensional, that means having ChillDiv and ChillMod, and tons of places in the
        compiler that case on both Div and ChillDiv, or case on both Mod and ChillMod, since they
        are only interested in the kind of arithmetic being done and not the chillness.

        Though the examples all involve bits (chill or not, trapping or not, etc), I can imagine
        other properties that behave more like small enums, like if we fill out more memory ordering
        modes other than just "acquire? yes/no". There will eventually have to be something like a
        std::memory_order associated with memory accesses.

        One approach to this problem is to have a Value subclass that contains fields with the meta
        data. I don't like this for two reasons:

        - In bug 162688, I want to make trapping memory accesses have stackmaps. This means that a
          trapping memory access would have a different Value subclass than a non-trapping memory
          access. So, this meta-data needs to channel into ValueType::accepts(). Currently that
          takes Opcode and nothing else.

        - Compiler IRs are all about making common tasks easy. If it becomes commonplace for opcodes
          to require a custom Value subclass just for a bit then that's not very easy.

        This change addresses this problem by making the compiler pass around Kinds rather than
        Opcodes. A Kind contains an Opcode as well as any number of opcode-specific bits. This
        change demonstrates how Kind should be used by converting chillness to it. Kind has
        hasIsChill(), isChill(), and setIsChill() methods. hasIsChill() is true only for Div and
        Mod. setIsChill() asserts if !hasIsChill(). If you want to create a Chill Div, you say
        chill(Div). IR dumps will print it like this:

            Int32 @38 = Div<Chill>(@36, @37, DFG:@24, ControlDependent)

        Where "Div<Chill>" is how a Kind that hasExtraBits() dumps itself. If a Kind does not
        hasExtraBits() (the normal case) then it dumps like a normal Opcode (without the "<>").

        I replaced many uses of Opcode with Kind. New code has to be mindful that Opcode may not be
        the right way to summarize what a value does, and so in many cases it's better to carry
        around a Kind instead - especially if you will use it to stamp out new Values. Opcode is no
        longer sufficient to perform a dynamic Value cast, since that code now uses Kind. ValueKey
        now wants a Kind instead of an Opcode. All Value constructors now take Kind instead of
        Opcode. But most opcodes don't get any extra Kind bits, and so the code that operates on
        those opcodes is largely unchanged.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * b3/B3ArgumentRegValue.h:
        * b3/B3CCallValue.h:
        * b3/B3CheckValue.cpp:
        (JSC::B3::CheckValue::convertToAdd):
        (JSC::B3::CheckValue::CheckValue):
        * b3/B3CheckValue.h:
        (JSC::B3::CheckValue::accepts):
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.h:
        * b3/B3ConstDoubleValue.h:
        * b3/B3ConstFloatValue.h:
        * b3/B3FenceValue.h:
        * b3/B3Kind.cpp: Added.
        (JSC::B3::Kind::dump):
        * b3/B3Kind.h: Added.
        (JSC::B3::Kind::Kind):
        (JSC::B3::Kind::opcode):
        (JSC::B3::Kind::setOpcode):
        (JSC::B3::Kind::hasExtraBits):
        (JSC::B3::Kind::hasIsChill):
        (JSC::B3::Kind::isChill):
        (JSC::B3::Kind::setIsChill):
        (JSC::B3::Kind::operator==):
        (JSC::B3::Kind::operator!=):
        (JSC::B3::Kind::hash):
        (JSC::B3::Kind::isHashTableDeletedValue):
        (JSC::B3::chill):
        (JSC::B3::KindHash::hash):
        (JSC::B3::KindHash::equal):
        * b3/B3LowerMacros.cpp:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        * b3/B3MemoryValue.h:
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3PatchpointValue.h:
        (JSC::B3::PatchpointValue::accepts):
        * b3/B3ReduceStrength.cpp:
        * b3/B3SlotBaseValue.h:
        * b3/B3StackmapValue.cpp:
        (JSC::B3::StackmapValue::StackmapValue):
        * b3/B3StackmapValue.h:
        * b3/B3SwitchValue.h:
        (JSC::B3::SwitchValue::accepts):
        * b3/B3UpsilonValue.h:
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::dump):
        (JSC::B3::Value::deepDump):
        (JSC::B3::Value::invertedCompare):
        (JSC::B3::Value::effects):
        (JSC::B3::Value::key):
        (JSC::B3::Value::typeFor):
        (JSC::B3::Value::badKind):
        (JSC::B3::Value::badOpcode): Deleted.
        * b3/B3Value.h:
        * b3/B3ValueInlines.h:
        (JSC::B3::Value::as):
        * b3/B3ValueKey.cpp:
        (JSC::B3::ValueKey::dump):
        (JSC::B3::ValueKey::materialize):
        * b3/B3ValueKey.h:
        (JSC::B3::ValueKey::ValueKey):
        (JSC::B3::ValueKey::kind):
        (JSC::B3::ValueKey::opcode):
        (JSC::B3::ValueKey::operator==):
        (JSC::B3::ValueKey::hash):
        * b3/B3ValueKeyInlines.h:
        (JSC::B3::ValueKey::ValueKey):
        * b3/B3VariableValue.cpp:
        (JSC::B3::VariableValue::VariableValue):
        * b3/B3VariableValue.h:
        * b3/testb3.cpp:
        (JSC::B3::testChillDiv):
        (JSC::B3::testChillDivTwice):
        (JSC::B3::testChillDiv64):
        (JSC::B3::testChillModArg):
        (JSC::B3::testChillModArgs):
        (JSC::B3::testChillModImms):
        (JSC::B3::testChillModArg32):
        (JSC::B3::testChillModArgs32):
        (JSC::B3::testChillModImms32):
        (JSC::B3::testSwitchChillDiv):
        (JSC::B3::testEntrySwitchWithCommonPaths):
        (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::chillDiv):
        (JSC::FTL::Output::chillMod):

2016-09-29  Saam Barati  <sbarati@apple.com>

        We don't properly propagate non-simple-parameter-list when parsing a setter
        https://bugs.webkit.org/show_bug.cgi?id=160483

        Reviewed by Joseph Pecoraro.

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

2016-09-28  Saam Barati  <sbarati@apple.com>

        stringProtoFuncRepeatCharacter will return `null` when it should not
        https://bugs.webkit.org/show_bug.cgi?id=161944

        Reviewed by Yusuke Suzuki.

        stringProtoFuncRepeatCharacter was expecting its second argument
        to always be a boxed integer. This is not correct. The DFG may decide
        to represent a particular value as a double instead of integer. This
        function needs to have correct behavior when its second argument is
        a boxed double. I also added an assertion stating that the second argument
        is always a number. We can guarantee this since it's only called from
        builtins.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncRepeatCharacter):

2016-09-28  Filip Pizlo  <fpizlo@apple.com>

        The write barrier should be down with TSO
        https://bugs.webkit.org/show_bug.cgi?id=162316

        Reviewed by Geoffrey Garen.

        This makes our write barrier behave correctly when it races with the collector. The
        collector wants to do this when visiting:

            object->cellState = black
            visit(object)

        The mutator wants to do this when storing:

            object->property = newValue
            if (object->cellState == black)
                remember(object)

        Prior to this change, this didn't work right because the compiler would sometimes place
        barriers before the store to the property and because the mutator did not have adequate
        fences.

        Prior to this change, the DFG and FTL would emit this:

            if (object->cellState == black)
                remember(object)
            object->property = newValue

        Which is wrong, because the object could start being scanned just after the cellState
        check, at which point the store would be lost. We need to confirm that the state was not
        black *after* the store! This change was harder than you'd expect: placing the barrier
        after the store broke B3's ability to do its super crazy ninja CSE on some store-load
        redundancies. Because the B3 CSE has some moves that the DFG CSE lacks, the DFG CSE's
        ability to ignore barriers didn't help. I fixed this by having the FTL convey precise
        heap ranges for the patchpoint corresponding to the barrier slow path. It reads the world
        (because of the store-load fence) and it writes only cellState (because the B3 heap ranges
        don't have any way to represent any of the GC's other state, which means that B3 does not
        have to worry about aliasing with any of that).

        The collector already uses a store-load fence on x86 just after setting the cellState and
        before visiting the object. The mutator needs to do the same. But we cannot put a
        store-load fence of any kind before store barriers, because that causes enormous slow
        downs. In the worst case, Octane/richards slowed down by 90%! That's crazy! However, the
        overall slow downs were small enough (0-15% on benchmark suite aggregates) that it would be
        reasonable if the slow down only happened while the GC was running. Then, the concurrent GC
        would lift throughput-while-collecting from 0% of peak to 85% of peak. This changes the
        barrier so that it looks like this:

            if (object->cellState <= heap.sneakyBlackThreshold)
                slowPath(object)

        Where sneakyBlackThreshold is the normal blackThreshold when we're not collecting, or a
        tautoligical threshold (that makes everything look black) when we are collecting. This
        turns out to not be any more expensive than the barrier in tip of tree when the GC is not
        running, or a 0-15% slow-down when it is "running". (Of course we don't run the GC
        concurrently yet. I still have more work to do.) The slowPath() does some extra work to
        check if we are concurrently collecting; if so, it does a fence and rechecks if the object
        really did need that barrier.

        This also reintroduces elimination of redundant store barriers, which was lost in the last
        store barrier change. We can only do it when there is no possibility of GC, exit, or
        exceptions between the two store barriers. We could remove the exit/exception limitation if
        we taught OSR exit how to buffer store barriers, which is an insane thing to do considering
        that I've never been able to detect a win from redundant store barrier elimination. I just
        want us to have it for stupidly obvious situations, like a tight sequence of stores to the
        same object. This same optimization also sometimes strength-reduces the store barrier so
        that it uses a constant black threshold rather than the sneaky one, thereby saving one
        load.

        Even with all of those optimizations, I still had problems with barrier cost. I found that one
        of the benchmarks that was being hit particularly hard was JetStream/regexp-2010. Fortunately
        that benchmark does most of its barriers in a tight C++ loop in RegExpMatchesArray.h. When we
        know what we're doing, we can defer GC around a bunch of object initializations and then remove
        all of the barriers between any of the objects allocated within the deferral. Unfortunately,
        our GC deferral mechanism isn't really performant enough to make this be a worthwhile
        optimization. The most efficient version of such an optimization that I could come up with was
        to have a DeferralContext object that houses a boolean that is false by default, but the GC
        writes true into it if it would have wanted to GC. You thread a pointer to the deferralContext
        through all of your allocations. This kind of mechanism has the overhead of a zero
        initialization on the stack on entry and a zero check on exit. This is probably even efficient
        enough that we could start thinking about having the DFG use it, for example if we found a
        bounded-time section of code with a lot of barriers and entry/exit sites that aren't totally
        wacky. This optimization took this patch from 0.68% JetStream regressed to neutral, according
        to my latest data.

        Finally, an earlier version of this change put the store-load fence in B3 IR, so I ended up
        adding FTLOutput support for it and AbstractHeapRepository magic for decorating the heaps.
        I think we might as well keep that, it'll be useful.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::branch32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::branch32):
        (JSC::MacroAssemblerX86_64::branch64): Deleted.
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGAbstractHeap.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isStoreBarrier):
        * dfg/DFGNodeType.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStoreBarrier):
        (JSC::DFG::SpeculativeJIT::storeToWriteBarrierBuffer): Deleted.
        (JSC::DFG::SpeculativeJIT::writeBarrier): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileBaseValueStoreBarrier): Deleted.
        (JSC::DFG::SpeculativeJIT::writeBarrier): Deleted.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileBaseValueStoreBarrier): Deleted.
        (JSC::DFG::SpeculativeJIT::writeBarrier): Deleted.
        * dfg/DFGStoreBarrierClusteringPhase.cpp: Added.
        (JSC::DFG::performStoreBarrierClustering):
        * dfg/DFGStoreBarrierClusteringPhase.h: Added.
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * dfg/DFGStoreBarrierInsertionPhase.h:
        * ftl/FTLAbstractHeap.h:
        (JSC::FTL::AbsoluteAbstractHeap::at):
        (JSC::FTL::AbsoluteAbstractHeap::operator[]):
        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::decorateFenceRead):
        (JSC::FTL::AbstractHeapRepository::decorateFenceWrite):
        (JSC::FTL::AbstractHeapRepository::computeRangesAndDecorateInstructions):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileStoreBarrier):
        (JSC::FTL::DFG::LowerDFGToB3::storageForTransition):
        (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath):
        (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::fence):
        (JSC::FTL::Output::absolute):
        * ftl/FTLOutput.h:
        * heap/CellState.h:
        (JSC::isWithinThreshold):
        (JSC::isBlack):
        * heap/Heap.cpp:
        (JSC::Heap::writeBarrierSlowPath):
        * heap/Heap.h:
        (JSC::Heap::barrierShouldBeFenced):
        (JSC::Heap::addressOfBarrierShouldBeFenced):
        (JSC::Heap::sneakyBlackThreshold):
        (JSC::Heap::addressOfSneakyBlackThreshold):
        * heap/HeapInlines.h:
        (JSC::Heap::writeBarrier):
        (JSC::Heap::writeBarrierWithoutFence):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::jumpIfIsRememberedOrInEdenWithoutFence):
        (JSC::AssemblyHelpers::sneakyJumpIfIsRememberedOrInEden):
        (JSC::AssemblyHelpers::jumpIfIsRememberedOrInEden):
        (JSC::AssemblyHelpers::storeBarrierStoreLoadFence):
        (JSC::AssemblyHelpers::jumpIfStoreBarrierStoreLoadFenceNotNeeded):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitWriteBarrier):
        (JSC::JIT::privateCompilePutByVal):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_id):
        * llint/LowLevelInterpreter.asm:
        * offlineasm/x86.rb:
        * runtime/Options.h:

2016-09-27  Joseph Pecoraro  <pecoraro@apple.com>

        Improve useCodeCache Option description string.

        * runtime/Options.h:
        Address late review comments and clarify description.

2016-09-28  Filip Pizlo  <fpizlo@apple.com>

        Optimize B3->Air lowering of Fence on ARM
        https://bugs.webkit.org/show_bug.cgi?id=162342

        Reviewed by Geoffrey Garen.

        This gives us comprehensive support for standalone fences on x86 and ARM. The changes are as
        follows:

        - Sets in stone the rule that the heaps of a B3::Fence tell you what the fence protects. If the
          fence reads, it protects motion of stores. If the fence writes, it protects motion of loads.
          This allows us to express for example load-load fences in a portable way: on x86 they will just
          block B3 optimizations and emit no code, while on ARM you will get some fence.

        - Adds comprehensive support for WTF-style fences in the ARM assembler. I simplified it just a bit
          to match what B3, the main client, knows. There are three fences: MemoryFence, StoreFence, and
          LoadFence. On x86, MemoryFence is ortop while StoreFence and LoadFence emit no code. On ARM64,
          MemoryFence and LoadFence are dmb ish while StoreFence is dmb ishst.

        - Tests! To test this, I needed to teach the disassembler how to disassemble dmb ish and dmb
          ishst. I think that the canonical way to do it would be to create a group for dmb and then teach
          that group how to decode the operands. But I don't actually know what are all of the ways of
          encoding dmb, so I'd rather that unrecognized encodings fall through to the ".long blah"
          bailout. So, this creates explicit matching rules for "dmb ish" and "dmb ishst", which is the
          most conservative thing we can do.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::dmbISH):
        (JSC::ARM64Assembler::dmbISHST):
        (JSC::ARM64Assembler::dmbSY): Deleted.
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::memoryFence):
        (JSC::MacroAssemblerARM64::storeFence):
        (JSC::MacroAssemblerARM64::loadFence):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::storeFence):
        (JSC::MacroAssemblerX86Common::loadFence):
        * b3/B3FenceValue.h:
        * b3/B3LowerToAir.cpp:
        (JSC::B3::Air::LowerToAir::lower):
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.cpp:
        (JSC::B3::testMemoryFence):
        (JSC::B3::testStoreFence):
        (JSC::B3::testLoadFence):
        (JSC::B3::run):
        (JSC::B3::testX86MFence): Deleted.
        (JSC::B3::testX86CompilerFence): Deleted.
        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeDmbIsh::format):
        (JSC::ARM64Disassembler::A64DOpcodeDmbIshSt::format):
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcodeDmbIsh::opName):
        (JSC::ARM64Disassembler::A64DOpcodeDmbIshSt::opName):

2016-09-28  Joseph Pecoraro  <pecoraro@apple.com>

        Adopt #pragma once in some generated resources
        https://bugs.webkit.org/show_bug.cgi?id=162666

        Reviewed by Alex Christensen.

        * Scripts/builtins/builtins_generate_combined_header.py:
        * Scripts/builtins/builtins_generate_internals_wrapper_header.py:
        * Scripts/builtins/builtins_generate_internals_wrapper_implementation.py:
        * Scripts/builtins/builtins_generate_separate_header.py:
        * Scripts/builtins/builtins_generate_wrapper_header.py:
        * Scripts/builtins/builtins_generate_wrapper_implementation.py:
        Remove headerGuard attribute unused by templates.

        * Scripts/tests/builtins/expected/JavaScriptCore-Operations.Promise-Combined.js-result: Removed.
        No such test exists. It was likely renamed.

        * generate-bytecode-files:
        Simplify header guard output.

        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator.generate_output):
        * replay/scripts/CodeGeneratorReplayInputs.py:
        (Generator.generate_header):
        * replay/scripts/CodeGeneratorReplayInputsTemplates.py:
        Simplify header guard output.

        * replay/scripts/tests/expected/generate-enum-encoding-helpers-with-guarded-values.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-enum-encoding-helpers.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-enum-with-guard.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-enums-with-same-base-name.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-input-with-guard.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-input-with-vector-members.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-inputs-with-flags.json-TestReplayInputs.h:
        * replay/scripts/tests/expected/generate-memoized-type-modes.json-TestReplayInputs.h:
        Rebaseline.

2016-09-28  Filip Pizlo  <fpizlo@apple.com>

        Store-load fences should be a lot cheaper on ARM
        https://bugs.webkit.org/show_bug.cgi?id=162461

        Rubber stamped by Keith Miller.

        It turns out that they are already cheap enough, so this change just make us use them.

        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::visitChildren):

2016-09-28  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r206522.

        Roll r206506 back in since the build fix landed in r206521

        Reverted changeset:

        "Unreviewed, rolling out r206506."
        https://bugs.webkit.org/show_bug.cgi?id=162682
        http://trac.webkit.org/changeset/206522

2016-09-28  Commit Queue  <commit-queue@webkit.org>

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

        Broke the Windows and WinCairo builds. (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Adopt #pragma once in JavaScriptCore"
        https://bugs.webkit.org/show_bug.cgi?id=162664
        http://trac.webkit.org/changeset/206506

2016-09-28  Joseph Pecoraro  <pecoraro@apple.com>

        Adopt #pragma once in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=162664

        Reviewed by Saam Barati.

        * **/**.h:
        Adopt pragma once in all but API headers and generated headers.
        Include some namespace closing comments for consistency.

2016-09-27  JF Bastien  <jfbastien@apple.com>

        Missing Atomics.h include in MarkedBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=162648

        Missing include from my previous patch.

        Reviewed by Yusuke Suzuki.

        * heap/MarkedBlock.h:

2016-09-27  Mark Lam  <mark.lam@apple.com>

        createError() and JSObject::calculatedClassName() should not throw any exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=162637

        Reviewed by Geoffrey Garen.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):
        - assert that errorDescriptionForValue() did not throw an exception.

        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        - the code already ensures that we always return a non-null String.  Just need to
          make sure that it catches its own exceptions.

2016-09-27  Filip Pizlo  <fpizlo@apple.com>

        B3::lowerMacros forgets to before->updatePredecessorsAfter() when lowering ChillMod on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=162644

        Reviewed by Keith Miller.

        If you forget to update the predecessors of your successors, then bad things will happen if you
        do something that requires accurate predecessors for correctness. lowerMacros() uses
        BlockInsertionSet, which relies on accurate predecessors.

        * b3/B3LowerMacros.cpp:

2016-09-27  JF Bastien  <jfbastien@apple.com>

        Speed up Heap::isMarkedConcurrently
        https://bugs.webkit.org/show_bug.cgi?id=162095

        Reviewed by Filip Pizlo.

        Speed up isMarkedConcurrently by using WTF::consumeLoad.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::areMarksStale):
        (JSC::MarkedBlock::areMarksStaleWithDependency):
        (JSC::MarkedBlock::isMarkedConcurrently): do away with the load-load fence

2016-09-27  Mark Lam  <mark.lam@apple.com>

        Add some needed CatchScopes in code that should not throw.
        https://bugs.webkit.org/show_bug.cgi?id=162584

        Reviewed by Keith Miller.

        Re-landing minus the jsc.cpp and ExceptionHelpers.cpp changes.  I'll address
        those in a subsequent patch if the need manifests again in my testing.

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        - This function already handles exceptions in its own way.  We're honoring this
          contract and catching exceptions and passing it to the handler.

        * interpreter/Interpreter.cpp:
        (JSC::notifyDebuggerOfUnwinding):
        - The debugger should not be throwing any exceptions.

        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::save):
        - If an exception was thrown while saving the database, there's nothing we can
          really do about it anyway.  Just fail nicely and return false.  This is in line
          with existing error checking code in Database::save() that returns false if
          it's not able to open the file to save to.

        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::finishCreation):
        - The existing code already RELEASE_ASSERT that no exception was thrown.
          Hence, it's appropriate to use a CatchScope here.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::nameFromCallee):
        - The sampling profiler is doing a VMInquiry get here.  It should never throw an
          exception.  Hence, we'll just use a CatchScope and assert accordingly.

2016-09-27  Jer Noble  <jer.noble@apple.com>

        Remove deprecated ENCRYPTED_MEDIA implementation.
        https://bugs.webkit.org/show_bug.cgi?id=161010

        Reviewed by Eric Carlson.

        Remove ENABLE_ENCRYPTED_MEDIA.

        * Configurations/FeatureDefines.xcconfig:

2016-09-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Install binaries to pkglibexecdir rather than bindir
        https://bugs.webkit.org/show_bug.cgi?id=162602

        Reviewed by Carlos Garcia Campos.

        Install jsc shell to LIBEXEC_INSTALL_DIR rather than EXEC_INSTALL_DIR.

        Note these locations are the same on non-GTK ports.

        * shell/CMakeLists.txt:

2016-09-26  Sam Weinig  <sam@webkit.org>

        Make DFGSlowPathGenerator a bit more variadic
        https://bugs.webkit.org/show_bug.cgi?id=162378

        Reviewed by Filip Pizlo.

        Make the subclass of CallSlowPathGenerator that takes arguments variadic
        so it can take any number of arguments. Also updates the slowPathCall helper
        function to be variadic. I had to move the spill mode and exception check
        requirement parameters to before the arguments since the variadic arguments
        must be at the end. As a convenience, I added an overload of slowPathCall that
        doesn't take spill mode and exception check requirement parameters.

        * dfg/DFGSlowPathGenerator.h:
        (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate):
        (JSC::DFG::slowPathCall):
        (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::CallResultAndNoArgumentsSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::CallResultAndOneArgumentSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::CallResultAndTwoArgumentsSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::CallResultAndThreeArgumentsSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::CallResultAndFourArgumentsSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::generateInternal): Deleted.
        (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::CallResultAndFiveArgumentsSlowPathGenerator): Deleted.
        (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::generateInternal): Deleted.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compileNotifyWrite):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):

2016-09-26  Commit Queue  <commit-queue@webkit.org>

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

        This change caused LayoutTest crashes. (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Add some needed CatchScopes in code that should not throw."
        https://bugs.webkit.org/show_bug.cgi?id=162584
        http://trac.webkit.org/changeset/206405

2016-09-26  Mark Lam  <mark.lam@apple.com>

        Add some needed CatchScopes in code that should not throw.
        https://bugs.webkit.org/show_bug.cgi?id=162584

        Reviewed by Keith Miller.

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        - This function already handles exceptions in its own way.  We're honoring this
          contract and catching exceptions and passing it to the handler.

        * interpreter/Interpreter.cpp:
        (JSC::notifyDebuggerOfUnwinding):
        - The debugger should not be throwing any exceptions.

        * jsc.cpp:
        (runJSC):
        - the buck stops here.  There's no reason an exception should propagate past here.

        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::save):
        - If an exception was thrown while saving the database, there's nothing we can
          really do about it anyway.  Just fail nicely and return false.  This is in line
          with existing error checking code in Database::save() that returns false if
          it's not able to open the file to save to.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createError):
        - If we're not able to stringify the error value, then we'll just use the
          provided message as the error string.  It doesn't make sense to have the
          Error factory throw an exception that shadows the intended exception that the
          client probably wants to throw (assuming that that's why the client is creating
          this Error object).

        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::finishCreation):
        - The existing code already RELEASE_ASSERT that no exception was thrown.
          Hence, it's appropriate to use a CatchScope here.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::nameFromCallee):
        - The sampling profiler is doing a VMInquiry get here.  It should never throw an
          exception.  Hence, we'll just use a CatchScope and assert accordingly.

2016-09-26  Mark Lam  <mark.lam@apple.com>

        Exception unwinding code should use a CatchScope instead of a ThrowScope.
        https://bugs.webkit.org/show_bug.cgi?id=162583

        Reviewed by Geoffrey Garen.

        This is because the exception unwinding code does not throw an exception.
        It only inspects the thrown exception and passes it to the appropriate handler.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwind):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):

2016-09-26  Joseph Pecoraro  <pecoraro@apple.com>

        Add an Option to disable the CodeCache
        https://bugs.webkit.org/show_bug.cgi?id=162579

        Reviewed by Geoffrey Garen.

        * runtime/CodeCache.cpp:
        (JSC::CodeCache::getGlobalCodeBlock):
        (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
        Do not use the cache if the Option is disabled.

        * runtime/Options.h:
        New option to not use the code cache.

2016-09-26  Daniel Bates  <dabates@apple.com>

        Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
        https://bugs.webkit.org/show_bug.cgi?id=162365

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2016-09-26  Benjamin Poulain  <benjamin@webkit.org>

        [JSC] Shrink the Math inline caches some more
        https://bugs.webkit.org/show_bug.cgi?id=162485

        Reviewed by Saam Barati.

        This patch applies some lessons learnt from op_negate
        to shrink the generated asm of the previous 3 inline
        caches.

        In order of importance:
        -We do not need to pass the pointer to ArithProfile
         on the slow path. We can just get the profile out
         of the Math IC.
         This saves us from materializing a 64bits value
         in a register before the call on the slow path.
        -We can remove a bunch of mov by setting up the registers
         in the way the slow path needs them.
         The slow path makes a function calls with the input
         as second and third arguments, and return the result in
         the "return register". By using those as target when
         loading/storing from the stack, we remove 3 mov per slow path.
        -When performing integer add, we can set the result directly in
         the output register if that does not trashes one of the input
         register. This removes one mov per integer add.

        The inline cache average sizes on Sunspider change as follow:
        -Adds: 147.573099->131.555556 (~10%)
        -Muls: 186.882353->170.991597 (~8%)
        -Subs: 139.127907->121.523256 (~12%)

        * jit/JIT.h:
        * jit/JITAddGenerator.cpp:
        (JSC::JITAddGenerator::generateInline):
        (JSC::JITAddGenerator::generateFastPath):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        * jit/JITInlines.h:
        (JSC::JIT::callOperation): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:

2016-09-26  Mark Lam  <mark.lam@apple.com>

        Added RETURN_IF_EXCEPTION() macro and use it for exception checks.
        https://bugs.webkit.org/show_bug.cgi?id=162521

        Reviewed by Saam Barati.

        Also, where possible, if the return type is JSValue, changed the returned value
        (on exception) to the empty JSValue (instead of sometimes jsUndefined, jsNull,
        or the thrown exception value).

        There are a few places where I had to continue to return the previously returned
        value (instead of the empty JSValue) in order for tests to pass.  This is needed
        because there are missing exception checks that will need to be added before I
        can change those to return the empty JSValue too.  Identifying all the places
        where those checks need to be added is beyond the scope of this patch.  I will
        work on adding missing exception checks in a subsequent patch.

        In this patch, there is one missing exception check in replaceUsingRegExpSearch()
        that was easily identified, and is necessary so that Interpreter::execute()
        functions can return JSValue.  I've added this missing check.

        This patch has passed the JSC and layout tests.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension):
        (Inspector::JSInjectedScriptHost::getInternalProperties):
        (Inspector::JSInjectedScriptHost::weakMapEntries):
        (Inspector::JSInjectedScriptHost::weakSetEntries):
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * inspector/JSJavaScriptCallFrame.cpp:
        (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        (JSC::sizeOfVarargs):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::functionsOnStack):
        * jit/JITOperations.cpp:
        (JSC::getByVal):
        * jsc.cpp:
        (WTF::ImpureGetter::getOwnPropertySlot):
        (functionRun):
        (functionRunString):
        (functionLoad):
        (functionLoadString):
        (functionReadFile):
        (functionCheckSyntax):
        (functionSetRandomSeed):
        (functionLoadModule):
        (functionCreateBuiltin):
        (functionCheckModuleSyntax):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::addSequenceProperties):
        * profiler/ProfilerCompilation.cpp:
        (JSC::Profiler::Compilation::toJS):
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::toJS):
        * profiler/ProfilerOSRExitSite.cpp:
        (JSC::Profiler::OSRExitSite::toJS):
        * profiler/ProfilerOriginStack.cpp:
        (JSC::Profiler::OriginStack::toJS):
        * runtime/ArrayPrototype.cpp:
        (JSC::speciesConstructArray):
        (JSC::shift):
        (JSC::unshift):
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::slowJoin):
        (JSC::fastJoin):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        (JSC::moveElements):
        (JSC::arrayProtoPrivateFuncConcatMemcpy):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructWithBooleanConstructor):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opIn):
        * runtime/Completion.cpp:
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        * runtime/ConsoleObject.cpp:
        (JSC::consoleProtoFuncAssert):
        (JSC::consoleProtoFuncProfile):
        (JSC::consoleProtoFuncProfileEnd):
        (JSC::consoleProtoFuncTakeHeapSnapshot):
        (JSC::consoleProtoFuncTime):
        (JSC::consoleProtoFuncTimeEnd):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::dateParse):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToPrimitiveSymbol):
        (JSC::dateProtoFuncToJSON):
        * runtime/ErrorConstructor.cpp:
        (JSC::Interpreter::constructWithErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedToString):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionScope.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::copyToArguments):
        * runtime/GetterSetter.cpp:
        (JSC::callGetter):
        * runtime/HashMapImpl.h:
        (JSC::jsMapHash):
        (JSC::HashMapImpl::finishCreation):
        (JSC::HashMapImpl::findBucket):
        (JSC::HashMapImpl::add):
        (JSC::HashMapImpl::rehash):
        * runtime/InspectorInstrumentationObject.cpp:
        (JSC::inspectorInstrumentationObjectLog):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createSubclassStructure):
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::constructIntlCollator):
        (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorFuncCompare):
        (JSC::IntlCollatorPrototypeGetterCompare):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::constructIntlDateTimeFormat):
        (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatFuncFormatDateTime):
        (JSC::IntlDateTimeFormatPrototypeGetterFormat):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::constructIntlNumberFormat):
        (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatFuncFormatNumber):
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        * runtime/IntlObject.cpp:
        (JSC::intlBooleanOption):
        (JSC::intlStringOption):
        (JSC::intlNumberOption):
        (JSC::canonicalizeLocaleList):
        (JSC::supportedLocales):
        * runtime/IntlObjectInlines.h:
        (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor):
        * runtime/IteratorOperations.cpp:
        (JSC::iteratorNext):
        (JSC::iteratorStep):
        (JSC::iteratorClose):
        (JSC::iteratorForIterable):
        * runtime/IteratorOperations.h:
        (JSC::forEachInIterable):
        * runtime/JSArray.cpp:
        (JSC::JSArray::pop):
        (JSC::JSArray::copyToArguments):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::constructArrayBuffer):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferProtoFuncSlice):
        * runtime/JSArrayInlines.h:
        (JSC::getLength):
        (JSC::toLength):
        * runtime/JSBoundFunction.cpp:
        (JSC::getBoundFunctionStructure):
        (JSC::JSBoundFunction::create):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        (JSC::JSValue::toStringSlowCase):
        * runtime/JSCJSValueInlines.h:
        (JSC::toPreferredPrimitiveType):
        (JSC::JSValue::getPropertySlot):
        (JSC::JSValue::equalSlowCaseInline):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::setData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::setFunctionName):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView::setIndex):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewFromIterator):
        (JSC::constructGenericTypedArrayViewWithArguments):
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncCopyWithin):
        (JSC::genericTypedArrayViewProtoFuncIncludes):
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray):
        (JSC::constructArray):
        (JSC::constructArrayNegativeIndexed):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::instantiateDeclarations):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncParse):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::callToPrimitiveFunction):
        (JSC::JSObject::defaultHasInstance):
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::toNumber):
        (JSC::JSObject::toString):
        (JSC::JSObject::defineOwnNonIndexProperty):
        (JSC::JSObject::getGenericPropertyNames):
        (JSC::JSObject::getMethod):
        * runtime/JSObjectInlines.h:
        (JSC::createListFromArrayLike):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::getNonIndexPropertySlot):
        * runtime/JSPromiseConstructor.cpp:
        (JSC::constructPromise):
        * runtime/JSPromiseDeferred.cpp:
        (JSC::JSPromiseDeferred::create):
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSScope.cpp:
        (JSC::isUnscopable):
        * runtime/JSString.cpp:
        (JSC::JSString::equalSlowCase):
        * runtime/JSStringJoiner.cpp:
        (JSC::JSStringJoiner::join):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::parse):
        * runtime/MapBase.h:
        (JSC::MapBase::finishCreation):
        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncClz32):
        (JSC::mathProtoFuncHypot):
        (JSC::mathProtoFuncIMul):
        * runtime/ModuleLoaderPrototype.cpp:
        (JSC::moduleLoaderPrototypeParseModule):
        (JSC::moduleLoaderPrototypeRequestedModules):
        (JSC::moduleLoaderPrototypeModuleDeclarationInstantiation):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::Interpreter::constructWithNativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorSetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyDescriptors):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorGetOwnPropertySymbols):
        (JSC::objectConstructorKeys):
        (JSC::ownEnumerablePropertyKeys):
        (JSC::toPropertyDescriptor):
        (JSC::objectConstructorDefineProperty):
        (JSC::defineProperties):
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):
        (JSC::objectConstructorIsExtensible):
        (JSC::ownPropertyKeys):
        * runtime/ObjectConstructor.h:
        (JSC::constructObjectFromPropertyDescriptor):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::slowGetterSetter):
        * runtime/ProxyConstructor.cpp:
        (JSC::makeRevocableProxy):
        * runtime/ProxyObject.cpp:
        (JSC::performProxyGet):
        (JSC::ProxyObject::performGet):
        (JSC::ProxyObject::performInternalMethodGetOwnProperty):
        (JSC::ProxyObject::performHasProperty):
        (JSC::ProxyObject::performPut):
        (JSC::ProxyObject::putByIndexCommon):
        (JSC::performProxyCall):
        (JSC::performProxyConstruct):
        (JSC::ProxyObject::performDelete):
        (JSC::ProxyObject::performPreventExtensions):
        (JSC::ProxyObject::performIsExtensible):
        (JSC::ProxyObject::performDefineOwnProperty):
        (JSC::ProxyObject::performGetOwnPropertyNames):
        (JSC::ProxyObject::performSetPrototype):
        (JSC::ProxyObject::performGetPrototype):
        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectConstruct):
        (JSC::reflectObjectDefineProperty):
        (JSC::reflectObjectGet):
        (JSC::reflectObjectGetOwnPropertyDescriptor):
        (JSC::reflectObjectIsExtensible):
        (JSC::reflectObjectPreventExtensions):
        (JSC::reflectObjectSet):
        (JSC::reflectObjectSetPrototypeOf):
        * runtime/RegExpConstructor.cpp:
        (JSC::toFlags):
        (JSC::regExpCreate):
        (JSC::constructRegExp):
        * runtime/RegExpConstructor.h:
        (JSC::isRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::collectMatches):
        (JSC::RegExpObject::matchGlobal):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::flagsString):
        (JSC::regExpProtoFuncToString):
        (JSC::regExpProtoGetterFlags):
        (JSC::regExpProtoFuncSearchFast):
        (JSC::regExpProtoFuncSplitFast):
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCodePoint):
        (JSC::constructWithStringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::defineOwnProperty):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
        (JSC::replaceUsingStringSearch):
        (JSC::replace):
        (JSC::stringProtoFuncReplaceUsingRegExp):
        (JSC::stringProtoFuncReplaceUsingStringSearch):
        (JSC::stringProtoFuncCodePointAt):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplitFast):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::toLocaleCase):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        (JSC::trimString):
        (JSC::stringProtoFuncStartsWith):
        (JSC::stringProtoFuncEndsWith):
        (JSC::stringIncludesImpl):
        (JSC::stringProtoFuncIncludes):
        (JSC::builtinStringIncludesInternal):
        (JSC::stringProtoFuncNormalize):
        * runtime/SymbolConstructor.cpp:
        (JSC::symbolConstructorFor):
        * runtime/TemplateRegistry.cpp:
        (JSC::TemplateRegistry::getTemplateObject):
        * runtime/WeakMapConstructor.cpp:
        (JSC::constructWeakMap):
        * runtime/WeakSetConstructor.cpp:
        (JSC::constructWeakSet):
        * tools/JSDollarVMPrototype.cpp:
        (JSC::functionPrint):

2016-09-26  Don Olmstead  <don.olmstead@am.sony.com>

        [JSC] Allow fixedExecutableMemoryPoolSize to be set during build
        https://bugs.webkit.org/show_bug.cgi?id=162514

        Reviewed by Mark Lam.

        * jit/ExecutableAllocator.h:

== Rolled over to ChangeLog-2016-09-26 ==
