Use prctl to name thread on Linux
[WebKit-https.git] / Source / WTF / ChangeLog
1 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
2
3         Use prctl to name thread on Linux
4         https://bugs.webkit.org/show_bug.cgi?id=166663
5
6         Reviewed by Michael Catanzaro.
7
8         It is quite useful if we can name threads. This name will be shown in GDB.
9         While macOS uses pthread_setname_np, we can use prctl on Linux.
10
11         * wtf/ThreadingPthreads.cpp:
12         (WTF::initializeCurrentThreadInternal):
13
14 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
15
16         WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
17         https://bugs.webkit.org/show_bug.cgi?id=166645
18
19         Reviewed by Carlos Garcia Campos.
20
21         WorkQueue can be destroyed on its invoking thread itself.
22         The scenario is the following.
23
24             1. Create WorkQueue (in thread A).
25             2. Dispatch a task (in thread A, dispatching a task to thread B).
26             3. Deref in thread A.
27             4. The task is executed in thread B.
28             5. Deref in thread B.
29             6. The WorkQueue is destroyed, calling platformInvalidate in thread B.
30
31         In that case, if platformInvalidate waits thread B's termination, it causes deadlock.
32         We do not need to wait the thread termination.
33
34         * wtf/WorkQueue.h:
35         * wtf/generic/WorkQueueGeneric.cpp:
36         (WorkQueue::platformInitialize):
37         (WorkQueue::platformInvalidate):
38
39 2017-01-03  Sam Weinig  <sam@webkit.org>
40
41         Make WTF::Expected support Ref template parameters
42         https://bugs.webkit.org/show_bug.cgi?id=166662
43
44         Reviewed by Alex Christensen.
45
46         Tests: Added to TestWebKitAPI/Expected.cpp
47
48         * wtf/Expected.h:
49         (WTF::UnexpectedType::value):
50         Add overloads based on this value type to allow getting at the value
51         as an rvalue for moving the error into the Expected.
52
53         (WTF::Expected::Expected):
54         Add overload that takes an ErrorType/UnexpectedType<ErrorType> as an rvalue.
55
56         (WTF::Expected::swap):
57         Move the temporary value/error rather than copying.
58
59 2017-01-02  Julien Brianceau  <jbriance@cisco.com>
60
61         Remove sh4 specific code from JavaScriptCore
62         https://bugs.webkit.org/show_bug.cgi?id=166640
63
64         Reviewed by Filip Pizlo.
65
66         * wtf/Platform.h:
67
68 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
69
70         Leverage Substring to create new AtomicStringImpl for StaticStringImpl and SymbolImpl
71         https://bugs.webkit.org/show_bug.cgi?id=166636
72
73         Reviewed by Darin Adler.
74
75         Previously we always create the full atomic string if we need to create the same string
76         based on the given value. For example, when generating AtomicStringImpl from the SymbolImpl,
77         we need to create a new AtomicStringImpl since SymbolImpl never becomes `isAtomic() == true`.
78         But it is costly.
79
80         This patch leverages the substring system of StringImpl. Instead of allocating the completely
81         duplicate string, we create a substring StringImpl that shares the same content with the
82         base string.
83
84         * wtf/text/AtomicStringImpl.cpp:
85         (WTF::stringTable):
86         (WTF::addToStringTable):
87         (WTF::addSubstring):
88         (WTF::AtomicStringImpl::addSlowCase):
89         (WTF::AtomicStringImpl::remove):
90         (WTF::AtomicStringImpl::lookUpSlowCase):
91         * wtf/text/StringImpl.h:
92         (WTF::StringImpl::StaticStringImpl::operator StringImpl&):
93
94 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
95
96         Use StaticStringImpl instead of StaticASCIILiteral
97         https://bugs.webkit.org/show_bug.cgi?id=166586
98
99         Reviewed by Darin Adler.
100
101         It is more handy way to define static StringImpl. It calculates the length
102         and hash value by using the constexpr constructor and function. So we do
103         not need to calculate these things in Perl script.
104         And it allows us to use StaticStringImpl in the hand written C++ code.
105         Previously, we need to calculate the length and hash value by hand if we
106         would like to use StaticASCIILiteral in the hand written C++ code, and it
107         meant that we cannot use it at all in the hand written C++ code.
108
109         * wtf/text/AtomicStringImpl.cpp:
110         (WTF::AtomicStringImpl::addSlowCase):
111         (WTF::AtomicStringImpl::lookUpSlowCase):
112         * wtf/text/AtomicStringImpl.h:
113         * wtf/text/StringImpl.h:
114         * wtf/text/SymbolImpl.h:
115         * wtf/text/UniquedStringImpl.h:
116
117 2017-01-02  Andreas Kling  <akling@apple.com>
118
119         Discard media controls JS/CSS caches under memory pressure.
120         <https://webkit.org/b/166639>
121
122         Reviewed by Antti Koivisto.
123
124         * wtf/text/WTFString.h:
125         (WTF::String::clearImplIfNotShared): Add a helper for clearing a String if the underlying
126         StringImpl is not referenced by anyone else.
127
128 2016-12-22  Mark Lam  <mark.lam@apple.com>
129
130         De-duplicate finally blocks.
131         https://bugs.webkit.org/show_bug.cgi?id=160168
132
133         Reviewed by Saam Barati.
134
135         Added some methods to bring SegmentedVector closer to parity with Vector.
136
137         * wtf/SegmentedVector.h:
138         (WTF::SegmentedVector::first):
139         (WTF::SegmentedVector::last):
140         (WTF::SegmentedVector::takeLast):
141
142 2016-12-19  Mark Lam  <mark.lam@apple.com>
143
144         Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 2: Rollout r209952.
145         https://bugs.webkit.org/show_bug.cgi?id=166049
146
147         Not reviewed.
148
149         * wtf/SegmentedVector.h:
150         (WTF::SegmentedVector::last):
151         (WTF::SegmentedVector::first): Deleted.
152         (WTF::SegmentedVector::takeLast): Deleted.
153
154 2016-12-16  Mark Lam  <mark.lam@apple.com>
155
156         Add predecessor info to dumps from JSC_dumpBytecodeLivenessResults=true.
157         https://bugs.webkit.org/show_bug.cgi?id=165958
158
159         Reviewed by Keith Miller.
160
161         Added some methods to bring SegmentedVector closer to parity with Vector.
162
163         * wtf/SegmentedVector.h:
164         (WTF::SegmentedVector::first):
165         (WTF::SegmentedVector::last):
166         (WTF::SegmentedVector::takeLast):
167
168 2016-12-16  Michael Saboff  <msaboff@apple.com>
169
170         REGRESSION: HipChat and Mail sometimes hang beneath JSC::Heap::lastChanceToFinalize()
171         https://bugs.webkit.org/show_bug.cgi?id=165962
172
173         Reviewed by Filip Pizlo.
174
175         There is an inherent race in Condition::waitFor() where the timeout can happen just before
176         a notify from another thread.
177
178         Fixed this by adding a condition variable and flag to each AutomaticThread.  The flag
179         is used to signify to a notifying thread that the thread is waiting.  That flag is set
180         in the waiting thread before calling waitFor() and cleared by another thread when it
181         notifies the thread.  The access to that flag happens when the lock is held.
182         Now the waiting thread checks if the flag after a timeout to see that it in fact should
183         proceed like a normal notification.
184
185         The added condition variable allows us to target a specific thread.  We used to keep a list
186         of waiting threads, now we keep a list of all threads.  To notify one thread, we look for
187         a waiting thread and notify it directly.  If we can't find a waiting thread, we start a
188         sleeping thread.
189
190         We notify all threads by waking all waiting threads and starting all sleeping threads.
191
192         * wtf/AutomaticThread.cpp:
193         (WTF::AutomaticThreadCondition::notifyOne):
194         (WTF::AutomaticThreadCondition::notifyAll):
195         (WTF::AutomaticThread::isWaiting):
196         (WTF::AutomaticThread::notify):
197         (WTF::AutomaticThread::start):
198         * wtf/AutomaticThread.h:
199
200 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
201
202         Unreviewed build fix after r209910
203
204         Unreviewed.
205
206         * wtf/Platform.h:
207
208 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
209
210         Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
211         https://bugs.webkit.org/show_bug.cgi?id=165931
212
213         We have a class declaration for TextBreakIterator but no definition for it. When we
214         create an ICU UBreakIterator, we immediately reinterpret_cast it to this undefined
215         type, and pass it around our code inside WebCore. Then, whenever we want to actually
216         use this iterator, we reinterpret_cast it back to UBreakIterator. This is likely due
217         to some ports historically implementing breaking interators on top of other libraries
218         other than ICU; however, now, all ports use ICU. Because this internal type is not
219         helpful and just adds confusion, we should just call our breaking iterators what
220         they are: UBreakIterators.
221
222         This patch is a mechanical replacement of TextBreakIterator to UBreakIterator and
223         removes the functions we were calling which pass through directly to ubrk_*().
224
225         Reviewed by Alex Christensen.
226
227         * wtf/text/LineBreakIteratorPoolICU.h:
228         (WTF::LineBreakIteratorPool::take):
229         (WTF::LineBreakIteratorPool::put):
230         * wtf/text/StringView.cpp:
231         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
232         * wtf/text/TextBreakIterator.cpp:
233         (WTF::initializeIterator):
234         (WTF::initializeIteratorWithRules):
235         (WTF::setTextForIterator):
236         (WTF::setContextAwareTextForIterator):
237         (WTF::wordBreakIterator):
238         (WTF::sentenceBreakIterator):
239         (WTF::cursorMovementIterator):
240         (WTF::acquireLineBreakIterator):
241         (WTF::releaseLineBreakIterator):
242         (WTF::openLineBreakIterator):
243         (WTF::closeLineBreakIterator):
244         (WTF::getNonSharedCharacterBreakIterator):
245         (WTF::cacheNonSharedCharacterBreakIterator):
246         (WTF::isWordTextBreak):
247         (WTF::numGraphemeClusters):
248         (WTF::numCharactersInGraphemeClusters):
249         (WTF::textBreakFirst): Deleted.
250         (WTF::textBreakLast): Deleted.
251         (WTF::textBreakNext): Deleted.
252         (WTF::textBreakPrevious): Deleted.
253         (WTF::textBreakPreceding): Deleted.
254         (WTF::textBreakFollowing): Deleted.
255         (WTF::textBreakCurrent): Deleted.
256         (WTF::isTextBreak): Deleted.
257         * wtf/text/TextBreakIterator.h:
258         (WTF::LazyLineBreakIterator::lastCharacter):
259         (WTF::LazyLineBreakIterator::secondToLastCharacter):
260         (WTF::LazyLineBreakIterator::setPriorContext):
261         (WTF::LazyLineBreakIterator::updatePriorContext):
262         (WTF::LazyLineBreakIterator::resetPriorContext):
263         (WTF::LazyLineBreakIterator::priorContextLength):
264         (WTF::LazyLineBreakIterator::get):
265         (WTF::NonSharedCharacterBreakIterator::operator UBreakIterator*):
266         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*): Deleted.
267
268 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
269
270         Sort Xcode project files
271         https://bugs.webkit.org/show_bug.cgi?id=165937
272
273         Reviewed by Simon Fraser.
274
275         * WTF.xcodeproj/project.pbxproj:
276
277 2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>
278
279         Added missing override and final specifiers
280         https://bugs.webkit.org/show_bug.cgi?id=165903
281
282         Reviewed by Darin Adler.
283
284         * wtf/RunLoop.h:
285
286 2016-12-15  Yusuke Suzuki  <utatane.tea@gmail.com>
287
288         [JSC] Optimize Kraken stringify
289         https://bugs.webkit.org/show_bug.cgi?id=165857
290
291         Reviewed by Darin Adler.
292
293         Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
294         According to the result produced by Linux `perf`, it occupies 28% of execution time.
295
296         We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
297         And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.
298
299         It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.
300
301             Performance result in my MBP (dandelion).
302
303                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
304                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
305                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
306                 with 95% confidence intervals in milliseconds.
307
308                                                    baseline                  patched
309
310                 json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
311
312                 <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
313
314             Performance result in my Linux laptop (hanayamata).
315
316                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
317                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
318                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
319                 with 95% confidence intervals in milliseconds.
320
321                                                    baseline                  patched
322
323                 json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
324
325                 <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
326
327         * wtf/text/StringBuilder.cpp:
328         (WTF::appendQuotedJSONStringInternalSlow):
329         (WTF::appendQuotedJSONStringInternal):
330
331 2016-12-14  Commit Queue  <commit-queue@webkit.org>
332
333         Unreviewed, rolling out r209795.
334         https://bugs.webkit.org/show_bug.cgi?id=165853
335
336         rolled out the wrong revision (Requested by pizlo on #webkit).
337
338         Reverted changeset:
339
340         "MarkedBlock::marksConveyLivenessDuringMarking should take
341         into account collection scope"
342         https://bugs.webkit.org/show_bug.cgi?id=165741
343         http://trac.webkit.org/changeset/209795
344
345 2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>
346
347         REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
348         https://bugs.webkit.org/show_bug.cgi?id=164022
349
350         Reviewed by Xabier Rodriguez-Calvar.
351
352         * wtf/glib/GLibUtilities.h:
353         Added new macros to convert gulong to/from gpointer.
354
355 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
356
357         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
358         https://bugs.webkit.org/show_bug.cgi?id=165741
359
360         Unreviewed, re-landing this with fix (revert erroneous change to Options).
361
362         * WTF.xcodeproj/project.pbxproj:
363         * wtf/CMakeLists.txt:
364         * wtf/DataLog.cpp:
365         (WTF::initializeLogFileOnce):
366         (WTF::initializeLogFile):
367         (WTF::dataFile):
368         * wtf/DataLog.h:
369         * wtf/LockedPrintStream.cpp: Added.
370         (WTF::LockedPrintStream::LockedPrintStream):
371         (WTF::LockedPrintStream::~LockedPrintStream):
372         (WTF::LockedPrintStream::vprintf):
373         (WTF::LockedPrintStream::flush):
374         (WTF::LockedPrintStream::begin):
375         (WTF::LockedPrintStream::end):
376         * wtf/LockedPrintStream.h: Added.
377         * wtf/PrintStream.cpp:
378         (WTF::PrintStream::printfVariableFormat):
379         (WTF::PrintStream::begin):
380         (WTF::PrintStream::end):
381         * wtf/PrintStream.h:
382         (WTF::PrintStream::atomically):
383         (WTF::PrintStream::print):
384         (WTF::PrintStream::println):
385         (WTF::PrintStream::printImpl):
386         (WTF::>::unpack):
387         (WTF::FormatImpl::FormatImpl):
388         (WTF::FormatImpl::dump):
389         (WTF::format):
390         (WTF::printInternal):
391         * wtf/RecursiveLockAdapter.h: Added.
392         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
393         (WTF::RecursiveLockAdapter::lock):
394         (WTF::RecursiveLockAdapter::unlock):
395         (WTF::RecursiveLockAdapter::tryLock):
396         (WTF::RecursiveLockAdapter::isLocked):
397         * wtf/WordLock.cpp:
398         * wtf/WordLock.h:
399
400 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
401
402         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
403         https://bugs.webkit.org/show_bug.cgi?id=165741
404
405         Unreviewed rollout due to performance regression.
406
407         * WTF.xcodeproj/project.pbxproj:
408         * wtf/CMakeLists.txt:
409         * wtf/DataLog.cpp:
410         (WTF::initializeLogFileOnce):
411         (WTF::initializeLogFile):
412         (WTF::dataFile):
413         * wtf/DataLog.h:
414         * wtf/LockedPrintStream.cpp: Removed.
415         * wtf/LockedPrintStream.h: Removed.
416         * wtf/PrintStream.cpp:
417         (WTF::PrintStream::printfVariableFormat): Deleted.
418         (WTF::PrintStream::begin): Deleted.
419         (WTF::PrintStream::end): Deleted.
420         * wtf/PrintStream.h:
421         (WTF::PrintStream::print):
422         (WTF::PrintStream::println):
423         (WTF::PrintStream::atomically): Deleted.
424         (WTF::PrintStream::printImpl): Deleted.
425         (): Deleted.
426         (WTF::>::unpack): Deleted.
427         (WTF::FormatImpl::FormatImpl): Deleted.
428         (WTF::FormatImpl::dump): Deleted.
429         (WTF::format): Deleted.
430         * wtf/RecursiveLockAdapter.h: Removed.
431         * wtf/WordLock.cpp:
432         * wtf/WordLock.h:
433
434 2016-12-13  JF Bastien  <jfbastien@apple.com>
435
436         std::expected: fix rvalue forwarding issues
437         https://bugs.webkit.org/show_bug.cgi?id=165812
438
439         Reviewed by Mark Lam.
440
441         * wtf/Expected.h:
442         (WTF::UnexpectedType::UnexpectedType):
443         (WTF::ExpectedDetail::Base::Base):
444         (WTF::Expected::Expected):
445
446 2016-12-13  Chris Dumez  <cdumez@apple.com>
447
448         Unreviewed, rolling out r209544.
449
450         Looks like r209489 did not cause the performance regression
451         after all
452
453         Reverted changeset:
454
455         "Unreviewed, rolling out r209489."
456         https://bugs.webkit.org/show_bug.cgi?id=165550
457         http://trac.webkit.org/changeset/209544
458
459 2016-12-13  Commit Queue  <commit-queue@webkit.org>
460
461         Unreviewed, rolling out r209725.
462         https://bugs.webkit.org/show_bug.cgi?id=165811
463
464         "Broke ARMv7 builds" (Requested by msaboff on #webkit).
465
466         Reverted changeset:
467
468         "REGRESSION(r209653): speedometer crashes making virtual slow
469         path tailcalls"
470         https://bugs.webkit.org/show_bug.cgi?id=165748
471         http://trac.webkit.org/changeset/209725
472
473 2016-12-13  JF Bastien  <jfbastien@apple.com>
474
475         [WTF] Turn tryMakeString(), makeString() into variadic templates
476         https://bugs.webkit.org/show_bug.cgi?id=147142
477
478         Reviewed by Mark Lam.
479
480         I wrote this patch while improving WebAssembly's error messages,
481         and only found this bug afterwards. My implementation does the
482         bare minimum to make this code variadic without changing
483         behavior. I think it's better to go with this baby step first, and
484         improve the code later.
485
486         Notable, for my WebAssembly patch I also taught the code to handle
487         integers and other types (including WebAssembly types). A
488         follow-up could rely on ADL magic to pretty-format these other
489         types.
490
491         * wtf/text/StringConcatenate.h:
492         (WTF::sumWithOverflow): This unconditionally does the sum for all
493         inputs, which the compiler is more likely to appreciate (because
494         it's the common case) compared to testing for overflow and bailing
495         on each addition
496         (WTF::are8Bit): are: the plural of is!
497         (WTF::makeStringAccumulator): accumulate strings
498         (WTF::tryMakeStringFromAdapters): a small helper which creates the string adapters
499         (WTF::tryMakeString): expose out of WTF, since it's part of this file's used API
500         (WTF::makeString): make it variadic
501
502 2016-12-13  Konstantin Tokarev  <annulen@yandex.ru>
503
504         Unreviewed, silence -Wsuggest-attribute for GCC with pragmas
505
506         * wtf/PrintStream.cpp:
507         (WTF::PrintStream::printfVariableFormat):
508
509 2016-12-12  Michael Saboff  <msaboff@apple.com>
510
511         REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
512         https://bugs.webkit.org/show_bug.cgi?id=165748
513
514         Reviewed by Filip Pizlo.
515
516         Rolling back in r209653, r209654, r209663, and r209673.
517
518         * wtf/Platform.h:
519
520 2016-12-12  Commit Queue  <commit-queue@webkit.org>
521
522         Unreviewed, rolling out r209703.
523         https://bugs.webkit.org/show_bug.cgi?id=165749
524
525         Broke Apple builds (Requested by annulen|home on #webkit).
526
527         Reverted changeset:
528
529         "Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma"
530         http://trac.webkit.org/changeset/209703
531
532 2016-12-12  Konstantin Tokarev  <annulen@yandex.ru>
533
534         Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma
535
536         * wtf/PrintStream.cpp:
537         (WTF::PrintStream::printfVariableFormat):
538         * wtf/PrintStream.h:
539
540 2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>
541
542         Unreviewed, guarded clang pragma with COMPILER(CLANG) to fix -Werror
543
544         * wtf/PrintStream.cpp:
545         (WTF::PrintStream::printfVariableFormat):
546
547 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
548
549         Change to use #pragma once (requested by Darin Adler).
550
551         * wtf/RecursiveLockAdapter.h:
552
553 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
554
555         Change to use #pragma once (requested by Darin Adler).
556
557         * wtf/LockedPrintStream.h:
558
559 2016-12-10  Filip Pizlo  <fpizlo@apple.com>
560
561         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
562         https://bugs.webkit.org/show_bug.cgi?id=165741
563
564         Reviewed by Saam Barati.
565         
566         To find this bug, I needed to seriously beef up our logging infrastructure.
567         
568         It's now the case that:
569         
570             dataLog(...);
571         
572         will print its output atomically. This happens with some careful magic:
573         
574         - dataFile() is now a LockedPrintStream that locks around print().
575         
576         - The lock is a recursive lock via RecursiveLockAdapter<>, so if the dump methods end
577           up calling back into dataLog() then it just works. This is important: say the dump()
578           calls a getter that itself does logging, maybe because it's encountering badness and
579           wants to report it before crashing).
580         
581         - The lock is a WordLock so that ParkingLot and Lock can keep using dataLog() for
582           debugging. We probably won't need to debug WordLock anytime soon - the algorithm is
583           so simple.
584         
585         - LockedPrintStream::print(...) causes the print callbacks of its arguments to run on
586           the underlying PrintStream, so that you don't need to do recursive lock acquisition
587           on each individual argument and whatever printing it does recursively.
588
589         * WTF.xcodeproj/project.pbxproj:
590         * wtf/CMakeLists.txt:
591         * wtf/DataLog.cpp:
592         (WTF::initializeLogFileOnce):
593         (WTF::initializeLogFile):
594         (WTF::dataFile):
595         * wtf/DataLog.h:
596         * wtf/LockedPrintStream.cpp: Added.
597         (WTF::LockedPrintStream::LockedPrintStream):
598         (WTF::LockedPrintStream::~LockedPrintStream):
599         (WTF::LockedPrintStream::vprintf):
600         (WTF::LockedPrintStream::flush):
601         (WTF::LockedPrintStream::begin):
602         (WTF::LockedPrintStream::end):
603         * wtf/LockedPrintStream.h: Added.
604         * wtf/PrintStream.cpp:
605         (WTF::PrintStream::printfVariableFormat):
606         (WTF::PrintStream::begin):
607         (WTF::PrintStream::end):
608         * wtf/PrintStream.h:
609         (WTF::PrintStream::atomically):
610         (WTF::PrintStream::print):
611         (WTF::PrintStream::println):
612         (WTF::PrintStream::printImpl):
613         (WTF::>::unpack):
614         (WTF::FormatImpl::FormatImpl):
615         (WTF::FormatImpl::dump):
616         (WTF::format):
617         (WTF::printInternal):
618         * wtf/RecursiveLockAdapter.h: Added.
619         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
620         (WTF::RecursiveLockAdapter::lock):
621         (WTF::RecursiveLockAdapter::unlock):
622         (WTF::RecursiveLockAdapter::tryLock):
623         (WTF::RecursiveLockAdapter::isLocked):
624         * wtf/WordLock.cpp:
625         * wtf/WordLock.h:
626
627 2016-12-11  Darin Adler  <darin@apple.com>
628
629         Use std::vsnprintf instead of vasprintf
630         https://bugs.webkit.org/show_bug.cgi?id=165740
631
632         Reviewed by Sam Weinig.
633
634         * wtf/Platform.h: Remove HAVE_VASPRINTF.
635         * wtf/StringExtras.h: Change the vsnprintf workaround to be used only
636         in older versions of Visual Studio, since the problem it works around
637         was resolved in Visual Studio 2015.
638
639 2016-12-10  Commit Queue  <commit-queue@webkit.org>
640
641         Unreviewed, rolling out r209653, r209654, r209663, and
642         r209673.
643         https://bugs.webkit.org/show_bug.cgi?id=165739
644
645         speedometer crashes (Requested by pizlo on #webkit).
646
647         Reverted changesets:
648
649         "JSVALUE64: Pass arguments in platform argument registers when
650         making JavaScript calls"
651         https://bugs.webkit.org/show_bug.cgi?id=160355
652         http://trac.webkit.org/changeset/209653
653
654         "Unreviewed build fix for 32 bit builds."
655         http://trac.webkit.org/changeset/209654
656
657         "Unreviewed build fix for the CLOOP after r209653"
658         http://trac.webkit.org/changeset/209663
659
660         "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
661         https://bugs.webkit.org/show_bug.cgi?id=165728
662         http://trac.webkit.org/changeset/209673
663
664 2016-12-10  Chris Dumez  <cdumez@apple.com>
665
666         Avoid calling shrink() in the Vector destructor
667         https://bugs.webkit.org/show_bug.cgi?id=165675
668
669         Reviewed by Daniel Bates.
670
671         Avoid calling shrink() in the Vector destructor to avoid function call
672         overhead and unnecessarily reseting m_size to 0.
673
674         * wtf/Vector.h:
675         (WTF::Vector::~Vector):
676         (WTF::Vector::asanSetBufferSizeToFullCapacity):
677         (WTF::minCapacity>::asanSetBufferSizeToFullCapacity):
678
679 2016-12-09  Michael Saboff  <msaboff@apple.com>
680
681         JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
682         https://bugs.webkit.org/show_bug.cgi?id=160355
683
684         Reviewed by Filip Pizlo.
685
686         Added a new build option ENABLE_VM_COUNTERS to enable JIT'able counters.
687         The default is for the option to be off.
688
689         * wtf/Platform.h:
690         Added ENABLE_VM_COUNTERS
691
692 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
693
694         Deploy OrdinalNumber in JSC::SourceCode
695         https://bugs.webkit.org/show_bug.cgi?id=165687
696
697         Reviewed by Michael Saboff.
698
699         * wtf/text/OrdinalNumber.h:
700         (WTF::OrdinalNumber::operator>): Added a >.
701
702 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
703
704         TextPosition and OrdinalNumber should be more like idiomatic numbers
705         https://bugs.webkit.org/show_bug.cgi?id=165678
706
707         Reviewed by Filip Pizlo.
708
709         * wtf/text/TextPosition.h:
710         (WTF::TextPosition::minimumPosition): Deleted. Just use the default
711         constructor. Other numbers use their default constructors to mean zero.
712
713         Any time you need a comment that says "used as a default value", that's
714         a pretty good indicator that it should be the default constructor.
715
716 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
717
718         Moved OrdinalNumber into its own file
719         https://bugs.webkit.org/show_bug.cgi?id=165663
720
721         Reviewed by Saam Barati.
722
723         * WTF.xcodeproj/project.pbxproj:
724         * wtf/text/OrdinalNumber.h: Copied from Source/WTF/wtf/text/TextPosition.h.
725         (WTF::TextPosition::TextPosition): Deleted.
726         (WTF::TextPosition::operator==): Deleted.
727         (WTF::TextPosition::operator!=): Deleted.
728         (WTF::TextPosition::minimumPosition): Deleted.
729         (WTF::TextPosition::belowRangePosition): Deleted.
730         * wtf/text/TextPosition.h:
731         (WTF::OrdinalNumber::fromZeroBasedInt): Deleted.
732         (WTF::OrdinalNumber::fromOneBasedInt): Deleted.
733         (WTF::OrdinalNumber::OrdinalNumber): Deleted.
734         (WTF::OrdinalNumber::zeroBasedInt): Deleted.
735         (WTF::OrdinalNumber::oneBasedInt): Deleted.
736         (WTF::OrdinalNumber::operator==): Deleted.
737         (WTF::OrdinalNumber::operator!=): Deleted.
738         (WTF::OrdinalNumber::first): Deleted.
739         (WTF::OrdinalNumber::beforeFirst): Deleted.
740
741 2016-12-08  David Kilzer  <ddkilzer@apple.com>
742
743         Always check the return value of pthread_key_create()
744         <https://webkit.org/b/165274>
745
746         Reviewed by Darin Adler.
747
748         * wtf/ThreadIdentifierDataPthreads.cpp:
749         (WTF::ThreadIdentifierData::initializeOnce): Make the code more
750         readable by assigning a variable to the result of
751         pthread_key_create().  This matches the idiom used elsewhere.
752
753 2016-12-08  Keith Miller  <keith_miller@apple.com>
754
755         Add 64-bit signed LEB decode method
756         https://bugs.webkit.org/show_bug.cgi?id=165630
757
758         Reviewed by Ryosuke Niwa.
759
760         Add int64 LEB decode and fix some 64-bit specific issues
761         with the decoder. There is also a fix where we would allow
762         LEBs with canonical length + 1 size that is fixed by this
763         patch.
764
765         * wtf/LEBDecoder.h:
766         (WTF::LEBDecoder::decodeUInt):
767         (WTF::LEBDecoder::decodeInt):
768         (WTF::LEBDecoder::decodeUInt32):
769         (WTF::LEBDecoder::decodeUInt64):
770         (WTF::LEBDecoder::decodeInt32):
771         (WTF::LEBDecoder::decodeInt64):
772
773 2016-12-08  Anders Carlsson  <andersca@apple.com>
774
775         Defer sending Mach messages if the queue is full
776         https://bugs.webkit.org/show_bug.cgi?id=165622
777         rdar://problem/29518036
778
779         Reviewed by Brady Eidson.
780
781         Add new SPI.
782
783         * wtf/spi/darwin/XPCSPI.h:
784
785 2016-12-06  Filip Pizlo  <fpizlo@apple.com>
786
787         Concurrent GC should be stable enough to land enabled on X86_64
788         https://bugs.webkit.org/show_bug.cgi?id=164990
789
790         Reviewed by Geoffrey Garen.
791         
792         Adds the ability to say:
793         
794         auto locker = holdLock(any type of lock)
795         
796         Instead of having to say:
797         
798         Locker<LockType> locker(locks of type LockType)
799         
800         I think that we should use "auto locker = holdLock(lock)" as the default way that we acquire
801         locks unless we need to use a special locker type.
802         
803         This also adds the ability to safepoint a lock. Safepointing a lock is basically a super fast
804         way of unlocking it fairly and then immediately relocking it - i.e. letting anyone who is
805         waiting to run without losing steam of there is noone waiting.
806
807         * wtf/Lock.cpp:
808         (WTF::LockBase::safepointSlow):
809         * wtf/Lock.h:
810         (WTF::LockBase::safepoint):
811         * wtf/LockAlgorithm.h:
812         (WTF::LockAlgorithm::safepointFast):
813         (WTF::LockAlgorithm::safepoint):
814         (WTF::LockAlgorithm::safepointSlow):
815         * wtf/Locker.h:
816         (WTF::AbstractLocker::AbstractLocker):
817         (WTF::Locker::tryLock):
818         (WTF::Locker::operator bool):
819         (WTF::Locker::Locker):
820         (WTF::Locker::operator=):
821         (WTF::holdLock):
822         (WTF::tryHoldLock):
823
824 2016-12-08  Chris Dumez  <cdumez@apple.com>
825
826         Unreviewed, rolling out r209489.
827
828         Likely caused large regressions on JetStream, Sunspider and
829         Speedometer
830
831         Reverted changeset:
832
833         "Add system trace points for JavaScript VM entry/exit"
834         https://bugs.webkit.org/show_bug.cgi?id=165550
835         http://trac.webkit.org/changeset/209489
836
837 2016-12-07  Simon Fraser  <simon.fraser@apple.com>
838
839         Add system trace points for JavaScript VM entry/exit
840         https://bugs.webkit.org/show_bug.cgi?id=165550
841
842         Reviewed by Tim Horton.
843         
844         Add trace points for entry/exit into/out of the JS VM.
845
846         * wtf/SystemTracing.h:
847
848 2016-12-06  Alexey Proskuryakov  <ap@apple.com>
849
850         Correct SDKROOT values in xcconfig files
851         https://bugs.webkit.org/show_bug.cgi?id=165487
852         rdar://problem/29539209
853
854         Reviewed by Dan Bernstein.
855
856         Fix suggested by Dan Bernstein.
857
858         * Configurations/DebugRelease.xcconfig:
859
860 2016-12-06  Michael Saboff  <msaboff@apple.com>
861
862         REGRESSION(r209399): Causes crashes when dumping JIT disassembly
863         https://bugs.webkit.org/show_bug.cgi?id=165483
864
865         Reviewed by Geoffrey Garen.
866
867         Fixed the RELEASE_ASSERT() to check that the 6 character string is terminated by a null
868         character.
869
870         * wtf/SixCharacterHash.cpp:
871         (WTF::sixCharacterHashStringToInteger):
872
873 2016-12-04  Darin Adler  <darin@apple.com>
874
875         Use ASCIICType more, and improve it a little bit
876         https://bugs.webkit.org/show_bug.cgi?id=165360
877
878         Reviewed by Sam Weinig.
879
880         * wtf/ASCIICType.h: Added declarations of all the functions to the top of the file,
881         so we have a list of what's available, not just a mix of that and the implementation.
882
883         * wtf/HexNumber.h:
884         (WTF::Internal::hexDigitsForMode): Moved lowerHexDigits and upperHexDigits
885         inside this function.
886         (WTF::appendByteAsHex): Use auto.
887         (WTF::placeByteAsHexCompressIfPossible): Ditto.
888         (WTF::placeByteAsHex): Ditto.
889         (WTF::appendUnsignedAsHex): Ditto.
890         (WTF::appendUnsigned64AsHex): Ditto.
891         (WTF::appendUnsignedAsHexFixedSize): Ditto.
892         (WTF::isHexDigit): Deleted.
893         (WTF::uncheckedHexDigit): Deleted.
894         (WTF::hexDigitValue): Deleted.
895         (WTF::uncheckedHexDigitValue): Deleted.
896
897         * wtf/SixCharacterHash.cpp:
898         (WTF::sixCharacterHashStringToInteger): Use isASCIIUpper, isASCIILower, and
899         isASCIIDigit. Also added some FIXMEs; for some reason this function uses
900         RELEASE_ASSERT to abort if the passed-in string is not six characters long,
901         and it's not clear to me why this is so critical to assert.
902         (WTF::integerToSixCharacterHashString): Moved the table inside this function,
903         obviating the need for a macro named TABLE.
904
905         * wtf/dtoa/bignum.cc:
906         (WTF::double_conversion::HexCharValue): Deleted.
907         (WTF::double_conversion::Bignum::AssignHexString): Use toASCIIHexValue.
908         * wtf/dtoa/double-conversion.cc:
909         (WTF::double_conversion::StringToDoubleConverter::StringToDouble): Use isASCIIDigit.
910
911         * wtf/text/StringBuilder.cpp:
912         (WTF::appendQuotedJSONStringInternal): Use upperNibbleToASCIIHexDigit and
913         lowerNibbleToASCIIHexDigit.
914
915         * wtf/text/StringImpl.cpp:
916         (WTF::StringImpl::convertToUppercaseWithoutLocale): Use toASCIIUpper.
917         Removed the workaround for a bug that was fixed in Visual Studio 2013.
918
919 2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>
920
921         REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
922         https://bugs.webkit.org/show_bug.cgi?id=165351
923
924         Reviewed by Yusuke Suzuki.
925
926         Include a slimmed down version of WTF::Optional which older versions
927         of Safari still depend on for a JavaScriptCore exported symbol.
928         To prevent misuse name it WTF::DeprecatedOptional and use it only in
929         the one instance it is needed.
930
931         * WTF.xcodeproj/project.pbxproj:
932         * wtf/DeprecatedOptional.h: Added.
933         (WTF::Optional::operator bool):
934         (WTF::Optional::value):
935         (WTF::Optional::asPtr):
936
937 2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>
938
939         Add __STDC_FORMAT_MACROS before inttypes.h is included
940         https://bugs.webkit.org/show_bug.cgi?id=165374
941
942         We need formatting macros like PRIu64 to be available in all places where
943         inttypes.h header is used. All these usages get inttypes.h definitions
944         via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
945         macros are not used anymore since r185129.
946
947         This patch fixes multiple build errors with MinGW and reduces number of
948         independent __STDC_FORMAT_MACROS uses in the code base.
949
950         Reviewed by Darin Adler.
951
952         * wtf/Assertions.h: Define __STDC_FORMAT_MACROS.
953         * wtf/StdLibExtras.h: Remove definition of PRId64 for Windows, as we
954         have __STDC_FORMAT_MACROS defined now.
955
956 2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>
957
958         Refactor SymbolImpl layout
959         https://bugs.webkit.org/show_bug.cgi?id=165247
960
961         Reviewed by Darin Adler.
962
963         This patch moves SymbolImpl initialization from StringImpl to SymbolImpl.
964         In SymbolImpl, we create the appropriate fields. At that time, these fields
965         should be aligned to the BufferSubstring StringImpl.
966
967         And we newly create the `m_flags` in SymbolImpl. Instead of using special
968         StringImpl::null(), we store s_flagIsNullSymbol flag here. In WTF, we have
969         the invariant that StringImpl::empty() is the only atomic empty string.
970         But StringImpl::null() breaks this invariant. Using a special flag is safer
971         way to represent the null Symbol `Symbol()`.
972
973         * WTF.xcodeproj/project.pbxproj:
974         * wtf/CMakeLists.txt:
975         * wtf/StdLibExtras.h:
976         (WTF::roundUpToMultipleOfImpl0):
977         (WTF::roundUpToMultipleOfImpl):
978         (WTF::roundUpToMultipleOf):
979         * wtf/text/StringImpl.cpp:
980         (WTF::StringImpl::~StringImpl):
981         (WTF::StringImpl::createSymbol): Deleted.
982         (WTF::StringImpl::createNullSymbol): Deleted.
983         * wtf/text/StringImpl.h:
984         (WTF::StringImpl::isAtomic):
985         (WTF::StringImpl::StringImpl):
986         (WTF::StringImpl::requiresCopy):
987         (WTF::StringImpl::isNullSymbol): Deleted.
988         (WTF::StringImpl::symbolAwareHash): Deleted.
989         (WTF::StringImpl::existingSymbolAwareHash): Deleted.
990         (WTF::StringImpl::null): Deleted.
991         (WTF::StringImpl::extractFoldedStringInSymbol): Deleted.
992         (WTF::StringImpl::symbolRegistry): Deleted.
993         (WTF::StringImpl::hashForSymbol): Deleted.
994         * wtf/text/StringStatics.cpp:
995         (WTF::StringImpl::nextHashForSymbol): Deleted.
996         * wtf/text/SymbolImpl.cpp: Copied from Source/WTF/wtf/text/SymbolRegistry.cpp.
997         (WTF::SymbolImpl::nextHashForSymbol):
998         (WTF::SymbolImpl::create):
999         (WTF::SymbolImpl::createNullSymbol):
1000         * wtf/text/SymbolImpl.h:
1001         (WTF::SymbolImpl::hashForSymbol):
1002         (WTF::SymbolImpl::symbolRegistry):
1003         (WTF::SymbolImpl::isNullSymbol):
1004         (WTF::SymbolImpl::extractFoldedString):
1005         (WTF::SymbolImpl::SymbolImpl):
1006         (WTF::StringImpl::symbolAwareHash):
1007         (WTF::StringImpl::existingSymbolAwareHash):
1008         * wtf/text/SymbolRegistry.cpp:
1009         (WTF::SymbolRegistry::~SymbolRegistry):
1010         (WTF::SymbolRegistry::symbolForKey):
1011         (WTF::SymbolRegistry::keyForSymbol):
1012         * wtf/text/UniquedStringImpl.h:
1013         (WTF::UniquedStringImpl::UniquedStringImpl):
1014
1015 2016-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1016
1017         Introduce StringImpl::StaticStringImpl with constexpr constructor
1018         https://bugs.webkit.org/show_bug.cgi?id=165093
1019
1020         Reviewed by Darin Adler.
1021
1022         This patch adds new class, StringImpl::StaticStringImpl.
1023         By using this class, we can easily create static StringImpls.
1024         This class has constexpr constructor. You can initialize instances
1025         of this class as global static variables without invoking global
1026         constructors.
1027
1028         We already have similar system, StaticASCIILiteral. But using it
1029         requires some special perl script since we need to calculate
1030         hash value. On the other hand, we can use StaticStringImpl without
1031         any script supports since we implement constexpr hash function.
1032         In the future, we will replace all the use of StaticASCIILiteral
1033         with this StaticStringImpl.
1034
1035         We define empty / null strings as StaticStringImpl. And we make
1036         StringImpl::empty() & StringImpl::null() inline functions.
1037
1038         * wtf/Hasher.h:
1039         (WTF::StringHasher::hashWithTop8BitsMasked):
1040         (WTF::StringHasher::hash):
1041         (WTF::StringHasher::finalize):
1042         (WTF::StringHasher::finalizeAndMaskTop8Bits):
1043         (WTF::StringHasher::computeLiteralHash):
1044         (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
1045         (WTF::StringHasher::avalancheBits3):
1046         (WTF::StringHasher::avalancheBits2):
1047         (WTF::StringHasher::avalancheBits1):
1048         (WTF::StringHasher::avalancheBits0):
1049         (WTF::StringHasher::avalancheBits):
1050         (WTF::StringHasher::avoidZero):
1051         (WTF::StringHasher::processPendingCharacter):
1052         (WTF::StringHasher::calculateWithRemainingLastCharacter1):
1053         (WTF::StringHasher::calculateWithRemainingLastCharacter0):
1054         (WTF::StringHasher::calculateWithRemainingLastCharacter):
1055         (WTF::StringHasher::calculate1):
1056         (WTF::StringHasher::calculate0):
1057         (WTF::StringHasher::calculate):
1058         (WTF::StringHasher::computeLiteralHashImpl):
1059         * wtf/text/StringImpl.cpp:
1060         * wtf/text/StringImpl.h:
1061         (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
1062         (WTF::StringImpl::null):
1063         (WTF::StringImpl::empty):
1064         * wtf/text/StringStatics.cpp:
1065         (WTF::StringImpl::null): Deleted.
1066         (WTF::StringImpl::empty): Deleted.
1067
1068 2016-11-30  Darin Adler  <darin@apple.com>
1069
1070         Roll out StringBuilder changes from the previous patch.
1071         They were a slowdown on a Kraken JSON test.
1072
1073         * wtf/text/StringBuilder.cpp:
1074         * wtf/text/StringBuilder.h:
1075         Roll out changes from below.
1076
1077 2016-11-30  Darin Adler  <darin@apple.com>
1078
1079         Streamline and speed up tokenizer and segmented string classes
1080         https://bugs.webkit.org/show_bug.cgi?id=165003
1081
1082         And do it without re-introducing:
1083
1084         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
1085         https://bugs.webkit.org/show_bug.cgi?id=165142
1086
1087         Reviewed by Sam Weinig.
1088
1089         * wtf/text/StringBuilder.cpp:
1090         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
1091         the header since it is only used inside the class. Also renamed from
1092         getBufferCharacters.
1093         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
1094         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
1095         for the upconvert case in the 16-bit overload of StrinBuilder::append.
1096         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
1097         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
1098         implementation below that now correctly determines the size of what will
1099         be appended by walking thorugh the string twice.
1100         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
1101         quote marks in here. Also made a few coding style tweaks.
1102         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
1103         simpler algorithm that grows the string the same way the append function
1104         does. The old code would use reserveCapacity in a way that was costly when
1105         doing a lot of appends on the same string, and also allocated far too much
1106         memory for normal use cases where characters did not need to be turned
1107         into escape sequences.
1108
1109         * wtf/text/StringBuilder.h:
1110         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
1111         m_is8Bit field wasn't set correctly in one case, optimized the function that
1112         adds substrings for the case where this is the first append and the substring
1113         happens to cover the entire string. Also clarified the assertions and removed
1114         an unneeded check from that substring overload.
1115         (WTF::equal): Reimplemented, using equalCommon. Added an overload of the equal
1116         function just for the case where the arguments are StringBuilder, String.
1117         This is needed because of the peculiar behavior of is8Bit in String, different
1118         from any of our other string classes. I think we should consider changing
1119         String::is8Bit to return true for null strings. We could then remove this
1120         overload and probably remove other checks for null and zero length elsewhere
1121         that are also needed only to avoid calling is8Bit on a null String.
1122
1123 2016-11-29  JF Bastien  <jfbastien@apple.com>
1124
1125         WebAssembly JS API: improve Instance
1126         https://bugs.webkit.org/show_bug.cgi?id=164757
1127
1128         Reviewed by Keith Miller.
1129
1130         * wtf/Expected.h:
1131         (WTF::ExpectedDetail::destroy): silence a warning
1132
1133 2016-11-29  Commit Queue  <commit-queue@webkit.org>
1134
1135         Unreviewed, rolling out r209058 and r209074.
1136         https://bugs.webkit.org/show_bug.cgi?id=165188
1137
1138         These changes caused API test StringBuilderTest.Equal to crash
1139         and/or fail. (Requested by ryanhaddad on #webkit).
1140
1141         Reverted changesets:
1142
1143         "Streamline and speed up tokenizer and segmented string
1144         classes"
1145         https://bugs.webkit.org/show_bug.cgi?id=165003
1146         http://trac.webkit.org/changeset/209058
1147
1148         "REGRESSION (r209058): API test StringBuilderTest.Equal
1149         crashing"
1150         https://bugs.webkit.org/show_bug.cgi?id=165142
1151         http://trac.webkit.org/changeset/209074
1152
1153 2016-11-29  Simon Fraser  <simon.fraser@apple.com>
1154
1155         Allow TracePoint to take arbitrary data
1156         https://bugs.webkit.org/show_bug.cgi?id=165182
1157
1158         Reviewed by Tim Horton.
1159
1160         Allow TracePoint() to take four numeric arguments, for arbitrary data.
1161
1162         #pragma once
1163
1164         * wtf/SystemTracing.h:
1165         (WTF::TracePoint):
1166
1167 2016-11-29  Andy Estes  <aestes@apple.com>
1168
1169         [Cocoa] Enable two clang warnings recommended by Xcode
1170         https://bugs.webkit.org/show_bug.cgi?id=164498
1171
1172         Reviewed by Mark Lam.
1173
1174         * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
1175
1176 2016-11-29  Darin Adler  <darin@apple.com>
1177
1178         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
1179         https://bugs.webkit.org/show_bug.cgi?id=165142
1180
1181         * wtf/text/StringBuilder.h: Added an overload of the equal function just
1182         for the case where the arguments are StringBuilder, String. This is needed
1183         because of the peculiar behavior of is8Bit in String, different from any of
1184         our other string classes. I think we should consider changing String::is8Bit
1185         to return true for null strings. We could then remove this overload and
1186         probably remove other checks for null and zero length elsewhere that are
1187         also needed only to avoid calling is8Bit on a null String.
1188
1189 2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>
1190
1191         Scroll snapping on Mac should use AppKit animations
1192         https://bugs.webkit.org/show_bug.cgi?id=147261
1193         <rdar://problem/29395293>
1194
1195         Reviewed by Brent Fulgham.
1196
1197         Introduce HAVE(NSSCROLLING_FILTERS), which is on for macOS El Capitan and later.
1198
1199         * wtf/Platform.h:
1200
1201 2016-11-28  Darin Adler  <darin@apple.com>
1202
1203         Streamline and speed up tokenizer and segmented string classes
1204         https://bugs.webkit.org/show_bug.cgi?id=165003
1205
1206         Reviewed by Sam Weinig.
1207
1208         * wtf/text/StringBuilder.cpp:
1209         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
1210         the header since it is only used inside the class. Also renamed from
1211         getBufferCharacters.
1212         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
1213         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
1214         for the upconvert case in the 16-bit overload of StrinBuilder::append.
1215         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
1216         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
1217         implementation below that now correctly determines the size of what will
1218         be appended by walking thorugh the string twice.
1219         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
1220         quote marks in here. Also made a few coding style tweaks.
1221         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
1222         simpler algorithm that grows the string the same way the append function
1223         does. The old code would use reserveCapacity in a way that was costly when
1224         doing a lot of appends on the same string, and also allocated far too much
1225         memory for normal use cases where characters did not need to be turned
1226         into escape sequences.
1227
1228         * wtf/text/StringBuilder.h:
1229         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
1230         m_is8Bit field wasn't set correctly in one case, optimized the function that
1231         adds substrings for the case where this is the first append and the substring
1232         happens to cover the entire string. Also clarified the assertions and removed
1233         an unneeded check from that substring overload.
1234         (WTF::equal): Reimplemented, using equalCommon.
1235
1236 2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>
1237
1238         [WTF] Import std::optional reference implementation as WTF::Optional
1239         https://bugs.webkit.org/show_bug.cgi?id=164199
1240
1241         Reviewed by Saam Barati and Sam Weinig.
1242
1243         Import std::optional reference implementation offered by the C++17
1244         original proposal paper. It has the same interface and functionality
1245         to the C++17's one. Previous WTF::Optional lacks several functionalities.
1246         The largest one is the correct constexpr constructors. This fact prevents
1247         us from using Optional<literal type> in constexpr context in WebKit.
1248
1249         In WebKit, we do not allow global constructors. So only the constexpr
1250         constructor is the way to use WTF::Optional in the static const
1251         global variables. WTF::Optional is used in DOMJIT::Effect and
1252         we would like to emit static const global variables that includes
1253         this DOMJIT::Effect. That is the main motivation of this work.
1254         This functionality allows the IDL code generator to emit DOMJIT
1255         signatures as static const global variables.
1256
1257         We import the reference implementation one instead of LLVM libc++'s one.
1258         This is because LLVM libc++'s one depends on many macro and type_traits
1259         offered by libc++ implementation. And adopting it to WebKit requires
1260         large modification compared to this reference implementation one.
1261         Furthermore, it is difficult to compile libc++'s optional in old GCC and VC++.
1262         It also requires some more modifications. To keep the thing simple,
1263         we import the reference implementation one now. Once C++17 is released
1264         and we update the compiler baseline, we can smoothly switch to the standard
1265         library's std::optional.
1266
1267         We also add support for the environment that does not use exceptions to this
1268         reference implementation.
1269
1270         And we also add valueOrCompute helper function. That keeps the extended
1271         functionality that previous WTF::Optional has.
1272
1273         * wtf/CrossThreadQueue.h:
1274         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
1275         * wtf/Expected.h:
1276         (WTF::makeExpected):
1277         * wtf/Forward.h:
1278         * wtf/HashTraits.h:
1279         (WTF::HashTraits<Ref<P>>::take):
1280         * wtf/MainThread.cpp:
1281         (WTF::initializeGCThreads):
1282         (WTF::mayBeGCThread):
1283         * wtf/MainThread.h:
1284         * wtf/Optional.h:
1285         (std::detail_::is_assignable::has_assign):
1286         (std::detail_::has_overloaded_addressof::has_overload):
1287         (std::detail_::static_addressof):
1288         (std::detail_::convert):
1289         (std::nullopt_t::nullopt_t):
1290         (std::bad_optional_access::bad_optional_access):
1291         (std::optional_base::optional_base):
1292         (std::optional_base::~optional_base):
1293         (std::constexpr_optional_base::constexpr_optional_base):
1294         (std::optional::dataptr):
1295         (std::optional::contained_val):
1296         (std::optional::__NOEXCEPT_):
1297         (std::optional::optional):
1298         (std::optional::operator=):
1299         (std::optional::emplace):
1300         (std::optional::operator ->):
1301         (std::optional::operator *):
1302         (std::optional::value):
1303         (std::optional::value_or):
1304         (std::operator==):
1305         (std::operator!=):
1306         (std::operator<):
1307         (std::operator>):
1308         (std::operator<=):
1309         (std::operator>=):
1310         (std::__NOEXCEPT_):
1311         (std::make_optional):
1312         (std::hash<std::optional<T>>::operator()):
1313         (WTF::NulloptTag::NulloptTag): Deleted.
1314         (WTF::Optional::Optional): Deleted.
1315         (WTF::Optional::~Optional): Deleted.
1316         (WTF::Optional::operator=): Deleted.
1317         (WTF::Optional::operator bool): Deleted.
1318         (WTF::Optional::operator->): Deleted.
1319         (WTF::Optional::operator*): Deleted.
1320         (WTF::Optional::value): Deleted.
1321         (WTF::Optional::valueOr): Deleted.
1322         (WTF::Optional::valueOrCompute): Deleted.
1323         (WTF::Optional::asPtr): Deleted.
1324         (WTF::Optional::destroy): Deleted.
1325         (WTF::operator==): Deleted.
1326         (WTF::operator!=): Deleted.
1327         (WTF::makeOptional): Deleted.
1328         (WTF::printInternal): Deleted.
1329         * wtf/text/StringView.cpp:
1330         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
1331         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
1332         * wtf/text/StringView.h:
1333
1334 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
1335
1336         Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
1337         https://bugs.webkit.org/show_bug.cgi?id=164992
1338
1339         Reviewed by Darin Adler.
1340
1341         Add Seconds::zero() as a nicer way to express Seconds(0). 
1342
1343         * wtf/Seconds.h:
1344         (WTF::Seconds::zero):
1345
1346 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
1347
1348         Add literals for various time units
1349         https://bugs.webkit.org/show_bug.cgi?id=165074
1350
1351         Reviewed by Filip Pizlo.
1352         
1353         Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
1354         and unsigned long long types (those allowed for custom literals).
1355         
1356         Add minutes-related functions (there are one or two use cases in WebCore).
1357
1358         * wtf/Seconds.h:
1359         (WTF::Seconds::minutes):
1360         (WTF::Seconds::fromMinutes):
1361         (WTF::Seconds::fromMilliseconds):
1362         (WTF::Seconds::fromMicroseconds):
1363         (WTF::Seconds::fromNanoseconds):
1364         (WTF::operator _min):
1365         (WTF::operator _s):
1366         (WTF::operator _ms):
1367         (WTF::operator _us):
1368         (WTF::operator _ns):
1369
1370 2016-11-22  Darin Adler  <darin@apple.com>
1371
1372         One more tiny bit of follow-up.
1373
1374         * wtf/text/TextBreakIterator.cpp:
1375         (WTF::numCharactersInGraphemeClusters): Removed unneeded always-true check.
1376
1377 2016-11-22  Darin Adler  <darin@apple.com>
1378
1379         Quick follow-up to previous patch.
1380
1381         * wtf/text/TextBreakIterator.cpp:
1382         (WTF::numCharactersInGraphemeClusters): Removed incorrect assertion.
1383
1384 2016-11-22  Darin Adler  <darin@apple.com>
1385
1386         Make normal case fast in the input element limitString function
1387         https://bugs.webkit.org/show_bug.cgi?id=165023
1388
1389         Reviewed by Dan Bernstein.
1390
1391         * wtf/text/LineBreakIteratorPoolICU.h: Removed many unneeded includes.
1392         Simplified the class a bit, removing some extra definitions.
1393         (WTF::LineBreakIteratorPool::sharedPool): Use NeverDestroyed instead of new.
1394         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword): Reimplemented in
1395         a simpler way without using StringBuilder. Also updated for change to
1396         LineBreakIteratorMode.
1397         (WTF::LineBreakIteratorPool::put): Use uncheckedAppend since the code is
1398         careful to only use the inline capacity in the vector.
1399
1400         * wtf/text/TextBreakIterator.cpp: Moved some includes in here from the header.
1401         (WTF::mapLineIteratorModeToRules): Updated for change to LineBreakIteratorMode.
1402         (WTF::openLineBreakIterator): Ditto.
1403         (WTF::numGraphemeClusters): Added a fast path for all 8-bit strings; don't
1404         use ICU for that case, even if there is a CR character in it.
1405         (WTF::numCharactersInGraphemeClusters): Added a fast path for strings that are
1406         short enough to entirely fit without even looking at the characters; that's a
1407         case we likely hit all the time. Also added a fast path for all 8-bit strings.
1408
1409         * wtf/text/TextBreakIterator.h: Changed LineBreakIteratorMode to be an enum
1410         class and not repeat UAX14 in the names of the modes. Initialize data members
1411         in the class definition rather than the constructors.
1412
1413 2016-11-21  Mark Lam  <mark.lam@apple.com>
1414
1415         Hasher::addCharacters() should be able to handle zero length strings.
1416         https://bugs.webkit.org/show_bug.cgi?id=165024
1417
1418         Reviewed by Yusuke Suzuki.
1419
1420         Currently, it will fail to handle zero length strings if it has a pending
1421         character.  The fix is simply to return early if length is 0. 
1422
1423         * wtf/Hasher.h:
1424         (WTF::StringHasher::addCharacters):
1425
1426 2016-11-18  Jeremy Jones  <jeremyj@apple.com>
1427
1428         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
1429         https://bugs.webkit.org/show_bug.cgi?id=163801
1430
1431         Reviewed by Simon Fraser.
1432
1433         * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.
1434
1435 2016-11-17  Saam Barati  <sbarati@apple.com>
1436
1437         Remove async/await compile time flag and enable tests
1438         https://bugs.webkit.org/show_bug.cgi?id=164828
1439         <rdar://problem/28639334>
1440
1441         Reviewed by Yusuke Suzuki.
1442
1443         * wtf/FeatureDefines.h:
1444
1445 2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>
1446
1447         [JSC] WTF::TemporaryChange with WTF::SetForScope
1448         https://bugs.webkit.org/show_bug.cgi?id=164761
1449
1450         Reviewed by Saam Barati.
1451
1452         JavaScriptCore's bytecompiler/SetForScope.h is completely the same
1453         to WTF::TemporaryChange. SetForScope sounds better name since it
1454         says that this object works as Scope.
1455
1456         We rename WTF::TemporaryChange to WTF::SetForScope. And replace
1457         all the use to this WTF::SetForScope.
1458
1459         * WTF.xcodeproj/project.pbxproj:
1460         * wtf/SetForScope.h: Renamed from Source/WTF/wtf/TemporaryChange.h.
1461         (WTF::SetForScope::SetForScope):
1462         (WTF::SetForScope::~SetForScope):
1463
1464 2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>
1465
1466         [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
1467         https://bugs.webkit.org/show_bug.cgi?id=164827
1468
1469         Reviewed by Ryosuke Niwa.
1470
1471         * wtf/FeatureDefines.h:
1472
1473 2016-11-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>
1474
1475         [JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9
1476         https://bugs.webkit.org/show_bug.cgi?id=164588
1477
1478         Reviewed by Mark Lam.
1479
1480         Provide assembly for executing the cpuid instruction when compiling
1481         in PIC mode with the GCC 4.9 EBX on 32-bit x86.
1482
1483         Note that the values returned by cpuid here are not used. The purpose
1484         of calling this instruction is to force the CPU to complete and sync
1485         any buffered modifications on registers, memory or flags before
1486         fetching and executing the next instruction.
1487
1488         * wtf/Atomics.h:
1489         (WTF::x86_cpuid):
1490
1491 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
1492
1493         Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
1494         https://bugs.webkit.org/show_bug.cgi?id=164791
1495
1496         Reviewed by Geoffrey Garen.
1497         
1498         Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental
1499         JSC runtime components like JSValue. So, the thing that guards it should be a "feature"
1500         called CONCURRENT_JS not CONCURRENT_JIT.
1501
1502         * wtf/Platform.h:
1503
1504 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
1505
1506         The concurrent GC should have a timeslicing controller
1507         https://bugs.webkit.org/show_bug.cgi?id=164783
1508
1509         Reviewed by Geoffrey Garen.
1510
1511         * wtf/LockAlgorithm.h: Added some comments.
1512         * wtf/Seconds.h: Added support for modulo. It's necessary for timeslicing.
1513         (WTF::Seconds::operator%):
1514         (WTF::Seconds::operator%=):
1515
1516 2016-11-11  Filip Pizlo  <fpizlo@apple.com>
1517
1518         The GC should be optionally concurrent and disabled by default
1519         https://bugs.webkit.org/show_bug.cgi?id=164454
1520
1521         Reviewed by Geoffrey Garen.
1522         
1523         The reason why I went to such great pains to make WTF::Lock fit in two bits is that I
1524         knew that I would eventually need to stuff one into some miscellaneous bits of the
1525         JSCell header. That time has come, because the concurrent GC has numerous race
1526         conditions in visitChildren that can be trivially fixed if each object just has an
1527         internal lock. Some cell types might use it to simply protect their entire visitChildren
1528         function and anything that mutates the fields it touches, while other cell types might
1529         use it as a "lock of last resort" to handle corner cases of an otherwise wait-free or
1530         lock-free algorithm. Right now, it's used to protect certain transformations involving
1531         indexing storage.
1532         
1533         To make this happen, I factored the WTF::Lock algorithm into a LockAlgorithm struct that
1534         is templatized on lock type (uint8_t for WTF::Lock), the isHeldBit value (1 for
1535         WTF::Lock), and the hasParkedBit value (2 for WTF::Lock). This could have been done as
1536         a templatized Lock class that basically contains Atomic<LockType>. You could then make
1537         any field into a lock by bitwise_casting it to TemplateLock<field type, bit1, bit2>. But
1538         this felt too dirty, so instead, LockAlgorithm has static methods that take
1539         Atomic<LockType>& as their first argument. I think that this makes it more natural to
1540         project a LockAlgorithm onto an existing Atomic<> field. Sadly, some places have to cast
1541         their non-Atomic<> field to Atomic<> in order for this to work. Like so many other things
1542         we do, this just shows that the C++ style of labeling fields that are subject to atomic
1543         ops as atomic is counterproductive. Maybe some day I'll change LockAlgorithm to use our
1544         other Atomics API, which does not require Atomic<>.
1545         
1546         WTF::Lock now uses LockAlgorithm. The slow paths are still outlined. I don't feel too
1547         bad about the LockAlgorithm.h header being included in so many places because we change
1548         that algorithm so infrequently.
1549         
1550         Also, I added a hasElapsed(time) function. This function makes it so much more natural
1551         to write timeslicing code, which the concurrent GC has to do a lot of.
1552
1553         * WTF.xcodeproj/project.pbxproj:
1554         * wtf/CMakeLists.txt:
1555         * wtf/ListDump.h:
1556         * wtf/Lock.cpp:
1557         (WTF::LockBase::lockSlow):
1558         (WTF::LockBase::unlockSlow):
1559         (WTF::LockBase::unlockFairlySlow):
1560         (WTF::LockBase::unlockSlowImpl): Deleted.
1561         * wtf/Lock.h:
1562         (WTF::LockBase::lock):
1563         (WTF::LockBase::tryLock):
1564         (WTF::LockBase::unlock):
1565         (WTF::LockBase::unlockFairly):
1566         (WTF::LockBase::isHeld):
1567         (): Deleted.
1568         * wtf/LockAlgorithm.h: Added.
1569         (WTF::LockAlgorithm::lockFastAssumingZero):
1570         (WTF::LockAlgorithm::lockFast):
1571         (WTF::LockAlgorithm::lock):
1572         (WTF::LockAlgorithm::tryLock):
1573         (WTF::LockAlgorithm::unlockFastAssumingZero):
1574         (WTF::LockAlgorithm::unlockFast):
1575         (WTF::LockAlgorithm::unlock):
1576         (WTF::LockAlgorithm::unlockFairly):
1577         (WTF::LockAlgorithm::isLocked):
1578         (WTF::LockAlgorithm::lockSlow):
1579         (WTF::LockAlgorithm::unlockSlow):
1580         * wtf/TimeWithDynamicClockType.cpp:
1581         (WTF::hasElapsed):
1582         * wtf/TimeWithDynamicClockType.h:
1583
1584 2016-11-14  JF Bastien  <jfbastien@apple.com>
1585
1586         Expected: add missing `inline`
1587         https://bugs.webkit.org/show_bug.cgi?id=164735
1588
1589         Reviewed by Yusuke Suzuki.
1590
1591         Free functions and full template specializations need to be
1592         `inline`, or in a .cpp file, otherwise each .o creates a duplicate
1593         symbol which makes the linker very sad.
1594
1595         * wtf/Expected.h:
1596         (WTF::ExpectedDetail::Throw):
1597         (WTF::makeExpected):
1598
1599 2016-11-14  Mark Lam  <mark.lam@apple.com>
1600
1601         Build fix after r208690.
1602         https://bugs.webkit.org/show_bug.cgi?id=164681
1603
1604         Not reviewed.
1605
1606         * wtf/FastMalloc.h:
1607
1608 2016-11-13  Mark Lam  <mark.lam@apple.com>
1609
1610         Add debugging facility to limit the max single allocation size.
1611         https://bugs.webkit.org/show_bug.cgi?id=164681
1612
1613         Reviewed by Keith Miller.
1614
1615         This is useful for simulating memory allocation failures on resource constraint
1616         devices for testing purposes.
1617
1618         This facility is only conditionally compiled in on debug builds.  It does not
1619         have any burden on release builds at all.  When in use, the max single allocation
1620         size limit applies to individual allocations.  For malloc (and similar), the
1621         allocation will crash in FastMalloc if the requested size exceeds the set max
1622         single allocation size.  For tryMalloc (and similar), the allocation returns
1623         nullptr if the requested size exceeds the set max single allocation size.  The
1624         max single allocation size is set to std::numeric_limit<size_t>::max() by default
1625         (i.e. when not set and no limit is in effect).
1626
1627         Also fixed non-bmalloc versions of fastAlignedMalloc() to crash when allocation
1628         fails.
1629
1630         * wtf/FastMalloc.cpp:
1631         (WTF::fastSetMaxSingleAllocationSize):
1632         (WTF::fastAlignedMalloc):
1633         (WTF::tryFastAlignedMalloc):
1634         (WTF::tryFastMalloc):
1635         (WTF::fastMalloc):
1636         (WTF::tryFastCalloc):
1637         (WTF::fastCalloc):
1638         (WTF::fastRealloc):
1639         * wtf/FastMalloc.h:
1640
1641 2016-11-13  JF Bastien  <jfbastien@apple.com>
1642
1643         Implement WTF::Expected
1644         https://bugs.webkit.org/show_bug.cgi?id=164526
1645
1646         Reviewed by Yusuke Suzuki.
1647
1648         std::expected isn't in C++17, and may be in C++20. It's a nice
1649         complement to std::any / std::optional because it's a type-tagged
1650         union which has a single expected result but could also contain an
1651         error.
1652
1653         This would be useful in the WebAssembly parser, for example.
1654
1655         Using this implementation will allow us to provide feedback to the
1656         standards committee and guide std::expected's design before it
1657         gets standardized. I've already sent a bunch of feedback to the
1658         author based on my experience implementing this.
1659
1660         This could supplement WTF::Either and WTF::ExceptionOr.
1661
1662         * WTF.xcodeproj/project.pbxproj:
1663         * wtf/Compiler.h: Add RELAXED_CONSTEXPR
1664         * wtf/Expected.h: Added.
1665         (WTF::UnexpectedType::UnexpectedType):
1666         (WTF::UnexpectedType::value):
1667         (WTF::operator==):
1668         (WTF::operator!=):
1669         (WTF::operator<):
1670         (WTF::operator>):
1671         (WTF::operator<=):
1672         (WTF::operator>=):
1673         (WTF::makeUnexpected):
1674         (WTF::ExpectedDetail::Throw):
1675         (WTF::ExpectedDetail::ConstexprBase::ConstexprBase):
1676         (WTF::ExpectedDetail::Base::Base):
1677         (WTF::ExpectedDetail::Base::~Base):
1678         (WTF::Expected::Expected):
1679         (WTF::Expected::operator=):
1680         (WTF::Expected::swap):
1681         (WTF::Expected::operator->):
1682         (WTF::Expected::operator*):
1683         (WTF::Expected::operator bool):
1684         (WTF::Expected::hasValue):
1685         (WTF::Expected::value):
1686         (WTF::Expected::error):
1687         (WTF::Expected::getUnexpected):
1688         (WTF::Expected::valueOr):
1689         (WTF::swap):
1690         (WTF::makeExpected):
1691         (WTF::makeExpectedFromError):
1692
1693 2016-11-11  Alex Christensen  <achristensen@webkit.org>
1694
1695         Allow mutable lambdas in HashMap::ensure
1696         https://bugs.webkit.org/show_bug.cgi?id=164642
1697
1698         Reviewed by Sam Weinig.
1699
1700         * wtf/HashMap.h:
1701         (WTF::HashMapEnsureTranslator::translate):
1702         (WTF::X>::removeIf):
1703
1704 2016-11-11  Beth Dakin  <bdakin@apple.com>
1705
1706         Get touch bar code building for open source builds
1707         https://bugs.webkit.org/show_bug.cgi?id=164610
1708
1709         Reviewed by Wenson Hsieh.
1710
1711         * wtf/Platform.h:
1712
1713 2016-11-10  JF Bastien  <jfbastien@apple.com>
1714
1715         ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
1716         https://bugs.webkit.org/show_bug.cgi?id=164597
1717
1718         Reviewed by Keith Miller.
1719
1720         Decoding at end of file should fail, not assert.
1721
1722         * wtf/LEBDecoder.h:
1723         (WTF::LEBDecoder::decodeUInt):
1724         (WTF::LEBDecoder::decodeInt32):
1725
1726 2016-11-10  Alex Christensen  <achristensen@webkit.org>
1727
1728         Remove unused CFURLCACHE code
1729         https://bugs.webkit.org/show_bug.cgi?id=164551
1730
1731         Reviewed by Antti Koivisto.
1732
1733         * wtf/Platform.h:
1734
1735 2016-11-09  Alex Christensen  <achristensen@webkit.org>
1736
1737         Allow RefPtrs of const ThreadSafeRefCounted types
1738         https://bugs.webkit.org/show_bug.cgi?id=164548
1739
1740         Reviewed by Tim Horton.
1741
1742         * wtf/ThreadSafeRefCounted.h:
1743         Make m_refCount mutable like we did with RefCounted in r203257.
1744
1745 2016-11-09  Chris Dumez  <cdumez@apple.com>
1746
1747         [Mac] Stop using deprecated AppKit enumeration values
1748         https://bugs.webkit.org/show_bug.cgi?id=164494
1749
1750         Reviewed by Darin Adler.
1751
1752         Stop using deprecated AppKit enumeration values.
1753
1754         * wtf/mac/AppKitCompatibilityDeclarations.h:
1755
1756 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
1757
1758         Fixed compilation of LLInt with MinGW
1759         https://bugs.webkit.org/show_bug.cgi?id=164449
1760
1761         Reviewed by Michael Catanzaro.
1762
1763         MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
1764         other platforms.
1765
1766         * wtf/InlineASM.h: Define LOCAL_LABEL_STRING as .L#name for MinGW.
1767
1768 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
1769
1770         [MinGW] Fixed C99/C++11 format attributes in printf-like functions
1771         https://bugs.webkit.org/show_bug.cgi?id=164448
1772
1773         Reviewed by Michael Catanzaro.
1774
1775         By default MinGW uses printf-like function provided in msvcrt.dll,
1776         however they miss support for C99/C++11 format attributes. Use MinGW
1777         implementations instead.
1778
1779         * wtf/Assertions.h: Use gnu_printf format in WTF_ATTRIBUTE_PRINTF
1780
1781 2016-11-05  Yusuke Suzuki  <utatane.tea@gmail.com>
1782
1783         [JSCOnly] RunLoopGeneric should adopt MonotonicTime / WallTime change
1784         https://bugs.webkit.org/show_bug.cgi?id=164447
1785
1786         Reviewed by Csaba Osztrogonác.
1787
1788         Build fix for JSCOnly.
1789
1790         * wtf/generic/RunLoopGeneric.cpp:
1791         (WTF::RunLoop::TimerBase::ScheduledTask::create):
1792         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
1793         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
1794         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
1795         (WTF::RunLoop::populateTasks):
1796         (WTF::RunLoop::dispatchAfter):
1797         (WTF::RunLoop::TimerBase::start):
1798
1799 2016-11-04  Filip Pizlo  <fpizlo@apple.com>
1800
1801         WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
1802         https://bugs.webkit.org/show_bug.cgi?id=152045
1803
1804         Reviewed by Andy Estes.
1805         
1806         We used to use 'double' for all time measurements. Sometimes it was milliseconds,
1807         sometimes it was seconds. Sometimes we measured a span of time, sometimes we spoke of time
1808         since some epoch. When we spoke of time since epoch, we either used a monotonic clock or
1809         a wall clock. The type - always 'double' - never told us what kind of time we had, even
1810         though there were roughly six of them (sec interval, ms interval, sec since epoch on wall,
1811         ms since epoch on wall, sec since epoch monotonic, ms since epoch monotonic).
1812         
1813         At some point, we thought that it would be a good idea to replace these doubles with
1814         std::chrono. But since replacing some things with std::chrono, we found it to be terribly
1815         inconvenient:
1816         
1817         - Outrageous API. I never want to say std::chrono::milliseconds(blah). I never want to say
1818           std::chrono::steady_clock::timepoint. The syntax for duration_cast is ugly, and ideally
1819           duration_cast would not even be a thing.
1820         
1821         - No overflow protection. std::chrono uses integers by default and using anything else is
1822           clumsy. But the integer math is done without regard for the rough edges of integer math,
1823           so any cast between std::chrono types risks overflow. Any comparison risks overflow
1824           because it may do conversions silently. We have even found bugs where some C++
1825           implementations had more overflows than others, which ends up being a special kind of
1826           hell. In many cases, the overflow also has nasal demons.
1827         
1828         It's an error to represent time using integers. It would have been excusable back when
1829         floating point math was not guaranteed to be supported on all platforms, but that would
1830         have been a long time ago. Time is a continuous, infinite concept and it's a perfect fit
1831         for floating point:
1832         
1833         - Floating point preserves precision under multiplication in all but extreme cases, so
1834           using floating point for time means that unit conversions are almost completely
1835           lossless. This means that we don't have to think very hard about what units to use. In
1836           this patch, we use seconds almost everywhere. We only convert at boundaries, like an API
1837           boundary that wants something other than seconds.
1838         
1839         - Floating point makes it easy to reason about infinity, which is something that time code
1840           wants to do a lot. Example: when would you like to timeout? Infinity please! This is the
1841           most elegant way of having an API support both a timeout variant and a no-timeout
1842           variant.
1843
1844         - Floating point does well-understood things when math goes wrong, and these things are
1845           pretty well optimized to match what a mathematician would do when computing with real
1846           numbers represented using scientific notation with a finite number of significant
1847           digits. This means that time math under floating point looks like normal math. On the
1848           other hand, std::chrono time math looks like garbage because you have to always check
1849           for multiple possible UB corners whenever you touch large integers. Integers that
1850           represent time are very likely to be large and you don't have to do much to overflow
1851           them. At this time, based on the number of bugs we have already seen due to chrono
1852           overflows, I am not certain that we even understand what are all of the corner cases
1853           that we should even check for.
1854         
1855         This patch introduces a new set of timekeeping classes that are all based on double, and
1856         all internally use seconds. These classes support algebraic typing. The classes are:
1857         
1858         - Seconds: this is for measuring a duration.
1859         - WallTime: time since epoch according to a wall clock (aka real time clock).
1860         - MonotonicTime: time since epoch according to a monotonic clock.
1861         - ClockType: enum that says either Wall or Monotonic.
1862         - TimeWithDynamicClockType: a tuple of double and ClockType, which represents either a
1863           wall time or a monotonic time.
1864         
1865         All of these classes behave like C++ values and are cheap to copy around since they are
1866         very nearly POD. This supports comprehensive conversions between the various time types.
1867         Most of this is by way of algebra. Here are just some of the rules we recognize:
1868         
1869         WallTime = WallTime + Seconds
1870         Seconds = WallTime - WallTime
1871         MonotonicTime = MonotonicTime + Seconds
1872         etc...
1873         
1874         We support negative, infinite, and NaN times because math.
1875         
1876         We support conversions between MonotonicTime and WallTime, like:
1877         
1878         WallTime wt = mt.approximateWallTime()
1879         
1880         This is called this "approximate" because the only way to do it is to get the current time
1881         on both clocks and convert relative to that.
1882         
1883         Many of our APIs would be happy using whatever notion of time the user wanted to use. For
1884         those APIs, which includes Condition and ParkingLot, we have TimeWithDynamicClockType. You
1885         can automatically convert WallTime or MonotonicTime to TimeWithDynamicClockType. This
1886         means that if you use a WallTime with Condition::waitUntil, then Condition's internal
1887         logic for when it should wake up makes its decision based on the current WallTime - but if
1888         you use MonotonicTime then waitUntil will make its decision based on current
1889         MonotonicTime. This is a greater level of flexibility than chrono allowed, since chrono
1890         did not have the concept of a dynamic clock type.
1891         
1892         This patch does not include conversions between std::chrono and these new time classes,
1893         because past experience shows that we're quite bad at getting conversions between
1894         std::chrono and anything else right. Also, I didn't need such conversion code because this
1895         patch only converts code that transitively touches ParkingLot and Condition. It was easy
1896         to get all of that code onto the new time classes.
1897
1898         * WTF.xcodeproj/project.pbxproj:
1899         * wtf/AutomaticThread.cpp:
1900         (WTF::AutomaticThread::start):
1901         * wtf/CMakeLists.txt:
1902         * wtf/ClockType.cpp: Added.
1903         (WTF::printInternal):
1904         * wtf/ClockType.h: Added.
1905         * wtf/Condition.h:
1906         (WTF::ConditionBase::waitUntil):
1907         (WTF::ConditionBase::waitFor):
1908         (WTF::ConditionBase::wait):
1909         (WTF::ConditionBase::waitUntilWallClockSeconds): Deleted.
1910         (WTF::ConditionBase::waitUntilMonotonicClockSeconds): Deleted.
1911         (WTF::ConditionBase::waitForSeconds): Deleted.
1912         (WTF::ConditionBase::waitForSecondsImpl): Deleted.
1913         (WTF::ConditionBase::waitForImpl): Deleted.
1914         (WTF::ConditionBase::absoluteFromRelative): Deleted.
1915         * wtf/CrossThreadQueue.h:
1916         (WTF::CrossThreadQueue<DataType>::waitForMessage):
1917         * wtf/CurrentTime.cpp:
1918         (WTF::sleep):
1919         * wtf/MessageQueue.h:
1920         (WTF::MessageQueue::infiniteTime): Deleted.
1921         * wtf/MonotonicTime.cpp: Added.
1922         (WTF::MonotonicTime::now):
1923         (WTF::MonotonicTime::approximateWallTime):
1924         (WTF::MonotonicTime::dump):
1925         (WTF::MonotonicTime::sleep):
1926         * wtf/MonotonicTime.h: Added.
1927         (WTF::MonotonicTime::MonotonicTime):
1928         (WTF::MonotonicTime::fromRawDouble):
1929         (WTF::MonotonicTime::infinity):
1930         (WTF::MonotonicTime::secondsSinceEpoch):
1931         (WTF::MonotonicTime::approximateMonotonicTime):
1932         (WTF::MonotonicTime::operator bool):
1933         (WTF::MonotonicTime::operator+):
1934         (WTF::MonotonicTime::operator-):
1935         (WTF::MonotonicTime::operator+=):
1936         (WTF::MonotonicTime::operator-=):
1937         (WTF::MonotonicTime::operator==):
1938         (WTF::MonotonicTime::operator!=):
1939         (WTF::MonotonicTime::operator<):
1940         (WTF::MonotonicTime::operator>):
1941         (WTF::MonotonicTime::operator<=):
1942         (WTF::MonotonicTime::operator>=):
1943         * wtf/ParkingLot.cpp:
1944         (WTF::ParkingLot::parkConditionallyImpl):
1945         (WTF::ParkingLot::unparkOne):
1946         (WTF::ParkingLot::unparkOneImpl):
1947         (WTF::ParkingLot::unparkCount):
1948         * wtf/ParkingLot.h:
1949         (WTF::ParkingLot::parkConditionally):
1950         (WTF::ParkingLot::compareAndPark):
1951         * wtf/Seconds.cpp: Added.
1952         (WTF::Seconds::operator+):
1953         (WTF::Seconds::operator-):
1954         (WTF::Seconds::dump):
1955         (WTF::Seconds::sleep):
1956         * wtf/Seconds.h: Added.
1957         (WTF::Seconds::Seconds):
1958         (WTF::Seconds::value):
1959         (WTF::Seconds::seconds):
1960         (WTF::Seconds::milliseconds):
1961         (WTF::Seconds::microseconds):
1962         (WTF::Seconds::nanoseconds):
1963         (WTF::Seconds::fromMilliseconds):
1964         (WTF::Seconds::fromMicroseconds):
1965         (WTF::Seconds::fromNanoseconds):
1966         (WTF::Seconds::infinity):
1967         (WTF::Seconds::operator bool):
1968         (WTF::Seconds::operator+):
1969         (WTF::Seconds::operator-):
1970         (WTF::Seconds::operator*):
1971         (WTF::Seconds::operator/):
1972         (WTF::Seconds::operator+=):
1973         (WTF::Seconds::operator-=):
1974         (WTF::Seconds::operator*=):
1975         (WTF::Seconds::operator/=):
1976         (WTF::Seconds::operator==):
1977         (WTF::Seconds::operator!=):
1978         (WTF::Seconds::operator<):
1979         (WTF::Seconds::operator>):
1980         (WTF::Seconds::operator<=):
1981         (WTF::Seconds::operator>=):
1982         * wtf/TimeWithDynamicClockType.cpp: Added.
1983         (WTF::TimeWithDynamicClockType::now):
1984         (WTF::TimeWithDynamicClockType::nowWithSameClock):
1985         (WTF::TimeWithDynamicClockType::wallTime):
1986         (WTF::TimeWithDynamicClockType::monotonicTime):
1987         (WTF::TimeWithDynamicClockType::approximateWallTime):
1988         (WTF::TimeWithDynamicClockType::approximateMonotonicTime):
1989         (WTF::TimeWithDynamicClockType::operator-):
1990         (WTF::TimeWithDynamicClockType::operator<):
1991         (WTF::TimeWithDynamicClockType::operator>):
1992         (WTF::TimeWithDynamicClockType::operator<=):
1993         (WTF::TimeWithDynamicClockType::operator>=):
1994         (WTF::TimeWithDynamicClockType::dump):
1995         (WTF::TimeWithDynamicClockType::sleep):
1996         * wtf/TimeWithDynamicClockType.h: Added.
1997         (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType):
1998         (WTF::TimeWithDynamicClockType::fromRawDouble):
1999         (WTF::TimeWithDynamicClockType::secondsSinceEpoch):
2000         (WTF::TimeWithDynamicClockType::clockType):
2001         (WTF::TimeWithDynamicClockType::withSameClockAndRawDouble):
2002         (WTF::TimeWithDynamicClockType::operator bool):
2003         (WTF::TimeWithDynamicClockType::operator+):
2004         (WTF::TimeWithDynamicClockType::operator-):
2005         (WTF::TimeWithDynamicClockType::operator+=):
2006         (WTF::TimeWithDynamicClockType::operator-=):
2007         (WTF::TimeWithDynamicClockType::operator==):
2008         (WTF::TimeWithDynamicClockType::operator!=):
2009         * wtf/WallTime.cpp: Added.
2010         (WTF::WallTime::now):
2011         (WTF::WallTime::approximateMonotonicTime):
2012         (WTF::WallTime::dump):
2013         (WTF::WallTime::sleep):
2014         * wtf/WallTime.h: Added.
2015         (WTF::WallTime::WallTime):
2016         (WTF::WallTime::fromRawDouble):
2017         (WTF::WallTime::infinity):
2018         (WTF::WallTime::secondsSinceEpoch):
2019         (WTF::WallTime::approximateWallTime):
2020         (WTF::WallTime::operator bool):
2021         (WTF::WallTime::operator+):
2022         (WTF::WallTime::operator-):
2023         (WTF::WallTime::operator+=):
2024         (WTF::WallTime::operator-=):
2025         (WTF::WallTime::operator==):
2026         (WTF::WallTime::operator!=):
2027         (WTF::WallTime::operator<):
2028         (WTF::WallTime::operator>):
2029         (WTF::WallTime::operator<=):
2030         (WTF::WallTime::operator>=):
2031         * wtf/threads/BinarySemaphore.cpp:
2032         (WTF::BinarySemaphore::wait):
2033         * wtf/threads/BinarySemaphore.h:
2034
2035 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
2036
2037         DFG plays fast and loose with the shadow values of a Phi
2038         https://bugs.webkit.org/show_bug.cgi?id=164309
2039
2040         Reviewed by Saam Barati.
2041         
2042         Made this API use size rather than maxIndex as its initialization parameter, because that's
2043         less confusing.
2044
2045         * wtf/IndexSparseSet.h:
2046         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
2047
2048 2016-11-03  Commit Queue  <commit-queue@webkit.org>
2049
2050         Unreviewed, rolling out r208364.
2051         https://bugs.webkit.org/show_bug.cgi?id=164402
2052
2053         broke the build (Requested by smfr on #webkit).
2054
2055         Reverted changeset:
2056
2057         "DFG plays fast and loose with the shadow values of a Phi"
2058         https://bugs.webkit.org/show_bug.cgi?id=164309
2059         http://trac.webkit.org/changeset/208364
2060
2061 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
2062
2063         DFG plays fast and loose with the shadow values of a Phi
2064         https://bugs.webkit.org/show_bug.cgi?id=164309
2065
2066         Reviewed by Saam Barati.
2067         
2068         Made this API use size rather than maxIndex as its initialization parameter, because that's
2069         less confusing.
2070
2071         * wtf/IndexSparseSet.h:
2072         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
2073
2074 2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>
2075
2076         Fixes to build JSCOnly on macOS
2077         https://bugs.webkit.org/show_bug.cgi?id=164379
2078
2079         Reviewed by Michael Catanzaro.
2080
2081         * wtf/Platform.h: JSCOnly port should not provide any PLATFORM() macro
2082
2083 2016-11-03  Brady Eidson  <beidson@apple.com>
2084
2085         IndexedDB 2.0: Support binary keys.
2086         <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359
2087
2088         Reviewed by Alex Christensen.
2089
2090         * wtf/Hasher.h:
2091         (WTF::StringHasher::hashMemory): Teach hashMemory() to handle buffers with odd lengths.
2092
2093 2016-11-02  Filip Pizlo  <fpizlo@apple.com>
2094
2095         The GC should be in a thread
2096         https://bugs.webkit.org/show_bug.cgi?id=163562
2097
2098         Reviewed by Geoffrey Garen and Andreas Kling.
2099         
2100         This fixes some bugs and adds a few features.
2101
2102         * wtf/Atomics.h: The GC may do work on behalf of the JIT. If it does, the main thread needs to execute a cross-modifying code fence. This is cpuid on x86 and I believe it's isb on ARM. It would have been an isync on PPC and I think that isb is the ARM equivalent.
2103         (WTF::arm_isb):
2104         (WTF::crossModifyingCodeFence):
2105         (WTF::x86_ortop):
2106         (WTF::x86_cpuid):
2107         * wtf/AutomaticThread.cpp: I accidentally had AutomaticThreadCondition inherit from ThreadSafeRefCounted<AutomaticThread> [sic]. This never crashed before because all of our prior AutomaticThreadConditions were immortal.
2108         (WTF::AutomaticThread::AutomaticThread):
2109         (WTF::AutomaticThread::~AutomaticThread):
2110         (WTF::AutomaticThread::start):
2111         * wtf/AutomaticThread.h:
2112         * wtf/MainThread.cpp: Need to allow initializeGCThreads() to be called separately because it's now more than just a debugging thing.
2113         (WTF::initializeGCThreads):
2114
2115 2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>
2116
2117         Clean wrong comment about compositing on the UI process.
2118         https://bugs.webkit.org/show_bug.cgi?id=164339
2119
2120         Reviewed by Michael Catanzaro.
2121
2122         * wtf/Platform.h: The comment about compositing on the UI process
2123         was added on r109302 but was not removed properly when the Qt port
2124         was removed from trunk.
2125         USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.
2126
2127 2016-11-02  Alex Christensen  <achristensen@webkit.org>
2128
2129         Remove Battery Status API from the tree
2130         https://bugs.webkit.org/show_bug.cgi?id=164213
2131
2132         Reviewed by Sam Weinig.
2133
2134         * wtf/FeatureDefines.h:
2135
2136 2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>
2137
2138         [Readable Streams API] Enable creation of ReadableByteStreamController
2139         https://bugs.webkit.org/show_bug.cgi?id=164014
2140
2141         Reviewed by Youenn Fablet.
2142
2143         Added flag for the byte stream part of Readable Streams API.
2144
2145         * wtf/FeatureDefines.h:
2146
2147 2016-11-02  Per Arne Vollan  <pvollan@apple.com>
2148
2149         [Win] Copy build results to AAS 'Program Files' folder.
2150         https://bugs.webkit.org/show_bug.cgi?id=164273
2151
2152         Reviewed by Brent Fulgham.
2153
2154         The preferred location for the binaries is the AAS 'Program Files' folder.
2155
2156         * WTF.vcxproj/WTF.proj:
2157
2158 2016-10-29  Filip Pizlo  <fpizlo@apple.com>
2159
2160         JSC should support SharedArrayBuffer
2161         https://bugs.webkit.org/show_bug.cgi?id=163986
2162
2163         Reviewed by Keith Miller.
2164         
2165         Adds some small things we need for SharedArrayBuffer.
2166         
2167         * wtf/Atomics.h:
2168         (WTF::Atomic::compareExchangeWeakRelaxed):
2169         (WTF::Atomic::exchangeAdd):
2170         (WTF::Atomic::exchangeAnd):
2171         (WTF::Atomic::exchangeOr):
2172         (WTF::Atomic::exchangeSub):
2173         (WTF::Atomic::exchangeXor):
2174         (WTF::atomicLoad):
2175         (WTF::atomicStore):
2176         (WTF::atomicCompareExchangeWeak):
2177         (WTF::atomicCompareExchangeWeakRelaxed):
2178         (WTF::atomicCompareExchangeStrong):
2179         (WTF::atomicExchangeAdd):
2180         (WTF::atomicExchangeAnd):
2181         (WTF::atomicExchangeOr):
2182         (WTF::atomicExchangeSub):
2183         (WTF::atomicExchangeXor):
2184         (WTF::atomicExchange):
2185         (WTF::Atomic::exchangeAndAdd): Deleted.
2186         (WTF::weakCompareAndSwap): Deleted.
2187         We need to be able to do atomics operations on naked pointers. We also need to be able to do
2188         all of the things that std::atomic does. This adds those things and renames
2189         weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
2190         terminology.
2191         
2192         * wtf/Bitmap.h:
2193         (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
2194         (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
2195         * wtf/FastBitVector.h:
2196         (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
2197         * wtf/ParkingLot.cpp:
2198         (WTF::ParkingLot::unparkOne):
2199         (WTF::ParkingLot::unparkCount):
2200         * wtf/ParkingLot.h:
2201         Added unparkCount(), which lets you unpark some bounded number of threads and returns the
2202         number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
2203         just calls unparkCount(ptr, UINT_MAX).
2204
2205 2016-10-30  Frederic Wang  <fwang@igalia.com>
2206
2207         Use HarfBuzz ot-math API to parse the OpenType MATH table
2208         https://bugs.webkit.org/show_bug.cgi?id=162671
2209
2210         Reviewed by Michael Catanzaro.
2211
2212         * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.
2213
2214 2016-10-25  Mark Lam  <mark.lam@apple.com>
2215
2216         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
2217         https://bugs.webkit.org/show_bug.cgi?id=163996
2218         <rdar://problem/28263117>
2219
2220         Reviewed by Geoffrey Garen.
2221
2222         * wtf/Vector.h:
2223         (WTF::minCapacity>::tryConstructAndAppend):
2224         (WTF::minCapacity>::tryConstructAndAppendSlowCase):
2225         - Added try versions of constructAndAppend() so that we can handle the failure
2226           to allocate more gracefully.
2227
2228 2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>
2229
2230         Non-specialized version of deleteObject should not have template argument
2231         https://bugs.webkit.org/show_bug.cgi?id=163943
2232
2233         Reviewed by Anders Carlsson.
2234
2235         Fixes compilation of GDIObject.h with MinGW
2236
2237         * wtf/win/GDIObject.h:
2238         (WTF::deleteObject):
2239
2240 2016-10-24  Per Arne Vollan  <pvollan@apple.com>
2241
2242         [Win] CMake build type is not set.
2243         https://bugs.webkit.org/show_bug.cgi?id=163917
2244
2245         Reviewed by Alex Christensen.
2246
2247         The CMAKE_BUILD_TYPE variable should be set to Debug or Release.
2248
2249         * WTF.vcxproj/WTF.proj:
2250
2251 2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>
2252
2253         [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
2254         https://bugs.webkit.org/show_bug.cgi?id=163657
2255
2256         Reviewed by Saam Barati.
2257
2258         Simplify nonEmptyRangesOverlap.
2259
2260         * wtf/MathExtras.h:
2261         (WTF::nonEmptyRangesOverlap):
2262
2263 2016-10-23  Chris Dumez  <cdumez@apple.com>
2264
2265         Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
2266         <rdar://problem/28902292>
2267
2268         Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.
2269
2270         * wtf/Platform.h:
2271
2272 2016-10-20  Keith Miller  <keith_miller@apple.com>
2273
2274         Add support for WASM calls
2275         https://bugs.webkit.org/show_bug.cgi?id=161727
2276
2277         Reviewed by Filip Pizlo and Michael Saboff.
2278
2279         Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.
2280
2281         * wtf/LEBDecoder.h:
2282         (WTF::LEBDecoder::decodeUInt):
2283         (WTF::LEBDecoder::decodeUInt32):
2284         (WTF::LEBDecoder::decodeUInt64):
2285         (WTF::LEBDecoder::decodeInt32):
2286         (decodeUInt32): Deleted.
2287         (decodeInt32): Deleted.
2288
2289 2016-10-20  Filip Pizlo  <fpizlo@apple.com>
2290
2291         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
2292         https://bugs.webkit.org/show_bug.cgi?id=163738
2293
2294         Reviewed by Geoffrey Garen.
2295         
2296         There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
2297         should know about this.
2298
2299         * wtf/MainThread.cpp:
2300         (WTF::initializeGCThreads):
2301         (WTF::registerGCThread):
2302         (WTF::mayBeGCThread):
2303         * wtf/MainThread.h:
2304
2305 2016-10-19  Sam Weinig  <sam@webkit.org>
2306
2307         Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
2308         https://bugs.webkit.org/show_bug.cgi?id=163713
2309
2310         Reviewed by Dan Bernstein.
2311
2312         - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
2313           way:
2314                 WTF::visit(WTF::makeVisitor(...), variant)
2315
2316         * wtf/Variant.h:
2317         (WTF::switchOn):
2318
2319 2016-10-19  Alex Christensen  <achristensen@webkit.org>
2320
2321         Revert r207151
2322         https://bugs.webkit.org/show_bug.cgi?id=163675
2323
2324         Reviewed by Brent Fulgham.
2325
2326         * wtf/Platform.h:
2327         * wtf/SchedulePair.h:
2328         * wtf/SchedulePairMac.mm:
2329
2330 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
2331
2332         REGRESSION (r207480): 3 Dromaeo tests failing
2333         https://bugs.webkit.org/show_bug.cgi?id=163633
2334
2335         Reviewed by Mark Lam.
2336         
2337         It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
2338         thread will clear our address eventually - but not immediately. This causes a nasty
2339         assertion failure. The tricky thing is that when we detect this, we need to wait until that
2340         unparking thread does the deed. Otherwise, they will still do it at some later time.
2341         
2342         Alternatively, we could use some kind of versioning to detect this - increment the version
2343         when you park, so that unparking threads will know if they are time travelers. That seems
2344         more yucky.
2345         
2346         I don't think it matters too much what we do here, so long as it's simple and correct, since
2347         this requires a race that is rare enough that it didn't happen once in my testing, and I was
2348         pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
2349         rare because it requires the timeout to happen right as someone else is unparking. Since
2350         it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
2351         unparking thread is done.
2352
2353         * wtf/ParkingLot.cpp:
2354         (WTF::ParkingLot::parkConditionallyImpl):
2355         (WTF::ParkingLot::unparkOneImpl):
2356
2357 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
2358
2359         Baseline JIT should use AutomaticThread
2360         https://bugs.webkit.org/show_bug.cgi?id=163686
2361
2362         Reviewed by Geoffrey Garen.
2363         
2364         Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
2365         common condition for your thread and something else, you can do it. This trivially works
2366         if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
2367         dangerous, since you don't know who will wake up).
2368         
2369         The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
2370         optimal way: there are just two threads talking to each other, so it wakes up at most one
2371         thread and that thread is exactly the one you want woken up. Adding wait() means that I did
2372         not have to change that code.
2373
2374         * wtf/AutomaticThread.cpp:
2375         (WTF::AutomaticThreadCondition::wait):
2376         * wtf/AutomaticThread.h:
2377
2378 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
2379
2380         DFG worklist should use AutomaticThread
2381         https://bugs.webkit.org/show_bug.cgi?id=163615
2382
2383         Reviewed by Mark Lam.
2384         
2385         This adds new functionality to AutomaticThread to support DFG::Worklist:
2386         
2387         - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
2388           of a thread's lifetime. This allows Worklist to tie some resources to the life of the
2389           thread, and also means that now those resources will naturally free up when the Worklist is
2390           not in use.
2391         
2392         - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
2393           need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
2394           our threads.
2395
2396         * wtf/AutomaticThread.cpp:
2397         (WTF::AutomaticThreadCondition::notifyOne):
2398         (WTF::AutomaticThread::ThreadScope::ThreadScope):
2399         (WTF::AutomaticThread::ThreadScope::~ThreadScope):
2400         (WTF::AutomaticThread::start):
2401         (WTF::AutomaticThread::threadDidStart):
2402         (WTF::AutomaticThread::threadWillStop):
2403         * wtf/AutomaticThread.h:
2404         * wtf/Condition.h:
2405         (WTF::ConditionBase::notifyOne):
2406
2407 2016-10-18  Sam Weinig  <sam@webkit.org>
2408
2409         Replace std::experimental::variant with WTF::Variant (or similar)
2410         https://bugs.webkit.org/show_bug.cgi?id=163626
2411
2412         Reviewed by Chris Dumez.
2413
2414         Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
2415         into the WTF namespace.
2416
2417         * wtf/Forward.h:
2418         * wtf/Variant.h:
2419
2420 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
2421
2422         WTF should make it easier to create threads that die automatically after inactivity
2423         https://bugs.webkit.org/show_bug.cgi?id=163576
2424
2425         Reviewed by Andreas Kling.
2426         
2427         For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
2428         guilty because those threads don't shut down when they are inactive. For example, in bug
2429         163562, I need to add a new GC thread. There will be one of them per VM. This means that a
2430         JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
2431         good.
2432         
2433         A common pattern for all of these threads is that they have some well-defined trigger that
2434         causes them to run. This trigger has a lock, a condition variable, some logic that determines
2435         if there is work to do, and then of course the logic for the thread's actual work. The thread
2436         bodies usually look like this:
2437         
2438         void Thingy::runThread()
2439         {
2440             for (;;) {
2441                 Work work;
2442                 {
2443                     LockHolder locker(m_lock);
2444                     while (!hasWork())
2445                         m_cond.wait(m_lock);
2446                     work = takeWork();
2447                 }
2448                 doWork(work);
2449             }
2450         }
2451         
2452         If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's
2453         threads), you will see this pattern.
2454         
2455         This change adds a new kind of thread, called AutomaticThread, that lets you write threads to
2456         this pattern while getting automatic thread shutdown for free: instead of just waiting on a
2457         condition variable, AutomaticThread will have a timeout that causes the thread to die. The
2458         condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart
2459         enough to restart any threads that have decided to stop due to inactivity. The inactivity
2460         threshold is current just 1 second.
2461         
2462         In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more
2463         places soon.
2464
2465         * WTF.xcodeproj/project.pbxproj:
2466         * wtf/AutomaticThread.cpp: Added.
2467         (WTF::AutomaticThreadCondition::create):
2468         (WTF::AutomaticThreadCondition::AutomaticThreadCondition):
2469         (WTF::AutomaticThreadCondition::~AutomaticThreadCondition):
2470         (WTF::AutomaticThreadCondition::notifyAll):
2471         (WTF::AutomaticThreadCondition::add):
2472         (WTF::AutomaticThreadCondition::remove):
2473         (WTF::AutomaticThreadCondition::contains):
2474         (WTF::AutomaticThread::AutomaticThread):
2475         (WTF::AutomaticThread::~AutomaticThread):
2476         (WTF::AutomaticThread::join):
2477         (WTF::AutomaticThread::start):
2478         * wtf/AutomaticThread.h: Added.
2479         * wtf/CMakeLists.txt:
2480         * wtf/ParallelHelperPool.cpp:
2481         (WTF::ParallelHelperClient::ParallelHelperClient):
2482         (WTF::ParallelHelperClient::~ParallelHelperClient):
2483         (WTF::ParallelHelperClient::setTask):
2484         (WTF::ParallelHelperClient::finish):
2485         (WTF::ParallelHelperClient::doSomeHelping):
2486         (WTF::ParallelHelperClient::runTask):
2487         (WTF::ParallelHelperPool::ParallelHelperPool):
2488         (WTF::ParallelHelperPool::~ParallelHelperPool):
2489         (WTF::ParallelHelperPool::ensureThreads):
2490         (WTF::ParallelHelperPool::doSomeHelping):
2491         (WTF::ParallelHelperPool::Thread::Thread):
2492         (WTF::ParallelHelperPool::didMakeWorkAvailable):
2493         (WTF::ParallelHelperPool::helperThreadBody): Deleted.
2494         (WTF::ParallelHelperPool::waitForClientWithTask): Deleted.
2495         * wtf/ParallelHelperPool.h:
2496
2497 2016-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
2498
2499         SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
2500         https://bugs.webkit.org/show_bug.cgi?id=116470
2501
2502         Reviewed by Simon Fraser.
2503
2504         * wtf/TemporaryChange.h:
2505         (WTF::TemporaryChange::TemporaryChange):
2506         Add a new constructor to make TemporaryChange work as a restorer. The
2507         temporary change will happen after we construct the object.
2508
2509 2016-10-17  Simon Fraser  <simon.fraser@apple.com>
2510
2511         Implement DOMRect/DOMRectReadOnly
2512         https://bugs.webkit.org/show_bug.cgi?id=163464
2513
2514         Reviewed by Darin Adler.
2515         
2516         Implement min()/max() in a way that follows Math.min/Math.max, which return
2517         NaN if either argument is NaN.
2518
2519         * wtf/MathExtras.h:
2520         (WTF::nanPropagatingMin):
2521         (WTF::nanPropagatingMax):
2522
2523 2016-10-15  Sam Weinig  <sam@webkit.org>
2524
2525         MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
2526         https://bugs.webkit.org/show_bug.cgi?id=163475
2527
2528         Reviewed by Simon Fraser.
2529
2530         * wtf/Variant.h:
2531         Add missing return statement that was tripping up some compilers.
2532
2533 2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>
2534
2535         Unreviewed, rolling out r207225.
2536
2537         This change causes debug tests to exit early with crashes.
2538
2539         Reverted changeset:
2540
2541         "Optional's move-constructor and move-assignment operator
2542         don't disengage the value being moved from"
2543         https://bugs.webkit.org/show_bug.cgi?id=163309
2544         http://trac.webkit.org/changeset/207225
2545
2546 2016-10-11  Sam Weinig  <sam@webkit.org>
2547
2548         Optional's move-constructor and move-assignment operator don't disengage the value being moved from
2549         https://bugs.webkit.org/show_bug.cgi?id=163309
2550
2551         Reviewed by Anders Carlsson.
2552
2553         * wtf/Optional.h:
2554         (WTF::Optional::Optional):
2555         (WTF::Optional::operator=):
2556         Disengage 'other' on move-construction and move-assignment.
2557
2558 2016-10-08  Filip Pizlo  <fpizlo@apple.com>
2559
2560         MarkedBlock should know what objects are live during marking
2561         https://bugs.webkit.org/show_bug.cgi?id=162309
2562
2563         Reviewed by Geoffrey Garen.
2564         
2565         This removes the atomicity mode, because it's not really used: it only affects the
2566         concurrentBlah methods, but their only users turn on atomicity. This was useful because
2567         previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used
2568         effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't.
2569         Removing this useless mode is the best solution.
2570         
2571         Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and
2572         setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set,
2573         respectively) while also clearing the contents of 'other'. This is great for one of the GC
2574         hot paths.
2575
2576         * wtf/Bitmap.h:
2577         (WTF::WordType>::Bitmap):
2578         (WTF::WordType>::get):
2579         (WTF::WordType>::set):
2580         (WTF::WordType>::testAndSet):
2581         (WTF::WordType>::testAndClear):
2582         (WTF::WordType>::concurrentTestAndSet):
2583         (WTF::WordType>::concurrentTestAndClear):
2584         (WTF::WordType>::clear):
2585         (WTF::WordType>::clearAll):
2586         (WTF::WordType>::nextPossiblyUnset):
2587         (WTF::WordType>::findRunOfZeros):
2588         (WTF::WordType>::count):
2589         (WTF::WordType>::isEmpty):
2590         (WTF::WordType>::isFull):
2591         (WTF::WordType>::merge):
2592         (WTF::WordType>::filter):
2593         (WTF::WordType>::exclude):
2594         (WTF::WordType>::forEachSetBit):
2595         (WTF::WordType>::mergeAndClear):
2596         (WTF::WordType>::setAndClear):
2597         (WTF::=):
2598         (WTF::WordType>::hash):
2599
2600 2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>
2601
2602         Add SynchronizedFixedQueue class
2603         https://bugs.webkit.org/show_bug.cgi?id=162478
2604
2605         Reviewed by Geoffrey Garen.
2606
2607         This class represents a simple producer/consumer worker. It facilitates
2608         synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses
2609         a single lock and a single condition to synchronize all its members among
2610         the working threads. This means a single thread is active at any time and
2611         and the other threads are blocked waiting for the lock to be released. Or
2612         they are sleeping waiting for the condition to be satisfied.
2613
2614         * WTF.xcodeproj/project.pbxproj:
2615         * wtf/SynchronizedFixedQueue.h: Added.
2616         (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):
2617         (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state.
2618         (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state.
2619         (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items?
2620         (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue.
2621         (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue.
2622
2623 2016-10-11  Alex Christensen  <achristensen@webkit.org>
2624
2625         Remove dead networking code
2626         https://bugs.webkit.org/show_bug.cgi?id=163263
2627
2628         Reviewed by Daniel Bates.
2629
2630         * wtf/Platform.h:
2631         * wtf/SchedulePair.h:
2632         * wtf/SchedulePairMac.mm:
2633
2634 2016-10-10  Zan Dobersek  <zdobersek@igalia.com>
2635
2636         Add ENABLE_ENCRYPTED_MEDIA configuration option
2637         https://bugs.webkit.org/show_bug.cgi?id=163219
2638
2639         Reviewed by Darin Adler.
2640
2641         * wtf/FeatureDefines.h:
2642         If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0.
2643
2644 2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>
2645
2646         [DOMJIT] Implement Node accessors in DOMJIT
2647         https://bugs.webkit.org/show_bug.cgi?id=163005
2648
2649         Reviewed by Filip Pizlo.
2650
2651         Add CAST_OFFSET. It is not necessary for JSCell thingy
2652         since we don't use virtual member functions. However, it
2653         is not true for WebCore DOM wrapped objects.
2654
2655         * wtf/StdLibExtras.h:
2656
2657 2016-10-07  Chris Dumez  <cdumez@apple.com>
2658
2659         window.navigator.language incorrectly returns all lowercase string
2660         https://bugs.webkit.org/show_bug.cgi?id=163096
2661
2662         Reviewed by Darin Adler.
2663
2664         Update platformUserPreferredLanguages() so that it no longer lowercases
2665         the string it returns. On Mac, we rely on CFLocale which returns
2666         BCP-47 language tags as per:
2667         - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc
2668
2669         * wtf/PlatformUserPreferredLanguagesMac.mm:
2670         (WTF::httpStyleLanguageCode):
2671         * wtf/PlatformUserPreferredLanguagesUnix.cpp:
2672         (WTF::platformLanguage):
2673
2674 2016-10-06  Brent Fulgham  <bfulgham@apple.com>
2675
2676         [Win][Direct2D] Add Direct2D CMake rules
2677         https://bugs.webkit.org/show_bug.cgi?id=162925
2678
2679         Reviewed by Brent Fulgham.
2680
2681         * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
2682         with Direct2D.
2683
2684 2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
2685
2686         [DOMJIT] Add initial CheckDOM and CallDOM implementations
2687         https://bugs.webkit.org/show_bug.cgi?id=162941
2688
2689         Reviewed by Filip Pizlo.
2690
2691         * wtf/Box.h:
2692         (WTF::Box::Box):
2693
2694 2016-10-05  Zan Dobersek  <zdobersek@igalia.com>
2695
2696         Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
2697         https://bugs.webkit.org/show_bug.cgi?id=162903
2698
2699         Reviewed by Alex Christensen.
2700
2701         Rename build guards for the remaining implementation of the legacy EME API
2702         to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
2703         of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.
2704
2705         * wtf/FeatureDefines.h:
2706
2707 2016-10-04  Saam Barati  <sbarati@apple.com>
2708
2709         String.prototype.toLowerCase should be a DFG/FTL intrinsic
2710         https://bugs.webkit.org/show_bug.cgi?id=162887
2711
2712         Reviewed by Filip Pizlo and Yusuke Suzuki.
2713
2714         This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
2715         which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
2716         into a helper function. I decided to extract this into its own function because
2717         it may be the case that JSCs JITs will want to continue the operation
2718         after it has already ensured that part of an 8-bit string is lower case.
2719
2720         * wtf/text/StringImpl.cpp:
2721         (WTF::StringImpl::convertToLowercaseWithoutLocale):
2722         (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
2723         * wtf/text/StringImpl.h:
2724         * wtf/text/WTFString.cpp:
2725         (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
2726         * wtf/text/WTFString.h:
2727
2728 2016-10-04  Chris Dumez  <cdumez@apple.com>
2729
2730         Implement KeyboardEvent.code from the UI Event spec
2731         https://bugs.webkit.org/show_bug.cgi?id=149584
2732
2733         Reviewed by Darin Adler.
2734
2735         Add build time flag to toggle support for the code attribute on
2736         KeyboardEvent and only enable it on Mac for now, given that the
2737         implementation is missing on other platforms.
2738
2739         * wtf/FeatureDefines.h:
2740
2741 2016-10-03  Chris Dumez  <cdumez@apple.com>
2742
2743         Add support for KeyboardEvent.key attribute
2744         https://bugs.webkit.org/show_bug.cgi?id=36267
2745
2746         Reviewed by Darin Adler.
2747
2748         Add compile time flag for the key attribute on KeyboardEvent and enable
2749         it on Cocoa only.
2750
2751         * wtf/FeatureDefines.h:
2752
2753 2016-09-29  Sam Weinig  <sam@webkit.org>
2754
2755         Add initial support for IDL union conversion
2756         https://bugs.webkit.org/show_bug.cgi?id=161576
2757
2758         Reviewed by Chris Dumez.
2759
2760         * WTF.xcodeproj/project.pbxproj:
2761         * wtf/CMakeLists.txt:
2762         Add Brigand.h
2763
2764         * wtf/Brigand.h: Added.
2765         Import a standalone copy of Edouard Alligand and Joel Falcou's 
2766         Brigand library for help with for help with list based meta programming
2767
2768         * wtf/StdLibExtras.h:
2769         Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
2770         - IsTemplate acts like std::is_class, but works with a generic base.
2771         - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
2772         - RemoveCVAndReference combines std::remove_cv and std::remove_reference.
2773
2774 2016-09-30  Filip Pizlo  <fpizlo@apple.com>
2775
2776         B3::moveConstants should be able to edit code to minimize the number of constants
2777         https://bugs.webkit.org/show_bug.cgi?id=162764
2778
2779         Reviewed by Saam Barati.
2780         
2781         I thought it would be a good idea to document the fact that dominator traversal happens in a
2782         particular order for a reason.
2783
2784         * wtf/Dominators.h:
2785
2786 2016-09-29  Filip Pizlo  <fpizlo@apple.com>
2787
2788         Air should have a way of expressing additional instruction flags
2789         https://bugs.webkit.org/show_bug.cgi?id=162699
2790
2791         Reviewed by Mark Lam.
2792
2793         * wtf/CommaPrinter.h:
2794         (WTF::CommaPrinter::CommaPrinter):
2795         (WTF::CommaPrinter::dump):
2796         (WTF::CommaPrinter::didPrint):
2797
2798 2016-09-30  Youenn Fablet  <youenn@apple.com>
2799
2800         Add a way to go from a RefPtr<T> to Ref<const T>
2801         https://bugs.webkit.org/show_bug.cgi?id=162683
2802
2803         Reviewed by Alex Christensen.
2804
2805         * wtf/RefPtr.h:
2806         (WTF::RefPtr::releaseConstNonNull): Added.
2807
2808 2016-09-29  Mark Lam  <mark.lam@apple.com>
2809
2810         Re-enable StringView life-cycle checking.
2811         https://bugs.webkit.org/show_bug.cgi?id=160384
2812         <rdar://problem/28479434>
2813
2814         Reviewed by Saam Barati.
2815
2816         Re-landing after slow running tests have been resolved.
2817
2818         * wtf/text/StringView.h:
2819
2820 2016-09-29  Commit Queue  <commit-queue@webkit.org>
2821
2822         Unreviewed, rolling out r206563.
2823         https://bugs.webkit.org/show_bug.cgi?id=162732
2824
2825         Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested
2826         by ryanhaddad on #webkit).
2827
2828         Reverted changeset:
2829
2830         "Re-enable StringView life-cycle checking."
2831         https://bugs.webkit.org/show_bug.cgi?id=160384
2832         http://trac.webkit.org/changeset/206563
2833
2834 2016-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>
2835
2836         Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION
2837         https://bugs.webkit.org/show_bug.cgi?id=162718
2838
2839         Reviewed by Alex Christensen.
2840
2841         Clang 3.9 reports a following compilation warning:
2842           Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
2843
2844         * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'.
2845
2846 2016-09-28  Mark Lam  <mark.lam@apple.com>
2847
2848         Re-enable StringView life-cycle checking.
2849         https://bugs.webkit.org/show_bug.cgi?id=160384
2850         <rdar://problem/28479434>
2851
2852         Reviewed by Saam Barati.
2853
2854         * wtf/text/StringView.h:
2855
2856 2016-09-28  Filip Pizlo  <fpizlo@apple.com>
2857
2858         The write barrier should be down with TSO
2859         https://bugs.webkit.org/show_bug.cgi?id=162316
2860
2861         Reviewed by Geoffrey Garen.
2862         
2863         Added clearRange(), which quickly clears a range of bits. This turned out to be useful for
2864         a DFG optimization pass.
2865
2866         * wtf/FastBitVector.cpp:
2867         (WTF::FastBitVector::clearRange):
2868         * wtf/FastBitVector.h:
2869
2870 2016-09-28  Mark Lam  <mark.lam@apple.com>
2871
2872         Fix race condition in StringView's UnderlyingString lifecycle management.
2873         https://bugs.webkit.org/show_bug.cgi?id=162702
2874
2875         Reviewed by Geoffrey Garen.
2876
2877         There 2 relevant functions at play:
2878
2879         void StringView::setUnderlyingString(const StringImpl* string)
2880         {
2881             UnderlyingString* underlyingString;
2882             if (!string)
2883                 underlyingString = nullptr;
2884             else {
2885                 std::lock_guard<StaticLock> lock(underlyingStringsMutex);
2886                 auto result = underlyingStrings().add(string, nullptr);
2887                 if (result.isNewEntry)
2888                     result.iterator->value = new UnderlyingString(*string);
2889                 else
2890                     ++result.iterator->value->refCount;
2891                 underlyingString = result.iterator->value; // Point P2.
2892             }
2893             adoptUnderlyingString(underlyingString); // Point P5.
2894         }
2895
2896         ... and ...
2897
2898         void StringView::adoptUnderlyingString(UnderlyingString* underlyingString)
2899         {
2900             if (m_underlyingString) {
2901                 // Point P0.
2902                 if (!--m_underlyingString->refCount) {
2903                     if (m_underlyingString->isValid) { // Point P1.
2904                         std::lock_guard<StaticLock> lock(underlyingStringsMutex);
2905                         underlyingStrings().remove(&m_underlyingString->string); // Point P3.
2906                     }
2907                     delete m_underlyingString; // Point P4.
2908                 }
2909             }
2910             m_underlyingString = underlyingString;
2911         }
2912
2913         Imagine the following scenario:
2914
2915         1. Thread T1 has been using an UnderlyingString U1, and is now done with it.
2916            T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for
2917            the underlyingStringsMutex (which is currently being held by Thread T2).
2918         2. Context switch to Thread T2.
2919            T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString()
2920            and releases the underlyingStringsMutex.
2921            Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use.
2922         3. Context switch to Thread T1.
2923            T1 acquires the underlyingStringsMutex, and proceeds to remove it from the
2924            underlyingStrings() map (see Point P3).  It thinks it has successfully done so
2925            and proceeds to delete U1 (see Point P4).
2926         4. Context switch to Thread T2.
2927            T2 proceeds to use U1 (see Point P5 in setUnderlyingString()).
2928            Note: U1 has already been freed.  This is a use after free.
2929
2930         The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString()
2931         instead of after P1.  This ensures that the decrementing of the UnderlyingString
2932         refCount and its removal from the underlyingStrings() map is done as an atomic unit.
2933
2934         Note: If you look in StringView.cpp, you see another setUnderlyingString() which
2935         takes a StringView otherString.  This version of setUnderlyingString() can only
2936         be called from within the same thread that created the other StringView.  As a
2937         result, here, we are guaranteed that the UnderlyingString refCount is never zero,
2938         and there's no other threat of another thread trying to delete the UnderlyingString
2939         while we adopt it.  Hence, we don't need to acquire the underlyingStringsMutex
2940         here.
2941
2942         This race condition was found when running layout tests fetch/fetch-worker-crash.html
2943         and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME
2944         is enabled.  This issue resulted in those tests crashing due to a use-after-free.
2945
2946         * wtf/text/StringView.cpp:
2947         (WTF::StringView::adoptUnderlyingString):
2948         (WTF::StringView::setUnderlyingString):
2949
2950 2016-09-28  Brent Fulgham  <bfulgham@apple.com>
2951
2952         Correct 'safeCast' implementation
2953         https://bugs.webkit.org/show_bug.cgi?id=162679
2954         <rdar://problem/28518189>
2955
2956         Reviewed by Zalan Bujtas.
2957
2958         * wtf/StdLibExtras.h:
2959         (WTF::safeCast): Use a RELEASE_ASSERT.
2960
2961 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
2962
2963         [CMake] Add HAVE_LOCALTIME_R definition
2964         https://bugs.webkit.org/show_bug.cgi?id=162636
2965
2966         Reviewed by Alex Christensen.
2967
2968         * wtf/DateMath.cpp:
2969         (WTF::getLocalTime):
2970         * wtf/GregorianDateTime.cpp:
2971         (WTF::GregorianDateTime::setToCurrentLocalTime):
2972         * wtf/Platform.h:
2973
2974 2016-09-27  JF Bastien  <jfbastien@apple.com>
2975
2976         Speed up Heap::isMarkedConcurrently
2977         https://bugs.webkit.org/show_bug.cgi?id=162095
2978
2979         Reviewed by Filip Pizlo.
2980
2981         Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM.
2982
2983         This patch is fairly perf-neutral overall, but the GC's instrumentation reports:
2984           GC:Eden is 93% average runtime after change
2985           GC:Full is 76% average runtime after change
2986
2987         The fence was there because:
2988          1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then;
2989          2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored.
2990
2991         This ordering isn't guaranteed on ARM, which has a weak memory model.
2992
2993         There are 3 ways to guarantee this ordering:
2994          A. Use a barrier instruction.
2995          B. Use a load-acquire (new in ARMv8).
2996          C. use ARM's address dependency rule, which C++ calls memory_order_consume.
2997
2998         In general:
2999          A. is slow but orders all of memory in an intuitive manner.
3000          B. is faster-ish and has the same property-ish.
3001          C. should be faster still, but *only orders dependent loads*. This last part is critical! Consume isn't an all-out replacement for acquire (acquire is rather a superset of consume).
3002
3003         ARM explains the address dependency rule in their document "barrier litmus tests and cookbook":
3004
3005         > *Resolving by the use of barriers and address dependency*
3006         >
3007         > There is a rule within the ARM architecture that:
3008         > Where the value returned by a read is used to compute the virtual address of a subsequent read or write (this is known as an address dependency), then these two memory accesses will be observed in program order. An address dependency exists even if the value read by the first read has no effect in changing the virtual address (as might be the case if the value returned is masked off before it is used, or if it had no effect on changing a predicted address value).
3009         > This restriction applies only when the data value returned from one read is used as a data value to calculate the address of a subsequent read or write. This does not apply if the data value returned from one read is used to determine the condition code flags, and the values of the flags are used for condition code evaluation to determine the address of a subsequent reads, either through conditional execution or the evaluation of a branch. This is known as a control dependency.
3010         > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency.
3011
3012         C++'s memory_order_consume is unfortunately unimplemented by C++ compilers, and maybe unimplementable as spec'd. I'm working with interested folks in the committee to fix this situation: http://wg21.link/p0190r2
3013
3014         * wtf/Atomics.h:
3015         (WTF::zeroWithConsumeDependency): a 0 which carries a dependency
3016         (WTF::consumeLoad): pixie magic
3017
3018 2016-09-27  JF Bastien  <jfbastien@apple.com>
3019
3020         Atomics.h on Windows: remove seq_cst hack
3021         https://bugs.webkit.org/show_bug.cgi?id=162022
3022
3023         Reviewed by Mark Lam.
3024
3025         No need to force access to seq_cst, always inlining fixes the MSVC warning.
3026
3027         * wtf/Atomics.h:
3028         (WTF::Atomic::compareExchangeWeak): remove seq_cst hack
3029         (WTF::Atomic::compareExchangeStrong): remove seq_cst hack
3030         (WTF::Atomic::exchangeAndAdd): remove seq_cst hack
3031         (WTF::Atomic::exchange): remove seq_cst hack
3032
3033 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
3034
3035         [CMake] Use CMake to determine HAVE_* defines
3036         https://bugs.webkit.org/show_bug.cgi?id=162368
3037
3038         Reviewed by Alex Christensen.
3039
3040         * wtf/Platform.h:
3041
3042 2016-09-20  Anders Carlsson  <andersca@apple.com>
3043
3044         PlatformEvent::m_modifiers should be an OptionSet
3045         https://bugs.webkit.org/show_bug.cgi?id=162326
3046
3047         Reviewed by Daniel Bates.
3048
3049         * wtf/OptionSet.h:
3050         (WTF::OptionSet::operator!=):
3051         (WTF::OptionSet::operator-):
3052
3053 2016-09-27  Jer Noble  <jer.noble@apple.com>
3054
3055         Remove deprecated ENCRYPTED_MEDIA implementation.
3056         https://bugs.webkit.org/show_bug.cgi?id=161010
3057
3058         Reviewed by Eric Carlson.
3059
3060         Remove ENABLE_ENCRYPTED_MEDIA.
3061
3062         * wtf/FeatureDefines.h:
3063
3064 2016-09-27  Youenn Fablet  <youenn@apple.com>
3065
3066         [Fetch API] Use Ref<const T> in FetchBody::m_data variant
3067         https://bugs.webkit.org/show_bug.cgi?id=162599
3068
3069         Reviewed by Alex Christensen.
3070
3071         Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable.
3072
3073         * wtf/DeferrableRefCounted.h:
3074         (WTF::DeferrableRefCountedBase::ref):
3075         (WTF::DeferrableRefCountedBase::derefBase):
3076         (WTF::DeferrableRefCounted::deref):
3077
3078 2016-09-26  Daniel Bates  <dabates@apple.com>
3079
3080         Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
3081         https://bugs.webkit.org/show_bug.cgi?id=162365
3082
3083         Reviewed by Simon Fraser.
3084
3085         * wtf/FeatureDefines.h:
3086
3087 2016-09-26  Benjamin Poulain  <benjamin@webkit.org>
3088
3089         [JSC] Shrink the Math inline caches some more
3090         https://bugs.webkit.org/show_bug.cgi?id=162485
3091
3092         Reviewed by Saam Barati.
3093
3094         * wtf/Bag.h:
3095         Don't copy the arguments before initializing the nodes.
3096
3097 2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>
3098
3099         std::unique_ptr deleter functions should not check if pointer is null
3100         https://bugs.webkit.org/show_bug.cgi?id=162558
3101
3102         Reviewed by Alex Christensen.
3103
3104         std::unique_ptr already does this before calling the deleter.
3105
3106         * wtf/efl/UniquePtrEfl.h:
3107         * wtf/glib/GUniquePtr.h:
3108
3109 == Rolled over to ChangeLog-2016-09-26 ==