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