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