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