Build fix for APPLE_INTERNAL_SDK builds after r211980.
[WebKit-https.git] / Source / WTF / ChangeLog
1 2017-02-09  Brady Eidson  <beidson@apple.com>
2
3         Build fix for APPLE_INTERNAL_SDK builds after r211980.
4
5         Unreviewed.
6
7         * wtf/spi/darwin/dyldSPI.h:
8
9 2017-02-09  Brady Eidson  <beidson@apple.com>
10
11         Transition "WebKit Library Version" checks to SDK version checks.
12         <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056
13
14         Reviewed by Geoffrey Garen.
15
16         * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.
17
18 2017-02-06  Jer Noble  <jer.noble@apple.com>
19
20         Playback stalls when a SourceBuffer append causes frame eviction
21         https://bugs.webkit.org/show_bug.cgi?id=167834
22
23         Reviewed by Eric Carlson.
24
25         Optimize the MediaTime class; specifically the compare() method. The class only
26         needs 6 bits to store the TimeFlags, so make that a uint8_t rather than uint32_t.
27         The implementation is slightly simpler if the TimeScale is unsigned, so make that
28         a uint32_t rather than int32_t. Inline the comparison operators. Optimize the equality
29         comparison by bitwise-and'ing the flags together and masking the result. Optimize for
30         common comparison scenarios (equal timeScales, equal timeValues(), etc.). Attempt the
31         mathematically simpler simpler method for comparing ratios, and only fall back to the
32         complex method if the results of multiplying the timeScale by the timeValue overflows.
33
34         * wtf/MediaTime.cpp:
35         (WTF::greatestCommonDivisor):
36         (WTF::leastCommonMultiple):
37         (WTF::signum):
38         (WTF::MediaTime::MediaTime):
39         (WTF::MediaTime::createWithFloat):
40         (WTF::MediaTime::createWithDouble):
41         (WTF::MediaTime::operator+):
42         (WTF::MediaTime::operator-):
43         (WTF::MediaTime::operator!):
44         (WTF::MediaTime::operator bool):
45         (WTF::MediaTime::compare):
46         (WTF::MediaTime::setTimeScale):
47         (WTF::abs):
48         (WTF::MediaTime::operator<): Deleted.
49         (WTF::MediaTime::operator>): Deleted.
50         (WTF::MediaTime::operator!=): Deleted.
51         (WTF::MediaTime::operator==): Deleted.
52         (WTF::MediaTime::operator>=): Deleted.
53         (WTF::MediaTime::operator<=): Deleted.
54         * wtf/MediaTime.h:
55
56 2017-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>
57
58         [GTK] Fix huge ENABLE_RESOURCE_USAGE warning spam
59
60         Unreviewed. We shouldn't redefine ENABLE_RESOURCE_USAGE in Platform.h as
61         it's already defined in cmakeconfig.h.
62
63         * wtf/Platform.h:
64
65 2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>
66
67         Performance Timing: Convert WTF::MonotonicTime and WTF::Seconds
68         https://bugs.webkit.org/show_bug.cgi?id=167768
69
70         Reviewed by Geoffrey Garen.
71
72         * wtf/Stopwatch.h:
73         (WTF::Stopwatch::elapsedTimeSince):
74         (WTF::Stopwatch::elapsedTimeSinceMonotonicTime): Deleted.
75
76 2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>
77
78         [GTK] Add initial implementation of resource usage overlay
79         https://bugs.webkit.org/show_bug.cgi?id=167731
80
81         Reviewed by Michael Catanzaro.
82
83         Enable RESOURCE_USAGE for GTK+ port too.
84
85         * wtf/Platform.h:
86
87 2017-02-02  Andreas Kling  <akling@apple.com>
88
89         [Mac] In-process memory pressure monitor for WebContent processes AKA websam
90         <https://webkit.org/b/167491>
91         <rdar://problem/30116072>
92
93         Reviewed by Antti Koivisto.
94
95         Add a WTF helper function for getting the current process's memory footprint.
96
97         * WTF.xcodeproj/project.pbxproj:
98         * wtf/CMakeLists.txt:
99         * wtf/MemoryFootprint.cpp:
100         (WTF::memoryFootprint):
101         * wtf/MemoryFootprint.h:
102
103 2017-02-02  Mark Lam  <mark.lam@apple.com>
104
105         Add a SIGILL crash analyzer to make debugging SIGILLs easier.
106         https://bugs.webkit.org/show_bug.cgi?id=167714
107         <rdar://problem/30318237>
108
109         Reviewed by Filip Pizlo.
110
111         * wtf/StdLibExtras.h:
112
113 2017-02-02  Commit Queue  <commit-queue@webkit.org>
114
115         Unreviewed, rolling out r211571 and r211582.
116         https://bugs.webkit.org/show_bug.cgi?id=167751
117
118         This change caused API test WebKit1.MemoryPressureHandler to
119         fail with an assertion. (Requested by ryanhaddad on #webkit).
120
121         Reverted changesets:
122
123         "[Mac] In-process memory pressure monitor for WebContent
124         processes."
125         https://bugs.webkit.org/show_bug.cgi?id=167491
126         http://trac.webkit.org/changeset/211571
127
128         "Unreviewed attempt to fix the Windows build after r211571."
129         http://trac.webkit.org/changeset/211582
130
131 2017-02-02  Andreas Kling  <akling@apple.com>
132
133         [Mac] In-process memory pressure monitor for WebContent processes.
134         <https://webkit.org/b/167491>
135         <rdar://problem/30116072>
136
137         Reviewed by Antti Koivisto.
138
139         Add a WTF helper function for getting the current process's memory footprint.
140
141         * WTF.xcodeproj/project.pbxproj:
142         * wtf/CMakeLists.txt:
143         * wtf/MemoryFootprint.cpp:
144         (WTF::memoryFootprint):
145         * wtf/MemoryFootprint.h:
146
147 2017-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>
148
149         Unreviewed, fix the WebKit nightly open source build
150         <rdar://problem/30308635>
151
152         We cannot assume all internal SDKs have the latest WebKitAdditions, so we need an explicit header check here.
153
154         * wtf/Platform.h:
155
156 2017-02-01  Andreas Kling  <akling@apple.com>
157
158         Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
159         <https://webkit.org/b/167387>
160         <rdar://problem/29711409>
161
162         Reviewed by Antti Koivisto.
163
164         Add a new mechanism for overriding the max thread QoS level globally:
165
166             void setGlobalMaxQOSClass(qos_class_t)
167             qos_class_t adjustedQOSClass(qos_class_t)
168
169         The QoS cap applies to all newly created threads, threads that try to override
170         their QoS class manually, and also passed down to bmalloc.
171
172         * wtf/Threading.cpp:
173         (WTF::setCurrentThreadIsUserInteractive):
174         (WTF::setCurrentThreadIsUserInitiated):
175         (WTF::setGlobalMaxQOSClass):
176         (WTF::adjustedQOSClass):
177         * wtf/Threading.h:
178         * wtf/ThreadingPthreads.cpp:
179         (WTF::createThreadInternal):
180         * wtf/cocoa/WorkQueueCocoa.cpp:
181         (WTF::dispatchQOSClass):
182
183 2017-01-31  Antti Koivisto  <antti@apple.com>
184
185         Teach cache coders to encode time_points
186         https://bugs.webkit.org/show_bug.cgi?id=167670
187
188         Reviewed by Andreas Kling.
189
190         * wtf/persistence/Coders.h:
191         (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode):
192         (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode):
193
194 2017-01-31  Joseph Pecoraro  <pecoraro@apple.com>
195
196         Removed unused m_nestedCount from RunLoop
197         https://bugs.webkit.org/show_bug.cgi?id=167674
198
199         Reviewed by Sam Weinig.
200
201         * wtf/RunLoop.h:
202         * wtf/cf/RunLoopCF.cpp:
203         (WTF::RunLoop::RunLoop):
204         (WTF::RunLoop::run):
205
206 2017-01-31  Filip Pizlo  <fpizlo@apple.com>
207
208         The mutator should be able to perform increments of GC work
209         https://bugs.webkit.org/show_bug.cgi?id=167528
210
211         Reviewed by Keith Miller and Geoffrey Garen.
212
213         We want dataLog to be locked even if you're not logging to a file!
214
215         * wtf/DataLog.cpp:
216         (WTF::initializeLogFileOnce):
217
218 2017-01-28  Wenson Hsieh  <wenson_hsieh@apple.com>
219
220         Check USE(APPLE_INTERNAL_SDK) instead of specific headers when importing from WebKitAdditions
221         https://bugs.webkit.org/show_bug.cgi?id=167555
222
223         Reviewed by Dan Bernstein.
224
225         Instead of guarding #import <WebKitAdditions/*> on the existence of the imported file, consult
226         USE(APPLE_INTERNAL_SDK) instead.
227
228         * wtf/Platform.h:
229
230 2017-01-26  Saam Barati  <sbarati@apple.com>
231
232         Harden how the compiler references GC objects
233         https://bugs.webkit.org/show_bug.cgi?id=167277
234         <rdar://problem/30179506>
235
236         Reviewed by Filip Pizlo.
237
238         I made TinyPtrSet use bitwise_cast instead of static_cast
239         for its singleEntry() function so that it can work on pointer-like
240         types just as it can on actual pointer types.
241         
242         An example of where this matters is when you have TinyPtrSet<T>
243         where T is defined to be a struct which wraps a pointer, e.g:
244         
245         struct T {
246             void* m_pointer;
247         }
248
249         * wtf/TinyPtrSet.h:
250         (WTF::TinyPtrSet::singleEntry):
251
252 2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>
253
254         Introduce an item-provider-based pasteboard wrapper
255         https://bugs.webkit.org/show_bug.cgi?id=167410
256
257         Reviewed by Enrica Casucci.
258
259         Adds an additional feature flag.
260
261         * wtf/FeatureDefines.h:
262
263 2017-01-25  Konstantin Tokarev  <annulen@yandex.ru>
264
265         Removed leftovers of pre-2015 VisualStudio support
266         https://bugs.webkit.org/show_bug.cgi?id=167434
267
268         Reviewed by Alex Christensen.
269
270         * wtf/Compiler.h:
271         * wtf/Platform.h:
272         * wtf/StringExtras.h:
273
274 2017-01-25  Chris Dumez  <cdumez@apple.com>
275
276         Disable Download attribute support on iOS
277         https://bugs.webkit.org/show_bug.cgi?id=167337
278         <rdar://problem/30154148>
279
280         Reviewed by Alexey Proskuryakov.
281
282         Disable Download attribute support on iOS as it currently does not work.
283
284         * wtf/FeatureDefines.h:
285
286 2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>
287
288         Add a hook to include additional feature defines
289         https://bugs.webkit.org/show_bug.cgi?id=167403
290
291         Reviewed by Enrica Casucci.
292
293         * wtf/Platform.h: Include AdditionalFeatureDefines.h, if it exists.
294
295 2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>
296
297         Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
298         https://bugs.webkit.org/show_bug.cgi?id=167394
299
300         Reviewed by Ryosuke Niwa.
301
302         * wtf/FeatureDefines.h:
303
304 2017-01-24  Konstantin Tokarev  <annulen@yandex.ru>
305
306         VS2015 supports ref qualifiers
307         https://bugs.webkit.org/show_bug.cgi?id=167368
308
309         Reviewed by Sam Weinig.
310
311         * wtf/Compiler.h: Enable
312         WTF_COMPILER_SUPPORTS_CXX_REFERENCE_QUALIFIED_FUNCTIONS for VS2015
313
314 2017-01-24  Daniel Bates  <dabates@apple.com>
315
316         StringView.split() should use an iterator design pattern instead of allocating a Vector
317         https://bugs.webkit.org/show_bug.cgi?id=163225
318
319         Reviewed by Darin Adler.
320
321         Implement StringView.split() using an iterator design.
322
323         Using an iterator design avoids the need to allocate a Vector of StringView objects,
324         which is space-inefficient and error prone as the returned Vector may outlive the
325         lifetime of the underlying string associated with the split (as StringView is a non-
326         owning reference to a string).
327
328         StringView.split() now returns a StringView::SplitResult object that implements begin()/end()
329         to support iterating over StringView substrings delimited by the specified separator
330         character. For example, to iterate over the 'c'-separated substrings of a StringView v,
331         you can write:
332
333         for (StringView substring : v.split('c'))
334             // Do something with substring.
335
336         * wtf/text/StringView.cpp:
337         (WTF::StringView::SplitResult::Iterator::findNextSubstring): Advances the iterator to point to the
338         next substring.
339         (WTF::StringView::split): Modified to return a SplitResult::Iterator object instead of a Vector<StringView>.
340         * wtf/text/StringView.h:
341         (WTF::StringView::SplitResult::SplitResult):
342         (WTF::StringView::SplitResult::Iterator::Iterator):
343         (WTF::StringView::SplitResult::Iterator::operator*):
344         (WTF::StringView::SplitResult::Iterator::operator==):
345         (WTF::StringView::SplitResult::Iterator::operator!=):
346         Implements the iterator interface.
347
348 2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>
349
350         Remove outdated ENABLE(CSP_NEXT) build flag
351         https://bugs.webkit.org/show_bug.cgi?id=167252
352
353         Reviewed by Brent Fulgham.
354
355         * wtf/FeatureDefines.h:
356
357 2017-01-17  Andreas Kling  <akling@apple.com>
358
359         Annotate FastMalloc functions with returns_nonnull attribute.
360         <https://webkit.org/b/167144>
361
362         Reviewed by Antti Koivisto.
363
364         Decorate fastMalloc() and friends with __attribute__((returns_nonnull)) for supporting
365         compilers that can do useful things with that information.
366
367         * wtf/Compiler.h:
368         * wtf/FastMalloc.h:
369
370 2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>
371
372         ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
373         https://bugs.webkit.org/show_bug.cgi?id=116551
374         <rdar://problem/13949830>
375
376         Reviewed by Alex Christensen.
377
378         * wtf/FeatureDefines.h:
379
380 2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>
381
382         Remove the REQUEST_ANIMATION_FRAME flag
383         https://bugs.webkit.org/show_bug.cgi?id=156980
384         <rdar://problem/25906849>
385
386         Reviewed by Simon Fraser.
387
388         * wtf/FeatureDefines.h:
389
390 2017-01-15  Sam Weinig  <sam@webkit.org>
391
392         Add the ability to use numbers in makeString()
393         https://bugs.webkit.org/show_bug.cgi?id=167087
394
395         Reviewed by Darin Adler.
396
397         Allow numbers to be easily used in makeString() and tryMakeString().
398
399         For instance, you can now write:
400             int amount = 7;
401             auto foo = makeString("There are ", amount, " apples in the cart");
402
403         * WTF.xcodeproj/project.pbxproj:
404         Add new file.
405
406         * wtf/text/IntegerToStringConversion.h:
407         (WTF::writeNumberToBufferImpl):
408         (WTF::writeNumberToBufferSigned):
409         (WTF::writeNumberToBufferUnsigned):
410         (WTF::lengthOfNumberAsStringImpl):
411         (WTF::lengthOfNumberAsStringSigned):
412         (WTF::lengthOfNumberAsStringUnsigned):
413         Add variants of integer writing code that compute the length of the string
414         that would be produced and writes the string to an existing buffer.
415
416         (WTF::IntegerToStringConversionTrait<AtomicString>::flush): Deleted.
417         (WTF::IntegerToStringConversionTrait<String>::flush): Deleted.
418         (WTF::IntegerToStringConversionTrait<StringBuilder>::flush): Deleted.
419         Move these traits to their respective classes.
420
421         * wtf/text/AtomicString.h:
422         (WTF::IntegerToStringConversionTrait<AtomicString>::flush):
423         * wtf/text/StringBuilder.h:
424         (WTF::IntegerToStringConversionTrait<StringBuilder>::flush):
425         * wtf/text/WTFString.h:
426         (WTF::IntegerToStringConversionTrait<String>::flush):
427         Traits moved here from IntegerToStringConversion.h
428
429         * wtf/text/StringConcatenateNumbers.h: Added.
430         (WTF::StringTypeAdapter<int>::StringTypeAdapter<int>):
431         (WTF::StringTypeAdapter<int>::length):
432         (WTF::StringTypeAdapter<int>::is8Bit):
433         (WTF::StringTypeAdapter<int>::writeTo):
434         (WTF::StringTypeAdapter<int>::toString):
435         (WTF::StringTypeAdapter<unsigned>::StringTypeAdapter<unsigned>):
436         (WTF::StringTypeAdapter<unsigned>::length):
437         (WTF::StringTypeAdapter<unsigned>::is8Bit):
438         (WTF::StringTypeAdapter<unsigned>::writeTo):
439         (WTF::StringTypeAdapter<unsigned>::toString):
440         (WTF::StringTypeAdapter<float>::StringTypeAdapter<float>):
441         (WTF::StringTypeAdapter<float>::length):
442         (WTF::StringTypeAdapter<float>::is8Bit):
443         (WTF::StringTypeAdapter<float>::writeTo):
444         (WTF::StringTypeAdapter<float>::toString):
445         (WTF::StringTypeAdapter<double>::StringTypeAdapter<double>):
446         (WTF::StringTypeAdapter<double>::length):
447         (WTF::StringTypeAdapter<double>::is8Bit):
448         (WTF::StringTypeAdapter<double>::writeTo):
449         (WTF::StringTypeAdapter<double>::toString):
450         Add basic adaptors for int, unsigned, float, and double.
451
452         (WTF::FormattedNumber::fixedPrecision):
453         (WTF::FormattedNumber::fixedWidth):
454         (WTF::FormattedNumber::length):
455         (WTF::FormattedNumber::buffer):
456         (WTF::FormattedNumber::stringView):
457         (WTF::StringTypeAdapter<FormattedNumber>::StringTypeAdapter<FormattedNumber>):
458         (WTF::StringTypeAdapter<FormattedNumber>::length):
459         (WTF::StringTypeAdapter<FormattedNumber>::is8Bit):
460         (WTF::StringTypeAdapter<FormattedNumber>::writeTo):
461         (WTF::StringTypeAdapter<FormattedNumber>::toString):
462         Add a special class, FormattedNumber, and an adaptor for it, allowing for
463         fixedPrecision and fixedWidth representation of doubles.
464
465 2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>
466
467         WebAssembly: Suppress warnings & errors in GCC
468         https://bugs.webkit.org/show_bug.cgi?id=167049
469
470         Reviewed by Sam Weinig.
471
472         * wtf/LEBDecoder.h:
473         (WTF::LEBDecoder::decodeInt):
474         If T = int, it performs `-1 << shift`. It causes
475         warning in GCC. Instead, we first cast it to the
476         UnsignedT, perform operation and re-cast to the
477         T.
478
479 2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>
480
481         Remove ENABLE(DETAILS_ELEMENT) guards
482         https://bugs.webkit.org/show_bug.cgi?id=167042
483
484         Reviewed by Alex Christensen.
485
486         * wtf/FeatureDefines.h:
487
488 2017-01-11  Darin Adler  <darin@apple.com>
489
490         Remove PassRefPtr from more of "platform"
491         https://bugs.webkit.org/show_bug.cgi?id=166809
492
493         Reviewed by Sam Weinig.
494
495         * wtf/Ref.h: Changed the template so that a const Ref<T> does not prohibit non-const
496         use of T. We can still use const Ref<const T> to express that. The earlier design
497         was intentional, but was not consistent with either actual references or with
498         other smart pointer classes like RefPtr. One way to see how much better this is,
499         is to see all the many, many cases where we have const_cast just to work around
500         this. I searched for those and included fixes for many in this patch.
501
502 2017-01-12  Chris Dumez  <cdumez@apple.com>
503
504         [iOS] Implement support for KeyboardEvent.code
505         https://bugs.webkit.org/show_bug.cgi?id=166932
506         <rdar://problem/29972518>
507
508         Reviewed by Darin Adler.
509
510         Enable KEYBOARD_CODE_ATTRIBUTE feature on iOS.
511
512         * wtf/FeatureDefines.h:
513
514 2017-01-11  Andreas Kling  <akling@apple.com>
515
516         Crash when WebCore's GC heap grows way too large.
517         <https://webkit.org/b/166875>
518         <rdar://problem/27896585>
519
520         Reviewed by Mark Lam.
521
522         Publish the WTF::GB constant.
523
524         * wtf/StdLibExtras.h:
525
526 2017-01-11  Anders Carlsson  <andersca@apple.com>
527
528         navigator.plugins.refresh and WKContextRefreshPlugIns doesn't pick up changes to already-present plug-ins
529         https://bugs.webkit.org/show_bug.cgi?id=166942
530         rdar://problem/29839194
531
532         Reviewed by Sam Weinig.
533
534         * wtf/spi/cf/CFBundleSPI.h:
535         Add SPI declaration.
536
537 2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
538
539         [GTK] Should support key and code properties on keyboard events
540         https://bugs.webkit.org/show_bug.cgi?id=166759
541
542         Reviewed by Carlos Garcia Campos.
543
544         * wtf/FeatureDefines.h: enable key and code properties support for GTK.
545
546 2017-01-08  Antti Koivisto  <antti@apple.com>
547
548         Move cache coders to WTF
549         https://bugs.webkit.org/show_bug.cgi?id=166825
550
551         Rubber-stamped by Sam Weinig.
552
553         Make it possible to use robust serialization of WTF types on the lower levels of the stack.
554
555         * WTF.xcodeproj/project.pbxproj:
556         * wtf/persistence: Added.
557         * wtf/persistence/Coder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoder.h.
558         (WebKit::NetworkCache::Coder::encode): Deleted.
559         (WebKit::NetworkCache::Coder::decode): Deleted.
560         * wtf/persistence/Coders.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.
561         (WebKit::NetworkCache::Coder<AtomicString>::encode): Deleted.
562         (WebKit::NetworkCache::Coder<AtomicString>::decode): Deleted.
563         (WebKit::NetworkCache::Coder<CString>::encode): Deleted.
564         (WebKit::NetworkCache::Coder<CString>::decode): Deleted.
565         (WebKit::NetworkCache::Coder<String>::encode): Deleted.
566         (WebKit::NetworkCache::decodeStringText): Deleted.
567         (WebKit::NetworkCache::Coder<String>::decode): Deleted.
568         (WebKit::NetworkCache::Coder<SHA1::Digest>::encode): Deleted.
569         (WebKit::NetworkCache::Coder<SHA1::Digest>::decode): Deleted.
570         (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::encode): Deleted.
571         (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::decode): Deleted.
572         * wtf/persistence/Coders.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.h.
573         (WebKit::NetworkCache::Coder<std::optional<T>>::encode): Deleted.
574         (WebKit::NetworkCache::Coder<std::optional<T>>::decode): Deleted.
575         * wtf/persistence/Decoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp.
576         (WebKit::NetworkCache::Decoder::Decoder): Deleted.
577         (WebKit::NetworkCache::Decoder::~Decoder): Deleted.
578         (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
579         (WebKit::NetworkCache::Decoder::decodeFixedLengthData): Deleted.
580         (WebKit::NetworkCache::Decoder::decodeNumber): Deleted.
581         (WebKit::NetworkCache::Decoder::decode): Deleted.
582         (WebKit::NetworkCache::Decoder::verifyChecksum): Deleted.
583         * wtf/persistence/Decoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h.
584         (WebKit::NetworkCache::Decoder::length): Deleted.
585         (WebKit::NetworkCache::Decoder::currentOffset): Deleted.
586         (WebKit::NetworkCache::Decoder::decodeEnum): Deleted.
587         (WebKit::NetworkCache::Decoder::decode): Deleted.
588         (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
589         * wtf/persistence/Encoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp.
590         (WebKit::NetworkCache::Encoder::Encoder): Deleted.
591         (WebKit::NetworkCache::Encoder::~Encoder): Deleted.
592         (WebKit::NetworkCache::Encoder::grow): Deleted.
593         (WebKit::NetworkCache::Encoder::updateChecksumForData): Deleted.
594         (WebKit::NetworkCache::Encoder::encodeFixedLengthData): Deleted.
595         (WebKit::NetworkCache::Encoder::encodeNumber): Deleted.
596         (WebKit::NetworkCache::Encoder::encode): Deleted.
597         (WebKit::NetworkCache::Encoder::encodeChecksum): Deleted.
598         * wtf/persistence/Encoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h.
599         (WebKit::NetworkCache::Encoder::encodeEnum): Deleted.
600         (WebKit::NetworkCache::Encoder::encode): Deleted.
601         (WebKit::NetworkCache::Encoder::operator<<): Deleted.
602         (WebKit::NetworkCache::Encoder::buffer): Deleted.
603         (WebKit::NetworkCache::Encoder::bufferSize): Deleted.
604         (WebKit::NetworkCache::Encoder::updateChecksumForNumber): Deleted.
605
606 2017-01-08  Konstantin Tokarev  <annulen@yandex.ru>
607
608         Introduce CPU(X86_SSE2) instead of various SSE2 checks
609         https://bugs.webkit.org/show_bug.cgi?id=166808
610
611         Reviewed by Michael Catanzaro.
612
613         Now copyLCharsFromUCharSource can use SSE2 implementation on non-Darwin
614         OSes, and all SSE2 code paths are available for MSVC on x86 if /arch:SSE2
615         or higher is enabled, and for MSVC on x86_64.
616
617         * wtf/Platform.h:
618         * wtf/text/ASCIIFastPath.h:
619         (WTF::copyLCharsFromUCharSource):
620
621 2017-01-05  Myles C. Maxfield  <mmaxfield@apple.com>
622
623         Carets can split up marriages and families
624         https://bugs.webkit.org/show_bug.cgi?id=166711
625         <rdar://problem/29019333>
626
627         Reviewed by Alex Christensen.
628
629         There are four code points which should be allowed to accept emoji modifiers:
630         - U+1F46A FAMILY
631         - U+1F46B MAN AND WOMAN HOLDING HANDS
632         - U+1F46C TWO MEN HOLDING HANDS
633         - U+1F46D TWO WOMEN HOLDING HANDS
634
635         Even though macOS's and iOS's emoji keyboard don't allow users to actually type
636         these combinations, we may still receive them from other platforms. We should
637         therefore treat these as joining sequences. Rendering isn't a problem because
638         the fonts accept the emoji modifiers, but our caret placement code isn't educated
639         about it. Currently, we treat these emoji groups as ligatures, allowing the caret
640         to be placed between the two code points, which visually shows as being horizontally
641         centered in the glyph. Instead, we should treat these code points as accepting
642         emoji modifiers.
643
644         Tests: editing/caret/emoji.html
645                editing/caret/ios/emoji.html
646
647         * wtf/text/TextBreakIterator.cpp:
648         (WTF::cursorMovementIterator):
649
650 2017-01-05  Filip Pizlo  <fpizlo@apple.com>
651
652         AutomaticThread timeout shutdown leaves a small window where notify() would think that the thread is still running
653         https://bugs.webkit.org/show_bug.cgi?id=166742
654
655         Reviewed by Geoffrey Garen.
656         
657         Remove the use of the RAII ThreadScope, since the use of RAII helped make this bug possible:
658         we'd do ~ThreadScope after we had done ~LockHolder, so in between when we decided to shut
659         down a thread and when it reported itself as being shut down, there was a window where a
660         notify() call would get confused.
661         
662         Now, we run all thread shutdown stuff while the lock is held. We release the lock last. One
663         API implication is that threadWillStop becomes threadIsStopping and it's called while the
664         lock is held. This seems benign.
665
666         * wtf/AutomaticThread.cpp:
667         (WTF::AutomaticThread::start):
668         (WTF::AutomaticThread::threadIsStopping):
669         (WTF::AutomaticThread::ThreadScope::ThreadScope): Deleted.
670         (WTF::AutomaticThread::ThreadScope::~ThreadScope): Deleted.
671         (WTF::AutomaticThread::threadWillStop): Deleted.
672         * wtf/AutomaticThread.h:
673
674 2017-01-04  Darin Adler  <darin@apple.com>
675
676         Remove PassRefPtr use from the "html" directory, other improvements
677         https://bugs.webkit.org/show_bug.cgi?id=166635
678
679         Reviewed by Alex Christensen.
680
681         * wtf/RefPtr.h:
682         (WTF::makeRefPtr): Added.
683
684 2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>
685
686         Unreviewed build fix after r210313
687         https://bugs.webkit.org/show_bug.cgi?id=166676
688
689         Revert `#pragma once` to ifdefs due to build failure.
690
691         * wtf/text/StringView.h:
692
693 2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>
694
695         Limit thread name appropriately
696         https://bugs.webkit.org/show_bug.cgi?id=166676
697
698         Reviewed by Sam Weinig.
699
700         In some platform, the max length of thread names are limited.
701         For example, the number of the max length is 32 in Windows and
702         16 in Linux. But the specified thread name is typically long
703         in WebKit like "com.apple.CoreIPC.ReceiveQueue"
704
705         We port the logic substring the thread name in
706         generic/WorkQueueGeneric.cpp to Threading. It retrieves the name
707         "ReceiveQueue" from "com.apple.CoreIPC.ReceiveQueue". And apply
708         the appropriate the thread name limit and use it on Linux and
709         Windows environment.
710
711         * wtf/Threading.cpp:
712         (WTF::normalizeThreadName):
713         (WTF::createThread):
714         * wtf/Threading.h:
715         * wtf/ThreadingPthreads.cpp:
716         (WTF::initializeCurrentThreadInternal):
717         * wtf/ThreadingWin.cpp:
718         (WTF::initializeCurrentThreadInternal):
719         * wtf/generic/WorkQueueGeneric.cpp:
720         (WorkQueue::platformInitialize):
721         * wtf/text/StringView.h:
722         (WTF::StringView::left):
723         (WTF::StringView::right):
724         (WTF::StringView::reverseFind):
725
726 2017-01-04  Sam Weinig  <sam@webkit.org>
727
728         REGRESSION (r210257): com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::ExceptionOr<WTF::Ref<WebCore::Database> >::operator= + 14
729         <rdar://problem/29866398> 
730
731         * wtf/Expected.h:
732         (WTF::Expected::swap):
733         Add missing calls to destroy() when moving things over each other in a union.
734
735 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
736
737         Use prctl to name thread on Linux
738         https://bugs.webkit.org/show_bug.cgi?id=166663
739
740         Reviewed by Michael Catanzaro.
741
742         It is quite useful if we can name threads. This name will be shown in GDB.
743         While macOS uses pthread_setname_np, we can use prctl on Linux.
744
745         * wtf/ThreadingPthreads.cpp:
746         (WTF::initializeCurrentThreadInternal):
747
748 2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>
749
750         WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
751         https://bugs.webkit.org/show_bug.cgi?id=166645
752
753         Reviewed by Carlos Garcia Campos.
754
755         WorkQueue can be destroyed on its invoking thread itself.
756         The scenario is the following.
757
758             1. Create WorkQueue (in thread A).
759             2. Dispatch a task (in thread A, dispatching a task to thread B).
760             3. Deref in thread A.
761             4. The task is executed in thread B.
762             5. Deref in thread B.
763             6. The WorkQueue is destroyed, calling platformInvalidate in thread B.
764
765         In that case, if platformInvalidate waits thread B's termination, it causes deadlock.
766         We do not need to wait the thread termination.
767
768         * wtf/WorkQueue.h:
769         * wtf/generic/WorkQueueGeneric.cpp:
770         (WorkQueue::platformInitialize):
771         (WorkQueue::platformInvalidate):
772
773 2017-01-03  Sam Weinig  <sam@webkit.org>
774
775         Make WTF::Expected support Ref template parameters
776         https://bugs.webkit.org/show_bug.cgi?id=166662
777
778         Reviewed by Alex Christensen.
779
780         Tests: Added to TestWebKitAPI/Expected.cpp
781
782         * wtf/Expected.h:
783         (WTF::UnexpectedType::value):
784         Add overloads based on this value type to allow getting at the value
785         as an rvalue for moving the error into the Expected.
786
787         (WTF::Expected::Expected):
788         Add overload that takes an ErrorType/UnexpectedType<ErrorType> as an rvalue.
789
790         (WTF::Expected::swap):
791         Move the temporary value/error rather than copying.
792
793 2017-01-02  Julien Brianceau  <jbriance@cisco.com>
794
795         Remove sh4 specific code from JavaScriptCore
796         https://bugs.webkit.org/show_bug.cgi?id=166640
797
798         Reviewed by Filip Pizlo.
799
800         * wtf/Platform.h:
801
802 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
803
804         Leverage Substring to create new AtomicStringImpl for StaticStringImpl and SymbolImpl
805         https://bugs.webkit.org/show_bug.cgi?id=166636
806
807         Reviewed by Darin Adler.
808
809         Previously we always create the full atomic string if we need to create the same string
810         based on the given value. For example, when generating AtomicStringImpl from the SymbolImpl,
811         we need to create a new AtomicStringImpl since SymbolImpl never becomes `isAtomic() == true`.
812         But it is costly.
813
814         This patch leverages the substring system of StringImpl. Instead of allocating the completely
815         duplicate string, we create a substring StringImpl that shares the same content with the
816         base string.
817
818         * wtf/text/AtomicStringImpl.cpp:
819         (WTF::stringTable):
820         (WTF::addToStringTable):
821         (WTF::addSubstring):
822         (WTF::AtomicStringImpl::addSlowCase):
823         (WTF::AtomicStringImpl::remove):
824         (WTF::AtomicStringImpl::lookUpSlowCase):
825         * wtf/text/StringImpl.h:
826         (WTF::StringImpl::StaticStringImpl::operator StringImpl&):
827
828 2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>
829
830         Use StaticStringImpl instead of StaticASCIILiteral
831         https://bugs.webkit.org/show_bug.cgi?id=166586
832
833         Reviewed by Darin Adler.
834
835         It is more handy way to define static StringImpl. It calculates the length
836         and hash value by using the constexpr constructor and function. So we do
837         not need to calculate these things in Perl script.
838         And it allows us to use StaticStringImpl in the hand written C++ code.
839         Previously, we need to calculate the length and hash value by hand if we
840         would like to use StaticASCIILiteral in the hand written C++ code, and it
841         meant that we cannot use it at all in the hand written C++ code.
842
843         * wtf/text/AtomicStringImpl.cpp:
844         (WTF::AtomicStringImpl::addSlowCase):
845         (WTF::AtomicStringImpl::lookUpSlowCase):
846         * wtf/text/AtomicStringImpl.h:
847         * wtf/text/StringImpl.h:
848         * wtf/text/SymbolImpl.h:
849         * wtf/text/UniquedStringImpl.h:
850
851 2017-01-02  Andreas Kling  <akling@apple.com>
852
853         Discard media controls JS/CSS caches under memory pressure.
854         <https://webkit.org/b/166639>
855
856         Reviewed by Antti Koivisto.
857
858         * wtf/text/WTFString.h:
859         (WTF::String::clearImplIfNotShared): Add a helper for clearing a String if the underlying
860         StringImpl is not referenced by anyone else.
861
862 2016-12-22  Mark Lam  <mark.lam@apple.com>
863
864         De-duplicate finally blocks.
865         https://bugs.webkit.org/show_bug.cgi?id=160168
866
867         Reviewed by Saam Barati.
868
869         Added some methods to bring SegmentedVector closer to parity with Vector.
870
871         * wtf/SegmentedVector.h:
872         (WTF::SegmentedVector::first):
873         (WTF::SegmentedVector::last):
874         (WTF::SegmentedVector::takeLast):
875
876 2016-12-19  Mark Lam  <mark.lam@apple.com>
877
878         Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 2: Rollout r209952.
879         https://bugs.webkit.org/show_bug.cgi?id=166049
880
881         Not reviewed.
882
883         * wtf/SegmentedVector.h:
884         (WTF::SegmentedVector::last):
885         (WTF::SegmentedVector::first): Deleted.
886         (WTF::SegmentedVector::takeLast): Deleted.
887
888 2016-12-16  Mark Lam  <mark.lam@apple.com>
889
890         Add predecessor info to dumps from JSC_dumpBytecodeLivenessResults=true.
891         https://bugs.webkit.org/show_bug.cgi?id=165958
892
893         Reviewed by Keith Miller.
894
895         Added some methods to bring SegmentedVector closer to parity with Vector.
896
897         * wtf/SegmentedVector.h:
898         (WTF::SegmentedVector::first):
899         (WTF::SegmentedVector::last):
900         (WTF::SegmentedVector::takeLast):
901
902 2016-12-16  Michael Saboff  <msaboff@apple.com>
903
904         REGRESSION: HipChat and Mail sometimes hang beneath JSC::Heap::lastChanceToFinalize()
905         https://bugs.webkit.org/show_bug.cgi?id=165962
906
907         Reviewed by Filip Pizlo.
908
909         There is an inherent race in Condition::waitFor() where the timeout can happen just before
910         a notify from another thread.
911
912         Fixed this by adding a condition variable and flag to each AutomaticThread.  The flag
913         is used to signify to a notifying thread that the thread is waiting.  That flag is set
914         in the waiting thread before calling waitFor() and cleared by another thread when it
915         notifies the thread.  The access to that flag happens when the lock is held.
916         Now the waiting thread checks if the flag after a timeout to see that it in fact should
917         proceed like a normal notification.
918
919         The added condition variable allows us to target a specific thread.  We used to keep a list
920         of waiting threads, now we keep a list of all threads.  To notify one thread, we look for
921         a waiting thread and notify it directly.  If we can't find a waiting thread, we start a
922         sleeping thread.
923
924         We notify all threads by waking all waiting threads and starting all sleeping threads.
925
926         * wtf/AutomaticThread.cpp:
927         (WTF::AutomaticThreadCondition::notifyOne):
928         (WTF::AutomaticThreadCondition::notifyAll):
929         (WTF::AutomaticThread::isWaiting):
930         (WTF::AutomaticThread::notify):
931         (WTF::AutomaticThread::start):
932         * wtf/AutomaticThread.h:
933
934 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
935
936         Unreviewed build fix after r209910
937
938         Unreviewed.
939
940         * wtf/Platform.h:
941
942 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
943
944         Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
945         https://bugs.webkit.org/show_bug.cgi?id=165931
946
947         We have a class declaration for TextBreakIterator but no definition for it. When we
948         create an ICU UBreakIterator, we immediately reinterpret_cast it to this undefined
949         type, and pass it around our code inside WebCore. Then, whenever we want to actually
950         use this iterator, we reinterpret_cast it back to UBreakIterator. This is likely due
951         to some ports historically implementing breaking interators on top of other libraries
952         other than ICU; however, now, all ports use ICU. Because this internal type is not
953         helpful and just adds confusion, we should just call our breaking iterators what
954         they are: UBreakIterators.
955
956         This patch is a mechanical replacement of TextBreakIterator to UBreakIterator and
957         removes the functions we were calling which pass through directly to ubrk_*().
958
959         Reviewed by Alex Christensen.
960
961         * wtf/text/LineBreakIteratorPoolICU.h:
962         (WTF::LineBreakIteratorPool::take):
963         (WTF::LineBreakIteratorPool::put):
964         * wtf/text/StringView.cpp:
965         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
966         * wtf/text/TextBreakIterator.cpp:
967         (WTF::initializeIterator):
968         (WTF::initializeIteratorWithRules):
969         (WTF::setTextForIterator):
970         (WTF::setContextAwareTextForIterator):
971         (WTF::wordBreakIterator):
972         (WTF::sentenceBreakIterator):
973         (WTF::cursorMovementIterator):
974         (WTF::acquireLineBreakIterator):
975         (WTF::releaseLineBreakIterator):
976         (WTF::openLineBreakIterator):
977         (WTF::closeLineBreakIterator):
978         (WTF::getNonSharedCharacterBreakIterator):
979         (WTF::cacheNonSharedCharacterBreakIterator):
980         (WTF::isWordTextBreak):
981         (WTF::numGraphemeClusters):
982         (WTF::numCharactersInGraphemeClusters):
983         (WTF::textBreakFirst): Deleted.
984         (WTF::textBreakLast): Deleted.
985         (WTF::textBreakNext): Deleted.
986         (WTF::textBreakPrevious): Deleted.
987         (WTF::textBreakPreceding): Deleted.
988         (WTF::textBreakFollowing): Deleted.
989         (WTF::textBreakCurrent): Deleted.
990         (WTF::isTextBreak): Deleted.
991         * wtf/text/TextBreakIterator.h:
992         (WTF::LazyLineBreakIterator::lastCharacter):
993         (WTF::LazyLineBreakIterator::secondToLastCharacter):
994         (WTF::LazyLineBreakIterator::setPriorContext):
995         (WTF::LazyLineBreakIterator::updatePriorContext):
996         (WTF::LazyLineBreakIterator::resetPriorContext):
997         (WTF::LazyLineBreakIterator::priorContextLength):
998         (WTF::LazyLineBreakIterator::get):
999         (WTF::NonSharedCharacterBreakIterator::operator UBreakIterator*):
1000         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*): Deleted.
1001
1002 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
1003
1004         Sort Xcode project files
1005         https://bugs.webkit.org/show_bug.cgi?id=165937
1006
1007         Reviewed by Simon Fraser.
1008
1009         * WTF.xcodeproj/project.pbxproj:
1010
1011 2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>
1012
1013         Added missing override and final specifiers
1014         https://bugs.webkit.org/show_bug.cgi?id=165903
1015
1016         Reviewed by Darin Adler.
1017
1018         * wtf/RunLoop.h:
1019
1020 2016-12-15  Yusuke Suzuki  <utatane.tea@gmail.com>
1021
1022         [JSC] Optimize Kraken stringify
1023         https://bugs.webkit.org/show_bug.cgi?id=165857
1024
1025         Reviewed by Darin Adler.
1026
1027         Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
1028         According to the result produced by Linux `perf`, it occupies 28% of execution time.
1029
1030         We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
1031         And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.
1032
1033         It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.
1034
1035             Performance result in my MBP (dandelion).
1036
1037                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
1038                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
1039                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
1040                 with 95% confidence intervals in milliseconds.
1041
1042                                                    baseline                  patched
1043
1044                 json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
1045
1046                 <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
1047
1048             Performance result in my Linux laptop (hanayamata).
1049
1050                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
1051                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
1052                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
1053                 with 95% confidence intervals in milliseconds.
1054
1055                                                    baseline                  patched
1056
1057                 json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
1058
1059                 <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
1060
1061         * wtf/text/StringBuilder.cpp:
1062         (WTF::appendQuotedJSONStringInternalSlow):
1063         (WTF::appendQuotedJSONStringInternal):
1064
1065 2016-12-14  Commit Queue  <commit-queue@webkit.org>
1066
1067         Unreviewed, rolling out r209795.
1068         https://bugs.webkit.org/show_bug.cgi?id=165853
1069
1070         rolled out the wrong revision (Requested by pizlo on #webkit).
1071
1072         Reverted changeset:
1073
1074         "MarkedBlock::marksConveyLivenessDuringMarking should take
1075         into account collection scope"
1076         https://bugs.webkit.org/show_bug.cgi?id=165741
1077         http://trac.webkit.org/changeset/209795
1078
1079 2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>
1080
1081         REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
1082         https://bugs.webkit.org/show_bug.cgi?id=164022
1083
1084         Reviewed by Xabier Rodriguez-Calvar.
1085
1086         * wtf/glib/GLibUtilities.h:
1087         Added new macros to convert gulong to/from gpointer.
1088
1089 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
1090
1091         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1092         https://bugs.webkit.org/show_bug.cgi?id=165741
1093
1094         Unreviewed, re-landing this with fix (revert erroneous change to Options).
1095
1096         * WTF.xcodeproj/project.pbxproj:
1097         * wtf/CMakeLists.txt:
1098         * wtf/DataLog.cpp:
1099         (WTF::initializeLogFileOnce):
1100         (WTF::initializeLogFile):
1101         (WTF::dataFile):
1102         * wtf/DataLog.h:
1103         * wtf/LockedPrintStream.cpp: Added.
1104         (WTF::LockedPrintStream::LockedPrintStream):
1105         (WTF::LockedPrintStream::~LockedPrintStream):
1106         (WTF::LockedPrintStream::vprintf):
1107         (WTF::LockedPrintStream::flush):
1108         (WTF::LockedPrintStream::begin):
1109         (WTF::LockedPrintStream::end):
1110         * wtf/LockedPrintStream.h: Added.
1111         * wtf/PrintStream.cpp:
1112         (WTF::PrintStream::printfVariableFormat):
1113         (WTF::PrintStream::begin):
1114         (WTF::PrintStream::end):
1115         * wtf/PrintStream.h:
1116         (WTF::PrintStream::atomically):
1117         (WTF::PrintStream::print):
1118         (WTF::PrintStream::println):
1119         (WTF::PrintStream::printImpl):
1120         (WTF::>::unpack):
1121         (WTF::FormatImpl::FormatImpl):
1122         (WTF::FormatImpl::dump):
1123         (WTF::format):
1124         (WTF::printInternal):
1125         * wtf/RecursiveLockAdapter.h: Added.
1126         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
1127         (WTF::RecursiveLockAdapter::lock):
1128         (WTF::RecursiveLockAdapter::unlock):
1129         (WTF::RecursiveLockAdapter::tryLock):
1130         (WTF::RecursiveLockAdapter::isLocked):
1131         * wtf/WordLock.cpp:
1132         * wtf/WordLock.h:
1133
1134 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
1135
1136         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1137         https://bugs.webkit.org/show_bug.cgi?id=165741
1138
1139         Unreviewed rollout due to performance regression.
1140
1141         * WTF.xcodeproj/project.pbxproj:
1142         * wtf/CMakeLists.txt:
1143         * wtf/DataLog.cpp:
1144         (WTF::initializeLogFileOnce):
1145         (WTF::initializeLogFile):
1146         (WTF::dataFile):
1147         * wtf/DataLog.h:
1148         * wtf/LockedPrintStream.cpp: Removed.
1149         * wtf/LockedPrintStream.h: Removed.
1150         * wtf/PrintStream.cpp:
1151         (WTF::PrintStream::printfVariableFormat): Deleted.
1152         (WTF::PrintStream::begin): Deleted.
1153         (WTF::PrintStream::end): Deleted.
1154         * wtf/PrintStream.h:
1155         (WTF::PrintStream::print):
1156         (WTF::PrintStream::println):
1157         (WTF::PrintStream::atomically): Deleted.
1158         (WTF::PrintStream::printImpl): Deleted.
1159         (): Deleted.
1160         (WTF::>::unpack): Deleted.
1161         (WTF::FormatImpl::FormatImpl): Deleted.
1162         (WTF::FormatImpl::dump): Deleted.
1163         (WTF::format): Deleted.
1164         * wtf/RecursiveLockAdapter.h: Removed.
1165         * wtf/WordLock.cpp:
1166         * wtf/WordLock.h:
1167
1168 2016-12-13  JF Bastien  <jfbastien@apple.com>
1169
1170         std::expected: fix rvalue forwarding issues
1171         https://bugs.webkit.org/show_bug.cgi?id=165812
1172
1173         Reviewed by Mark Lam.
1174
1175         * wtf/Expected.h:
1176         (WTF::UnexpectedType::UnexpectedType):
1177         (WTF::ExpectedDetail::Base::Base):
1178         (WTF::Expected::Expected):
1179
1180 2016-12-13  Chris Dumez  <cdumez@apple.com>
1181
1182         Unreviewed, rolling out r209544.
1183
1184         Looks like r209489 did not cause the performance regression
1185         after all
1186
1187         Reverted changeset:
1188
1189         "Unreviewed, rolling out r209489."
1190         https://bugs.webkit.org/show_bug.cgi?id=165550
1191         http://trac.webkit.org/changeset/209544
1192
1193 2016-12-13  Commit Queue  <commit-queue@webkit.org>
1194
1195         Unreviewed, rolling out r209725.
1196         https://bugs.webkit.org/show_bug.cgi?id=165811
1197
1198         "Broke ARMv7 builds" (Requested by msaboff on #webkit).
1199
1200         Reverted changeset:
1201
1202         "REGRESSION(r209653): speedometer crashes making virtual slow
1203         path tailcalls"
1204         https://bugs.webkit.org/show_bug.cgi?id=165748
1205         http://trac.webkit.org/changeset/209725
1206
1207 2016-12-13  JF Bastien  <jfbastien@apple.com>
1208
1209         [WTF] Turn tryMakeString(), makeString() into variadic templates
1210         https://bugs.webkit.org/show_bug.cgi?id=147142
1211
1212         Reviewed by Mark Lam.
1213
1214         I wrote this patch while improving WebAssembly's error messages,
1215         and only found this bug afterwards. My implementation does the
1216         bare minimum to make this code variadic without changing
1217         behavior. I think it's better to go with this baby step first, and
1218         improve the code later.
1219
1220         Notable, for my WebAssembly patch I also taught the code to handle
1221         integers and other types (including WebAssembly types). A
1222         follow-up could rely on ADL magic to pretty-format these other
1223         types.
1224
1225         * wtf/text/StringConcatenate.h:
1226         (WTF::sumWithOverflow): This unconditionally does the sum for all
1227         inputs, which the compiler is more likely to appreciate (because
1228         it's the common case) compared to testing for overflow and bailing
1229         on each addition
1230         (WTF::are8Bit): are: the plural of is!
1231         (WTF::makeStringAccumulator): accumulate strings
1232         (WTF::tryMakeStringFromAdapters): a small helper which creates the string adapters
1233         (WTF::tryMakeString): expose out of WTF, since it's part of this file's used API
1234         (WTF::makeString): make it variadic
1235
1236 2016-12-13  Konstantin Tokarev  <annulen@yandex.ru>
1237
1238         Unreviewed, silence -Wsuggest-attribute for GCC with pragmas
1239
1240         * wtf/PrintStream.cpp:
1241         (WTF::PrintStream::printfVariableFormat):
1242
1243 2016-12-12  Michael Saboff  <msaboff@apple.com>
1244
1245         REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
1246         https://bugs.webkit.org/show_bug.cgi?id=165748
1247
1248         Reviewed by Filip Pizlo.
1249
1250         Rolling back in r209653, r209654, r209663, and r209673.
1251
1252         * wtf/Platform.h:
1253
1254 2016-12-12  Commit Queue  <commit-queue@webkit.org>
1255
1256         Unreviewed, rolling out r209703.
1257         https://bugs.webkit.org/show_bug.cgi?id=165749
1258
1259         Broke Apple builds (Requested by annulen|home on #webkit).
1260
1261         Reverted changeset:
1262
1263         "Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma"
1264         http://trac.webkit.org/changeset/209703
1265
1266 2016-12-12  Konstantin Tokarev  <annulen@yandex.ru>
1267
1268         Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma
1269
1270         * wtf/PrintStream.cpp:
1271         (WTF::PrintStream::printfVariableFormat):
1272         * wtf/PrintStream.h:
1273
1274 2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>
1275
1276         Unreviewed, guarded clang pragma with COMPILER(CLANG) to fix -Werror
1277
1278         * wtf/PrintStream.cpp:
1279         (WTF::PrintStream::printfVariableFormat):
1280
1281 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
1282
1283         Change to use #pragma once (requested by Darin Adler).
1284
1285         * wtf/RecursiveLockAdapter.h:
1286
1287 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
1288
1289         Change to use #pragma once (requested by Darin Adler).
1290
1291         * wtf/LockedPrintStream.h:
1292
1293 2016-12-10  Filip Pizlo  <fpizlo@apple.com>
1294
1295         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
1296         https://bugs.webkit.org/show_bug.cgi?id=165741
1297
1298         Reviewed by Saam Barati.
1299         
1300         To find this bug, I needed to seriously beef up our logging infrastructure.
1301         
1302         It's now the case that:
1303         
1304             dataLog(...);
1305         
1306         will print its output atomically. This happens with some careful magic:
1307         
1308         - dataFile() is now a LockedPrintStream that locks around print().
1309         
1310         - The lock is a recursive lock via RecursiveLockAdapter<>, so if the dump methods end
1311           up calling back into dataLog() then it just works. This is important: say the dump()
1312           calls a getter that itself does logging, maybe because it's encountering badness and
1313           wants to report it before crashing).
1314         
1315         - The lock is a WordLock so that ParkingLot and Lock can keep using dataLog() for
1316           debugging. We probably won't need to debug WordLock anytime soon - the algorithm is
1317           so simple.
1318         
1319         - LockedPrintStream::print(...) causes the print callbacks of its arguments to run on
1320           the underlying PrintStream, so that you don't need to do recursive lock acquisition
1321           on each individual argument and whatever printing it does recursively.
1322
1323         * WTF.xcodeproj/project.pbxproj:
1324         * wtf/CMakeLists.txt:
1325         * wtf/DataLog.cpp:
1326         (WTF::initializeLogFileOnce):
1327         (WTF::initializeLogFile):
1328         (WTF::dataFile):
1329         * wtf/DataLog.h:
1330         * wtf/LockedPrintStream.cpp: Added.
1331         (WTF::LockedPrintStream::LockedPrintStream):
1332         (WTF::LockedPrintStream::~LockedPrintStream):
1333         (WTF::LockedPrintStream::vprintf):
1334         (WTF::LockedPrintStream::flush):
1335         (WTF::LockedPrintStream::begin):
1336         (WTF::LockedPrintStream::end):
1337         * wtf/LockedPrintStream.h: Added.
1338         * wtf/PrintStream.cpp:
1339         (WTF::PrintStream::printfVariableFormat):
1340         (WTF::PrintStream::begin):
1341         (WTF::PrintStream::end):
1342         * wtf/PrintStream.h:
1343         (WTF::PrintStream::atomically):
1344         (WTF::PrintStream::print):
1345         (WTF::PrintStream::println):
1346         (WTF::PrintStream::printImpl):
1347         (WTF::>::unpack):
1348         (WTF::FormatImpl::FormatImpl):
1349         (WTF::FormatImpl::dump):
1350         (WTF::format):
1351         (WTF::printInternal):
1352         * wtf/RecursiveLockAdapter.h: Added.
1353         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
1354         (WTF::RecursiveLockAdapter::lock):
1355         (WTF::RecursiveLockAdapter::unlock):
1356         (WTF::RecursiveLockAdapter::tryLock):
1357         (WTF::RecursiveLockAdapter::isLocked):
1358         * wtf/WordLock.cpp:
1359         * wtf/WordLock.h:
1360
1361 2016-12-11  Darin Adler  <darin@apple.com>
1362
1363         Use std::vsnprintf instead of vasprintf
1364         https://bugs.webkit.org/show_bug.cgi?id=165740
1365
1366         Reviewed by Sam Weinig.
1367
1368         * wtf/Platform.h: Remove HAVE_VASPRINTF.
1369         * wtf/StringExtras.h: Change the vsnprintf workaround to be used only
1370         in older versions of Visual Studio, since the problem it works around
1371         was resolved in Visual Studio 2015.
1372
1373 2016-12-10  Commit Queue  <commit-queue@webkit.org>
1374
1375         Unreviewed, rolling out r209653, r209654, r209663, and
1376         r209673.
1377         https://bugs.webkit.org/show_bug.cgi?id=165739
1378
1379         speedometer crashes (Requested by pizlo on #webkit).
1380
1381         Reverted changesets:
1382
1383         "JSVALUE64: Pass arguments in platform argument registers when
1384         making JavaScript calls"
1385         https://bugs.webkit.org/show_bug.cgi?id=160355
1386         http://trac.webkit.org/changeset/209653
1387
1388         "Unreviewed build fix for 32 bit builds."
1389         http://trac.webkit.org/changeset/209654
1390
1391         "Unreviewed build fix for the CLOOP after r209653"
1392         http://trac.webkit.org/changeset/209663
1393
1394         "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
1395         https://bugs.webkit.org/show_bug.cgi?id=165728
1396         http://trac.webkit.org/changeset/209673
1397
1398 2016-12-10  Chris Dumez  <cdumez@apple.com>
1399
1400         Avoid calling shrink() in the Vector destructor
1401         https://bugs.webkit.org/show_bug.cgi?id=165675
1402
1403         Reviewed by Daniel Bates.
1404
1405         Avoid calling shrink() in the Vector destructor to avoid function call
1406         overhead and unnecessarily reseting m_size to 0.
1407
1408         * wtf/Vector.h:
1409         (WTF::Vector::~Vector):
1410         (WTF::Vector::asanSetBufferSizeToFullCapacity):
1411         (WTF::minCapacity>::asanSetBufferSizeToFullCapacity):
1412
1413 2016-12-09  Michael Saboff  <msaboff@apple.com>
1414
1415         JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
1416         https://bugs.webkit.org/show_bug.cgi?id=160355
1417
1418         Reviewed by Filip Pizlo.
1419
1420         Added a new build option ENABLE_VM_COUNTERS to enable JIT'able counters.
1421         The default is for the option to be off.
1422
1423         * wtf/Platform.h:
1424         Added ENABLE_VM_COUNTERS
1425
1426 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1427
1428         Deploy OrdinalNumber in JSC::SourceCode
1429         https://bugs.webkit.org/show_bug.cgi?id=165687
1430
1431         Reviewed by Michael Saboff.
1432
1433         * wtf/text/OrdinalNumber.h:
1434         (WTF::OrdinalNumber::operator>): Added a >.
1435
1436 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1437
1438         TextPosition and OrdinalNumber should be more like idiomatic numbers
1439         https://bugs.webkit.org/show_bug.cgi?id=165678
1440
1441         Reviewed by Filip Pizlo.
1442
1443         * wtf/text/TextPosition.h:
1444         (WTF::TextPosition::minimumPosition): Deleted. Just use the default
1445         constructor. Other numbers use their default constructors to mean zero.
1446
1447         Any time you need a comment that says "used as a default value", that's
1448         a pretty good indicator that it should be the default constructor.
1449
1450 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
1451
1452         Moved OrdinalNumber into its own file
1453         https://bugs.webkit.org/show_bug.cgi?id=165663
1454
1455         Reviewed by Saam Barati.
1456
1457         * WTF.xcodeproj/project.pbxproj:
1458         * wtf/text/OrdinalNumber.h: Copied from Source/WTF/wtf/text/TextPosition.h.
1459         (WTF::TextPosition::TextPosition): Deleted.
1460         (WTF::TextPosition::operator==): Deleted.
1461         (WTF::TextPosition::operator!=): Deleted.
1462         (WTF::TextPosition::minimumPosition): Deleted.
1463         (WTF::TextPosition::belowRangePosition): Deleted.
1464         * wtf/text/TextPosition.h:
1465         (WTF::OrdinalNumber::fromZeroBasedInt): Deleted.
1466         (WTF::OrdinalNumber::fromOneBasedInt): Deleted.
1467         (WTF::OrdinalNumber::OrdinalNumber): Deleted.
1468         (WTF::OrdinalNumber::zeroBasedInt): Deleted.
1469         (WTF::OrdinalNumber::oneBasedInt): Deleted.
1470         (WTF::OrdinalNumber::operator==): Deleted.
1471         (WTF::OrdinalNumber::operator!=): Deleted.
1472         (WTF::OrdinalNumber::first): Deleted.
1473         (WTF::OrdinalNumber::beforeFirst): Deleted.
1474
1475 2016-12-08  David Kilzer  <ddkilzer@apple.com>
1476
1477         Always check the return value of pthread_key_create()
1478         <https://webkit.org/b/165274>
1479
1480         Reviewed by Darin Adler.
1481
1482         * wtf/ThreadIdentifierDataPthreads.cpp:
1483         (WTF::ThreadIdentifierData::initializeOnce): Make the code more
1484         readable by assigning a variable to the result of
1485         pthread_key_create().  This matches the idiom used elsewhere.
1486
1487 2016-12-08  Keith Miller  <keith_miller@apple.com>
1488
1489         Add 64-bit signed LEB decode method
1490         https://bugs.webkit.org/show_bug.cgi?id=165630
1491
1492         Reviewed by Ryosuke Niwa.
1493
1494         Add int64 LEB decode and fix some 64-bit specific issues
1495         with the decoder. There is also a fix where we would allow
1496         LEBs with canonical length + 1 size that is fixed by this
1497         patch.
1498
1499         * wtf/LEBDecoder.h:
1500         (WTF::LEBDecoder::decodeUInt):
1501         (WTF::LEBDecoder::decodeInt):
1502         (WTF::LEBDecoder::decodeUInt32):
1503         (WTF::LEBDecoder::decodeUInt64):
1504         (WTF::LEBDecoder::decodeInt32):
1505         (WTF::LEBDecoder::decodeInt64):
1506
1507 2016-12-08  Anders Carlsson  <andersca@apple.com>
1508
1509         Defer sending Mach messages if the queue is full
1510         https://bugs.webkit.org/show_bug.cgi?id=165622
1511         rdar://problem/29518036
1512
1513         Reviewed by Brady Eidson.
1514
1515         Add new SPI.
1516
1517         * wtf/spi/darwin/XPCSPI.h:
1518
1519 2016-12-06  Filip Pizlo  <fpizlo@apple.com>
1520
1521         Concurrent GC should be stable enough to land enabled on X86_64
1522         https://bugs.webkit.org/show_bug.cgi?id=164990
1523
1524         Reviewed by Geoffrey Garen.
1525         
1526         Adds the ability to say:
1527         
1528         auto locker = holdLock(any type of lock)
1529         
1530         Instead of having to say:
1531         
1532         Locker<LockType> locker(locks of type LockType)
1533         
1534         I think that we should use "auto locker = holdLock(lock)" as the default way that we acquire
1535         locks unless we need to use a special locker type.
1536         
1537         This also adds the ability to safepoint a lock. Safepointing a lock is basically a super fast
1538         way of unlocking it fairly and then immediately relocking it - i.e. letting anyone who is
1539         waiting to run without losing steam of there is noone waiting.
1540
1541         * wtf/Lock.cpp:
1542         (WTF::LockBase::safepointSlow):
1543         * wtf/Lock.h:
1544         (WTF::LockBase::safepoint):
1545         * wtf/LockAlgorithm.h:
1546         (WTF::LockAlgorithm::safepointFast):
1547         (WTF::LockAlgorithm::safepoint):
1548         (WTF::LockAlgorithm::safepointSlow):
1549         * wtf/Locker.h:
1550         (WTF::AbstractLocker::AbstractLocker):
1551         (WTF::Locker::tryLock):
1552         (WTF::Locker::operator bool):
1553         (WTF::Locker::Locker):
1554         (WTF::Locker::operator=):
1555         (WTF::holdLock):
1556         (WTF::tryHoldLock):
1557
1558 2016-12-08  Chris Dumez  <cdumez@apple.com>
1559
1560         Unreviewed, rolling out r209489.
1561
1562         Likely caused large regressions on JetStream, Sunspider and
1563         Speedometer
1564
1565         Reverted changeset:
1566
1567         "Add system trace points for JavaScript VM entry/exit"
1568         https://bugs.webkit.org/show_bug.cgi?id=165550
1569         http://trac.webkit.org/changeset/209489
1570
1571 2016-12-07  Simon Fraser  <simon.fraser@apple.com>
1572
1573         Add system trace points for JavaScript VM entry/exit
1574         https://bugs.webkit.org/show_bug.cgi?id=165550
1575
1576         Reviewed by Tim Horton.
1577         
1578         Add trace points for entry/exit into/out of the JS VM.
1579
1580         * wtf/SystemTracing.h:
1581
1582 2016-12-06  Alexey Proskuryakov  <ap@apple.com>
1583
1584         Correct SDKROOT values in xcconfig files
1585         https://bugs.webkit.org/show_bug.cgi?id=165487
1586         rdar://problem/29539209
1587
1588         Reviewed by Dan Bernstein.
1589
1590         Fix suggested by Dan Bernstein.
1591
1592         * Configurations/DebugRelease.xcconfig:
1593
1594 2016-12-06  Michael Saboff  <msaboff@apple.com>
1595
1596         REGRESSION(r209399): Causes crashes when dumping JIT disassembly
1597         https://bugs.webkit.org/show_bug.cgi?id=165483
1598
1599         Reviewed by Geoffrey Garen.
1600
1601         Fixed the RELEASE_ASSERT() to check that the 6 character string is terminated by a null
1602         character.
1603
1604         * wtf/SixCharacterHash.cpp:
1605         (WTF::sixCharacterHashStringToInteger):
1606
1607 2016-12-04  Darin Adler  <darin@apple.com>
1608
1609         Use ASCIICType more, and improve it a little bit
1610         https://bugs.webkit.org/show_bug.cgi?id=165360
1611
1612         Reviewed by Sam Weinig.
1613
1614         * wtf/ASCIICType.h: Added declarations of all the functions to the top of the file,
1615         so we have a list of what's available, not just a mix of that and the implementation.
1616
1617         * wtf/HexNumber.h:
1618         (WTF::Internal::hexDigitsForMode): Moved lowerHexDigits and upperHexDigits
1619         inside this function.
1620         (WTF::appendByteAsHex): Use auto.
1621         (WTF::placeByteAsHexCompressIfPossible): Ditto.
1622         (WTF::placeByteAsHex): Ditto.
1623         (WTF::appendUnsignedAsHex): Ditto.
1624         (WTF::appendUnsigned64AsHex): Ditto.
1625         (WTF::appendUnsignedAsHexFixedSize): Ditto.
1626         (WTF::isHexDigit): Deleted.
1627         (WTF::uncheckedHexDigit): Deleted.
1628         (WTF::hexDigitValue): Deleted.
1629         (WTF::uncheckedHexDigitValue): Deleted.
1630
1631         * wtf/SixCharacterHash.cpp:
1632         (WTF::sixCharacterHashStringToInteger): Use isASCIIUpper, isASCIILower, and
1633         isASCIIDigit. Also added some FIXMEs; for some reason this function uses
1634         RELEASE_ASSERT to abort if the passed-in string is not six characters long,
1635         and it's not clear to me why this is so critical to assert.
1636         (WTF::integerToSixCharacterHashString): Moved the table inside this function,
1637         obviating the need for a macro named TABLE.
1638
1639         * wtf/dtoa/bignum.cc:
1640         (WTF::double_conversion::HexCharValue): Deleted.
1641         (WTF::double_conversion::Bignum::AssignHexString): Use toASCIIHexValue.
1642         * wtf/dtoa/double-conversion.cc:
1643         (WTF::double_conversion::StringToDoubleConverter::StringToDouble): Use isASCIIDigit.
1644
1645         * wtf/text/StringBuilder.cpp:
1646         (WTF::appendQuotedJSONStringInternal): Use upperNibbleToASCIIHexDigit and
1647         lowerNibbleToASCIIHexDigit.
1648
1649         * wtf/text/StringImpl.cpp:
1650         (WTF::StringImpl::convertToUppercaseWithoutLocale): Use toASCIIUpper.
1651         Removed the workaround for a bug that was fixed in Visual Studio 2013.
1652
1653 2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>
1654
1655         REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
1656         https://bugs.webkit.org/show_bug.cgi?id=165351
1657
1658         Reviewed by Yusuke Suzuki.
1659
1660         Include a slimmed down version of WTF::Optional which older versions
1661         of Safari still depend on for a JavaScriptCore exported symbol.
1662         To prevent misuse name it WTF::DeprecatedOptional and use it only in
1663         the one instance it is needed.
1664
1665         * WTF.xcodeproj/project.pbxproj:
1666         * wtf/DeprecatedOptional.h: Added.
1667         (WTF::Optional::operator bool):
1668         (WTF::Optional::value):
1669         (WTF::Optional::asPtr):
1670
1671 2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>
1672
1673         Add __STDC_FORMAT_MACROS before inttypes.h is included
1674         https://bugs.webkit.org/show_bug.cgi?id=165374
1675
1676         We need formatting macros like PRIu64 to be available in all places where
1677         inttypes.h header is used. All these usages get inttypes.h definitions
1678         via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
1679         macros are not used anymore since r185129.
1680
1681         This patch fixes multiple build errors with MinGW and reduces number of
1682         independent __STDC_FORMAT_MACROS uses in the code base.
1683
1684         Reviewed by Darin Adler.
1685
1686         * wtf/Assertions.h: Define __STDC_FORMAT_MACROS.
1687         * wtf/StdLibExtras.h: Remove definition of PRId64 for Windows, as we
1688         have __STDC_FORMAT_MACROS defined now.
1689
1690 2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>
1691
1692         Refactor SymbolImpl layout
1693         https://bugs.webkit.org/show_bug.cgi?id=165247
1694
1695         Reviewed by Darin Adler.
1696
1697         This patch moves SymbolImpl initialization from StringImpl to SymbolImpl.
1698         In SymbolImpl, we create the appropriate fields. At that time, these fields
1699         should be aligned to the BufferSubstring StringImpl.
1700
1701         And we newly create the `m_flags` in SymbolImpl. Instead of using special
1702         StringImpl::null(), we store s_flagIsNullSymbol flag here. In WTF, we have
1703         the invariant that StringImpl::empty() is the only atomic empty string.
1704         But StringImpl::null() breaks this invariant. Using a special flag is safer
1705         way to represent the null Symbol `Symbol()`.
1706
1707         * WTF.xcodeproj/project.pbxproj:
1708         * wtf/CMakeLists.txt:
1709         * wtf/StdLibExtras.h:
1710         (WTF::roundUpToMultipleOfImpl0):
1711         (WTF::roundUpToMultipleOfImpl):
1712         (WTF::roundUpToMultipleOf):
1713         * wtf/text/StringImpl.cpp:
1714         (WTF::StringImpl::~StringImpl):
1715         (WTF::StringImpl::createSymbol): Deleted.
1716         (WTF::StringImpl::createNullSymbol): Deleted.
1717         * wtf/text/StringImpl.h:
1718         (WTF::StringImpl::isAtomic):
1719         (WTF::StringImpl::StringImpl):
1720         (WTF::StringImpl::requiresCopy):
1721         (WTF::StringImpl::isNullSymbol): Deleted.
1722         (WTF::StringImpl::symbolAwareHash): Deleted.
1723         (WTF::StringImpl::existingSymbolAwareHash): Deleted.
1724         (WTF::StringImpl::null): Deleted.
1725         (WTF::StringImpl::extractFoldedStringInSymbol): Deleted.
1726         (WTF::StringImpl::symbolRegistry): Deleted.
1727         (WTF::StringImpl::hashForSymbol): Deleted.
1728         * wtf/text/StringStatics.cpp:
1729         (WTF::StringImpl::nextHashForSymbol): Deleted.
1730         * wtf/text/SymbolImpl.cpp: Copied from Source/WTF/wtf/text/SymbolRegistry.cpp.
1731         (WTF::SymbolImpl::nextHashForSymbol):
1732         (WTF::SymbolImpl::create):
1733         (WTF::SymbolImpl::createNullSymbol):
1734         * wtf/text/SymbolImpl.h:
1735         (WTF::SymbolImpl::hashForSymbol):
1736         (WTF::SymbolImpl::symbolRegistry):
1737         (WTF::SymbolImpl::isNullSymbol):
1738         (WTF::SymbolImpl::extractFoldedString):
1739         (WTF::SymbolImpl::SymbolImpl):
1740         (WTF::StringImpl::symbolAwareHash):
1741         (WTF::StringImpl::existingSymbolAwareHash):
1742         * wtf/text/SymbolRegistry.cpp:
1743         (WTF::SymbolRegistry::~SymbolRegistry):
1744         (WTF::SymbolRegistry::symbolForKey):
1745         (WTF::SymbolRegistry::keyForSymbol):
1746         * wtf/text/UniquedStringImpl.h:
1747         (WTF::UniquedStringImpl::UniquedStringImpl):
1748
1749 2016-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1750
1751         Introduce StringImpl::StaticStringImpl with constexpr constructor
1752         https://bugs.webkit.org/show_bug.cgi?id=165093
1753
1754         Reviewed by Darin Adler.
1755
1756         This patch adds new class, StringImpl::StaticStringImpl.
1757         By using this class, we can easily create static StringImpls.
1758         This class has constexpr constructor. You can initialize instances
1759         of this class as global static variables without invoking global
1760         constructors.
1761
1762         We already have similar system, StaticASCIILiteral. But using it
1763         requires some special perl script since we need to calculate
1764         hash value. On the other hand, we can use StaticStringImpl without
1765         any script supports since we implement constexpr hash function.
1766         In the future, we will replace all the use of StaticASCIILiteral
1767         with this StaticStringImpl.
1768
1769         We define empty / null strings as StaticStringImpl. And we make
1770         StringImpl::empty() & StringImpl::null() inline functions.
1771
1772         * wtf/Hasher.h:
1773         (WTF::StringHasher::hashWithTop8BitsMasked):
1774         (WTF::StringHasher::hash):
1775         (WTF::StringHasher::finalize):
1776         (WTF::StringHasher::finalizeAndMaskTop8Bits):
1777         (WTF::StringHasher::computeLiteralHash):
1778         (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
1779         (WTF::StringHasher::avalancheBits3):
1780         (WTF::StringHasher::avalancheBits2):
1781         (WTF::StringHasher::avalancheBits1):
1782         (WTF::StringHasher::avalancheBits0):
1783         (WTF::StringHasher::avalancheBits):
1784         (WTF::StringHasher::avoidZero):
1785         (WTF::StringHasher::processPendingCharacter):
1786         (WTF::StringHasher::calculateWithRemainingLastCharacter1):
1787         (WTF::StringHasher::calculateWithRemainingLastCharacter0):
1788         (WTF::StringHasher::calculateWithRemainingLastCharacter):
1789         (WTF::StringHasher::calculate1):
1790         (WTF::StringHasher::calculate0):
1791         (WTF::StringHasher::calculate):
1792         (WTF::StringHasher::computeLiteralHashImpl):
1793         * wtf/text/StringImpl.cpp:
1794         * wtf/text/StringImpl.h:
1795         (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
1796         (WTF::StringImpl::null):
1797         (WTF::StringImpl::empty):
1798         * wtf/text/StringStatics.cpp:
1799         (WTF::StringImpl::null): Deleted.
1800         (WTF::StringImpl::empty): Deleted.
1801
1802 2016-11-30  Darin Adler  <darin@apple.com>
1803
1804         Roll out StringBuilder changes from the previous patch.
1805         They were a slowdown on a Kraken JSON test.
1806
1807         * wtf/text/StringBuilder.cpp:
1808         * wtf/text/StringBuilder.h:
1809         Roll out changes from below.
1810
1811 2016-11-30  Darin Adler  <darin@apple.com>
1812
1813         Streamline and speed up tokenizer and segmented string classes
1814         https://bugs.webkit.org/show_bug.cgi?id=165003
1815
1816         And do it without re-introducing:
1817
1818         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
1819         https://bugs.webkit.org/show_bug.cgi?id=165142
1820
1821         Reviewed by Sam Weinig.
1822
1823         * wtf/text/StringBuilder.cpp:
1824         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
1825         the header since it is only used inside the class. Also renamed from
1826         getBufferCharacters.
1827         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
1828         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
1829         for the upconvert case in the 16-bit overload of StrinBuilder::append.
1830         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
1831         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
1832         implementation below that now correctly determines the size of what will
1833         be appended by walking thorugh the string twice.
1834         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
1835         quote marks in here. Also made a few coding style tweaks.
1836         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
1837         simpler algorithm that grows the string the same way the append function
1838         does. The old code would use reserveCapacity in a way that was costly when
1839         doing a lot of appends on the same string, and also allocated far too much
1840         memory for normal use cases where characters did not need to be turned
1841         into escape sequences.
1842
1843         * wtf/text/StringBuilder.h:
1844         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
1845         m_is8Bit field wasn't set correctly in one case, optimized the function that
1846         adds substrings for the case where this is the first append and the substring
1847         happens to cover the entire string. Also clarified the assertions and removed
1848         an unneeded check from that substring overload.
1849         (WTF::equal): Reimplemented, using equalCommon. Added an overload of the equal
1850         function just for the case where the arguments are StringBuilder, String.
1851         This is needed because of the peculiar behavior of is8Bit in String, different
1852         from any of our other string classes. I think we should consider changing
1853         String::is8Bit to return true for null strings. We could then remove this
1854         overload and probably remove other checks for null and zero length elsewhere
1855         that are also needed only to avoid calling is8Bit on a null String.
1856
1857 2016-11-29  JF Bastien  <jfbastien@apple.com>
1858
1859         WebAssembly JS API: improve Instance
1860         https://bugs.webkit.org/show_bug.cgi?id=164757
1861
1862         Reviewed by Keith Miller.
1863
1864         * wtf/Expected.h:
1865         (WTF::ExpectedDetail::destroy): silence a warning
1866
1867 2016-11-29  Commit Queue  <commit-queue@webkit.org>
1868
1869         Unreviewed, rolling out r209058 and r209074.
1870         https://bugs.webkit.org/show_bug.cgi?id=165188
1871
1872         These changes caused API test StringBuilderTest.Equal to crash
1873         and/or fail. (Requested by ryanhaddad on #webkit).
1874
1875         Reverted changesets:
1876
1877         "Streamline and speed up tokenizer and segmented string
1878         classes"
1879         https://bugs.webkit.org/show_bug.cgi?id=165003
1880         http://trac.webkit.org/changeset/209058
1881
1882         "REGRESSION (r209058): API test StringBuilderTest.Equal
1883         crashing"
1884         https://bugs.webkit.org/show_bug.cgi?id=165142
1885         http://trac.webkit.org/changeset/209074
1886
1887 2016-11-29  Simon Fraser  <simon.fraser@apple.com>
1888
1889         Allow TracePoint to take arbitrary data
1890         https://bugs.webkit.org/show_bug.cgi?id=165182
1891
1892         Reviewed by Tim Horton.
1893
1894         Allow TracePoint() to take four numeric arguments, for arbitrary data.
1895
1896         #pragma once
1897
1898         * wtf/SystemTracing.h:
1899         (WTF::TracePoint):
1900
1901 2016-11-29  Andy Estes  <aestes@apple.com>
1902
1903         [Cocoa] Enable two clang warnings recommended by Xcode
1904         https://bugs.webkit.org/show_bug.cgi?id=164498
1905
1906         Reviewed by Mark Lam.
1907
1908         * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
1909
1910 2016-11-29  Darin Adler  <darin@apple.com>
1911
1912         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
1913         https://bugs.webkit.org/show_bug.cgi?id=165142
1914
1915         * wtf/text/StringBuilder.h: Added an overload of the equal function just
1916         for the case where the arguments are StringBuilder, String. This is needed
1917         because of the peculiar behavior of is8Bit in String, different from any of
1918         our other string classes. I think we should consider changing String::is8Bit
1919         to return true for null strings. We could then remove this overload and
1920         probably remove other checks for null and zero length elsewhere that are
1921         also needed only to avoid calling is8Bit on a null String.
1922
1923 2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>
1924
1925         Scroll snapping on Mac should use AppKit animations
1926         https://bugs.webkit.org/show_bug.cgi?id=147261
1927         <rdar://problem/29395293>
1928
1929         Reviewed by Brent Fulgham.
1930
1931         Introduce HAVE(NSSCROLLING_FILTERS), which is on for macOS El Capitan and later.
1932
1933         * wtf/Platform.h:
1934
1935 2016-11-28  Darin Adler  <darin@apple.com>
1936
1937         Streamline and speed up tokenizer and segmented string classes
1938         https://bugs.webkit.org/show_bug.cgi?id=165003
1939
1940         Reviewed by Sam Weinig.
1941
1942         * wtf/text/StringBuilder.cpp:
1943         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
1944         the header since it is only used inside the class. Also renamed from
1945         getBufferCharacters.
1946         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
1947         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
1948         for the upconvert case in the 16-bit overload of StrinBuilder::append.
1949         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
1950         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
1951         implementation below that now correctly determines the size of what will
1952         be appended by walking thorugh the string twice.
1953         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
1954         quote marks in here. Also made a few coding style tweaks.
1955         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
1956         simpler algorithm that grows the string the same way the append function
1957         does. The old code would use reserveCapacity in a way that was costly when
1958         doing a lot of appends on the same string, and also allocated far too much
1959         memory for normal use cases where characters did not need to be turned
1960         into escape sequences.
1961
1962         * wtf/text/StringBuilder.h:
1963         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
1964         m_is8Bit field wasn't set correctly in one case, optimized the function that
1965         adds substrings for the case where this is the first append and the substring
1966         happens to cover the entire string. Also clarified the assertions and removed
1967         an unneeded check from that substring overload.
1968         (WTF::equal): Reimplemented, using equalCommon.
1969
1970 2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>
1971
1972         [WTF] Import std::optional reference implementation as WTF::Optional
1973         https://bugs.webkit.org/show_bug.cgi?id=164199
1974
1975         Reviewed by Saam Barati and Sam Weinig.
1976
1977         Import std::optional reference implementation offered by the C++17
1978         original proposal paper. It has the same interface and functionality
1979         to the C++17's one. Previous WTF::Optional lacks several functionalities.
1980         The largest one is the correct constexpr constructors. This fact prevents
1981         us from using Optional<literal type> in constexpr context in WebKit.
1982
1983         In WebKit, we do not allow global constructors. So only the constexpr
1984         constructor is the way to use WTF::Optional in the static const
1985         global variables. WTF::Optional is used in DOMJIT::Effect and
1986         we would like to emit static const global variables that includes
1987         this DOMJIT::Effect. That is the main motivation of this work.
1988         This functionality allows the IDL code generator to emit DOMJIT
1989         signatures as static const global variables.
1990
1991         We import the reference implementation one instead of LLVM libc++'s one.
1992         This is because LLVM libc++'s one depends on many macro and type_traits
1993         offered by libc++ implementation. And adopting it to WebKit requires
1994         large modification compared to this reference implementation one.
1995         Furthermore, it is difficult to compile libc++'s optional in old GCC and VC++.
1996         It also requires some more modifications. To keep the thing simple,
1997         we import the reference implementation one now. Once C++17 is released
1998         and we update the compiler baseline, we can smoothly switch to the standard
1999         library's std::optional.
2000
2001         We also add support for the environment that does not use exceptions to this
2002         reference implementation.
2003
2004         And we also add valueOrCompute helper function. That keeps the extended
2005         functionality that previous WTF::Optional has.
2006
2007         * wtf/CrossThreadQueue.h:
2008         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
2009         * wtf/Expected.h:
2010         (WTF::makeExpected):
2011         * wtf/Forward.h:
2012         * wtf/HashTraits.h:
2013         (WTF::HashTraits<Ref<P>>::take):
2014         * wtf/MainThread.cpp:
2015         (WTF::initializeGCThreads):
2016         (WTF::mayBeGCThread):
2017         * wtf/MainThread.h:
2018         * wtf/Optional.h:
2019         (std::detail_::is_assignable::has_assign):
2020         (std::detail_::has_overloaded_addressof::has_overload):
2021         (std::detail_::static_addressof):
2022         (std::detail_::convert):
2023         (std::nullopt_t::nullopt_t):
2024         (std::bad_optional_access::bad_optional_access):
2025         (std::optional_base::optional_base):
2026         (std::optional_base::~optional_base):
2027         (std::constexpr_optional_base::constexpr_optional_base):
2028         (std::optional::dataptr):
2029         (std::optional::contained_val):
2030         (std::optional::__NOEXCEPT_):
2031         (std::optional::optional):
2032         (std::optional::operator=):
2033         (std::optional::emplace):
2034         (std::optional::operator ->):
2035         (std::optional::operator *):
2036         (std::optional::value):
2037         (std::optional::value_or):
2038         (std::operator==):
2039         (std::operator!=):
2040         (std::operator<):
2041         (std::operator>):
2042         (std::operator<=):
2043         (std::operator>=):
2044         (std::__NOEXCEPT_):
2045         (std::make_optional):
2046         (std::hash<std::optional<T>>::operator()):
2047         (WTF::NulloptTag::NulloptTag): Deleted.
2048         (WTF::Optional::Optional): Deleted.
2049         (WTF::Optional::~Optional): Deleted.
2050         (WTF::Optional::operator=): Deleted.
2051         (WTF::Optional::operator bool): Deleted.
2052         (WTF::Optional::operator->): Deleted.
2053         (WTF::Optional::operator*): Deleted.
2054         (WTF::Optional::value): Deleted.
2055         (WTF::Optional::valueOr): Deleted.
2056         (WTF::Optional::valueOrCompute): Deleted.
2057         (WTF::Optional::asPtr): Deleted.
2058         (WTF::Optional::destroy): Deleted.
2059         (WTF::operator==): Deleted.
2060         (WTF::operator!=): Deleted.
2061         (WTF::makeOptional): Deleted.
2062         (WTF::printInternal): Deleted.
2063         * wtf/text/StringView.cpp:
2064         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
2065         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
2066         * wtf/text/StringView.h:
2067
2068 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
2069
2070         Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
2071         https://bugs.webkit.org/show_bug.cgi?id=164992
2072
2073         Reviewed by Darin Adler.
2074
2075         Add Seconds::zero() as a nicer way to express Seconds(0). 
2076
2077         * wtf/Seconds.h:
2078         (WTF::Seconds::zero):
2079
2080 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
2081
2082         Add literals for various time units
2083         https://bugs.webkit.org/show_bug.cgi?id=165074
2084
2085         Reviewed by Filip Pizlo.
2086         
2087         Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
2088         and unsigned long long types (those allowed for custom literals).
2089         
2090         Add minutes-related functions (there are one or two use cases in WebCore).
2091
2092         * wtf/Seconds.h:
2093         (WTF::Seconds::minutes):
2094         (WTF::Seconds::fromMinutes):
2095         (WTF::Seconds::fromMilliseconds):
2096         (WTF::Seconds::fromMicroseconds):
2097         (WTF::Seconds::fromNanoseconds):
2098         (WTF::operator _min):
2099         (WTF::operator _s):
2100         (WTF::operator _ms):
2101         (WTF::operator _us):
2102         (WTF::operator _ns):
2103
2104 2016-11-22  Darin Adler  <darin@apple.com>
2105
2106         One more tiny bit of follow-up.
2107
2108         * wtf/text/TextBreakIterator.cpp:
2109         (WTF::numCharactersInGraphemeClusters): Removed unneeded always-true check.
2110
2111 2016-11-22  Darin Adler  <darin@apple.com>
2112
2113         Quick follow-up to previous patch.
2114
2115         * wtf/text/TextBreakIterator.cpp:
2116         (WTF::numCharactersInGraphemeClusters): Removed incorrect assertion.
2117
2118 2016-11-22  Darin Adler  <darin@apple.com>
2119
2120         Make normal case fast in the input element limitString function
2121         https://bugs.webkit.org/show_bug.cgi?id=165023
2122
2123         Reviewed by Dan Bernstein.
2124
2125         * wtf/text/LineBreakIteratorPoolICU.h: Removed many unneeded includes.
2126         Simplified the class a bit, removing some extra definitions.
2127         (WTF::LineBreakIteratorPool::sharedPool): Use NeverDestroyed instead of new.
2128         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword): Reimplemented in
2129         a simpler way without using StringBuilder. Also updated for change to
2130         LineBreakIteratorMode.
2131         (WTF::LineBreakIteratorPool::put): Use uncheckedAppend since the code is
2132         careful to only use the inline capacity in the vector.
2133
2134         * wtf/text/TextBreakIterator.cpp: Moved some includes in here from the header.
2135         (WTF::mapLineIteratorModeToRules): Updated for change to LineBreakIteratorMode.
2136         (WTF::openLineBreakIterator): Ditto.
2137         (WTF::numGraphemeClusters): Added a fast path for all 8-bit strings; don't
2138         use ICU for that case, even if there is a CR character in it.
2139         (WTF::numCharactersInGraphemeClusters): Added a fast path for strings that are
2140         short enough to entirely fit without even looking at the characters; that's a
2141         case we likely hit all the time. Also added a fast path for all 8-bit strings.
2142
2143         * wtf/text/TextBreakIterator.h: Changed LineBreakIteratorMode to be an enum
2144         class and not repeat UAX14 in the names of the modes. Initialize data members
2145         in the class definition rather than the constructors.
2146
2147 2016-11-21  Mark Lam  <mark.lam@apple.com>
2148
2149         Hasher::addCharacters() should be able to handle zero length strings.
2150         https://bugs.webkit.org/show_bug.cgi?id=165024
2151
2152         Reviewed by Yusuke Suzuki.
2153
2154         Currently, it will fail to handle zero length strings if it has a pending
2155         character.  The fix is simply to return early if length is 0. 
2156
2157         * wtf/Hasher.h:
2158         (WTF::StringHasher::addCharacters):
2159
2160 2016-11-18  Jeremy Jones  <jeremyj@apple.com>
2161
2162         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
2163         https://bugs.webkit.org/show_bug.cgi?id=163801
2164
2165         Reviewed by Simon Fraser.
2166
2167         * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.
2168
2169 2016-11-17  Saam Barati  <sbarati@apple.com>
2170
2171         Remove async/await compile time flag and enable tests
2172         https://bugs.webkit.org/show_bug.cgi?id=164828
2173         <rdar://problem/28639334>
2174
2175         Reviewed by Yusuke Suzuki.
2176
2177         * wtf/FeatureDefines.h:
2178
2179 2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>
2180
2181         [JSC] WTF::TemporaryChange with WTF::SetForScope
2182         https://bugs.webkit.org/show_bug.cgi?id=164761
2183
2184         Reviewed by Saam Barati.
2185
2186         JavaScriptCore's bytecompiler/SetForScope.h is completely the same
2187         to WTF::TemporaryChange. SetForScope sounds better name since it
2188         says that this object works as Scope.
2189
2190         We rename WTF::TemporaryChange to WTF::SetForScope. And replace
2191         all the use to this WTF::SetForScope.
2192
2193         * WTF.xcodeproj/project.pbxproj:
2194         * wtf/SetForScope.h: Renamed from Source/WTF/wtf/TemporaryChange.h.
2195         (WTF::SetForScope::SetForScope):
2196         (WTF::SetForScope::~SetForScope):
2197
2198 2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>
2199
2200         [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
2201         https://bugs.webkit.org/show_bug.cgi?id=164827
2202
2203         Reviewed by Ryosuke Niwa.
2204
2205         * wtf/FeatureDefines.h:
2206
2207 2016-11-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>
2208
2209         [JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9
2210         https://bugs.webkit.org/show_bug.cgi?id=164588
2211
2212         Reviewed by Mark Lam.
2213
2214         Provide assembly for executing the cpuid instruction when compiling
2215         in PIC mode with the GCC 4.9 EBX on 32-bit x86.
2216
2217         Note that the values returned by cpuid here are not used. The purpose
2218         of calling this instruction is to force the CPU to complete and sync
2219         any buffered modifications on registers, memory or flags before
2220         fetching and executing the next instruction.
2221
2222         * wtf/Atomics.h:
2223         (WTF::x86_cpuid):
2224
2225 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
2226
2227         Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
2228         https://bugs.webkit.org/show_bug.cgi?id=164791
2229
2230         Reviewed by Geoffrey Garen.
2231         
2232         Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental
2233         JSC runtime components like JSValue. So, the thing that guards it should be a "feature"
2234         called CONCURRENT_JS not CONCURRENT_JIT.
2235
2236         * wtf/Platform.h:
2237
2238 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
2239
2240         The concurrent GC should have a timeslicing controller
2241         https://bugs.webkit.org/show_bug.cgi?id=164783
2242
2243         Reviewed by Geoffrey Garen.
2244
2245         * wtf/LockAlgorithm.h: Added some comments.
2246         * wtf/Seconds.h: Added support for modulo. It's necessary for timeslicing.
2247         (WTF::Seconds::operator%):
2248         (WTF::Seconds::operator%=):
2249
2250 2016-11-11  Filip Pizlo  <fpizlo@apple.com>
2251
2252         The GC should be optionally concurrent and disabled by default
2253         https://bugs.webkit.org/show_bug.cgi?id=164454
2254
2255         Reviewed by Geoffrey Garen.
2256         
2257         The reason why I went to such great pains to make WTF::Lock fit in two bits is that I
2258         knew that I would eventually need to stuff one into some miscellaneous bits of the
2259         JSCell header. That time has come, because the concurrent GC has numerous race
2260         conditions in visitChildren that can be trivially fixed if each object just has an
2261         internal lock. Some cell types might use it to simply protect their entire visitChildren
2262         function and anything that mutates the fields it touches, while other cell types might
2263         use it as a "lock of last resort" to handle corner cases of an otherwise wait-free or
2264         lock-free algorithm. Right now, it's used to protect certain transformations involving
2265         indexing storage.
2266         
2267         To make this happen, I factored the WTF::Lock algorithm into a LockAlgorithm struct that
2268         is templatized on lock type (uint8_t for WTF::Lock), the isHeldBit value (1 for
2269         WTF::Lock), and the hasParkedBit value (2 for WTF::Lock). This could have been done as
2270         a templatized Lock class that basically contains Atomic<LockType>. You could then make
2271         any field into a lock by bitwise_casting it to TemplateLock<field type, bit1, bit2>. But
2272         this felt too dirty, so instead, LockAlgorithm has static methods that take
2273         Atomic<LockType>& as their first argument. I think that this makes it more natural to
2274         project a LockAlgorithm onto an existing Atomic<> field. Sadly, some places have to cast
2275         their non-Atomic<> field to Atomic<> in order for this to work. Like so many other things
2276         we do, this just shows that the C++ style of labeling fields that are subject to atomic
2277         ops as atomic is counterproductive. Maybe some day I'll change LockAlgorithm to use our
2278         other Atomics API, which does not require Atomic<>.
2279         
2280         WTF::Lock now uses LockAlgorithm. The slow paths are still outlined. I don't feel too
2281         bad about the LockAlgorithm.h header being included in so many places because we change
2282         that algorithm so infrequently.
2283         
2284         Also, I added a hasElapsed(time) function. This function makes it so much more natural
2285         to write timeslicing code, which the concurrent GC has to do a lot of.
2286
2287         * WTF.xcodeproj/project.pbxproj:
2288         * wtf/CMakeLists.txt:
2289         * wtf/ListDump.h:
2290         * wtf/Lock.cpp:
2291         (WTF::LockBase::lockSlow):
2292         (WTF::LockBase::unlockSlow):
2293         (WTF::LockBase::unlockFairlySlow):
2294         (WTF::LockBase::unlockSlowImpl): Deleted.
2295         * wtf/Lock.h:
2296         (WTF::LockBase::lock):
2297         (WTF::LockBase::tryLock):
2298         (WTF::LockBase::unlock):
2299         (WTF::LockBase::unlockFairly):
2300         (WTF::LockBase::isHeld):
2301         (): Deleted.
2302         * wtf/LockAlgorithm.h: Added.
2303         (WTF::LockAlgorithm::lockFastAssumingZero):
2304         (WTF::LockAlgorithm::lockFast):
2305         (WTF::LockAlgorithm::lock):
2306         (WTF::LockAlgorithm::tryLock):
2307         (WTF::LockAlgorithm::unlockFastAssumingZero):
2308         (WTF::LockAlgorithm::unlockFast):
2309         (WTF::LockAlgorithm::unlock):
2310         (WTF::LockAlgorithm::unlockFairly):
2311         (WTF::LockAlgorithm::isLocked):
2312         (WTF::LockAlgorithm::lockSlow):
2313         (WTF::LockAlgorithm::unlockSlow):
2314         * wtf/TimeWithDynamicClockType.cpp:
2315         (WTF::hasElapsed):
2316         * wtf/TimeWithDynamicClockType.h:
2317
2318 2016-11-14  JF Bastien  <jfbastien@apple.com>
2319
2320         Expected: add missing `inline`
2321         https://bugs.webkit.org/show_bug.cgi?id=164735
2322
2323         Reviewed by Yusuke Suzuki.
2324
2325         Free functions and full template specializations need to be
2326         `inline`, or in a .cpp file, otherwise each .o creates a duplicate
2327         symbol which makes the linker very sad.
2328
2329         * wtf/Expected.h:
2330         (WTF::ExpectedDetail::Throw):
2331         (WTF::makeExpected):
2332
2333 2016-11-14  Mark Lam  <mark.lam@apple.com>
2334
2335         Build fix after r208690.
2336         https://bugs.webkit.org/show_bug.cgi?id=164681
2337
2338         Not reviewed.
2339
2340         * wtf/FastMalloc.h:
2341
2342 2016-11-13  Mark Lam  <mark.lam@apple.com>
2343
2344         Add debugging facility to limit the max single allocation size.
2345         https://bugs.webkit.org/show_bug.cgi?id=164681
2346
2347         Reviewed by Keith Miller.
2348
2349         This is useful for simulating memory allocation failures on resource constraint
2350         devices for testing purposes.
2351
2352         This facility is only conditionally compiled in on debug builds.  It does not
2353         have any burden on release builds at all.  When in use, the max single allocation
2354         size limit applies to individual allocations.  For malloc (and similar), the
2355         allocation will crash in FastMalloc if the requested size exceeds the set max
2356         single allocation size.  For tryMalloc (and similar), the allocation returns
2357         nullptr if the requested size exceeds the set max single allocation size.  The
2358         max single allocation size is set to std::numeric_limit<size_t>::max() by default
2359         (i.e. when not set and no limit is in effect).
2360
2361         Also fixed non-bmalloc versions of fastAlignedMalloc() to crash when allocation
2362         fails.
2363
2364         * wtf/FastMalloc.cpp:
2365         (WTF::fastSetMaxSingleAllocationSize):
2366         (WTF::fastAlignedMalloc):
2367         (WTF::tryFastAlignedMalloc):
2368         (WTF::tryFastMalloc):
2369         (WTF::fastMalloc):
2370         (WTF::tryFastCalloc):
2371         (WTF::fastCalloc):
2372         (WTF::fastRealloc):
2373         * wtf/FastMalloc.h:
2374
2375 2016-11-13  JF Bastien  <jfbastien@apple.com>
2376
2377         Implement WTF::Expected
2378         https://bugs.webkit.org/show_bug.cgi?id=164526
2379
2380         Reviewed by Yusuke Suzuki.
2381
2382         std::expected isn't in C++17, and may be in C++20. It's a nice
2383         complement to std::any / std::optional because it's a type-tagged
2384         union which has a single expected result but could also contain an
2385         error.
2386
2387         This would be useful in the WebAssembly parser, for example.
2388
2389         Using this implementation will allow us to provide feedback to the
2390         standards committee and guide std::expected's design before it
2391         gets standardized. I've already sent a bunch of feedback to the
2392         author based on my experience implementing this.
2393
2394         This could supplement WTF::Either and WTF::ExceptionOr.
2395
2396         * WTF.xcodeproj/project.pbxproj:
2397         * wtf/Compiler.h: Add RELAXED_CONSTEXPR
2398         * wtf/Expected.h: Added.
2399         (WTF::UnexpectedType::UnexpectedType):
2400         (WTF::UnexpectedType::value):
2401         (WTF::operator==):
2402         (WTF::operator!=):
2403         (WTF::operator<):
2404         (WTF::operator>):
2405         (WTF::operator<=):
2406         (WTF::operator>=):
2407         (WTF::makeUnexpected):
2408         (WTF::ExpectedDetail::Throw):
2409         (WTF::ExpectedDetail::ConstexprBase::ConstexprBase):
2410         (WTF::ExpectedDetail::Base::Base):
2411         (WTF::ExpectedDetail::Base::~Base):
2412         (WTF::Expected::Expected):
2413         (WTF::Expected::operator=):
2414         (WTF::Expected::swap):
2415         (WTF::Expected::operator->):
2416         (WTF::Expected::operator*):
2417         (WTF::Expected::operator bool):
2418         (WTF::Expected::hasValue):
2419         (WTF::Expected::value):
2420         (WTF::Expected::error):
2421         (WTF::Expected::getUnexpected):
2422         (WTF::Expected::valueOr):
2423         (WTF::swap):
2424         (WTF::makeExpected):
2425         (WTF::makeExpectedFromError):
2426
2427 2016-11-11  Alex Christensen  <achristensen@webkit.org>
2428
2429         Allow mutable lambdas in HashMap::ensure
2430         https://bugs.webkit.org/show_bug.cgi?id=164642
2431
2432         Reviewed by Sam Weinig.
2433
2434         * wtf/HashMap.h:
2435         (WTF::HashMapEnsureTranslator::translate):
2436         (WTF::X>::removeIf):
2437
2438 2016-11-11  Beth Dakin  <bdakin@apple.com>
2439
2440         Get touch bar code building for open source builds
2441         https://bugs.webkit.org/show_bug.cgi?id=164610
2442
2443         Reviewed by Wenson Hsieh.
2444
2445         * wtf/Platform.h:
2446
2447 2016-11-10  JF Bastien  <jfbastien@apple.com>
2448
2449         ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
2450         https://bugs.webkit.org/show_bug.cgi?id=164597
2451
2452         Reviewed by Keith Miller.
2453
2454         Decoding at end of file should fail, not assert.
2455
2456         * wtf/LEBDecoder.h:
2457         (WTF::LEBDecoder::decodeUInt):
2458         (WTF::LEBDecoder::decodeInt32):
2459
2460 2016-11-10  Alex Christensen  <achristensen@webkit.org>
2461
2462         Remove unused CFURLCACHE code
2463         https://bugs.webkit.org/show_bug.cgi?id=164551
2464
2465         Reviewed by Antti Koivisto.
2466
2467         * wtf/Platform.h:
2468
2469 2016-11-09  Alex Christensen  <achristensen@webkit.org>
2470
2471         Allow RefPtrs of const ThreadSafeRefCounted types
2472         https://bugs.webkit.org/show_bug.cgi?id=164548
2473
2474         Reviewed by Tim Horton.
2475
2476         * wtf/ThreadSafeRefCounted.h:
2477         Make m_refCount mutable like we did with RefCounted in r203257.
2478
2479 2016-11-09  Chris Dumez  <cdumez@apple.com>
2480
2481         [Mac] Stop using deprecated AppKit enumeration values
2482         https://bugs.webkit.org/show_bug.cgi?id=164494
2483
2484         Reviewed by Darin Adler.
2485
2486         Stop using deprecated AppKit enumeration values.
2487
2488         * wtf/mac/AppKitCompatibilityDeclarations.h:
2489
2490 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
2491
2492         Fixed compilation of LLInt with MinGW
2493         https://bugs.webkit.org/show_bug.cgi?id=164449
2494
2495         Reviewed by Michael Catanzaro.
2496
2497         MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
2498         other platforms.
2499
2500         * wtf/InlineASM.h: Define LOCAL_LABEL_STRING as .L#name for MinGW.
2501
2502 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
2503
2504         [MinGW] Fixed C99/C++11 format attributes in printf-like functions
2505         https://bugs.webkit.org/show_bug.cgi?id=164448
2506
2507         Reviewed by Michael Catanzaro.
2508
2509         By default MinGW uses printf-like function provided in msvcrt.dll,
2510         however they miss support for C99/C++11 format attributes. Use MinGW
2511         implementations instead.
2512
2513         * wtf/Assertions.h: Use gnu_printf format in WTF_ATTRIBUTE_PRINTF
2514
2515 2016-11-05  Yusuke Suzuki  <utatane.tea@gmail.com>
2516
2517         [JSCOnly] RunLoopGeneric should adopt MonotonicTime / WallTime change
2518         https://bugs.webkit.org/show_bug.cgi?id=164447
2519
2520         Reviewed by Csaba Osztrogonác.
2521
2522         Build fix for JSCOnly.
2523
2524         * wtf/generic/RunLoopGeneric.cpp:
2525         (WTF::RunLoop::TimerBase::ScheduledTask::create):
2526         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
2527         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
2528         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
2529         (WTF::RunLoop::populateTasks):
2530         (WTF::RunLoop::dispatchAfter):
2531         (WTF::RunLoop::TimerBase::start):
2532
2533 2016-11-04  Filip Pizlo  <fpizlo@apple.com>
2534
2535         WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
2536         https://bugs.webkit.org/show_bug.cgi?id=152045
2537
2538         Reviewed by Andy Estes.
2539         
2540         We used to use 'double' for all time measurements. Sometimes it was milliseconds,
2541         sometimes it was seconds. Sometimes we measured a span of time, sometimes we spoke of time
2542         since some epoch. When we spoke of time since epoch, we either used a monotonic clock or
2543         a wall clock. The type - always 'double' - never told us what kind of time we had, even
2544         though there were roughly six of them (sec interval, ms interval, sec since epoch on wall,
2545         ms since epoch on wall, sec since epoch monotonic, ms since epoch monotonic).
2546         
2547         At some point, we thought that it would be a good idea to replace these doubles with
2548         std::chrono. But since replacing some things with std::chrono, we found it to be terribly
2549         inconvenient:
2550         
2551         - Outrageous API. I never want to say std::chrono::milliseconds(blah). I never want to say
2552           std::chrono::steady_clock::timepoint. The syntax for duration_cast is ugly, and ideally
2553           duration_cast would not even be a thing.
2554         
2555         - No overflow protection. std::chrono uses integers by default and using anything else is
2556           clumsy. But the integer math is done without regard for the rough edges of integer math,
2557           so any cast between std::chrono types risks overflow. Any comparison risks overflow
2558           because it may do conversions silently. We have even found bugs where some C++
2559           implementations had more overflows than others, which ends up being a special kind of
2560           hell. In many cases, the overflow also has nasal demons.
2561         
2562         It's an error to represent time using integers. It would have been excusable back when
2563         floating point math was not guaranteed to be supported on all platforms, but that would
2564         have been a long time ago. Time is a continuous, infinite concept and it's a perfect fit
2565         for floating point:
2566         
2567         - Floating point preserves precision under multiplication in all but extreme cases, so
2568           using floating point for time means that unit conversions are almost completely
2569           lossless. This means that we don't have to think very hard about what units to use. In
2570           this patch, we use seconds almost everywhere. We only convert at boundaries, like an API
2571           boundary that wants something other than seconds.
2572         
2573         - Floating point makes it easy to reason about infinity, which is something that time code
2574           wants to do a lot. Example: when would you like to timeout? Infinity please! This is the
2575           most elegant way of having an API support both a timeout variant and a no-timeout
2576           variant.
2577
2578         - Floating point does well-understood things when math goes wrong, and these things are
2579           pretty well optimized to match what a mathematician would do when computing with real
2580           numbers represented using scientific notation with a finite number of significant
2581           digits. This means that time math under floating point looks like normal math. On the
2582           other hand, std::chrono time math looks like garbage because you have to always check
2583           for multiple possible UB corners whenever you touch large integers. Integers that
2584           represent time are very likely to be large and you don't have to do much to overflow
2585           them. At this time, based on the number of bugs we have already seen due to chrono
2586           overflows, I am not certain that we even understand what are all of the corner cases
2587           that we should even check for.
2588         
2589         This patch introduces a new set of timekeeping classes that are all based on double, and
2590         all internally use seconds. These classes support algebraic typing. The classes are:
2591         
2592         - Seconds: this is for measuring a duration.
2593         - WallTime: time since epoch according to a wall clock (aka real time clock).
2594         - MonotonicTime: time since epoch according to a monotonic clock.
2595         - ClockType: enum that says either Wall or Monotonic.
2596         - TimeWithDynamicClockType: a tuple of double and ClockType, which represents either a
2597           wall time or a monotonic time.
2598         
2599         All of these classes behave like C++ values and are cheap to copy around since they are
2600         very nearly POD. This supports comprehensive conversions between the various time types.
2601         Most of this is by way of algebra. Here are just some of the rules we recognize:
2602         
2603         WallTime = WallTime + Seconds
2604         Seconds = WallTime - WallTime
2605         MonotonicTime = MonotonicTime + Seconds
2606         etc...
2607         
2608         We support negative, infinite, and NaN times because math.
2609         
2610         We support conversions between MonotonicTime and WallTime, like:
2611         
2612         WallTime wt = mt.approximateWallTime()
2613         
2614         This is called this "approximate" because the only way to do it is to get the current time
2615         on both clocks and convert relative to that.
2616         
2617         Many of our APIs would be happy using whatever notion of time the user wanted to use. For
2618         those APIs, which includes Condition and ParkingLot, we have TimeWithDynamicClockType. You
2619         can automatically convert WallTime or MonotonicTime to TimeWithDynamicClockType. This
2620         means that if you use a WallTime with Condition::waitUntil, then Condition's internal
2621         logic for when it should wake up makes its decision based on the current WallTime - but if
2622         you use MonotonicTime then waitUntil will make its decision based on current
2623         MonotonicTime. This is a greater level of flexibility than chrono allowed, since chrono
2624         did not have the concept of a dynamic clock type.
2625         
2626         This patch does not include conversions between std::chrono and these new time classes,
2627         because past experience shows that we're quite bad at getting conversions between
2628         std::chrono and anything else right. Also, I didn't need such conversion code because this
2629         patch only converts code that transitively touches ParkingLot and Condition. It was easy
2630         to get all of that code onto the new time classes.
2631
2632         * WTF.xcodeproj/project.pbxproj:
2633         * wtf/AutomaticThread.cpp:
2634         (WTF::AutomaticThread::start):
2635         * wtf/CMakeLists.txt:
2636         * wtf/ClockType.cpp: Added.
2637         (WTF::printInternal):
2638         * wtf/ClockType.h: Added.
2639         * wtf/Condition.h:
2640         (WTF::ConditionBase::waitUntil):
2641         (WTF::ConditionBase::waitFor):
2642         (WTF::ConditionBase::wait):
2643         (WTF::ConditionBase::waitUntilWallClockSeconds): Deleted.
2644         (WTF::ConditionBase::waitUntilMonotonicClockSeconds): Deleted.
2645         (WTF::ConditionBase::waitForSeconds): Deleted.
2646         (WTF::ConditionBase::waitForSecondsImpl): Deleted.
2647         (WTF::ConditionBase::waitForImpl): Deleted.
2648         (WTF::ConditionBase::absoluteFromRelative): Deleted.
2649         * wtf/CrossThreadQueue.h:
2650         (WTF::CrossThreadQueue<DataType>::waitForMessage):
2651         * wtf/CurrentTime.cpp:
2652         (WTF::sleep):
2653         * wtf/MessageQueue.h:
2654         (WTF::MessageQueue::infiniteTime): Deleted.
2655         * wtf/MonotonicTime.cpp: Added.
2656         (WTF::MonotonicTime::now):
2657         (WTF::MonotonicTime::approximateWallTime):
2658         (WTF::MonotonicTime::dump):
2659         (WTF::MonotonicTime::sleep):
2660         * wtf/MonotonicTime.h: Added.
2661         (WTF::MonotonicTime::MonotonicTime):
2662         (WTF::MonotonicTime::fromRawDouble):
2663         (WTF::MonotonicTime::infinity):
2664         (WTF::MonotonicTime::secondsSinceEpoch):
2665         (WTF::MonotonicTime::approximateMonotonicTime):
2666         (WTF::MonotonicTime::operator bool):
2667         (WTF::MonotonicTime::operator+):
2668         (WTF::MonotonicTime::operator-):
2669         (WTF::MonotonicTime::operator+=):
2670         (WTF::MonotonicTime::operator-=):
2671         (WTF::MonotonicTime::operator==):
2672         (WTF::MonotonicTime::operator!=):
2673         (WTF::MonotonicTime::operator<):
2674         (WTF::MonotonicTime::operator>):
2675         (WTF::MonotonicTime::operator<=):
2676         (WTF::MonotonicTime::operator>=):
2677         * wtf/ParkingLot.cpp:
2678         (WTF::ParkingLot::parkConditionallyImpl):
2679         (WTF::ParkingLot::unparkOne):
2680         (WTF::ParkingLot::unparkOneImpl):
2681         (WTF::ParkingLot::unparkCount):
2682         * wtf/ParkingLot.h:
2683         (WTF::ParkingLot::parkConditionally):
2684         (WTF::ParkingLot::compareAndPark):
2685         * wtf/Seconds.cpp: Added.
2686         (WTF::Seconds::operator+):
2687         (WTF::Seconds::operator-):
2688         (WTF::Seconds::dump):
2689         (WTF::Seconds::sleep):
2690         * wtf/Seconds.h: Added.
2691         (WTF::Seconds::Seconds):
2692         (WTF::Seconds::value):
2693         (WTF::Seconds::seconds):
2694         (WTF::Seconds::milliseconds):
2695         (WTF::Seconds::microseconds):
2696         (WTF::Seconds::nanoseconds):
2697         (WTF::Seconds::fromMilliseconds):
2698         (WTF::Seconds::fromMicroseconds):
2699         (WTF::Seconds::fromNanoseconds):
2700         (WTF::Seconds::infinity):
2701         (WTF::Seconds::operator bool):
2702         (WTF::Seconds::operator+):
2703         (WTF::Seconds::operator-):
2704         (WTF::Seconds::operator*):
2705         (WTF::Seconds::operator/):
2706         (WTF::Seconds::operator+=):
2707         (WTF::Seconds::operator-=):
2708         (WTF::Seconds::operator*=):
2709         (WTF::Seconds::operator/=):
2710         (WTF::Seconds::operator==):
2711         (WTF::Seconds::operator!=):
2712         (WTF::Seconds::operator<):
2713         (WTF::Seconds::operator>):
2714         (WTF::Seconds::operator<=):
2715         (WTF::Seconds::operator>=):
2716         * wtf/TimeWithDynamicClockType.cpp: Added.
2717         (WTF::TimeWithDynamicClockType::now):
2718         (WTF::TimeWithDynamicClockType::nowWithSameClock):
2719         (WTF::TimeWithDynamicClockType::wallTime):
2720         (WTF::TimeWithDynamicClockType::monotonicTime):
2721         (WTF::TimeWithDynamicClockType::approximateWallTime):
2722         (WTF::TimeWithDynamicClockType::approximateMonotonicTime):
2723         (WTF::TimeWithDynamicClockType::operator-):
2724         (WTF::TimeWithDynamicClockType::operator<):
2725         (WTF::TimeWithDynamicClockType::operator>):
2726         (WTF::TimeWithDynamicClockType::operator<=):
2727         (WTF::TimeWithDynamicClockType::operator>=):
2728         (WTF::TimeWithDynamicClockType::dump):
2729         (WTF::TimeWithDynamicClockType::sleep):
2730         * wtf/TimeWithDynamicClockType.h: Added.
2731         (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType):
2732         (WTF::TimeWithDynamicClockType::fromRawDouble):
2733         (WTF::TimeWithDynamicClockType::secondsSinceEpoch):
2734         (WTF::TimeWithDynamicClockType::clockType):
2735         (WTF::TimeWithDynamicClockType::withSameClockAndRawDouble):
2736         (WTF::TimeWithDynamicClockType::operator bool):
2737         (WTF::TimeWithDynamicClockType::operator+):
2738         (WTF::TimeWithDynamicClockType::operator-):
2739         (WTF::TimeWithDynamicClockType::operator+=):
2740         (WTF::TimeWithDynamicClockType::operator-=):
2741         (WTF::TimeWithDynamicClockType::operator==):
2742         (WTF::TimeWithDynamicClockType::operator!=):
2743         * wtf/WallTime.cpp: Added.
2744         (WTF::WallTime::now):
2745         (WTF::WallTime::approximateMonotonicTime):
2746         (WTF::WallTime::dump):
2747         (WTF::WallTime::sleep):
2748         * wtf/WallTime.h: Added.
2749         (WTF::WallTime::WallTime):
2750         (WTF::WallTime::fromRawDouble):
2751         (WTF::WallTime::infinity):
2752         (WTF::WallTime::secondsSinceEpoch):
2753         (WTF::WallTime::approximateWallTime):
2754         (WTF::WallTime::operator bool):
2755         (WTF::WallTime::operator+):
2756         (WTF::WallTime::operator-):
2757         (WTF::WallTime::operator+=):
2758         (WTF::WallTime::operator-=):
2759         (WTF::WallTime::operator==):
2760         (WTF::WallTime::operator!=):
2761         (WTF::WallTime::operator<):
2762         (WTF::WallTime::operator>):
2763         (WTF::WallTime::operator<=):
2764         (WTF::WallTime::operator>=):
2765         * wtf/threads/BinarySemaphore.cpp:
2766         (WTF::BinarySemaphore::wait):
2767         * wtf/threads/BinarySemaphore.h:
2768
2769 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
2770
2771         DFG plays fast and loose with the shadow values of a Phi
2772         https://bugs.webkit.org/show_bug.cgi?id=164309
2773
2774         Reviewed by Saam Barati.
2775         
2776         Made this API use size rather than maxIndex as its initialization parameter, because that's
2777         less confusing.
2778
2779         * wtf/IndexSparseSet.h:
2780         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
2781
2782 2016-11-03  Commit Queue  <commit-queue@webkit.org>
2783
2784         Unreviewed, rolling out r208364.
2785         https://bugs.webkit.org/show_bug.cgi?id=164402
2786
2787         broke the build (Requested by smfr on #webkit).
2788
2789         Reverted changeset:
2790
2791         "DFG plays fast and loose with the shadow values of a Phi"
2792         https://bugs.webkit.org/show_bug.cgi?id=164309
2793         http://trac.webkit.org/changeset/208364
2794
2795 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
2796
2797         DFG plays fast and loose with the shadow values of a Phi
2798         https://bugs.webkit.org/show_bug.cgi?id=164309
2799
2800         Reviewed by Saam Barati.
2801         
2802         Made this API use size rather than maxIndex as its initialization parameter, because that's
2803         less confusing.
2804
2805         * wtf/IndexSparseSet.h:
2806         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
2807
2808 2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>
2809
2810         Fixes to build JSCOnly on macOS
2811         https://bugs.webkit.org/show_bug.cgi?id=164379
2812
2813         Reviewed by Michael Catanzaro.
2814
2815         * wtf/Platform.h: JSCOnly port should not provide any PLATFORM() macro
2816
2817 2016-11-03  Brady Eidson  <beidson@apple.com>
2818
2819         IndexedDB 2.0: Support binary keys.
2820         <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359
2821
2822         Reviewed by Alex Christensen.
2823
2824         * wtf/Hasher.h:
2825         (WTF::StringHasher::hashMemory): Teach hashMemory() to handle buffers with odd lengths.
2826
2827 2016-11-02  Filip Pizlo  <fpizlo@apple.com>
2828
2829         The GC should be in a thread
2830         https://bugs.webkit.org/show_bug.cgi?id=163562
2831
2832         Reviewed by Geoffrey Garen and Andreas Kling.
2833         
2834         This fixes some bugs and adds a few features.
2835
2836         * wtf/Atomics.h: The GC may do work on behalf of the JIT. If it does, the main thread needs to execute a cross-modifying code fence. This is cpuid on x86 and I believe it's isb on ARM. It would have been an isync on PPC and I think that isb is the ARM equivalent.
2837         (WTF::arm_isb):
2838         (WTF::crossModifyingCodeFence):
2839         (WTF::x86_ortop):
2840         (WTF::x86_cpuid):
2841         * wtf/AutomaticThread.cpp: I accidentally had AutomaticThreadCondition inherit from ThreadSafeRefCounted<AutomaticThread> [sic]. This never crashed before because all of our prior AutomaticThreadConditions were immortal.
2842         (WTF::AutomaticThread::AutomaticThread):
2843         (WTF::AutomaticThread::~AutomaticThread):
2844         (WTF::AutomaticThread::start):
2845         * wtf/AutomaticThread.h:
2846         * wtf/MainThread.cpp: Need to allow initializeGCThreads() to be called separately because it's now more than just a debugging thing.
2847         (WTF::initializeGCThreads):
2848
2849 2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>
2850
2851         Clean wrong comment about compositing on the UI process.
2852         https://bugs.webkit.org/show_bug.cgi?id=164339
2853
2854         Reviewed by Michael Catanzaro.
2855
2856         * wtf/Platform.h: The comment about compositing on the UI process
2857         was added on r109302 but was not removed properly when the Qt port
2858         was removed from trunk.
2859         USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.
2860
2861 2016-11-02  Alex Christensen  <achristensen@webkit.org>
2862
2863         Remove Battery Status API from the tree
2864         https://bugs.webkit.org/show_bug.cgi?id=164213
2865
2866         Reviewed by Sam Weinig.
2867
2868         * wtf/FeatureDefines.h:
2869
2870 2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>
2871
2872         [Readable Streams API] Enable creation of ReadableByteStreamController
2873         https://bugs.webkit.org/show_bug.cgi?id=164014
2874
2875         Reviewed by Youenn Fablet.
2876
2877         Added flag for the byte stream part of Readable Streams API.
2878
2879         * wtf/FeatureDefines.h:
2880
2881 2016-11-02  Per Arne Vollan  <pvollan@apple.com>
2882
2883         [Win] Copy build results to AAS 'Program Files' folder.
2884         https://bugs.webkit.org/show_bug.cgi?id=164273
2885
2886         Reviewed by Brent Fulgham.
2887
2888         The preferred location for the binaries is the AAS 'Program Files' folder.
2889
2890         * WTF.vcxproj/WTF.proj:
2891
2892 2016-10-29  Filip Pizlo  <fpizlo@apple.com>
2893
2894         JSC should support SharedArrayBuffer
2895         https://bugs.webkit.org/show_bug.cgi?id=163986
2896
2897         Reviewed by Keith Miller.
2898         
2899         Adds some small things we need for SharedArrayBuffer.
2900         
2901         * wtf/Atomics.h:
2902         (WTF::Atomic::compareExchangeWeakRelaxed):
2903         (WTF::Atomic::exchangeAdd):
2904         (WTF::Atomic::exchangeAnd):
2905         (WTF::Atomic::exchangeOr):
2906         (WTF::Atomic::exchangeSub):
2907         (WTF::Atomic::exchangeXor):
2908         (WTF::atomicLoad):
2909         (WTF::atomicStore):
2910         (WTF::atomicCompareExchangeWeak):
2911         (WTF::atomicCompareExchangeWeakRelaxed):
2912         (WTF::atomicCompareExchangeStrong):
2913         (WTF::atomicExchangeAdd):
2914         (WTF::atomicExchangeAnd):
2915         (WTF::atomicExchangeOr):
2916         (WTF::atomicExchangeSub):
2917         (WTF::atomicExchangeXor):
2918         (WTF::atomicExchange):
2919         (WTF::Atomic::exchangeAndAdd): Deleted.
2920         (WTF::weakCompareAndSwap): Deleted.
2921         We need to be able to do atomics operations on naked pointers. We also need to be able to do
2922         all of the things that std::atomic does. This adds those things and renames
2923         weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
2924         terminology.
2925         
2926         * wtf/Bitmap.h:
2927         (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
2928         (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
2929         * wtf/FastBitVector.h:
2930         (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
2931         * wtf/ParkingLot.cpp:
2932         (WTF::ParkingLot::unparkOne):
2933         (WTF::ParkingLot::unparkCount):
2934         * wtf/ParkingLot.h:
2935         Added unparkCount(), which lets you unpark some bounded number of threads and returns the
2936         number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
2937         just calls unparkCount(ptr, UINT_MAX).
2938
2939 2016-10-30  Frederic Wang  <fwang@igalia.com>
2940
2941         Use HarfBuzz ot-math API to parse the OpenType MATH table
2942         https://bugs.webkit.org/show_bug.cgi?id=162671
2943
2944         Reviewed by Michael Catanzaro.
2945
2946         * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.
2947
2948 2016-10-25  Mark Lam  <mark.lam@apple.com>
2949
2950         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
2951         https://bugs.webkit.org/show_bug.cgi?id=163996
2952         <rdar://problem/28263117>
2953
2954         Reviewed by Geoffrey Garen.
2955
2956         * wtf/Vector.h:
2957         (WTF::minCapacity>::tryConstructAndAppend):
2958         (WTF::minCapacity>::tryConstructAndAppendSlowCase):
2959         - Added try versions of constructAndAppend() so that we can handle the failure
2960           to allocate more gracefully.
2961
2962 2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>
2963
2964         Non-specialized version of deleteObject should not have template argument
2965         https://bugs.webkit.org/show_bug.cgi?id=163943
2966
2967         Reviewed by Anders Carlsson.
2968
2969         Fixes compilation of GDIObject.h with MinGW
2970
2971         * wtf/win/GDIObject.h:
2972         (WTF::deleteObject):
2973
2974 2016-10-24  Per Arne Vollan  <pvollan@apple.com>
2975
2976         [Win] CMake build type is not set.
2977         https://bugs.webkit.org/show_bug.cgi?id=163917
2978
2979         Reviewed by Alex Christensen.
2980
2981         The CMAKE_BUILD_TYPE variable should be set to Debug or Release.
2982
2983         * WTF.vcxproj/WTF.proj:
2984
2985 2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>
2986
2987         [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
2988         https://bugs.webkit.org/show_bug.cgi?id=163657
2989
2990         Reviewed by Saam Barati.
2991
2992         Simplify nonEmptyRangesOverlap.
2993
2994         * wtf/MathExtras.h:
2995         (WTF::nonEmptyRangesOverlap):
2996
2997 2016-10-23  Chris Dumez  <cdumez@apple.com>
2998
2999         Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
3000         <rdar://problem/28902292>
3001
3002         Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.
3003
3004         * wtf/Platform.h:
3005
3006 2016-10-20  Keith Miller  <keith_miller@apple.com>
3007
3008         Add support for WASM calls
3009         https://bugs.webkit.org/show_bug.cgi?id=161727
3010
3011         Reviewed by Filip Pizlo and Michael Saboff.
3012
3013         Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.
3014
3015         * wtf/LEBDecoder.h:
3016         (WTF::LEBDecoder::decodeUInt):
3017         (WTF::LEBDecoder::decodeUInt32):
3018         (WTF::LEBDecoder::decodeUInt64):
3019         (WTF::LEBDecoder::decodeInt32):
3020         (decodeUInt32): Deleted.
3021         (decodeInt32): Deleted.
3022
3023 2016-10-20  Filip Pizlo  <fpizlo@apple.com>
3024
3025         The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting
3026         https://bugs.webkit.org/show_bug.cgi?id=163738
3027
3028         Reviewed by Geoffrey Garen.
3029         
3030         There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
3031         should know about this.
3032
3033         * wtf/MainThread.cpp:
3034         (WTF::initializeGCThreads):
3035         (WTF::registerGCThread):
3036         (WTF::mayBeGCThread):
3037         * wtf/MainThread.h:
3038
3039 2016-10-19  Sam Weinig  <sam@webkit.org>
3040
3041         Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
3042         https://bugs.webkit.org/show_bug.cgi?id=163713
3043
3044         Reviewed by Dan Bernstein.
3045
3046         - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
3047           way:
3048                 WTF::visit(WTF::makeVisitor(...), variant)
3049
3050         * wtf/Variant.h:
3051         (WTF::switchOn):
3052
3053 2016-10-19  Alex Christensen  <achristensen@webkit.org>
3054
3055         Revert r207151
3056         https://bugs.webkit.org/show_bug.cgi?id=163675
3057
3058         Reviewed by Brent Fulgham.
3059
3060         * wtf/Platform.h:
3061         * wtf/SchedulePair.h:
3062         * wtf/SchedulePairMac.mm:
3063
3064 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
3065
3066         REGRESSION (r207480): 3 Dromaeo tests failing
3067         https://bugs.webkit.org/show_bug.cgi?id=163633
3068
3069         Reviewed by Mark Lam.
3070         
3071         It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
3072         thread will clear our address eventually - but not immediately. This causes a nasty
3073         assertion failure. The tricky thing is that when we detect this, we need to wait until that
3074         unparking thread does the deed. Otherwise, they will still do it at some later time.
3075         
3076         Alternatively, we could use some kind of versioning to detect this - increment the version
3077         when you park, so that unparking threads will know if they are time travelers. That seems
3078         more yucky.
3079         
3080         I don't think it matters too much what we do here, so long as it's simple and correct, since
3081         this requires a race that is rare enough that it didn't happen once in my testing, and I was
3082         pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
3083         rare because it requires the timeout to happen right as someone else is unparking. Since
3084         it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
3085         unparking thread is done.
3086
3087         * wtf/ParkingLot.cpp:
3088         (WTF::ParkingLot::parkConditionallyImpl):
3089         (WTF::ParkingLot::unparkOneImpl):
3090
3091 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
3092
3093         Baseline JIT should use AutomaticThread
3094         https://bugs.webkit.org/show_bug.cgi?id=163686
3095
3096         Reviewed by Geoffrey Garen.
3097         
3098         Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
3099         common condition for your thread and something else, you can do it. This trivially works
3100         if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
3101         dangerous, since you don't know who will wake up).
3102         
3103         The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
3104         optimal way: there are just two threads talking to each other, so it wakes up at most one
3105         thread and that thread is exactly the one you want woken up. Adding wait() means that I did
3106         not have to change that code.
3107
3108         * wtf/AutomaticThread.cpp:
3109         (WTF::AutomaticThreadCondition::wait):
3110         * wtf/AutomaticThread.h:
3111
3112 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
3113
3114         DFG worklist should use AutomaticThread
3115         https://bugs.webkit.org/show_bug.cgi?id=163615
3116
3117         Reviewed by Mark Lam.
3118         
3119         This adds new functionality to AutomaticThread to support DFG::Worklist:
3120         
3121         - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
3122           of a thread's lifetime. This allows Worklist to tie some resources to the life of the
3123           thread, and also means that now those resources will naturally free up when the Worklist is
3124           not in use.
3125         
3126         - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
3127           need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
3128           our threads.
3129
3130         * wtf/AutomaticThread.cpp:
3131         (WTF::AutomaticThreadCondition::notifyOne):
3132         (WTF::AutomaticThread::ThreadScope::ThreadScope):
3133         (WTF::AutomaticThread::ThreadScope::~ThreadScope):
3134         (WTF::AutomaticThread::start):
3135         (WTF::AutomaticThread::threadDidStart):
3136         (WTF::AutomaticThread::threadWillStop):
3137         * wtf/AutomaticThread.h:
3138         * wtf/Condition.h:
3139         (WTF::ConditionBase::notifyOne):
3140
3141 2016-10-18  Sam Weinig  <sam@webkit.org>
3142
3143         Replace std::experimental::variant with WTF::Variant (or similar)
3144         https://bugs.webkit.org/show_bug.cgi?id=163626
3145
3146         Reviewed by Chris Dumez.
3147
3148         Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
3149         into the WTF namespace.
3150
3151         * wtf/Forward.h:
3152         * wtf/Variant.h:
3153
3154 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
3155
3156         WTF should make it easier to create threads that die automatically after inactivity
3157         https://bugs.webkit.org/show_bug.cgi?id=163576
3158
3159         Reviewed by Andreas Kling.
3160         
3161         For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
3162         guilty because those threads don't shut down when they are inactive. For example, in bug
3163         163562, I need to add a new GC thread. There will be one of them per VM. This means that a
3164         JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
3165         good.
3166         
3167         A common pattern for all of these threads is that they have some well-defined trigger that
3168         causes them to run. This trigger has a lock, a condition variable, some logic that determines
3169         if there is work to do, and then of course the logic for the thread's actual work. The thread
3170         bodies usually look like this:
3171         
3172         void Thingy::runThread()
3173         {
3174             for (;;) {
3175                 Work work;
3176                 {
3177                     LockHolder locker(m_lock);
3178                     while (!hasWork())
3179                         m_cond.wait(m_lock);
3180                     work = takeWork();
3181                 }
3182                 doWork(work);
3183             }
3184         }
3185         
3186         If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's
3187         threads), you will see this pattern.
3188         
3189         This change adds a new kind of thread, called AutomaticThread, that lets you write threads to
3190         this pattern while getting automatic thread shutdown for free: instead of just waiting on a
3191         condition variable, AutomaticThread will have a timeout that causes the thread to die. The
3192         condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart
3193         enough to restart any threads that have decided to stop due to inactivity. The inactivity
3194         threshold is current just 1 second.
3195         
3196         In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more
3197         places soon.
3198
3199         * WTF.xcodeproj/project.pbxproj:
3200         * wtf/AutomaticThread.cpp: Added.
3201         (WTF::AutomaticThreadCondition::create):
3202         (WTF::AutomaticThreadCondition::AutomaticThreadCondition):
3203         (WTF::AutomaticThreadCondition::~AutomaticThreadCondition):
3204         (WTF::AutomaticThreadCondition::notifyAll):
3205         (WTF::AutomaticThreadCondition::add):
3206         (WTF::AutomaticThreadCondition::remove):
3207         (WTF::AutomaticThreadCondition::contains):
3208         (WTF::AutomaticThread::AutomaticThread):
3209         (WTF::AutomaticThread::~AutomaticThread):
3210         (WTF::AutomaticThread::join):
3211         (WTF::AutomaticThread::start):
3212         * wtf/AutomaticThread.h: Added.
3213         * wtf/CMakeLists.txt:
3214         * wtf/ParallelHelperPool.cpp:
3215         (WTF::ParallelHelperClient::ParallelHelperClient):
3216         (WTF::ParallelHelperClient::~ParallelHelperClient):
3217         (WTF::ParallelHelperClient::setTask):
3218         (WTF::ParallelHelperClient::finish):
3219         (WTF::ParallelHelperClient::doSomeHelping):
3220         (WTF::ParallelHelperClient::runTask):
3221         (WTF::ParallelHelperPool::ParallelHelperPool):
3222         (WTF::ParallelHelperPool::~ParallelHelperPool):
3223         (WTF::ParallelHelperPool::ensureThreads):
3224         (WTF::ParallelHelperPool::doSomeHelping):
3225         (WTF::ParallelHelperPool::Thread::Thread):
3226         (WTF::ParallelHelperPool::didMakeWorkAvailable):
3227         (WTF::ParallelHelperPool::helperThreadBody): Deleted.
3228         (WTF::ParallelHelperPool::waitForClientWithTask): Deleted.
3229         * wtf/ParallelHelperPool.h:
3230
3231 2016-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
3232
3233         SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
3234         https://bugs.webkit.org/show_bug.cgi?id=116470
3235
3236         Reviewed by Simon Fraser.
3237
3238         * wtf/TemporaryChange.h:
3239         (WTF::TemporaryChange::TemporaryChange):
3240         Add a new constructor to make TemporaryChange work as a restorer. The
3241         temporary change will happen after we construct the object.
3242
3243 2016-10-17  Simon Fraser  <simon.fraser@apple.com>
3244
3245         Implement DOMRect/DOMRectReadOnly
3246         https://bugs.webkit.org/show_bug.cgi?id=163464
3247
3248         Reviewed by Darin Adler.
3249         
3250         Implement min()/max() in a way that follows Math.min/Math.max, which return
3251         NaN if either argument is NaN.
3252
3253         * wtf/MathExtras.h:
3254         (WTF::nanPropagatingMin):
3255         (WTF::nanPropagatingMax):
3256
3257 2016-10-15  Sam Weinig  <sam@webkit.org>
3258
3259         MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
3260         https://bugs.webkit.org/show_bug.cgi?id=163475
3261
3262         Reviewed by Simon Fraser.
3263
3264         * wtf/Variant.h:
3265         Add missing return statement that was tripping up some compilers.
3266
3267 2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>
3268
3269         Unreviewed, rolling out r207225.
3270
3271         This change causes debug tests to exit early with crashes.
3272
3273         Reverted changeset:
3274
3275         "Optional's move-constructor and move-assignment operator
3276         don't disengage the value being moved from"
3277         https://bugs.webkit.org/show_bug.cgi?id=163309
3278         http://trac.webkit.org/changeset/207225
3279
3280 2016-10-11  Sam Weinig  <sam@webkit.org>
3281
3282         Optional's move-constructor and move-assignment operator don't disengage the value being moved from
3283         https://bugs.webkit.org/show_bug.cgi?id=163309
3284
3285         Reviewed by Anders Carlsson.
3286
3287         * wtf/Optional.h:
3288         (WTF::Optional::Optional):
3289         (WTF::Optional::operator=):
3290         Disengage 'other' on move-construction and move-assignment.
3291
3292 2016-10-08  Filip Pizlo  <fpizlo@apple.com>
3293
3294         MarkedBlock should know what objects are live during marking
3295         https://bugs.webkit.org/show_bug.cgi?id=162309
3296
3297         Reviewed by Geoffrey Garen.
3298         
3299         This removes the atomicity mode, because it's not really used: it only affects the
3300         concurrentBlah methods, but their only users turn on atomicity. This was useful because
3301         previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used
3302         effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't.
3303         Removing this useless mode is the best solution.
3304         
3305         Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and
3306         setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set,
3307         respectively) while also clearing the contents of 'other'. This is great for one of the GC
3308         hot paths.
3309
3310         * wtf/Bitmap.h:
3311         (WTF::WordType>::Bitmap):
3312         (WTF::WordType>::get):
3313         (WTF::WordType>::set):
3314         (WTF::WordType>::testAndSet):
3315         (WTF::WordType>::testAndClear):
3316         (WTF::WordType>::concurrentTestAndSet):
3317         (WTF::WordType>::concurrentTestAndClear):
3318         (WTF::WordType>::clear):
3319         (WTF::WordType>::clearAll):
3320         (WTF::WordType>::nextPossiblyUnset):
3321         (WTF::WordType>::findRunOfZeros):
3322         (WTF::WordType>::count):
3323         (WTF::WordType>::isEmpty):
3324         (WTF::WordType>::isFull):
3325         (WTF::WordType>::merge):
3326         (WTF::WordType>::filter):
3327         (WTF::WordType>::exclude):
3328         (WTF::WordType>::forEachSetBit):
3329         (WTF::WordType>::mergeAndClear):
3330         (WTF::WordType>::setAndClear):
3331         (WTF::=):
3332         (WTF::WordType>::hash):
3333
3334 2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>
3335
3336         Add SynchronizedFixedQueue class
3337         https://bugs.webkit.org/show_bug.cgi?id=162478
3338
3339         Reviewed by Geoffrey Garen.
3340
3341         This class represents a simple producer/consumer worker. It facilitates
3342         synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses
3343         a single lock and a single condition to synchronize all its members among
3344         the working threads. This means a single thread is active at any time and
3345         and the other threads are blocked waiting for the lock to be released. Or
3346         they are sleeping waiting for the condition to be satisfied.
3347
3348         * WTF.xcodeproj/project.pbxproj:
3349         * wtf/SynchronizedFixedQueue.h: Added.
3350         (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):
3351         (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state.
3352         (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state.
3353         (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items?
3354         (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue.
3355         (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue.
3356
3357 2016-10-11  Alex Christensen  <achristensen@webkit.org>
3358
3359         Remove dead networking code
3360         https://bugs.webkit.org/show_bug.cgi?id=163263
3361
3362         Reviewed by Daniel Bates.
3363
3364         * wtf/Platform.h:
3365         * wtf/SchedulePair.h:
3366         * wtf/SchedulePairMac.mm:
3367
3368 2016-10-10  Zan Dobersek  <zdobersek@igalia.com>
3369
3370         Add ENABLE_ENCRYPTED_MEDIA configuration option
3371         https://bugs.webkit.org/show_bug.cgi?id=163219
3372
3373         Reviewed by Darin Adler.
3374
3375         * wtf/FeatureDefines.h:
3376         If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0.
3377
3378 2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>
3379
3380         [DOMJIT] Implement Node accessors in DOMJIT
3381         https://bugs.webkit.org/show_bug.cgi?id=163005
3382
3383         Reviewed by Filip Pizlo.
3384
3385         Add CAST_OFFSET. It is not necessary for JSCell thingy
3386         since we don't use virtual member functions. However, it
3387         is not true for WebCore DOM wrapped objects.
3388
3389         * wtf/StdLibExtras.h:
3390
3391 2016-10-07  Chris Dumez  <cdumez@apple.com>
3392
3393         window.navigator.language incorrectly returns all lowercase string
3394         https://bugs.webkit.org/show_bug.cgi?id=163096
3395
3396         Reviewed by Darin Adler.
3397
3398         Update platformUserPreferredLanguages() so that it no longer lowercases
3399         the string it returns. On Mac, we rely on CFLocale which returns
3400         BCP-47 language tags as per:
3401         - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc
3402
3403         * wtf/PlatformUserPreferredLanguagesMac.mm:
3404         (WTF::httpStyleLanguageCode):
3405         * wtf/PlatformUserPreferredLanguagesUnix.cpp:
3406         (WTF::platformLanguage):
3407
3408 2016-10-06  Brent Fulgham  <bfulgham@apple.com>
3409
3410         [Win][Direct2D] Add Direct2D CMake rules
3411         https://bugs.webkit.org/show_bug.cgi?id=162925
3412
3413         Reviewed by Brent Fulgham.
3414
3415         * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
3416         with Direct2D.
3417
3418 2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
3419
3420         [DOMJIT] Add initial CheckDOM and CallDOM implementations
3421         https://bugs.webkit.org/show_bug.cgi?id=162941
3422
3423         Reviewed by Filip Pizlo.
3424
3425         * wtf/Box.h:
3426         (WTF::Box::Box):
3427
3428 2016-10-05  Zan Dobersek  <zdobersek@igalia.com>
3429
3430         Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
3431         https://bugs.webkit.org/show_bug.cgi?id=162903
3432
3433         Reviewed by Alex Christensen.
3434
3435         Rename build guards for the remaining implementation of the legacy EME API
3436         to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
3437         of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.
3438
3439         * wtf/FeatureDefines.h:
3440
3441 2016-10-04  Saam Barati  <sbarati@apple.com>
3442
3443         String.prototype.toLowerCase should be a DFG/FTL intrinsic
3444         https://bugs.webkit.org/show_bug.cgi?id=162887
3445
3446         Reviewed by Filip Pizlo and Yusuke Suzuki.
3447
3448         This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
3449         which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
3450         into a helper function. I decided to extract this into its own function because
3451         it may be the case that JSCs JITs will want to continue the operation
3452         after it has already ensured that part of an 8-bit string is lower case.
3453
3454         * wtf/text/StringImpl.cpp:
3455         (WTF::StringImpl::convertToLowercaseWithoutLocale):
3456         (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
3457         * wtf/text/StringImpl.h:
3458         * wtf/text/WTFString.cpp:
3459         (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
3460         * wtf/text/WTFString.h:
3461
3462 2016-10-04  Chris Dumez  <cdumez@apple.com>
3463
3464         Implement KeyboardEvent.code from the UI Event spec
3465         https://bugs.webkit.org/show_bug.cgi?id=149584
3466
3467         Reviewed by Darin Adler.
3468
3469         Add build time flag to toggle support for the code attribute on
3470         KeyboardEvent and only enable it on Mac for now, given that the
3471         implementation is missing on other platforms.
3472
3473         * wtf/FeatureDefines.h:
3474
3475 2016-10-03  Chris Dumez  <cdumez@apple.com>
3476
3477         Add support for KeyboardEvent.key attribute
3478         https://bugs.webkit.org/show_bug.cgi?id=36267
3479
3480         Reviewed by Darin Adler.
3481
3482         Add compile time flag for the key attribute on KeyboardEvent and enable
3483         it on Cocoa only.
3484
3485         * wtf/FeatureDefines.h:
3486
3487 2016-09-29  Sam Weinig  <sam@webkit.org>
3488
3489         Add initial support for IDL union conversion
3490         https://bugs.webkit.org/show_bug.cgi?id=161576
3491
3492         Reviewed by Chris Dumez.
3493
3494         * WTF.xcodeproj/project.pbxproj:
3495         * wtf/CMakeLists.txt:
3496         Add Brigand.h
3497
3498         * wtf/Brigand.h: Added.
3499         Import a standalone copy of Edouard Alligand and Joel Falcou's 
3500         Brigand library for help with for help with list based meta programming
3501
3502         * wtf/StdLibExtras.h:
3503         Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
3504         - IsTemplate acts like std::is_class, but works with a generic base.
3505         - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
3506         - RemoveCVAndReference combines std::remove_cv and std::remove_reference.
3507
3508 2016-09-30  Filip Pizlo  <fpizlo@apple.com>
3509
3510         B3::moveConstants should be able to edit code to minimize the number of constants
3511         https://bugs.webkit.org/show_bug.cgi?id=162764
3512
3513         Reviewed by Saam Barati.
3514         
3515         I thought it would be a good idea to document the fact that dominator traversal happens in a
3516         particular order for a reason.
3517
3518         * wtf/Dominators.h:
3519
3520 2016-09-29  Filip Pizlo  <fpizlo@apple.com>
3521
3522         Air should have a way of expressing additional instruction flags
3523         https://bugs.webkit.org/show_bug.cgi?id=162699
3524
3525         Reviewed by Mark Lam.
3526
3527         * wtf/CommaPrinter.h:
3528         (WTF::CommaPrinter::CommaPrinter):
3529         (WTF::CommaPrinter::dump):
3530         (WTF::CommaPrinter::didPrint):
3531
3532 2016-09-30  Youenn Fablet  <youenn@apple.com>
3533
3534         Add a way to go from a RefPtr<T> to Ref<const T>
3535         https://bugs.webkit.org/show_bug.cgi?id=162683
3536
3537         Reviewed by Alex Christensen.
3538
3539         * wtf/RefPtr.h:
3540         (WTF::RefPtr::releaseConstNonNull): Added.