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