Unreviewed build fix after r209910
[WebKit-https.git] / Source / WTF / ChangeLog
1 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
2
3         Unreviewed build fix after r209910
4
5         Unreviewed.
6
7         * wtf/Platform.h:
8
9 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
10
11         Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
12         https://bugs.webkit.org/show_bug.cgi?id=165931
13
14         We have a class declaration for TextBreakIterator but no definition for it. When we
15         create an ICU UBreakIterator, we immediately reinterpret_cast it to this undefined
16         type, and pass it around our code inside WebCore. Then, whenever we want to actually
17         use this iterator, we reinterpret_cast it back to UBreakIterator. This is likely due
18         to some ports historically implementing breaking interators on top of other libraries
19         other than ICU; however, now, all ports use ICU. Because this internal type is not
20         helpful and just adds confusion, we should just call our breaking iterators what
21         they are: UBreakIterators.
22
23         This patch is a mechanical replacement of TextBreakIterator to UBreakIterator and
24         removes the functions we were calling which pass through directly to ubrk_*().
25
26         Reviewed by Alex Christensen.
27
28         * wtf/text/LineBreakIteratorPoolICU.h:
29         (WTF::LineBreakIteratorPool::take):
30         (WTF::LineBreakIteratorPool::put):
31         * wtf/text/StringView.cpp:
32         (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
33         * wtf/text/TextBreakIterator.cpp:
34         (WTF::initializeIterator):
35         (WTF::initializeIteratorWithRules):
36         (WTF::setTextForIterator):
37         (WTF::setContextAwareTextForIterator):
38         (WTF::wordBreakIterator):
39         (WTF::sentenceBreakIterator):
40         (WTF::cursorMovementIterator):
41         (WTF::acquireLineBreakIterator):
42         (WTF::releaseLineBreakIterator):
43         (WTF::openLineBreakIterator):
44         (WTF::closeLineBreakIterator):
45         (WTF::getNonSharedCharacterBreakIterator):
46         (WTF::cacheNonSharedCharacterBreakIterator):
47         (WTF::isWordTextBreak):
48         (WTF::numGraphemeClusters):
49         (WTF::numCharactersInGraphemeClusters):
50         (WTF::textBreakFirst): Deleted.
51         (WTF::textBreakLast): Deleted.
52         (WTF::textBreakNext): Deleted.
53         (WTF::textBreakPrevious): Deleted.
54         (WTF::textBreakPreceding): Deleted.
55         (WTF::textBreakFollowing): Deleted.
56         (WTF::textBreakCurrent): Deleted.
57         (WTF::isTextBreak): Deleted.
58         * wtf/text/TextBreakIterator.h:
59         (WTF::LazyLineBreakIterator::lastCharacter):
60         (WTF::LazyLineBreakIterator::secondToLastCharacter):
61         (WTF::LazyLineBreakIterator::setPriorContext):
62         (WTF::LazyLineBreakIterator::updatePriorContext):
63         (WTF::LazyLineBreakIterator::resetPriorContext):
64         (WTF::LazyLineBreakIterator::priorContextLength):
65         (WTF::LazyLineBreakIterator::get):
66         (WTF::NonSharedCharacterBreakIterator::operator UBreakIterator*):
67         (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*): Deleted.
68
69 2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>
70
71         Sort Xcode project files
72         https://bugs.webkit.org/show_bug.cgi?id=165937
73
74         Reviewed by Simon Fraser.
75
76         * WTF.xcodeproj/project.pbxproj:
77
78 2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>
79
80         Added missing override and final specifiers
81         https://bugs.webkit.org/show_bug.cgi?id=165903
82
83         Reviewed by Darin Adler.
84
85         * wtf/RunLoop.h:
86
87 2016-12-15  Yusuke Suzuki  <utatane.tea@gmail.com>
88
89         [JSC] Optimize Kraken stringify
90         https://bugs.webkit.org/show_bug.cgi?id=165857
91
92         Reviewed by Darin Adler.
93
94         Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
95         According to the result produced by Linux `perf`, it occupies 28% of execution time.
96
97         We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
98         And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.
99
100         It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.
101
102             Performance result in my MBP (dandelion).
103
104                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
105                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
106                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
107                 with 95% confidence intervals in milliseconds.
108
109                                                    baseline                  patched
110
111                 json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
112
113                 <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster
114
115             Performance result in my Linux laptop (hanayamata).
116
117                 Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
118                 between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
119                 jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
120                 with 95% confidence intervals in milliseconds.
121
122                                                    baseline                  patched
123
124                 json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
125
126                 <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster
127
128         * wtf/text/StringBuilder.cpp:
129         (WTF::appendQuotedJSONStringInternalSlow):
130         (WTF::appendQuotedJSONStringInternal):
131
132 2016-12-14  Commit Queue  <commit-queue@webkit.org>
133
134         Unreviewed, rolling out r209795.
135         https://bugs.webkit.org/show_bug.cgi?id=165853
136
137         rolled out the wrong revision (Requested by pizlo on #webkit).
138
139         Reverted changeset:
140
141         "MarkedBlock::marksConveyLivenessDuringMarking should take
142         into account collection scope"
143         https://bugs.webkit.org/show_bug.cgi?id=165741
144         http://trac.webkit.org/changeset/209795
145
146 2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>
147
148         REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
149         https://bugs.webkit.org/show_bug.cgi?id=164022
150
151         Reviewed by Xabier Rodriguez-Calvar.
152
153         * wtf/glib/GLibUtilities.h:
154         Added new macros to convert gulong to/from gpointer.
155
156 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
157
158         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
159         https://bugs.webkit.org/show_bug.cgi?id=165741
160
161         Unreviewed, re-landing this with fix (revert erroneous change to Options).
162
163         * WTF.xcodeproj/project.pbxproj:
164         * wtf/CMakeLists.txt:
165         * wtf/DataLog.cpp:
166         (WTF::initializeLogFileOnce):
167         (WTF::initializeLogFile):
168         (WTF::dataFile):
169         * wtf/DataLog.h:
170         * wtf/LockedPrintStream.cpp: Added.
171         (WTF::LockedPrintStream::LockedPrintStream):
172         (WTF::LockedPrintStream::~LockedPrintStream):
173         (WTF::LockedPrintStream::vprintf):
174         (WTF::LockedPrintStream::flush):
175         (WTF::LockedPrintStream::begin):
176         (WTF::LockedPrintStream::end):
177         * wtf/LockedPrintStream.h: Added.
178         * wtf/PrintStream.cpp:
179         (WTF::PrintStream::printfVariableFormat):
180         (WTF::PrintStream::begin):
181         (WTF::PrintStream::end):
182         * wtf/PrintStream.h:
183         (WTF::PrintStream::atomically):
184         (WTF::PrintStream::print):
185         (WTF::PrintStream::println):
186         (WTF::PrintStream::printImpl):
187         (WTF::>::unpack):
188         (WTF::FormatImpl::FormatImpl):
189         (WTF::FormatImpl::dump):
190         (WTF::format):
191         (WTF::printInternal):
192         * wtf/RecursiveLockAdapter.h: Added.
193         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
194         (WTF::RecursiveLockAdapter::lock):
195         (WTF::RecursiveLockAdapter::unlock):
196         (WTF::RecursiveLockAdapter::tryLock):
197         (WTF::RecursiveLockAdapter::isLocked):
198         * wtf/WordLock.cpp:
199         * wtf/WordLock.h:
200
201 2016-12-14  Gavin Barraclough  <barraclough@apple.com>
202
203         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
204         https://bugs.webkit.org/show_bug.cgi?id=165741
205
206         Unreviewed rollout due to performance regression.
207
208         * WTF.xcodeproj/project.pbxproj:
209         * wtf/CMakeLists.txt:
210         * wtf/DataLog.cpp:
211         (WTF::initializeLogFileOnce):
212         (WTF::initializeLogFile):
213         (WTF::dataFile):
214         * wtf/DataLog.h:
215         * wtf/LockedPrintStream.cpp: Removed.
216         * wtf/LockedPrintStream.h: Removed.
217         * wtf/PrintStream.cpp:
218         (WTF::PrintStream::printfVariableFormat): Deleted.
219         (WTF::PrintStream::begin): Deleted.
220         (WTF::PrintStream::end): Deleted.
221         * wtf/PrintStream.h:
222         (WTF::PrintStream::print):
223         (WTF::PrintStream::println):
224         (WTF::PrintStream::atomically): Deleted.
225         (WTF::PrintStream::printImpl): Deleted.
226         (): Deleted.
227         (WTF::>::unpack): Deleted.
228         (WTF::FormatImpl::FormatImpl): Deleted.
229         (WTF::FormatImpl::dump): Deleted.
230         (WTF::format): Deleted.
231         * wtf/RecursiveLockAdapter.h: Removed.
232         * wtf/WordLock.cpp:
233         * wtf/WordLock.h:
234
235 2016-12-13  JF Bastien  <jfbastien@apple.com>
236
237         std::expected: fix rvalue forwarding issues
238         https://bugs.webkit.org/show_bug.cgi?id=165812
239
240         Reviewed by Mark Lam.
241
242         * wtf/Expected.h:
243         (WTF::UnexpectedType::UnexpectedType):
244         (WTF::ExpectedDetail::Base::Base):
245         (WTF::Expected::Expected):
246
247 2016-12-13  Chris Dumez  <cdumez@apple.com>
248
249         Unreviewed, rolling out r209544.
250
251         Looks like r209489 did not cause the performance regression
252         after all
253
254         Reverted changeset:
255
256         "Unreviewed, rolling out r209489."
257         https://bugs.webkit.org/show_bug.cgi?id=165550
258         http://trac.webkit.org/changeset/209544
259
260 2016-12-13  Commit Queue  <commit-queue@webkit.org>
261
262         Unreviewed, rolling out r209725.
263         https://bugs.webkit.org/show_bug.cgi?id=165811
264
265         "Broke ARMv7 builds" (Requested by msaboff on #webkit).
266
267         Reverted changeset:
268
269         "REGRESSION(r209653): speedometer crashes making virtual slow
270         path tailcalls"
271         https://bugs.webkit.org/show_bug.cgi?id=165748
272         http://trac.webkit.org/changeset/209725
273
274 2016-12-13  JF Bastien  <jfbastien@apple.com>
275
276         [WTF] Turn tryMakeString(), makeString() into variadic templates
277         https://bugs.webkit.org/show_bug.cgi?id=147142
278
279         Reviewed by Mark Lam.
280
281         I wrote this patch while improving WebAssembly's error messages,
282         and only found this bug afterwards. My implementation does the
283         bare minimum to make this code variadic without changing
284         behavior. I think it's better to go with this baby step first, and
285         improve the code later.
286
287         Notable, for my WebAssembly patch I also taught the code to handle
288         integers and other types (including WebAssembly types). A
289         follow-up could rely on ADL magic to pretty-format these other
290         types.
291
292         * wtf/text/StringConcatenate.h:
293         (WTF::sumWithOverflow): This unconditionally does the sum for all
294         inputs, which the compiler is more likely to appreciate (because
295         it's the common case) compared to testing for overflow and bailing
296         on each addition
297         (WTF::are8Bit): are: the plural of is!
298         (WTF::makeStringAccumulator): accumulate strings
299         (WTF::tryMakeStringFromAdapters): a small helper which creates the string adapters
300         (WTF::tryMakeString): expose out of WTF, since it's part of this file's used API
301         (WTF::makeString): make it variadic
302
303 2016-12-13  Konstantin Tokarev  <annulen@yandex.ru>
304
305         Unreviewed, silence -Wsuggest-attribute for GCC with pragmas
306
307         * wtf/PrintStream.cpp:
308         (WTF::PrintStream::printfVariableFormat):
309
310 2016-12-12  Michael Saboff  <msaboff@apple.com>
311
312         REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
313         https://bugs.webkit.org/show_bug.cgi?id=165748
314
315         Reviewed by Filip Pizlo.
316
317         Rolling back in r209653, r209654, r209663, and r209673.
318
319         * wtf/Platform.h:
320
321 2016-12-12  Commit Queue  <commit-queue@webkit.org>
322
323         Unreviewed, rolling out r209703.
324         https://bugs.webkit.org/show_bug.cgi?id=165749
325
326         Broke Apple builds (Requested by annulen|home on #webkit).
327
328         Reverted changeset:
329
330         "Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma"
331         http://trac.webkit.org/changeset/209703
332
333 2016-12-12  Konstantin Tokarev  <annulen@yandex.ru>
334
335         Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma
336
337         * wtf/PrintStream.cpp:
338         (WTF::PrintStream::printfVariableFormat):
339         * wtf/PrintStream.h:
340
341 2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>
342
343         Unreviewed, guarded clang pragma with COMPILER(CLANG) to fix -Werror
344
345         * wtf/PrintStream.cpp:
346         (WTF::PrintStream::printfVariableFormat):
347
348 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
349
350         Change to use #pragma once (requested by Darin Adler).
351
352         * wtf/RecursiveLockAdapter.h:
353
354 2016-12-11  Filip Pizlo  <fpizlo@apple.com>
355
356         Change to use #pragma once (requested by Darin Adler).
357
358         * wtf/LockedPrintStream.h:
359
360 2016-12-10  Filip Pizlo  <fpizlo@apple.com>
361
362         MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
363         https://bugs.webkit.org/show_bug.cgi?id=165741
364
365         Reviewed by Saam Barati.
366         
367         To find this bug, I needed to seriously beef up our logging infrastructure.
368         
369         It's now the case that:
370         
371             dataLog(...);
372         
373         will print its output atomically. This happens with some careful magic:
374         
375         - dataFile() is now a LockedPrintStream that locks around print().
376         
377         - The lock is a recursive lock via RecursiveLockAdapter<>, so if the dump methods end
378           up calling back into dataLog() then it just works. This is important: say the dump()
379           calls a getter that itself does logging, maybe because it's encountering badness and
380           wants to report it before crashing).
381         
382         - The lock is a WordLock so that ParkingLot and Lock can keep using dataLog() for
383           debugging. We probably won't need to debug WordLock anytime soon - the algorithm is
384           so simple.
385         
386         - LockedPrintStream::print(...) causes the print callbacks of its arguments to run on
387           the underlying PrintStream, so that you don't need to do recursive lock acquisition
388           on each individual argument and whatever printing it does recursively.
389
390         * WTF.xcodeproj/project.pbxproj:
391         * wtf/CMakeLists.txt:
392         * wtf/DataLog.cpp:
393         (WTF::initializeLogFileOnce):
394         (WTF::initializeLogFile):
395         (WTF::dataFile):
396         * wtf/DataLog.h:
397         * wtf/LockedPrintStream.cpp: Added.
398         (WTF::LockedPrintStream::LockedPrintStream):
399         (WTF::LockedPrintStream::~LockedPrintStream):
400         (WTF::LockedPrintStream::vprintf):
401         (WTF::LockedPrintStream::flush):
402         (WTF::LockedPrintStream::begin):
403         (WTF::LockedPrintStream::end):
404         * wtf/LockedPrintStream.h: Added.
405         * wtf/PrintStream.cpp:
406         (WTF::PrintStream::printfVariableFormat):
407         (WTF::PrintStream::begin):
408         (WTF::PrintStream::end):
409         * wtf/PrintStream.h:
410         (WTF::PrintStream::atomically):
411         (WTF::PrintStream::print):
412         (WTF::PrintStream::println):
413         (WTF::PrintStream::printImpl):
414         (WTF::>::unpack):
415         (WTF::FormatImpl::FormatImpl):
416         (WTF::FormatImpl::dump):
417         (WTF::format):
418         (WTF::printInternal):
419         * wtf/RecursiveLockAdapter.h: Added.
420         (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
421         (WTF::RecursiveLockAdapter::lock):
422         (WTF::RecursiveLockAdapter::unlock):
423         (WTF::RecursiveLockAdapter::tryLock):
424         (WTF::RecursiveLockAdapter::isLocked):
425         * wtf/WordLock.cpp:
426         * wtf/WordLock.h:
427
428 2016-12-11  Darin Adler  <darin@apple.com>
429
430         Use std::vsnprintf instead of vasprintf
431         https://bugs.webkit.org/show_bug.cgi?id=165740
432
433         Reviewed by Sam Weinig.
434
435         * wtf/Platform.h: Remove HAVE_VASPRINTF.
436         * wtf/StringExtras.h: Change the vsnprintf workaround to be used only
437         in older versions of Visual Studio, since the problem it works around
438         was resolved in Visual Studio 2015.
439
440 2016-12-10  Commit Queue  <commit-queue@webkit.org>
441
442         Unreviewed, rolling out r209653, r209654, r209663, and
443         r209673.
444         https://bugs.webkit.org/show_bug.cgi?id=165739
445
446         speedometer crashes (Requested by pizlo on #webkit).
447
448         Reverted changesets:
449
450         "JSVALUE64: Pass arguments in platform argument registers when
451         making JavaScript calls"
452         https://bugs.webkit.org/show_bug.cgi?id=160355
453         http://trac.webkit.org/changeset/209653
454
455         "Unreviewed build fix for 32 bit builds."
456         http://trac.webkit.org/changeset/209654
457
458         "Unreviewed build fix for the CLOOP after r209653"
459         http://trac.webkit.org/changeset/209663
460
461         "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
462         https://bugs.webkit.org/show_bug.cgi?id=165728
463         http://trac.webkit.org/changeset/209673
464
465 2016-12-10  Chris Dumez  <cdumez@apple.com>
466
467         Avoid calling shrink() in the Vector destructor
468         https://bugs.webkit.org/show_bug.cgi?id=165675
469
470         Reviewed by Daniel Bates.
471
472         Avoid calling shrink() in the Vector destructor to avoid function call
473         overhead and unnecessarily reseting m_size to 0.
474
475         * wtf/Vector.h:
476         (WTF::Vector::~Vector):
477         (WTF::Vector::asanSetBufferSizeToFullCapacity):
478         (WTF::minCapacity>::asanSetBufferSizeToFullCapacity):
479
480 2016-12-09  Michael Saboff  <msaboff@apple.com>
481
482         JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
483         https://bugs.webkit.org/show_bug.cgi?id=160355
484
485         Reviewed by Filip Pizlo.
486
487         Added a new build option ENABLE_VM_COUNTERS to enable JIT'able counters.
488         The default is for the option to be off.
489
490         * wtf/Platform.h:
491         Added ENABLE_VM_COUNTERS
492
493 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
494
495         Deploy OrdinalNumber in JSC::SourceCode
496         https://bugs.webkit.org/show_bug.cgi?id=165687
497
498         Reviewed by Michael Saboff.
499
500         * wtf/text/OrdinalNumber.h:
501         (WTF::OrdinalNumber::operator>): Added a >.
502
503 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
504
505         TextPosition and OrdinalNumber should be more like idiomatic numbers
506         https://bugs.webkit.org/show_bug.cgi?id=165678
507
508         Reviewed by Filip Pizlo.
509
510         * wtf/text/TextPosition.h:
511         (WTF::TextPosition::minimumPosition): Deleted. Just use the default
512         constructor. Other numbers use their default constructors to mean zero.
513
514         Any time you need a comment that says "used as a default value", that's
515         a pretty good indicator that it should be the default constructor.
516
517 2016-12-09  Geoffrey Garen  <ggaren@apple.com>
518
519         Moved OrdinalNumber into its own file
520         https://bugs.webkit.org/show_bug.cgi?id=165663
521
522         Reviewed by Saam Barati.
523
524         * WTF.xcodeproj/project.pbxproj:
525         * wtf/text/OrdinalNumber.h: Copied from Source/WTF/wtf/text/TextPosition.h.
526         (WTF::TextPosition::TextPosition): Deleted.
527         (WTF::TextPosition::operator==): Deleted.
528         (WTF::TextPosition::operator!=): Deleted.
529         (WTF::TextPosition::minimumPosition): Deleted.
530         (WTF::TextPosition::belowRangePosition): Deleted.
531         * wtf/text/TextPosition.h:
532         (WTF::OrdinalNumber::fromZeroBasedInt): Deleted.
533         (WTF::OrdinalNumber::fromOneBasedInt): Deleted.
534         (WTF::OrdinalNumber::OrdinalNumber): Deleted.
535         (WTF::OrdinalNumber::zeroBasedInt): Deleted.
536         (WTF::OrdinalNumber::oneBasedInt): Deleted.
537         (WTF::OrdinalNumber::operator==): Deleted.
538         (WTF::OrdinalNumber::operator!=): Deleted.
539         (WTF::OrdinalNumber::first): Deleted.
540         (WTF::OrdinalNumber::beforeFirst): Deleted.
541
542 2016-12-08  David Kilzer  <ddkilzer@apple.com>
543
544         Always check the return value of pthread_key_create()
545         <https://webkit.org/b/165274>
546
547         Reviewed by Darin Adler.
548
549         * wtf/ThreadIdentifierDataPthreads.cpp:
550         (WTF::ThreadIdentifierData::initializeOnce): Make the code more
551         readable by assigning a variable to the result of
552         pthread_key_create().  This matches the idiom used elsewhere.
553
554 2016-12-08  Keith Miller  <keith_miller@apple.com>
555
556         Add 64-bit signed LEB decode method
557         https://bugs.webkit.org/show_bug.cgi?id=165630
558
559         Reviewed by Ryosuke Niwa.
560
561         Add int64 LEB decode and fix some 64-bit specific issues
562         with the decoder. There is also a fix where we would allow
563         LEBs with canonical length + 1 size that is fixed by this
564         patch.
565
566         * wtf/LEBDecoder.h:
567         (WTF::LEBDecoder::decodeUInt):
568         (WTF::LEBDecoder::decodeInt):
569         (WTF::LEBDecoder::decodeUInt32):
570         (WTF::LEBDecoder::decodeUInt64):
571         (WTF::LEBDecoder::decodeInt32):
572         (WTF::LEBDecoder::decodeInt64):
573
574 2016-12-08  Anders Carlsson  <andersca@apple.com>
575
576         Defer sending Mach messages if the queue is full
577         https://bugs.webkit.org/show_bug.cgi?id=165622
578         rdar://problem/29518036
579
580         Reviewed by Brady Eidson.
581
582         Add new SPI.
583
584         * wtf/spi/darwin/XPCSPI.h:
585
586 2016-12-06  Filip Pizlo  <fpizlo@apple.com>
587
588         Concurrent GC should be stable enough to land enabled on X86_64
589         https://bugs.webkit.org/show_bug.cgi?id=164990
590
591         Reviewed by Geoffrey Garen.
592         
593         Adds the ability to say:
594         
595         auto locker = holdLock(any type of lock)
596         
597         Instead of having to say:
598         
599         Locker<LockType> locker(locks of type LockType)
600         
601         I think that we should use "auto locker = holdLock(lock)" as the default way that we acquire
602         locks unless we need to use a special locker type.
603         
604         This also adds the ability to safepoint a lock. Safepointing a lock is basically a super fast
605         way of unlocking it fairly and then immediately relocking it - i.e. letting anyone who is
606         waiting to run without losing steam of there is noone waiting.
607
608         * wtf/Lock.cpp:
609         (WTF::LockBase::safepointSlow):
610         * wtf/Lock.h:
611         (WTF::LockBase::safepoint):
612         * wtf/LockAlgorithm.h:
613         (WTF::LockAlgorithm::safepointFast):
614         (WTF::LockAlgorithm::safepoint):
615         (WTF::LockAlgorithm::safepointSlow):
616         * wtf/Locker.h:
617         (WTF::AbstractLocker::AbstractLocker):
618         (WTF::Locker::tryLock):
619         (WTF::Locker::operator bool):
620         (WTF::Locker::Locker):
621         (WTF::Locker::operator=):
622         (WTF::holdLock):
623         (WTF::tryHoldLock):
624
625 2016-12-08  Chris Dumez  <cdumez@apple.com>
626
627         Unreviewed, rolling out r209489.
628
629         Likely caused large regressions on JetStream, Sunspider and
630         Speedometer
631
632         Reverted changeset:
633
634         "Add system trace points for JavaScript VM entry/exit"
635         https://bugs.webkit.org/show_bug.cgi?id=165550
636         http://trac.webkit.org/changeset/209489
637
638 2016-12-07  Simon Fraser  <simon.fraser@apple.com>
639
640         Add system trace points for JavaScript VM entry/exit
641         https://bugs.webkit.org/show_bug.cgi?id=165550
642
643         Reviewed by Tim Horton.
644         
645         Add trace points for entry/exit into/out of the JS VM.
646
647         * wtf/SystemTracing.h:
648
649 2016-12-06  Alexey Proskuryakov  <ap@apple.com>
650
651         Correct SDKROOT values in xcconfig files
652         https://bugs.webkit.org/show_bug.cgi?id=165487
653         rdar://problem/29539209
654
655         Reviewed by Dan Bernstein.
656
657         Fix suggested by Dan Bernstein.
658
659         * Configurations/DebugRelease.xcconfig:
660
661 2016-12-06  Michael Saboff  <msaboff@apple.com>
662
663         REGRESSION(r209399): Causes crashes when dumping JIT disassembly
664         https://bugs.webkit.org/show_bug.cgi?id=165483
665
666         Reviewed by Geoffrey Garen.
667
668         Fixed the RELEASE_ASSERT() to check that the 6 character string is terminated by a null
669         character.
670
671         * wtf/SixCharacterHash.cpp:
672         (WTF::sixCharacterHashStringToInteger):
673
674 2016-12-04  Darin Adler  <darin@apple.com>
675
676         Use ASCIICType more, and improve it a little bit
677         https://bugs.webkit.org/show_bug.cgi?id=165360
678
679         Reviewed by Sam Weinig.
680
681         * wtf/ASCIICType.h: Added declarations of all the functions to the top of the file,
682         so we have a list of what's available, not just a mix of that and the implementation.
683
684         * wtf/HexNumber.h:
685         (WTF::Internal::hexDigitsForMode): Moved lowerHexDigits and upperHexDigits
686         inside this function.
687         (WTF::appendByteAsHex): Use auto.
688         (WTF::placeByteAsHexCompressIfPossible): Ditto.
689         (WTF::placeByteAsHex): Ditto.
690         (WTF::appendUnsignedAsHex): Ditto.
691         (WTF::appendUnsigned64AsHex): Ditto.
692         (WTF::appendUnsignedAsHexFixedSize): Ditto.
693         (WTF::isHexDigit): Deleted.
694         (WTF::uncheckedHexDigit): Deleted.
695         (WTF::hexDigitValue): Deleted.
696         (WTF::uncheckedHexDigitValue): Deleted.
697
698         * wtf/SixCharacterHash.cpp:
699         (WTF::sixCharacterHashStringToInteger): Use isASCIIUpper, isASCIILower, and
700         isASCIIDigit. Also added some FIXMEs; for some reason this function uses
701         RELEASE_ASSERT to abort if the passed-in string is not six characters long,
702         and it's not clear to me why this is so critical to assert.
703         (WTF::integerToSixCharacterHashString): Moved the table inside this function,
704         obviating the need for a macro named TABLE.
705
706         * wtf/dtoa/bignum.cc:
707         (WTF::double_conversion::HexCharValue): Deleted.
708         (WTF::double_conversion::Bignum::AssignHexString): Use toASCIIHexValue.
709         * wtf/dtoa/double-conversion.cc:
710         (WTF::double_conversion::StringToDoubleConverter::StringToDouble): Use isASCIIDigit.
711
712         * wtf/text/StringBuilder.cpp:
713         (WTF::appendQuotedJSONStringInternal): Use upperNibbleToASCIIHexDigit and
714         lowerNibbleToASCIIHexDigit.
715
716         * wtf/text/StringImpl.cpp:
717         (WTF::StringImpl::convertToUppercaseWithoutLocale): Use toASCIIUpper.
718         Removed the workaround for a bug that was fixed in Visual Studio 2013.
719
720 2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>
721
722         REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
723         https://bugs.webkit.org/show_bug.cgi?id=165351
724
725         Reviewed by Yusuke Suzuki.
726
727         Include a slimmed down version of WTF::Optional which older versions
728         of Safari still depend on for a JavaScriptCore exported symbol.
729         To prevent misuse name it WTF::DeprecatedOptional and use it only in
730         the one instance it is needed.
731
732         * WTF.xcodeproj/project.pbxproj:
733         * wtf/DeprecatedOptional.h: Added.
734         (WTF::Optional::operator bool):
735         (WTF::Optional::value):
736         (WTF::Optional::asPtr):
737
738 2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>
739
740         Add __STDC_FORMAT_MACROS before inttypes.h is included
741         https://bugs.webkit.org/show_bug.cgi?id=165374
742
743         We need formatting macros like PRIu64 to be available in all places where
744         inttypes.h header is used. All these usages get inttypes.h definitions
745         via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
746         macros are not used anymore since r185129.
747
748         This patch fixes multiple build errors with MinGW and reduces number of
749         independent __STDC_FORMAT_MACROS uses in the code base.
750
751         Reviewed by Darin Adler.
752
753         * wtf/Assertions.h: Define __STDC_FORMAT_MACROS.
754         * wtf/StdLibExtras.h: Remove definition of PRId64 for Windows, as we
755         have __STDC_FORMAT_MACROS defined now.
756
757 2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>
758
759         Refactor SymbolImpl layout
760         https://bugs.webkit.org/show_bug.cgi?id=165247
761
762         Reviewed by Darin Adler.
763
764         This patch moves SymbolImpl initialization from StringImpl to SymbolImpl.
765         In SymbolImpl, we create the appropriate fields. At that time, these fields
766         should be aligned to the BufferSubstring StringImpl.
767
768         And we newly create the `m_flags` in SymbolImpl. Instead of using special
769         StringImpl::null(), we store s_flagIsNullSymbol flag here. In WTF, we have
770         the invariant that StringImpl::empty() is the only atomic empty string.
771         But StringImpl::null() breaks this invariant. Using a special flag is safer
772         way to represent the null Symbol `Symbol()`.
773
774         * WTF.xcodeproj/project.pbxproj:
775         * wtf/CMakeLists.txt:
776         * wtf/StdLibExtras.h:
777         (WTF::roundUpToMultipleOfImpl0):
778         (WTF::roundUpToMultipleOfImpl):
779         (WTF::roundUpToMultipleOf):
780         * wtf/text/StringImpl.cpp:
781         (WTF::StringImpl::~StringImpl):
782         (WTF::StringImpl::createSymbol): Deleted.
783         (WTF::StringImpl::createNullSymbol): Deleted.
784         * wtf/text/StringImpl.h:
785         (WTF::StringImpl::isAtomic):
786         (WTF::StringImpl::StringImpl):
787         (WTF::StringImpl::requiresCopy):
788         (WTF::StringImpl::isNullSymbol): Deleted.
789         (WTF::StringImpl::symbolAwareHash): Deleted.
790         (WTF::StringImpl::existingSymbolAwareHash): Deleted.
791         (WTF::StringImpl::null): Deleted.
792         (WTF::StringImpl::extractFoldedStringInSymbol): Deleted.
793         (WTF::StringImpl::symbolRegistry): Deleted.
794         (WTF::StringImpl::hashForSymbol): Deleted.
795         * wtf/text/StringStatics.cpp:
796         (WTF::StringImpl::nextHashForSymbol): Deleted.
797         * wtf/text/SymbolImpl.cpp: Copied from Source/WTF/wtf/text/SymbolRegistry.cpp.
798         (WTF::SymbolImpl::nextHashForSymbol):
799         (WTF::SymbolImpl::create):
800         (WTF::SymbolImpl::createNullSymbol):
801         * wtf/text/SymbolImpl.h:
802         (WTF::SymbolImpl::hashForSymbol):
803         (WTF::SymbolImpl::symbolRegistry):
804         (WTF::SymbolImpl::isNullSymbol):
805         (WTF::SymbolImpl::extractFoldedString):
806         (WTF::SymbolImpl::SymbolImpl):
807         (WTF::StringImpl::symbolAwareHash):
808         (WTF::StringImpl::existingSymbolAwareHash):
809         * wtf/text/SymbolRegistry.cpp:
810         (WTF::SymbolRegistry::~SymbolRegistry):
811         (WTF::SymbolRegistry::symbolForKey):
812         (WTF::SymbolRegistry::keyForSymbol):
813         * wtf/text/UniquedStringImpl.h:
814         (WTF::UniquedStringImpl::UniquedStringImpl):
815
816 2016-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>
817
818         Introduce StringImpl::StaticStringImpl with constexpr constructor
819         https://bugs.webkit.org/show_bug.cgi?id=165093
820
821         Reviewed by Darin Adler.
822
823         This patch adds new class, StringImpl::StaticStringImpl.
824         By using this class, we can easily create static StringImpls.
825         This class has constexpr constructor. You can initialize instances
826         of this class as global static variables without invoking global
827         constructors.
828
829         We already have similar system, StaticASCIILiteral. But using it
830         requires some special perl script since we need to calculate
831         hash value. On the other hand, we can use StaticStringImpl without
832         any script supports since we implement constexpr hash function.
833         In the future, we will replace all the use of StaticASCIILiteral
834         with this StaticStringImpl.
835
836         We define empty / null strings as StaticStringImpl. And we make
837         StringImpl::empty() & StringImpl::null() inline functions.
838
839         * wtf/Hasher.h:
840         (WTF::StringHasher::hashWithTop8BitsMasked):
841         (WTF::StringHasher::hash):
842         (WTF::StringHasher::finalize):
843         (WTF::StringHasher::finalizeAndMaskTop8Bits):
844         (WTF::StringHasher::computeLiteralHash):
845         (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
846         (WTF::StringHasher::avalancheBits3):
847         (WTF::StringHasher::avalancheBits2):
848         (WTF::StringHasher::avalancheBits1):
849         (WTF::StringHasher::avalancheBits0):
850         (WTF::StringHasher::avalancheBits):
851         (WTF::StringHasher::avoidZero):
852         (WTF::StringHasher::processPendingCharacter):
853         (WTF::StringHasher::calculateWithRemainingLastCharacter1):
854         (WTF::StringHasher::calculateWithRemainingLastCharacter0):
855         (WTF::StringHasher::calculateWithRemainingLastCharacter):
856         (WTF::StringHasher::calculate1):
857         (WTF::StringHasher::calculate0):
858         (WTF::StringHasher::calculate):
859         (WTF::StringHasher::computeLiteralHashImpl):
860         * wtf/text/StringImpl.cpp:
861         * wtf/text/StringImpl.h:
862         (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
863         (WTF::StringImpl::null):
864         (WTF::StringImpl::empty):
865         * wtf/text/StringStatics.cpp:
866         (WTF::StringImpl::null): Deleted.
867         (WTF::StringImpl::empty): Deleted.
868
869 2016-11-30  Darin Adler  <darin@apple.com>
870
871         Roll out StringBuilder changes from the previous patch.
872         They were a slowdown on a Kraken JSON test.
873
874         * wtf/text/StringBuilder.cpp:
875         * wtf/text/StringBuilder.h:
876         Roll out changes from below.
877
878 2016-11-30  Darin Adler  <darin@apple.com>
879
880         Streamline and speed up tokenizer and segmented string classes
881         https://bugs.webkit.org/show_bug.cgi?id=165003
882
883         And do it without re-introducing:
884
885         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
886         https://bugs.webkit.org/show_bug.cgi?id=165142
887
888         Reviewed by Sam Weinig.
889
890         * wtf/text/StringBuilder.cpp:
891         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
892         the header since it is only used inside the class. Also renamed from
893         getBufferCharacters.
894         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
895         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
896         for the upconvert case in the 16-bit overload of StrinBuilder::append.
897         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
898         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
899         implementation below that now correctly determines the size of what will
900         be appended by walking thorugh the string twice.
901         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
902         quote marks in here. Also made a few coding style tweaks.
903         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
904         simpler algorithm that grows the string the same way the append function
905         does. The old code would use reserveCapacity in a way that was costly when
906         doing a lot of appends on the same string, and also allocated far too much
907         memory for normal use cases where characters did not need to be turned
908         into escape sequences.
909
910         * wtf/text/StringBuilder.h:
911         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
912         m_is8Bit field wasn't set correctly in one case, optimized the function that
913         adds substrings for the case where this is the first append and the substring
914         happens to cover the entire string. Also clarified the assertions and removed
915         an unneeded check from that substring overload.
916         (WTF::equal): Reimplemented, using equalCommon. Added an overload of the equal
917         function just for the case where the arguments are StringBuilder, String.
918         This is needed because of the peculiar behavior of is8Bit in String, different
919         from any of our other string classes. I think we should consider changing
920         String::is8Bit to return true for null strings. We could then remove this
921         overload and probably remove other checks for null and zero length elsewhere
922         that are also needed only to avoid calling is8Bit on a null String.
923
924 2016-11-29  JF Bastien  <jfbastien@apple.com>
925
926         WebAssembly JS API: improve Instance
927         https://bugs.webkit.org/show_bug.cgi?id=164757
928
929         Reviewed by Keith Miller.
930
931         * wtf/Expected.h:
932         (WTF::ExpectedDetail::destroy): silence a warning
933
934 2016-11-29  Commit Queue  <commit-queue@webkit.org>
935
936         Unreviewed, rolling out r209058 and r209074.
937         https://bugs.webkit.org/show_bug.cgi?id=165188
938
939         These changes caused API test StringBuilderTest.Equal to crash
940         and/or fail. (Requested by ryanhaddad on #webkit).
941
942         Reverted changesets:
943
944         "Streamline and speed up tokenizer and segmented string
945         classes"
946         https://bugs.webkit.org/show_bug.cgi?id=165003
947         http://trac.webkit.org/changeset/209058
948
949         "REGRESSION (r209058): API test StringBuilderTest.Equal
950         crashing"
951         https://bugs.webkit.org/show_bug.cgi?id=165142
952         http://trac.webkit.org/changeset/209074
953
954 2016-11-29  Simon Fraser  <simon.fraser@apple.com>
955
956         Allow TracePoint to take arbitrary data
957         https://bugs.webkit.org/show_bug.cgi?id=165182
958
959         Reviewed by Tim Horton.
960
961         Allow TracePoint() to take four numeric arguments, for arbitrary data.
962
963         #pragma once
964
965         * wtf/SystemTracing.h:
966         (WTF::TracePoint):
967
968 2016-11-29  Andy Estes  <aestes@apple.com>
969
970         [Cocoa] Enable two clang warnings recommended by Xcode
971         https://bugs.webkit.org/show_bug.cgi?id=164498
972
973         Reviewed by Mark Lam.
974
975         * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.
976
977 2016-11-29  Darin Adler  <darin@apple.com>
978
979         REGRESSION (r209058): API test StringBuilderTest.Equal crashing
980         https://bugs.webkit.org/show_bug.cgi?id=165142
981
982         * wtf/text/StringBuilder.h: Added an overload of the equal function just
983         for the case where the arguments are StringBuilder, String. This is needed
984         because of the peculiar behavior of is8Bit in String, different from any of
985         our other string classes. I think we should consider changing String::is8Bit
986         to return true for null strings. We could then remove this overload and
987         probably remove other checks for null and zero length elsewhere that are
988         also needed only to avoid calling is8Bit on a null String.
989
990 2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>
991
992         Scroll snapping on Mac should use AppKit animations
993         https://bugs.webkit.org/show_bug.cgi?id=147261
994         <rdar://problem/29395293>
995
996         Reviewed by Brent Fulgham.
997
998         Introduce HAVE(NSSCROLLING_FILTERS), which is on for macOS El Capitan and later.
999
1000         * wtf/Platform.h:
1001
1002 2016-11-28  Darin Adler  <darin@apple.com>
1003
1004         Streamline and speed up tokenizer and segmented string classes
1005         https://bugs.webkit.org/show_bug.cgi?id=165003
1006
1007         Reviewed by Sam Weinig.
1008
1009         * wtf/text/StringBuilder.cpp:
1010         (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
1011         the header since it is only used inside the class. Also renamed from
1012         getBufferCharacters.
1013         (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
1014         (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
1015         for the upconvert case in the 16-bit overload of StrinBuilder::append.
1016         (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
1017         (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
1018         implementation below that now correctly determines the size of what will
1019         be appended by walking thorugh the string twice.
1020         (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
1021         quote marks in here. Also made a few coding style tweaks.
1022         (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
1023         simpler algorithm that grows the string the same way the append function
1024         does. The old code would use reserveCapacity in a way that was costly when
1025         doing a lot of appends on the same string, and also allocated far too much
1026         memory for normal use cases where characters did not need to be turned
1027         into escape sequences.
1028
1029         * wtf/text/StringBuilder.h:
1030         (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
1031         m_is8Bit field wasn't set correctly in one case, optimized the function that
1032         adds substrings for the case where this is the first append and the substring
1033         happens to cover the entire string. Also clarified the assertions and removed
1034         an unneeded check from that substring overload.
1035         (WTF::equal): Reimplemented, using equalCommon.
1036
1037 2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>
1038
1039         [WTF] Import std::optional reference implementation as WTF::Optional
1040         https://bugs.webkit.org/show_bug.cgi?id=164199
1041
1042         Reviewed by Saam Barati and Sam Weinig.
1043
1044         Import std::optional reference implementation offered by the C++17
1045         original proposal paper. It has the same interface and functionality
1046         to the C++17's one. Previous WTF::Optional lacks several functionalities.
1047         The largest one is the correct constexpr constructors. This fact prevents
1048         us from using Optional<literal type> in constexpr context in WebKit.
1049
1050         In WebKit, we do not allow global constructors. So only the constexpr
1051         constructor is the way to use WTF::Optional in the static const
1052         global variables. WTF::Optional is used in DOMJIT::Effect and
1053         we would like to emit static const global variables that includes
1054         this DOMJIT::Effect. That is the main motivation of this work.
1055         This functionality allows the IDL code generator to emit DOMJIT
1056         signatures as static const global variables.
1057
1058         We import the reference implementation one instead of LLVM libc++'s one.
1059         This is because LLVM libc++'s one depends on many macro and type_traits
1060         offered by libc++ implementation. And adopting it to WebKit requires
1061         large modification compared to this reference implementation one.
1062         Furthermore, it is difficult to compile libc++'s optional in old GCC and VC++.
1063         It also requires some more modifications. To keep the thing simple,
1064         we import the reference implementation one now. Once C++17 is released
1065         and we update the compiler baseline, we can smoothly switch to the standard
1066         library's std::optional.
1067
1068         We also add support for the environment that does not use exceptions to this
1069         reference implementation.
1070
1071         And we also add valueOrCompute helper function. That keeps the extended
1072         functionality that previous WTF::Optional has.
1073
1074         * wtf/CrossThreadQueue.h:
1075         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
1076         * wtf/Expected.h:
1077         (WTF::makeExpected):
1078         * wtf/Forward.h:
1079         * wtf/HashTraits.h:
1080         (WTF::HashTraits<Ref<P>>::take):
1081         * wtf/MainThread.cpp:
1082         (WTF::initializeGCThreads):
1083         (WTF::mayBeGCThread):
1084         * wtf/MainThread.h:
1085         * wtf/Optional.h:
1086         (std::detail_::is_assignable::has_assign):
1087         (std::detail_::has_overloaded_addressof::has_overload):
1088         (std::detail_::static_addressof):
1089         (std::detail_::convert):
1090         (std::nullopt_t::nullopt_t):
1091         (std::bad_optional_access::bad_optional_access):
1092         (std::optional_base::optional_base):
1093         (std::optional_base::~optional_base):
1094         (std::constexpr_optional_base::constexpr_optional_base):
1095         (std::optional::dataptr):
1096         (std::optional::contained_val):
1097         (std::optional::__NOEXCEPT_):
1098         (std::optional::optional):
1099         (std::optional::operator=):
1100         (std::optional::emplace):
1101         (std::optional::operator ->):
1102         (std::optional::operator *):
1103         (std::optional::value):
1104         (std::optional::value_or):
1105         (std::operator==):
1106         (std::operator!=):
1107         (std::operator<):
1108         (std::operator>):
1109         (std::operator<=):
1110         (std::operator>=):
1111         (std::__NOEXCEPT_):
1112         (std::make_optional):
1113         (std::hash<std::optional<T>>::operator()):
1114         (WTF::NulloptTag::NulloptTag): Deleted.
1115         (WTF::Optional::Optional): Deleted.
1116         (WTF::Optional::~Optional): Deleted.
1117         (WTF::Optional::operator=): Deleted.
1118         (WTF::Optional::operator bool): Deleted.
1119         (WTF::Optional::operator->): Deleted.
1120         (WTF::Optional::operator*): Deleted.
1121         (WTF::Optional::value): Deleted.
1122         (WTF::Optional::valueOr): Deleted.
1123         (WTF::Optional::valueOrCompute): Deleted.
1124         (WTF::Optional::asPtr): Deleted.
1125         (WTF::Optional::destroy): Deleted.
1126         (WTF::operator==): Deleted.
1127         (WTF::operator!=): Deleted.
1128         (WTF::makeOptional): Deleted.
1129         (WTF::printInternal): Deleted.
1130         * wtf/text/StringView.cpp:
1131         (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
1132         (WTF::StringView::GraphemeClusters::Iterator::Iterator):
1133         * wtf/text/StringView.h:
1134
1135 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
1136
1137         Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
1138         https://bugs.webkit.org/show_bug.cgi?id=164992
1139
1140         Reviewed by Darin Adler.
1141
1142         Add Seconds::zero() as a nicer way to express Seconds(0). 
1143
1144         * wtf/Seconds.h:
1145         (WTF::Seconds::zero):
1146
1147 2016-11-26  Simon Fraser  <simon.fraser@apple.com>
1148
1149         Add literals for various time units
1150         https://bugs.webkit.org/show_bug.cgi?id=165074
1151
1152         Reviewed by Filip Pizlo.
1153         
1154         Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
1155         and unsigned long long types (those allowed for custom literals).
1156         
1157         Add minutes-related functions (there are one or two use cases in WebCore).
1158
1159         * wtf/Seconds.h:
1160         (WTF::Seconds::minutes):
1161         (WTF::Seconds::fromMinutes):
1162         (WTF::Seconds::fromMilliseconds):
1163         (WTF::Seconds::fromMicroseconds):
1164         (WTF::Seconds::fromNanoseconds):
1165         (WTF::operator _min):
1166         (WTF::operator _s):
1167         (WTF::operator _ms):
1168         (WTF::operator _us):
1169         (WTF::operator _ns):
1170
1171 2016-11-22  Darin Adler  <darin@apple.com>
1172
1173         One more tiny bit of follow-up.
1174
1175         * wtf/text/TextBreakIterator.cpp:
1176         (WTF::numCharactersInGraphemeClusters): Removed unneeded always-true check.
1177
1178 2016-11-22  Darin Adler  <darin@apple.com>
1179
1180         Quick follow-up to previous patch.
1181
1182         * wtf/text/TextBreakIterator.cpp:
1183         (WTF::numCharactersInGraphemeClusters): Removed incorrect assertion.
1184
1185 2016-11-22  Darin Adler  <darin@apple.com>
1186
1187         Make normal case fast in the input element limitString function
1188         https://bugs.webkit.org/show_bug.cgi?id=165023
1189
1190         Reviewed by Dan Bernstein.
1191
1192         * wtf/text/LineBreakIteratorPoolICU.h: Removed many unneeded includes.
1193         Simplified the class a bit, removing some extra definitions.
1194         (WTF::LineBreakIteratorPool::sharedPool): Use NeverDestroyed instead of new.
1195         (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword): Reimplemented in
1196         a simpler way without using StringBuilder. Also updated for change to
1197         LineBreakIteratorMode.
1198         (WTF::LineBreakIteratorPool::put): Use uncheckedAppend since the code is
1199         careful to only use the inline capacity in the vector.
1200
1201         * wtf/text/TextBreakIterator.cpp: Moved some includes in here from the header.
1202         (WTF::mapLineIteratorModeToRules): Updated for change to LineBreakIteratorMode.
1203         (WTF::openLineBreakIterator): Ditto.
1204         (WTF::numGraphemeClusters): Added a fast path for all 8-bit strings; don't
1205         use ICU for that case, even if there is a CR character in it.
1206         (WTF::numCharactersInGraphemeClusters): Added a fast path for strings that are
1207         short enough to entirely fit without even looking at the characters; that's a
1208         case we likely hit all the time. Also added a fast path for all 8-bit strings.
1209
1210         * wtf/text/TextBreakIterator.h: Changed LineBreakIteratorMode to be an enum
1211         class and not repeat UAX14 in the names of the modes. Initialize data members
1212         in the class definition rather than the constructors.
1213
1214 2016-11-21  Mark Lam  <mark.lam@apple.com>
1215
1216         Hasher::addCharacters() should be able to handle zero length strings.
1217         https://bugs.webkit.org/show_bug.cgi?id=165024
1218
1219         Reviewed by Yusuke Suzuki.
1220
1221         Currently, it will fail to handle zero length strings if it has a pending
1222         character.  The fix is simply to return early if length is 0. 
1223
1224         * wtf/Hasher.h:
1225         (WTF::StringHasher::addCharacters):
1226
1227 2016-11-18  Jeremy Jones  <jeremyj@apple.com>
1228
1229         Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
1230         https://bugs.webkit.org/show_bug.cgi?id=163801
1231
1232         Reviewed by Simon Fraser.
1233
1234         * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.
1235
1236 2016-11-17  Saam Barati  <sbarati@apple.com>
1237
1238         Remove async/await compile time flag and enable tests
1239         https://bugs.webkit.org/show_bug.cgi?id=164828
1240         <rdar://problem/28639334>
1241
1242         Reviewed by Yusuke Suzuki.
1243
1244         * wtf/FeatureDefines.h:
1245
1246 2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>
1247
1248         [JSC] WTF::TemporaryChange with WTF::SetForScope
1249         https://bugs.webkit.org/show_bug.cgi?id=164761
1250
1251         Reviewed by Saam Barati.
1252
1253         JavaScriptCore's bytecompiler/SetForScope.h is completely the same
1254         to WTF::TemporaryChange. SetForScope sounds better name since it
1255         says that this object works as Scope.
1256
1257         We rename WTF::TemporaryChange to WTF::SetForScope. And replace
1258         all the use to this WTF::SetForScope.
1259
1260         * WTF.xcodeproj/project.pbxproj:
1261         * wtf/SetForScope.h: Renamed from Source/WTF/wtf/TemporaryChange.h.
1262         (WTF::SetForScope::SetForScope):
1263         (WTF::SetForScope::~SetForScope):
1264
1265 2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>
1266
1267         [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
1268         https://bugs.webkit.org/show_bug.cgi?id=164827
1269
1270         Reviewed by Ryosuke Niwa.
1271
1272         * wtf/FeatureDefines.h:
1273
1274 2016-11-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>
1275
1276         [JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9
1277         https://bugs.webkit.org/show_bug.cgi?id=164588
1278
1279         Reviewed by Mark Lam.
1280
1281         Provide assembly for executing the cpuid instruction when compiling
1282         in PIC mode with the GCC 4.9 EBX on 32-bit x86.
1283
1284         Note that the values returned by cpuid here are not used. The purpose
1285         of calling this instruction is to force the CPU to complete and sync
1286         any buffered modifications on registers, memory or flags before
1287         fetching and executing the next instruction.
1288
1289         * wtf/Atomics.h:
1290         (WTF::x86_cpuid):
1291
1292 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
1293
1294         Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
1295         https://bugs.webkit.org/show_bug.cgi?id=164791
1296
1297         Reviewed by Geoffrey Garen.
1298         
1299         Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental
1300         JSC runtime components like JSValue. So, the thing that guards it should be a "feature"
1301         called CONCURRENT_JS not CONCURRENT_JIT.
1302
1303         * wtf/Platform.h:
1304
1305 2016-11-15  Filip Pizlo  <fpizlo@apple.com>
1306
1307         The concurrent GC should have a timeslicing controller
1308         https://bugs.webkit.org/show_bug.cgi?id=164783
1309
1310         Reviewed by Geoffrey Garen.
1311
1312         * wtf/LockAlgorithm.h: Added some comments.
1313         * wtf/Seconds.h: Added support for modulo. It's necessary for timeslicing.
1314         (WTF::Seconds::operator%):
1315         (WTF::Seconds::operator%=):
1316
1317 2016-11-11  Filip Pizlo  <fpizlo@apple.com>
1318
1319         The GC should be optionally concurrent and disabled by default
1320         https://bugs.webkit.org/show_bug.cgi?id=164454
1321
1322         Reviewed by Geoffrey Garen.
1323         
1324         The reason why I went to such great pains to make WTF::Lock fit in two bits is that I
1325         knew that I would eventually need to stuff one into some miscellaneous bits of the
1326         JSCell header. That time has come, because the concurrent GC has numerous race
1327         conditions in visitChildren that can be trivially fixed if each object just has an
1328         internal lock. Some cell types might use it to simply protect their entire visitChildren
1329         function and anything that mutates the fields it touches, while other cell types might
1330         use it as a "lock of last resort" to handle corner cases of an otherwise wait-free or
1331         lock-free algorithm. Right now, it's used to protect certain transformations involving
1332         indexing storage.
1333         
1334         To make this happen, I factored the WTF::Lock algorithm into a LockAlgorithm struct that
1335         is templatized on lock type (uint8_t for WTF::Lock), the isHeldBit value (1 for
1336         WTF::Lock), and the hasParkedBit value (2 for WTF::Lock). This could have been done as
1337         a templatized Lock class that basically contains Atomic<LockType>. You could then make
1338         any field into a lock by bitwise_casting it to TemplateLock<field type, bit1, bit2>. But
1339         this felt too dirty, so instead, LockAlgorithm has static methods that take
1340         Atomic<LockType>& as their first argument. I think that this makes it more natural to
1341         project a LockAlgorithm onto an existing Atomic<> field. Sadly, some places have to cast
1342         their non-Atomic<> field to Atomic<> in order for this to work. Like so many other things
1343         we do, this just shows that the C++ style of labeling fields that are subject to atomic
1344         ops as atomic is counterproductive. Maybe some day I'll change LockAlgorithm to use our
1345         other Atomics API, which does not require Atomic<>.
1346         
1347         WTF::Lock now uses LockAlgorithm. The slow paths are still outlined. I don't feel too
1348         bad about the LockAlgorithm.h header being included in so many places because we change
1349         that algorithm so infrequently.
1350         
1351         Also, I added a hasElapsed(time) function. This function makes it so much more natural
1352         to write timeslicing code, which the concurrent GC has to do a lot of.
1353
1354         * WTF.xcodeproj/project.pbxproj:
1355         * wtf/CMakeLists.txt:
1356         * wtf/ListDump.h:
1357         * wtf/Lock.cpp:
1358         (WTF::LockBase::lockSlow):
1359         (WTF::LockBase::unlockSlow):
1360         (WTF::LockBase::unlockFairlySlow):
1361         (WTF::LockBase::unlockSlowImpl): Deleted.
1362         * wtf/Lock.h:
1363         (WTF::LockBase::lock):
1364         (WTF::LockBase::tryLock):
1365         (WTF::LockBase::unlock):
1366         (WTF::LockBase::unlockFairly):
1367         (WTF::LockBase::isHeld):
1368         (): Deleted.
1369         * wtf/LockAlgorithm.h: Added.
1370         (WTF::LockAlgorithm::lockFastAssumingZero):
1371         (WTF::LockAlgorithm::lockFast):
1372         (WTF::LockAlgorithm::lock):
1373         (WTF::LockAlgorithm::tryLock):
1374         (WTF::LockAlgorithm::unlockFastAssumingZero):
1375         (WTF::LockAlgorithm::unlockFast):
1376         (WTF::LockAlgorithm::unlock):
1377         (WTF::LockAlgorithm::unlockFairly):
1378         (WTF::LockAlgorithm::isLocked):
1379         (WTF::LockAlgorithm::lockSlow):
1380         (WTF::LockAlgorithm::unlockSlow):
1381         * wtf/TimeWithDynamicClockType.cpp:
1382         (WTF::hasElapsed):
1383         * wtf/TimeWithDynamicClockType.h:
1384
1385 2016-11-14  JF Bastien  <jfbastien@apple.com>
1386
1387         Expected: add missing `inline`
1388         https://bugs.webkit.org/show_bug.cgi?id=164735
1389
1390         Reviewed by Yusuke Suzuki.
1391
1392         Free functions and full template specializations need to be
1393         `inline`, or in a .cpp file, otherwise each .o creates a duplicate
1394         symbol which makes the linker very sad.
1395
1396         * wtf/Expected.h:
1397         (WTF::ExpectedDetail::Throw):
1398         (WTF::makeExpected):
1399
1400 2016-11-14  Mark Lam  <mark.lam@apple.com>
1401
1402         Build fix after r208690.
1403         https://bugs.webkit.org/show_bug.cgi?id=164681
1404
1405         Not reviewed.
1406
1407         * wtf/FastMalloc.h:
1408
1409 2016-11-13  Mark Lam  <mark.lam@apple.com>
1410
1411         Add debugging facility to limit the max single allocation size.
1412         https://bugs.webkit.org/show_bug.cgi?id=164681
1413
1414         Reviewed by Keith Miller.
1415
1416         This is useful for simulating memory allocation failures on resource constraint
1417         devices for testing purposes.
1418
1419         This facility is only conditionally compiled in on debug builds.  It does not
1420         have any burden on release builds at all.  When in use, the max single allocation
1421         size limit applies to individual allocations.  For malloc (and similar), the
1422         allocation will crash in FastMalloc if the requested size exceeds the set max
1423         single allocation size.  For tryMalloc (and similar), the allocation returns
1424         nullptr if the requested size exceeds the set max single allocation size.  The
1425         max single allocation size is set to std::numeric_limit<size_t>::max() by default
1426         (i.e. when not set and no limit is in effect).
1427
1428         Also fixed non-bmalloc versions of fastAlignedMalloc() to crash when allocation
1429         fails.
1430
1431         * wtf/FastMalloc.cpp:
1432         (WTF::fastSetMaxSingleAllocationSize):
1433         (WTF::fastAlignedMalloc):
1434         (WTF::tryFastAlignedMalloc):
1435         (WTF::tryFastMalloc):
1436         (WTF::fastMalloc):
1437         (WTF::tryFastCalloc):
1438         (WTF::fastCalloc):
1439         (WTF::fastRealloc):
1440         * wtf/FastMalloc.h:
1441
1442 2016-11-13  JF Bastien  <jfbastien@apple.com>
1443
1444         Implement WTF::Expected
1445         https://bugs.webkit.org/show_bug.cgi?id=164526
1446
1447         Reviewed by Yusuke Suzuki.
1448
1449         std::expected isn't in C++17, and may be in C++20. It's a nice
1450         complement to std::any / std::optional because it's a type-tagged
1451         union which has a single expected result but could also contain an
1452         error.
1453
1454         This would be useful in the WebAssembly parser, for example.
1455
1456         Using this implementation will allow us to provide feedback to the
1457         standards committee and guide std::expected's design before it
1458         gets standardized. I've already sent a bunch of feedback to the
1459         author based on my experience implementing this.
1460
1461         This could supplement WTF::Either and WTF::ExceptionOr.
1462
1463         * WTF.xcodeproj/project.pbxproj:
1464         * wtf/Compiler.h: Add RELAXED_CONSTEXPR
1465         * wtf/Expected.h: Added.
1466         (WTF::UnexpectedType::UnexpectedType):
1467         (WTF::UnexpectedType::value):
1468         (WTF::operator==):
1469         (WTF::operator!=):
1470         (WTF::operator<):
1471         (WTF::operator>):
1472         (WTF::operator<=):
1473         (WTF::operator>=):
1474         (WTF::makeUnexpected):
1475         (WTF::ExpectedDetail::Throw):
1476         (WTF::ExpectedDetail::ConstexprBase::ConstexprBase):
1477         (WTF::ExpectedDetail::Base::Base):
1478         (WTF::ExpectedDetail::Base::~Base):
1479         (WTF::Expected::Expected):
1480         (WTF::Expected::operator=):
1481         (WTF::Expected::swap):
1482         (WTF::Expected::operator->):
1483         (WTF::Expected::operator*):
1484         (WTF::Expected::operator bool):
1485         (WTF::Expected::hasValue):
1486         (WTF::Expected::value):
1487         (WTF::Expected::error):
1488         (WTF::Expected::getUnexpected):
1489         (WTF::Expected::valueOr):
1490         (WTF::swap):
1491         (WTF::makeExpected):
1492         (WTF::makeExpectedFromError):
1493
1494 2016-11-11  Alex Christensen  <achristensen@webkit.org>
1495
1496         Allow mutable lambdas in HashMap::ensure
1497         https://bugs.webkit.org/show_bug.cgi?id=164642
1498
1499         Reviewed by Sam Weinig.
1500
1501         * wtf/HashMap.h:
1502         (WTF::HashMapEnsureTranslator::translate):
1503         (WTF::X>::removeIf):
1504
1505 2016-11-11  Beth Dakin  <bdakin@apple.com>
1506
1507         Get touch bar code building for open source builds
1508         https://bugs.webkit.org/show_bug.cgi?id=164610
1509
1510         Reviewed by Wenson Hsieh.
1511
1512         * wtf/Platform.h:
1513
1514 2016-11-10  JF Bastien  <jfbastien@apple.com>
1515
1516         ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
1517         https://bugs.webkit.org/show_bug.cgi?id=164597
1518
1519         Reviewed by Keith Miller.
1520
1521         Decoding at end of file should fail, not assert.
1522
1523         * wtf/LEBDecoder.h:
1524         (WTF::LEBDecoder::decodeUInt):
1525         (WTF::LEBDecoder::decodeInt32):
1526
1527 2016-11-10  Alex Christensen  <achristensen@webkit.org>
1528
1529         Remove unused CFURLCACHE code
1530         https://bugs.webkit.org/show_bug.cgi?id=164551
1531
1532         Reviewed by Antti Koivisto.
1533
1534         * wtf/Platform.h:
1535
1536 2016-11-09  Alex Christensen  <achristensen@webkit.org>
1537
1538         Allow RefPtrs of const ThreadSafeRefCounted types
1539         https://bugs.webkit.org/show_bug.cgi?id=164548
1540
1541         Reviewed by Tim Horton.
1542
1543         * wtf/ThreadSafeRefCounted.h:
1544         Make m_refCount mutable like we did with RefCounted in r203257.
1545
1546 2016-11-09  Chris Dumez  <cdumez@apple.com>
1547
1548         [Mac] Stop using deprecated AppKit enumeration values
1549         https://bugs.webkit.org/show_bug.cgi?id=164494
1550
1551         Reviewed by Darin Adler.
1552
1553         Stop using deprecated AppKit enumeration values.
1554
1555         * wtf/mac/AppKitCompatibilityDeclarations.h:
1556
1557 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
1558
1559         Fixed compilation of LLInt with MinGW
1560         https://bugs.webkit.org/show_bug.cgi?id=164449
1561
1562         Reviewed by Michael Catanzaro.
1563
1564         MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
1565         other platforms.
1566
1567         * wtf/InlineASM.h: Define LOCAL_LABEL_STRING as .L#name for MinGW.
1568
1569 2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>
1570
1571         [MinGW] Fixed C99/C++11 format attributes in printf-like functions
1572         https://bugs.webkit.org/show_bug.cgi?id=164448
1573
1574         Reviewed by Michael Catanzaro.
1575
1576         By default MinGW uses printf-like function provided in msvcrt.dll,
1577         however they miss support for C99/C++11 format attributes. Use MinGW
1578         implementations instead.
1579
1580         * wtf/Assertions.h: Use gnu_printf format in WTF_ATTRIBUTE_PRINTF
1581
1582 2016-11-05  Yusuke Suzuki  <utatane.tea@gmail.com>
1583
1584         [JSCOnly] RunLoopGeneric should adopt MonotonicTime / WallTime change
1585         https://bugs.webkit.org/show_bug.cgi?id=164447
1586
1587         Reviewed by Csaba Osztrogonác.
1588
1589         Build fix for JSCOnly.
1590
1591         * wtf/generic/RunLoopGeneric.cpp:
1592         (WTF::RunLoop::TimerBase::ScheduledTask::create):
1593         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
1594         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
1595         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
1596         (WTF::RunLoop::populateTasks):
1597         (WTF::RunLoop::dispatchAfter):
1598         (WTF::RunLoop::TimerBase::start):
1599
1600 2016-11-04  Filip Pizlo  <fpizlo@apple.com>
1601
1602         WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
1603         https://bugs.webkit.org/show_bug.cgi?id=152045
1604
1605         Reviewed by Andy Estes.
1606         
1607         We used to use 'double' for all time measurements. Sometimes it was milliseconds,
1608         sometimes it was seconds. Sometimes we measured a span of time, sometimes we spoke of time
1609         since some epoch. When we spoke of time since epoch, we either used a monotonic clock or
1610         a wall clock. The type - always 'double' - never told us what kind of time we had, even
1611         though there were roughly six of them (sec interval, ms interval, sec since epoch on wall,
1612         ms since epoch on wall, sec since epoch monotonic, ms since epoch monotonic).
1613         
1614         At some point, we thought that it would be a good idea to replace these doubles with
1615         std::chrono. But since replacing some things with std::chrono, we found it to be terribly
1616         inconvenient:
1617         
1618         - Outrageous API. I never want to say std::chrono::milliseconds(blah). I never want to say
1619           std::chrono::steady_clock::timepoint. The syntax for duration_cast is ugly, and ideally
1620           duration_cast would not even be a thing.
1621         
1622         - No overflow protection. std::chrono uses integers by default and using anything else is
1623           clumsy. But the integer math is done without regard for the rough edges of integer math,
1624           so any cast between std::chrono types risks overflow. Any comparison risks overflow
1625           because it may do conversions silently. We have even found bugs where some C++
1626           implementations had more overflows than others, which ends up being a special kind of
1627           hell. In many cases, the overflow also has nasal demons.
1628         
1629         It's an error to represent time using integers. It would have been excusable back when
1630         floating point math was not guaranteed to be supported on all platforms, but that would
1631         have been a long time ago. Time is a continuous, infinite concept and it's a perfect fit
1632         for floating point:
1633         
1634         - Floating point preserves precision under multiplication in all but extreme cases, so
1635           using floating point for time means that unit conversions are almost completely
1636           lossless. This means that we don't have to think very hard about what units to use. In
1637           this patch, we use seconds almost everywhere. We only convert at boundaries, like an API
1638           boundary that wants something other than seconds.
1639         
1640         - Floating point makes it easy to reason about infinity, which is something that time code
1641           wants to do a lot. Example: when would you like to timeout? Infinity please! This is the
1642           most elegant way of having an API support both a timeout variant and a no-timeout
1643           variant.
1644
1645         - Floating point does well-understood things when math goes wrong, and these things are
1646           pretty well optimized to match what a mathematician would do when computing with real
1647           numbers represented using scientific notation with a finite number of significant
1648           digits. This means that time math under floating point looks like normal math. On the
1649           other hand, std::chrono time math looks like garbage because you have to always check
1650           for multiple possible UB corners whenever you touch large integers. Integers that
1651           represent time are very likely to be large and you don't have to do much to overflow
1652           them. At this time, based on the number of bugs we have already seen due to chrono
1653           overflows, I am not certain that we even understand what are all of the corner cases
1654           that we should even check for.
1655         
1656         This patch introduces a new set of timekeeping classes that are all based on double, and
1657         all internally use seconds. These classes support algebraic typing. The classes are:
1658         
1659         - Seconds: this is for measuring a duration.
1660         - WallTime: time since epoch according to a wall clock (aka real time clock).
1661         - MonotonicTime: time since epoch according to a monotonic clock.
1662         - ClockType: enum that says either Wall or Monotonic.
1663         - TimeWithDynamicClockType: a tuple of double and ClockType, which represents either a
1664           wall time or a monotonic time.
1665         
1666         All of these classes behave like C++ values and are cheap to copy around since they are
1667         very nearly POD. This supports comprehensive conversions between the various time types.
1668         Most of this is by way of algebra. Here are just some of the rules we recognize:
1669         
1670         WallTime = WallTime + Seconds
1671         Seconds = WallTime - WallTime
1672         MonotonicTime = MonotonicTime + Seconds
1673         etc...
1674         
1675         We support negative, infinite, and NaN times because math.
1676         
1677         We support conversions between MonotonicTime and WallTime, like:
1678         
1679         WallTime wt = mt.approximateWallTime()
1680         
1681         This is called this "approximate" because the only way to do it is to get the current time
1682         on both clocks and convert relative to that.
1683         
1684         Many of our APIs would be happy using whatever notion of time the user wanted to use. For
1685         those APIs, which includes Condition and ParkingLot, we have TimeWithDynamicClockType. You
1686         can automatically convert WallTime or MonotonicTime to TimeWithDynamicClockType. This
1687         means that if you use a WallTime with Condition::waitUntil, then Condition's internal
1688         logic for when it should wake up makes its decision based on the current WallTime - but if
1689         you use MonotonicTime then waitUntil will make its decision based on current
1690         MonotonicTime. This is a greater level of flexibility than chrono allowed, since chrono
1691         did not have the concept of a dynamic clock type.
1692         
1693         This patch does not include conversions between std::chrono and these new time classes,
1694         because past experience shows that we're quite bad at getting conversions between
1695         std::chrono and anything else right. Also, I didn't need such conversion code because this
1696         patch only converts code that transitively touches ParkingLot and Condition. It was easy
1697         to get all of that code onto the new time classes.
1698
1699         * WTF.xcodeproj/project.pbxproj:
1700         * wtf/AutomaticThread.cpp:
1701         (WTF::AutomaticThread::start):
1702         * wtf/CMakeLists.txt:
1703         * wtf/ClockType.cpp: Added.
1704         (WTF::printInternal):
1705         * wtf/ClockType.h: Added.
1706         * wtf/Condition.h:
1707         (WTF::ConditionBase::waitUntil):
1708         (WTF::ConditionBase::waitFor):
1709         (WTF::ConditionBase::wait):
1710         (WTF::ConditionBase::waitUntilWallClockSeconds): Deleted.
1711         (WTF::ConditionBase::waitUntilMonotonicClockSeconds): Deleted.
1712         (WTF::ConditionBase::waitForSeconds): Deleted.
1713         (WTF::ConditionBase::waitForSecondsImpl): Deleted.
1714         (WTF::ConditionBase::waitForImpl): Deleted.
1715         (WTF::ConditionBase::absoluteFromRelative): Deleted.
1716         * wtf/CrossThreadQueue.h:
1717         (WTF::CrossThreadQueue<DataType>::waitForMessage):
1718         * wtf/CurrentTime.cpp:
1719         (WTF::sleep):
1720         * wtf/MessageQueue.h:
1721         (WTF::MessageQueue::infiniteTime): Deleted.
1722         * wtf/MonotonicTime.cpp: Added.
1723         (WTF::MonotonicTime::now):
1724         (WTF::MonotonicTime::approximateWallTime):
1725         (WTF::MonotonicTime::dump):
1726         (WTF::MonotonicTime::sleep):
1727         * wtf/MonotonicTime.h: Added.
1728         (WTF::MonotonicTime::MonotonicTime):
1729         (WTF::MonotonicTime::fromRawDouble):
1730         (WTF::MonotonicTime::infinity):
1731         (WTF::MonotonicTime::secondsSinceEpoch):
1732         (WTF::MonotonicTime::approximateMonotonicTime):
1733         (WTF::MonotonicTime::operator bool):
1734         (WTF::MonotonicTime::operator+):
1735         (WTF::MonotonicTime::operator-):
1736         (WTF::MonotonicTime::operator+=):
1737         (WTF::MonotonicTime::operator-=):
1738         (WTF::MonotonicTime::operator==):
1739         (WTF::MonotonicTime::operator!=):
1740         (WTF::MonotonicTime::operator<):
1741         (WTF::MonotonicTime::operator>):
1742         (WTF::MonotonicTime::operator<=):
1743         (WTF::MonotonicTime::operator>=):
1744         * wtf/ParkingLot.cpp:
1745         (WTF::ParkingLot::parkConditionallyImpl):
1746         (WTF::ParkingLot::unparkOne):
1747         (WTF::ParkingLot::unparkOneImpl):
1748         (WTF::ParkingLot::unparkCount):
1749         * wtf/ParkingLot.h:
1750         (WTF::ParkingLot::parkConditionally):
1751         (WTF::ParkingLot::compareAndPark):
1752         * wtf/Seconds.cpp: Added.
1753         (WTF::Seconds::operator+):
1754         (WTF::Seconds::operator-):
1755         (WTF::Seconds::dump):
1756         (WTF::Seconds::sleep):
1757         * wtf/Seconds.h: Added.
1758         (WTF::Seconds::Seconds):
1759         (WTF::Seconds::value):
1760         (WTF::Seconds::seconds):
1761         (WTF::Seconds::milliseconds):
1762         (WTF::Seconds::microseconds):
1763         (WTF::Seconds::nanoseconds):
1764         (WTF::Seconds::fromMilliseconds):
1765         (WTF::Seconds::fromMicroseconds):
1766         (WTF::Seconds::fromNanoseconds):
1767         (WTF::Seconds::infinity):
1768         (WTF::Seconds::operator bool):
1769         (WTF::Seconds::operator+):
1770         (WTF::Seconds::operator-):
1771         (WTF::Seconds::operator*):
1772         (WTF::Seconds::operator/):
1773         (WTF::Seconds::operator+=):
1774         (WTF::Seconds::operator-=):
1775         (WTF::Seconds::operator*=):
1776         (WTF::Seconds::operator/=):
1777         (WTF::Seconds::operator==):
1778         (WTF::Seconds::operator!=):
1779         (WTF::Seconds::operator<):
1780         (WTF::Seconds::operator>):
1781         (WTF::Seconds::operator<=):
1782         (WTF::Seconds::operator>=):
1783         * wtf/TimeWithDynamicClockType.cpp: Added.
1784         (WTF::TimeWithDynamicClockType::now):
1785         (WTF::TimeWithDynamicClockType::nowWithSameClock):
1786         (WTF::TimeWithDynamicClockType::wallTime):
1787         (WTF::TimeWithDynamicClockType::monotonicTime):
1788         (WTF::TimeWithDynamicClockType::approximateWallTime):
1789         (WTF::TimeWithDynamicClockType::approximateMonotonicTime):
1790         (WTF::TimeWithDynamicClockType::operator-):
1791         (WTF::TimeWithDynamicClockType::operator<):
1792         (WTF::TimeWithDynamicClockType::operator>):
1793         (WTF::TimeWithDynamicClockType::operator<=):
1794         (WTF::TimeWithDynamicClockType::operator>=):
1795         (WTF::TimeWithDynamicClockType::dump):
1796         (WTF::TimeWithDynamicClockType::sleep):
1797         * wtf/TimeWithDynamicClockType.h: Added.
1798         (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType):
1799         (WTF::TimeWithDynamicClockType::fromRawDouble):
1800         (WTF::TimeWithDynamicClockType::secondsSinceEpoch):
1801         (WTF::TimeWithDynamicClockType::clockType):
1802         (WTF::TimeWithDynamicClockType::withSameClockAndRawDouble):
1803         (WTF::TimeWithDynamicClockType::operator bool):
1804         (WTF::TimeWithDynamicClockType::operator+):
1805         (WTF::TimeWithDynamicClockType::operator-):
1806         (WTF::TimeWithDynamicClockType::operator+=):
1807         (WTF::TimeWithDynamicClockType::operator-=):
1808         (WTF::TimeWithDynamicClockType::operator==):
1809         (WTF::TimeWithDynamicClockType::operator!=):
1810         * wtf/WallTime.cpp: Added.
1811         (WTF::WallTime::now):
1812         (WTF::WallTime::approximateMonotonicTime):
1813         (WTF::WallTime::dump):
1814         (WTF::WallTime::sleep):
1815         * wtf/WallTime.h: Added.
1816         (WTF::WallTime::WallTime):
1817         (WTF::WallTime::fromRawDouble):
1818         (WTF::WallTime::infinity):
1819         (WTF::WallTime::secondsSinceEpoch):
1820         (WTF::WallTime::approximateWallTime):
1821         (WTF::WallTime::operator bool):
1822         (WTF::WallTime::operator+):
1823         (WTF::WallTime::operator-):
1824         (WTF::WallTime::operator+=):
1825         (WTF::WallTime::operator-=):
1826         (WTF::WallTime::operator==):
1827         (WTF::WallTime::operator!=):
1828         (WTF::WallTime::operator<):
1829         (WTF::WallTime::operator>):
1830         (WTF::WallTime::operator<=):
1831         (WTF::WallTime::operator>=):
1832         * wtf/threads/BinarySemaphore.cpp:
1833         (WTF::BinarySemaphore::wait):
1834         * wtf/threads/BinarySemaphore.h:
1835
1836 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
1837
1838         DFG plays fast and loose with the shadow values of a Phi
1839         https://bugs.webkit.org/show_bug.cgi?id=164309
1840
1841         Reviewed by Saam Barati.
1842         
1843         Made this API use size rather than maxIndex as its initialization parameter, because that's
1844         less confusing.
1845
1846         * wtf/IndexSparseSet.h:
1847         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
1848
1849 2016-11-03  Commit Queue  <commit-queue@webkit.org>
1850
1851         Unreviewed, rolling out r208364.
1852         https://bugs.webkit.org/show_bug.cgi?id=164402
1853
1854         broke the build (Requested by smfr on #webkit).
1855
1856         Reverted changeset:
1857
1858         "DFG plays fast and loose with the shadow values of a Phi"
1859         https://bugs.webkit.org/show_bug.cgi?id=164309
1860         http://trac.webkit.org/changeset/208364
1861
1862 2016-11-03  Filip Pizlo  <fpizlo@apple.com>
1863
1864         DFG plays fast and loose with the shadow values of a Phi
1865         https://bugs.webkit.org/show_bug.cgi?id=164309
1866
1867         Reviewed by Saam Barati.
1868         
1869         Made this API use size rather than maxIndex as its initialization parameter, because that's
1870         less confusing.
1871
1872         * wtf/IndexSparseSet.h:
1873         (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):
1874
1875 2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>
1876
1877         Fixes to build JSCOnly on macOS
1878         https://bugs.webkit.org/show_bug.cgi?id=164379
1879
1880         Reviewed by Michael Catanzaro.
1881
1882         * wtf/Platform.h: JSCOnly port should not provide any PLATFORM() macro
1883
1884 2016-11-03  Brady Eidson  <beidson@apple.com>
1885
1886         IndexedDB 2.0: Support binary keys.
1887         <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359
1888
1889         Reviewed by Alex Christensen.
1890
1891         * wtf/Hasher.h:
1892         (WTF::StringHasher::hashMemory): Teach hashMemory() to handle buffers with odd lengths.
1893
1894 2016-11-02  Filip Pizlo  <fpizlo@apple.com>
1895
1896         The GC should be in a thread
1897         https://bugs.webkit.org/show_bug.cgi?id=163562
1898
1899         Reviewed by Geoffrey Garen and Andreas Kling.
1900         
1901         This fixes some bugs and adds a few features.
1902
1903         * 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.
1904         (WTF::arm_isb):
1905         (WTF::crossModifyingCodeFence):
1906         (WTF::x86_ortop):
1907         (WTF::x86_cpuid):
1908         * wtf/AutomaticThread.cpp: I accidentally had AutomaticThreadCondition inherit from ThreadSafeRefCounted<AutomaticThread> [sic]. This never crashed before because all of our prior AutomaticThreadConditions were immortal.
1909         (WTF::AutomaticThread::AutomaticThread):
1910         (WTF::AutomaticThread::~AutomaticThread):
1911         (WTF::AutomaticThread::start):
1912         * wtf/AutomaticThread.h:
1913         * wtf/MainThread.cpp: Need to allow initializeGCThreads() to be called separately because it's now more than just a debugging thing.
1914         (WTF::initializeGCThreads):
1915
1916 2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>
1917
1918         Clean wrong comment about compositing on the UI process.
1919         https://bugs.webkit.org/show_bug.cgi?id=164339
1920
1921         Reviewed by Michael Catanzaro.
1922
1923         * wtf/Platform.h: The comment about compositing on the UI process
1924         was added on r109302 but was not removed properly when the Qt port
1925         was removed from trunk.
1926         USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.
1927
1928 2016-11-02  Alex Christensen  <achristensen@webkit.org>
1929
1930         Remove Battery Status API from the tree
1931         https://bugs.webkit.org/show_bug.cgi?id=164213
1932
1933         Reviewed by Sam Weinig.
1934
1935         * wtf/FeatureDefines.h:
1936
1937 2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>
1938
1939         [Readable Streams API] Enable creation of ReadableByteStreamController
1940         https://bugs.webkit.org/show_bug.cgi?id=164014
1941
1942         Reviewed by Youenn Fablet.
1943
1944         Added flag for the byte stream part of Readable Streams API.
1945
1946         * wtf/FeatureDefines.h:
1947
1948 2016-11-02  Per Arne Vollan  <pvollan@apple.com>
1949
1950         [Win] Copy build results to AAS 'Program Files' folder.
1951         https://bugs.webkit.org/show_bug.cgi?id=164273
1952
1953         Reviewed by Brent Fulgham.
1954
1955         The preferred location for the binaries is the AAS 'Program Files' folder.
1956
1957         * WTF.vcxproj/WTF.proj:
1958
1959 2016-10-29  Filip Pizlo  <fpizlo@apple.com>
1960
1961         JSC should support SharedArrayBuffer
1962         https://bugs.webkit.org/show_bug.cgi?id=163986
1963
1964         Reviewed by Keith Miller.
1965         
1966         Adds some small things we need for SharedArrayBuffer.
1967         
1968         * wtf/Atomics.h:
1969         (WTF::Atomic::compareExchangeWeakRelaxed):
1970         (WTF::Atomic::exchangeAdd):
1971         (WTF::Atomic::exchangeAnd):
1972         (WTF::Atomic::exchangeOr):
1973         (WTF::Atomic::exchangeSub):
1974         (WTF::Atomic::exchangeXor):
1975         (WTF::atomicLoad):
1976         (WTF::atomicStore):
1977         (WTF::atomicCompareExchangeWeak):
1978         (WTF::atomicCompareExchangeWeakRelaxed):
1979         (WTF::atomicCompareExchangeStrong):
1980         (WTF::atomicExchangeAdd):
1981         (WTF::atomicExchangeAnd):
1982         (WTF::atomicExchangeOr):
1983         (WTF::atomicExchangeSub):
1984         (WTF::atomicExchangeXor):
1985         (WTF::atomicExchange):
1986         (WTF::Atomic::exchangeAndAdd): Deleted.
1987         (WTF::weakCompareAndSwap): Deleted.
1988         We need to be able to do atomics operations on naked pointers. We also need to be able to do
1989         all of the things that std::atomic does. This adds those things and renames
1990         weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
1991         terminology.
1992         
1993         * wtf/Bitmap.h:
1994         (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
1995         (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
1996         * wtf/FastBitVector.h:
1997         (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
1998         * wtf/ParkingLot.cpp:
1999         (WTF::ParkingLot::unparkOne):
2000         (WTF::ParkingLot::unparkCount):
2001         * wtf/ParkingLot.h:
2002         Added unparkCount(), which lets you unpark some bounded number of threads and returns the
2003         number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
2004         just calls unparkCount(ptr, UINT_MAX).
2005
2006 2016-10-30  Frederic Wang  <fwang@igalia.com>
2007
2008         Use HarfBuzz ot-math API to parse the OpenType MATH table
2009         https://bugs.webkit.org/show_bug.cgi?id=162671
2010
2011         Reviewed by Michael Catanzaro.
2012
2013         * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.
2014
2015 2016-10-25  Mark Lam  <mark.lam@apple.com>
2016
2017         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
2018         https://bugs.webkit.org/show_bug.cgi?id=163996
2019         <rdar://problem/28263117>
2020
2021         Reviewed by Geoffrey Garen.
2022
2023         * wtf/Vector.h:
2024         (WTF::minCapacity>::tryConstructAndAppend):
2025         (WTF::minCapacity>::tryConstructAndAppendSlowCase):
2026         - Added try versions of constructAndAppend() so that we can handle the failure
2027           to allocate more gracefully.
2028
2029 2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>
2030
2031         Non-specialized version of deleteObject should not have template argument
2032         https://bugs.webkit.org/show_bug.cgi?id=163943
2033
2034         Reviewed by Anders Carlsson.
2035
2036         Fixes compilation of GDIObject.h with MinGW
2037
2038         * wtf/win/GDIObject.h:
2039         (WTF::deleteObject):
2040
2041 2016-10-24  Per Arne Vollan  <pvollan@apple.com>
2042
2043         [Win] CMake build type is not set.
2044         https://bugs.webkit.org/show_bug.cgi?id=163917
2045
2046         Reviewed by Alex Christensen.
2047
2048         The CMAKE_BUILD_TYPE variable should be set to Debug or Release.
2049
2050         * WTF.vcxproj/WTF.proj:
2051
2052 2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>
2053
2054         [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
2055         https://bugs.webkit.org/show_bug.cgi?id=163657
2056
2057         Reviewed by Saam Barati.
2058
2059         Simplify nonEmptyRangesOverlap.
2060
2061         * wtf/MathExtras.h:
2062         (WTF::nonEmptyRangesOverlap):
2063
2064 2016-10-23  Chris Dumez  <cdumez@apple.com>
2065
2066         Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
2067         <rdar://problem/28902292>
2068
2069         Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.
2070
2071         * wtf/Platform.h:
2072
2073 2016-10-20  Keith Miller  <keith_miller@apple.com>
2074
2075         Add support for WASM calls
2076         https://bugs.webkit.org/show_bug.cgi?id=161727
2077
2078         Reviewed by Filip Pizlo and Michael Saboff.
2079
2080         Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.
2081
2082         * wtf/LEBDecoder.h:
2083         (WTF::LEBDecoder::decodeUInt):
2084         (WTF::LEBDecoder::decodeUInt32):
2085         (WTF::LEBDecoder::decodeUInt64):
2086         (WTF::LEBDecoder::decodeInt32):
2087         (decodeUInt32): Deleted.
2088         (decodeInt32): Deleted.
2089
2090 2016-10-20  Filip Pizlo  <fpizlo@apple.com>
2091
2092         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
2093         https://bugs.webkit.org/show_bug.cgi?id=163738
2094
2095         Reviewed by Geoffrey Garen.
2096         
2097         There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
2098         should know about this.
2099
2100         * wtf/MainThread.cpp:
2101         (WTF::initializeGCThreads):
2102         (WTF::registerGCThread):
2103         (WTF::mayBeGCThread):
2104         * wtf/MainThread.h:
2105
2106 2016-10-19  Sam Weinig  <sam@webkit.org>
2107
2108         Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
2109         https://bugs.webkit.org/show_bug.cgi?id=163713
2110
2111         Reviewed by Dan Bernstein.
2112
2113         - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
2114           way:
2115                 WTF::visit(WTF::makeVisitor(...), variant)
2116
2117         * wtf/Variant.h:
2118         (WTF::switchOn):
2119
2120 2016-10-19  Alex Christensen  <achristensen@webkit.org>
2121
2122         Revert r207151
2123         https://bugs.webkit.org/show_bug.cgi?id=163675
2124
2125         Reviewed by Brent Fulgham.
2126
2127         * wtf/Platform.h:
2128         * wtf/SchedulePair.h:
2129         * wtf/SchedulePairMac.mm:
2130
2131 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
2132
2133         REGRESSION (r207480): 3 Dromaeo tests failing
2134         https://bugs.webkit.org/show_bug.cgi?id=163633
2135
2136         Reviewed by Mark Lam.
2137         
2138         It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
2139         thread will clear our address eventually - but not immediately. This causes a nasty
2140         assertion failure. The tricky thing is that when we detect this, we need to wait until that
2141         unparking thread does the deed. Otherwise, they will still do it at some later time.
2142         
2143         Alternatively, we could use some kind of versioning to detect this - increment the version
2144         when you park, so that unparking threads will know if they are time travelers. That seems
2145         more yucky.
2146         
2147         I don't think it matters too much what we do here, so long as it's simple and correct, since
2148         this requires a race that is rare enough that it didn't happen once in my testing, and I was
2149         pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
2150         rare because it requires the timeout to happen right as someone else is unparking. Since
2151         it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
2152         unparking thread is done.
2153
2154         * wtf/ParkingLot.cpp:
2155         (WTF::ParkingLot::parkConditionallyImpl):
2156         (WTF::ParkingLot::unparkOneImpl):
2157
2158 2016-10-19  Filip Pizlo  <fpizlo@apple.com>
2159
2160         Baseline JIT should use AutomaticThread
2161         https://bugs.webkit.org/show_bug.cgi?id=163686
2162
2163         Reviewed by Geoffrey Garen.
2164         
2165         Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
2166         common condition for your thread and something else, you can do it. This trivially works
2167         if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
2168         dangerous, since you don't know who will wake up).
2169         
2170         The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
2171         optimal way: there are just two threads talking to each other, so it wakes up at most one
2172         thread and that thread is exactly the one you want woken up. Adding wait() means that I did
2173         not have to change that code.
2174
2175         * wtf/AutomaticThread.cpp:
2176         (WTF::AutomaticThreadCondition::wait):
2177         * wtf/AutomaticThread.h:
2178
2179 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
2180
2181         DFG worklist should use AutomaticThread
2182         https://bugs.webkit.org/show_bug.cgi?id=163615
2183
2184         Reviewed by Mark Lam.
2185         
2186         This adds new functionality to AutomaticThread to support DFG::Worklist:
2187         
2188         - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
2189           of a thread's lifetime. This allows Worklist to tie some resources to the life of the
2190           thread, and also means that now those resources will naturally free up when the Worklist is
2191           not in use.
2192         
2193         - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
2194           need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
2195           our threads.
2196
2197         * wtf/AutomaticThread.cpp:
2198         (WTF::AutomaticThreadCondition::notifyOne):
2199         (WTF::AutomaticThread::ThreadScope::ThreadScope):
2200         (WTF::AutomaticThread::ThreadScope::~ThreadScope):
2201         (WTF::AutomaticThread::start):
2202         (WTF::AutomaticThread::threadDidStart):
2203         (WTF::AutomaticThread::threadWillStop):
2204         * wtf/AutomaticThread.h:
2205         * wtf/Condition.h:
2206         (WTF::ConditionBase::notifyOne):
2207
2208 2016-10-18  Sam Weinig  <sam@webkit.org>
2209
2210         Replace std::experimental::variant with WTF::Variant (or similar)
2211         https://bugs.webkit.org/show_bug.cgi?id=163626
2212
2213         Reviewed by Chris Dumez.
2214
2215         Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
2216         into the WTF namespace.
2217
2218         * wtf/Forward.h:
2219         * wtf/Variant.h:
2220
2221 2016-10-18  Filip Pizlo  <fpizlo@apple.com>
2222
2223         WTF should make it easier to create threads that die automatically after inactivity
2224         https://bugs.webkit.org/show_bug.cgi?id=163576
2225
2226         Reviewed by Andreas Kling.
2227         
2228         For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
2229         guilty because those threads don't shut down when they are inactive. For example, in bug
2230         163562, I need to add a new GC thread. There will be one of them per VM. This means that a
2231         JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
2232         good.
2233         
2234         A common pattern for all of these threads is that they have some well-defined trigger that
2235         causes them to run. This trigger has a lock, a condition variable, some logic that determines
2236         if there is work to do, and then of course the logic for the thread's actual work. The thread
2237         bodies usually look like this:
2238         
2239         void Thingy::runThread()
2240         {
2241             for (;;) {
2242                 Work work;
2243                 {
2244                     LockHolder locker(m_lock);
2245                     while (!hasWork())
2246                         m_cond.wait(m_lock);
2247                     work = takeWork();
2248                 }
2249                 doWork(work);
2250             }
2251         }
2252         
2253         If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's
2254         threads), you will see this pattern.
2255         
2256         This change adds a new kind of thread, called AutomaticThread, that lets you write threads to
2257         this pattern while getting automatic thread shutdown for free: instead of just waiting on a
2258         condition variable, AutomaticThread will have a timeout that causes the thread to die. The
2259         condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart
2260         enough to restart any threads that have decided to stop due to inactivity. The inactivity
2261         threshold is current just 1 second.
2262         
2263         In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more
2264         places soon.
2265
2266         * WTF.xcodeproj/project.pbxproj:
2267         * wtf/AutomaticThread.cpp: Added.
2268         (WTF::AutomaticThreadCondition::create):
2269         (WTF::AutomaticThreadCondition::AutomaticThreadCondition):
2270         (WTF::AutomaticThreadCondition::~AutomaticThreadCondition):
2271         (WTF::AutomaticThreadCondition::notifyAll):
2272         (WTF::AutomaticThreadCondition::add):
2273         (WTF::AutomaticThreadCondition::remove):
2274         (WTF::AutomaticThreadCondition::contains):
2275         (WTF::AutomaticThread::AutomaticThread):
2276         (WTF::AutomaticThread::~AutomaticThread):
2277         (WTF::AutomaticThread::join):
2278         (WTF::AutomaticThread::start):
2279         * wtf/AutomaticThread.h: Added.
2280         * wtf/CMakeLists.txt:
2281         * wtf/ParallelHelperPool.cpp:
2282         (WTF::ParallelHelperClient::ParallelHelperClient):
2283         (WTF::ParallelHelperClient::~ParallelHelperClient):
2284         (WTF::ParallelHelperClient::setTask):
2285         (WTF::ParallelHelperClient::finish):
2286         (WTF::ParallelHelperClient::doSomeHelping):
2287         (WTF::ParallelHelperClient::runTask):
2288         (WTF::ParallelHelperPool::ParallelHelperPool):
2289         (WTF::ParallelHelperPool::~ParallelHelperPool):
2290         (WTF::ParallelHelperPool::ensureThreads):
2291         (WTF::ParallelHelperPool::doSomeHelping):
2292         (WTF::ParallelHelperPool::Thread::Thread):
2293         (WTF::ParallelHelperPool::didMakeWorkAvailable):
2294         (WTF::ParallelHelperPool::helperThreadBody): Deleted.
2295         (WTF::ParallelHelperPool::waitForClientWithTask): Deleted.
2296         * wtf/ParallelHelperPool.h:
2297
2298 2016-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>
2299
2300         SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
2301         https://bugs.webkit.org/show_bug.cgi?id=116470
2302
2303         Reviewed by Simon Fraser.
2304
2305         * wtf/TemporaryChange.h:
2306         (WTF::TemporaryChange::TemporaryChange):
2307         Add a new constructor to make TemporaryChange work as a restorer. The
2308         temporary change will happen after we construct the object.
2309
2310 2016-10-17  Simon Fraser  <simon.fraser@apple.com>
2311
2312         Implement DOMRect/DOMRectReadOnly
2313         https://bugs.webkit.org/show_bug.cgi?id=163464
2314
2315         Reviewed by Darin Adler.
2316         
2317         Implement min()/max() in a way that follows Math.min/Math.max, which return
2318         NaN if either argument is NaN.
2319
2320         * wtf/MathExtras.h:
2321         (WTF::nanPropagatingMin):
2322         (WTF::nanPropagatingMax):
2323
2324 2016-10-15  Sam Weinig  <sam@webkit.org>
2325
2326         MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
2327         https://bugs.webkit.org/show_bug.cgi?id=163475
2328
2329         Reviewed by Simon Fraser.
2330
2331         * wtf/Variant.h:
2332         Add missing return statement that was tripping up some compilers.
2333
2334 2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>
2335
2336         Unreviewed, rolling out r207225.
2337
2338         This change causes debug tests to exit early with crashes.
2339
2340         Reverted changeset:
2341
2342         "Optional's move-constructor and move-assignment operator
2343         don't disengage the value being moved from"
2344         https://bugs.webkit.org/show_bug.cgi?id=163309
2345         http://trac.webkit.org/changeset/207225
2346
2347 2016-10-11  Sam Weinig  <sam@webkit.org>
2348
2349         Optional's move-constructor and move-assignment operator don't disengage the value being moved from
2350         https://bugs.webkit.org/show_bug.cgi?id=163309
2351
2352         Reviewed by Anders Carlsson.
2353
2354         * wtf/Optional.h:
2355         (WTF::Optional::Optional):
2356         (WTF::Optional::operator=):
2357         Disengage 'other' on move-construction and move-assignment.
2358
2359 2016-10-08  Filip Pizlo  <fpizlo@apple.com>
2360
2361         MarkedBlock should know what objects are live during marking
2362         https://bugs.webkit.org/show_bug.cgi?id=162309
2363
2364         Reviewed by Geoffrey Garen.
2365         
2366         This removes the atomicity mode, because it's not really used: it only affects the
2367         concurrentBlah methods, but their only users turn on atomicity. This was useful because
2368         previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used
2369         effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't.
2370         Removing this useless mode is the best solution.
2371         
2372         Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and
2373         setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set,
2374         respectively) while also clearing the contents of 'other'. This is great for one of the GC
2375         hot paths.
2376
2377         * wtf/Bitmap.h:
2378         (WTF::WordType>::Bitmap):
2379         (WTF::WordType>::get):
2380         (WTF::WordType>::set):
2381         (WTF::WordType>::testAndSet):
2382         (WTF::WordType>::testAndClear):
2383         (WTF::WordType>::concurrentTestAndSet):
2384         (WTF::WordType>::concurrentTestAndClear):
2385         (WTF::WordType>::clear):
2386         (WTF::WordType>::clearAll):
2387         (WTF::WordType>::nextPossiblyUnset):
2388         (WTF::WordType>::findRunOfZeros):
2389         (WTF::WordType>::count):
2390         (WTF::WordType>::isEmpty):
2391         (WTF::WordType>::isFull):
2392         (WTF::WordType>::merge):
2393         (WTF::WordType>::filter):
2394         (WTF::WordType>::exclude):
2395         (WTF::WordType>::forEachSetBit):
2396         (WTF::WordType>::mergeAndClear):
2397         (WTF::WordType>::setAndClear):
2398         (WTF::=):
2399         (WTF::WordType>::hash):
2400
2401 2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>
2402
2403         Add SynchronizedFixedQueue class
2404         https://bugs.webkit.org/show_bug.cgi?id=162478
2405
2406         Reviewed by Geoffrey Garen.
2407
2408         This class represents a simple producer/consumer worker. It facilitates
2409         synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses
2410         a single lock and a single condition to synchronize all its members among
2411         the working threads. This means a single thread is active at any time and
2412         and the other threads are blocked waiting for the lock to be released. Or
2413         they are sleeping waiting for the condition to be satisfied.
2414
2415         * WTF.xcodeproj/project.pbxproj:
2416         * wtf/SynchronizedFixedQueue.h: Added.
2417         (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):
2418         (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state.
2419         (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state.
2420         (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items?
2421         (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue.
2422         (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue.
2423
2424 2016-10-11  Alex Christensen  <achristensen@webkit.org>
2425
2426         Remove dead networking code
2427         https://bugs.webkit.org/show_bug.cgi?id=163263
2428
2429         Reviewed by Daniel Bates.
2430
2431         * wtf/Platform.h:
2432         * wtf/SchedulePair.h:
2433         * wtf/SchedulePairMac.mm:
2434
2435 2016-10-10  Zan Dobersek  <zdobersek@igalia.com>
2436
2437         Add ENABLE_ENCRYPTED_MEDIA configuration option
2438         https://bugs.webkit.org/show_bug.cgi?id=163219
2439
2440         Reviewed by Darin Adler.
2441
2442         * wtf/FeatureDefines.h:
2443         If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0.
2444
2445 2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>
2446
2447         [DOMJIT] Implement Node accessors in DOMJIT
2448         https://bugs.webkit.org/show_bug.cgi?id=163005
2449
2450         Reviewed by Filip Pizlo.
2451
2452         Add CAST_OFFSET. It is not necessary for JSCell thingy
2453         since we don't use virtual member functions. However, it
2454         is not true for WebCore DOM wrapped objects.
2455
2456         * wtf/StdLibExtras.h:
2457
2458 2016-10-07  Chris Dumez  <cdumez@apple.com>
2459
2460         window.navigator.language incorrectly returns all lowercase string
2461         https://bugs.webkit.org/show_bug.cgi?id=163096
2462
2463         Reviewed by Darin Adler.
2464
2465         Update platformUserPreferredLanguages() so that it no longer lowercases
2466         the string it returns. On Mac, we rely on CFLocale which returns
2467         BCP-47 language tags as per:
2468         - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc
2469
2470         * wtf/PlatformUserPreferredLanguagesMac.mm:
2471         (WTF::httpStyleLanguageCode):
2472         * wtf/PlatformUserPreferredLanguagesUnix.cpp:
2473         (WTF::platformLanguage):
2474
2475 2016-10-06  Brent Fulgham  <bfulgham@apple.com>
2476
2477         [Win][Direct2D] Add Direct2D CMake rules
2478         https://bugs.webkit.org/show_bug.cgi?id=162925
2479
2480         Reviewed by Brent Fulgham.
2481
2482         * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
2483         with Direct2D.
2484
2485 2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>
2486
2487         [DOMJIT] Add initial CheckDOM and CallDOM implementations
2488         https://bugs.webkit.org/show_bug.cgi?id=162941
2489
2490         Reviewed by Filip Pizlo.
2491
2492         * wtf/Box.h:
2493         (WTF::Box::Box):
2494
2495 2016-10-05  Zan Dobersek  <zdobersek@igalia.com>
2496
2497         Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
2498         https://bugs.webkit.org/show_bug.cgi?id=162903
2499
2500         Reviewed by Alex Christensen.
2501
2502         Rename build guards for the remaining implementation of the legacy EME API
2503         to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
2504         of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.
2505
2506         * wtf/FeatureDefines.h:
2507
2508 2016-10-04  Saam Barati  <sbarati@apple.com>
2509
2510         String.prototype.toLowerCase should be a DFG/FTL intrinsic
2511         https://bugs.webkit.org/show_bug.cgi?id=162887
2512
2513         Reviewed by Filip Pizlo and Yusuke Suzuki.
2514
2515         This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
2516         which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
2517         into a helper function. I decided to extract this into its own function because
2518         it may be the case that JSCs JITs will want to continue the operation
2519         after it has already ensured that part of an 8-bit string is lower case.
2520
2521         * wtf/text/StringImpl.cpp:
2522         (WTF::StringImpl::convertToLowercaseWithoutLocale):
2523         (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
2524         * wtf/text/StringImpl.h:
2525         * wtf/text/WTFString.cpp:
2526         (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
2527         * wtf/text/WTFString.h:
2528
2529 2016-10-04  Chris Dumez  <cdumez@apple.com>
2530
2531         Implement KeyboardEvent.code from the UI Event spec
2532         https://bugs.webkit.org/show_bug.cgi?id=149584
2533
2534         Reviewed by Darin Adler.
2535
2536         Add build time flag to toggle support for the code attribute on
2537         KeyboardEvent and only enable it on Mac for now, given that the
2538         implementation is missing on other platforms.
2539
2540         * wtf/FeatureDefines.h:
2541
2542 2016-10-03  Chris Dumez  <cdumez@apple.com>
2543
2544         Add support for KeyboardEvent.key attribute
2545         https://bugs.webkit.org/show_bug.cgi?id=36267
2546
2547         Reviewed by Darin Adler.
2548
2549         Add compile time flag for the key attribute on KeyboardEvent and enable
2550         it on Cocoa only.
2551
2552         * wtf/FeatureDefines.h:
2553
2554 2016-09-29  Sam Weinig  <sam@webkit.org>
2555
2556         Add initial support for IDL union conversion
2557         https://bugs.webkit.org/show_bug.cgi?id=161576
2558
2559         Reviewed by Chris Dumez.
2560
2561         * WTF.xcodeproj/project.pbxproj:
2562         * wtf/CMakeLists.txt:
2563         Add Brigand.h
2564
2565         * wtf/Brigand.h: Added.
2566         Import a standalone copy of Edouard Alligand and Joel Falcou's 
2567         Brigand library for help with for help with list based meta programming
2568
2569         * wtf/StdLibExtras.h:
2570         Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
2571         - IsTemplate acts like std::is_class, but works with a generic base.
2572         - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
2573         - RemoveCVAndReference combines std::remove_cv and std::remove_reference.
2574
2575 2016-09-30  Filip Pizlo  <fpizlo@apple.com>
2576
2577         B3::moveConstants should be able to edit code to minimize the number of constants
2578         https://bugs.webkit.org/show_bug.cgi?id=162764
2579
2580         Reviewed by Saam Barati.
2581         
2582         I thought it would be a good idea to document the fact that dominator traversal happens in a
2583         particular order for a reason.
2584
2585         * wtf/Dominators.h:
2586
2587 2016-09-29  Filip Pizlo  <fpizlo@apple.com>
2588
2589         Air should have a way of expressing additional instruction flags
2590         https://bugs.webkit.org/show_bug.cgi?id=162699
2591
2592         Reviewed by Mark Lam.
2593
2594         * wtf/CommaPrinter.h:
2595         (WTF::CommaPrinter::CommaPrinter):
2596         (WTF::CommaPrinter::dump):
2597         (WTF::CommaPrinter::didPrint):
2598
2599 2016-09-30  Youenn Fablet  <youenn@apple.com>
2600
2601         Add a way to go from a RefPtr<T> to Ref<const T>
2602         https://bugs.webkit.org/show_bug.cgi?id=162683
2603
2604         Reviewed by Alex Christensen.
2605
2606         * wtf/RefPtr.h:
2607         (WTF::RefPtr::releaseConstNonNull): Added.
2608
2609 2016-09-29  Mark Lam  <mark.lam@apple.com>
2610
2611         Re-enable StringView life-cycle checking.
2612         https://bugs.webkit.org/show_bug.cgi?id=160384
2613         <rdar://problem/28479434>
2614
2615         Reviewed by Saam Barati.
2616
2617         Re-landing after slow running tests have been resolved.
2618
2619         * wtf/text/StringView.h:
2620
2621 2016-09-29  Commit Queue  <commit-queue@webkit.org>
2622
2623         Unreviewed, rolling out r206563.
2624         https://bugs.webkit.org/show_bug.cgi?id=162732
2625
2626         Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested
2627         by ryanhaddad on #webkit).
2628
2629         Reverted changeset:
2630
2631         "Re-enable StringView life-cycle checking."
2632         https://bugs.webkit.org/show_bug.cgi?id=160384
2633         http://trac.webkit.org/changeset/206563
2634
2635 2016-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>
2636
2637         Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION
2638         https://bugs.webkit.org/show_bug.cgi?id=162718
2639
2640         Reviewed by Alex Christensen.
2641
2642         Clang 3.9 reports a following compilation warning:
2643           Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
2644
2645         * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'.
2646
2647 2016-09-28  Mark Lam  <mark.lam@apple.com>
2648
2649         Re-enable StringView life-cycle checking.
2650         https://bugs.webkit.org/show_bug.cgi?id=160384
2651         <rdar://problem/28479434>
2652
2653         Reviewed by Saam Barati.
2654
2655         * wtf/text/StringView.h:
2656
2657 2016-09-28  Filip Pizlo  <fpizlo@apple.com>
2658
2659         The write barrier should be down with TSO
2660         https://bugs.webkit.org/show_bug.cgi?id=162316
2661
2662         Reviewed by Geoffrey Garen.
2663         
2664         Added clearRange(), which quickly clears a range of bits. This turned out to be useful for
2665         a DFG optimization pass.
2666
2667         * wtf/FastBitVector.cpp:
2668         (WTF::FastBitVector::clearRange):
2669         * wtf/FastBitVector.h:
2670
2671 2016-09-28  Mark Lam  <mark.lam@apple.com>
2672
2673         Fix race condition in StringView's UnderlyingString lifecycle management.
2674         https://bugs.webkit.org/show_bug.cgi?id=162702
2675
2676         Reviewed by Geoffrey Garen.
2677
2678         There 2 relevant functions at play:
2679
2680         void StringView::setUnderlyingString(const StringImpl* string)
2681         {
2682             UnderlyingString* underlyingString;
2683             if (!string)
2684                 underlyingString = nullptr;
2685             else {
2686                 std::lock_guard<StaticLock> lock(underlyingStringsMutex);
2687                 auto result = underlyingStrings().add(string, nullptr);
2688                 if (result.isNewEntry)
2689                     result.iterator->value = new UnderlyingString(*string);
2690                 else
2691                     ++result.iterator->value->refCount;
2692                 underlyingString = result.iterator->value; // Point P2.
2693             }
2694             adoptUnderlyingString(underlyingString); // Point P5.
2695         }
2696
2697         ... and ...
2698
2699         void StringView::adoptUnderlyingString(UnderlyingString* underlyingString)
2700         {
2701             if (m_underlyingString) {
2702                 // Point P0.
2703                 if (!--m_underlyingString->refCount) {
2704                     if (m_underlyingString->isValid) { // Point P1.
2705                         std::lock_guard<StaticLock> lock(underlyingStringsMutex);
2706                         underlyingStrings().remove(&m_underlyingString->string); // Point P3.
2707                     }
2708                     delete m_underlyingString; // Point P4.
2709                 }
2710             }
2711             m_underlyingString = underlyingString;
2712         }
2713
2714         Imagine the following scenario:
2715
2716         1. Thread T1 has been using an UnderlyingString U1, and is now done with it.
2717            T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for
2718            the underlyingStringsMutex (which is currently being held by Thread T2).
2719         2. Context switch to Thread T2.
2720            T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString()
2721            and releases the underlyingStringsMutex.
2722            Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use.
2723         3. Context switch to Thread T1.
2724            T1 acquires the underlyingStringsMutex, and proceeds to remove it from the
2725            underlyingStrings() map (see Point P3).  It thinks it has successfully done so
2726            and proceeds to delete U1 (see Point P4).
2727         4. Context switch to Thread T2.
2728            T2 proceeds to use U1 (see Point P5 in setUnderlyingString()).
2729            Note: U1 has already been freed.  This is a use after free.
2730
2731         The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString()
2732         instead of after P1.  This ensures that the decrementing of the UnderlyingString
2733         refCount and its removal from the underlyingStrings() map is done as an atomic unit.
2734
2735         Note: If you look in StringView.cpp, you see another setUnderlyingString() which
2736         takes a StringView otherString.  This version of setUnderlyingString() can only
2737         be called from within the same thread that created the other StringView.  As a
2738         result, here, we are guaranteed that the UnderlyingString refCount is never zero,
2739         and there's no other threat of another thread trying to delete the UnderlyingString
2740         while we adopt it.  Hence, we don't need to acquire the underlyingStringsMutex
2741         here.
2742
2743         This race condition was found when running layout tests fetch/fetch-worker-crash.html
2744         and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME
2745         is enabled.  This issue resulted in those tests crashing due to a use-after-free.
2746
2747         * wtf/text/StringView.cpp:
2748         (WTF::StringView::adoptUnderlyingString):
2749         (WTF::StringView::setUnderlyingString):
2750
2751 2016-09-28  Brent Fulgham  <bfulgham@apple.com>
2752
2753         Correct 'safeCast' implementation
2754         https://bugs.webkit.org/show_bug.cgi?id=162679
2755         <rdar://problem/28518189>
2756
2757         Reviewed by Zalan Bujtas.
2758
2759         * wtf/StdLibExtras.h:
2760         (WTF::safeCast): Use a RELEASE_ASSERT.
2761
2762 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
2763
2764         [CMake] Add HAVE_LOCALTIME_R definition
2765         https://bugs.webkit.org/show_bug.cgi?id=162636
2766
2767         Reviewed by Alex Christensen.
2768
2769         * wtf/DateMath.cpp:
2770         (WTF::getLocalTime):
2771         * wtf/GregorianDateTime.cpp:
2772         (WTF::GregorianDateTime::setToCurrentLocalTime):
2773         * wtf/Platform.h:
2774
2775 2016-09-27  JF Bastien  <jfbastien@apple.com>
2776
2777         Speed up Heap::isMarkedConcurrently
2778         https://bugs.webkit.org/show_bug.cgi?id=162095
2779
2780         Reviewed by Filip Pizlo.
2781
2782         Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM.
2783
2784         This patch is fairly perf-neutral overall, but the GC's instrumentation reports:
2785           GC:Eden is 93% average runtime after change
2786           GC:Full is 76% average runtime after change
2787
2788         The fence was there because:
2789          1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then;
2790          2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored.
2791
2792         This ordering isn't guaranteed on ARM, which has a weak memory model.
2793
2794         There are 3 ways to guarantee this ordering:
2795          A. Use a barrier instruction.
2796          B. Use a load-acquire (new in ARMv8).
2797          C. use ARM's address dependency rule, which C++ calls memory_order_consume.
2798
2799         In general:
2800          A. is slow but orders all of memory in an intuitive manner.
2801          B. is faster-ish and has the same property-ish.
2802          C. should be faster still, but *only orders dependent loads*. This last part is critical! Consume isn't an all-out replacement for acquire (acquire is rather a superset of consume).
2803
2804         ARM explains the address dependency rule in their document "barrier litmus tests and cookbook":
2805
2806         > *Resolving by the use of barriers and address dependency*
2807         >
2808         > There is a rule within the ARM architecture that:
2809         > Where the value returned by a read is used to compute the virtual address of a subsequent read or write (this is known as an address dependency), then these two memory accesses will be observed in program order. An address dependency exists even if the value read by the first read has no effect in changing the virtual address (as might be the case if the value returned is masked off before it is used, or if it had no effect on changing a predicted address value).
2810         > This restriction applies only when the data value returned from one read is used as a data value to calculate the address of a subsequent read or write. This does not apply if the data value returned from one read is used to determine the condition code flags, and the values of the flags are used for condition code evaluation to determine the address of a subsequent reads, either through conditional execution or the evaluation of a branch. This is known as a control dependency.
2811         > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency.
2812
2813         C++'s memory_order_consume is unfortunately unimplemented by C++ compilers, and maybe unimplementable as spec'd. I'm working with interested folks in the committee to fix this situation: http://wg21.link/p0190r2
2814
2815         * wtf/Atomics.h:
2816         (WTF::zeroWithConsumeDependency): a 0 which carries a dependency
2817         (WTF::consumeLoad): pixie magic
2818
2819 2016-09-27  JF Bastien  <jfbastien@apple.com>
2820
2821         Atomics.h on Windows: remove seq_cst hack
2822         https://bugs.webkit.org/show_bug.cgi?id=162022
2823
2824         Reviewed by Mark Lam.
2825
2826         No need to force access to seq_cst, always inlining fixes the MSVC warning.
2827
2828         * wtf/Atomics.h:
2829         (WTF::Atomic::compareExchangeWeak): remove seq_cst hack
2830         (WTF::Atomic::compareExchangeStrong): remove seq_cst hack
2831         (WTF::Atomic::exchangeAndAdd): remove seq_cst hack
2832         (WTF::Atomic::exchange): remove seq_cst hack
2833
2834 2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>
2835
2836         [CMake] Use CMake to determine HAVE_* defines
2837         https://bugs.webkit.org/show_bug.cgi?id=162368
2838
2839         Reviewed by Alex Christensen.
2840
2841         * wtf/Platform.h:
2842
2843 2016-09-20  Anders Carlsson  <andersca@apple.com>
2844
2845         PlatformEvent::m_modifiers should be an OptionSet
2846         https://bugs.webkit.org/show_bug.cgi?id=162326
2847
2848         Reviewed by Daniel Bates.
2849
2850         * wtf/OptionSet.h:
2851         (WTF::OptionSet::operator!=):
2852         (WTF::OptionSet::operator-):
2853
2854 2016-09-27  Jer Noble  <jer.noble@apple.com>
2855
2856         Remove deprecated ENCRYPTED_MEDIA implementation.
2857         https://bugs.webkit.org/show_bug.cgi?id=161010
2858
2859         Reviewed by Eric Carlson.
2860
2861         Remove ENABLE_ENCRYPTED_MEDIA.
2862
2863         * wtf/FeatureDefines.h:
2864
2865 2016-09-27  Youenn Fablet  <youenn@apple.com>
2866
2867         [Fetch API] Use Ref<const T> in FetchBody::m_data variant
2868         https://bugs.webkit.org/show_bug.cgi?id=162599
2869
2870         Reviewed by Alex Christensen.
2871
2872         Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable.
2873
2874         * wtf/DeferrableRefCounted.h:
2875         (WTF::DeferrableRefCountedBase::ref):
2876         (WTF::DeferrableRefCountedBase::derefBase):
2877         (WTF::DeferrableRefCounted::deref):
2878
2879 2016-09-26  Daniel Bates  <dabates@apple.com>
2880
2881         Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
2882         https://bugs.webkit.org/show_bug.cgi?id=162365
2883
2884         Reviewed by Simon Fraser.
2885
2886         * wtf/FeatureDefines.h:
2887
2888 2016-09-26  Benjamin Poulain  <benjamin@webkit.org>
2889
2890         [JSC] Shrink the Math inline caches some more
2891         https://bugs.webkit.org/show_bug.cgi?id=162485
2892
2893         Reviewed by Saam Barati.
2894
2895         * wtf/Bag.h:
2896         Don't copy the arguments before initializing the nodes.
2897
2898 2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>
2899
2900         std::unique_ptr deleter functions should not check if pointer is null
2901         https://bugs.webkit.org/show_bug.cgi?id=162558
2902
2903         Reviewed by Alex Christensen.
2904
2905         std::unique_ptr already does this before calling the deleter.
2906
2907         * wtf/efl/UniquePtrEfl.h:
2908         * wtf/glib/GUniquePtr.h:
2909
2910 == Rolled over to ChangeLog-2016-09-26 ==