Rolling out r206244, as it caused flaky crashes on tests.
[WebKit-https.git] / Source / WTF / ChangeLog
1 2016-09-21  Alexey Proskuryakov  <ap@apple.com>
2
3         Rolling out r206244, as it caused flaky crashes on tests.
4         Was: Correct uses of 'safeCast'
5
6         * wtf/StdLibExtras.h:
7         (WTF::safeCast):
8
9 2016-09-21  Keith Miller  <keith_miller@apple.com>
10
11         Fix build for future versions of Clang.
12         https://bugs.webkit.org/show_bug.cgi?id=162346
13
14         Reviewed by Filip Pizlo.
15
16         This fixes issues with the WebCore build where inline
17         template-class function definitions are marked as exported. This
18         genereates a weak external symobl that our build does not like.
19
20         * wtf/text/StringImpl.h:
21
22 2016-09-20  Brent Fulgham  <bfulgham@apple.com>
23
24         Correct uses of 'safeCast'
25         https://bugs.webkit.org/show_bug.cgi?id=162301
26         <rdar://problem/28343658>
27
28         Reviewed by Antti Koivisto.
29
30         * wtf/StdLibExtras.h:
31         (WTF::safeCast): RELEASE_ASSERT on overflow.
32
33 2016-09-21  Commit Queue  <commit-queue@webkit.org>
34
35         Unreviewed, rolling out r206222 and r206227.
36         https://bugs.webkit.org/show_bug.cgi?id=162361
37
38         "broke the windows build" (Requested by keith_mi_ on #webkit).
39
40         Reverted changesets:
41
42         "Fix build for future versions of Clang."
43         https://bugs.webkit.org/show_bug.cgi?id=162346
44         http://trac.webkit.org/changeset/206222
45
46         "Attempt to fix windows build after r206222."
47         http://trac.webkit.org/changeset/206227
48
49 2016-09-21  Keith Miller  <keith_miller@apple.com>
50
51         Fix build for future versions of Clang.
52         https://bugs.webkit.org/show_bug.cgi?id=162346
53
54         Reviewed by Filip Pizlo.
55
56         This fixes issues with the WebCore build where inline
57         template-class function definitions are marked as exported. This
58         genereates a weak external symobl that our build does not like.
59
60         * wtf/text/StringImpl.h:
61
62 2016-09-20  Alex Christensen  <achristensen@webkit.org>
63
64         Require WTFMove for String::adopt
65         https://bugs.webkit.org/show_bug.cgi?id=162313
66
67         Reviewed by Yusuke Suzuki.
68
69         * wtf/text/StringImpl.cpp:
70         (WTF::StringImpl::removeCharacters):
71         (WTF::StringImpl::simplifyMatchedCharactersToSpace):
72         (WTF::StringImpl::adopt):
73         * wtf/text/StringImpl.h:
74         (WTF::StringImpl::adopt):
75         * wtf/text/WTFString.h:
76         (WTF::String::adopt):
77
78 2016-09-20  Filip Pizlo  <fpizlo@apple.com>
79
80         Make MarkedBlock state tracking support overlapped allocation and marking state
81         https://bugs.webkit.org/show_bug.cgi?id=161581
82
83         Reviewed by Geoffrey Garen.
84         
85         The main change here is to bring back FastBitVector.cpp, so that I could outline some
86         large slow path functions. This also adds some utilities, like atomicSetAndCheck() and
87         isEmpty(). The GC uses these.
88
89         * WTF.xcodeproj/project.pbxproj:
90         * wtf/CMakeLists.txt:
91         * wtf/FastBitVector.cpp: Added.
92         (WTF::FastBitVectorWordOwner::setEqualsSlow):
93         (WTF::FastBitVectorWordOwner::resizeSlow):
94         * wtf/FastBitVector.h:
95         (WTF::FastBitVectorWordOwner::operator=):
96         (WTF::FastBitVectorWordOwner::resize):
97         (WTF::FastBitVectorImpl::isEmpty):
98         (WTF::FastBitVector::atomicSetAndCheck):
99         (WTF::FastBitVector::operator[]): Deleted.
100
101 2016-09-20  Jonathan Bedard  <jbedard@apple.com>
102
103         Undefined behavior: Left shift negative number
104         https://bugs.webkit.org/show_bug.cgi?id=161866
105
106         Reviewed by Keith Miller.
107
108         Left shifting a negative number is undefined behavior in C/C++, although most implementations do define it. Explicitly clarifying the intended behavior due to shifting negative number in some cases.
109
110         * wtf/text/Base64.cpp:
111         (WTF::base64EncodeInternal): Changed signed character to unsigned when shifting.
112         (WTF::base64Encode): Ditto.
113         (WTF::base64URLEncode): Ditto.
114         (WTF::base64DecodeInternal): Ditto.
115         * wtf/text/Base64.h: Ditto.
116         (WTF::SignedOrUnsignedCharVectorAdapter): Rebuilt to stop using union as a bitwise_cast.
117         (WTF::ConstSignedOrUnsignedCharVectorAdapter): Ditto.
118
119 2016-09-19  Daniel Bates  <dabates@apple.com>
120
121         Remove ENABLE(TEXT_AUTOSIZING) automatic text size adjustment code
122         https://bugs.webkit.org/show_bug.cgi?id=162167
123
124         Reviewed by Simon Fraser.
125
126         * wtf/FeatureDefines.h:
127
128 2016-09-14  Jer Noble  <jer.noble@apple.com>
129
130         [media-source] fix imported/w3c/web-platform-tests/media-source/mediasource-duration.html
131         https://bugs.webkit.org/show_bug.cgi?id=161999
132
133         Reviewed by Eric Carlson.
134
135         The mediasource-duration.html test tries to set the duration of a MediaSource to a double value
136         (5.0), then some work happens and the duration is set to a media time (12533/2500, or 5.0132).
137         The test then tries to set that value as the duration, converted from a media time to a double,
138         and asserts that no duration change event is fired.  But because the floating point value and the
139         media time value are ever so slightly different, this round-tripping fails.
140
141         Fix this bug in MediaTime by, when one side or the other of a comparison is a floating point
142         MediaTime, convert both sides to doubles and run the comparison against those values. This preserves
143         the transitive equality of doubles <-> MediaTimes.
144
145         * wtf/MediaTime.cpp:
146         (WTF::MediaTime::compare):
147
148 2016-09-16  Anders Carlsson  <andersca@apple.com>
149
150         Fix isValidEnum to work with older versions of GCC
151         https://bugs.webkit.org/show_bug.cgi?id=162065
152
153         Reviewed by Michael Catanzaro.
154
155         Use the ternary operator instead of a more complex function body.
156
157         * wtf/EnumTraits.h:
158
159 2016-09-15  JF Bastien  <jfbastien@apple.com>
160
161         TextBreakIterator: unconvolute character break cache
162         https://bugs.webkit.org/show_bug.cgi?id=162001
163
164         Reviewed by Michael Saboff.
165
166         Simplify the one-element cache.
167
168         Added here (fixed a bit after): https://bugs.webkit.org/attachment.cgi?id=144118&action=prettypatch
169         Updated to never use a lock, and always use weak cmpxchg here: https://bugs.webkit.org/attachment.cgi?id=261719&action=prettypatch
170
171         It's just trying to reduce the number of times it calls into ICU
172         to initialize a UBRK_CHARACTER. The implementation keeps a
173         one-element cache of the latest used one, which threads can
174         optimistically grab. Failure is fine (just create a new one), same
175         for failure to cache (just destroy it), but the logic is odd and
176         you technically need release / acquire semantics because the
177         UBRK_CHARACTER creation's store need to be visible on acquisition
178         (but realistically it was created and then used and *then* cached,
179         so it's probably been long ago enough that read reorders never
180         manifested).
181
182         Using exchange directly achieves this without the headache.
183
184         * wtf/text/TextBreakIterator.cpp:
185         (WTF::getNonSharedCharacterBreakIterator):
186         (WTF::cacheNonSharedCharacterBreakIterator):
187         (WTF::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):
188         (WTF::NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator):
189         (WTF::compareAndSwapNonSharedCharacterBreakIterator): Deleted.
190
191 2016-09-15  Keith Miller  <keith_miller@apple.com>
192
193         Pragma out undefined-var-template warnings in JSC for JSObjects that are templatized
194         https://bugs.webkit.org/show_bug.cgi?id=161985
195
196         Reviewed by Alex Christensen.
197
198         Fix WTF_EXPORT_PRIVATE for an inline member function. This would
199         generate a weak export.
200
201         * wtf/MetaAllocator.h:
202         (WTF::MetaAllocator::getLock):
203
204 2016-09-14  Commit Queue  <commit-queue@webkit.org>
205
206         Unreviewed, rolling out r205933 and r205936.
207         https://bugs.webkit.org/show_bug.cgi?id=162002
208
209         broke the build (Requested by keith_miller on #webkit).
210
211         Reverted changesets:
212
213         "Pragma out undefined-var-template warnings in JSC for
214         JSObjects that are templatized"
215         https://bugs.webkit.org/show_bug.cgi?id=161985
216         http://trac.webkit.org/changeset/205933
217
218         "Unreviewed, fix the Windows build."
219         http://trac.webkit.org/changeset/205936
220
221 2016-09-14  Keith Miller  <keith_miller@apple.com>
222
223         Pragma out undefined-var-template warnings in JSC for JSObjects that are templatized
224         https://bugs.webkit.org/show_bug.cgi?id=161985
225
226         Reviewed by Geoffrey Garen.
227
228         Fix WTF_EXPORT_PRIVATE for an inline member function. This would
229         generate a weak export.
230
231         * wtf/MetaAllocator.h:
232         (WTF::MetaAllocator::getLock):
233
234 2016-09-14  JF Bastien  <jfbastien@apple.com>
235
236         Atomics on ARM don't require full-system fencing, and other minutiae
237         https://bugs.webkit.org/show_bug.cgi?id=161928
238
239         Reviewed by Geoffrey Garen.
240
241         Add cmpxchg versions with both success and failure memory
242         ordering. In some interesting cases we can craft code which needs
243         barriers which aren't as strong.
244
245         weakCompareAndSwap is super dubious, its 3 uses seem
246         questionable... but for now I'm just adding debug asserts.
247
248         Rename armv7_dmb* functions to arm_dmb* because they apply to v7
249         and v8 (or more precisely; to ARMv7's ARM and Thumb2, as well as
250         ARMv8's aarch32 A32/T32 and aarch64).
251
252         Use inner-shareability domain for ARM barriers instead of
253         full-system. This is what C++ uses.
254
255         The default case for barriers simply used a compiler barrier. This
256         is generally wrong, e.g. for MIPS.
257
258         * wtf/Atomics.h:
259         (WTF::Atomic::compareExchangeWeak): offer two-order version
260         (WTF::Atomic::compareExchangeStrong): offer two-order version
261         (WTF::weakCompareAndSwap): a few assertions
262         (WTF::arm_dmb): rename since it applies to ARMv7 and v8; make it innser-shareable
263         (WTF::arm_dmb_st): rename since it applies to ARMv7 and v8; make it innser-shareable
264         (WTF::loadLoadFence): incorrect generally
265         (WTF::loadStoreFence): incorrect generally
266         (WTF::storeLoadFence): incorrect generally
267         (WTF::storeStoreFence): incorrect generally
268         (WTF::memoryBarrierAfterLock): incorrect generally
269         (WTF::memoryBarrierBeforeUnlock): incorrect generally
270         (WTF::armV7_dmb): Deleted.
271         (WTF::armV7_dmb_st): Deleted.
272
273 2016-09-14  JF Bastien  <jfbastien@apple.com>
274
275         Alwasys inline atomic operations
276         https://bugs.webkit.org/show_bug.cgi?id=155371
277
278         Reviewed by Geoffrey Garen.
279
280         Fixes "build fails with memory model cannot be stronger than
281         success memory model for ‘__atomic_compare_exchange’".
282
283         Pre-5 revisions of GCC at Os only generated an error message
284         related to invalid failure memory ordering. The reason is that
285         libstdc++ tries to be clever about enforcing the C++ standard's
286         clause [atomics.types.operations.req] ¶21 which states:
287
288             Requires: The failure argument shall not be
289             `memory_order_release` nor `memory_order_acq_rel`. The failure
290             argument shall be no stronger than the success argument.
291
292         It fails at doing this because its inlining heuristics are
293         modified by Os, and they're not quite as dumb as O0 but not smart
294         enough to get to the good code at O1. Adding ALWAYS_INLINE fixes
295         the silliness at Os, leaves O1 great, and makes O0 slightly less
296         bad but still pretty bad.
297
298         The other good news is that I'm going to get this particular
299         problem fixed in the version of C++ which will come after C++17:
300
301         https://github.com/jfbastien/papers/blob/master/source/P0418r1.bs
302
303         While we're at it we should always inline all of these wrapped
304         functions because the generated code is horrendous if the memory
305         order isn't known at compile time.
306
307         * wtf/Atomics.h:
308         (WTF::Atomic::load):
309         (WTF::Atomic::store):
310         (WTF::Atomic::compareExchangeWeak):
311         (WTF::Atomic::compareExchangeStrong):
312         (WTF::Atomic::exchangeAndAdd):
313         (WTF::Atomic::exchange):
314
315 2016-09-13  Michael Saboff  <msaboff@apple.com>
316
317         Promises aren't resolved properly when making a ObjC API callback
318         https://bugs.webkit.org/show_bug.cgi?id=161929
319
320         Reviewed by Geoffrey Garen.
321
322         Removed resetCurrentAtomicStringTable() which is no longer referenced.
323
324         * wtf/WTFThreadData.h:
325         (WTF::WTFThreadData::resetCurrentAtomicStringTable): Deleted.
326
327 2016-09-13  Alex Christensen  <achristensen@webkit.org>
328
329         Implement URLSearchParams
330         https://bugs.webkit.org/show_bug.cgi?id=161920
331
332         Reviewed by Chris Dumez.
333
334         * wtf/text/StringView.h:
335         (WTF::StringView::split): Added.
336
337 2016-09-12  Filip Pizlo  <fpizlo@apple.com>
338
339         ParkingLot is going to have a bad time with threads dying
340         https://bugs.webkit.org/show_bug.cgi?id=161893
341
342         Reviewed by Michael Saboff.
343         
344         If a thread dies right as it falls out of parkConditionally, then unparkOne() and friends
345         might die because they will dereference a deallocated ThreadData.
346
347         The solution is to ref-count ThreadData's. When unparkOne() and friends want to hold onto a
348         ThreadData past the queue lock, they can use RefPtr<>.
349
350         * wtf/ParkingLot.cpp:
351         (WTF::ParkingLot::unparkOne):
352         (WTF::ParkingLot::unparkOneImpl):
353         (WTF::ParkingLot::unparkAll):
354
355 2016-09-12  Chris Dumez  <cdumez@apple.com>
356
357         Fix post-landing review comments after r205787
358         https://bugs.webkit.org/show_bug.cgi?id=161885
359
360         Reviewed by Darin Adler.
361
362         Add new StringBuilder::append(CFStringRef) / append(NSString*)
363         overloads to avoid an extra string copy when possible.
364
365         * wtf/text/StringBuilder.cpp:
366         (WTF::StringBuilder::append):
367         * wtf/text/StringBuilder.h:
368         (WTF::StringBuilder::append):
369
370 2016-09-12  Yusuke Suzuki  <utatane.tea@gmail.com>
371
372         [WTF] HashTable's rehash is not compatible to Ref<T> and ASan
373         https://bugs.webkit.org/show_bug.cgi?id=161763
374
375         Reviewed by Darin Adler.
376
377         Destructors of HashTable's empty values need to be called while ones of deleted values don't.
378
379         * wtf/HashTable.h:
380         (WTF::KeyTraits>::deallocateTable):
381         * wtf/Ref.h:
382
383 2016-09-12  Myles C. Maxfield  <mmaxfield@apple.com>
384
385         [Cocoa] Reduce uses of CGFonts in favor of CTFonts
386         https://bugs.webkit.org/show_bug.cgi?id=161809
387
388         Reviewed by Daniel Bates.
389
390         * wtf/unicode/CharacterNames.h:
391
392 2016-09-12  Saam Barati  <sbarati@apple.com>
393
394         MapHash should do constant folding when it has a constant argument and its legal to hash that value
395         https://bugs.webkit.org/show_bug.cgi?id=161639
396
397         Reviewed by Filip Pizlo.
398
399         This patch adds a concurrentHash method to StringImpl. It's
400         probably safe to get the actual hash while being racy, however,
401         it's simpler and more future proof to not have to worry about
402         that and to just compute it on demand. Users of this API should
403         be aware that it's doing non-trivial work. Currently, the only
404         user is JSC's JIT compilers, and they only ask for hashes for small-ish
405         strings.
406
407         * wtf/text/StringImpl.h:
408         * wtf/text/StringStatics.cpp:
409         (WTF::StringImpl::concurrentHash):
410
411 2016-09-11  Filip Pizlo  <fpizlo@apple.com>
412
413         DFG::forAllKilledOperands() could use a faster bitvector scan in the same-inline-stack fast path
414         https://bugs.webkit.org/show_bug.cgi?id=161849
415
416         Reviewed by Saam Barati.
417         
418         It turns out that templates make private fields weird. FastBitVectorImpl can't necessarily
419         touch privates in instances of different template specializations of itself. So, I added a
420         public method called wordView() that exposes the necessary private field.
421
422         * wtf/FastBitVector.h:
423         (WTF::FastBitVectorImpl::operator&):
424         (WTF::FastBitVectorImpl::operator|):
425         (WTF::FastBitVectorImpl::operator~):
426         (WTF::FastBitVectorImpl::forEachSetBit):
427         (WTF::FastBitVectorImpl::wordView):
428
429 2016-09-11  Filip Pizlo  <fpizlo@apple.com>
430
431         FastBitVector should have efficient and easy-to-use vector-vector operations
432         https://bugs.webkit.org/show_bug.cgi?id=161847
433
434         Reviewed by Saam Barati.
435         
436         FastBitVector is a bitvector representation that supports manual dynamic resizing and is
437         optimized for speed, not space. (BitVector supports automatic dynamic resizing and is
438         optimized for space, while Bitmap is sized statically and is optimized for both speed and
439         space.) This change greatly increases the power of FastBitVector. We will use these new
440         powers for changing the JSC GC to use FastBitVectors to track sets of MarkedBlocks (bug
441         161581) instead of using a combination of Vectors and doubly-linked lists.
442         
443         This change splits FastBitVector into two parts:
444         
445         - A thing that manages the storage of a bitvector: a uint32_t array and a size_t numBits.
446           We call this the word view.
447         - A thing that takes some kind of abstract array of uint32_t's and does bitvector
448           operations to it. We call this the FastBitVectorImpl.
449         
450         FastBitVectorImpl and word views are immutable. The FastBitVector class is a subclass of
451         FastBitVectorImpl specialized on a word view that owns its words and has additional
452         support for mutable operations.
453         
454         Doing this allows us to efficiently support things like this without any unnecessary
455         memory allocation or copying:
456         
457         FastBitVector a, b, c; // Assume that there is code to initialize these.
458         a &= b | ~c;
459         
460         Previously, this kind of operation would not be efficient, because "~c" would have to
461         create a whole new FastBitVector. But now, it just returns a FastBitVectorImpl whose
462         underlying word view bitnots (~) its words on the fly. Using template magic, this can get
463         pretty complex. For example "b | ~c" returns a FastBitVectorImpl that wraps a word view
464         whose implementation of WordView::word(size_t index) is something like:
465         
466         uint32_t word(size_t index) { return b.m_words.word(index) | ~c.m_words.word(index); }
467         
468         FastBitVectorImpl supports all of the fast bulk bitvector operations, like
469         forEachSetBit(), bitCount(), etc. So, when you say "a &= b | ~c", the actual
470         implementation is going to run these bit operations on word granularity directly over the
471         storage inside a, b, c.
472         
473         The use of operator overloading is worth explaining a bit. Previously, FastBitVector
474         avoided operator overloading. For example, the &= operation was called filter(). I think
475         that this was a pretty good approach at the time. I tried using non-operator methods in
476         this FastBitVector rewrite, but I found it very odd to say things like:
477         
478         a.filter(b.bitOr(c.bitNot()));
479         
480         I think that it's harder to see what is going on here, then using operators, because infix
481         notation is always better.
482
483         * WTF.xcodeproj/project.pbxproj:
484         * wtf/BitVector.h:
485         (WTF::BitVector::findBitInWord): Deleted.
486         * wtf/CMakeLists.txt:
487         * wtf/Dominators.h:
488         (WTF::Dominators::NaiveDominators::NaiveDominators):
489         (WTF::Dominators::NaiveDominators::dominates):
490         (WTF::Dominators::NaiveDominators::pruneDominators):
491         * wtf/FastBitVector.cpp: Removed.
492         * wtf/FastBitVector.h:
493         (WTF::fastBitVectorArrayLength):
494         (WTF::FastBitVectorWordView::FastBitVectorWordView):
495         (WTF::FastBitVectorWordView::numBits):
496         (WTF::FastBitVectorWordView::word):
497         (WTF::FastBitVectorWordOwner::FastBitVectorWordOwner):
498         (WTF::FastBitVectorWordOwner::~FastBitVectorWordOwner):
499         (WTF::FastBitVectorWordOwner::view):
500         (WTF::FastBitVectorWordOwner::operator=):
501         (WTF::FastBitVectorWordOwner::setAll):
502         (WTF::FastBitVectorWordOwner::clearAll):
503         (WTF::FastBitVectorWordOwner::set):
504         (WTF::FastBitVectorWordOwner::numBits):
505         (WTF::FastBitVectorWordOwner::arrayLength):
506         (WTF::FastBitVectorWordOwner::resize):
507         (WTF::FastBitVectorWordOwner::word):
508         (WTF::FastBitVectorWordOwner::words):
509         (WTF::FastBitVectorAndWords::FastBitVectorAndWords):
510         (WTF::FastBitVectorAndWords::view):
511         (WTF::FastBitVectorAndWords::numBits):
512         (WTF::FastBitVectorAndWords::word):
513         (WTF::FastBitVectorOrWords::FastBitVectorOrWords):
514         (WTF::FastBitVectorOrWords::view):
515         (WTF::FastBitVectorOrWords::numBits):
516         (WTF::FastBitVectorOrWords::word):
517         (WTF::FastBitVectorNotWords::FastBitVectorNotWords):
518         (WTF::FastBitVectorNotWords::view):
519         (WTF::FastBitVectorNotWords::numBits):
520         (WTF::FastBitVectorNotWords::word):
521         (WTF::FastBitVectorImpl::FastBitVectorImpl):
522         (WTF::FastBitVectorImpl::numBits):
523         (WTF::FastBitVectorImpl::size):
524         (WTF::FastBitVectorImpl::arrayLength):
525         (WTF::FastBitVectorImpl::operator==):
526         (WTF::FastBitVectorImpl::operator!=):
527         (WTF::FastBitVectorImpl::at):
528         (WTF::FastBitVectorImpl::operator[]):
529         (WTF::FastBitVectorImpl::bitCount):
530         (WTF::FastBitVectorImpl::operator&):
531         (WTF::FastBitVectorImpl::operator|):
532         (WTF::FastBitVectorImpl::operator~):
533         (WTF::FastBitVectorImpl::forEachSetBit):
534         (WTF::FastBitVectorImpl::forEachClearBit):
535         (WTF::FastBitVectorImpl::forEachBit):
536         (WTF::FastBitVectorImpl::findBit):
537         (WTF::FastBitVectorImpl::findSetBit):
538         (WTF::FastBitVectorImpl::findClearBit):
539         (WTF::FastBitVectorImpl::dump):
540         (WTF::FastBitVectorImpl::atImpl):
541         (WTF::FastBitVector::FastBitVector):
542         (WTF::FastBitVector::operator=):
543         (WTF::FastBitVector::resize):
544         (WTF::FastBitVector::setAll):
545         (WTF::FastBitVector::clearAll):
546         (WTF::FastBitVector::setAndCheck):
547         (WTF::FastBitVector::operator|=):
548         (WTF::FastBitVector::operator&=):
549         (WTF::FastBitVector::at):
550         (WTF::FastBitVector::operator[]):
551         (WTF::FastBitVector::BitReference::BitReference):
552         (WTF::FastBitVector::BitReference::operator bool):
553         (WTF::FastBitVector::BitReference::operator=):
554         (WTF::FastBitVector::~FastBitVector): Deleted.
555         (WTF::FastBitVector::numBits): Deleted.
556         (WTF::FastBitVector::set): Deleted.
557         (WTF::FastBitVector::equals): Deleted.
558         (WTF::FastBitVector::merge): Deleted.
559         (WTF::FastBitVector::filter): Deleted.
560         (WTF::FastBitVector::exclude): Deleted.
561         (WTF::FastBitVector::clear): Deleted.
562         (WTF::FastBitVector::get): Deleted.
563         (WTF::FastBitVector::bitCount): Deleted.
564         (WTF::FastBitVector::forEachSetBit): Deleted.
565         (WTF::FastBitVector::arrayLength): Deleted.
566         * wtf/StdLibExtras.h:
567         (WTF::findBitInWord):
568
569 2016-09-10  Chris Dumez  <cdumez@apple.com>
570
571         parseHTMLInteger() should take a StringView in parameter
572         https://bugs.webkit.org/show_bug.cgi?id=161669
573
574         Reviewed by Ryosuke Niwa.
575
576         * wtf/text/StringBuilder.h:
577         (WTF::StringBuilder::append):
578         Add StringBuilder::append() overload taking an AtomicString in parameter.
579         It used to call StringBuilder::append(const String&) implicitly when
580         passing an AtomicString. However, it is now ambiguous because there
581         is an overload taking a StringView, and it is now possible to construct
582         a StringView from an AtomicString.
583
584         * wtf/text/StringView.h:
585         (WTF::StringView::StringView):
586         - Add StringView constructor taking an AtomicString in parameter for
587           convenience. This avoids having to call AtomicString::string()
588           explicitly at call sites.
589         - Add StringView constructor taking a 'const char*' in parameter for
590           performance. There are several call sites that were passing a const
591           char* and implicitly constructing an unnecessary String to construct
592           a StringView. This became more obvious because the constructor taking
593           an AtomicString in parameter made such calls ambiguous.
594
595
596 2016-09-09  Mark Lam  <mark.lam@apple.com>
597
598         Gardening: fixing a few JSC test failures.
599         https://bugs.webkit.org/show_bug.cgi?id=161760
600
601         Not reviewed.
602
603         Without this fix, the following tests will crash on a null dereference of isGCThread.
604             stress/slow-path-generator-updating-current-node-dfg.js.misc-ftl-no-cjit
605             stress/unshift-array-storage.js.misc-ftl-no-cjit
606
607         * wtf/MainThread.cpp:
608         (WTF::mayBeGCThread):
609
610 2016-09-08  Yusuke Suzuki  <utatane.tea@gmail.com>
611
612         [WTF] HashTable's rehash is not compatible to Ref<T> and ASan
613         https://bugs.webkit.org/show_bug.cgi?id=161763
614
615         Reviewed by Mark Lam.
616
617         If we move an object, the location which the moved object used should not be touched anymore.
618         HashTable::rehash performs WTFMove for the object that resides in the old table.
619         However, after moving it, we accidentally touch this location by using `!isEmptyOrDeletedBucket(table[i])`
620         in HashTable::deallocateTable. And it causes ASan crashing if we use Ref<> for HashTable's key or value.
621
622         In this patch, we call the destructor right after moving the object. And HashTable::rehash just calls
623         fastFree since all the objects in the old table are already moved and destructed.
624         And we also change HashTable::deallocate to destruct only live objects. Calling destructors for empty objects
625         is meaningless. And according to the Ref<>'s comment, empty object is not designed to be destructed.
626
627         * wtf/HashTable.h:
628         (WTF::KeyTraits>::deallocateTable):
629
630 2016-09-08  Filip Pizlo  <fpizlo@apple.com>
631
632         Heap::isMarked() shouldn't pay the price of concurrent lazy flipping
633         https://bugs.webkit.org/show_bug.cgi?id=161760
634
635         Reviewed by Mark Lam.
636
637         * wtf/MainThread.cpp:
638         (WTF::isMainThreadOrGCThread):
639         (WTF::mayBeGCThread):
640         * wtf/MainThread.h:
641
642 2016-09-08  Myles C. Maxfield  <mmaxfield@apple.com>
643
644         Support new emoji group candidates
645         https://bugs.webkit.org/show_bug.cgi?id=161664
646         <rdar://problem/24802695>
647         <rdar://problem/27666433>
648
649         Reviewed by Simon Fraser.
650
651         Update breaking rules.
652
653         * wtf/text/TextBreakIterator.cpp:
654         (WTF::cursorMovementIterator):
655
656 2016-09-07  JF Bastien  <jfbastien@apple.com>
657
658         bitwise_cast: allow const destination type
659         https://bugs.webkit.org/show_bug.cgi?id=161719
660
661         Reviewed by Saam Barati.
662
663         * wtf/StdLibExtras.h:
664         (WTF::bitwise_cast): allow `const To to = bitwise_cast<const To>(from);`
665
666 2016-09-07  Mark Lam  <mark.lam@apple.com>
667
668         Add CatchScope and force all exception checks to be via ThrowScope or CatchScope.
669         https://bugs.webkit.org/show_bug.cgi?id=161498
670
671         Reviewed by Geoffrey Garen.
672
673         * wtf/Platform.h:
674
675 2016-09-07  Youenn Fablet  <youenn@apple.com>
676
677         [Streams API] Separate compile flag for ReadableStream and WritableStream
678         https://bugs.webkit.org/show_bug.cgi?id=161044
679
680         Reviewed by Alex Christensen.
681
682         * wtf/FeatureDefines.h:
683
684 2016-09-06  Saam Barati  <sbarati@apple.com>
685
686         Make JSMap and JSSet faster
687         https://bugs.webkit.org/show_bug.cgi?id=160989
688
689         Reviewed by Filip Pizlo.
690
691         I made s_flagCount public in StringImpl since JSC's JITs now use this field.
692
693         * wtf/text/StringImpl.h:
694
695 2016-09-06  Commit Queue  <commit-queue@webkit.org>
696
697         Unreviewed, rolling out r205504.
698         https://bugs.webkit.org/show_bug.cgi?id=161645
699
700         Broke the iOS device build (Requested by ryanhaddad on
701         #webkit).
702
703         Reverted changeset:
704
705         "Make JSMap and JSSet faster"
706         https://bugs.webkit.org/show_bug.cgi?id=160989
707         http://trac.webkit.org/changeset/205504
708
709 2016-09-06  Saam Barati  <sbarati@apple.com>
710
711         Make JSMap and JSSet faster
712         https://bugs.webkit.org/show_bug.cgi?id=160989
713
714         Reviewed by Filip Pizlo.
715
716         I made s_flagCount public since JSC's JITs now use this field.
717
718         * wtf/text/StringImpl.h:
719
720 2016-09-06  Per Arne Vollan  <pvollan@apple.com>
721
722         [Win] Enable strict runtime stack buffer checks.
723         https://bugs.webkit.org/show_bug.cgi?id=161629
724
725         Reviewed by Brent Fulgham.
726
727         * wtf/Platform.h:
728
729 2016-09-06  Daniel Bates  <dabates@apple.com>
730
731         Remove EXTERN_C from WTF
732         https://bugs.webkit.org/show_bug.cgi?id=161090
733
734         Reviewed by Brent Fulgham.
735
736         Guard external C declarations in WTF_EXTERN_C_BEGIN, WTF_EXTERN_C_END.
737
738         * wtf/Compiler.h: Remove macro definition EXTERN_C.
739         * wtf/spi/cf/CFBundleSPI.h:
740         * wtf/spi/cocoa/NSMapTableSPI.h:
741         * wtf/spi/cocoa/SecuritySPI.h:
742         * wtf/spi/darwin/CommonCryptoSPI.h:
743         * wtf/spi/darwin/SandboxSPI.h:
744         * wtf/spi/darwin/XPCSPI.h:
745         * wtf/spi/darwin/dyldSPI.h:
746
747 2016-08-31  Filip Pizlo  <fpizlo@apple.com>
748
749         Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
750         https://bugs.webkit.org/show_bug.cgi?id=160125
751
752         Reviewed by Geoffrey Garen and Keith Miller.
753         
754         I needed tryFastAlignedMalloc() so I added it.
755
756         * wtf/FastMalloc.cpp:
757         (WTF::tryFastAlignedMalloc):
758         * wtf/FastMalloc.h:
759         * wtf/ParkingLot.cpp:
760         (WTF::ParkingLot::forEachImpl):
761         (WTF::ParkingLot::forEach): Deleted.
762         * wtf/ParkingLot.h:
763         (WTF::ParkingLot::parkConditionally):
764         (WTF::ParkingLot::unparkOne):
765         (WTF::ParkingLot::forEach):
766         * wtf/ScopedLambda.h:
767         (WTF::scopedLambdaRef):
768         * wtf/SentinelLinkedList.h:
769         (WTF::SentinelLinkedList::forEach):
770         (WTF::RawNode>::takeFrom):
771         * wtf/SimpleStats.h:
772         (WTF::SimpleStats::operator bool):
773         (WTF::SimpleStats::operator!): Deleted.
774
775 2016-09-02  JF Bastien  <jfbastien@apple.com>
776
777         bitwise_cast infinite loops if called from the default constructor in ToType
778         https://bugs.webkit.org/show_bug.cgi?id=161365
779
780         Reviewed by Saam Barati.
781
782         * wtf/StdLibExtras.h:
783         (WTF::bitwise_cast): use aggregate initialization to avoid ctor
784
785 2016-09-01  Anders Carlsson  <andersca@apple.com>
786
787         Use BlockPtr::fromCallable in WorkQueue::dispatch and WorkQueue::dispatchAfter
788         https://bugs.webkit.org/show_bug.cgi?id=161512
789
790         Reviewed by Chris Dumez.
791
792         This lets us get rid of leakCallable and adoptCallable.
793
794         * wtf/BlockPtr.h:
795         * wtf/Function.h:
796         * wtf/cocoa/WorkQueueCocoa.cpp:
797         (WTF::WorkQueue::dispatch):
798         (WTF::WorkQueue::dispatchAfter):
799
800 2016-09-01  Anders Carlsson  <andersca@apple.com>
801
802         add BlockPtr::fromCallable
803         https://bugs.webkit.org/show_bug.cgi?id=161504
804
805         Reviewed by Tim Horton.
806
807         BlockPtr::fromCallable lets you create an Objective-C block from any callable object - including lambdas that contain move-only types.
808         The block will be allocated on the heap so it doesn't ever need to be copied (which is how it can work with move-only types).
809
810         * wtf/BlockPtr.h:
811
812 2016-08-31  Keith Rollin  <krollin@apple.com>
813
814         WebKit should set a subsystem for os_log so it's easier to filter for WebKit log messages
815         https://bugs.webkit.org/show_bug.cgi?id=160969
816         <rdar://problem/26068734>
817
818         Reviewed by Simon Fraser.
819
820         Add support for attaching a subsystem and category when logging via
821         the RELEASE_LOG macros. This support is provided by adding subsystem
822         and category information to WTFLogChannel. An os_log_t object is then
823         created to enacpsulate that information. When using RELEASE_LOG to log
824         through that channel, the associated log object is used when calling
825         os_log.
826
827         To help support the inclusion of the subsystem and category
828         information in WTFLogChannel, the DECLARE_LOG_CHANNEL,
829         DEFINE_LOG_CHANNEL, and LOG_CHANNEL_ADDRESS macros that were defined
830         in various modules are consolidated and moved to Assertions.h.
831         DEFINE_LOG_CHANNEL is now defined to initialize the subsystem and
832         category.
833
834         * wtf/Assertions.cpp:
835         * wtf/Assertions.h:
836         * wtf/RefCountedLeakCounter.cpp:
837
838 2016-08-31  Alex Christensen  <achristensen@webkit.org>
839
840         Implement IPv6 parsing in URLParser
841         https://bugs.webkit.org/show_bug.cgi?id=161390
842
843         Reviewed by Darin Adler.
844
845         * wtf/ASCIICType.h:
846         (WTF::lowerNibbleToLowercaseASCIIHexDigit):
847         (WTF::upperNibbleToLowercaseASCIIHexDigit):
848
849 2016-08-30  Brady Eidson  <beidson@apple.com>
850
851         GameController.framework backend for gamepad API.
852         https://bugs.webkit.org/show_bug.cgi?id=161086
853
854         Reviewed by Alex Christensen.
855
856         * wtf/RunLoop.h:
857         (WTF::RunLoop::TimerBase::startOneShot):
858
859 2016-08-30  Mark Lam  <mark.lam@apple.com>
860
861         Introduce the ThrowScope and force every throw site to instantiate a ThrowScope.
862         https://bugs.webkit.org/show_bug.cgi?id=161171
863
864         Reviewed by Filip Pizlo and Geoffrey Garen.
865
866         * wtf/Platform.h:
867         - Introduced the ENABLE(THROW_SCOPE_VERIFICATION) flag.
868
869 2016-08-27  Alex Christensen  <achristensen@webkit.org>
870
871         URLParser should parse relative URLs
872         https://bugs.webkit.org/show_bug.cgi?id=161282
873
874         Reviewed by Darin Adler.
875
876         * wtf/text/StringView.h:
877         Use a std::reference_wrapper for the StringView& to make it reassignable so we can add an operator=.
878
879 2016-08-26  JF Bastien  <jfbastien@apple.com>
880
881         bitwise_cast uses inactive member of union
882         https://bugs.webkit.org/show_bug.cgi?id=161244
883
884         Reviewed by Benjamin Poulain.
885
886         * wtf/Compiler.h:
887         Add COMPILER_HAS_CLANG_FEATURE
888         * wtf/StdLibExtras.h:
889         (WTF::bitwise_cast):
890         Fix C++ UB, add trivially-copyable check.
891
892         bitwise_cast stores into a union with one type and reads with
893         another, which is technically C++ undefined behavior because it's
894         accessing the wrong active member of the union. The better way to
895         do this is through memcpy, which compilers optimize as well
896         because it's known-size in known-not-to-escape storage (for small
897         types they'll inline and then convert stack memory access to SSA
898         values which may be in-register if that makes sense, which would
899         be a move between int/FP registers at worst).
900
901         The C++ Standard's section [basic.types] explicitly blesses memcpy:
902
903           For any trivially copyable type T, if two pointers to T point to
904           distinct T objects obj1 and obj2, where neither obj1 nor obj2 is a
905           base-class subobject, if the underlying bytes (1.7) making up obj1
906           are copied into obj2, 42 obj2 shall subsequently hold the same
907           value as obj1.
908
909           [Example:
910             T* t1p;
911             T* t2p;
912             // provided that t2p points to an initialized object ...
913             std::memcpy(t1p, t2p, sizeof(T));
914             // at this point, every subobject of trivially copyable type in *t1p contains
915             // the same value as the corresponding subobject in *t2p
916           — end example ]
917
918         Whereas section [class.union] says:
919
920           In a union, at most one of the non-static data members can be
921           active at any time, that is, the value of at most one of the
922           non-static data members can be stored in a union at any time.
923
924         While we're at it, checking that sizeof(To) == sizeof(From) is
925         good, but we should also check that both types are trivially
926         copyable (can have a ctor, no dtor, and copy is defaulted as if by
927         memcpy for type and all subtypes). Unfortunately that trait isn't
928         implemented consistently in all recent compiler+stdlib
929         implementations, but recent clang has an equivalent builtin
930         (other compilers simply won't do the check, and will break on bots
931         with the right compilers which is better than the current silent
932         breakage). This builtin hack also avoids #include <type_traits>
933         which really doesn't save much.
934
935 2016-08-26  Johan K. Jensen  <johan_jensen@apple.com>
936
937         Web Inspector: Frontend should have access to Resource Timing information
938         https://bugs.webkit.org/show_bug.cgi?id=160095
939
940         Reviewed by Alex Christensen.
941
942         Add method to get elapsed time for any monotonic time.
943         Used by InspectorNetworkAgent.
944
945         * wtf/Stopwatch.h:
946         (WTF::Stopwatch::elapsedTimeSinceMonotonicTime):
947
948 2016-08-26  Csaba Osztrogonác  <ossy@webkit.org>
949
950         Fix the ENABLE(WEBASSEMBLY) build on Linux
951         https://bugs.webkit.org/show_bug.cgi?id=161197
952
953         Reviewed by Mark Lam.
954
955         * wtf/Platform.h:
956
957 2016-08-25  Yusuke Suzuki  <utatane.tea@gmail.com>
958
959         [DFG][FTL] Implement ES6 Generators in DFG / FTL
960         https://bugs.webkit.org/show_bug.cgi?id=152723
961
962         Reviewed by Filip Pizlo.
963
964         * wtf/FastBitVector.h:
965         (WTF::FastBitVector::FastBitVector):
966
967 2016-08-25  JF Bastien  <jfbastien@apple.com>
968
969         TryGetById should have a ValueProfile so that it can predict its output type
970         https://bugs.webkit.org/show_bug.cgi?id=160921
971
972         Reviewed by Saam Barati.
973
974         Add WTF_CONCAT to StdLibExtras.h
975
976         * wtf/StdLibExtras.h:
977
978 2016-08-25  Johan K. Jensen  <johan_jensen@apple.com>
979
980         Don't store networkLoadTiming in the disk cache
981         https://bugs.webkit.org/show_bug.cgi?id=161161
982
983         Reviewed by Antti Koivisto.
984
985         * wtf/Forward.h:
986         Remove Encode and Decode forward declarations.
987
988 2016-08-24  Yusuke Suzuki  <utatane.tea@gmail.com>
989
990         [JSC] Move generic data structures out of B3
991         https://bugs.webkit.org/show_bug.cgi?id=161155
992
993         Reviewed by Saam Barati.
994
995         Add IndexSet, IndexMap, and IndexedContainerIterator.
996
997         * WTF.xcodeproj/project.pbxproj:
998         * wtf/CMakeLists.txt:
999         * wtf/IndexMap.h: Copied from Source/JavaScriptCore/b3/B3IndexMap.h.
1000         (WTF::IndexMap::IndexMap):
1001         (WTF::IndexMap::resize):
1002         (WTF::IndexMap::clear):
1003         (WTF::IndexMap::size):
1004         (WTF::IndexMap::operator[]):
1005         * wtf/IndexSet.h: Renamed from Source/JavaScriptCore/b3/B3IndexSet.h.
1006         (WTF::IndexSet::IndexSet):
1007         (WTF::IndexSet::add):
1008         (WTF::IndexSet::addAll):
1009         (WTF::IndexSet::remove):
1010         (WTF::IndexSet::contains):
1011         (WTF::IndexSet::size):
1012         (WTF::IndexSet::isEmpty):
1013         (WTF::IndexSet::Iterable::Iterable):
1014         (WTF::IndexSet::Iterable::iterator::iterator):
1015         (WTF::IndexSet::Iterable::iterator::operator*):
1016         (WTF::IndexSet::Iterable::iterator::operator++):
1017         (WTF::IndexSet::Iterable::iterator::operator==):
1018         (WTF::IndexSet::Iterable::iterator::operator!=):
1019         (WTF::IndexSet::Iterable::begin):
1020         (WTF::IndexSet::Iterable::end):
1021         (WTF::IndexSet::values):
1022         (WTF::IndexSet::indices):
1023         (WTF::IndexSet::dump):
1024         * wtf/IndexedContainerIterator.h: Renamed from Source/JavaScriptCore/b3/B3IndexMap.h.
1025         (WTF::IndexedContainerIterator::IndexedContainerIterator):
1026         (WTF::IndexedContainerIterator::operator++):
1027         (WTF::IndexedContainerIterator::operator==):
1028         (WTF::IndexedContainerIterator::operator!=):
1029         (WTF::IndexedContainerIterator::findNext):
1030
1031 2016-08-24  Andreas Kling  <akling@apple.com>
1032
1033         Add WTF::isFastMallocEnabled().
1034         <https://webkit.org/b/160534>
1035
1036         Reviewed by Joseph Pecoraro.
1037
1038         * wtf/FastMalloc.cpp:
1039         (WTF::isFastMallocEnabled):
1040         * wtf/FastMalloc.h:
1041
1042 2016-08-23  Anders Carlsson  <andersca@apple.com>
1043
1044         Add enum traits and use them in the IPC::Decoder
1045         https://bugs.webkit.org/show_bug.cgi?id=161103
1046
1047         Reviewed by Sam Weinig.
1048
1049         Add EnumTraits.h which provides a forward declaration for WTF::EnumTraits as well as
1050         the WTF::isValidEnum function.
1051
1052         * WTF.xcodeproj/project.pbxproj:
1053         * wtf/EnumTraits.h: Added.
1054
1055 2016-08-24  Filip Pizlo  <fpizlo@apple.com>
1056
1057         Unreviewed, roll out r204901, r204897, r204866, r204856, r204854.
1058
1059         * wtf/FastMalloc.cpp:
1060         (WTF::tryFastAlignedMalloc): Deleted.
1061         * wtf/FastMalloc.h:
1062         * wtf/ParkingLot.cpp:
1063         (WTF::ParkingLot::forEach):
1064         (WTF::ParkingLot::forEachImpl): Deleted.
1065         * wtf/ParkingLot.h:
1066         (WTF::ParkingLot::parkConditionally):
1067         (WTF::ParkingLot::unparkOne):
1068         (WTF::ParkingLot::forEach): Deleted.
1069         * wtf/ScopedLambda.h:
1070         (WTF::scopedLambdaRef): Deleted.
1071
1072 2016-08-22  Filip Pizlo  <fpizlo@apple.com>
1073
1074         Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
1075         https://bugs.webkit.org/show_bug.cgi?id=160125
1076
1077         Reviewed by Geoffrey Garen.
1078         
1079         I needed tryFastAlignedMalloc() so I added it.
1080
1081         * wtf/FastMalloc.cpp:
1082         (WTF::fastAlignedMalloc):
1083         (WTF::tryFastAlignedMalloc):
1084         (WTF::fastAlignedFree):
1085         * wtf/FastMalloc.h:
1086
1087 2016-08-22  Keith Miller  <keith_miller@apple.com>
1088
1089         Actually enable the WASM build.
1090         https://bugs.webkit.org/show_bug.cgi?id=160933
1091
1092         Reviewed by Geoffrey Garen.
1093
1094         * wtf/FeatureDefines.h:
1095
1096 2016-08-17  Don Olmstead  <don.olmstead@am.sony.com>
1097
1098         Use find_library within Windows build
1099         https://bugs.webkit.org/show_bug.cgi?id=160904
1100
1101         Reviewed by Brent Fulgham.
1102
1103         * wtf/CMakeLists.txt:
1104
1105 2016-08-17  Anders Carlsson  <andersca@apple.com>
1106
1107         Move WKSignedPublicKeyAndChallengeString into WebCore and make it proper C++
1108         https://bugs.webkit.org/show_bug.cgi?id=160945
1109
1110         Reviewed by Dan Bernstein.
1111
1112         * wtf/RetainPtr.h:
1113         (WTF::RetainPtr::operator&):
1114         Cast this to the right type.
1115
1116         * wtf/spi/cocoa/SecuritySPI.h:
1117         Add new SPI.
1118
1119 2016-08-17  Antti Koivisto  <antti@apple.com>
1120
1121         Remove CSS_IMAGE_SET feature define
1122         https://bugs.webkit.org/show_bug.cgi?id=160944
1123
1124         Reviewed by Dean Jackson.
1125
1126         * wtf/FeatureDefines.h:
1127
1128 2016-08-16  Keith Miller  <keith_miller@apple.com>
1129
1130         Enable WebAssembly in the build.
1131         https://bugs.webkit.org/show_bug.cgi?id=160916
1132
1133         Reviewed by Benjamin Poulain.
1134
1135         This patch turns on WebAssembly on all the platforms that support B3.
1136         Turning on WebAssembly by default lets us check the build on every
1137         platform.
1138
1139         * wtf/FeatureDefines.h:
1140
1141 2016-08-16  Anders Carlsson  <andersca@apple.com>
1142
1143         Fix a thinko.
1144
1145         * wtf/Scope.h:
1146
1147 2016-08-16  Anders Carlsson  <andersca@apple.com>
1148
1149         Add WTF::ScopeExit
1150         https://bugs.webkit.org/show_bug.cgi?id=160908
1151
1152         Reviewed by Geoffrey Garen.
1153
1154         WTF::ScopeExit and WTF::makeScopeExit let you define an object that will invoke a function when the
1155         object goes out of scope. This is going to be used to avoid spagetti-code and gotos in a future patch.
1156
1157         The class is modeled after the LWG paper "P0052 - Generic Scope Guard and RAII Wrapper for the Standard Library".
1158
1159         * WTF.xcodeproj/project.pbxproj:
1160         * wtf/Scope.h: Added.
1161         (WTF::makeScopeExit):
1162
1163 2016-08-15  Anders Carlsson  <andersca@apple.com>
1164
1165         Add an address-of operator to RetainPtr
1166         https://bugs.webkit.org/show_bug.cgi?id=160879
1167
1168         Reviewed by Tim Horton.
1169
1170         This will make some security-related code from WebKitSystemInterface easier to port.
1171
1172         * wtf/HashIterators.h:
1173         (WTF::HashTableValuesIterator::get):
1174         * wtf/HashTable.h:
1175         (WTF::HashTableBucketInitializer<true>::initialize):
1176         Use std::addressof instead of &, in case & is overloaded.
1177
1178         * wtf/RetainPtr.h:
1179         (WTF::RetainPtr::operator&):
1180         Implement this.
1181
1182 2016-08-15  Sam Weinig  <sam@webkit.org>
1183
1184         Speed up compile times by not including wtf/Variant.h so much
1185         https://bugs.webkit.org/show_bug.cgi?id=160847
1186
1187         Reviewed by Alex Christensen and Saam Barati.
1188
1189         * wtf/Forward.h:
1190         Add forward declaration of std::variant.
1191
1192         * wtf/StdLibExtras.h:
1193         Remove references to std::variant. Move them to wtf/Variant.h
1194
1195 2016-08-15  Keith Miller  <keith_miller@apple.com>
1196
1197         Implement WASM Parser and B3 IR generator
1198         https://bugs.webkit.org/show_bug.cgi?id=160681
1199
1200         Reviewed by Benjamin Poulain.
1201
1202         * wtf/DataLog.h:
1203         (WTF::dataLogLn): Add a new dataLog function, dataLogLn that
1204         automagically includes a new line at the end of the print.
1205         * wtf/LEBDecoder.h:
1206         (decodeUInt32):
1207         (decodeInt32): Change the LEBDecoder to take a pointer and length
1208         rather than a Vector.
1209
1210 2016-08-15  Keith Rollin  <krollin@apple.com>
1211
1212         Rename LOG_ALWAYS
1213         https://bugs.webkit.org/show_bug.cgi?id=160768
1214
1215         Rename LOG_ALWAYS and friends, given that the first parameter to it is
1216         a boolean expression that determines whether or not logging should be
1217         performed.
1218
1219         Reviewed by Chris Dumez.
1220
1221         * wtf/Assertions.h:
1222
1223 2016-08-15  Joseph Pecoraro  <pecoraro@apple.com>
1224
1225         Remove unused includes of wtf headers
1226         https://bugs.webkit.org/show_bug.cgi?id=160839
1227
1228         Reviewed by Alex Christensen.
1229
1230         * wtf/BackwardsGraph.h:
1231         * wtf/DataLog.cpp:
1232         * wtf/WorkQueue.cpp:
1233         * wtf/text/StringImpl.cpp:
1234         * wtf/unicode/icu/CollatorICU.cpp:
1235
1236 2016-08-14  Daniel Bates  <dabates@apple.com>
1237
1238         Fix compiler errors when building iOS WebKit using the iOS 10 beta SDK
1239         https://bugs.webkit.org/show_bug.cgi?id=160725
1240
1241         Reviewed by Sam Weinig.
1242
1243         For now, disable OS_LOG when building with the iOS 10 beta SDK until
1244         we have the fix for <rdar://problem/27758343>.
1245
1246         * wtf/Platform.h:
1247
1248 2016-08-13  Dan Bernstein  <mitz@apple.com>
1249
1250         Build fix follow-up to r204433.
1251
1252         * wtf/StdLibExtras.h:
1253         (WTF::makeVisitor): Don’t use an auto return type.
1254
1255 2016-08-12  Sam Weinig  <sam@webkit.org>
1256
1257         Make variant only available when compiling for C++14 or greater
1258         https://bugs.webkit.org/show_bug.cgi?id=160813
1259
1260         Reviewed by Anders Carlsson.
1261
1262         * wtf/Compiler.h:
1263         * wtf/StdLibExtras.h:
1264         * wtf/Variant.h:
1265
1266 2016-08-11  Maureen Daum  <mdaum@apple.com>
1267
1268         Add NSButtonType to AppKitCompatibilityDeclarations.h.
1269         https://bugs.webkit.org/show_bug.cgi?id=160767.
1270
1271         Reviewed by Dan Bernstein.
1272
1273         Add NSButtonType to AppKitCompatibilityDeclarations.h so that we can use the new
1274         names but still build successfully on older OS versions.
1275
1276         * wtf/mac/AppKitCompatibilityDeclarations.h:
1277
1278 2016-08-10  Benjamin Poulain  <bpoulain@apple.com>
1279
1280         [JSC] TinyPtrSet::deleteListIfNecessary() no longer needs to test for reservedValue
1281         https://bugs.webkit.org/show_bug.cgi?id=160721
1282
1283         Reviewed by Sam Weinig.
1284
1285         Previously, TinyPtrSet was using a ThinFlag if there was no OutOfLineList.
1286         A side effect is that isThin() was false for reservedValue. When deleting
1287         the list, we had to consider both cases: isThin() and reservedValue.
1288
1289         In r204065, I changed the flag to a FatFlag to ensure TinyPtrSet can be initialized
1290         with bzero().
1291         This changes the value of isThin() of reservedValue to true since reservedValue
1292         does not have the FatFlag bit set.
1293         This patch removes the useless condition from deleteListIfNecessary().
1294
1295         * wtf/TinyPtrSet.h:
1296         (WTF::TinyPtrSet::deleteListIfNecessary):
1297
1298 2016-08-09  Sam Weinig  <sam@webkit.org>
1299
1300         Fix windows build.
1301
1302         * wtf/Variant.h:
1303         (std::experimental::__visit_helper2::__visit):
1304         MSVC does not support extended constexpr. Use a ternary operator instead of an if statement.
1305
1306 2016-08-06  Sam Weinig  <sam@webkit.org>
1307
1308         Replace NodeOrString with std::variant<RefPtr<Node>, String>
1309         https://bugs.webkit.org/show_bug.cgi?id=160638
1310
1311         Reviewed by Anders Carlsson.
1312
1313         * wtf/StdLibExtras.h:
1314         (WTF::Visitor::Visitor):
1315         (WTF::makeVisitor):
1316         Add WTF::makeVisitor() which takes a list of lambdas to use
1317         an an overload set for a visitor object.
1318
1319         Also, re-export std::experimental::variant (and helpers) in the std
1320         namespace using type aliasing.
1321
1322         * wtf/Variant.h:
1323         Make std::experimental::variant work in WebCore.
1324
1325 2016-08-06  Sam Weinig  <sam@webkit.org>
1326
1327         WTF needs a variant implementation
1328         https://bugs.webkit.org/show_bug.cgi?id=160618
1329
1330         Reviewed by Darin Adler.
1331
1332         Add an implementation of std::experimental::variant matching the C++17 draft http://wg21.link/n4606 
1333         taken from https://bitbucket.org/anthonyw/variant/src (5bce47fa788648f79e5ea1d77b0eef2e8f0b2999) and
1334         modified to support compiling without exceptions (where it used to throw, we lovingly CRASH()).
1335
1336         * WTF.xcodeproj/project.pbxproj:
1337         Add new file.
1338
1339         * wtf/Compiler.h:
1340         Add COMPILER_SUPPORTS define for C++ exceptions.
1341
1342         * wtf/Variant.h: Added.
1343
1344 2016-08-05  Keith Miller  <keith_miller@apple.com>
1345
1346         Add LEBDecoder and tests
1347         https://bugs.webkit.org/show_bug.cgi?id=160625
1348
1349         Reviewed by Benjamin Poulain.
1350
1351         Adds some LEB decoder functions to WTF. These are used in the
1352         WASM spec to encode numbers in a semi-compressed format.
1353
1354         * WTF.xcodeproj/project.pbxproj:
1355         * wtf/LEBDecoder.h: Added.
1356         (decodeUInt32):
1357         (decodeInt32):
1358
1359 2016-08-05  Keith Miller  <keith_miller@apple.com>
1360
1361         Delete out of date WASM code.
1362         https://bugs.webkit.org/show_bug.cgi?id=160603
1363
1364         Reviewed by Saam Barati.
1365
1366         Add Feature define for WebAssembly on mac.
1367
1368         * wtf/FeatureDefines.h:
1369
1370 2016-08-03  Csaba Osztrogonác  <ossy@webkit.org>
1371
1372         Lacking support on a arm-traditional disassembler.
1373         https://bugs.webkit.org/show_bug.cgi?id=123717
1374
1375         Reviewed by Mark Lam.
1376
1377         * wtf/Platform.h:
1378
1379 2016-08-02  Myles C. Maxfield  <mmaxfield@apple.com>
1380
1381         Update breaking rules to match ICU 57
1382         https://bugs.webkit.org/show_bug.cgi?id=160488
1383         <rdar://problem/25856238>
1384
1385         Reviewed by Darin Adler.
1386
1387         This patch fixes a typo in the uax14AssignmentsAfter rules which
1388         was causing flag emoji to have line breaking opportunities in their
1389         middles. It also fixes significant language issues for languages
1390         such as Hebrew, and adds correct breaking opportunities around
1391         hyphens.
1392
1393         * wtf/text/TextBreakIterator.cpp:
1394         (WTF::cursorMovementIterator):
1395         (WTF::uax14AssignmentsAfter):
1396         (WTF::uax14Forward):
1397         (WTF::uax14Reverse):
1398
1399 2016-08-02  Benjamin Poulain  <benjamin@webkit.org>
1400
1401         [JSC] Simplify the initialization of AbstractValue in the AbstractInterpreter
1402         https://bugs.webkit.org/show_bug.cgi?id=160370
1403
1404         Reviewed by Saam Barati.
1405
1406         * wtf/TinyPtrSet.h:
1407         (WTF::TinyPtrSet::isThin):
1408         (WTF::TinyPtrSet::set):
1409
1410 2016-08-02  Benjamin Poulain  <bpoulain@apple.com>
1411
1412         Clean up some useless AtomicString atoms
1413         https://bugs.webkit.org/show_bug.cgi?id=160471
1414
1415         Reviewed by Geoffrey Garen.
1416
1417         * wtf/text/AtomicString.h:
1418         * wtf/text/StringStatics.cpp:
1419         (WTF::AtomicString::init): Deleted.
1420
1421 2016-08-01  Benjamin Poulain  <bpoulain@apple.com>
1422
1423         [JSC][ARM64] Fix branchTest32/64 taking an immediate as mask
1424         https://bugs.webkit.org/show_bug.cgi?id=160439
1425
1426         Reviewed by Filip Pizlo.
1427
1428         * wtf/MathExtras.h:
1429         (getLSBSet):
1430         This was not working at all for MacroAssembler.
1431         Since TrustedImm32/64 are signed integers, the arithmetic shift would
1432         never get rid of the top bit and we get an infinite loop.
1433
1434 2016-07-29  Mark Lam  <mark.lam@apple.com>
1435
1436         Make StringView capable of being passed or returned in only 2 registers.
1437         https://bugs.webkit.org/show_bug.cgi?id=160344
1438
1439         Reviewed by Geoffrey Garen.
1440
1441         We just need to #if out copy and move constructors and assignment operators.
1442
1443         After this change, the following test code:
1444
1445             JS_EXPORT_PRIVATE StringView returnStringView(StringView sv)
1446             {
1447                 return sv;
1448             }
1449
1450         ... compiles to the following for x86_64:
1451
1452             __ZN3JSC16returnStringViewEN3WTF10StringViewE:
1453             000000000093fb20        pushq   %rbp
1454             000000000093fb21        movq    %rsp, %rbp
1455             000000000093fb24        movq    %rdi, %rax // Copy from arg word 0 to ret word 0.
1456             000000000093fb27        movq    %rsi, %rdx // Copy from arg word 1 to ret word 1.
1457             000000000093fb2a        popq    %rbp
1458             000000000093fb2b        retq
1459
1460         ... and this for arm64:
1461
1462             __ZN3JSC16returnStringViewEN3WTF10StringViewE:
1463             0000000000818504        ret // arg word 0 and 1 are in the same regs as ret word 0 and 1.
1464
1465         * wtf/text/StringView.h:
1466         (WTF::StringView::StringView):
1467         (WTF::StringView::~StringView):
1468         (WTF::StringView::operator=):
1469
1470 2016-07-29  Csaba Osztrogonác  <ossy@webkit.org>
1471
1472         Remove PassRef.h after r177259
1473         https://bugs.webkit.org/show_bug.cgi?id=160348
1474
1475         Reviewed by Andreas Kling.
1476
1477         * wtf/PassRef.h: Removed.
1478
1479 2016-07-28  Mark Lam  <mark.lam@apple.com>
1480
1481         StringView should have an explicit m_is8Bit field.
1482         https://bugs.webkit.org/show_bug.cgi?id=160282
1483         <rdar://problem/27327943>
1484
1485         Reviewed by Benjamin Poulain.
1486
1487         The current implementation reserves 1 bit in the 32-bit m_length field as an
1488         is16Bit flag.  As a result, a StringView is incapable of handling strings that
1489         have a length of 32-bit in size.  This results in a mismatch with the
1490         expectations of String, StringImpl, and JavaScriptCore's JSString which all
1491         support a 32-bit unsigned length.
1492
1493         This patch fixes this issue by introducing an explicit m_is8Bit field, thereby
1494         allowing m_length to be a full 32-bit again.
1495
1496         We also introduced a clear() convenience method to set the fields of StringView
1497         to empty values.  Previously, we were duplicating the code for clearing those
1498         fields.  We now call clear() in all those places instead.
1499
1500         Note: in clear(), we set m_is8Bit to true because we want an empty StringView
1501         to be 8-bit rather than 16-bit.  This is consistent with what the empty() method
1502         returns.
1503
1504         * wtf/text/StringView.h:
1505         (WTF::StringView::setUnderlyingString):
1506         (WTF::StringView::StringView):
1507         (WTF::StringView::operator=):
1508         (WTF::StringView::initialize):
1509         (WTF::StringView::clear):
1510         (WTF::StringView::empty):
1511         (WTF::StringView::length):
1512         (WTF::StringView::operator bool):
1513         (WTF::StringView::is8Bit):
1514         (WTF::StringView::substring):
1515         (WTF::StringView::getCharactersWithUpconvert):
1516         (WTF::StringView::toString):
1517         (WTF::StringView::toAtomicString):
1518         (WTF::StringView::toFloat):
1519         (WTF::StringView::toInt):
1520         (WTF::StringView::toIntStrict):
1521         (WTF::StringView::toStringWithoutCopying):
1522         (WTF::StringView::find):
1523
1524 2016-07-24  Filip Pizlo  <fpizlo@apple.com>
1525
1526         B3 should support multiple entrypoints
1527         https://bugs.webkit.org/show_bug.cgi?id=159391
1528
1529         Reviewed by Saam Barati.
1530
1531         * wtf/GraphNodeWorklist.h: Expose some handy functionality.
1532         (WTF::GraphNodeWorklist::pop):
1533         (WTF::GraphNodeWorklist::saw):
1534         (WTF::GraphNodeWorklist::seen):
1535         * wtf/VectorTraits.h: Fix a bug! Otherwise filling a vector of byte-sized enum classes doesn't work.
1536
1537 2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>
1538
1539         [macOS] Caret placement occurs in the middle of new emoji group candidates
1540         https://bugs.webkit.org/show_bug.cgi?id=160008
1541         <rdar://problem/27430111>
1542
1543         Reviewed by Simon Fraser.
1544
1545         r203330 added support for new emoji group candidates. This patch updates the rules
1546         governing caret placement around these new emoji groups.
1547
1548         * wtf/text/TextBreakIterator.cpp:
1549         (WTF::cursorMovementIterator):
1550
1551 2016-07-20  Rajeev Misra  <rajeevmisraforapple@gmail.com>
1552
1553         Remove unnecessary if check from ParkingLot.cpp
1554         https://bugs.webkit.org/show_bug.cgi?id=159961
1555
1556         Reviewed by Alex Christensen.
1557
1558         A good practice is to have as less conditional statement
1559         or special cases as possible in code. This change
1560         simply removes a unnecessary "if" statement for
1561         condition which was already evaluated by switch/case
1562         and thus there was no need to evaluate again.
1563
1564         * wtf/ParkingLot.cpp:
1565
1566 2016-07-18  Anders Carlsson  <andersca@apple.com>
1567
1568         WebKit nightly fails to build on macOS Sierra
1569         https://bugs.webkit.org/show_bug.cgi?id=159902
1570         rdar://problem/27365672
1571
1572         Reviewed by Tim Horton.
1573
1574         * icu/unicode/ucurr.h: Added.
1575         Add ucurr.h from ICU.
1576
1577 2016-07-18  Michael Saboff  <msaboff@apple.com>
1578
1579         ASSERTION FAILED: : (year >= 1970 && yearday >= 0) || (year < 1970 && yearday < 0) -- WTF/wtf/DateMath.cpp
1580         https://bugs.webkit.org/show_bug.cgi?id=159883
1581
1582         Reviewed by Filip Pizlo.
1583
1584         The function daysFrom1970ToYear() takes an integer year and returns a double result.
1585         The calculation uses 1970 as a baseline year and subtracts 1970 from the argument year.
1586         It does that subtraction using integer arithmetic, which given negative years close to
1587         INT_MIN can underflow as a result of subtracting 1970.  Since we want a double result,
1588         the fix is to cast year as a double before the subtraction, which eliminates the underflow.
1589
1590         * wtf/DateMath.cpp:
1591         (WTF::daysFrom1970ToYear):
1592
1593 2016-07-17  Filip Pizlo  <fpizlo@apple.com>
1594
1595         RegisterSet should use a Bitmap instead of a BitVector so that it never allocates memory and is trivial to copy
1596         https://bugs.webkit.org/show_bug.cgi?id=159863
1597
1598         Reviewed by Saam Barati.
1599         
1600         Give Bitmap all of the power of BitVector (except for automatic resizing). This means a
1601         variant of set() that takes a bool, and a bunch of helper methods (merge, filter, exclude,
1602         forEachSetBit, ==, !=, and hash).
1603
1604         * wtf/Bitmap.h:
1605         (WTF::WordType>::set):
1606         (WTF::WordType>::testAndSet):
1607         (WTF::WordType>::isFull):
1608         (WTF::WordType>::merge):
1609         (WTF::WordType>::filter):
1610         (WTF::WordType>::exclude):
1611         (WTF::WordType>::forEachSetBit):
1612         (WTF::=):
1613         (WTF::WordType>::hash):
1614
1615 2016-07-02  Filip Pizlo  <fpizlo@apple.com>
1616
1617         WTF::Lock should be fair eventually
1618         https://bugs.webkit.org/show_bug.cgi?id=159384
1619
1620         Reviewed by Geoffrey Garen.
1621         
1622         In https://webkit.org/blog/6161/locking-in-webkit/ we showed how relaxing the fairness of
1623         locks makes them fast. That post presented lock fairness as a trade-off between two
1624         extremes:
1625         
1626         - Barging. A barging lock, like WTF::Lock, releases the lock in unlock() even if there was a
1627           thread on the queue. If there was a thread on the queue, the lock is released and that
1628           thread is made runnable. That thread may then grab the lock, or some other thread may grab
1629           the lock first (it may barge). Usually, the barging thread is the thread that released the
1630           lock in the first place. This maximizes throughput but hurts fairness. There is no good
1631           theoretical bound on how unfair the lock may become, but empirical data suggests that it's
1632           fair enough for the cases we previously measured.
1633         
1634         - FIFO. A FIFO lock, like HandoffLock in ToyLocks.h, does not release the lock in unlock()
1635           if there is a thread waiting. If there is a thread waiting, unlock() will make that thread
1636           runnable and inform it that it now holds the lock. This ensures perfect round-robin
1637           fairness and allows us to reason theoretically about how long it may take for a thread to
1638           grab the lock. For example, if we know that only N threads are running and each one may
1639           contend on a critical section, and each one may hold the lock for at most S seconds, then
1640           the time it takes to grab the lock is N * S. Unfortunately, FIFO locks perform very badly
1641           in most cases. This is because for the common case of short critical sections, they force
1642           a context switch after each critical section if the lock is contended.
1643         
1644         This change makes WTF::Lock almost as fair as FIFO while still being as fast as barging.
1645         Thanks to this new algorithm, you can now have both of these things at the same time.
1646         
1647         This change makes WTF::Lock eventually fair. We can almost (more on the caveats below)
1648         guarantee that the time it takes to grab a lock is N * max(1ms, S). In other words, critical
1649         sections that are longer than 1ms are always fair. For shorter critical sections, the amount
1650         of time that any thread waits is 1ms times the number of threads. There are some caveats
1651         that arise from our use of randomness, but even then, in the limit as the critical section
1652         length goes to infinity, the lock becomes fair. The corner cases are unlikely to happen; our
1653         experiments show that the lock becomes exactly as fair as a FIFO lock for any critical
1654         section that is 1ms or longer.
1655         
1656         The fairness mechanism is broken into two parts. WTF::Lock can now choose to unlock a lock
1657         fairly or unfairly thanks to the new ParkingLot token mechanism. WTF::Lock knows when to use
1658         fair unlocking based on a timeout mechanism in ParkingLot called timeToBeFair.
1659         
1660         ParkingLot::unparkOne() and ParkingLot::parkConditionally() can now communicate with each
1661         other via a token. unparkOne() can pass a token, which parkConditionally() will return. This
1662         change also makes parkConditionally() a lot more precise about when it was unparked due to a
1663         call to unparkOne(). If unparkOne() is told that a thread was unparked then this thread is
1664         guaranteed to report that it was unparked rather than timing out, and that thread is
1665         guaranteed to get the token that unparkOne() passed. The token is an intptr_t. We use it as
1666         a boolean variable in WTF::Lock, but you could use it to pass arbitrary data structures. By
1667         default, the token is zero. WTF::Lock's unlock() will pass 1 as the token if it is doing
1668         fair unlocking. In that case, unlock() will not release the lock, and lock() will know that
1669         it holds the lock as soon as parkConditionally() returns. Note that this algorithm relies
1670         on unparkOne() invoking WTF::Lock's callback while the queue lock is held, so that WTF::Lock
1671         can make a decision about unlock strategy and inject a token while it has complete knowledge
1672         over the state of the queue. As such, it's not immediately obvious how to implement this
1673         algorithm on top of futexes. You really need ParkingLot!
1674         
1675         WTF::Lock does not use fair unlocking every time. We expose a new API, Lock::unlockFairly(),
1676         which forces the fair unlocking behavior. Additionally, ParkingLot now maintains a
1677         per-bucket stochastic fairness timeout. When the timeout fires, the unparkOne() callback
1678         sees UnparkResult::timeToBeFair = true. This timeout is set to be anywhere from 0ms to 1ms
1679         at random. When a dequeue happens and there are threads that actually get dequeued, we check
1680         if the time since the last unfair unlock (the last time timeToBeFair was set to true) is
1681         more than the timeout amount. If so, then we set timeToBeFair to true and reset the timeout.
1682         This means that in the absence of ParkingLot collisions, unfair unlocking is guaranteed to
1683         happen at least once per millisecond. It will happen at 2 KHz on average. If there are
1684         collisions, then each collision adds one millisecond to the worst case (and 0.5 ms to the
1685         average case). The reason why we don't just use a fixed 1ms timeout is that we want to avoid
1686         resonance. Imagine a program in which some thread acquires a lock at 1 KHz in-phase with the
1687         timeToBeFair timeout. Then this thread would be the benefactor of fairness to the detriment
1688         of everyone else. Randomness ensures that we aren't too fair to any one thread.
1689         
1690         Empirically, this is neutral on our major benchmarks like JetStream but it's an enormous
1691         improvement in LockFairnessTest. It's common for an unfair lock (either our BargingLock, the
1692         old WTF::Lock, any of the other futex-based locks that barge, or new os_unfair_lock) to
1693         allow only one thread to hold the lock during a whole second in which each thread is holding
1694         the lock for 1ms at a time. This is because in a barging lock, releasing a lock after
1695         holding it for 1ms and then reacquiring it immediately virtually ensures that none of the
1696         other threads can wake up in time to grab it before it's relocked. But the new WTF::Lock
1697         handles this case like a champ: each thread gets equal turns.
1698         
1699         Here's some data. If we launch 10 threads and have each of them run for 1 second while
1700         repeatedly holding a critical section for 1ms, then here's how many times each thread gets
1701         to hold the lock using the old WTF::Lock algorithm:
1702         
1703         799, 6, 1, 1, 1, 1, 1, 1, 1, 1
1704         
1705         One thread hogged the lock for almost the whole time! With the new WTF::Lock, the lock
1706         becomes totally fair:
1707         
1708         80, 79, 79, 79, 79, 79, 79, 80, 80, 79
1709         
1710         I don't know of anyone creating such an automatically-fair adaptive lock before, so I think
1711         that this is a pretty awesome advancement to the state of the art!
1712         
1713         This change is good for three reasons:
1714         
1715         - We do have long critical sections in WebKit and we don't want to have to worry about
1716           starvation. This reduces the likelihood that we will see starvation due to our lock
1717           strategy.
1718         
1719         - I was talking to ggaren about bmalloc's locking needs, and he wanted unlockFairly() or
1720           lockFairly() or some moral equivalent for the scavenger thread.
1721         
1722         - If we use a WTF::Lock to manage heap access in a multithreaded GC, we'll need the ability
1723           to unlock and relock without barging.
1724
1725         * benchmarks/LockFairnessTest.cpp:
1726         (main):
1727         * benchmarks/ToyLocks.h:
1728         * wtf/Condition.h:
1729         (WTF::ConditionBase::waitUntil):
1730         (WTF::ConditionBase::notifyOne):
1731         * wtf/Lock.cpp:
1732         (WTF::LockBase::lockSlow):
1733         (WTF::LockBase::unlockSlow):
1734         (WTF::LockBase::unlockFairlySlow):
1735         (WTF::LockBase::unlockSlowImpl):
1736         * wtf/Lock.h:
1737         (WTF::LockBase::try_lock):
1738         (WTF::LockBase::unlock):
1739         (WTF::LockBase::unlockFairly):
1740         (WTF::LockBase::isHeld):
1741         (WTF::LockBase::isFullyReset):
1742         * wtf/ParkingLot.cpp:
1743         (WTF::ParkingLot::parkConditionallyImpl):
1744         (WTF::ParkingLot::unparkOne):
1745         (WTF::ParkingLot::unparkOneImpl):
1746         (WTF::ParkingLot::unparkAll):
1747         * wtf/ParkingLot.h:
1748         (WTF::ParkingLot::parkConditionally):
1749         (WTF::ParkingLot::compareAndPark):
1750         (WTF::ParkingLot::unparkOne):
1751
1752 2016-07-17  Myles C. Maxfield  <mmaxfield@apple.com>
1753
1754         Support new emoji group candidates
1755         https://bugs.webkit.org/show_bug.cgi?id=159755
1756         <rdar://problem/27325521>
1757
1758         Reviewed by Dean Jackson.
1759
1760         This patch doesn't update the rules for our cursor movement iterator, because
1761         I don't know the language used for implementing these rules. These rules will
1762         be updated in the near future. When they do,
1763         editing/deleting/delete-emoji-expected.txt will need to be updated.
1764
1765         * wtf/text/TextBreakIterator.cpp:
1766         (WTF::cursorMovementIterator):
1767
1768 2016-07-16  Chris Dumez  <cdumez@apple.com>
1769
1770         Add move constructor / assignment operator to ListHashSet
1771         https://bugs.webkit.org/show_bug.cgi?id=159837
1772
1773         Reviewed by Darin Adler.
1774
1775         Add move constructor / assignment operator to ListHashSet.
1776
1777         * wtf/ListHashSet.h:
1778         (WTF::ListHashSetConstIterator::operator++):
1779         (WTF::U>::ListHashSet):
1780         (WTF::=):
1781         (WTF::U>::clear):
1782         (WTF::U>::appendNode):
1783         (WTF::U>::prependNode):
1784         (WTF::U>::deleteAllNodes):
1785         (WTF::ListHashSetNode::ListHashSetNode): Deleted.
1786
1787 2016-07-15  Chris Dumez  <cdumez@apple.com>
1788
1789         Use emptyString() / nullAtom when possible
1790         https://bugs.webkit.org/show_bug.cgi?id=159850
1791
1792         Reviewed by Ryosuke Niwa.
1793
1794         Use emptyString() / nullAtom when possible, for performance.
1795
1796         * wtf/text/AtomicString.cpp:
1797         (WTF::AtomicString::convertASCIICase):
1798
1799 2016-07-15  Chris Dumez  <cdumez@apple.com>
1800
1801         Unreviewed, rolling out r203304.
1802
1803         This is wrong because of Node* entries in the internal HashMap
1804
1805         Reverted changeset:
1806
1807         "Add move constructor / assignment operator to ListHashSet"
1808         https://bugs.webkit.org/show_bug.cgi?id=159837
1809         http://trac.webkit.org/changeset/203304
1810
1811 2016-07-15  Chris Dumez  <cdumez@apple.com>
1812
1813         Add move constructor / assignment operator to ListHashSet
1814         https://bugs.webkit.org/show_bug.cgi?id=159837
1815
1816         Reviewed by Alex Christensen.
1817
1818         Add move constructor / assignment operator to ListHashSet.
1819
1820         * wtf/ListHashSet.h:
1821
1822 2016-07-15  Geoffrey Garen  <ggaren@apple.com>
1823
1824         Added a makeRef<T> helper
1825         https://bugs.webkit.org/show_bug.cgi?id=159835
1826
1827         Reviewed by Andreas Kling.
1828
1829         Anders told me to!
1830
1831         * wtf/Ref.h:
1832         (WTF::makeRef): Helper function to do type inference for you.
1833
1834 2016-07-15  Ryan Haddad  <ryanhaddad@apple.com>
1835
1836         Unreviewed, rolling out r203266.
1837
1838         This change caused editing/deleting/delete-emoji.html to time
1839         out on El Capitan, crash under GuardMalloc
1840
1841         Reverted changeset:
1842
1843         "Support new emoji group candidates"
1844         https://bugs.webkit.org/show_bug.cgi?id=159755
1845         http://trac.webkit.org/changeset/203266
1846
1847 2016-07-15  Csaba Osztrogonác  <ossy@webkit.org>
1848
1849         Revert r202560 to fix the ARMv7 build with ARM instruction set
1850         https://bugs.webkit.org/show_bug.cgi?id=159707
1851
1852         Reviewed by Carlos Garcia Campos.
1853
1854         * wtf/Platform.h: Revert r202560.
1855
1856 2016-07-14  Myles C. Maxfield  <mmaxfield@apple.com>
1857
1858         Support new emoji group candidates
1859         https://bugs.webkit.org/show_bug.cgi?id=159755
1860         <rdar://problem/27325521>
1861
1862         Reviewed by Dean Jackson.
1863
1864         This patch doesn't update the rules for our cursor movement iterator, because
1865         I don't know the language used for implementing these rules. These rules will
1866         be updated in the near future. When they do,
1867         editing/deleting/delete-emoji-expected.txt will need to be updated.
1868
1869         * wtf/text/TextBreakIterator.cpp:
1870         (WTF::cursorMovementIterator):
1871
1872 2016-07-14  Alex Christensen  <achristensen@webkit.org>
1873
1874         Allow RefPtrs of const RefCounted types
1875         https://bugs.webkit.org/show_bug.cgi?id=158269
1876
1877         Reviewed by Anders Carlsson.
1878
1879         * wtf/RefCounted.h:
1880         (WTF::RefCountedBase::ref):
1881         (WTF::RefCountedBase::~RefCountedBase):
1882         (WTF::RefCountedBase::derefBase):
1883         (WTF::RefCounted::deref):
1884         Creating references to a const object does not really modify the object,
1885         so everything in RefCounted is now mutable, and ref and deref are const.
1886
1887 2016-07-14  Chris Dumez  <cdumez@apple.com>
1888
1889         Avoid an extra heap allocation when dispatching Functions to WorkQueue
1890         https://bugs.webkit.org/show_bug.cgi?id=158367
1891
1892         Reviewed by Anders Carlsson.
1893
1894         Avoid an extra heap allocation when dispatching Functions to WorkQueue
1895         by adding leakCallable() / adoptCallable() functions to Function.
1896
1897         * wtf/Function.h:
1898         * wtf/cocoa/WorkQueueCocoa.cpp:
1899         (WTF::WorkQueue::dispatch):
1900         (WTF::WorkQueue::dispatchAfter):
1901
1902 2016-07-13  Myles C. Maxfield  <mmaxfield@apple.com>
1903
1904         Addressing post-review comments after r203119
1905         https://bugs.webkit.org/show_bug.cgi?id=159749
1906
1907         Unreviewed.
1908
1909         * wtf/text/StringView.h:
1910         (WTF::StringView::CodePoints::Iterator::Iterator):
1911         (WTF::StringView::CodePoints::Iterator::operator*):
1912         (WTF::StringView::CodePoints::Iterator::operator==):
1913
1914 2016-07-13  Enrica Casucci  <enrica@apple.com>
1915
1916         Update supported platforms in xcconfig files to match the sdk names.
1917         https://bugs.webkit.org/show_bug.cgi?id=159728
1918
1919         Reviewed by Tim Horton.
1920
1921         * Configurations/Base.xcconfig:
1922
1923 2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>
1924
1925         [GTK] WebKitGtk+ uses too many file descriptors
1926         https://bugs.webkit.org/show_bug.cgi?id=152316
1927
1928         Reviewed by Michael Catanzaro.
1929
1930         Add helper functions to duplicate a file descriptor setting close on exec flag, and also to set close on exec
1931         flag to an existing file descriptor.
1932
1933         * wtf/UniStdExtras.h:
1934         * wtf/UniStdExtras.cpp
1935         (WTF::setCloseOnExec):
1936         (WTF::dupCloseOnExec):
1937
1938 2016-07-12  Benjamin Poulain  <bpoulain@apple.com>
1939
1940         [JSC] Array.prototype.join() fails some conformance tests
1941         https://bugs.webkit.org/show_bug.cgi?id=159657
1942
1943         Reviewed by Saam Barati.
1944
1945         * wtf/text/AtomicString.cpp:
1946         (WTF::AtomicString::number):
1947         * wtf/text/AtomicString.h:
1948
1949 2016-07-12  Commit Queue  <commit-queue@webkit.org>
1950
1951         Unreviewed, rolling out r203131.
1952         https://bugs.webkit.org/show_bug.cgi?id=159698
1953
1954         This change caused an existing LayoutTest to time out on debug
1955         testers (Requested by ryanhaddad on #webkit).
1956
1957         Reverted changeset:
1958
1959         "[JSC] Array.prototype.join() fails some conformance tests"
1960         https://bugs.webkit.org/show_bug.cgi?id=159657
1961         http://trac.webkit.org/changeset/203131
1962
1963 2016-07-12  Filip Pizlo  <fpizlo@apple.com>
1964
1965         platformUserPreferredLanguages on Mac should not try to put the region into the language
1966         https://bugs.webkit.org/show_bug.cgi?id=159693
1967
1968         Rubber stamped by Alexey Proskuryakov.
1969         
1970         Currently, navigator.language is the thing that we use as the BCP-47 tag in our Intl code
1971         when certain APIs are called without a locale argument.  That mostly makes sense, and is
1972         deeply wired into our engine.
1973
1974         In r200105, we made Intl aware of the region as a separate thing from the language by having
1975         platformUserPreferredLanguages() return something like a BCP-47 tag that was
1976         <language>-<region>.  For example, if I told System Preferences that I want to speak English
1977         but live in Poland then we'd get "en-pl".  This had the effect of making Intl APIs format
1978         dates using Polish formatting, for example.
1979
1980         But this is an odd change, since that same function also feeds into navigator.language.
1981         "en-pl" isn't what we want there, since my System Preferences settings aren't supposed to
1982         mean that I want to speak Polish-style English.  There's no such thing.
1983
1984         It may be worthwhile to wire the region settings more elegantly into Intl, but if we do that,
1985         it should be via a mechanism that is separate from navigator.language. So, this change simply
1986         reverts r200105.
1987
1988         * wtf/PlatformUserPreferredLanguagesMac.mm:
1989         (WTF::httpStyleLanguageCode):
1990         (WTF::platformUserPreferredLanguages):
1991         (WTF::isValidICUCountryCode): Deleted.
1992
1993 2016-07-12  Per Arne Vollan  <pvollan@apple.com>
1994
1995         [Win] Fix for build error when trying to version stamp dll.
1996         https://bugs.webkit.org/show_bug.cgi?id=159692
1997
1998         Reviewed by Brent Fulgham.
1999
2000         Use correct path to version stamp script.
2001
2002         * wtf/CMakeLists.txt:
2003
2004 2016-07-12  Benjamin Poulain  <bpoulain@apple.com>
2005
2006         [JSC] Array.prototype.join() fails some conformance tests
2007         https://bugs.webkit.org/show_bug.cgi?id=159657
2008
2009         Reviewed by Saam Barati.
2010
2011         * wtf/text/AtomicString.cpp:
2012         (WTF::AtomicString::number):
2013         * wtf/text/AtomicString.h:
2014
2015 2016-07-12  Myles C. Maxfield  <mmaxfield@apple.com>
2016
2017         Relax ordering requirements on StringView::CodePoints iterator
2018         https://bugs.webkit.org/show_bug.cgi?id=159609
2019
2020         Reviewed by Darin Adler.
2021
2022         Previously, there was a requirement where if you use a CodePoints
2023         iterator, you couldn't dereference twice in a row or increment
2024         twice in a row. This restriction is unnecessary.
2025
2026         * wtf/text/StringView.h:
2027         (WTF::StringView::CodePoints::Iterator::Iterator):
2028         (WTF::StringView::CodePoints::Iterator::advanceCurrentCodePoint):
2029         (WTF::StringView::CodePoints::Iterator::operator*):
2030         (WTF::StringView::CodePoints::Iterator::operator==):
2031
2032 2016-07-12  Csaba Osztrogonác  <ossy@webkit.org>
2033
2034         JSCOnly bulidfix after r203078
2035         https://bugs.webkit.org/show_bug.cgi?id=159669
2036
2037         Reviewed by Yusuke Suzuki.
2038
2039         * wtf/PlatformJSCOnly.cmake:
2040         * wtf/text/jsconly/TextBreakIteratorInternalICUJSCOnly.cpp: Added.
2041         (WTF::currentSearchLocaleID):
2042         (WTF::currentTextBreakLocaleID):
2043
2044 2016-07-12  Per Arne Vollan  <pvollan@apple.com>
2045
2046         [Win] DLLs are missing version information.
2047         https://bugs.webkit.org/show_bug.cgi?id=159349
2048
2049         Reviewed by Brent Fulgham.
2050
2051         Generate autoversion.h and run perl version stamp utility.
2052
2053         * wtf/CMakeLists.txt:
2054
2055 2016-07-11  Myles C. Maxfield  <mmaxfield@apple.com>
2056
2057         Implement grapheme cluster iterator on StringView
2058         https://bugs.webkit.org/show_bug.cgi?id=159598
2059
2060         Reviewed by Anders Carlsson.
2061
2062         This is in preparation for honoring the second argument to FontFaceSet.load().
2063
2064         * wtf/text/StringView.cpp:
2065         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
2066         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator++):
2067         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator*):
2068         (WTF::StringView::GraphemeClusters::Iterator::Impl::operator==):
2069         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
2070         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
2071         (WTF::StringView::GraphemeClusters::Iterator::~Iterator):
2072         (WTF::StringView::GraphemeClusters::Iterator::operator*):
2073         (WTF::StringView::GraphemeClusters::Iterator::operator==):
2074         (WTF::StringView::GraphemeClusters::Iterator::operator!=):
2075         * wtf/text/StringView.h:
2076         (WTF::StringView::GraphemeClusters::GraphemeClusters):
2077         * text/TextBreakIterator.cpp:
2078         (WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):
2079         * text/TextBreakIterator.h:
2080
2081 2016-07-10  Myles C. Maxfield  <mmaxfield@apple.com>
2082
2083         Move breaking iterator code to WTF
2084         https://bugs.webkit.org/show_bug.cgi?id=159594
2085
2086         Reviewed by Alex Christensen.
2087
2088         This is in preparation for giving StringView a GraphemeClusters iterator.
2089         Such an interator needs to be implemented on top of our breaking iterator
2090         code.
2091
2092         * WTF.xcodeproj/project.pbxproj:
2093         * icu/unicode/ubrk.h: Added.
2094         * icu/unicode/utext.h: Renamed from Source/WebCore/icu/unicode/utext.h.
2095         * wtf/CMakeLists.txt:
2096         * wtf/PlatformEfl.cmake:
2097         * wtf/PlatformGTK.cmake:
2098         * wtf/PlatformMac.cmake:
2099         * wtf/PlatformWin.cmake:
2100         * wtf/TinyLRUCache.h:
2101         * wtf/text/LineBreakIteratorPoolICU.h: Renamed from Source/WebCore/platform/text/LineBreakIteratorPoolICU.h.
2102         (WTF::LineBreakIteratorPool::LineBreakIteratorPool):
2103         (WTF::LineBreakIteratorPool::sharedPool):
2104         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
2105         (WTF::LineBreakIteratorPool::take):
2106         (WTF::LineBreakIteratorPool::put):
2107         * wtf/text/TextBreakIterator.cpp: Renamed from Source/WebCore/platform/text/TextBreakIterator.cpp.
2108         (WTF::initializeIterator):
2109         (WTF::initializeIteratorWithRules):
2110         (WTF::setTextForIterator):
2111         (WTF::setContextAwareTextForIterator):
2112         (WTF::wordBreakIterator):
2113         (WTF::sentenceBreakIterator):
2114         (WTF::cursorMovementIterator):
2115         (WTF::acquireLineBreakIterator):
2116         (WTF::releaseLineBreakIterator):
2117         (WTF::mapLineIteratorModeToRules):
2118         (WTF::isCJKLocale):
2119         (WTF::openLineBreakIterator):
2120         (WTF::closeLineBreakIterator):
2121         (WTF::compareAndSwapNonSharedCharacterBreakIterator):
2122         (WTF::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):
2123         (WTF::NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator):
2124         (WTF::textBreakFirst):
2125         (WTF::textBreakLast):
2126         (WTF::textBreakNext):
2127         (WTF::textBreakPrevious):
2128         (WTF::textBreakPreceding):
2129         (WTF::textBreakFollowing):
2130         (WTF::textBreakCurrent):
2131         (WTF::isTextBreak):
2132         (WTF::isWordTextBreak):
2133         (WTF::numGraphemeClusters):
2134         (WTF::numCharactersInGraphemeClusters):
2135         * wtf/text/TextBreakIterator.h: Renamed from Source/WebCore/platform/text/TextBreakIterator.h.
2136         (WTF::LazyLineBreakIterator::LazyLineBreakIterator):
2137         (WTF::LazyLineBreakIterator::~LazyLineBreakIterator):
2138         (WTF::LazyLineBreakIterator::string):
2139         (WTF::LazyLineBreakIterator::isLooseCJKMode):
2140         (WTF::LazyLineBreakIterator::lastCharacter):
2141         (WTF::LazyLineBreakIterator::secondToLastCharacter):
2142         (WTF::LazyLineBreakIterator::setPriorContext):
2143         (WTF::LazyLineBreakIterator::updatePriorContext):
2144         (WTF::LazyLineBreakIterator::resetPriorContext):
2145         (WTF::LazyLineBreakIterator::priorContextLength):
2146         (WTF::LazyLineBreakIterator::get):
2147         (WTF::LazyLineBreakIterator::resetStringAndReleaseIterator):
2148         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*):
2149         * wtf/text/TextBreakIteratorInternalICU.h: Renamed from Source/WebCore/platform/text/TextBreakIteratorInternalICU.h.
2150         * wtf/text/efl/TextBreakIteratorInternalICUEfl.cpp: Renamed from Source/WebCore/platform/text/efl/TextBreakIteratorInternalICUEfl.cpp.
2151         (WebCore::currentSearchLocaleID):
2152         (WebCore::currentTextBreakLocaleID):
2153         * wtf/text/gtk/TextBreakIteratorInternalICUGtk.cpp: Renamed from Source/WebCore/platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp.
2154         (WebCore::currentSearchLocaleID):
2155         (WebCore::currentTextBreakLocaleID):
2156         * wtf/text/icu/UTextProvider.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProvider.cpp.
2157         (WTF::fixPointer):
2158         (WTF::uTextCloneImpl):
2159         * wtf/text/icu/UTextProvider.h: Renamed from Source/WebCore/platform/text/icu/UTextProvider.h.
2160         (WTF::uTextProviderContext):
2161         (WTF::initializeContextAwareUTextProvider):
2162         (WTF::uTextAccessPinIndex):
2163         (WTF::uTextAccessInChunkOrOutOfRange):
2164         * wtf/text/icu/UTextProviderLatin1.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp.
2165         (WTF::uTextLatin1Clone):
2166         (WTF::uTextLatin1NativeLength):
2167         (WTF::uTextLatin1Access):
2168         (WTF::uTextLatin1Extract):
2169         (WTF::uTextLatin1MapOffsetToNative):
2170         (WTF::uTextLatin1MapNativeIndexToUTF16):
2171         (WTF::uTextLatin1Close):
2172         (WTF::openLatin1UTextProvider):
2173         (WTF::textLatin1ContextAwareGetCurrentContext):
2174         (WTF::textLatin1ContextAwareMoveInPrimaryContext):
2175         (WTF::textLatin1ContextAwareSwitchToPrimaryContext):
2176         (WTF::textLatin1ContextAwareMoveInPriorContext):
2177         (WTF::textLatin1ContextAwareSwitchToPriorContext):
2178         (WTF::uTextLatin1ContextAwareClone):
2179         (WTF::uTextLatin1ContextAwareNativeLength):
2180         (WTF::uTextLatin1ContextAwareAccess):
2181         (WTF::uTextLatin1ContextAwareExtract):
2182         (WTF::uTextLatin1ContextAwareClose):
2183         (WTF::openLatin1ContextAwareUTextProvider):
2184         * wtf/text/icu/UTextProviderLatin1.h: Renamed from Source/WebCore/platform/text/icu/UTextProviderLatin1.h.
2185         * wtf/text/icu/UTextProviderUTF16.cpp: Renamed from Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp.
2186         (WTF::textUTF16ContextAwareGetCurrentContext):
2187         (WTF::textUTF16ContextAwareMoveInPrimaryContext):
2188         (WTF::textUTF16ContextAwareSwitchToPrimaryContext):
2189         (WTF::textUTF16ContextAwareMoveInPriorContext):
2190         (WTF::textUTF16ContextAwareSwitchToPriorContext):
2191         (WTF::uTextUTF16ContextAwareClone):
2192         (WTF::uTextUTF16ContextAwareNativeLength):
2193         (WTF::uTextUTF16ContextAwareAccess):
2194         (WTF::uTextUTF16ContextAwareExtract):
2195         (WTF::uTextUTF16ContextAwareClose):
2196         (WTF::openUTF16ContextAwareUTextProvider):
2197         * wtf/text/icu/UTextProviderUTF16.h: Renamed from Source/WebCore/platform/text/icu/UTextProviderUTF16.h.
2198         * wtf/text/mac/TextBreakIteratorInternalICUMac.mm: Renamed from Source/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm.
2199         (WTF::textBreakLocalePreference):
2200         (WTF::topLanguagePreference):
2201         (WTF::getLocale):
2202         (WTF::getSearchLocale):
2203         (WTF::currentSearchLocaleID):
2204         (WTF::getTextBreakLocale):
2205         (WTF::currentTextBreakLocaleID):
2206         * wtf/text/win/TextBreakIteratorInternalICUWin.cpp: Renamed from Source/WebCore/platform/text/win/TextBreakIteratorInternalICUWin.cpp.
2207         (WebCore::currentSearchLocaleID):
2208         (WebCore::currentTextBreakLocaleID):
2209
2210 2016-07-08  Commit Queue  <commit-queue@webkit.org>
2211
2212         Unreviewed, rolling out r202799.
2213         https://bugs.webkit.org/show_bug.cgi?id=159568
2214
2215         Caused build failure (Requested by perarne on #webkit).
2216
2217         Reverted changeset:
2218
2219         "[Win] DLLs are missing version information."
2220         https://bugs.webkit.org/show_bug.cgi?id=159349
2221         http://trac.webkit.org/changeset/202799
2222
2223 2016-07-08  Jiewen Tan  <jiewen_tan@apple.com>
2224
2225         Define DYLD_MACOSX_VERSION_10_12
2226         https://bugs.webkit.org/show_bug.cgi?id=159525
2227         <rdar://problem/26250296>
2228
2229         Reviewed by Brent Fulgham.
2230
2231         * wtf/spi/darwin/dyldSPI.h:
2232
2233 2016-07-01  Jer Noble  <jer.noble@apple.com>
2234
2235         REGRESSION (r202641): Netflix playback stalls after a few seconds
2236         https://bugs.webkit.org/show_bug.cgi?id=159365
2237
2238         Reviewed by Eric Carlson.
2239
2240         Add a isBetween() convenience method.
2241
2242         * wtf/MediaTime.cpp:
2243         (WTF::MediaTime::isBetween):
2244         * wtf/MediaTime.h:
2245
2246 2016-07-03  Per Arne Vollan  <pvollan@apple.com>
2247
2248         [Win] DLLs are missing version information.
2249         https://bugs.webkit.org/show_bug.cgi?id=159349
2250
2251         Reviewed by Brent Fulgham.
2252
2253         Generate autoversion.h in the prebuild step.
2254         Run the perl version stamp utility.
2255
2256         * wtf/CMakeLists.txt:
2257
2258 2016-07-03  Saam Barati  <sbarati@apple.com>
2259
2260         BytecodeGenerator::getVariablesUnderTDZ is too conservative
2261         https://bugs.webkit.org/show_bug.cgi?id=159387
2262
2263         Reviewed by Filip Pizlo.
2264
2265         I've templatized SmallPtrSet on its SmallArraySize instead
2266         of it always being 8.  
2267
2268         * wtf/SmallPtrSet.h:
2269         (WTF::SmallPtrSet::SmallPtrSet):
2270         (WTF::SmallPtrSet::add):
2271         (WTF::SmallPtrSet::iterator::operator!=):
2272         (WTF::SmallPtrSet::bucket):
2273
2274 2016-07-03  Filip Pizlo  <fpizlo@apple.com>
2275
2276         Ugh. Once again, unreviewed, roll out unintentional commit in r202790.
2277
2278         * benchmarks/LockFairnessTest.cpp:
2279         (main):
2280
2281 2016-07-02  Dan Bernstein  <mitz@apple.com>
2282
2283         Build fix.
2284
2285         * wtf/Assertions.cpp:
2286
2287 2016-07-02  Filip Pizlo  <fpizlo@apple.com>
2288
2289         Unreviewed, roll back unintentional commit in r202778.
2290
2291         * benchmarks/LockFairnessTest.cpp:
2292         (main):
2293
2294 2016-07-01  Jer Noble  <jer.noble@apple.com>
2295
2296         Deadlock inside -[WebCoreNSURLSession dealloc]
2297         https://bugs.webkit.org/show_bug.cgi?id=159331
2298         <rdar://problem/27122716>
2299
2300         Reviewed by Alex Christensen.
2301
2302         A Function<> object can wrap any callable type, including a C++ lambda.
2303
2304         dispatchFunctionsFromMainThread() holds a lock while iterating over the functions in
2305         functionQueue(), and during ths iteration, the previous callable object is destroyed by
2306         assigning the result of functionQueue().takeFirst(). Because lambdas (and other callables,
2307         like functors) can own objects, destroying this callable can have side effects, and if one
2308         of those side effects is to call callOnMainThread(), this can deadlock.
2309
2310         Move this side-effect-having call outside the locked block by clearing the function object
2311         immediately after calling it.
2312
2313         * wtf/MainThread.cpp:
2314         (WTF::dispatchFunctionsFromMainThread):
2315
2316 2016-06-29  Jer Noble  <jer.noble@apple.com>
2317
2318         Adopt MediaRemote.
2319         https://bugs.webkit.org/show_bug.cgi?id=159250
2320
2321         Reviewed by Eric Carlson.
2322
2323         Add USE_MEDIAREMOTE.
2324
2325         * wtf/Platform.h:
2326
2327 2016-06-28  Commit Queue  <commit-queue@webkit.org>
2328
2329         Unreviewed, rolling out r202580.
2330         https://bugs.webkit.org/show_bug.cgi?id=159245
2331
2332         Caused all WKTR tests to fail on GuardMalloc and Production
2333         only for unknown reasons, investigating offline. (Requested by
2334         brrian on #webkit).
2335
2336         Reverted changeset:
2337
2338         "RunLoop::Timer should use constructor templates instead of
2339         class templates"
2340         https://bugs.webkit.org/show_bug.cgi?id=159153
2341         http://trac.webkit.org/changeset/202580
2342
2343 2016-06-28  Brian Burg  <bburg@apple.com>
2344
2345         RunLoop::Timer should use constructor templates instead of class templates
2346         https://bugs.webkit.org/show_bug.cgi?id=159153
2347
2348         Reviewed by Alex Christensen.
2349
2350         Refactor RunLoop::Timer to align with WebCore::Timer. Use a constructor
2351         template instead of a class template. Store a bound std::function rather than
2352         a templated member and function. Add a constructor that takes a std::function.
2353
2354         * wtf/RunLoop.h:
2355         (WTF::RunLoop::Timer::Timer):
2356         (WTF::RunLoop::Timer::fired):
2357
2358 2016-06-28  Tomas Popela  <tpopela@redhat.com>
2359
2360         THUMB2 support not correctly detected on Fedora with GCC 6.1.
2361         https://bugs.webkit.org/show_bug.cgi?id=159083
2362
2363         Reviewed by Carlos Garcia Campos.
2364
2365         On Fedora 24 with GCC 6.1. the __thumb2__ and __thumb__ are not
2366         defined so the detection of THUMB2 support will fail. Look also
2367         whether the __ARM_ARCH_ISA_THUMB is defined to fix the THUMB2
2368         detection.
2369
2370         * wtf/Platform.h:
2371
2372 2016-06-27  Joseph Pecoraro  <pecoraro@apple.com>
2373
2374         Remove now unused WTF::findNextLineStart
2375         https://bugs.webkit.org/show_bug.cgi?id=159157
2376
2377         Reviewed by Mark Lam.
2378
2379         Unused after r202498.
2380
2381         * wtf/text/StringImpl.cpp:
2382         (WTF::StringImpl::findNextLineStart): Deleted.
2383         * wtf/text/StringImpl.h:
2384         (WTF::findNextLineStart): Deleted.
2385         * wtf/text/WTFString.h:
2386         (WTF::String::findNextLineStart): Deleted.
2387
2388 2016-06-21  Anders Carlsson  <andersca@apple.com>
2389
2390         Rename NoncopyableFunction to Function
2391         https://bugs.webkit.org/show_bug.cgi?id=158354
2392
2393         Reviewed by Chris Dumez.
2394
2395         * WTF.xcodeproj/project.pbxproj:
2396         * wtf/CrossThreadTask.h:
2397         (WTF::CrossThreadTask::CrossThreadTask):
2398         * wtf/Function.h: Renamed from Source/WTF/wtf/NoncopyableFunction.h.
2399         * wtf/FunctionDispatcher.h:
2400         * wtf/MainThread.cpp:
2401         (WTF::functionQueue):
2402         (WTF::dispatchFunctionsFromMainThread):
2403         (WTF::callOnMainThread):
2404         * wtf/MainThread.h:
2405         * wtf/RunLoop.cpp:
2406         (WTF::RunLoop::performWork):
2407         (WTF::RunLoop::dispatch):
2408         * wtf/RunLoop.h:
2409         * wtf/WorkQueue.h:
2410         * wtf/cocoa/WorkQueueCocoa.cpp:
2411         (WTF::WorkQueue::dispatch):
2412         (WTF::WorkQueue::dispatchAfter):
2413         * wtf/efl/DispatchQueueWorkItemEfl.h:
2414         (WorkItem::WorkItem):
2415         (TimerWorkItem::create):
2416         (TimerWorkItem::TimerWorkItem):
2417         * wtf/efl/WorkQueueEfl.cpp:
2418         (WTF::WorkQueue::dispatch):
2419         (WTF::WorkQueue::dispatchAfter):
2420         * wtf/generic/RunLoopGeneric.cpp:
2421         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2422         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2423         (WTF::RunLoop::dispatchAfter):
2424         * wtf/generic/WorkQueueGeneric.cpp:
2425         (WorkQueue::dispatch):
2426         (WorkQueue::dispatchAfter):
2427         * wtf/glib/RunLoopGLib.cpp:
2428         (WTF::DispatchAfterContext::DispatchAfterContext):
2429         (WTF::RunLoop::dispatchAfter):
2430         * wtf/win/WorkItemWin.cpp:
2431         (WTF::WorkItemWin::WorkItemWin):
2432         (WTF::WorkItemWin::create):
2433         (WTF::HandleWorkItem::HandleWorkItem):
2434         (WTF::HandleWorkItem::createByAdoptingHandle):
2435         * wtf/win/WorkItemWin.h:
2436         (WTF::WorkItemWin::function):
2437         * wtf/win/WorkQueueWin.cpp:
2438         (WTF::WorkQueue::dispatch):
2439         (WTF::WorkQueue::dispatchAfter):
2440
2441 2016-06-23  David Kilzer  <ddkilzer@apple.com>
2442
2443         REGRESSION (r202380): iOS 9.x internal builds are broken
2444
2445         Follow-up fix for: Enable window.open() for existing versions of Secret Society
2446         <https://webkit.org/b/159049>
2447         <rdar://problem/26528349>
2448
2449         * wtf/spi/darwin/dyldSPI.h: Define DYLD_IOS_VERSION_10_0 when
2450         building on internal SDKs older than iOS 10.
2451
2452 2016-06-23  John Wilander  <wilander@apple.com>
2453
2454         Enable window.open() for existing versions of Secret Society
2455         https://bugs.webkit.org/show_bug.cgi?id=159049
2456         <rdar://problem/26528349>
2457         
2458         Reviewed by Andy Estes.
2459
2460         The Secret Society Hidden Mystery app has a broken version check treating iOS 10
2461         as iOS 1 on iPads. Therefore it believes it can use window.open() in a tap
2462         handler. We should allow the existing versions of the app to do this to not break
2463         them.
2464
2465         * wtf/spi/darwin/dyldSPI.h:
2466             Added DYLD_IOS_VERSION_10_0.
2467
2468 2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>
2469
2470         Add system tracing points for requestAnimationFrame() workflow
2471         https://bugs.webkit.org/show_bug.cgi?id=158723
2472
2473         Reviewed by Simon Fraser.
2474
2475         Define new trace score codes for requestAnimationFrame().
2476
2477         * wtf/SystemTracing.h:
2478         (WTF::TracePoint):
2479         (WTF::TraceScope::TraceScope):
2480         (WTF::TraceScope::~TraceScope):
2481
2482 2016-06-20  Commit Queue  <commit-queue@webkit.org>
2483
2484         Unreviewed, rolling out r202136.
2485         https://bugs.webkit.org/show_bug.cgi?id=158932
2486
2487         JSBench wasn't regressed by r202002 and r202111 on iOS after
2488         all (Requested by rniwa_ on #webkit).
2489
2490         Reverted changeset:
2491
2492         "Unreviewed, rolling out r202002 and r202111."
2493         https://bugs.webkit.org/show_bug.cgi?id=158638
2494         http://trac.webkit.org/changeset/202136
2495
2496 2016-06-17  Chris Dumez  <cdumez@apple.com>
2497
2498         Optimize parseCacheHeader() by using StringView
2499         https://bugs.webkit.org/show_bug.cgi?id=158891
2500
2501         Reviewed by Darin Adler.
2502
2503         Add a StringView::find() overload which takes a CharacterMatchFunction
2504         to match the one on String.
2505
2506         * wtf/text/StringView.h:
2507         (WTF::StringView::find):
2508
2509 2016-06-17  Mark Lam  <mark.lam@apple.com>
2510
2511         OOM Assertion failure in JSON.stringify.
2512         https://bugs.webkit.org/show_bug.cgi?id=158794
2513         <rdar://problem/26826254>
2514
2515         Reviewed by Saam Barati.
2516
2517         The bug was actually in StringBuilder::appendQuotedJSONString() where it failed
2518         to detect an imminent unsigned int overflow.  The fix is to use Checked<unsigned>
2519         for the needed math, and RELEASE_ASSERT afterwards that we did not overflow.
2520
2521         I also added more assertions to detect sooner if any there are any problems with
2522         StringBuilder's m_buffer or m_length being incorrectly sized.  These assertions
2523         have been run on the JSC and layout tests without any issue.
2524
2525         * wtf/text/StringBuilder.cpp:
2526         (WTF::StringBuilder::resize):
2527         (WTF::StringBuilder::allocateBuffer):
2528         (WTF::StringBuilder::allocateBufferUpConvert):
2529         (WTF::StringBuilder::reallocateBuffer<LChar>):
2530         (WTF::StringBuilder::reallocateBuffer<UChar>):
2531         (WTF::StringBuilder::reserveCapacity):
2532         (WTF::StringBuilder::appendUninitializedSlow):
2533         (WTF::StringBuilder::append):
2534         (WTF::StringBuilder::appendQuotedJSONString):
2535         * wtf/text/StringBuilder.h:
2536         (WTF::StringBuilder::swap):
2537
2538 2016-06-14  Filip Pizlo  <fpizlo@apple.com>
2539
2540         Baseline JIT should be concurrent
2541         https://bugs.webkit.org/show_bug.cgi?id=158755
2542
2543         Reviewed by Geoffrey Garen.
2544         
2545         The concurrent baseline JIT needs to be able to clone bytecode to get a consistent snapshot.
2546         So, this adds such a method.
2547
2548         * wtf/RefCountedArray.h:
2549         (WTF::RefCountedArray::RefCountedArray):
2550         (WTF::RefCountedArray::clone):
2551
2552 2016-06-16  Chris Dumez  <cdumez@apple.com>
2553
2554         No need to ref connection in lambda inside NetworkResourceLoader::tryStoreAsCacheEntry()
2555         https://bugs.webkit.org/show_bug.cgi?id=158862
2556
2557         Reviewed by Darin Adler.
2558
2559         Add NoncopyableFunction constructor that takes a nullptr_t in, in order
2560         to match the std::function API and make porting from one to the other
2561         easier.
2562
2563         * wtf/NoncopyableFunction.h:
2564
2565 2016-06-16  Chris Dumez  <cdumez@apple.com>
2566
2567         Unreviewed, rolling out r202002 and r202111.
2568
2569         Ryosuke says this was a JSBench regression on iOS
2570
2571         Reverted changesets:
2572
2573         "Make HashMap and HashSet work with Refs"
2574         https://bugs.webkit.org/show_bug.cgi?id=158638
2575         http://trac.webkit.org/changeset/202002
2576
2577         "Improve HashMap and HashSet support for Ref"
2578         https://bugs.webkit.org/show_bug.cgi?id=158789
2579         http://trac.webkit.org/changeset/202111
2580
2581 2016-06-15  Chris Dumez  <cdumez@apple.com>
2582
2583         [Cocoa] Clean up / optimize ResourceResponse::platformLazyInit(InitLevel)
2584         https://bugs.webkit.org/show_bug.cgi?id=158809
2585
2586         Reviewed by Darin Adler.
2587
2588         Add toAtomicString() method to StringView to avoid having to call toString()
2589         and then atomizing the String at call sites.
2590
2591         * wtf/text/StringView.h:
2592         (WTF::StringView::toAtomicString):
2593
2594 2016-06-15  Sam Weinig  <sam@webkit.org>
2595
2596         Improve HashMap and HashSet support for Ref
2597         https://bugs.webkit.org/show_bug.cgi?id=158789
2598
2599         Reviewed by Chris Dumez.
2600
2601         Tests: Add more cases to WTF_HashMap.Ref_Key, WTF_HashMap.Ref_Value and WTF_HashSet.Ref
2602
2603         * wtf/HashMap.h:
2604         * wtf/HashSet.h:
2605         Add a MappedTakeType typedef and rework the take functions to use it and HashTraits::take(...).
2606
2607         * wtf/HashTraits.h:
2608         (WTF::GenericHashTraits::assignToEmpty):
2609         Move to GenericHashTraits rather than GenericHashTraitsBase, since it is not different
2610         between integral and non-integral HashTraits.
2611
2612         (WTF::GenericHashTraits::take):
2613         Add a trait function for take that defaults as a forward. This allows us to override take
2614         just like we do with get/peek.
2615
2616         (WTF::HashTraits<Ref<P>>::emptyValue):
2617         Remove unnecessary explicit construction.
2618
2619         (WTF::HashTraits<Ref<P>>::peek):
2620         Fix assertion that could happen if you did a HashMap.get() on an empty Ref value.
2621
2622         (WTF::HashTraits<Ref<P>>::take):
2623         Make the TakeType of a Ref<P> be Optional<Ref<P>>, to avoid having empty
2624         Refs returned from HashMap and HashSet. Implement an explicit take() function to
2625         construct one.
2626
2627         (WTF::HashTraits<Ref<P>>::customDeleteBucket): Deleted.
2628         Remove unnecessary customDeleteBucket implementation. Ref does not assign nullptr to
2629         it's m_ptr in destruction, so there is no dead store to avoid here.
2630
2631         * wtf/Ref.h:
2632         (WTF::Ref::ptrAllowingHashTableEmptyValue):
2633         Add HashTrait helper to allow getting the value of m_ptr even when it is null. This
2634         allows us to avoid a branch in HashTraits<Ref<P>>::peek().
2635
2636 2016-06-15  Konstantin Tokarev  <annulen@yandex.ru>
2637
2638         Only Mac port needs ObjC API for JSC
2639         https://bugs.webkit.org/show_bug.cgi?id=158780
2640
2641         Reviewed by Philippe Normand.
2642
2643         * wtf/FeatureDefines.h:
2644
2645 2016-06-15  Yusuke Suzuki  <utatane.tea@gmail.com>
2646
2647         Unreviewed, follow up patch for r202092
2648         https://bugs.webkit.org/show_bug.cgi?id=158661
2649
2650         During checking Windows port on EWS, accidentally introduce the regression.
2651
2652         * wtf/Platform.h:
2653
2654 2016-06-15  Yusuke Suzuki  <utatane.tea@gmail.com>
2655
2656         [JSC] Move calling convention flags to WTF
2657         https://bugs.webkit.org/show_bug.cgi?id=158661
2658
2659         Reviewed by Keith Miller.
2660
2661         * wtf/Platform.h:
2662
2663 2016-06-14  Myles C. Maxfield  <mmaxfield@apple.com>
2664
2665         Honor bidi unicode codepoints
2666         https://bugs.webkit.org/show_bug.cgi?id=149170
2667         <rdar://problem/26527378>
2668
2669         Reviewed by Simon Fraser.
2670
2671         * wtf/unicode/CharacterNames.h:
2672
2673 2016-06-14  Commit Queue  <commit-queue@webkit.org>
2674
2675         Unreviewed, rolling out r202057.
2676         https://bugs.webkit.org/show_bug.cgi?id=158749
2677
2678         This change broke the Windows build. (Requested by ryanhaddad
2679         on #webkit).
2680
2681         Reverted changeset:
2682
2683         "Honor bidi unicode codepoints"
2684         https://bugs.webkit.org/show_bug.cgi?id=149170
2685         http://trac.webkit.org/changeset/202057
2686
2687 2016-06-14  Myles C. Maxfield  <mmaxfield@apple.com>
2688
2689         Honor bidi unicode codepoints
2690         https://bugs.webkit.org/show_bug.cgi?id=149170
2691         <rdar://problem/26527378>
2692
2693         Reviewed by Simon Fraser.
2694
2695         * wtf/unicode/CharacterNames.h:
2696
2697 2016-06-13  Alex Christensen  <achristensen@webkit.org>
2698
2699         Add WebSocketProvider stub
2700         https://bugs.webkit.org/show_bug.cgi?id=158702
2701
2702         Reviewed by Brady Eidson.
2703
2704         * wtf/UniqueRef.h:
2705         (WTF::UniqueRef::operator->):
2706         (WTF::UniqueRef::operator T&):
2707         (WTF::UniqueRef::operator const T&):
2708         Added operator T& to avoid unneeded .get() calls.
2709
2710 2016-06-13  Sam Weinig  <sam@webkit.org>
2711
2712         Make HashMap and HashSet work with Refs
2713         https://bugs.webkit.org/show_bug.cgi?id=158638
2714
2715         Reviewed by Darin Adler.
2716
2717         * wtf/GetPtr.h:
2718         Move HashTableDeletedValueType and HashTableEmptyValueType here, as they are now shared
2719         by more than one smart pointer. This file should probably be renamed to something else
2720         at some point to indicate that it contains helpers for pointer and ref related functionality.
2721
2722         * wtf/HashFunctions.h:
2723         Add a DefaultHash for Refs. Customize the PtrHash to indicate that it is not safe to compare
2724         to empty or deleted Refs.
2725
2726         * wtf/HashMap.h:
2727         (WTF::HashMapTranslator::equal):
2728         (WTF::HashMapTranslator::translate):
2729         (WTF::HashMapEnsureTranslator::equal):
2730         (WTF::HashMapEnsureTranslator::translate):
2731         * wtf/HashSet.h:
2732         (WTF::IdentityExtractor::extract):
2733         (WTF::HashSetTranslator::hash):
2734         (WTF::HashSetTranslator::equal):
2735         (WTF::HashSetTranslator::translate):
2736         * wtf/HashTable.h:
2737         (WTF::IdentityHashTranslator::hash):
2738         (WTF::IdentityHashTranslator::equal):
2739         (WTF::IdentityHashTranslator::translate):
2740         Use the new assignToEmpty trait function to allow uninitialized Ref's to be safely assigned to.
2741
2742         * wtf/HashTraits.h:
2743         (WTF::HashTraits<Ref<P>>::emptyValue):
2744         (WTF::HashTraits<Ref<P>>::isEmptyValue):
2745         (WTF::HashTraits<Ref<P>>::assignToEmpty):
2746         (WTF::HashTraits<Ref<P>>::peek):
2747         (WTF::HashTraits<Ref<P>>::customDeleteBucket):
2748         Add custom HashTraits for Ref. Also, introduce a new trait function, assignToEmpty, for use
2749         in translation assignments. This is necessary since the default assignment operator for Ref
2750         will not allow assignment to the empty Ref, which we need to do here.
2751
2752         * wtf/Ref.h:
2753         (WTF::Ref::operator=):
2754         (WTF::Ref::Ref):
2755         (WTF::Ref::isHashTableDeletedValue):
2756         (WTF::Ref::hashTableDeletedValue):
2757         (WTF::Ref::isHashTableEmptyValue):
2758         (WTF::Ref::hashTableEmptyValue):
2759         Add explicit constructors/predicates for making deleted/empty Refs.
2760
2761         (WTF::Ref::assignToHashTableEmptyValue):
2762         Add a special function that allows assignment to an empty Ref, which the
2763         assignment operator does not.
2764         
2765         (WTF::IsSmartPtr):
2766         Add an IsSmartPtr override to indicate that Ref is a smart pointer.
2767
2768         * wtf/RefPtr.h:
2769         Move HashTableDeletedValueType to GetPtr.h.
2770
2771 2016-06-13  Fujii Hironori  <Hironori.Fujii@sony.com>
2772
2773         Stack overflow at RefPtr::release on Windows port since r201782
2774         https://bugs.webkit.org/show_bug.cgi?id=158687
2775
2776         Reviewed by Chris Dumez.
2777
2778         RefPtr::release calls RefPtr::RefPtr, and RefPtr::RefPtr calls
2779         RefPtr::release.
2780
2781         RefPtr::RefPtr does not need to call RefPtr::release.
2782
2783         * wtf/RefPtr.h:
2784         (WTF::RefPtr::RefPtr): Do not call RefPtr::release.
2785
2786 2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>
2787
2788         Addressing post-review comments after r201978.
2789         https://bugs.webkit.org/show_bug.cgi?id=158649
2790         <rdar://problem/13258122>
2791
2792         Unreviewed.
2793
2794         * wtf/text/StringCommon.h:
2795         (WTF::equal):
2796         (WTF::naiveEqualWithoutPerformingUnicodeNormalization): Deleted.
2797
2798 2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>
2799
2800         [Cocoa] Map commonly used Chinese Windows font names to names present on Cocoa operating systems
2801         https://bugs.webkit.org/show_bug.cgi?id=158649
2802         <rdar://problem/13258122>
2803
2804         Reviewed by Darin Adler.
2805
2806         * wtf/text/StringCommon.h:
2807         (WTF::naiveEqualWithoutPerformingUnicodeNormalization): Added.
2808
2809 2016-06-11  Chris Dumez  <cdumez@apple.com>
2810
2811         WorkerNavigator is missing some attributes
2812         https://bugs.webkit.org/show_bug.cgi?id=158593
2813         <rdar://problem/26731334>
2814
2815         Reviewed by Darin Adler.
2816
2817         * wtf/PlatformUserPreferredLanguages.h:
2818         * wtf/PlatformUserPreferredLanguagesWin.cpp:
2819         (WTF::platformLanguage):
2820         (WTF::platformUserPreferredLanguages):
2821
2822         Make platformUserPreferredLanguages() thread safe on Windows. The
2823         Mac and Unix implementations are already thread-safe.
2824
2825         HAS_FASTCALL_CALLING_CONVENTION is changed to COMPILER_SUPPORTS(FASTCALL_CALLING_CONVENTION).
2826
2827 2016-06-10  Alex Christensen  <achristensen@webkit.org>
2828
2829         Introduce WTF::UniqueRef
2830         https://bugs.webkit.org/show_bug.cgi?id=158596
2831
2832         Reviewed by Brady Eidson.
2833
2834         WTF::UniqueRef is like a std::unique_ptr that is guaranteed to be non-null.
2835         std::make_unique returns a non-null value that is put into a std::unique_ptr, a type
2836         that could contain null values.  To be able to pass such values around and store them
2837         without wondering if they are null, we now have WTF::UniqueRef which cannot be null.
2838
2839         * WTF.xcodeproj/project.pbxproj:
2840         * wtf/CMakeLists.txt:
2841         * wtf/UniqueRef.h: Added.
2842         (WTF::makeUniqueRef):
2843         (WTF::UniqueRef::UniqueRef):
2844         (WTF::UniqueRef::get):
2845         (WTF::UniqueRef::operator&):
2846         (WTF::UniqueRef::operator->):
2847
2848 2016-06-09  Brady Eidson  <beidson@apple.com>
2849
2850         Unaddressed review feedback from r201872
2851
2852         * wtf/CrossThreadTask.h:
2853         (WTF::callFunctionForCrossThreadTask): Fix typo.
2854
2855 2016-06-09  Brady Eidson  <beidson@apple.com>
2856
2857         Greatly simplify CrossThreadTask.h.
2858         https://bugs.webkit.org/show_bug.cgi?id=158542
2859
2860         Reviewed by Darin Adler.
2861
2862         * wtf/CrossThreadTask.h:
2863         (WTF::crossThreadCopy):
2864         (WTF::callFunctionForCrossThreadTaskImpl):
2865         (WTF::callFunctionForCrossThreadTask):
2866         (WTF::createCrossThreadTask):
2867         (WTF::callMemberFunctionForCrossThreadTaskImpl):
2868         (WTF::callMemberFunctionForCrossThreadTask):
2869
2870 2016-06-08  Brady Eidson  <beidson@apple.com>
2871
2872         Make CrossThreadCopier more efficient (fewer copies!).
2873         https://bugs.webkit.org/show_bug.cgi?id=158456
2874
2875         Reviewed by Alex Christensen.
2876
2877         Previously, we'd run all arguments through CrossThreadCopier, then immediately make
2878         an unnecessary copy of the result during lambda capture.
2879
2880         Instead, we should just put the CrossThreadCopier generated objects directly in lambdas,
2881         which are then captured by NoncopyableFunctions.
2882
2883         This reduces the number of constructor calls per argument from 2 copies to 1 move.
2884
2885         * wtf/CrossThreadTask.h:
2886         (WTF::CrossThreadTask::CrossThreadTask):
2887         (WTF::createCrossThreadTask):
2888
2889 2016-06-07  Filip Pizlo  <fpizlo@apple.com>
2890
2891         Implement Air::allocateStack() in ES6 to see how much of a bad idea that is
2892         https://bugs.webkit.org/show_bug.cgi?id=158318
2893
2894         Reviewed by Saam Barati.
2895
2896         * wtf/Insertion.h:
2897         (WTF::executeInsertions): I found a bug while rewriting this code in JS.
2898         * wtf/PrintStream.h:
2899         (WTF::PrintStream::print):
2900         (WTF::PrintStream::println): This is useful to have.
2901
2902 2016-06-07  Keith Rollin  <krollin@apple.com>
2903
2904         Remove all uses of PassRefPtr in WTF
2905         https://bugs.webkit.org/show_bug.cgi?id=157596
2906         <rdar://problem/26234391>
2907
2908         Reviewed by Chris Dumez.
2909
2910         Remove/update most interfaces that take or return PassRefPtrs.
2911         Remaining references include those in non-Cocoa implementations and
2912         those required for continued compatibility with modules that still use
2913         PassRefPtrs (specifically: Forward.h, RefPtr interoperability,
2914         SizeLimits.h, WorkQueue (Windows) DispatchQueueEfl,
2915         DispatchWorkItemEfl, and PassRefPtr itself).
2916
2917         Update calls to interfaces that no longer take or return PassRefPtrs.
2918
2919         Update adoptRef(T*) to return a RefPtr instead of a PassRefPtr and
2920         move it to RefPtr.h from PassRefPtr.h.
2921
2922         * wtf/MetaAllocator.cpp:
2923         (WTF::MetaAllocator::allocate):
2924         * wtf/MetaAllocator.h:
2925         * wtf/ParallelJobsGeneric.h:
2926         (WTF::ParallelEnvironment::ThreadPrivate::create):
2927         * wtf/text/AtomicStringImpl.cpp:
2928         (WTF::HashAndUTF8CharactersTranslator::translate):
2929         (WTF::SubstringTranslator::translate):
2930         * wtf/text/CString.cpp:
2931         (WTF::CStringBuffer::createUninitialized):
2932         * wtf/text/CString.h:
2933         * wtf/text/StringBuilder.cpp:
2934         (WTF::StringBuilder::reifyString):
2935         (WTF::StringBuilder::resize):
2936         (WTF::StringBuilder::reallocateBuffer<LChar>):
2937         (WTF::StringBuilder::reallocateBuffer<UChar>):
2938         * wtf/text/StringImpl.cpp:
2939         (WTF::StringImpl::reallocateInternal):
2940         (WTF::StringImpl::reallocate):
2941         (WTF::StringImpl::create8BitIfPossible):
2942         (WTF::StringImpl::createSymbol):
2943         (WTF::StringImpl::createNullSymbol):
2944         (WTF::StringImpl::convertToLowercaseWithoutLocale):
2945         (WTF::StringImpl::convertToUppercaseWithoutLocale):
2946         (WTF::StringImpl::convertToLowercaseWithLocale):
2947         (WTF::StringImpl::convertToUppercaseWithLocale):
2948         (WTF::StringImpl::convertASCIICase):
2949         * wtf/text/StringImpl.h:
2950         (WTF::StringImpl::StringImpl):
2951         (WTF::StringImpl::createSubstringSharingImpl):
2952         (WTF::StringImpl::tryCreateUninitialized):
2953         (WTF::StringImpl::extractFoldedStringInSymbol):
2954         * wtf/text/SymbolRegistry.cpp:
2955         (WTF::SymbolRegistry::symbolForKey):
2956         * wtf/text/WTFString.cpp:
2957         (WTF::String::substringSharingImpl):
2958         * wtf/text/WTFString.h:
2959         (WTF::String::String): Deleted.
2960         * wtf/text/cf/StringImplCF.cpp:
2961
2962 2016-06-07  Yusuke Suzuki  <utatane.tea@gmail.com>
2963
2964         [JSC] Do not allocate unnecessary UTF-8 string for encodeXXX functions
2965         https://bugs.webkit.org/show_bug.cgi?id=158416
2966
2967         Reviewed by Darin Adler and Geoffrey Garen.
2968
2969         * wtf/Bitmap.h:
2970         (WTF::Bitmap::size):
2971         (WTF::WordType>::Bitmap):
2972         (WTF::WordType>::get):
2973         (WTF::WordType>::set):
2974         (WTF::WordType>::testAndSet):
2975         (WTF::WordType>::testAndClear):
2976         (WTF::WordType>::concurrentTestAndSet):
2977         (WTF::WordType>::concurrentTestAndClear):
2978         (WTF::WordType>::clear):
2979         (WTF::WordType>::clearAll):
2980         (WTF::WordType>::nextPossiblyUnset):
2981         (WTF::WordType>::findRunOfZeros):
2982         (WTF::WordType>::count):
2983         (WTF::WordType>::isEmpty):
2984         (WTF::WordType>::isFull):
2985
2986 2016-06-06  Saam Barati  <sbarati@apple.com>
2987
2988         equal(StringView, StringView) for strings should have a fast path for pointer equality
2989         https://bugs.webkit.org/show_bug.cgi?id=158452
2990
2991         Reviewed by Andreas Kling.
2992
2993         JSBench does a lot of StringView::operator== on StringViews that have
2994         the same underlying characters pointer. This becomes hot inside JSBench
2995         because JSBench heavily stresses JSC's UnlinkedCodeCache with a high
2996         hit rate. This means that when we get a hit in the cache, we used to
2997         do the long form of string compare. However, we were often comparing
2998         two StringViews that had the same underlying buffer and length.
2999         This patch speeds this case up to run in constant time instead of
3000         linear time.
3001
3002         * wtf/text/StringCommon.h:
3003         (WTF::equalCommon):
3004         * wtf/text/StringImpl.h:
3005         (WTF::StringImpl::StringImpl):
3006         (WTF::StringImpl::data):
3007         * wtf/text/StringView.h:
3008         (WTF::StringView::data):
3009
3010 2016-06-04  Anders Carlsson  <andersca@apple.com>
3011
3012         Get rid of WorkItemWin
3013         https://bugs.webkit.org/show_bug.cgi?id=158381
3014
3015         Reviewed by Sam Weinig.
3016
3017         * wtf/PlatformWin.cmake:
3018         * wtf/WorkQueue.h:
3019         * wtf/win/WorkItemWin.cpp: Removed.
3020         (WTF::WorkItemWin::WorkItemWin): Deleted.
3021         (WTF::WorkItemWin::create): Deleted.
3022         (WTF::WorkItemWin::~WorkItemWin): Deleted.
3023         * wtf/win/WorkItemWin.h: Removed.
3024         (WTF::WorkItemWin::function): Deleted.
3025         (WTF::WorkItemWin::queue): Deleted.
3026         * wtf/win/WorkQueueWin.cpp:
3027         (WTF::WorkQueue::performWorkOnRegisteredWorkThread):
3028         (WTF::WorkQueue::dispatch):
3029
3030 2016-06-03  Anders Carlsson  <andersca@apple.com>
3031
3032         Get rid of HANDLE registration code in WorkQueueWin
3033         https://bugs.webkit.org/show_bug.cgi?id=158375
3034
3035         Reviewed by Darin Adler.
3036
3037         * wtf/WorkQueue.h:
3038         * wtf/win/WorkItemWin.cpp:
3039         (WTF::HandleWorkItem::HandleWorkItem): Deleted.
3040         (WTF::HandleWorkItem::createByAdoptingHandle): Deleted.
3041         (WTF::HandleWorkItem::~HandleWorkItem): Deleted.
3042         * wtf/win/WorkItemWin.h:
3043         (WTF::HandleWorkItem::setWaitHandle): Deleted.
3044         (WTF::HandleWorkItem::waitHandle): Deleted.
3045         * wtf/win/WorkQueueWin.cpp:
3046         (WTF::WorkQueue::handleCallback): Deleted.
3047         (WTF::WorkQueue::platformInvalidate): Deleted.
3048         (WTF::WorkQueue::unregisterWaitAndDestroyItemSoon): Deleted.
3049         (WTF::WorkQueue::unregisterWaitAndDestroyItemCallback): Deleted.
3050
3051 2016-06-03  Commit Queue  <commit-queue@webkit.org>
3052
3053         Unreviewed, rolling out r201663.
3054         https://bugs.webkit.org/show_bug.cgi?id=158374
3055
3056         Broke the Windows build (Requested by andersca on #webkit).
3057
3058         Reverted changeset:
3059
3060         "Rename NoncopyableFunction to Function"
3061         https://bugs.webkit.org/show_bug.cgi?id=158354
3062         http://trac.webkit.org/changeset/201663
3063
3064 2016-06-03  Anders Carlsson  <andersca@apple.com>
3065
3066         Rename NoncopyableFunction to Function
3067         https://bugs.webkit.org/show_bug.cgi?id=158354
3068
3069         Reviewed by Chris Dumez.
3070
3071         * WTF.xcodeproj/project.pbxproj:
3072         * wtf/CrossThreadTask.h:
3073         (WTF::CrossThreadTask::CrossThreadTask):
3074         * wtf/Function.h: Renamed from Source/WTF/wtf/NoncopyableFunction.h.
3075         * wtf/FunctionDispatcher.h:
3076         * wtf/MainThread.cpp:
3077         (WTF::functionQueue):
3078         (WTF::dispatchFunctionsFromMainThread):
3079         (WTF::callOnMainThread):
3080         * wtf/MainThread.h:
3081         * wtf/RunLoop.cpp:
3082         (WTF::RunLoop::performWork):
3083         (WTF::RunLoop::dispatch):
3084         * wtf/RunLoop.h:
3085         * wtf/WorkQueue.h:
3086         * wtf/cocoa/WorkQueueCocoa.cpp:
3087         (WTF::WorkQueue::dispatch):
3088         (WTF::WorkQueue::dispatchAfter):
3089         * wtf/efl/DispatchQueueWorkItemEfl.h:
3090         (WorkItem::WorkItem):
3091         (TimerWorkItem::create):
3092         (TimerWorkItem::TimerWorkItem):
3093         * wtf/efl/WorkQueueEfl.cpp:
3094         (WTF::WorkQueue::dispatch):
3095         (WTF::WorkQueue::dispatchAfter):
3096         * wtf/generic/RunLoopGeneric.cpp:
3097         (WTF::RunLoop::TimerBase::ScheduledTask::create):
3098         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
3099         (WTF::RunLoop::dispatchAfter):
3100         * wtf/generic/WorkQueueGeneric.cpp:
3101         (WorkQueue::dispatch):
3102         (WorkQueue::dispatchAfter):
3103         * wtf/glib/RunLoopGLib.cpp:
3104         (WTF::DispatchAfterContext::DispatchAfterContext):
3105         (WTF::RunLoop::dispatchAfter):
3106         * wtf/win/WorkItemWin.cpp:
3107         (WTF::WorkItemWin::WorkItemWin):
3108         (WTF::WorkItemWin::create):
3109         (WTF::HandleWorkItem::HandleWorkItem):
3110         (WTF::HandleWorkItem::createByAdoptingHandle):
3111         * wtf/win/WorkItemWin.h:
3112         (WTF::WorkItemWin::function):
3113         * wtf/win/WorkQueueWin.cpp:
3114         (WTF::WorkQueue::dispatch):
3115         (WTF::WorkQueue::dispatchAfter):
3116
3117 2016-06-03  Mark Lam  <mark.lam@apple.com>
3118
3119         Clean up how StackVisitor dumps its frames.
3120         https://bugs.webkit.org/show_bug.cgi?id=158316
3121
3122         Reviewed by Keith Miller.
3123
3124         Added an Indenter class what works with dataLog.
3125
3126         * WTF.xcodeproj/project.pbxproj:
3127         * wtf/Indenter.h: Added.
3128         (WTF::Indenter::Indenter):
3129         (WTF::Indenter::dump):
3130         (WTF::Indenter::operator++):
3131         (WTF::Indenter::operator--):
3132
3133 2016-06-02  Said Abou-Hallawa  <sabouhallawa@apple,com>
3134
3135         [iOS] PDFDocumentImage should not create a cached image larger than 4M pixels
3136         https://bugs.webkit.org/show_bug.cgi?id=157857
3137
3138         Reviewed by Darin Adler.
3139
3140         * wtf/StdLibExtras.h: Add a constant value for GB (2^30).
3141
3142 2016-06-02  Oliver Hunt  <oliver@apple.com>
3143
3144         JS parser incorrectly handles invalid utf8 in error messages.
3145         https://bugs.webkit.org/show_bug.cgi?id=158128
3146
3147         Reviewed by Saam Barati.
3148
3149         Add a new toStringWithLatin1Fallback that simply uses
3150         String::fromUTF8WithLatin1Fallback, so we can avoid the
3151         standard String::fromUTF8 null return.
3152
3153         * wtf/StringPrintStream.cpp:
3154         (WTF::StringPrintStream::toStringWithLatin1Fallback):
3155         * wtf/StringPrintStream.h:
3156
3157 2016-06-02  Keith Miller  <keith_miller@apple.com>
3158
3159         Unreviewed, reland r201532. The associated regressions have been fixed
3160         by r201584.
3161
3162 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
3163
3164         Use "= delete" for Locker(int) 
3165
3166         Rubber stamped by Saam Barati.
3167         
3168         See discussion: https://bugs.webkit.org/show_bug.cgi?id=158306#c8
3169
3170         * wtf/Locker.h:
3171         (WTF::Locker::Locker):
3172         (WTF::Locker::~Locker):
3173
3174 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
3175
3176         Make it harder to accidentally pass an integer to a locker.
3177
3178         Rubber stamped by Keith Miller.
3179         
3180         See here for the discussion: https://bugs.webkit.org/show_bug.cgi?id=158306#c3
3181
3182         * wtf/Locker.h:
3183         (WTF::Locker::Locker):
3184         (WTF::Locker::~Locker):
3185
3186 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
3187
3188         Make it easier to use NoLockingNecessary
3189         https://bugs.webkit.org/show_bug.cgi?id=158306
3190
3191         Reviewed by Keith Miller.
3192         
3193         An idiom that we borrowed from LLVM is that if a function requires a lock to be held, we
3194         have it take a const Locker& as its first argument. This may not communicate which lock is
3195         to be held, but it does help us to remember that some lock must be held. So far, it's been
3196         relatively easy to then figure out which lock. We've had bugs where we forgot to hold a
3197         lock but I don't remember the last time we had a bug where we grabbed the wrong lock.
3198         
3199         But sometimes, we know at the point where we call such a method that we actually don't
3200         need to hold any lock. This usually happens during object construction. If we're
3201         constructing some object then we usually know that we have not escaped it yet, so we don't
3202         need to waste time acquiring its lock. We could solve this by having a separate set of
3203         methods that don't do or require locking. This would be cumbersome, since usually for
3204         every variant that takes const Locker&, there is already one that doesn't, and that one
3205         will grab the lock for you. So this means having a third variant, that also doesn't take a
3206         const Locker&, but does no locking. That's pretty weird.
3207         
3208         So, we introduced NoLockingNecessary for situations like this. The idiom went like so:
3209         
3210             Locker<Whatever> locker(Locker<Whatever>::NoLockingNecessary)
3211             stuff->foo(locker);
3212         
3213         Usually though, there would be some distance between where the locker is defined and where
3214         it's used, so when you just look at stuff->foo(locker) in isolation you don't know if this
3215         is a real locker or a NoLockingNecessary cast. Also, requiring two lines for this just
3216         adds code.
3217         
3218         This change makes this easier. Now you can just do:
3219         
3220             stuff->foo(NoLockingNecessary).
3221         
3222         This is because NoLockingNecessary has been pulled out into the WTF namespace (and is
3223         usinged from the global namespace) and the Locker<> constructor that takes
3224         NoLockingNecessaryTag is now implicit.
3225         
3226         The only possible downside of this change is that people might use this idiom more
3227         frequently now that it's easier to use. I don't think that's a bad thing. I'm now
3228         convinced that this is not a bad idiom. When I was fixing an unrelated bug, I almost went
3229         the way of adding more locking to some core JSC data structures, and in the process, I
3230         needed to use NoLockingNecessary. It's clear that this is a general-purpose idiom and we
3231         should not impose artificial constraints on its use.
3232
3233         * wtf/Locker.h:
3234         (WTF::Locker::Locker):
3235         (WTF::Locker::~Locker):
3236
3237 2016-06-01  Brady Eidson  <beidson@apple.com>
3238
3239         Get rid of StringCapture.
3240         https://bugs.webkit.org/show_bug.cgi?id=158285
3241
3242         Reviewed by Chris Dumez.
3243
3244         * wtf/text/WTFString.h:
3245         (WTF::StringCapture::StringCapture): Deleted.
3246         (WTF::StringCapture::string): Deleted.
3247         (WTF::StringCapture::releaseString): Deleted.
3248         (WTF::StringCapture::operator=): Deleted.
3249
3250 2016-06-01  Benjamin Poulain  <bpoulain@apple.com>
3251
3252         [JSC] Some setters for components of Date do not timeClip() their result
3253         https://bugs.webkit.org/show_bug.cgi?id=158278
3254
3255         Unreviewed.
3256
3257         * wtf/DateMath.cpp:
3258         (WTF::equivalentYearForDST): Deleted.
3259         The assertion is bogus.
3260         As the comments above explains, the function is completely wrong for years
3261         outside [1900-2100].
3262         The tests passing large values for years are failing (year <= maxYear).
3263         The weird NaN test is a mystery. The old changelog does not explain it.
3264
3265 2016-05-31  Commit Queue  <commit-queue@webkit.org>
3266
3267         Unreviewed, rolling out r201363 and r201456.
3268         https://bugs.webkit.org/show_bug.cgi?id=158240
3269
3270         "40% regression on date-format-xparb" (Requested by
3271         keith_miller on #webkit).
3272
3273         Reverted changesets:
3274
3275         "LLInt should be able to cache prototype loads for values in
3276         GetById"
3277         https://bugs.webkit.org/show_bug.cgi?id=158032
3278         http://trac.webkit.org/changeset/201363
3279
3280         "get_by_id should support caching unset properties in the
3281         LLInt"
3282         https://bugs.webkit.org/show_bug.cgi?id=158136
3283         http://trac.webkit.org/changeset/201456
3284
3285 2016-05-31  Brady Eidson  <beidson@apple.com>
3286
3287         Make createCrossThreadTask() functions return on the stack instead of the heap.
3288         https://bugs.webkit.org/show_bug.cgi?id=158215
3289
3290         Reviewed by Darin Adler.
3291
3292         * WTF.xcodeproj/project.pbxproj:
3293
3294         * wtf/CrossThreadCopier.cpp:
3295
3296         * wtf/CrossThreadQueue.h: Added. A lightweight of MessageQueue that deals directly
3297           in objects instead of in std::unique_ptrs.
3298         (WTF::CrossThreadQueue::isKilled):
3299         (WTF::CrossThreadQueue<DataType>::append):
3300         (WTF::CrossThreadQueue<DataType>::waitForMessage):
3301         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
3302
3303         * wtf/CrossThreadTask.h:
3304         (WTF::createCrossThreadTask):
3305         (WTF::CrossThreadTask::CrossThreadTask): Deleted.
3306
3307 2016-05-30  Brady Eidson  <beidson@apple.com>
3308
3309         Move CrossThreadCopier/CrossThreadTask to WTF.
3310         https://bugs.webkit.org/show_bug.cgi?id=158207
3311
3312         Reviewed by Alex Christensen.
3313
3314         * WTF.xcodeproj/project.pbxproj:
3315         * wtf/CMakeLists.txt:
3316
3317         * wtf/CrossThreadCopier.cpp: Renamed from Source/WebCore/platform/CrossThreadCopier.cpp.
3318         * wtf/CrossThreadCopier.h: Renamed from Source/WebCore/platform/CrossThreadCopier.h.
3319         (WTF::CrossThreadCopierPassThrough::copy):
3320         
3321         * wtf/CrossThreadTask.h: Renamed from Source/WebCore/platform/CrossThreadTask.h.
3322         (WTF::CrossThreadTask::CrossThreadTask):
3323         (WTF::CrossThreadTask::performTask):
3324         (WTF::createCrossThreadTask):
3325
3326 2016-05-28  Chris Dumez  <cdumez@apple.com>
3327
3328         Templatize NoncopyableFunction class similarly to std::function
3329         https://bugs.webkit.org/show_bug.cgi?id=158185
3330
3331         Reviewed by Darin Adler.
3332
3333         Templatize NoncopyableFunction class similarly to std::function, so
3334         that it can be used as a std::function replacement in more places.
3335
3336         Previously, NoncopyableFunction could only support "void()" lambdas.
3337
3338         * wtf/FunctionDispatcher.h:
3339         * wtf/MainThread.cpp:
3340         (WTF::functionQueue):
3341         (WTF::dispatchFunctionsFromMainThread):
3342         (WTF::callOnMainThread):
3343         * wtf/MainThread.h:
3344         * wtf/NoncopyableFunction.h:
3345         * wtf/RunLoop.cpp:
3346         (WTF::RunLoop::performWork):
3347         (WTF::RunLoop::dispatch):
3348         * wtf/RunLoop.h:
3349         * wtf/WorkQueue.h:
3350         * wtf/cocoa/WorkQueueCocoa.cpp:
3351         (WTF::WorkQueue::dispatch):
3352         (WTF::WorkQueue::dispatchAfter):
3353         * wtf/efl/DispatchQueueWorkItemEfl.h:
3354         (WorkItem::WorkItem):
3355         (TimerWorkItem::create):
3356         (TimerWorkItem::TimerWorkItem):
3357         * wtf/efl/WorkQueueEfl.cpp:
3358         (WTF::WorkQueue::dispatch):
3359         (WTF::WorkQueue::dispatchAfter):
3360         * wtf/generic/RunLoopGeneric.cpp:
3361         (WTF::RunLoop::TimerBase::ScheduledTask::create):
3362         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
3363         (WTF::RunLoop::dispatchAfter):
3364         * wtf/generic/WorkQueueGeneric.cpp:
3365         (WorkQueue::dispatch):
3366         (WorkQueue::dispatchAfter):
3367         * wtf/glib/RunLoopGLib.cpp:
3368         (WTF::DispatchAfterContext::DispatchAfterContext):
3369         (WTF::RunLoop::dispatchAfter):
3370         * wtf/win/WorkItemWin.cpp:
3371         (WTF::WorkItemWin::WorkItemWin):
3372         (WTF::WorkItemWin::create):
3373         (WTF::HandleWorkItem::HandleWorkItem):
3374         (WTF::HandleWorkItem::createByAdoptingHandle):
3375         * wtf/win/WorkItemWin.h:
3376         (WTF::WorkItemWin::function):
3377         * wtf/win/WorkQueueWin.cpp:
3378         (WTF::WorkQueue::dispatch):
3379         (WTF::WorkQueue::dispatchAfter):
3380
3381 2016-05-28  Dan Bernstein  <mitz@apple.com>
3382
3383         Build fix for projects that include MainThread.h without including FastMalloc.h.
3384
3385         * wtf/NoncopyableFunction.h: Include FastMalloc.h from here.
3386
3387 2016-05-27  Chris Dumez  <cdumez@apple.com>
3388
3389         callOnMainThread() should not copy captured lambda variables
3390         https://bugs.webkit.org/show_bug.cgi?id=158166
3391
3392         Reviewed by Brady Eidson.
3393
3394         callOnMainThread() should not copy captured lambda variables. This
3395         function is usually called cross-thread with a lambda and copying
3396         the lambda (and its captured variables) can lead to thread-safety
3397         issues.
3398
3399         This patch updates callOnMainThread() to take a NoncopyableFunction&&
3400         in parameter instead of a std::function. The call sites of
3401         callOnMainThread() have also been updated to use C++14's lambda
3402         capture with initializer.
3403
3404         * WTF.xcodeproj/project.pbxproj:
3405
3406         * wtf/FunctionDispatcher.h:
3407         * wtf/NoncopyableFunction.h:
3408         - Moved NoncopyableFunction from FunctionDispatcher.h to
3409           NoncopyableFunction.h.
3410         - Add a new operator=(nullptr_t) operator to NoncopyableFunction to
3411           match std::function, as one of the call sites needed it.
3412
3413         * wtf/MainThread.cpp:
3414         (WTF::functionQueue):
3415         (WTF::dispatchFunctionsFromMainThread):
3416         (WTF::callOnMainThread):
3417         * wtf/MainThread.h:
3418
3419 2016-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>
3420
3421         Unreviewed, build fix for JSCOnly port.
3422         https://bugs.webkit.org/show_bug.cgi?id=158111
3423
3424         Use NoncopyableFunction instead of std::function<>.
3425
3426         * wtf/generic/RunLoopGeneric.cpp:
3427         (WTF::RunLoop::TimerBase::ScheduledTask::create):
3428         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
3429
3430 2016-05-27  Chris Dumez  <cdumez@apple.com>
3431
3432         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables
3433         https://bugs.webkit.org/show_bug.cgi?id=158111
3434
3435         Reviewed by Darin Adler.
3436
3437         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables.
3438         These are often used cross-thread and copying the captured lambda variables can be
3439         dangerous (e.g. we do not want to copy a String after calling isolatedCopy() upon
3440         capture).
3441
3442         This patch introduces a new NoncopyableFunction type that behaves similarly to
3443         std::function but guarantees that the passed-in lambda (and its captured variables)
3444         cannot be copied. This new NoncopyableFunction type is now used for
3445         WorkQueue / RunLoop's dispatch() / dispatchAfter() which are commonly used
3446         cross-thread. This should now allow us to call WorkQueue::dispatch() with a lambda
3447         that captures a String like so:
3448         [str = str.isolatedCopy()]() { }
3449
3450         Also note that even though this is not leveraged in this patch, NoncopyableFunction
3451         would allow us to capture move-only types such as std::unique_ptr as so:
3452         [p = WTFMove(p)]() { }
3453         This does not work if we convert the lambda into an std::function because
3454         std::function requires the lambda to be copyable, NoncopyableFunction does not.
3455
3456         * wtf/FunctionDispatcher.h:
3457         (WTF::CallableWrapperBase::~CallableWrapperBase):
3458         (WTF::NoncopyableFunction::NoncopyableFunction):
3459         (WTF::NoncopyableFunction::operator()):
3460         (WTF::NoncopyableFunction::operator bool):
3461         (WTF::NoncopyableFunction::operator=):
3462         * wtf/RunLoop.cpp:
3463         (WTF::RunLoop::performWork):
3464         (WTF::RunLoop::dispatch):
3465         * wtf/RunLoop.h:
3466         * wtf/WorkQueue.h:
3467         * wtf/cocoa/WorkQueueCocoa.cpp:
3468         (WTF::WorkQueue::dispatch):
3469         (WTF::WorkQueue::dispatchAfter):
3470         * wtf/efl/DispatchQueueWorkItemEfl.h:
3471         (WorkItem::WorkItem):
3472         (TimerWorkItem::create):
3473         (TimerWorkItem::TimerWorkItem):
3474         * wtf/efl/WorkQueueEfl.cpp:
3475         (WTF::WorkQueue::dispatch):
3476         (WTF::WorkQueue::dispatchAfter):
3477         * wtf/generic/RunLoopGeneric.cpp:
3478         (WTF::RunLoop::dispatchAfter):
3479         * wtf/generic/WorkQueueGeneric.cpp:
3480         (WorkQueue::dispatch):
3481         (WorkQueue::dispatchAfter):
3482         * wtf/glib/RunLoopGLib.cpp:
3483         (WTF::DispatchAfterContext::DispatchAfterContext):
3484         (WTF::RunLoop::dispatchAfter):
3485         * wtf/win/WorkItemWin.cpp:
3486         (WTF::WorkItemWin::WorkItemWin):
3487         (WTF::WorkItemWin::create):
3488         (WTF::HandleWorkItem::HandleWorkItem):
3489         (WTF::HandleWorkItem::createByAdoptingHandle):
3490         * wtf/win/WorkItemWin.h:
3491         (WTF::WorkItemWin::function):
3492         * wtf/win/WorkQueueWin.cpp:
3493         (WTF::WorkQueue::dispatch):
3494         (WTF::WorkQueue::timerCallback):
3495         (WTF::WorkQueue::dispatchAfter):
3496
3497 2016-05-26  Filip Pizlo  <fpizlo@apple.com>
3498
3499         ScopedLambda should have a lifetime story that makes sense to the compiler
3500         https://bugs.webkit.org/show_bug.cgi?id=158118
3501
3502         Reviewed by Mark Lam.
3503
3504         Prior to this change, there were two lifetime bugs in ScopedLambda:
3505         
3506         - scopedLambda(Functor&&) would bind Functor to const lambda&, so the resulting ScopedLambdaFunctor
3507           would hold a reference to the original lambda. This would have surprising behavior; for example
3508           it meant that this code was wrong:
3509           
3510           auto l = scopedLambda<things>([&] ...);
3511           
3512           The solution is to have explicit copy/move versions of scopedLambda() rather than rely on perfect
3513           forwarding.
3514         
3515         - ScopedLambdaFunctor did not override its copy or move operations, so if the compiler did not RVO
3516           scopedLambda(), it would return a ScopedLambdaFunctor whose m_arg points to a dead temporary
3517           ScopedLambdaFunctor instance. The solution is to have explicit copy/move constructors and
3518           operators, which preserve the invariant that ScopedLambda::m_arg points to this.
3519         
3520         One nice side-effect of all of these constructors and operators being explicit is that we can rely
3521         on WTFMove's excellent assertions, which helped catch the first issue.
3522         
3523         This reverts ParkingLot to use ScopedLambda again.
3524
3525         * wtf/ParkingLot.cpp:
3526         (WTF::ParkingLot::parkConditionallyImpl):
3527         (WTF::ParkingLot::unparkOne):
3528         (WTF::ParkingLot::unparkOneImpl):
3529         * wtf/ParkingLot.h:
3530         (WTF::ParkingLot::parkConditionally):
3531         (WTF::ParkingLot::unparkOne):
3532         * wtf/ScopedLambda.h:
3533         (WTF::scopedLambda):
3534
3535 2016-05-25  Anders Carlsson  <andersca@apple.com>
3536
3537         Get rid of WTF/Functional.h
3538         https://bugs.webkit.org/show_bug.cgi?id=158081
3539
3540         Reviewed by Chris Dumez.
3541
3542         This is no longer used, and removing it will free up the name for a new Functional.h implementation.
3543
3544         * WTF.xcodeproj/project.pbxproj:
3545         * wtf/Functional.h: Removed.
3546         (WTF::RefAndDeref::ref): Deleted.
3547         (WTF::RefAndDeref::deref): Deleted.
3548         (WTF::ParamStorageTraits::wrap): Deleted.
3549         (WTF::ParamStorageTraits::unwrap): Deleted.
3550         (WTF::ParamStorageTraits<PassRefPtr<T>>::wrap): Deleted.
3551         (WTF::ParamStorageTraits<PassRefPtr<T>>::unwrap): Deleted.
3552         (WTF::ParamStorageTraits<RefPtr<T>>::wrap): Deleted.
3553         (WTF::ParamStorageTraits<RefPtr<T>>::unwrap): Deleted.
3554         (WTF::ParamStorageTraits<RetainPtr<T>>::wrap): Deleted.
3555         (WTF::ParamStorageTraits<RetainPtr<T>>::unwrap): Deleted.
3556         (WTF::FunctionImplBase::~FunctionImplBase): Deleted.
3557         (WTF::FunctionBase::isNull): Deleted.
3558         (WTF::FunctionBase::FunctionBase): Deleted.
3559         (WTF::FunctionBase::impl): Deleted.
3560         (WTF::bind): Deleted.
3561         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
3562
3563 2016-05-24  Keith Miller  <keith_miller@apple.com>
3564
3565         LLInt should be able to cache prototype loads for values in GetById
3566         https://bugs.webkit.org/show_bug.cgi?id=158032
3567
3568         Reviewed by Filip Pizlo.
3569
3570         Add move constructors/initializers to Bags.
3571
3572         * wtf/Bag.h:
3573         (WTF::Bag::Bag):
3574         (WTF::Bag::operator=):
3575
3576 2016-05-24  Chris Dumez  <cdumez@apple.com>
3577
3578         Use auto for some of our lambda function parameters
3579         https://bugs.webkit.org/show_bug.cgi?id=158001
3580
3581         Reviewed by Darin Adler.
3582
3583         Use auto for some of our lambda function parameters now that we build with c++14.
3584
3585         * wtf/BubbleSort.h:
3586         (WTF::bubbleSort):
3587
3588 2016-05-23  Chris Dumez  <cdumez@apple.com>
3589
3590         Speed up move of vectors of POD types that have an inline buffer
3591         https://bugs.webkit.org/show_bug.cgi?id=158003
3592
3593         Reviewed by Benjamin Poulain.
3594
3595         When moving a vector of POD types that have an inline buffer, we would
3596         call std::swap() on the inline buffers. This unnecessarily slow because:
3597         1. It does not consider the vector size, and therefore may end up doing
3598            more work than necessary when the inline buffer is not full.
3599         2. In the "move" case, the destination buffer is completely empty so
3600            we don't really want a swap. We merely want the move the content of
3601            the source's inline buffer into the destination's one.
3602
3603         Instead of calling std::swap(), we now call swapInlineBuffers() which
3604         was already used for non-POD types. swapInlineBuffers() will do just
3605         what we want in the "move" case because swapBound is going to be 0.
3606         As a result, we will only move the content of the source buffer into
3607         the destination one. Also swapInlineBuffers() is aware of the source
3608         vector's size so it will only move what's strictly needed.
3609
3610         This seems to be a 2% progression on Dromaeo DOM attributes test.
3611
3612         * wtf/Vector.h:
3613         (WTF::VectorBuffer::swapInlineBuffer):
3614
3615 2016-05-22  Dan Bernstein  <mitz@apple.com>
3616
3617         Added NSEventMaskMouseMoved to AppKitCompatibilityDeclarations.h.
3618
3619         Rubber-stamped by Anders Carlsson.
3620
3621         * wtf/mac/AppKitCompatibilityDeclarations.h:
3622
3623 2016-05-22  Dan Bernstein  <mitz@apple.com>
3624
3625         Another attempt to fix the GTK build after my previous changes.
3626
3627         * wtf/StdLibExtras.h:
3628
3629 2016-05-22  Dan Bernstein  <mitz@apple.com>
3630
3631         Tried to fix the GTK build after r201257.
3632
3633         * wtf/StdLibExtras.h:
3634
3635 2016-05-22  Dan Bernstein  <mitz@apple.com>
3636
3637         Additional fixes for non-C++14 Apple projects that use WTF.
3638
3639         * wtf/StdLibExtras.h:
3640         (std::exchange):
3641
3642 2016-05-22  Dan Bernstein  <mitz@apple.com>
3643
3644         Additional fixes for non-C++14 Apple projects that use WTF.
3645
3646         * wtf/StdLibExtras.h:
3647         (std::make_unique):
3648         (std::move):
3649
3650 2016-05-22  Dan Bernstein  <mitz@apple.com>
3651
3652         Correct the previous build fix attempt.
3653
3654         * wtf/StdLibExtras.h:
3655
3656 2016-05-22  Dan Bernstein  <mitz@apple.com>
3657
3658         Build fix for non-C++14 Apple projects that use WTF.
3659
3660         Rubber-stamped by Anders.
3661
3662         * wtf/StdLibExtras.h:
3663
3664 2016-05-22  Brady Eidson  <beidson@apple.com>
3665
3666         Move to C++14.
3667         https://bugs.webkit.org/show_bug.cgi?id=157948
3668
3669         Reviewed by Michael Catanzaro.
3670
3671         * Configurations/Base.xcconfig:
3672         
3673         Delete a lot of "stl additions until we can adopt C++14" code:
3674         * wtf/StdLibExtras.h:
3675         (std::make_unique): Deleted.
3676         (std::index_sequence::size): Deleted.
3677         (std::exchange): Deleted.
3678         (std::literals::chrono_literals::operator _s): Deleted.
3679         (std::literals::chrono_literals::operator _ms): Deleted.
3680
3681 2016-05-20  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
3682
3683         Implement operator== for WeakPtr
3684         https://bugs.webkit.org/show_bug.cgi?id=157883
3685
3686         Reviewed by Chris Dumez.
3687
3688         Implement operator== and operator!= for WeakPtr and update code to use the operators.
3689
3690         * wtf/WeakPtr.h:
3691         (WTF::operator==):
3692         (WTF::operator!=):
3693
3694 2016-05-19  Chris Dumez  <cdumez@apple.com>
3695
3696         Improve compile-time assertions in is<>() / downcast<>()
3697         https://bugs.webkit.org/show_bug.cgi?id=157817
3698
3699         Reviewed by Darin Adler.
3700
3701         * wtf/Ref.h:
3702         (WTF::is):
3703         Add is<>() overloads taking a Ref<>() so that is<>() keeps working when
3704         passing a Ref<>(), despite the new static assertions on the input type.
3705         Some call sites were already leveraging this as it was working by
3706         implicitly converting the Ref<T> into a T&.
3707
3708         * wtf/TypeCasts.h:
3709         (WTF::is):
3710         (WTF::downcast):
3711         Make static assertions stricter in is<>() / downcast<>() to catch more
3712         cases where those are either unnecessary or incorrect.
3713
3714 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
3715
3716         Unreviewed, fix all of the builds. I failed a second time.
3717
3718         * wtf/BackwardsGraph.h:
3719         (WTF::BackwardsGraph::rootName):
3720
3721 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
3722
3723         Unreviewed, fix all of the builds. I had made an additional change that I did not mean to
3724         commit. This fixes it.
3725
3726         * wtf/BackwardsGraph.h:
3727         (WTF::BackwardsGraph::rootName):
3728         (WTF::BackwardsGraph::Set::dump):
3729         (WTF::BackwardsGraph::dump):
3730
3731 2016-05-18  Filip Pizlo  <fpizlo@apple.com>
3732
3733         DFG::LICMPhase shouldn't hoist type checks unless it knows that the check will succeed at the loop pre-header
3734         https://bugs.webkit.org/show_bug.cgi?id=144527
3735
3736         Reviewed by Saam Barati.
3737         
3738         This adds an adaptor for graphs called BackwardsGraph. The WTF graph framework is based on
3739         passing around a Graph template argument that follows the protocol shared by DFG::CFG,
3740         B3::CFG, and Air::CFG. These graphs always have a single root node but may have many leaf
3741         nodes. This new BackwardsGraph adaptor reverses the graph by creating a synthetic return
3742         node that it uses as the root in the inverted graph. This currently may resort to some
3743         heuristics in programs that have an infinite loop, but other than that, it'll work well in
3744         the general case.
3745         
3746         This allows us to say Dominators<BackwardsGraph<some graph type>> as a way of computing
3747         backwards dominators, which then allows us to easily answer control flow equivalence
3748         queries.
3749
3750         * CMakeLists.txt:
3751         * WTF.xcodeproj/project.pbxproj:
3752         * wtf/BackwardsGraph.h: Added.
3753         (WTF::BackwardsGraph::Node::Node):
3754         (WTF::BackwardsGraph::Node::root):
3755         (WTF::BackwardsGraph::Node::operator==):
3756         (WTF::BackwardsGraph::Node::operator!=):
3757         (WTF::BackwardsGraph::Node::operator bool):
3758         (WTF::BackwardsGraph::Node::isRoot):
3759         (WTF::BackwardsGraph::Node::node):
3760         (WTF::BackwardsGraph::Set::Set):
3761         (WTF::BackwardsGraph::Set::add):
3762         (WTF::BackwardsGraph::Set::remove):
3763         (WTF::BackwardsGraph::Set::contains):
3764         (WTF::BackwardsGraph::Set::dump):
3765         (WTF::BackwardsGraph::Map::Map):
3766         (WTF::BackwardsGraph::Map::clear):
3767         (WTF::BackwardsGraph::Map::size):
3768         (WTF::BackwardsGraph::Map::operator[]):
3769         (WTF::BackwardsGraph::BackwardsGraph):
3770         (WTF::BackwardsGraph::root):
3771         (WTF::BackwardsGraph::newMap):
3772         (WTF::BackwardsGraph::successors):
3773         (WTF::BackwardsGraph::predecessors):
3774         (WTF::BackwardsGraph::index):
3775         (WTF::BackwardsGraph::node):
3776         (WTF::BackwardsGraph::numNodes):
3777         (WTF::BackwardsGraph::dump):
3778         * wtf/Dominators.h:
3779         (WTF::Dominators::Dominators):
3780         (WTF::Dominators::dump):
3781         (WTF::Dominators::LengauerTarjan::computeDepthFirstPreNumbering):
3782         * wtf/GraphNodeWorklist.h:
3783         (WTF::GraphNodeWith::GraphNodeWith):
3784         (WTF::GraphNodeWith::operator bool):
3785         * wtf/StdLibExtras.h:
3786         (WTF::callStatelessLambda):
3787         (WTF::checkAndSet):
3788
3789 2016-05-18  Saam barati  <sbarati@apple.com>
3790
3791         StringBuilder::appendQuotedJSONString doesn't properly protect against the math it's doing. Make the math fit the assertion.
3792         https://bugs.webkit.org/show_bug.cgi?id=157868
3793
3794         Reviewed by Benjamin Poulain.
3795
3796         appendQuotedJSONString was rounding up to the next power of two when resizing
3797         its buffer. Lets call the allocation size X. If X > 2^31, then
3798         roundUpToPowerOfTwo(X) == 0. This patch fixes this by making the
3799         assertion reflect what the code is doing. We now allocate to a size
3800         of X = std::max(maximumCapacityRequired , roundUpToPowerOfTwo(maximumCapacityRequired))
3801
3802         * wtf/text/StringBuilder.cpp:
3803         (WTF::StringBuilder::appendQuotedJSONString):
3804
3805 2016-05-17  Joseph Pecoraro  <pecoraro@apple.com>
3806
3807         REGRESSION(r192855): Math.random() always produces the same first 7 decimal points the first two invocations
3808         https://bugs.webkit.org/show_bug.cgi?id=157805
3809         <rdar://problem/26327851>
3810
3811         Reviewed by Geoffrey Garen.
3812
3813         * wtf/WeakRandom.h:
3814         (WTF::WeakRandom::setSeed):
3815         Advance once to randomize the 32bit seed across the 128bit state
3816         and avoid re-using 64bits of state in the second advance.
3817
3818 2016-05-17  Dean Jackson  <dino@apple.com>
3819
3820         Remove ES6_GENERATORS flag
3821         https://bugs.webkit.org/show_bug.cgi?id=157815
3822         <rdar://problem/26332894>
3823
3824         Reviewed by Geoffrey Garen.
3825
3826         This flag isn't needed. Generators are enabled everywhere and
3827         part of a stable specification.
3828
3829         * wtf/FeatureDefines.h:
3830
3831 2016-05-17  Filip Pizlo  <fpizlo@apple.com>
3832
3833         WTF should know about Language
3834         https://bugs.webkit.org/show_bug.cgi?id=157756
3835
3836         Reviewed by Geoffrey Garen.
3837
3838         This contains two changes:
3839
3840         - Move everything that WebCore's logic for getting the platform user preferred language
3841           depended on into WTF. This means CFBundleSPI.h and BlockObjCExceptions.h|cpp.
3842
3843         - Move WebCore::platformUserPreferredLanguages() to WTF::platformUserPreferredLanguages().
3844           This is needed by https://bugs.webkit.org/show_bug.cgi?id=157755, which will make JSC
3845           use this to detect the platform user preferred language when running standalone.
3846
3847         Moving the dependencies accounts for a huge chunk of this change, since we have to rewire
3848         all of the references to those headers in all of WebKit.
3849
3850         Moving platformUserPreferredLanguages() is mostly easy except for the weird callback.
3851         That function would call languageDidChange(), which needs to stay in WebCore. So, this
3852         gives WebCore the ability to register a languageDidChange callback. Other than this new
3853         logic, the code being added to WTF is just being lifted out of WebCore.
3854
3855         * WTF.xcodeproj/project.pbxproj:
3856         * wtf/BlockObjCExceptions.h: Added.
3857         * wtf/BlockObjCExceptions.mm: Added.
3858         (ReportBlockedObjCException):
3859         * wtf/PlatformEfl.cmake:
3860         * wtf/PlatformGTK.cmake:
3861         * wtf/PlatformJSCOnly.cmake:
3862         * wtf/PlatformMac.cmake:
3863         * wtf/PlatformUserPreferredLanguages.h: Added.
3864         * wtf/PlatformUserPreferredLanguagesMac.mm: Added.
3865         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
3866         (WTF::preferredLanguages):
3867         (+[WTFLanguageChangeObserver languagePreferencesDidChange:]):
3868         (WTF::httpStyleLanguageCode):
3869         (WTF::isValidICUCountryCode):
3870         (WTF::platformUserPreferredLanguages):
3871         * wtf/PlatformUserPreferredLanguagesUnix.cpp: Added.
3872         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
3873         (WTF::platformLanguage):
3874         (WTF::platformUserPreferredLanguages):
3875         * wtf/PlatformUserPreferredLanguagesWin.cpp: Added.
3876         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
3877         (WTF::localeInfo):
3878         (WTF::platformLanguage):
3879         (WTF::platformUserPreferredLanguages):
3880         * wtf/PlatformWin.cmake:
3881         * wtf/spi/cf: Added.
3882         * wtf/spi/cf/CFBundleSPI.h: Added.
3883
3884 2016-05-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>
3885
3886         DOMPromise should only restrict the resolution type
3887         https://bugs.webkit.org/show_bug.cgi?id=157307
3888
3889         Reviewed by Darin Adler.
3890
3891         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
3892         * wtf/RefPtr.h: Ditto.
3893
3894 2016-05-16  Michael Saboff  <msaboff@apple.com>
3895
3896         ARMV7K: Crash at JavaScriptCore: WTF::ScopedLambdaFunctor<bool
3897         https://bugs.webkit.org/show_bug.cgi?id=157781
3898
3899         Reviewed by Filip Pizlo.
3900
3901         Replaced use of ScopedLambda in locking code with std::function much as it was
3902         before change set 199760 to work around what appears to be a clang compiler issue.
3903
3904         * wtf/ParkingLot.cpp:
3905         (WTF::ParkingLot::parkConditionallyImpl):
3906         (WTF::ParkingLot::unparkOne):
3907         (WTF::ParkingLot::unparkAll):
3908         (WTF::ParkingLot::forEach):
3909         (WTF::ParkingLot::unparkOneImpl): Deleted.
3910         (WTF::ParkingLot::forEachImpl): Deleted.
3911         * wtf/ParkingLot.h:
3912         (WTF::ParkingLot::parkConditionally):
3913         (WTF::ParkingLot::unparkOne): Deleted.
3914         (WTF::ParkingLot::forEach): Deleted.
3915
3916 2016-05-15  Chris Dumez  <cdumez@apple.com>
3917
3918         Use more references in JS wrappers related code
3919         https://bugs.webkit.org/show_bug.cgi?id=157721
3920
3921         Reviewed by Darin Adler.
3922
3923         Add new static_reference_cast() overload that takes a Ref<U>&& in
3924         in order to downcast Ref<> types without causing ref-counting
3925         churn.
3926
3927         * wtf/Ref.h:
3928         (WTF::static_reference_cast):
3929
3930 2016-05-13  Chris Dumez  <cdumez@apple.com>
3931
3932         Unreviewed, rolling out r200837.
3933
3934         Seems to have regressed Speedometer and JetStream on iOS
3935
3936         Reverted changeset:
3937
3938         "DOMPromise should only restrict the resolution type"
3939         https://bugs.webkit.org/show_bug.cgi?id=157307
3940         http://trac.webkit.org/changeset/200837
3941
3942 2016-05-13  Beth Dakin  <bdakin@apple.com>
3943
3944         Add dyldSPI.h
3945         https://bugs.webkit.org/show_bug.cgi?id=157401
3946         -and corresponding-
3947         rdar://problem/26253396
3948
3949         Reviewed by Darin Adler.
3950
3951         New header for dyld spi.
3952         * WTF.xcodeproj/project.pbxproj:
3953         * wtf/spi/darwin/dyldSPI.h: Added.
3954
3955 2016-05-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>
3956
3957         DOMPromise should only restrict the resolution type
3958         https://bugs.webkit.org/show_bug.cgi?id=157307
3959
3960         Reviewed by Darin Adler.
3961
3962         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
3963         * wtf/RefPtr.h: Ditto.
3964
3965 2016-05-12  Daniel Bates  <dabates@apple.com>
3966
3967         Use SecTask SPI to retrieve code signing identifier for user directory suffix
3968         https://bugs.webkit.org/show_bug.cgi?id=157570
3969
3970         Reviewed by Darin Adler.
3971         <rdar://problem/25706517>
3972
3973         Forward declare SPI SecTaskCopySigningIdentifier().
3974
3975         * wtf/spi/cocoa/SecuritySPI.h:
3976
3977 2016-05-12  Csaba Osztrogonác  <ossy@webkit.org>
3978
3979         Remove ENABLE(ES6_ARROWFUNCTION_SYNTAX) guards
3980         https://bugs.webkit.org/show_bug.cgi?id=157564
3981
3982         Reviewed by Darin Adler.
3983
3984         * wtf/FeatureDefines.h:
3985
3986 2016-05-10  Filip Pizlo  <fpizlo@apple.com>
3987
3988         Internal JSC profiler should have a timestamped log of events for each code block
3989         https://bugs.webkit.org/show_bug.cgi?id=157538
3990
3991         Reviewed by Benjamin Poulain.
3992
3993         * wtf/PrintStream.h:
3994         (WTF::PrintStream::print):
3995
3996 2016-05-10  Chris Dumez  <cdumez@apple.com>
3997
3998         Get rid of a lot of calls to RefPtr::release()
3999         https://bugs.webkit.org/show_bug.cgi?id=157505
4000
4001         Reviewed by Alex Christensen.
4002
4003         Get rid of a lot of calls to RefPtr::release() and use WTFMove() instead.
4004
4005         * wtf/text/AtomicStringImpl.cpp:
4006         (WTF::HashAndUTF8CharactersTranslator::translate):
4007         * wtf/text/CString.cpp:
4008         (WTF::CString::copyBufferIfNeeded):
4009         * wtf/text/StringBuilder.cpp:
4010         (WTF::StringBuilder::allocateBuffer):
4011         (WTF::StringBuilder::allocateBufferUpConvert):
4012         (WTF::StringBuilder::shrinkToFit):
4013         * wtf/text/WTFString.cpp:
4014         (WTF::String::append):
4015         (WTF::String::insert):
4016         (WTF::String::removeInternal):
4017         * wtf/text/WTFString.h:
4018         (WTF::String::String):
4019         (WTF::String::operator=):
4020         (WTF::String::releaseImpl):
4021         (WTF::String::isNull): Deleted.
4022
4023 2016-05-08  Chris Dumez  <cdumez@apple.com>
4024
4025         [COCOA] Disable HAVE_DTRACE at build time
4026         https://bugs.webkit.org/show_bug.cgi?id=157433
4027         <rdar://problem/26148841>
4028
4029         Reviewed by Mark Lam.
4030
4031         Disable HAVE_DTRACE on COCOA since it is mostly unused and has a performance
4032         impact, at least on iOS.
4033
4034         * wtf/Platform.h:
4035
4036 2016-05-08  Chris Dumez  <cdumez@apple.com>
4037
4038         [Bindings] Simplify [RequiresExistingAtomicString] IDL extended attribute handling
4039         https://bugs.webkit.org/show_bug.cgi?id=157465
4040
4041         Reviewed by Darin Adler.
4042
4043         Add an AtomicString(RefPtr<AtomicStringImpl>&&) constructor that is now
4044         used by the bindings when [RequiresExistingAtomicString] is used. This
4045         is more efficient than using AtomicString(AtomicStringImpl*) as the
4046         caller has a RefPtr<AtomicStringImpl> and is consistent with the
4047         pre-existing String(RefPtr<AtomicStringImpl>&&) constructor.
4048
4049         * wtf/text/AtomicString.h:
4050         (WTF::AtomicString::AtomicString):
4051
4052 2016-05-08  Darin Adler  <darin@apple.com>
4053
4054         * wtf/text/WTFString.h: Remove pragma once. Not working for some reason.
4055
4056 2016-05-08  Darin Adler  <darin@apple.com>
4057
4058         Follow-up to that last patch (missed review comments).
4059
4060         * wtf/text/WTFString.h: Use nullptr instead of 0 as needed. Also use pragma once.
4061
4062 2016-05-08  Darin Adler  <darin@apple.com>
4063
4064         Change EventSource constructor to take an IDL dictionary instead of a WebCore::Dictionary
4065         https://bugs.webkit.org/show_bug.cgi?id=157459
4066
4067         Reviewed by Chris Dumez.
4068
4069         * wtf/text/WTFString.h: Export a symbol now used in WebCore.
4070
4071 2016-05-02  Sam Weinig  <sam@webkit.org>
4072
4073         On platforms that support it, use a SecTrustRef as the basis of CertificateInfo instead of a chain of SecCertificateRefs.
4074         https://bugs.webkit.org/show_bug.cgi?id=157220
4075
4076         Reviewed by Darin Adler.
4077
4078         * wtf/Platform.h:
4079         Add support for HAVE(SEC_TRUST_SERIALIZATION).
4080
4081         * wtf/spi/cocoa/SecuritySPI.h:
4082         Add SPI access to SecTrustSerialize and SecTrustDeserialize.
4083
4084 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
4085
4086         Add HLE locks and synchronic TTAS locks to the ToyLocks benchmark suite
4087         https://bugs.webkit.org/show_bug.cgi?id=157367
4088
4089         Rubber stamped by Benjamin Poulain.
4090         
4091         Turns out they are both a lot slower than WTF::Lock. The HLE lock is written according to Intel's
4092         documentation. The synchronic lock follows the algorithm of the "ttas_lock" in the synchronic
4093         test.hpp.
4094
4095         * benchmarks/ToyLocks.h:
4096
4097 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
4098
4099         Add a few more WTF locking benchmarks
4100         https://bugs.webkit.org/show_bug.cgi?id=157365
4101
4102         Rubber stamped by Benjamin Poulain.
4103         
4104         Factors out our toy locks into ToyLocks.h and adds a new test (LockFairnessTest) that measures
4105         the fairness of locks.
4106         
4107         The result: WTF::Lock is pretty fair enough.
4108
4109         * benchmarks/LockFairnessTest.cpp: Added.
4110         (main):
4111         * benchmarks/LockSpeedTest.cpp:
4112         (main):
4113         * benchmarks/ToyLocks.h: Added.
4114
4115 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
4116
4117         Speed up JSGlobalObject initialization by making some properties lazy
4118         https://bugs.webkit.org/show_bug.cgi?id=157045
4119
4120         Reviewed by Keith Miller.
4121         
4122         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
4123         do this a lot:
4124         
4125             static void callback(Foo& foo) { ... }
4126         
4127             foo.setCallback(callback);
4128         
4129         But that's not very nice to write if many different setCallback() calls are inside of the
4130         same very large function: you'll have to have a lot of static function definitions in
4131         one part of the file, and then a bunch of setCallback() calls in another part. It's hard
4132         to reason about what's going on with such code.
4133         
4134         So what if you wrote this instead:
4135         
4136             foo.setCallback([] (Foo& foo) { ... });
4137         
4138         Much nicer! There is a standard way to do this: lambdas that are stateless are
4139         convertible to function pointers. This change also offers another approach that is a bit
4140         more general.
4141         
4142         These additions to WTF help you do it:
4143         
4144         isStatelessLambda<Func>(): tells you if Func is a stateless lambda. This uses is_empty to
4145         test if the lambda is stateless. This turns out to be a stronger property than
4146         convertibility to function pointers. For example, a function pointer is convertible to a
4147         function pointer, but it is definitely stateful: you cannot successfully call it if you
4148         only has its type. On the other hand, a stateless lambda is really stateless in the sense
4149         that you only need its type to call it.
4150         
4151         callStatelessLambda<ResultType, Func>(Arguments&&...): calls the given stateless lambda.
4152         
4153         JSC uses these to build up some sophisticated lazy-initialization APIs. The use of
4154         statelessness allows JSC to combine a lambda with other logic into a single function
4155         pointer.
4156
4157         * wtf/StdLibExtras.h:
4158         (WTF::isStatelessLambda):
4159         (WTF::callStatelessLambda):
4160
4161 2016-05-04  Per Arne Vollan  <peavo@outlook.com>
4162
4163         [Win] Use NeverDestroyed template.
4164         https://bugs.webkit.org/show_bug.cgi?id=157345
4165
4166         Reviewed by Darin Adler.
4167
4168         * wtf/ThreadingWin.cpp:
4169         (WTF::threadMapMutex):
4170         (WTF::threadMap):
4171
4172 2016-05-04  Chris Dumez  <cdumez@apple.com>
4173
4174         Unreviewed, rolling out r200383 and r200406.
4175
4176         Seems to have caused crashes on iOS / ARMv7s
4177
4178         Reverted changesets:
4179
4180         "Speed up JSGlobalObject initialization by making some
4181         properties lazy"
4182         https://bugs.webkit.org/show_bug.cgi?id=157045
4183         http://trac.webkit.org/changeset/200383
4184
4185         "REGRESSION(r200383): Setting lazily initialized properties
4186         across frame boundaries crashes"
4187         https://bugs.webkit.org/show_bug.cgi?id=157333
4188         http://trac.webkit.org/changeset/200406
4189
4190 2016-05-03  Filip Pizlo  <fpizlo@apple.com>
4191
4192         Speed up JSGlobalObject initialization by making some properties lazy
4193         https://bugs.webkit.org/show_bug.cgi?id=157045
4194
4195         Reviewed by Keith Miller.
4196         
4197         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
4198         do this a lot:
4199         
4200             static void callback(Foo& foo) { ... }
4201         
4202             foo.setCallback(callback);
4203