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