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