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