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