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