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