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