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