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