Make it easier to use NoLockingNecessary
[WebKit-https.git] / Source / WTF / ChangeLog
1 2016-06-02  Filip Pizlo  <fpizlo@apple.com>
2
3         Make it easier to use NoLockingNecessary
4         https://bugs.webkit.org/show_bug.cgi?id=158306
5
6         Reviewed by Keith Miller.
7         
8         An idiom that we borrowed from LLVM is that if a function requires a lock to be held, we
9         have it take a const Locker& as its first argument. This may not communicate which lock is
10         to be held, but it does help us to remember that some lock must be held. So far, it's been
11         relatively easy to then figure out which lock. We've had bugs where we forgot to hold a
12         lock but I don't remember the last time we had a bug where we grabbed the wrong lock.
13         
14         But sometimes, we know at the point where we call such a method that we actually don't
15         need to hold any lock. This usually happens during object construction. If we're
16         constructing some object then we usually know that we have not escaped it yet, so we don't
17         need to waste time acquiring its lock. We could solve this by having a separate set of
18         methods that don't do or require locking. This would be cumbersome, since usually for
19         every variant that takes const Locker&, there is already one that doesn't, and that one
20         will grab the lock for you. So this means having a third variant, that also doesn't take a
21         const Locker&, but does no locking. That's pretty weird.
22         
23         So, we introduced NoLockingNecessary for situations like this. The idiom went like so:
24         
25             Locker<Whatever> locker(Locker<Whatever>::NoLockingNecessary)
26             stuff->foo(locker);
27         
28         Usually though, there would be some distance between where the locker is defined and where
29         it's used, so when you just look at stuff->foo(locker) in isolation you don't know if this
30         is a real locker or a NoLockingNecessary cast. Also, requiring two lines for this just
31         adds code.
32         
33         This change makes this easier. Now you can just do:
34         
35             stuff->foo(NoLockingNecessary).
36         
37         This is because NoLockingNecessary has been pulled out into the WTF namespace (and is
38         usinged from the global namespace) and the Locker<> constructor that takes
39         NoLockingNecessaryTag is now implicit.
40         
41         The only possible downside of this change is that people might use this idiom more
42         frequently now that it's easier to use. I don't think that's a bad thing. I'm now
43         convinced that this is not a bad idiom. When I was fixing an unrelated bug, I almost went
44         the way of adding more locking to some core JSC data structures, and in the process, I
45         needed to use NoLockingNecessary. It's clear that this is a general-purpose idiom and we
46         should not impose artificial constraints on its use.
47
48         * wtf/Locker.h:
49         (WTF::Locker::Locker):
50         (WTF::Locker::~Locker):
51
52 2016-06-01  Brady Eidson  <beidson@apple.com>
53
54         Get rid of StringCapture.
55         https://bugs.webkit.org/show_bug.cgi?id=158285
56
57         Reviewed by Chris Dumez.
58
59         * wtf/text/WTFString.h:
60         (WTF::StringCapture::StringCapture): Deleted.
61         (WTF::StringCapture::string): Deleted.
62         (WTF::StringCapture::releaseString): Deleted.
63         (WTF::StringCapture::operator=): Deleted.
64
65 2016-06-01  Benjamin Poulain  <bpoulain@apple.com>
66
67         [JSC] Some setters for components of Date do not timeClip() their result
68         https://bugs.webkit.org/show_bug.cgi?id=158278
69
70         Unreviewed.
71
72         * wtf/DateMath.cpp:
73         (WTF::equivalentYearForDST): Deleted.
74         The assertion is bogus.
75         As the comments above explains, the function is completely wrong for years
76         outside [1900-2100].
77         The tests passing large values for years are failing (year <= maxYear).
78         The weird NaN test is a mystery. The old changelog does not explain it.
79
80 2016-05-31  Commit Queue  <commit-queue@webkit.org>
81
82         Unreviewed, rolling out r201363 and r201456.
83         https://bugs.webkit.org/show_bug.cgi?id=158240
84
85         "40% regression on date-format-xparb" (Requested by
86         keith_miller on #webkit).
87
88         Reverted changesets:
89
90         "LLInt should be able to cache prototype loads for values in
91         GetById"
92         https://bugs.webkit.org/show_bug.cgi?id=158032
93         http://trac.webkit.org/changeset/201363
94
95         "get_by_id should support caching unset properties in the
96         LLInt"
97         https://bugs.webkit.org/show_bug.cgi?id=158136
98         http://trac.webkit.org/changeset/201456
99
100 2016-05-31  Brady Eidson  <beidson@apple.com>
101
102         Make createCrossThreadTask() functions return on the stack instead of the heap.
103         https://bugs.webkit.org/show_bug.cgi?id=158215
104
105         Reviewed by Darin Adler.
106
107         * WTF.xcodeproj/project.pbxproj:
108
109         * wtf/CrossThreadCopier.cpp:
110
111         * wtf/CrossThreadQueue.h: Added. A lightweight of MessageQueue that deals directly
112           in objects instead of in std::unique_ptrs.
113         (WTF::CrossThreadQueue::isKilled):
114         (WTF::CrossThreadQueue<DataType>::append):
115         (WTF::CrossThreadQueue<DataType>::waitForMessage):
116         (WTF::CrossThreadQueue<DataType>::tryGetMessage):
117
118         * wtf/CrossThreadTask.h:
119         (WTF::createCrossThreadTask):
120         (WTF::CrossThreadTask::CrossThreadTask): Deleted.
121
122 2016-05-30  Brady Eidson  <beidson@apple.com>
123
124         Move CrossThreadCopier/CrossThreadTask to WTF.
125         https://bugs.webkit.org/show_bug.cgi?id=158207
126
127         Reviewed by Alex Christensen.
128
129         * WTF.xcodeproj/project.pbxproj:
130         * wtf/CMakeLists.txt:
131
132         * wtf/CrossThreadCopier.cpp: Renamed from Source/WebCore/platform/CrossThreadCopier.cpp.
133         * wtf/CrossThreadCopier.h: Renamed from Source/WebCore/platform/CrossThreadCopier.h.
134         (WTF::CrossThreadCopierPassThrough::copy):
135         
136         * wtf/CrossThreadTask.h: Renamed from Source/WebCore/platform/CrossThreadTask.h.
137         (WTF::CrossThreadTask::CrossThreadTask):
138         (WTF::CrossThreadTask::performTask):
139         (WTF::createCrossThreadTask):
140
141 2016-05-28  Chris Dumez  <cdumez@apple.com>
142
143         Templatize NoncopyableFunction class similarly to std::function
144         https://bugs.webkit.org/show_bug.cgi?id=158185
145
146         Reviewed by Darin Adler.
147
148         Templatize NoncopyableFunction class similarly to std::function, so
149         that it can be used as a std::function replacement in more places.
150
151         Previously, NoncopyableFunction could only support "void()" lambdas.
152
153         * wtf/FunctionDispatcher.h:
154         * wtf/MainThread.cpp:
155         (WTF::functionQueue):
156         (WTF::dispatchFunctionsFromMainThread):
157         (WTF::callOnMainThread):
158         * wtf/MainThread.h:
159         * wtf/NoncopyableFunction.h:
160         * wtf/RunLoop.cpp:
161         (WTF::RunLoop::performWork):
162         (WTF::RunLoop::dispatch):
163         * wtf/RunLoop.h:
164         * wtf/WorkQueue.h:
165         * wtf/cocoa/WorkQueueCocoa.cpp:
166         (WTF::WorkQueue::dispatch):
167         (WTF::WorkQueue::dispatchAfter):
168         * wtf/efl/DispatchQueueWorkItemEfl.h:
169         (WorkItem::WorkItem):
170         (TimerWorkItem::create):
171         (TimerWorkItem::TimerWorkItem):
172         * wtf/efl/WorkQueueEfl.cpp:
173         (WTF::WorkQueue::dispatch):
174         (WTF::WorkQueue::dispatchAfter):
175         * wtf/generic/RunLoopGeneric.cpp:
176         (WTF::RunLoop::TimerBase::ScheduledTask::create):
177         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
178         (WTF::RunLoop::dispatchAfter):
179         * wtf/generic/WorkQueueGeneric.cpp:
180         (WorkQueue::dispatch):
181         (WorkQueue::dispatchAfter):
182         * wtf/glib/RunLoopGLib.cpp:
183         (WTF::DispatchAfterContext::DispatchAfterContext):
184         (WTF::RunLoop::dispatchAfter):
185         * wtf/win/WorkItemWin.cpp:
186         (WTF::WorkItemWin::WorkItemWin):
187         (WTF::WorkItemWin::create):
188         (WTF::HandleWorkItem::HandleWorkItem):
189         (WTF::HandleWorkItem::createByAdoptingHandle):
190         * wtf/win/WorkItemWin.h:
191         (WTF::WorkItemWin::function):
192         * wtf/win/WorkQueueWin.cpp:
193         (WTF::WorkQueue::dispatch):
194         (WTF::WorkQueue::dispatchAfter):
195
196 2016-05-28  Dan Bernstein  <mitz@apple.com>
197
198         Build fix for projects that include MainThread.h without including FastMalloc.h.
199
200         * wtf/NoncopyableFunction.h: Include FastMalloc.h from here.
201
202 2016-05-27  Chris Dumez  <cdumez@apple.com>
203
204         callOnMainThread() should not copy captured lambda variables
205         https://bugs.webkit.org/show_bug.cgi?id=158166
206
207         Reviewed by Brady Eidson.
208
209         callOnMainThread() should not copy captured lambda variables. This
210         function is usually called cross-thread with a lambda and copying
211         the lambda (and its captured variables) can lead to thread-safety
212         issues.
213
214         This patch updates callOnMainThread() to take a NoncopyableFunction&&
215         in parameter instead of a std::function. The call sites of
216         callOnMainThread() have also been updated to use C++14's lambda
217         capture with initializer.
218
219         * WTF.xcodeproj/project.pbxproj:
220
221         * wtf/FunctionDispatcher.h:
222         * wtf/NoncopyableFunction.h:
223         - Moved NoncopyableFunction from FunctionDispatcher.h to
224           NoncopyableFunction.h.
225         - Add a new operator=(nullptr_t) operator to NoncopyableFunction to
226           match std::function, as one of the call sites needed it.
227
228         * wtf/MainThread.cpp:
229         (WTF::functionQueue):
230         (WTF::dispatchFunctionsFromMainThread):
231         (WTF::callOnMainThread):
232         * wtf/MainThread.h:
233
234 2016-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>
235
236         Unreviewed, build fix for JSCOnly port.
237         https://bugs.webkit.org/show_bug.cgi?id=158111
238
239         Use NoncopyableFunction instead of std::function<>.
240
241         * wtf/generic/RunLoopGeneric.cpp:
242         (WTF::RunLoop::TimerBase::ScheduledTask::create):
243         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
244
245 2016-05-27  Chris Dumez  <cdumez@apple.com>
246
247         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables
248         https://bugs.webkit.org/show_bug.cgi?id=158111
249
250         Reviewed by Darin Adler.
251
252         WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables.
253         These are often used cross-thread and copying the captured lambda variables can be
254         dangerous (e.g. we do not want to copy a String after calling isolatedCopy() upon
255         capture).
256
257         This patch introduces a new NoncopyableFunction type that behaves similarly to
258         std::function but guarantees that the passed-in lambda (and its captured variables)
259         cannot be copied. This new NoncopyableFunction type is now used for
260         WorkQueue / RunLoop's dispatch() / dispatchAfter() which are commonly used
261         cross-thread. This should now allow us to call WorkQueue::dispatch() with a lambda
262         that captures a String like so:
263         [str = str.isolatedCopy()]() { }
264
265         Also note that even though this is not leveraged in this patch, NoncopyableFunction
266         would allow us to capture move-only types such as std::unique_ptr as so:
267         [p = WTFMove(p)]() { }
268         This does not work if we convert the lambda into an std::function because
269         std::function requires the lambda to be copyable, NoncopyableFunction does not.
270
271         * wtf/FunctionDispatcher.h:
272         (WTF::CallableWrapperBase::~CallableWrapperBase):
273         (WTF::NoncopyableFunction::NoncopyableFunction):
274         (WTF::NoncopyableFunction::operator()):
275         (WTF::NoncopyableFunction::operator bool):
276         (WTF::NoncopyableFunction::operator=):
277         * wtf/RunLoop.cpp:
278         (WTF::RunLoop::performWork):
279         (WTF::RunLoop::dispatch):
280         * wtf/RunLoop.h:
281         * wtf/WorkQueue.h:
282         * wtf/cocoa/WorkQueueCocoa.cpp:
283         (WTF::WorkQueue::dispatch):
284         (WTF::WorkQueue::dispatchAfter):
285         * wtf/efl/DispatchQueueWorkItemEfl.h:
286         (WorkItem::WorkItem):
287         (TimerWorkItem::create):
288         (TimerWorkItem::TimerWorkItem):
289         * wtf/efl/WorkQueueEfl.cpp:
290         (WTF::WorkQueue::dispatch):
291         (WTF::WorkQueue::dispatchAfter):
292         * wtf/generic/RunLoopGeneric.cpp:
293         (WTF::RunLoop::dispatchAfter):
294         * wtf/generic/WorkQueueGeneric.cpp:
295         (WorkQueue::dispatch):
296         (WorkQueue::dispatchAfter):
297         * wtf/glib/RunLoopGLib.cpp:
298         (WTF::DispatchAfterContext::DispatchAfterContext):
299         (WTF::RunLoop::dispatchAfter):
300         * wtf/win/WorkItemWin.cpp:
301         (WTF::WorkItemWin::WorkItemWin):
302         (WTF::WorkItemWin::create):
303         (WTF::HandleWorkItem::HandleWorkItem):
304         (WTF::HandleWorkItem::createByAdoptingHandle):
305         * wtf/win/WorkItemWin.h:
306         (WTF::WorkItemWin::function):
307         * wtf/win/WorkQueueWin.cpp:
308         (WTF::WorkQueue::dispatch):
309         (WTF::WorkQueue::timerCallback):
310         (WTF::WorkQueue::dispatchAfter):
311
312 2016-05-26  Filip Pizlo  <fpizlo@apple.com>
313
314         ScopedLambda should have a lifetime story that makes sense to the compiler
315         https://bugs.webkit.org/show_bug.cgi?id=158118
316
317         Reviewed by Mark Lam.
318
319         Prior to this change, there were two lifetime bugs in ScopedLambda:
320         
321         - scopedLambda(Functor&&) would bind Functor to const lambda&, so the resulting ScopedLambdaFunctor
322           would hold a reference to the original lambda. This would have surprising behavior; for example
323           it meant that this code was wrong:
324           
325           auto l = scopedLambda<things>([&] ...);
326           
327           The solution is to have explicit copy/move versions of scopedLambda() rather than rely on perfect
328           forwarding.
329         
330         - ScopedLambdaFunctor did not override its copy or move operations, so if the compiler did not RVO
331           scopedLambda(), it would return a ScopedLambdaFunctor whose m_arg points to a dead temporary
332           ScopedLambdaFunctor instance. The solution is to have explicit copy/move constructors and
333           operators, which preserve the invariant that ScopedLambda::m_arg points to this.
334         
335         One nice side-effect of all of these constructors and operators being explicit is that we can rely
336         on WTFMove's excellent assertions, which helped catch the first issue.
337         
338         This reverts ParkingLot to use ScopedLambda again.
339
340         * wtf/ParkingLot.cpp:
341         (WTF::ParkingLot::parkConditionallyImpl):
342         (WTF::ParkingLot::unparkOne):
343         (WTF::ParkingLot::unparkOneImpl):
344         * wtf/ParkingLot.h:
345         (WTF::ParkingLot::parkConditionally):
346         (WTF::ParkingLot::unparkOne):
347         * wtf/ScopedLambda.h:
348         (WTF::scopedLambda):
349
350 2016-05-25  Anders Carlsson  <andersca@apple.com>
351
352         Get rid of WTF/Functional.h
353         https://bugs.webkit.org/show_bug.cgi?id=158081
354
355         Reviewed by Chris Dumez.
356
357         This is no longer used, and removing it will free up the name for a new Functional.h implementation.
358
359         * WTF.xcodeproj/project.pbxproj:
360         * wtf/Functional.h: Removed.
361         (WTF::RefAndDeref::ref): Deleted.
362         (WTF::RefAndDeref::deref): Deleted.
363         (WTF::ParamStorageTraits::wrap): Deleted.
364         (WTF::ParamStorageTraits::unwrap): Deleted.
365         (WTF::ParamStorageTraits<PassRefPtr<T>>::wrap): Deleted.
366         (WTF::ParamStorageTraits<PassRefPtr<T>>::unwrap): Deleted.
367         (WTF::ParamStorageTraits<RefPtr<T>>::wrap): Deleted.
368         (WTF::ParamStorageTraits<RefPtr<T>>::unwrap): Deleted.
369         (WTF::ParamStorageTraits<RetainPtr<T>>::wrap): Deleted.
370         (WTF::ParamStorageTraits<RetainPtr<T>>::unwrap): Deleted.
371         (WTF::FunctionImplBase::~FunctionImplBase): Deleted.
372         (WTF::FunctionBase::isNull): Deleted.
373         (WTF::FunctionBase::FunctionBase): Deleted.
374         (WTF::FunctionBase::impl): Deleted.
375         (WTF::bind): Deleted.
376         * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
377
378 2016-05-24  Keith Miller  <keith_miller@apple.com>
379
380         LLInt should be able to cache prototype loads for values in GetById
381         https://bugs.webkit.org/show_bug.cgi?id=158032
382
383         Reviewed by Filip Pizlo.
384
385         Add move constructors/initializers to Bags.
386
387         * wtf/Bag.h:
388         (WTF::Bag::Bag):
389         (WTF::Bag::operator=):
390
391 2016-05-24  Chris Dumez  <cdumez@apple.com>
392
393         Use auto for some of our lambda function parameters
394         https://bugs.webkit.org/show_bug.cgi?id=158001
395
396         Reviewed by Darin Adler.
397
398         Use auto for some of our lambda function parameters now that we build with c++14.
399
400         * wtf/BubbleSort.h:
401         (WTF::bubbleSort):
402
403 2016-05-23  Chris Dumez  <cdumez@apple.com>
404
405         Speed up move of vectors of POD types that have an inline buffer
406         https://bugs.webkit.org/show_bug.cgi?id=158003
407
408         Reviewed by Benjamin Poulain.
409
410         When moving a vector of POD types that have an inline buffer, we would
411         call std::swap() on the inline buffers. This unnecessarily slow because:
412         1. It does not consider the vector size, and therefore may end up doing
413            more work than necessary when the inline buffer is not full.
414         2. In the "move" case, the destination buffer is completely empty so
415            we don't really want a swap. We merely want the move the content of
416            the source's inline buffer into the destination's one.
417
418         Instead of calling std::swap(), we now call swapInlineBuffers() which
419         was already used for non-POD types. swapInlineBuffers() will do just
420         what we want in the "move" case because swapBound is going to be 0.
421         As a result, we will only move the content of the source buffer into
422         the destination one. Also swapInlineBuffers() is aware of the source
423         vector's size so it will only move what's strictly needed.
424
425         This seems to be a 2% progression on Dromaeo DOM attributes test.
426
427         * wtf/Vector.h:
428         (WTF::VectorBuffer::swapInlineBuffer):
429
430 2016-05-22  Dan Bernstein  <mitz@apple.com>
431
432         Added NSEventMaskMouseMoved to AppKitCompatibilityDeclarations.h.
433
434         Rubber-stamped by Anders Carlsson.
435
436         * wtf/mac/AppKitCompatibilityDeclarations.h:
437
438 2016-05-22  Dan Bernstein  <mitz@apple.com>
439
440         Another attempt to fix the GTK build after my previous changes.
441
442         * wtf/StdLibExtras.h:
443
444 2016-05-22  Dan Bernstein  <mitz@apple.com>
445
446         Tried to fix the GTK build after r201257.
447
448         * wtf/StdLibExtras.h:
449
450 2016-05-22  Dan Bernstein  <mitz@apple.com>
451
452         Additional fixes for non-C++14 Apple projects that use WTF.
453
454         * wtf/StdLibExtras.h:
455         (std::exchange):
456
457 2016-05-22  Dan Bernstein  <mitz@apple.com>
458
459         Additional fixes for non-C++14 Apple projects that use WTF.
460
461         * wtf/StdLibExtras.h:
462         (std::make_unique):
463         (std::move):
464
465 2016-05-22  Dan Bernstein  <mitz@apple.com>
466
467         Correct the previous build fix attempt.
468
469         * wtf/StdLibExtras.h:
470
471 2016-05-22  Dan Bernstein  <mitz@apple.com>
472
473         Build fix for non-C++14 Apple projects that use WTF.
474
475         Rubber-stamped by Anders.
476
477         * wtf/StdLibExtras.h:
478
479 2016-05-22  Brady Eidson  <beidson@apple.com>
480
481         Move to C++14.
482         https://bugs.webkit.org/show_bug.cgi?id=157948
483
484         Reviewed by Michael Catanzaro.
485
486         * Configurations/Base.xcconfig:
487         
488         Delete a lot of "stl additions until we can adopt C++14" code:
489         * wtf/StdLibExtras.h:
490         (std::make_unique): Deleted.
491         (std::index_sequence::size): Deleted.
492         (std::exchange): Deleted.
493         (std::literals::chrono_literals::operator _s): Deleted.
494         (std::literals::chrono_literals::operator _ms): Deleted.
495
496 2016-05-20  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
497
498         Implement operator== for WeakPtr
499         https://bugs.webkit.org/show_bug.cgi?id=157883
500
501         Reviewed by Chris Dumez.
502
503         Implement operator== and operator!= for WeakPtr and update code to use the operators.
504
505         * wtf/WeakPtr.h:
506         (WTF::operator==):
507         (WTF::operator!=):
508
509 2016-05-19  Chris Dumez  <cdumez@apple.com>
510
511         Improve compile-time assertions in is<>() / downcast<>()
512         https://bugs.webkit.org/show_bug.cgi?id=157817
513
514         Reviewed by Darin Adler.
515
516         * wtf/Ref.h:
517         (WTF::is):
518         Add is<>() overloads taking a Ref<>() so that is<>() keeps working when
519         passing a Ref<>(), despite the new static assertions on the input type.
520         Some call sites were already leveraging this as it was working by
521         implicitly converting the Ref<T> into a T&.
522
523         * wtf/TypeCasts.h:
524         (WTF::is):
525         (WTF::downcast):
526         Make static assertions stricter in is<>() / downcast<>() to catch more
527         cases where those are either unnecessary or incorrect.
528
529 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
530
531         Unreviewed, fix all of the builds. I failed a second time.
532
533         * wtf/BackwardsGraph.h:
534         (WTF::BackwardsGraph::rootName):
535
536 2016-05-19  Filip Pizlo  <fpizlo@apple.com>
537
538         Unreviewed, fix all of the builds. I had made an additional change that I did not mean to
539         commit. This fixes it.
540
541         * wtf/BackwardsGraph.h:
542         (WTF::BackwardsGraph::rootName):
543         (WTF::BackwardsGraph::Set::dump):
544         (WTF::BackwardsGraph::dump):
545
546 2016-05-18  Filip Pizlo  <fpizlo@apple.com>
547
548         DFG::LICMPhase shouldn't hoist type checks unless it knows that the check will succeed at the loop pre-header
549         https://bugs.webkit.org/show_bug.cgi?id=144527
550
551         Reviewed by Saam Barati.
552         
553         This adds an adaptor for graphs called BackwardsGraph. The WTF graph framework is based on
554         passing around a Graph template argument that follows the protocol shared by DFG::CFG,
555         B3::CFG, and Air::CFG. These graphs always have a single root node but may have many leaf
556         nodes. This new BackwardsGraph adaptor reverses the graph by creating a synthetic return
557         node that it uses as the root in the inverted graph. This currently may resort to some
558         heuristics in programs that have an infinite loop, but other than that, it'll work well in
559         the general case.
560         
561         This allows us to say Dominators<BackwardsGraph<some graph type>> as a way of computing
562         backwards dominators, which then allows us to easily answer control flow equivalence
563         queries.
564
565         * CMakeLists.txt:
566         * WTF.xcodeproj/project.pbxproj:
567         * wtf/BackwardsGraph.h: Added.
568         (WTF::BackwardsGraph::Node::Node):
569         (WTF::BackwardsGraph::Node::root):
570         (WTF::BackwardsGraph::Node::operator==):
571         (WTF::BackwardsGraph::Node::operator!=):
572         (WTF::BackwardsGraph::Node::operator bool):
573         (WTF::BackwardsGraph::Node::isRoot):
574         (WTF::BackwardsGraph::Node::node):
575         (WTF::BackwardsGraph::Set::Set):
576         (WTF::BackwardsGraph::Set::add):
577         (WTF::BackwardsGraph::Set::remove):
578         (WTF::BackwardsGraph::Set::contains):
579         (WTF::BackwardsGraph::Set::dump):
580         (WTF::BackwardsGraph::Map::Map):
581         (WTF::BackwardsGraph::Map::clear):
582         (WTF::BackwardsGraph::Map::size):
583         (WTF::BackwardsGraph::Map::operator[]):
584         (WTF::BackwardsGraph::BackwardsGraph):
585         (WTF::BackwardsGraph::root):
586         (WTF::BackwardsGraph::newMap):
587         (WTF::BackwardsGraph::successors):
588         (WTF::BackwardsGraph::predecessors):
589         (WTF::BackwardsGraph::index):
590         (WTF::BackwardsGraph::node):
591         (WTF::BackwardsGraph::numNodes):
592         (WTF::BackwardsGraph::dump):
593         * wtf/Dominators.h:
594         (WTF::Dominators::Dominators):
595         (WTF::Dominators::dump):
596         (WTF::Dominators::LengauerTarjan::computeDepthFirstPreNumbering):
597         * wtf/GraphNodeWorklist.h:
598         (WTF::GraphNodeWith::GraphNodeWith):
599         (WTF::GraphNodeWith::operator bool):
600         * wtf/StdLibExtras.h:
601         (WTF::callStatelessLambda):
602         (WTF::checkAndSet):
603
604 2016-05-18  Saam barati  <sbarati@apple.com>
605
606         StringBuilder::appendQuotedJSONString doesn't properly protect against the math it's doing. Make the math fit the assertion.
607         https://bugs.webkit.org/show_bug.cgi?id=157868
608
609         Reviewed by Benjamin Poulain.
610
611         appendQuotedJSONString was rounding up to the next power of two when resizing
612         its buffer. Lets call the allocation size X. If X > 2^31, then
613         roundUpToPowerOfTwo(X) == 0. This patch fixes this by making the
614         assertion reflect what the code is doing. We now allocate to a size
615         of X = std::max(maximumCapacityRequired , roundUpToPowerOfTwo(maximumCapacityRequired))
616
617         * wtf/text/StringBuilder.cpp:
618         (WTF::StringBuilder::appendQuotedJSONString):
619
620 2016-05-17  Joseph Pecoraro  <pecoraro@apple.com>
621
622         REGRESSION(r192855): Math.random() always produces the same first 7 decimal points the first two invocations
623         https://bugs.webkit.org/show_bug.cgi?id=157805
624         <rdar://problem/26327851>
625
626         Reviewed by Geoffrey Garen.
627
628         * wtf/WeakRandom.h:
629         (WTF::WeakRandom::setSeed):
630         Advance once to randomize the 32bit seed across the 128bit state
631         and avoid re-using 64bits of state in the second advance.
632
633 2016-05-17  Dean Jackson  <dino@apple.com>
634
635         Remove ES6_GENERATORS flag
636         https://bugs.webkit.org/show_bug.cgi?id=157815
637         <rdar://problem/26332894>
638
639         Reviewed by Geoffrey Garen.
640
641         This flag isn't needed. Generators are enabled everywhere and
642         part of a stable specification.
643
644         * wtf/FeatureDefines.h:
645
646 2016-05-17  Filip Pizlo  <fpizlo@apple.com>
647
648         WTF should know about Language
649         https://bugs.webkit.org/show_bug.cgi?id=157756
650
651         Reviewed by Geoffrey Garen.
652
653         This contains two changes:
654
655         - Move everything that WebCore's logic for getting the platform user preferred language
656           depended on into WTF. This means CFBundleSPI.h and BlockObjCExceptions.h|cpp.
657
658         - Move WebCore::platformUserPreferredLanguages() to WTF::platformUserPreferredLanguages().
659           This is needed by https://bugs.webkit.org/show_bug.cgi?id=157755, which will make JSC
660           use this to detect the platform user preferred language when running standalone.
661
662         Moving the dependencies accounts for a huge chunk of this change, since we have to rewire
663         all of the references to those headers in all of WebKit.
664
665         Moving platformUserPreferredLanguages() is mostly easy except for the weird callback.
666         That function would call languageDidChange(), which needs to stay in WebCore. So, this
667         gives WebCore the ability to register a languageDidChange callback. Other than this new
668         logic, the code being added to WTF is just being lifted out of WebCore.
669
670         * WTF.xcodeproj/project.pbxproj:
671         * wtf/BlockObjCExceptions.h: Added.
672         * wtf/BlockObjCExceptions.mm: Added.
673         (ReportBlockedObjCException):
674         * wtf/PlatformEfl.cmake:
675         * wtf/PlatformGTK.cmake:
676         * wtf/PlatformJSCOnly.cmake:
677         * wtf/PlatformMac.cmake:
678         * wtf/PlatformUserPreferredLanguages.h: Added.
679         * wtf/PlatformUserPreferredLanguagesMac.mm: Added.
680         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
681         (WTF::preferredLanguages):
682         (+[WTFLanguageChangeObserver languagePreferencesDidChange:]):
683         (WTF::httpStyleLanguageCode):
684         (WTF::isValidICUCountryCode):
685         (WTF::platformUserPreferredLanguages):
686         * wtf/PlatformUserPreferredLanguagesUnix.cpp: Added.
687         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
688         (WTF::platformLanguage):
689         (WTF::platformUserPreferredLanguages):
690         * wtf/PlatformUserPreferredLanguagesWin.cpp: Added.
691         (WTF::setPlatformUserPreferredLanguagesChangedCallback):
692         (WTF::localeInfo):
693         (WTF::platformLanguage):
694         (WTF::platformUserPreferredLanguages):
695         * wtf/PlatformWin.cmake:
696         * wtf/spi/cf: Added.
697         * wtf/spi/cf/CFBundleSPI.h: Added.
698
699 2016-05-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>
700
701         DOMPromise should only restrict the resolution type
702         https://bugs.webkit.org/show_bug.cgi?id=157307
703
704         Reviewed by Darin Adler.
705
706         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
707         * wtf/RefPtr.h: Ditto.
708
709 2016-05-16  Michael Saboff  <msaboff@apple.com>
710
711         ARMV7K: Crash at JavaScriptCore: WTF::ScopedLambdaFunctor<bool
712         https://bugs.webkit.org/show_bug.cgi?id=157781
713
714         Reviewed by Filip Pizlo.
715
716         Replaced use of ScopedLambda in locking code with std::function much as it was
717         before change set 199760 to work around what appears to be a clang compiler issue.
718
719         * wtf/ParkingLot.cpp:
720         (WTF::ParkingLot::parkConditionallyImpl):
721         (WTF::ParkingLot::unparkOne):
722         (WTF::ParkingLot::unparkAll):
723         (WTF::ParkingLot::forEach):
724         (WTF::ParkingLot::unparkOneImpl): Deleted.
725         (WTF::ParkingLot::forEachImpl): Deleted.
726         * wtf/ParkingLot.h:
727         (WTF::ParkingLot::parkConditionally):
728         (WTF::ParkingLot::unparkOne): Deleted.
729         (WTF::ParkingLot::forEach): Deleted.
730
731 2016-05-15  Chris Dumez  <cdumez@apple.com>
732
733         Use more references in JS wrappers related code
734         https://bugs.webkit.org/show_bug.cgi?id=157721
735
736         Reviewed by Darin Adler.
737
738         Add new static_reference_cast() overload that takes a Ref<U>&& in
739         in order to downcast Ref<> types without causing ref-counting
740         churn.
741
742         * wtf/Ref.h:
743         (WTF::static_reference_cast):
744
745 2016-05-13  Chris Dumez  <cdumez@apple.com>
746
747         Unreviewed, rolling out r200837.
748
749         Seems to have regressed Speedometer and JetStream on iOS
750
751         Reverted changeset:
752
753         "DOMPromise should only restrict the resolution type"
754         https://bugs.webkit.org/show_bug.cgi?id=157307
755         http://trac.webkit.org/changeset/200837
756
757 2016-05-13  Beth Dakin  <bdakin@apple.com>
758
759         Add dyldSPI.h
760         https://bugs.webkit.org/show_bug.cgi?id=157401
761         -and corresponding-
762         rdar://problem/26253396
763
764         Reviewed by Darin Adler.
765
766         New header for dyld spi.
767         * WTF.xcodeproj/project.pbxproj:
768         * wtf/spi/darwin/dyldSPI.h: Added.
769
770 2016-05-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>
771
772         DOMPromise should only restrict the resolution type
773         https://bugs.webkit.org/show_bug.cgi?id=157307
774
775         Reviewed by Darin Adler.
776
777         * wtf/Ref.h: Adding static constexpr to ease detection of Ref for templates.
778         * wtf/RefPtr.h: Ditto.
779
780 2016-05-12  Daniel Bates  <dabates@apple.com>
781
782         Use SecTask SPI to retrieve code signing identifier for user directory suffix
783         https://bugs.webkit.org/show_bug.cgi?id=157570
784
785         Reviewed by Darin Adler.
786         <rdar://problem/25706517>
787
788         Forward declare SPI SecTaskCopySigningIdentifier().
789
790         * wtf/spi/cocoa/SecuritySPI.h:
791
792 2016-05-12  Csaba Osztrogonác  <ossy@webkit.org>
793
794         Remove ENABLE(ES6_ARROWFUNCTION_SYNTAX) guards
795         https://bugs.webkit.org/show_bug.cgi?id=157564
796
797         Reviewed by Darin Adler.
798
799         * wtf/FeatureDefines.h:
800
801 2016-05-10  Filip Pizlo  <fpizlo@apple.com>
802
803         Internal JSC profiler should have a timestamped log of events for each code block
804         https://bugs.webkit.org/show_bug.cgi?id=157538
805
806         Reviewed by Benjamin Poulain.
807
808         * wtf/PrintStream.h:
809         (WTF::PrintStream::print):
810
811 2016-05-10  Chris Dumez  <cdumez@apple.com>
812
813         Get rid of a lot of calls to RefPtr::release()
814         https://bugs.webkit.org/show_bug.cgi?id=157505
815
816         Reviewed by Alex Christensen.
817
818         Get rid of a lot of calls to RefPtr::release() and use WTFMove() instead.
819
820         * wtf/text/AtomicStringImpl.cpp:
821         (WTF::HashAndUTF8CharactersTranslator::translate):
822         * wtf/text/CString.cpp:
823         (WTF::CString::copyBufferIfNeeded):
824         * wtf/text/StringBuilder.cpp:
825         (WTF::StringBuilder::allocateBuffer):
826         (WTF::StringBuilder::allocateBufferUpConvert):
827         (WTF::StringBuilder::shrinkToFit):
828         * wtf/text/WTFString.cpp:
829         (WTF::String::append):
830         (WTF::String::insert):
831         (WTF::String::removeInternal):
832         * wtf/text/WTFString.h:
833         (WTF::String::String):
834         (WTF::String::operator=):
835         (WTF::String::releaseImpl):
836         (WTF::String::isNull): Deleted.
837
838 2016-05-08  Chris Dumez  <cdumez@apple.com>
839
840         [COCOA] Disable HAVE_DTRACE at build time
841         https://bugs.webkit.org/show_bug.cgi?id=157433
842         <rdar://problem/26148841>
843
844         Reviewed by Mark Lam.
845
846         Disable HAVE_DTRACE on COCOA since it is mostly unused and has a performance
847         impact, at least on iOS.
848
849         * wtf/Platform.h:
850
851 2016-05-08  Chris Dumez  <cdumez@apple.com>
852
853         [Bindings] Simplify [RequiresExistingAtomicString] IDL extended attribute handling
854         https://bugs.webkit.org/show_bug.cgi?id=157465
855
856         Reviewed by Darin Adler.
857
858         Add an AtomicString(RefPtr<AtomicStringImpl>&&) constructor that is now
859         used by the bindings when [RequiresExistingAtomicString] is used. This
860         is more efficient than using AtomicString(AtomicStringImpl*) as the
861         caller has a RefPtr<AtomicStringImpl> and is consistent with the
862         pre-existing String(RefPtr<AtomicStringImpl>&&) constructor.
863
864         * wtf/text/AtomicString.h:
865         (WTF::AtomicString::AtomicString):
866
867 2016-05-08  Darin Adler  <darin@apple.com>
868
869         * wtf/text/WTFString.h: Remove pragma once. Not working for some reason.
870
871 2016-05-08  Darin Adler  <darin@apple.com>
872
873         Follow-up to that last patch (missed review comments).
874
875         * wtf/text/WTFString.h: Use nullptr instead of 0 as needed. Also use pragma once.
876
877 2016-05-08  Darin Adler  <darin@apple.com>
878
879         Change EventSource constructor to take an IDL dictionary instead of a WebCore::Dictionary
880         https://bugs.webkit.org/show_bug.cgi?id=157459
881
882         Reviewed by Chris Dumez.
883
884         * wtf/text/WTFString.h: Export a symbol now used in WebCore.
885
886 2016-05-02  Sam Weinig  <sam@webkit.org>
887
888         On platforms that support it, use a SecTrustRef as the basis of CertificateInfo instead of a chain of SecCertificateRefs.
889         https://bugs.webkit.org/show_bug.cgi?id=157220
890
891         Reviewed by Darin Adler.
892
893         * wtf/Platform.h:
894         Add support for HAVE(SEC_TRUST_SERIALIZATION).
895
896         * wtf/spi/cocoa/SecuritySPI.h:
897         Add SPI access to SecTrustSerialize and SecTrustDeserialize.
898
899 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
900
901         Add HLE locks and synchronic TTAS locks to the ToyLocks benchmark suite
902         https://bugs.webkit.org/show_bug.cgi?id=157367
903
904         Rubber stamped by Benjamin Poulain.
905         
906         Turns out they are both a lot slower than WTF::Lock. The HLE lock is written according to Intel's
907         documentation. The synchronic lock follows the algorithm of the "ttas_lock" in the synchronic
908         test.hpp.
909
910         * benchmarks/ToyLocks.h:
911
912 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
913
914         Add a few more WTF locking benchmarks
915         https://bugs.webkit.org/show_bug.cgi?id=157365
916
917         Rubber stamped by Benjamin Poulain.
918         
919         Factors out our toy locks into ToyLocks.h and adds a new test (LockFairnessTest) that measures
920         the fairness of locks.
921         
922         The result: WTF::Lock is pretty fair enough.
923
924         * benchmarks/LockFairnessTest.cpp: Added.
925         (main):
926         * benchmarks/LockSpeedTest.cpp:
927         (main):
928         * benchmarks/ToyLocks.h: Added.
929
930 2016-05-04  Filip Pizlo  <fpizlo@apple.com>
931
932         Speed up JSGlobalObject initialization by making some properties lazy
933         https://bugs.webkit.org/show_bug.cgi?id=157045
934
935         Reviewed by Keith Miller.
936         
937         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
938         do this a lot:
939         
940             static void callback(Foo& foo) { ... }
941         
942             foo.setCallback(callback);
943         
944         But that's not very nice to write if many different setCallback() calls are inside of the
945         same very large function: you'll have to have a lot of static function definitions in
946         one part of the file, and then a bunch of setCallback() calls in another part. It's hard
947         to reason about what's going on with such code.
948         
949         So what if you wrote this instead:
950         
951             foo.setCallback([] (Foo& foo) { ... });
952         
953         Much nicer! There is a standard way to do this: lambdas that are stateless are
954         convertible to function pointers. This change also offers another approach that is a bit
955         more general.
956         
957         These additions to WTF help you do it:
958         
959         isStatelessLambda<Func>(): tells you if Func is a stateless lambda. This uses is_empty to
960         test if the lambda is stateless. This turns out to be a stronger property than
961         convertibility to function pointers. For example, a function pointer is convertible to a
962         function pointer, but it is definitely stateful: you cannot successfully call it if you
963         only has its type. On the other hand, a stateless lambda is really stateless in the sense
964         that you only need its type to call it.
965         
966         callStatelessLambda<ResultType, Func>(Arguments&&...): calls the given stateless lambda.
967         
968         JSC uses these to build up some sophisticated lazy-initialization APIs. The use of
969         statelessness allows JSC to combine a lambda with other logic into a single function
970         pointer.
971
972         * wtf/StdLibExtras.h:
973         (WTF::isStatelessLambda):
974         (WTF::callStatelessLambda):
975
976 2016-05-04  Per Arne Vollan  <peavo@outlook.com>
977
978         [Win] Use NeverDestroyed template.
979         https://bugs.webkit.org/show_bug.cgi?id=157345
980
981         Reviewed by Darin Adler.
982
983         * wtf/ThreadingWin.cpp:
984         (WTF::threadMapMutex):
985         (WTF::threadMap):
986
987 2016-05-04  Chris Dumez  <cdumez@apple.com>
988
989         Unreviewed, rolling out r200383 and r200406.
990
991         Seems to have caused crashes on iOS / ARMv7s
992
993         Reverted changesets:
994
995         "Speed up JSGlobalObject initialization by making some
996         properties lazy"
997         https://bugs.webkit.org/show_bug.cgi?id=157045
998         http://trac.webkit.org/changeset/200383
999
1000         "REGRESSION(r200383): Setting lazily initialized properties
1001         across frame boundaries crashes"
1002         https://bugs.webkit.org/show_bug.cgi?id=157333
1003         http://trac.webkit.org/changeset/200406
1004
1005 2016-05-03  Filip Pizlo  <fpizlo@apple.com>
1006
1007         Speed up JSGlobalObject initialization by making some properties lazy
1008         https://bugs.webkit.org/show_bug.cgi?id=157045
1009
1010         Reviewed by Keith Miller.
1011         
1012         This WTF change is at the heart of a large JSC change. In JSC I found myself wanting to
1013         do this a lot:
1014         
1015             static void callback(Foo& foo) { ... }
1016         
1017             foo.setCallback(callback);
1018         
1019         But that's not very nice to write if many different setCallback() calls are inside of the
1020         same very large function: you'll have to have a lot of static function definitions in
1021         one part of the file, and then a bunch of setCallback() calls in another part. It's hard
1022         to reason about what's going on with such code.
1023         
1024         So what if you wrote this instead:
1025         
1026             foo.setCallback([] (Foo& foo) { ... });
1027         
1028         Much nicer! There is a standard way to do this: lambdas that are stateless are
1029         convertible to function pointers. This change also offers another approach that is a bit
1030         more general.
1031         
1032         These additions to WTF help you do it:
1033         
1034         isStatelessLambda<Func>(): tells you if Func is a stateless lambda. This uses is_empty to
1035         test if the lambda is stateless. This turns out to be a stronger property than
1036         convertibility to function pointers. For example, a function pointer is convertible to a
1037         function pointer, but it is definitely stateful: you cannot successfully call it if you
1038         only has its type. On the other hand, a stateless lambda is really stateless in the sense
1039         that you only need its type to call it.
1040         
1041         callStatelessLambda<ResultType, Func>(Arguments&&...): calls the given stateless lambda.
1042         
1043         JSC uses these to build up some sophisticated lazy-initialization APIs. The use of
1044         statelessness allows JSC to combine a lambda with other logic into a single function
1045         pointer.
1046
1047         * wtf/StdLibExtras.h:
1048         (WTF::isStatelessLambda):
1049         (WTF::callStatelessLambda):
1050
1051 2016-05-03  Per Arne Vollan  <peavo@outlook.com>
1052
1053         [Win] Remove Windows XP Compatibility Requirements
1054         https://bugs.webkit.org/show_bug.cgi?id=152899
1055
1056         Reviewed by Brent Fulgham.
1057
1058         Windows XP is not supported anymore, we can remove workarounds.
1059
1060         * wtf/Assertions.cpp:
1061
1062 2016-05-03  Per Arne Vollan  <peavo@outlook.com>
1063
1064         [Win] Warning fix.
1065         https://bugs.webkit.org/show_bug.cgi?id=157309
1066
1067         Reviewed by Darin Adler.
1068
1069         MSVC gives a warning when converting from signed to unsigned.
1070
1071         * wtf/SmallPtrSet.h:
1072         (WTF::SmallPtrSet::begin):
1073
1074 2016-05-02  Brady Eidson  <beidson@apple.com>
1075
1076         Add the ability to accumulate logs for specific logging channels to help diagnose test timeouts.
1077         https://bugs.webkit.org/show_bug.cgi?id=157274
1078
1079         Reviewed by Alex Christensen.
1080
1081         This patch changes WTFLog to add the logging string to the logging accumulator if the logging channel says so.
1082         It also adds support for using this new accumulation mechanism.
1083
1084         * WTF.xcodeproj/project.pbxproj:
1085
1086         * wtf/Assertions.cpp:
1087         (WTF::resetAccumulatedLogs):
1088         (WTF::getAndResetAccumulatedLogs):
1089         * wtf/Assertions.h:
1090
1091         * wtf/LoggingAccumulator.h: Added. Expose functions to get accumulated logs and to reset the accumulation.
1092
1093         * wtf/text/WTFString.cpp:
1094         (WTF::String::format): Update to handle %@ on CF (Well, really ObjC) platforms.
1095
1096 2016-05-02  Per Arne Vollan  <peavo@outlook.com>
1097
1098         [Win] Enable IndexedDB.
1099         https://bugs.webkit.org/show_bug.cgi?id=157192
1100
1101         Reviewed by Brent Fulgham.
1102
1103         Fix compile errors when format specifiers like PRIu64 is used, by defining
1104         __STDC_FORMAT_MACROS before inttypes.h is included.
1105
1106         * wtf/Platform.h: 
1107
1108 2016-04-27  Brady Eidson  <beidson@apple.com>
1109
1110         Modern IDB: Implement native IDBFactory.getAllDatabaseNames for WebInspector.
1111         https://bugs.webkit.org/show_bug.cgi?id=157072
1112
1113         Reviewed by Alex Christensen.
1114
1115         Moved these Hex Digit utilities from WebCore URL code (???), 
1116         and add a checked version of getting the hex digit value.
1117         
1118         * wtf/HexNumber.h:
1119         (WTF::isHexDigit):
1120         (WTF::uncheckedHexDigit):
1121         (WTF::hexDigitValue):
1122         (WTF::uncheckedHexDigitValue):
1123
1124 2016-04-25  Ryosuke Niwa  <rniwa@webkit.org>
1125
1126         Remove the build flag for template elements
1127         https://bugs.webkit.org/show_bug.cgi?id=157022
1128
1129         Reviewed by Daniel Bates.
1130
1131         * wtf/FeatureDefines.h:
1132
1133 2016-04-25  Fujii Hironori  <Hironori.Fujii@sony.com>
1134
1135         Heap corruption is detected when destructing JSGlobalObject
1136         https://bugs.webkit.org/show_bug.cgi?id=156831
1137
1138         Reviewed by Mark Lam.
1139
1140         WebKit uses CRT static library on Windows.  Each copy of the CRT
1141         library has its own heap manager, allocating memory in one CRT
1142         library and passing the pointer across a DLL boundary to be freed
1143         by a different copy of the CRT library is a potential cause for
1144         heap corruption.
1145
1146           Potential Errors Passing CRT Objects Across DLL Boundaries
1147           <https://msdn.microsoft.com/en-us/library/ms235460(v=vs.140).aspx>
1148
1149         JSGlobalObject::createRareDataIfNeeded is inlined but
1150         JSGlobalObject::~JSGlobalObject is not.  Then, the heap of
1151         allocating JSGlobalObjectRareData is WebKit.dll, but deallocating
1152         JavaScriptCore.dll.  Adding WTF_MAKE_FAST_ALLOCATED to
1153         JSGlobalObjectRareData ensures heap consistency of it.  WTF::Lock
1154         also needs WTF_MAKE_FAST_ALLOCATED because it is allocated from
1155         the inlined constructor of JSGlobalObjectRareData.
1156
1157         * wtf/Lock.h: Add WTF_MAKE_FAST_ALLOCATED.
1158
1159 2016-04-21  Saam barati  <sbarati@apple.com>
1160
1161         Lets do less locking of symbol tables in the BytecodeGenerator where we don't have race conditions
1162         https://bugs.webkit.org/show_bug.cgi?id=156821
1163
1164         Reviewed by Filip Pizlo.
1165
1166         This patch introduces a new constructor for Locker which implies no
1167         locking is necessary. You instantiate such a locker like so:
1168         `Locker<Lock> locker(Locker<Lock>::NoLockingNecessary);`
1169
1170         This is useful to for very specific places when it is not yet
1171         required to engage in a specified locking protocol. As an example,
1172         we use this in JSC when we allocate a particular object that
1173         engages in a locking protocol with the concurrent compiler thread,
1174         but before a concurrent compiler thread that could have access
1175         to the object exists.
1176
1177         * wtf/Locker.h:
1178         (WTF::Locker::Locker):
1179         (WTF::Locker::~Locker):
1180
1181 2016-04-19  Michael Saboff  <msaboff@apple.com>
1182
1183         iTunes crashing JavaScriptCore.dll
1184         https://bugs.webkit.org/show_bug.cgi?id=156647
1185
1186         Reviewed by Filip Pizlo.
1187
1188         If a thread was created without using the WTF thread apis and that thread uses
1189         a JavaScript VM and that thread exits with the VM still around, JSC won't know
1190         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
1191         clean up any thread specific keys.  Cleaning up these keys is how JSC is
1192         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
1193         wtfThreadEntryPoint() when the thread entry point function returns.
1194         This mechanism was put in place for Windows because we layer the WTF::ThreadSpecific
1195         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
1196         a thread exiting callback the way that pthread_create_key does.
1197
1198         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
1199         Windows allows multiple fibers per thread, WebKit is not designed to work with a
1200         multiple fibers per thread.  When there is only one fiber per thread, FLS works just
1201         like TLS, but it has the destroy callback.
1202
1203         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
1204         as the pthread version.  Added THREAD_SPECIFIC_CALL to set the correct
1205         calling convenction for Windows 32 bit.
1206
1207         * wtf/ThreadSpecific.h:
1208         (WTF::threadSpecificKeyCreate):
1209         (WTF::threadSpecificKeyDelete):
1210         (WTF::threadSpecificSet):
1211         (WTF::threadSpecificGet):
1212         (WTF::ThreadSpecific<T>::ThreadSpecific):
1213         (WTF::ThreadSpecific<T>::~ThreadSpecific):
1214         (WTF::ThreadSpecific<T>::get):
1215         (WTF::ThreadSpecific<T>::set):
1216         (WTF::ThreadSpecific<T>::destroy):
1217         Restructured to use FLS.  Renamed TLS* to FLS*.
1218
1219         * wtf/ThreadSpecificWin.cpp:
1220         (WTF::flsKeyCount):
1221         (WTF::flsKeys):
1222         Renamed from tlsKey*() to flsKey*().
1223
1224         (WTF::destructorsList): Deleted.
1225         (WTF::destructorsMutex): Deleted.
1226         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
1227         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
1228         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
1229         (WTF::PlatformThreadSpecificKey::value): Deleted.
1230         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
1231         (WTF::tlsKeyCount): Deleted.
1232         (WTF::tlsKeys): Deleted.
1233         (WTF::threadSpecificKeyCreate): Deleted.
1234         (WTF::threadSpecificKeyDelete): Deleted.
1235         (WTF::threadSpecificSet): Deleted.
1236         (WTF::threadSpecificGet): Deleted.
1237         (WTF::ThreadSpecificThreadExit): Deleted.
1238
1239         * wtf/ThreadingWin.cpp:
1240         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
1241
1242 2016-04-19  Filip Pizlo  <fpizlo@apple.com>
1243
1244         Add more locking algorithms to the LockSpeedTest.
1245
1246         Rubber stamped by Saam Barati.
1247
1248         * benchmarks/LockSpeedTest.cpp:
1249         (main):
1250
1251 2016-04-19  Filip Pizlo  <fpizlo@apple.com>
1252
1253         Clean up the ParkingLot uparking API a bit
1254         https://bugs.webkit.org/show_bug.cgi?id=156746
1255
1256         Reviewed by Saam Barati and Geoffrey Garen.
1257         
1258         Previously, unparkOne() would either return a boolean to tell you if there are any more threads on
1259         the queue or it would pass your callback a pair of booleans - one to tell if a thread was unparked
1260         and another to tell if there are any more threads. This was an annoying inconsistency. What if you
1261         wanted to know if unparkOne() unparked a thread but you don't care to use callbacks?
1262
1263         This fixes unparkOne() to use a struct called UnparkResult for both of its variants. This makes the
1264         code a bit cleaner.
1265
1266         * wtf/Atomics.h: Add some more atomic ops.
1267         (WTF::Atomic::exchangeAndAdd):
1268         (WTF::Atomic::exchange):
1269         * wtf/Condition.h: Change calls to unparkOne().
1270         (WTF::ConditionBase::notifyOne):
1271         * wtf/Lock.cpp: Change calls to unparkOne().
1272         (WTF::LockBase::unlockSlow):
1273         * wtf/ParkingLot.cpp:
1274         (WTF::ParkingLot::parkConditionally):
1275         (WTF::ParkingLot::unparkOne):
1276         * wtf/ParkingLot.h: Switch to using ScopedLambda and introduce UnparkResult.
1277
1278 2016-04-19  Commit Queue  <commit-queue@webkit.org>
1279
1280         Unreviewed, rolling out r199726.
1281         https://bugs.webkit.org/show_bug.cgi?id=156748
1282
1283         WebKit tests crash on Windows 32 (Requested by msaboff on
1284         #webkit).
1285
1286         Reverted changeset:
1287
1288         "iTunes crashing JavaScriptCore.dll"
1289         https://bugs.webkit.org/show_bug.cgi?id=156647
1290         http://trac.webkit.org/changeset/199726
1291
1292 2016-04-19  Michael Saboff  <msaboff@apple.com>
1293
1294         iTunes crashing JavaScriptCore.dll
1295         https://bugs.webkit.org/show_bug.cgi?id=156647
1296
1297         Reviewed by Saam Barati.
1298
1299         If a thread was created without using the WTF thread apis and that thread uses
1300         a JavaScript VM and that thread exits with the VM still around, JSC won't know
1301         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
1302         clean up any thread specific keys.  Cleaning up these keys is how JSC is
1303         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
1304         wtfThreadEntryPoint() when the thread entry point function returns.
1305         This mechanism was put in place for Windows because we layer the WTF::ThreadSpecific
1306         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
1307         a thread exiting callback the way that pthread_create_key.
1308
1309         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
1310         Windows allows multiple fibers per thread, WebKit is not designed to work with a
1311         multiple fibers per thread.  When there is only one fiber per thread, FLS works just
1312         like TLS, but it has the destroy callback.
1313
1314         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
1315         as the pthread version.
1316
1317         * wtf/ThreadSpecific.h:
1318         (WTF::threadSpecificKeyCreate):
1319         (WTF::threadSpecificKeyDelete):
1320         (WTF::threadSpecificSet):
1321         (WTF::threadSpecificGet):
1322         (WTF::ThreadSpecific<T>::ThreadSpecific):
1323         (WTF::ThreadSpecific<T>::~ThreadSpecific):
1324         (WTF::ThreadSpecific<T>::get):
1325         (WTF::ThreadSpecific<T>::set):
1326         (WTF::ThreadSpecific<T>::destroy):
1327         Restructured to use FLS.  Renamed TLS* to FLS*.
1328
1329         * wtf/ThreadSpecificWin.cpp:
1330         (WTF::flsKeyCount):
1331         (WTF::flsKeys):
1332         Renamed from tlsKey*() to flsKey*().
1333
1334         (WTF::destructorsList): Deleted.
1335         (WTF::destructorsMutex): Deleted.
1336         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
1337         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
1338         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
1339         (WTF::PlatformThreadSpecificKey::value): Deleted.
1340         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
1341         (WTF::tlsKeyCount): Deleted.
1342         (WTF::tlsKeys): Deleted.
1343         (WTF::threadSpecificKeyCreate): Deleted.
1344         (WTF::threadSpecificKeyDelete): Deleted.
1345         (WTF::threadSpecificSet): Deleted.
1346         (WTF::threadSpecificGet): Deleted.
1347         (WTF::ThreadSpecificThreadExit): Deleted.
1348
1349         * wtf/ThreadingWin.cpp:
1350         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
1351
1352 2016-04-19  Yusuke Suzuki  <utatane.tea@gmail.com>
1353
1354         [GTK] Use Generic WorkQueue instead of WorkQueueGLib
1355         https://bugs.webkit.org/show_bug.cgi?id=156721
1356
1357         Reviewed by Benjamin Poulain.
1358
1359         WorkQueueGLib includes platform-dependent part only for WorkQueue::dispatchAfter.
1360         However, its code is related to RunLoopGLib rather than WorkQueueGLib.
1361         In this patch, we move the code from WorkQueueGLib to RunLoopGLib, drop WorkQueueGLib
1362         and use WorkQueueGeneric.
1363
1364         * wtf/PlatformGTK.cmake:
1365         * wtf/RunLoop.h:
1366         * wtf/WorkQueue.h:
1367         * wtf/glib/RunLoopGLib.cpp:
1368         (WTF::DispatchAfterContext::DispatchAfterContext):
1369         (WTF::DispatchAfterContext::dispatch):
1370         (WTF::RunLoop::dispatchAfter):
1371         * wtf/glib/WorkQueueGLib.cpp: Removed.
1372         (WTF::WorkQueue::platformInitialize): Deleted.
1373         (WTF::WorkQueue::platformInvalidate): Deleted.
1374         (WTF::WorkQueue::dispatch): Deleted.
1375         (WTF::DispatchAfterContext::DispatchAfterContext): Deleted.
1376         (WTF::DispatchAfterContext::~DispatchAfterContext): Deleted.
1377         (WTF::DispatchAfterContext::dispatch): Deleted.
1378         (WTF::WorkQueue::dispatchAfter): Deleted.
1379
1380 2016-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>
1381
1382         [JSCOnly] Implement RunLoop and remove glib dependency
1383         https://bugs.webkit.org/show_bug.cgi?id=155706
1384
1385         Reviewed by Michael Catanzaro.
1386
1387         Add missing RunLoop and WorkQueue platform code for JSCOnly port.
1388         The implementation does not use platform specific things. Instead, we
1389         implement them on WTF framework; using condition variables to construct
1390         the run loop and timers.
1391
1392         Since the fallback is implemented, it is not necessary for JSCOnly port
1393         to depend on GLib's RunLoop abstraction. So this patch removes its
1394         dependency. As a result, now, JSCOnly port removes dependencies except for the system ICU.
1395
1396         We clean up event loop ifdefs by introducing USE_XXX_EVENT_LOOP flags.
1397         USE(XXX_EVENT_LOOP) is exclusive to each other. So from now, we do not need to take care
1398         of the order of if-defs for the event loops. (For example, USE(GLIB) should have lead before
1399         OS(DARWIN) in WorkQueue.h for WebKitGTK on Darwin.)
1400
1401         EVENT_LOOP determination is done in Platform.h. This follows the style of WTF PLATFORM.
1402
1403         * wtf/Platform.h:
1404         * wtf/PlatformJSCOnly.cmake:
1405         * wtf/RunLoop.h:
1406         * wtf/WorkQueue.h:
1407         * wtf/generic/MainThreadGeneric.cpp: Renamed from Source/WTF/wtf/none/MainThreadNone.cpp.
1408         (WTF::initializeMainThreadPlatform):
1409         (WTF::scheduleDispatchFunctionsOnMainThread):
1410         * wtf/generic/RunLoopGeneric.cpp: Added.
1411         (WTF::RunLoop::TimerBase::ScheduledTask::create):
1412         (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
1413         (WTF::RunLoop::TimerBase::ScheduledTask::fired):
1414         (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
1415         (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
1416         (WTF::RunLoop::TimerBase::ScheduledTask::EarliestSchedule::operator()):
1417         (WTF::RunLoop::TimerBase::ScheduledTask::isActive):
1418         (WTF::RunLoop::TimerBase::ScheduledTask::deactivate):
1419         (WTF::RunLoop::RunLoop):
1420         (WTF::RunLoop::~RunLoop):
1421         (WTF::RunLoop::populateTasks):
1422         (WTF::RunLoop::runImpl):
1423         (WTF::RunLoop::run):
1424         (WTF::RunLoop::iterate):
1425         (WTF::RunLoop::stop):
1426         (WTF::RunLoop::wakeUp):
1427         (WTF::RunLoop::schedule):
1428         (WTF::RunLoop::scheduleAndWakeUp):
1429         (WTF::RunLoop::dispatchAfter):
1430         (WTF::RunLoop::TimerBase::TimerBase):
1431         (WTF::RunLoop::TimerBase::~TimerBase):
1432         (WTF::RunLoop::TimerBase::start):
1433         (WTF::RunLoop::TimerBase::stop):
1434         (WTF::RunLoop::TimerBase::isActive):
1435         * wtf/generic/WorkQueueGeneric.cpp: Added.
1436         (WorkQueue::platformInitialize):
1437         (WorkQueue::platformInvalidate):
1438         (WorkQueue::dispatch):
1439         (WorkQueue::dispatchAfter):
1440         * wtf/none/MainThreadNone.cpp:
1441         (WTF::initializeMainThreadPlatform): Deleted.
1442         (WTF::scheduleDispatchFunctionsOnMainThread): Deleted.
1443         * wtf/none/RunLoopNone.cpp:
1444         (WTF::RunLoop::RunLoop): Deleted.
1445         (WTF::RunLoop::~RunLoop): Deleted.
1446         (WTF::RunLoop::run): Deleted.
1447         (WTF::RunLoop::stop): Deleted.
1448         (WTF::RunLoop::wakeUp): Deleted.
1449         (WTF::RunLoop::TimerBase::TimerBase): Deleted.
1450         (WTF::RunLoop::TimerBase::~TimerBase): Deleted.
1451         (WTF::RunLoop::TimerBase::start): Deleted.
1452         (WTF::RunLoop::TimerBase::stop): Deleted.
1453         (WTF::RunLoop::TimerBase::isActive): Deleted.
1454         * wtf/none/WorkQueueNone.cpp:
1455         (WorkQueue::platformInitialize): Deleted.
1456         (WorkQueue::platformInvalidate): Deleted.
1457         (WorkQueue::dispatch): Deleted.
1458         (WorkQueue::dispatchAfter): Deleted.
1459
1460 2016-04-18  Commit Queue  <commit-queue@webkit.org>
1461
1462         Unreviewed, rolling out r199621.
1463         https://bugs.webkit.org/show_bug.cgi?id=156708
1464
1465         made windows tests crash (Requested by alexchristensen on
1466         #webkit).
1467
1468         Reverted changeset:
1469
1470         "iTunes crashing JavaScriptCore.dll"
1471         https://bugs.webkit.org/show_bug.cgi?id=156647
1472         http://trac.webkit.org/changeset/199621
1473
1474 2016-04-15  Michael Saboff  <msaboff@apple.com>
1475
1476         iTunes crashing JavaScriptCore.dll
1477         https://bugs.webkit.org/show_bug.cgi?id=156647
1478
1479         Reviewed by Geoffrey Garen.
1480
1481         If a thread was created without using the WTF thread apis and that thread uses
1482         a JavaScript VM and that thread exits with the VM still around, JSC won't know
1483         that the thread has exited.  Currently, we use ThreadSpecificThreadExit() to
1484         clean up any thread specific keys.  Cleaning up these keys is how JSC is
1485         notified of a thread exit.  We only call ThreadSpecificThreadExit() from
1486         wtfThreadEntryPoint() when the thread entry point function returns.
1487         This mechanism was put in place for Windos because we layer the WTF::ThreadSpecific
1488         functionality on top of TLS (Thread Local Storage), but TLS doesn't have
1489         a thread exiting callback the way that pthread_create_key.
1490
1491         The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
1492         Windows allows multiple fibers per thread, WebKit is not designed to work with a
1493         multiple fibers per thread.  When ther is only one fiber per thread, FLS works just
1494         like TLS, but it has the destroy callback.
1495
1496         I restructured the Windows version of WTF::ThreadSpecific to be almost the same
1497         as the pthread version.
1498         
1499         * wtf/ThreadSpecific.h:
1500         (WTF::threadSpecificKeyCreate):
1501         (WTF::threadSpecificKeyDelete):
1502         (WTF::threadSpecificSet):
1503         (WTF::threadSpecificGet):
1504         (WTF::ThreadSpecific<T>::ThreadSpecific):
1505         (WTF::ThreadSpecific<T>::~ThreadSpecific):
1506         (WTF::ThreadSpecific<T>::get):
1507         (WTF::ThreadSpecific<T>::set):
1508         (WTF::ThreadSpecific<T>::destroy):
1509         Restructured to use FLS.  Renamed TLS* to FLS*.
1510
1511         * wtf/ThreadSpecificWin.cpp:
1512         (WTF::flsKeyCount):
1513         (WTF::flsKeys):
1514         Renamed from tlsKey*() to flsKey*().
1515
1516         (WTF::destructorsList): Deleted.
1517         (WTF::destructorsMutex): Deleted.
1518         (WTF::PlatformThreadSpecificKey::PlatformThreadSpecificKey): Deleted.
1519         (WTF::PlatformThreadSpecificKey::~PlatformThreadSpecificKey): Deleted.
1520         (WTF::PlatformThreadSpecificKey::setValue): Deleted.
1521         (WTF::PlatformThreadSpecificKey::value): Deleted.
1522         (WTF::PlatformThreadSpecificKey::callDestructor): Deleted.
1523         (WTF::tlsKeyCount): Deleted.
1524         (WTF::tlsKeys): Deleted.
1525         (WTF::threadSpecificKeyCreate): Deleted.
1526         (WTF::threadSpecificKeyDelete): Deleted.
1527         (WTF::threadSpecificSet): Deleted.
1528         (WTF::threadSpecificGet): Deleted.
1529         (WTF::ThreadSpecificThreadExit): Deleted.
1530
1531         * wtf/ThreadingWin.cpp:
1532         (WTF::wtfThreadEntryPoint): Eliminated call to ThreadSpecificThreadExit.
1533
1534 2016-04-12  Filip Pizlo  <fpizlo@apple.com>
1535
1536         PolymorphicAccess should buffer AccessCases before regenerating
1537         https://bugs.webkit.org/show_bug.cgi?id=156457
1538
1539         Reviewed by Benjamin Poulain.
1540
1541         * wtf/TinyPtrSet.h:
1542         (WTF::TinyPtrSet::add): Add a helpful comment because I had forgotten what the bool return meant.
1543
1544 2016-04-12  Tomas Popela  <tpopela@redhat.com>
1545
1546         S390X and PPC64 architectures detection is wrong
1547         https://bugs.webkit.org/show_bug.cgi?id=156337
1548
1549         Reviewed by Carlos Garcia Campos.
1550
1551         After the http://trac.webkit.org/changeset/198919 was committed
1552         it showed that the PPC64 detection is wrong as the CPU(PPC) path was
1553         activated even for PPC64. The thing is that GCC defines __ppc__
1554         even on PPC64 and not just on PPC(32). The same applies for S390X.
1555
1556         * wtf/Platform.h:
1557
1558 2016-04-05  Oliver Hunt  <oliver@apple.com>
1559
1560         Remove compile time define for SEPARATED_HEAP
1561         https://bugs.webkit.org/show_bug.cgi?id=155508
1562
1563         Reviewed by Mark Lam.
1564
1565         * wtf/FeatureDefines.h:
1566         * wtf/Platform.h:
1567
1568 2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>
1569
1570         [CMake] Make FOLDER property INHERITED
1571         https://bugs.webkit.org/show_bug.cgi?id=156460
1572
1573         Reviewed by Brent Fulgham.
1574
1575         * CMakeLists.txt:
1576         Set FOLDER directory property
1577
1578 2016-04-08  Alex Christensen  <achristensen@webkit.org>
1579
1580         Progress towards running CMake WebKit2 on Mac
1581         https://bugs.webkit.org/show_bug.cgi?id=156426
1582
1583         Reviewed by Tim Horton.
1584
1585         * wtf/PlatformMac.cmake:
1586
1587 2016-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>
1588
1589         [JSC] Enable Concurrent JIT by default
1590         https://bugs.webkit.org/show_bug.cgi?id=156341
1591
1592         Reviewed by Filip Pizlo.
1593
1594         We enable Concurrent JIT by default when DFG JIT and JSVALUE64 are enabled.
1595         This change offers Concurrent JIT to the JSCOnly port.
1596
1597         * wtf/Platform.h:
1598
1599 2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>
1600
1601         Remove ENABLE(ENABLE_ES6_CLASS_SYNTAX) guards
1602         https://bugs.webkit.org/show_bug.cgi?id=156384
1603
1604         Reviewed by Ryosuke Niwa.
1605
1606         * wtf/FeatureDefines.h:
1607
1608 2016-04-06  Filip Pizlo  <fpizlo@apple.com>
1609
1610         JSC should have a simple way of gathering IC statistics
1611         https://bugs.webkit.org/show_bug.cgi?id=156317
1612
1613         Reviewed by Benjamin Poulain.
1614         
1615         Make it easier to do relative sleeping on a condition. Previously you could do this using
1616         std::chrono. I now believe that std::chrono is just a bad decision, and I always want to
1617         use doubles instead. This makes it easier to do the right thing and use doubles.
1618
1619         * wtf/Condition.h:
1620         (WTF::ConditionBase::waitUntilMonotonicClockSeconds):
1621         (WTF::ConditionBase::waitForSeconds):
1622
1623 2016-04-06  Simon Fraser  <simon.fraser@apple.com>
1624
1625         Fix Windows build by converting clampToInteger() into a template that only
1626         takes integral types.
1627
1628         * wtf/MathExtras.h:
1629         (clampToInteger):
1630
1631 2016-04-06  Simon Fraser  <simon.fraser@apple.com>
1632
1633         Page tiles are missing when graphics acceleration is unavailable
1634         https://bugs.webkit.org/show_bug.cgi?id=156325
1635
1636         Reviewed by Tim Horton.
1637
1638         Add clampToInteger(size_t).
1639
1640         * wtf/MathExtras.h:
1641         (clampToInteger):
1642
1643 2016-04-05  Simon Fraser  <simon.fraser@apple.com>
1644
1645         Implement operator== and operator!= for Optional<>
1646         https://bugs.webkit.org/show_bug.cgi?id=156266
1647
1648         Reviewed by Anders Carlsson.
1649         
1650         Implement non-member operator== and operator!= variants for Optional<>.
1651
1652         * wtf/Optional.h:
1653         (WTF::operator==):
1654         (WTF::operator!=):
1655
1656 2016-03-19  Filip Pizlo  <fpizlo@apple.com>
1657
1658         DFG and FTL should constant-fold RegExpExec
1659         https://bugs.webkit.org/show_bug.cgi?id=155270
1660
1661         Reviewed by Saam Barati.
1662
1663         Make executeInsertions() return the amount by which the vector increased in size. This is a
1664         convenient feature that I use in DFG::InsertionSet.
1665
1666         * wtf/Insertion.h:
1667         (WTF::executeInsertions):
1668
1669 2016-04-05  Antoine Quint  <graouts@apple.com>
1670
1671         [WebGL2] Allow enabling WebGL2 with a runtime flag
1672         https://bugs.webkit.org/show_bug.cgi?id=156166
1673         <rdar://problem/25526929>
1674
1675         Removed the manual overrides of ENABLE_WEBGL2.
1676
1677         Reviewed by Dean Jackson.
1678
1679         * wtf/FeatureDefines.h:
1680
1681 2016-03-31  Konstantin Tokarev  <annulen@yandex.ru>
1682
1683         Removed leftovers of ENABLE(INSPECTOR) and ENABLE(VIEWPORT).
1684         https://bugs.webkit.org/show_bug.cgi?id=156064
1685
1686         Reviewed by Csaba Osztrogonác.
1687
1688         This ifdef guards were removed in r178820 and r147714, respectively.
1689
1690         * wtf/FeatureDefines.h:
1691
1692 2016-03-31  Brent Fulgham  <bfulgham@apple.com>
1693
1694         [WK2] Support download attribute feature
1695         https://bugs.webkit.org/show_bug.cgi?id=102914
1696         <rdar://problem/13177492>
1697
1698         Reviewed by Darin Adler.
1699
1700         * wtf/FeatureDefines.h: Turn the ENABLE_DOWNLOAD_ATTRIBUTE flag
1701         on to see what happens.
1702
1703 2016-03-30  Brian Burg  <bburg@apple.com>
1704
1705         Web Automation: Add Automation.performKeyboardInteractions
1706         https://bugs.webkit.org/show_bug.cgi?id=155990
1707         <rdar://problem/25426408>
1708
1709         Reviewed by Timothy Hatcher.
1710
1711         Add a missing NSEventType declaration.
1712
1713         * wtf/mac/AppKitCompatibilityDeclarations.h:
1714
1715 2016-03-29  Benjamin Poulain  <bpoulain@apple.com>
1716
1717         [WTF] Removing a smart pointer from HashTable issues two stores to the same location
1718         https://bugs.webkit.org/show_bug.cgi?id=155676
1719
1720         Reviewed by Darin Adler.
1721
1722         While working on the hot loop of r198376, I noticed something
1723         weird...
1724         Every time we removed a smart pointer from the hash table,
1725         the code generated was something like:
1726             Load([bucket]) -> Tmp
1727             Store(0 -> [bucket])
1728             JumpIfZero(Tmp, ->End)
1729             Call fastFree()
1730             Store(-1 -> [bucket])
1731             -> End:
1732
1733         The useless store before the branch is annoying, especially on ARM.
1734
1735         Here is what happens:
1736             1) The destructor of the smart pointer swaps its internal value with nullptr.
1737             2) Since the smart pointer is not a local in-register value, that nullptr
1738                is stored in memory because it could be observable from fastFree().
1739             3) The destructor destroy the value if not zero (or deref for RefPtr).
1740                The "if-not-zero" may or may not be eliminated depending on what
1741                is between getting the iterator and the call to remove().
1742             4) fastFree() is called.
1743             5) The deleted value is set in the bucket.
1744
1745         This patch adds custom deletion for those cases to avoid the useless
1746         store. The useless null check is still eliminated when we are lucky.
1747
1748         I went this path instead of changing the destructor of RefPtr for two reasons:
1749         -I need this to work in unique_ptr for JSC.
1750         -Nulling the memory may have security advantages in the cases where we do not immediately
1751          write over that memory again.
1752
1753         This patch removes 13kb out of x86_64 WebCore.
1754
1755         * wtf/HashTable.h:
1756         (WTF::HashTable::deleteBucket):
1757         (WTF::KeyTraits>::removeIf):
1758         * wtf/HashTraits.h:
1759         (WTF::HashTraits<RefPtr<P>>::customDeleteBucket):
1760         (WTF::hashTraitsDeleteBucket):
1761         (WTF::KeyValuePairHashTraits::customDeleteBucket):
1762         * wtf/text/AtomicStringHash.h:
1763         (WTF::HashTraits<WTF::AtomicString>::isEmptyValue):
1764         (WTF::HashTraits<WTF::AtomicString>::customDeleteBucket):
1765         * wtf/text/StringHash.h:
1766         (WTF::HashTraits<String>::customDeleteBucket):
1767
1768 2016-03-28  Brian Burg  <bburg@apple.com>
1769
1770         Web Automation: implement Automation.performMouseInteraction
1771         https://bugs.webkit.org/show_bug.cgi?id=155606
1772         <rdar://problem/25227576>
1773
1774         Reviewed by Timothy Hatcher.
1775
1776         * wtf/mac/AppKitCompatibilityDeclarations.h: Add missing some NSEventTypes.
1777
1778 2016-03-29  Yusuke Suzuki  <utatane.tea@gmail.com>
1779
1780         REGRESSION(r192914): 10% regression on Sunspider's date-format-tofte
1781         https://bugs.webkit.org/show_bug.cgi?id=155559
1782
1783         Reviewed by Saam Barati.
1784
1785         Add HashTable::inlineLookup and HashMap::fastGet.
1786
1787         * wtf/HashMap.h:
1788         * wtf/HashTable.h:
1789
1790 2016-03-25  Alex Christensen  <achristensen@webkit.org>
1791
1792         Add a compile time flag for using QTKit
1793         https://bugs.webkit.org/show_bug.cgi?id=155868
1794
1795         Reviewed by Dan Bates.
1796
1797         * wtf/Platform.h:
1798
1799 2016-03-24  Alex Christensen  <achristensen@webkit.org>
1800
1801         Fix iOS9 performance regression after r197572
1802         https://bugs.webkit.org/show_bug.cgi?id=155845
1803         <rdar://problem/25144924>
1804
1805         Reviewed by Chris Dumez.
1806
1807         * wtf/Platform.h:
1808         Use CFURLConnection instead of NSURLConnection on internal iOS9 builds.
1809
1810 2016-03-23  Saam Barati  <sbarati@apple.com>
1811
1812         SmallPtrSet leaks memory in its move assignment operator when !this->isSmall()
1813         https://bugs.webkit.org/show_bug.cgi?id=155701
1814
1815         Reviewed by Darin Adler.
1816
1817         * wtf/SmallPtrSet.h:
1818         (WTF::SmallPtrSet::SmallPtrSet):
1819         (WTF::SmallPtrSet::operator=):
1820
1821 2016-03-22  Per Arne Vollan  <peavo@outlook.com>
1822
1823         [Win] [64-bit] Remove MSVC 2013 FMA3 Bug Workaround
1824         https://bugs.webkit.org/show_bug.cgi?id=141499
1825
1826         Reviewed by Brent Fulgham.
1827
1828         As we have moved on to VS2015, this workaround is no longer needed.
1829
1830         * wtf/PlatformWin.cmake:
1831         * wtf/win/WTFDLL.cpp: Removed.
1832
1833 2016-03-20  Dan Bernstein  <mitz@apple.com>
1834
1835         [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
1836         https://bugs.webkit.org/show_bug.cgi?id=155707
1837         <rdar://problem/24980691>
1838
1839         Reviewed by Darin Adler.
1840
1841         * Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR based on the last
1842           component of MACOSX_DEPLOYMENT_TARGET.
1843         * Configurations/DebugRelease.xcconfig: For engineering builds, preserve the behavior of
1844           TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.
1845
1846 2016-03-20  Dan Bernstein  <mitz@apple.com>
1847
1848         Update build settings
1849
1850         Rubber-stamped by Andy Estes.
1851
1852         * Configurations/DebugRelease.xcconfig:
1853
1854 2016-03-17  Benjamin Poulain  <bpoulain@apple.com>
1855
1856         [JSC] Make CSE's ImpureData faster when dealing with large blocks
1857         https://bugs.webkit.org/show_bug.cgi?id=155594
1858
1859         Reviewed by Filip Pizlo.
1860
1861         * wtf/HashSet.h:
1862         (WTF::V>::removeIf):
1863
1864 2016-03-17  Saam barati  <sbarati@apple.com>
1865
1866         Implement SmallPtrSet and integrate it into the Parser
1867         https://bugs.webkit.org/show_bug.cgi?id=155552
1868
1869         Reviewed by Filip Pizlo.
1870
1871         This patch implements the SmallPtrSet data struture.
1872         Inspired by the implementation in llvm:
1873         http://llvm.org/docs/doxygen/html/SmallPtrSet_8h_source.html
1874
1875         The data structure uses an inline array for storage up until
1876         a fixed limit (8 entries in our implementation). If that storage
1877         fills up, we fall back to a simple hash table implementation.
1878         Crucially, this implementation doesn't support the remove
1879         operation. This is on purpose. The hash table will only ever
1880         grow.
1881
1882         Also, the implementation allows for it to be memcopied around.
1883         I.e, we can put SmallPtrSet inside a Vector and allow that
1884         Vector to use memcpy as its move operation (of course this
1885         is only valid if the SmallPtrSet in the old memory doesn't have 
1886         its destructor called unless it is set back to its initial state.)
1887
1888         For now, SmallPtrSet only supports pointer types that are trivially
1889         destructible. It's probably not too difficult to extend this to
1890         smart pointers, but it's not part of this original implementation.
1891
1892         I've also implemented a pure forwarding varargs constructAndAppend
1893         method on Vector. This allows you to do:
1894         Vector<T> v;
1895         v.constructAndAppend(a1, a2, ...)
1896         as long as T has a constructor that accepts arguments (a1, a2, ...).
1897
1898         * WTF.xcodeproj/project.pbxproj:
1899         * wtf/CMakeLists.txt:
1900         * wtf/SmallPtrSet.h: Added.
1901         (WTF::SmallPtrSet::SmallPtrSet):
1902         (WTF::SmallPtrSet::operator=):
1903         (WTF::SmallPtrSet::~SmallPtrSet):
1904         (WTF::SmallPtrSet::add):
1905         (WTF::SmallPtrSet::contains):
1906         (WTF::SmallPtrSet::iterator::operator++):
1907         (WTF::SmallPtrSet::iterator::operator*):
1908         (WTF::SmallPtrSet::iterator::operator==):
1909         (WTF::SmallPtrSet::iterator::operator!=):
1910         (WTF::SmallPtrSet::begin):
1911         (WTF::SmallPtrSet::end):
1912         (WTF::SmallPtrSet::size):
1913         (WTF::SmallPtrSet::emptyValue):
1914         (WTF::SmallPtrSet::isValidEntry):
1915         (WTF::SmallPtrSet::isSmall):
1916         (WTF::SmallPtrSet::initialize):
1917         (WTF::SmallPtrSet::grow):
1918         (WTF::SmallPtrSet::bucket):
1919         * wtf/Vector.h:
1920         (WTF::Vector::append):
1921         (WTF::Vector::uncheckedAppend):
1922         (WTF::minCapacity>::append):
1923         (WTF::minCapacity>::constructAndAppend):
1924         (WTF::minCapacity>::appendSlowCase):
1925         (WTF::minCapacity>::constructAndAppendSlowCase):
1926
1927 2016-03-16  Filip Pizlo  <fpizlo@apple.com>
1928
1929         Replace all of the various non-working and non-compiling sampling profiler hacks with a single super hack
1930         https://bugs.webkit.org/show_bug.cgi?id=155561
1931
1932         Reviewed by Saam Barati.
1933
1934         This patch replaces all of our various ad hoc profiling hacks with a single ad hoc profiling hack.
1935         That needs to be able to sleep a thread, so I added a portable way to do it.
1936
1937         This also removes a bunch of ENABLE flags for all of the old non-working hacks.
1938
1939         * wtf/CurrentTime.cpp:
1940         (WTF::currentCPUTime):
1941         (WTF::sleep):
1942         * wtf/CurrentTime.h:
1943         (WTF::sleepMS):
1944         * wtf/Platform.h:
1945
1946 2016-03-17  Chris Dumez  <cdumez@apple.com>
1947
1948         Set the WebContent process's main thread QoS to USER-INTERACTIVE
1949         https://bugs.webkit.org/show_bug.cgi?id=155595
1950         <rdar://problem/22534965>
1951
1952         Reviewed by Antti Koivisto.
1953
1954         Add a relativePriority parameter to setCurrentThreadIsUser*() so that
1955         we can do more fine-grained prioritization of threads that have the
1956         same QoS.
1957
1958         * wtf/Threading.cpp:
1959         (WTF::setCurrentThreadIsUserInteractive):
1960         (WTF::setCurrentThreadIsUserInitiated):
1961         (WTF::createThread): Deleted.
1962         * wtf/Threading.h:
1963
1964 2016-03-17  Filip Pizlo  <fpizlo@apple.com>
1965
1966         Silence leaks in ParkingLot
1967         https://bugs.webkit.org/show_bug.cgi?id=155510
1968
1969         Reviewed by Alexey Proskuryakov.
1970
1971         ParkingLot has a concurrent hashtable that it reallocates on demand. It will not reallocate
1972         it in steady state. The hashtable is sized to accommodate the high watermark of the number
1973         of active threads - so long as the program doesn't just keep starting an unbounded number
1974         of threads that are all active, the hashtable will stop resizing. Each resize operation is
1975         designed to stay out of the way of the data-access-parallel normal path, in which two
1976         threads operating on different lock addresses don't have to synchronize. To do this, it
1977         simply drops the old hashtable without deleting it, so that threads that were still using
1978         it don't crash. They will realize that they have the wrong hashtable before doing anything
1979         bad, but we don't have a way of proving when all of those threads are no longer going to
1980         read from the old hashtables. So, we just leak them.
1981
1982         This is a bounded leak, since the hashtable resizes exponentially. Thus the total memory
1983         utilization of all hashtables, including the leaked ones, converges to a linear function of
1984         the current hashtable's size (it's 2 * size of current hashtable).
1985
1986         But this leak is a problem for leaks tools, which will always report this leak. This is not
1987         useful. It's better to silence the leak. That's what this patch does by ensuring that all
1988         hashtables, including leaked ones, end up in a global vector. This is perf-neutral.
1989
1990         This requires making a StaticWordLock variant of WordLock. That's probably the biggest part
1991         of this change.
1992
1993         * wtf/ParkingLot.cpp:
1994         * wtf/WordLock.cpp:
1995         (WTF::WordLockBase::lockSlow):
1996         (WTF::WordLockBase::unlockSlow):
1997         (WTF::WordLock::lockSlow): Deleted.
1998         (WTF::WordLock::unlockSlow): Deleted.
1999         * wtf/WordLock.h:
2000         (WTF::WordLockBase::lock):
2001         (WTF::WordLockBase::isLocked):
2002         (WTF::WordLock::WordLock):
2003         (WTF::WordLock::lock): Deleted.
2004         (WTF::WordLock::isLocked): Deleted.
2005
2006 2016-03-16  Chris Dumez  <cdumez@apple.com>
2007
2008         Unreviewed, rolling out r198235, r198240, r198241, and
2009         r198252.
2010
2011         Causing crashes on ARM
2012
2013         Reverted changesets:
2014
2015         "Remove compile time define for SEPARATED_HEAP"
2016         https://bugs.webkit.org/show_bug.cgi?id=155508
2017         http://trac.webkit.org/changeset/198235
2018
2019         "Gardening: build fix after r198235."
2020         http://trac.webkit.org/changeset/198240
2021
2022         "Build fix."
2023         http://trac.webkit.org/changeset/198241
2024
2025         "Rename performJITMemcpy to something more inline with our
2026         normal webkit function names"
2027         https://bugs.webkit.org/show_bug.cgi?id=155525
2028         http://trac.webkit.org/changeset/198252
2029
2030 2016-03-15  Oliver Hunt  <oliver@apple.com>
2031
2032         Remove compile time define for SEPARATED_HEAP
2033         https://bugs.webkit.org/show_bug.cgi?id=155508
2034
2035         Reviewed by Mark Lam.
2036
2037         Remove the feature define.
2038
2039         * wtf/FeatureDefines.h:
2040         * wtf/Platform.h:
2041
2042 2016-03-14  Mark Lam  <mark.lam@apple.com>
2043
2044         Need to distinguish between Symbol() and Symbol("").
2045         https://bugs.webkit.org/show_bug.cgi?id=155438
2046
2047         Reviewed by Saam Barati.
2048
2049         While toString of both Symbol() and Symbol("") yields "Symbol()", Function.name
2050         should yield "" and "[]" respectively.  Hence, we need to tell between the two.
2051         This functionality will be needed later in https://bugs.webkit.org/show_bug.cgi?id=155437.
2052
2053         We achieve this by creating another singleton instance like the empty StringImpl
2054         as the null StringImpl.  isNullSymbol() tests if the Stringimpl instance is a
2055         symbol, and its substring is the null() singleton.
2056
2057         * wtf/text/StringImpl.cpp:
2058         (WTF::StringImpl::createSymbol):
2059         (WTF::StringImpl::createNullSymbol):
2060         (WTF::StringImpl::containsOnlyWhitespace):
2061         (WTF::StringImpl::createSymbolEmpty): Deleted.
2062         * wtf/text/StringImpl.h:
2063         (WTF::StringImpl::tryCreateUninitialized):
2064         (WTF::StringImpl::stringKind):
2065         (WTF::StringImpl::isSymbol):
2066         (WTF::StringImpl::isAtomic):
2067         (WTF::StringImpl::isNullSymbol):
2068         * wtf/text/StringStatics.cpp:
2069         (WTF::StringImpl::null):
2070
2071 2016-03-13  Joseph Pecoraro  <pecoraro@apple.com>
2072
2073         Remove ENABLE(ES6_TEMPLATE_LITERAL_SYNTAX) guards
2074         https://bugs.webkit.org/show_bug.cgi?id=155417
2075
2076         Reviewed by Yusuke Suzuki.
2077
2078         * wtf/FeatureDefines.h:
2079
2080 2016-03-13  Konstantin Tokarev  <annulen@yandex.ru>
2081
2082         Added new port JSCOnly.
2083         https://bugs.webkit.org/show_bug.cgi?id=154512
2084
2085         Reviewed by Michael Catanzaro.
2086
2087         This port allows to build JavaScriptCore engine with minimal
2088         dependencies.
2089
2090         * wtf/PlatformJSCOnly.cmake: Added.
2091         * wtf/none/MainThreadNone.cpp: Added.
2092         * wtf/none/RunLoopNone.cpp: Added.
2093         * wtf/none/WorkQueueNone.cpp: Added.
2094
2095 2016-03-13  David Kilzer  <ddkilzer@apple.com>
2096
2097         REGRESSION (r198079): Windows build broke because of "%PRId64" format specifier
2098
2099         This fixes the following build failure in WebCore for Windows:
2100             C:\Source\WebCore\page\DOMTimer.cpp(396): error C2146: syntax error: missing ')' before identifier 'PRId64' [C:\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]
2101             C:\Source\WebCore\page\DOMTimer.cpp(399): error C2146: syntax error: missing ')' before identifier 'PRId64' [C:\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]
2102
2103         * wtf/StdLibExtras.h: Define "PRId64" for Windows here so it may
2104         be shared.  This should fix DOMTimer.cpp after r198079 since it
2105         already includes StdLibExtras.h.
2106
2107 2016-03-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>
2108
2109         WTF should have a similar function as equalLettersIgnoringASCIICase to match beginning of strings
2110         https://bugs.webkit.org/show_bug.cgi?id=153419
2111
2112         Reviewed by Darin Adler.
2113
2114         Introducing startsWithLettersIgnoringASCIICase, to check the beginning of a string.
2115         Moving some code from WTF::equalLettersIgnoringASCIICaseCommonWithoutLength in
2116         WTF::hasPrefixWithLettersIgnoringASCIICaseCommon to enable reuse in
2117         WTF::startsWithLettersIgnoringASCIICaseCommon.
2118
2119         * wtf/text/StringCommon.h:
2120         (WTF::hasPrefixWithLettersIgnoringASCIICaseCommon):
2121         (WTF::equalLettersIgnoringASCIICaseCommonWithoutLength):
2122         (WTF::startsWithLettersIgnoringASCIICaseCommonWithoutLength):
2123         (WTF::startsWithLettersIgnoringASCIICaseCommon):
2124         * wtf/text/StringImpl.h:
2125         (WTF::startsWithLettersIgnoringASCIICase):
2126         * wtf/text/WTFString.h:
2127         (WTF::startsWithLettersIgnoringASCIICase):
2128
2129 2016-03-10  Frederic Wang  <fwang@igalia.com>
2130
2131         [GTK] Add support for WOFF2
2132         https://bugs.webkit.org/show_bug.cgi?id=152616
2133
2134         Reviewed by Carlos Garcia Campos.
2135
2136         * wtf/FeatureDefines.h: Enable USE_WOFF2 flag on GTK.
2137
2138 2016-03-09  Ryosuke Niwa  <rniwa@webkit.org>
2139
2140         Add runtime flags for shadow DOM and custom elements
2141         https://bugs.webkit.org/show_bug.cgi?id=155213
2142
2143         Reviewed by Dean Jackson.
2144
2145         Removed the manual overrides of ENABLE_SHADOW_DOM and ENABLE_CUSTOM_ELEMENTS as they were
2146         making --no-shadow-dom and --no-custom-elements flags on build-webkit useless.
2147
2148         * wtf/FeatureDefines.h:
2149
2150 2016-03-09  Keith Rollin  <krollin@apple.com>
2151
2152         Add state dumping facility
2153         https://bugs.webkit.org/show_bug.cgi?id=154930
2154         <rdar://problem/24939135>
2155
2156         Reviewed by Anders Carlsson.
2157
2158         Add an OS_STATE flag to control the inclusion of process state dumping
2159         functionality.
2160
2161         * wtf/Platform.h:
2162
2163 2016-03-09  Oliver Hunt  <oliver@apple.com>
2164
2165         Fix old iOS
2166
2167         * wtf/Platform.h:
2168
2169 2016-03-08  Filip Pizlo  <fpizlo@apple.com>
2170
2171         Remove failing assertion. There are strings that claim to be atomic but that the
2172         compiler thread can totally deal with, like the empty string.
2173
2174         Rubber stamped by Mark Lam.
2175
2176         * wtf/text/StringImpl.h:
2177         (WTF::StringImpl::ref):
2178         (WTF::StringImpl::deref):
2179
2180 2016-03-08  Filip Pizlo  <fpizlo@apple.com>
2181
2182         DFG should be able to constant-fold strings
2183         https://bugs.webkit.org/show_bug.cgi?id=155200
2184
2185         Reviewed by Geoffrey Garen.
2186
2187         Also disable assertions about reference counting strings on the JIT thread. We will do
2188         that now and it's OK.
2189
2190         * wtf/text/StringImpl.h:
2191         (WTF::StringImpl::ref):
2192         (WTF::StringImpl::deref):
2193
2194 2016-03-08  Anders Carlsson  <andersca@apple.com>
2195
2196         Fix AppKitCompatibilityDeclarations build.
2197
2198         * wtf/mac/AppKitCompatibilityDeclarations.h:
2199         Remove duplicate declarations, conditionally define NSTextAlignment and
2200         add a NSWindowStyleMask typedef.
2201
2202 2016-03-08  Oliver Hunt  <oliver@apple.com>
2203
2204         Start moving to separated writable and executable mappings in the JIT
2205         https://bugs.webkit.org/show_bug.cgi?id=155178
2206
2207         Reviewed by Fil Pizlo.
2208
2209         Update feature defines.
2210
2211         * wtf/FeatureDefines.h:
2212         * wtf/Platform.h: ARM64 for now.
2213
2214 2016-03-08  Anders Carlsson  <andersca@apple.com>
2215
2216         Add AppKit compatibility header
2217         https://bugs.webkit.org/show_bug.cgi?id=155202
2218
2219         Reviewed by Beth Dakin.
2220
2221         * WTF.xcodeproj/project.pbxproj:
2222         * wtf/mac/AppKitCompatibilityDeclarations.h: Added.
2223
2224 2016-03-08  Commit Queue  <commit-queue@webkit.org>
2225
2226         Unreviewed, rolling out r197793 and r197799.
2227         https://bugs.webkit.org/show_bug.cgi?id=155195
2228
2229         something weird happened while landing this and everything
2230         broke (Requested by olliej on #webkit).
2231
2232         Reverted changesets:
2233
2234         "Start moving to separated writable and executable mappings in
2235         the JIT"
2236         https://bugs.webkit.org/show_bug.cgi?id=155178
2237         http://trac.webkit.org/changeset/197793
2238
2239         "arm64 build fix after r197793."
2240         http://trac.webkit.org/changeset/197799
2241
2242 2016-03-08  Oliver Hunt  <oliver@apple.com>
2243
2244         Start moving to separated writable and executable mappings in the JIT
2245         https://bugs.webkit.org/show_bug.cgi?id=155178
2246
2247         Reviewed by Filip Pizlo.
2248
2249         Update feature defines.
2250
2251         * wtf/FeatureDefines.h:
2252         * wtf/Platform.h: ARM64 for now.
2253
2254 2016-03-08  Daniel Bates  <dabates@apple.com>
2255
2256         Support iterating over an OptionSet and checking if it is empty
2257         https://bugs.webkit.org/show_bug.cgi?id=154941
2258         <rdar://problem/24964187>
2259
2260         Reviewed by Darin Adler.
2261
2262         Implements support for iterating over the enumerators in an OptionSet as well as
2263         determining if the set is empty.
2264
2265         Iterating over an OptionSet is in Big Theta(N) where N is the number of items in
2266         the set. More precisely, it is in Big Theta(log M) where M is the bitmask represented
2267         by the bitwise OR-ing of all enumerators in the set.
2268
2269         * wtf/OptionSet.h: Added comment to describe the purpose of this class and its invariant -
2270         the enumerators must be positive powers of two.
2271         (WTF::OptionSet::Iterator::operator*): Returns the enumerator pointed to by the iterator.
2272         (WTF::OptionSet::Iterator::operator++): Advance to the next smallest enumerator in the set.
2273         (WTF::OptionSet::Iterator::operator==): Returns whether the iterator is equal to the specified iterator.
2274         (WTF::OptionSet::Iterator::operator!=): Returns whether the iterator is not equal to the specified iterator.
2275         (WTF::OptionSet::Iterator::Iterator): Added.
2276         (WTF::OptionSet::fromRaw): Instantiate using specialized private constructor to allow
2277         instantiation with a raw value of 0.
2278         (WTF::OptionSet::OptionSet): Specialized constructor that asserts that the specified value
2279         is a positive power of two. This variant is only compiled when assertions are enabled (i.e. !ASSERT_DISABLED).
2280         (WTF::OptionSet::isEmpty): Returns whether the set is empty.
2281         (WTF::OptionSet::begin): Returns an iterator to the enumerator with the smallest value in the set.
2282         (WTF::OptionSet::end): Returns an iterator that represents the end sentinel of the set.
2283
2284 2016-03-07  Keith Rollin  <krollin@apple.com>
2285
2286         Enhance logging: Use "always on" macros
2287         https://bugs.webkit.org/show_bug.cgi?id=154499
2288         <rdar://problem/24757730>
2289
2290         Reviewed by Chris Dumez.
2291
2292         Update LOG_ALWAYS and LOG_ALWAYS_ERROR macros to take an expression to
2293         be evaluated. If the expression evaluates to True, the associated
2294         message is logged. This facility is used to prevent logging from being
2295         performed in private sessions, but it could be extended to prevent
2296         logging under other circumstances as well.
2297
2298         * wtf/Assertions.h:
2299
2300 2016-03-04  Alex Christensen  <achristensen@webkit.org>
2301
2302         Remove vcxproj build system
2303         https://bugs.webkit.org/show_bug.cgi?id=154388
2304
2305         Rubber-stamped by Brent Fulgham.
2306
2307         * WTF.vcxproj/WTF.submit.sln: Removed.
2308         * WTF.vcxproj/WTF.vcxproj: Removed.
2309         * WTF.vcxproj/WTF.vcxproj.filters: Removed.
2310         * WTF.vcxproj/WTFCFLite.props: Removed.
2311         * WTF.vcxproj/WTFCommon.props: Removed.
2312         * WTF.vcxproj/WTFCoreFoundation.props: Removed.
2313         * WTF.vcxproj/WTFDebug.props: Removed.
2314         * WTF.vcxproj/WTFDebugWinCairo.props: Removed.
2315         * WTF.vcxproj/WTFGenerated.make: Removed.
2316         * WTF.vcxproj/WTFGenerated.vcxproj: Removed.
2317         * WTF.vcxproj/WTFGenerated.vcxproj.filters: Removed.
2318         * WTF.vcxproj/WTFGeneratedCommon.props: Removed.
2319         * WTF.vcxproj/WTFGeneratedDebug.props: Removed.
2320         * WTF.vcxproj/WTFGeneratedProduction.props: Removed.
2321         * WTF.vcxproj/WTFGeneratedRelease.props: Removed.
2322         * WTF.vcxproj/WTFPostBuild.cmd: Removed.
2323         * WTF.vcxproj/WTFPreBuild.cmd: Removed.
2324         * WTF.vcxproj/WTFProduction.props: Removed.
2325         * WTF.vcxproj/WTFRelease.props: Removed.
2326         * WTF.vcxproj/WTFReleaseWinCairo.props: Removed.
2327         * WTF.vcxproj/build-generated-files.pl: Removed.
2328         * WTF.vcxproj/copy-files.cmd: Removed.
2329         * WTF.vcxproj/work-around-vs-dependency-tracking-bugs.py: Removed.
2330
2331 2016-03-04  Alex Christensen  <achristensen@webkit.org>
2332
2333         Use NSURLSession for loading in WebKit2
2334         https://bugs.webkit.org/show_bug.cgi?id=154993
2335
2336         Reviewed by Sam Weinig.
2337
2338         * wtf/Platform.h:
2339
2340 2016-03-03  Daniel Bates  <dabates@apple.com>
2341
2342         Add unit tests for WTF::OptionSet
2343         https://bugs.webkit.org/show_bug.cgi?id=154925
2344         <rdar://problem/24964211>
2345
2346         Reviewed by Darin Adler.
2347
2348         * wtf/CMakeLists.txt: Add header OptionSet.h to the list of WTF headers.
2349         * wtf/OptionSet.h: Use in-class initialization to initialize m_storage and declare
2350         the trivial constexpr constructor as default.
2351         (WTF::OptionSet::OptionSet): For convenience add a constructor that takes a std::initializer_list.
2352         This code was written by Anders Carlsson.
2353
2354 2016-03-03  Andy Estes  <aestes@apple.com>
2355
2356         Adopt CFNetwork storage partitioning SPI
2357         https://bugs.webkit.org/show_bug.cgi?id=154957
2358         rdar://problem/23614620
2359
2360         Reviewed by Darin Adler.
2361
2362         * wtf/Platform.h: Defined HAVE_CFNETWORK_STORAGE_PARTITIONING.
2363
2364 2016-03-02  Konstantin Tokarev  <annulen@yandex.ru>
2365
2366         [cmake] Moved PRE/POST_BUILD_COMMAND to WEBKIT_FRAMEWORK.
2367         https://bugs.webkit.org/show_bug.cgi?id=154651
2368
2369         Reviewed by Alex Christensen.
2370
2371         * CMakeLists.txt: Moved shared code to WEBKIT_FRAMEWORK macro.
2372
2373 2016-03-01  Commit Queue  <commit-queue@webkit.org>
2374
2375         Unreviewed, rolling out r197226 and r197256.
2376         https://bugs.webkit.org/show_bug.cgi?id=154910
2377
2378         Caused crashes on Mac 32-bit and on ARM (Requested by ap on
2379         #webkit).
2380
2381         Reverted changesets:
2382
2383         "Remove the on demand executable allocator"
2384         https://bugs.webkit.org/show_bug.cgi?id=154749
2385         http://trac.webkit.org/changeset/197226
2386
2387         "CLoop build fix."
2388         http://trac.webkit.org/changeset/197256
2389
2390 2016-03-01  Alex Christensen  <achristensen@webkit.org>
2391
2392         Reduce size of internal windows build output
2393         https://bugs.webkit.org/show_bug.cgi?id=154763
2394
2395         Reviewed by Brent Fulgham.
2396
2397         * WTF.vcxproj/WTF.proj:
2398
2399 2016-03-01  Commit Queue  <commit-queue@webkit.org>
2400
2401         Unreviewed, rolling out r197056.
2402         https://bugs.webkit.org/show_bug.cgi?id=154870
2403
2404         broke win ews (Requested by alexchristensen on #webkit).
2405
2406         Reverted changeset:
2407
2408         "[cmake] Moved PRE/POST_BUILD_COMMAND to WEBKIT_FRAMEWORK."
2409         https://bugs.webkit.org/show_bug.cgi?id=154651
2410         http://trac.webkit.org/changeset/197056
2411
2412 2016-02-29  Gavin Barraclough  <barraclough@apple.com>
2413
2414         RefCounter<T>::Event -> RefCounterEvent
2415         https://bugs.webkit.org/show_bug.cgi?id=154767
2416
2417         Reviewed by Darin Adler.
2418
2419         RefCounter<T>::Event is kinda verbose to use, and there is no need for this
2420         to be specific to a particular typeof RefCounter. Move the enum class up to
2421         the top level & rename to RefCounterEvent.
2422
2423         * wtf/RefCounter.h:
2424         (WTF::RefCounter<T>::Count::ref):
2425         (WTF::RefCounter<T>::Count::deref):
2426
2427 2016-02-26  Oliver Hunt  <oliver@apple.com>
2428
2429         Remove the on demand executable allocator
2430         https://bugs.webkit.org/show_bug.cgi?id=154749
2431
2432         Reviewed by Geoffrey Garen.
2433
2434         Remove the DeamndExecutableAllocator compile flags.
2435
2436         * wtf/Platform.h:
2437
2438 2016-02-26  Keith Rollin  <krollin@apple.com>
2439
2440         Enhance logging: Add "always on" macros
2441         https://bugs.webkit.org/show_bug.cgi?id=154498
2442         <rdar://problem/24757759>
2443
2444         Reviewed by Chris Dumez.
2445
2446         Add support for efficient always-on logging (logging that is available
2447         in both debug and release builds). This is implemented in the form of
2448         some new macros:
2449
2450         - LOG_ALWAYS: Always log information-level statements.
2451         - LOG_ALWAYS_ERROR: Always log error-level statements. These can be
2452           filtered out of the normal logging so that they can be found more
2453           easily.
2454
2455         In cases where there is no efficient underlying facility for it to
2456         utilize, LOG_ALWAYS_ERROR is redirected to WTFReportError as a backup
2457         mechanism. LOG_ALWAYS is not given a similar treatment so that we
2458         don't overwhelm other logging systems that aren't prepared for "always
2459         on" logging.
2460
2461         * wtf/Assertions.h:
2462         * wtf/Platform.h:
2463
2464 2016-02-26  Anders Carlsson  <andersca@apple.com>
2465
2466         Add WTF::OptionSet and use it for the website data types enum
2467         https://bugs.webkit.org/show_bug.cgi?id=154733
2468
2469         Reviewed by Geoffrey Garen.
2470
2471         Add WTF::OptionSet which makes it easier to use strong enums as flags.
2472
2473         * WTF.xcodeproj/project.pbxproj:
2474         * wtf/Forward.h:
2475         * wtf/OptionSet.h: Copied from Source/WebKit2/Shared/WebsiteData/WebsiteData.h.
2476         (WTF::OptionSet::fromRaw):
2477         (WTF::OptionSet::OptionSet):
2478         (WTF::OptionSet::toRaw):
2479         (WTF::OptionSet::contains):
2480         (WTF::OptionSet::operator|=):
2481
2482 2016-02-26  Commit Queue  <commit-queue@webkit.org>
2483
2484         Unreviewed, rolling out r197168.
2485         https://bugs.webkit.org/show_bug.cgi?id=154728
2486
2487         crashing on some devices (Requested by kling on #webkit).
2488
2489         Reverted changeset:
2490
2491         "[Darwin] Use vm_kernel_page_size for WTF::pageSize()."
2492         https://bugs.webkit.org/show_bug.cgi?id=154726
2493         http://trac.webkit.org/changeset/197168
2494
2495 2016-02-26  Andreas Kling  <akling@apple.com>
2496
2497         [Darwin] Use vm_kernel_page_size for WTF::pageSize().
2498         <https://webkit.org/b/154726>
2499
2500         Reviewed by Antti Koivisto.
2501
2502         Make sure we use the right VM page size on Darwin systems.
2503         On devices where the native page size is 4 KB, it's both
2504         possible and profitable to madvise in smaller chunks.
2505
2506         * wtf/PageBlock.cpp:
2507         (WTF::systemPageSize):
2508
2509 2016-02-25  Gavin Barraclough  <barraclough@apple.com>
2510
2511         RefCounter value changed callback should be called on all changes (not just zero edge).
2512         https://bugs.webkit.org/show_bug.cgi?id=154699
2513
2514         Reviewed by Anders Carlsson.
2515
2516         RefCounter currently only triggers a callback when the count goes from zero
2517         to non-zero and vice-versa. Change that, to be useful to more clients.
2518
2519         * wtf/RefCounter.h:
2520         (WTF::RefCounter::Count::Count):
2521         (WTF::RefCounter::RefCounter):
2522             - Removed superfluous WTF_EXPORT_PRIVATE.
2523         (WTF::RefCounter::value):
2524             - Changed value() to a size_t.
2525         (WTF::RefCounter<T>::Count::ref):
2526         (WTF::RefCounter<T>::Count::deref):
2527             - Trigger the callback on all increments/decrements.
2528         (WTF::RefCounter<T>::RefCounter):
2529             - Changed siganture of callback.
2530
2531 2016-02-25  Gavin Barraclough  <barraclough@apple.com>
2532
2533         Replace RefCounter::Token implementation with RefPtr
2534         https://bugs.webkit.org/show_bug.cgi?id=154698
2535
2536         Reviewed by Anders Carlsson.
2537
2538         * wtf/RefCounter.h:
2539         (WTF::RefCounter::RefCounter):
2540         (WTF::RefCounter::count):
2541         (WTF::RefCounter::value):
2542         (WTF::RefCounter<T>::~RefCounter):
2543         (WTF::RefCounter::Token::Token): Deleted.
2544         (WTF::RefCounter::Token::operator bool): Deleted.
2545         (WTF::RefCounter<T>::Token::Token): Deleted.
2546         (WTF::=): Deleted.
2547             - Delete.
2548
2549 2016-02-25  Gavin Barraclough  <barraclough@apple.com>
2550
2551         Should template RefCounter instead of RefCounter::Token
2552         https://bugs.webkit.org/show_bug.cgi?id=154691
2553
2554         Speculative windows build fix.
2555
2556         * wtf/RefCounter.h:
2557         (WTF::RefCounter::RefCounter):
2558         (WTF::RefCounter::count):
2559
2560 2016-02-25  Commit Queue  <commit-queue@webkit.org>
2561
2562         Unreviewed, rolling out r197137.
2563         https://bugs.webkit.org/show_bug.cgi?id=154700
2564
2565         broke windows build (Requested by alexchristensen on #webkit).
2566
2567         Reverted changeset:
2568
2569         "Replace RefCounter::Token implementation with RefPtr"
2570         https://bugs.webkit.org/show_bug.cgi?id=154698
2571         http://trac.webkit.org/changeset/197137
2572
2573 2016-02-25  Gavin Barraclough  <barraclough@apple.com>
2574
2575         Replace RefCounter::Token implementation with RefPtr
2576         https://bugs.webkit.org/show_bug.cgi?id=154698
2577
2578         Reviewed by Anders Carlsson.
2579
2580         * wtf/RefCounter.h:
2581         (WTF::RefCounter::RefCounter):
2582         (WTF::RefCounter::count):
2583         (WTF::RefCounter::value):
2584         (WTF::RefCounter<T>::~RefCounter):
2585         (WTF::RefCounter::Token::Token): Deleted.
2586         (WTF::RefCounter::Token::operator bool): Deleted.
2587         (WTF::RefCounter<T>::Token::Token): Deleted.
2588         (WTF::=): Deleted.
2589             - Delete.
2590
2591 2016-02-25  Gavin Barraclough  <barraclough@apple.com>
2592
2593         Should template RefCounter instead of RefCounter::Token
2594         https://bugs.webkit.org/show_bug.cgi?id=154691
2595
2596         Reviewed by Anders Carlsson.
2597
2598         My real goal here is to make the counter accurate. Currently returning a Token from token<>()
2599         results in ref-count churn. Fixing this either means changing the return value, or improving
2600         Token (which will probably mean replacing it with RefPtr). Either way would break the current
2601         type checking. Move type tag to RefCount so this can still be enforced.
2602
2603         * WTF.vcxproj/WTF.vcxproj:
2604         * WTF.vcxproj/WTF.vcxproj.filters:
2605         * WTF.xcodeproj/project.pbxproj:
2606         * wtf/CMakeLists.txt:
2607         * wtf/RefCounter.cpp: Removed.
2608             - Removed RefCounter.cpp.
2609         * wtf/RefCounter.h:
2610         (WTF::RefCounter::Token::Token):
2611         (WTF::RefCounter::Token::operator bool):
2612         (WTF::RefCounter::RefCounter):
2613         (WTF::RefCounter::count):
2614         (WTF::RefCounter::value):
2615         (WTF::RefCounter<T>::Count::ref):
2616         (WTF::RefCounter<T>::Count::deref):
2617         (WTF::RefCounter<T>::RefCounter):
2618         (WTF::RefCounter<T>::~RefCounter):
2619         (WTF::RefCounter<T>::Token::Token):
2620         (WTF::=):
2621         (WTF::RefCounter::token): Deleted.
2622         (WTF::RefCounter::Token<T>::Token): Deleted.
2623             - RefCounter -> RefCounter<T>,
2624             - Token<T> -> Token,
2625             - renamed token<>() -> count().
2626
2627 2016-02-25  Sam Weinig  <sam@webkit.org>
2628
2629         HashMap::ensure() should return an AddResult like all the other add-like functions.
2630         https://bugs.webkit.org/show_bug.cgi?id=154680
2631
2632         Reviewed by Anders Carlsson.
2633
2634         While adopting HashMap::ensure(), I found it was useful in some circumstances to know
2635         if the value was added or not. While I could discern this information by setting a bool
2636         in the passed in lambda, it seemed clearer and more idiomatic to just have ensure return
2637         an AddResult like all the other add-like functions do.
2638
2639         * wtf/HashMap.h:
2640         Change return type of HashMap::ensure() to be an AddResult.
2641
2642 2016-02-24  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>
2643
2644         [web-animations] Add AnimationTimeline, DocumentTimeline and add extensions to Document interface
2645         https://bugs.webkit.org/show_bug.cgi?id=151688
2646
2647         Reviewed by Dean Jackson.
2648
2649         Enables the WEB_ANIMATIONS compiler switch.
2650
2651         * wtf/FeatureDefines.h:
2652
2653 2016-02-24  Konstantin Tokarev  <annulen@yandex.ru>
2654
2655         [cmake] Moved PRE/POST_BUILD_COMMAND to WEBKIT_FRAMEWORK.
2656         https://bugs.webkit.org/show_bug.cgi?id=154651
2657
2658         Reviewed by Alex Christensen.
2659
2660         * CMakeLists.txt: Moved shared code to WEBKIT_FRAMEWORK macro.
2661
2662 2016-02-23  Dan Bernstein  <mitz@apple.com>
2663
2664         [Xcode] Linker errors display mangled names, but no longer should
2665         https://bugs.webkit.org/show_bug.cgi?id=154632
2666
2667         Reviewed by Sam Weinig.
2668
2669         * Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.
2670
2671 2016-02-23  Gavin Barraclough  <barraclough@apple.com>
2672
2673         Remove HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define
2674         https://bugs.webkit.org/show_bug.cgi?id=112323
2675
2676         Reviewed by Chris Dumez.
2677
2678         This feature is controlled by a runtime switch, and defaults off.
2679
2680         * wtf/FeatureDefines.h:
2681
2682 2016-02-22  Konstantin Tokarev  <annulen@yandex.ru>
2683
2684         [cmake] Moved library setup code to WEBKIT_FRAMEWORK macro.
2685         https://bugs.webkit.org/show_bug.cgi?id=154450
2686
2687         Reviewed by Alex Christensen.
2688
2689         * wtf/CMakeLists.txt:
2690
2691 2016-02-20  Mark Lam  <mark.lam@apple.com>
2692
2693         Use of inlined asm statements causes problems for -std=c99 builds.
2694         https://bugs.webkit.org/show_bug.cgi?id=154507
2695
2696         Reviewed by Dan Bernstein.
2697
2698         WTF's Assertions.h may inadvertantly get included by other projects that are built
2699         with -std=c99.  The use of the inlined asm statements with the keyword "asm" is
2700         not recognized when the -std compiler flag is used.
2701
2702         https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html says "When writing code that
2703         can be compiled with -ansi and the various -std options, use __asm__ instead of
2704         asm (see Alternate Keywords)."
2705
2706         So, to be a good citizen, we can change the use of "asm" in CRASH() to "__asm__"
2707         so that we don't break the build of such other projects.
2708
2709         * wtf/Assertions.h:
2710
2711 2016-02-18  Brent Fulgham  <bfulgham@apple.com>
2712
2713         Extend HashCountedSet with a method to efficiently set the count of an entry
2714         https://bugs.webkit.org/show_bug.cgi?id=154352
2715
2716         Reviewed by Geoffrey Garen.
2717
2718         Tested by new TestWebKitAPI tests.
2719
2720         Update the HashCountedSet class with a new 'add' method to support efficient initialization of
2721         the count of a given key. Also provide move and pointer template specializations to expand the
2722         types of data that can be used as 'keys' in the HashCountedSet to match the underlying HashMap
2723         implementation.
2724
2725         * wtf/HashCountedSet.h:
2726         (WTF::Traits>::add): Added new overload supporting a supplied count.
2727
2728 2016-02-18  Commit Queue  <commit-queue@webkit.org>
2729
2730         Unreviewed, rolling out r196791.
2731         https://bugs.webkit.org/show_bug.cgi?id=154438
2732
2733         broke windows build (Requested by alexchristensen on #webkit).
2734
2735         Reverted changeset:
2736
2737         "Extend HashCountedSet with a method to efficiently set the
2738         count of an entry"
2739         https://bugs.webkit.org/show_bug.cgi?id=154352
2740         http://trac.webkit.org/changeset/196791
2741
2742 2016-02-18  Brent Fulgham  <bfulgham@apple.com>
2743
2744         Extend HashCountedSet with a method to efficiently set the count of an entry
2745         https://bugs.webkit.org/show_bug.cgi?id=154352
2746
2747         Reviewed by Geoffrey Garen.
2748
2749         Tested by new TestWebKitAPI tests.
2750
2751         Update the HashCountedSet class with a new 'add' method to support efficient initialization of
2752         the count of a given key. Also provide move and pointer template specializations to expand the
2753         types of data that can be used as 'keys' in the HashCountedSet to match the underlying HashMap
2754         implementation.
2755
2756         * wtf/HashCountedSet.h:
2757         (WTF::Traits>::add): Added new overload supporting a supplied count.
2758
2759 2016-02-17  Filip Pizlo  <fpizlo@apple.com>
2760
2761         Remove LLVM dependencies from WebKit
2762         https://bugs.webkit.org/show_bug.cgi?id=154323
2763
2764         Reviewed by Antti Koivisto and Benjamin Poulain.
2765
2766         * wtf/Platform.h:
2767
2768 2016-02-16  Sam Weinig  <sam@webkit.org>
2769
2770         Add an ensure function on HashMap that takes a key and a function to make the lazy value initialization idiom easier
2771         https://bugs.webkit.org/show_bug.cgi?id=134857
2772
2773         Reviewed by Geoffrey Garen.
2774
2775         The current idiom for adding a value to a HashMap if the key is not already present, to allow for not
2776         unnecessarily constructing the new value if it won't be used, is:
2777         
2778         {
2779             auto result = map.add(key, Value());
2780             if (!result.isNewEntry)
2781                 return result.iterator->value;
2782
2783             result.iterator->value = createNewValue();
2784             return result.iterator->value;
2785         }
2786
2787         or sometimes
2788
2789         {
2790             auto& value = map.add(key, Value()).iterator->value;
2791             if (!value)
2792                 value = createNewValue();
2793             return value;
2794         }
2795
2796         With this patch, you can now use the new function HashMap::ensure(key, functor). This will allow us to 
2797         change to using the following idiom:
2798
2799         {
2800             return map.ensure(key, [] { return createNewValue(); });
2801         }
2802
2803         The passed in functor will only be called if the key is not already present in the HashMap.
2804
2805         * wtf/HashMap.h:
2806         (WTF::HashMapTranslator::translate):
2807         (WTF::HashMapEnsureTranslator::hash):
2808         (WTF::HashMapEnsureTranslator::equal):
2809         (WTF::HashMapEnsureTranslator::translate):
2810         (WTF::HashMapTranslatorAdapter::hash):
2811
2812 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
2813
2814         FTL_USES_B3 should be unconditionally true
2815         https://bugs.webkit.org/show_bug.cgi?id=154324
2816
2817         Reviewed by Benjamin Poulain.
2818
2819         * wtf/Platform.h:
2820
2821 2016-02-13  Mark Lam  <mark.lam@apple.com>
2822
2823         Eliminate the need for WTFCrashImpl().
2824         https://bugs.webkit.org/show_bug.cgi?id=154202
2825
2826         Reviewed by Alexey Proskuryakov.
2827
2828         * wtf/Assertions.cpp:
2829         * wtf/Assertions.h:
2830
2831 2016-02-12  Sukolsak Sakshuwong  <sukolsak@gmail.com>
2832
2833         Update ICU header files to version 52
2834         https://bugs.webkit.org/show_bug.cgi?id=154160
2835
2836         Reviewed by Alex Christensen.
2837
2838         Update ICU header files to version 52 to allow the use of newer APIs.
2839
2840         * icu/unicode/bytestream.h:
2841         * icu/unicode/localpointer.h:
2842         * icu/unicode/platform.h:
2843         * icu/unicode/ptypes.h:
2844         * icu/unicode/putil.h:
2845         * icu/unicode/rep.h:
2846         (Replaceable::Replaceable):
2847         * icu/unicode/std_string.h:
2848         * icu/unicode/strenum.h:
2849         * icu/unicode/stringpiece.h:
2850         * icu/unicode/uchar.h:
2851         * icu/unicode/ucnv.h:
2852         * icu/unicode/ucol.h:
2853         * icu/unicode/uconfig.h:
2854         * icu/unicode/uenum.h:
2855         * icu/unicode/uiter.h:
2856         * icu/unicode/uloc.h:
2857         * icu/unicode/umachine.h:
2858         * icu/unicode/unistr.h:
2859         (UnicodeString::UnicodeString):
2860         (UnicodeString::operator== ):
2861         (UnicodeString::startsWith):
2862         (UnicodeString::setTo):
2863         (UnicodeString::remove):
2864         (UnicodeString::replace): Deleted.
2865         (UnicodeString::extract): Deleted.
2866         (UnicodeString::char32At): Deleted.
2867         (UnicodeString::getChar32Start): Deleted.
2868         (UnicodeString::getChar32Limit): Deleted.
2869         (UnicodeString::getTerminatedBuffer): Deleted.
2870         (UnicodeString::append): Deleted.
2871         (UnicodeString::truncate): Deleted.
2872         * icu/unicode/unorm2.h:
2873         * icu/unicode/uobject.h:
2874         * icu/unicode/urename.h:
2875         * icu/unicode/uscript.h:
2876         * icu/unicode/uset.h:
2877         * icu/unicode/ustring.h:
2878         * icu/unicode/utf.h:
2879         * icu/unicode/utf16.h:
2880         * icu/unicode/utf8.h:
2881         * icu/unicode/utf_old.h:
2882         * icu/unicode/utypes.h:
2883         * icu/unicode/uvernum.h:
2884         * icu/unicode/uversion.h:
2885
2886 2016-02-11  Mark Lam  <mark.lam@apple.com>
2887
2888         Need WTFCrash workaround for shipping SafariForWebKitDevelopment binaries.
2889         https://bugs.webkit.org/show_bug.cgi?id=154125
2890
2891         Reviewed by Joseph Pecoraro.
2892
2893         Presently shipping SafariForWebKitDevelopment binaries still expect to link to a
2894         WTFCrash function.  We need to provide this function as a workaround until we can
2895         update SafariForWebKitDevelopment to use the new inlined version.
2896
2897         We do this by doing:
2898         1. Make WTFCrashImpl() the sole function for implementing a crash.
2899            The CRASH() macro is now defined to be WTFCrashImpl() instead of WTFCrash().
2900         2. Renamed the legacy WTFCrash() to WTFCrashImpl() for debug or non-Darwin builds.
2901            For (non-debug && OS(DARWIN)) builds, WTFCrashImpl() will be an inlined
2902            function with an asm statement that issues a breakpoint trap.
2903         3. Implement WTFCrash() as a function that calls CRASH().
2904            This satisfies the need of shipping SafariForWebKitDevelopment binaries.
2905         4. Change WTFCrashWithSecurityImplication() to call CRASH().
2906            This ensures that we have a consistent implementation of how we crash.
2907         5. Changed WTFLogAlwaysAndCrash() to call CRASH() instead of WTFCrash().
2908            This is just to have consistency in that all code in the WebKit project
2909            now crashes by calling CRASH(), not WTFCrash().
2910
2911         * wtf/Assertions.cpp:
2912         * wtf/Assertions.h:
2913
2914 2016-02-09  Mark Lam  <mark.lam@apple.com>
2915
2916         Changed WTFCrash to not trash the crash site register state.
2917         https://bugs.webkit.org/show_bug.cgi?id=153996
2918
2919         Reviewed by Geoffrey Garen.
2920
2921         When doing post-mortem crash site analysis using data from crash reports, it is
2922         immensely valuable to be able to infer the crashing program's state from the
2923         register values at crash time.  However, for RELEASE_ASSERT failures, we crash
2924         using WTFCrash(), and WTFCrash() is currently implemented as a function call
2925         that, in turn, calls a lot of other functions to do crash handling before
2926         actually crashing.  As a result, the register values captured in the crash
2927         reports are not likely to still contain the values used by the caller function
2928         that failed the RELEASE_ASSERT.
2929
2930         This patch aims to remedy this issue for non-debug builds on OS(DARWIN) ports.
2931         It does so by changing WTFCrash() into an inlined function that has an inlined
2932         asm statement to issues the CPU specific breakpoint trap instruction.  As a
2933         result, for non-debug OS(DARWIN) builds, crashes due to failed RELEASE_ASSERTs
2934         will now show up in crash reports as crashing due to EXC_BREAKPOINT (SIGTRAP)
2935         instead of a EXC_BAD_ACCESS (SIGSEGV) on address 0xbbadbeef.
2936
2937         For debug and non-DARWIN builds, WTFCrash() behavior currently remains unchanged.
2938
2939         * wtf/Assertions.cpp:
2940         * wtf/Assertions.h:
2941
2942 2016-02-09  Csaba Osztrogonác  <ossy@webkit.org>
2943
2944         [GTK][EFL] Fix several build configuration related to SamplingProfiler after r196245
2945         https://bugs.webkit.org/show_bug.cgi?id=154033
2946
2947         Reviewed by Michael Catanzaro.
2948
2949         * wtf/Platform.h:
2950
2951 2016-02-08  Filip Pizlo  <fpizlo@apple.com>
2952
2953         Make sure that locking code that relies on module boundaries for compiler fences uses NEVER_INLINE
2954         https://bugs.webkit.org/show_bug.cgi?id=153972
2955
2956         Reviewed by Andreas Kling.
2957
2958         When this code was written, we assumed that module boundaries were compiler fences. That might
2959         not be the case if we ever do LTO.
2960
2961         * wtf/Lock.cpp:
2962         (WTF::LockBase::lockSlow):
2963         (WTF::LockBase::unlockSlow):
2964         * wtf/ParkingLot.cpp:
2965         (WTF::ParkingLot::parkConditionally):
2966         (WTF::ParkingLot::unparkOne):
2967         (WTF::ParkingLot::unparkAll):
2968         (WTF::ParkingLot::forEach):
2969         * wtf/WordLock.cpp:
2970         (WTF::WordLock::lockSlow):
2971         (WTF::WordLock::unlockSlow):
2972
2973 2016-02-07  Yusuke Suzuki  <utatane.tea@gmail.com>
2974
2975         [GTK][EFL] Enable SamplingProfiler
2976         https://bugs.webkit.org/show_bug.cgi?id=153638
2977
2978         Reviewed by Michael Catanzaro.
2979
2980         * wtf/Platform.h:
2981
2982 2016-02-07  Dan Bernstein  <mitz@apple.com>
2983
2984         [Cocoa] Replace __has_include guards around inclusion of Apple-internal-SDK headers with USE(APPLE_INTERNAL_SDK)
2985         https://bugs.webkit.org/show_bug.cgi?id=153963
2986
2987         Reviewed by Sam Weinig.
2988
2989         * wtf/SystemTracing.h:
2990         * wtf/WTFThreadData.h:
2991         * wtf/spi/darwin/CommonCryptoSPI.h:
2992
2993 2016-02-06  Darin Adler  <darin@apple.com>
2994
2995         Finish auditing call sites of upper() and lower(), eliminate many, and rename the functions
2996         https://bugs.webkit.org/show_bug.cgi?id=153905
2997
2998         Reviewed by Sam Weinig.
2999
3000         * wtf/text/AtomicString.cpp:
3001         (WTF::AtomicString::lower): Deleted.
3002         * wtf/text/AtomicString.h: Deleted the lower function.
3003
3004         * wtf/text/StringImpl.cpp:
3005         (WTF::StringImpl::convertToLowercaseWithoutLocale): Renamed from lower.
3006         (WTF::StringImpl::convertToUppercaseWithoutLocale): Renamed from upper.
3007         (WTF::StringImpl::convertToLowercaseWithLocale): Renamed from lower.
3008         (WTF::StringImpl::convertToUppercaseWithLocale): Renamed from upper.
3009         (WTF::StringImpl::foldCase): Added fast cases for ASCII since this is
3010         now used in some more-performance-critical code.
3011         * wtf/text/StringImpl.h: Renamed lower and upper.
3012
3013         * wtf/text/WTFString.cpp:
3014         (WTF::String::convertToLowercaseWithoutLocale): Renamed from lower.
3015         (WTF::String::convertToUppercaseWithoutLocale): Renamed from upper.
3016         (WTF::String::convertToLowercaseWithLocale): Renamed from lower.
3017         (WTF::String::convertToUppercaseWithLocale): Renamed from upper.
3018         * wtf/text/WTFString.h: Renamed lower and upper. Removed unneeded comment.
3019
3020 2016-02-03  Darin Adler  <darin@apple.com>
3021
3022         Convert another batch of String::lower callsites to something better, typically convertToASCIILowercase
3023         https://bugs.webkit.org/show_bug.cgi?id=153789
3024
3025         Reviewed by Sam Weinig.
3026
3027         * wtf/text/StringView.h:
3028         (WTF::StringView::toInt): Added an overload without the out parameter.
3029
3030 2016-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>
3031
3032         [GTK][EFL] Switch FTL to B3
3033         https://bugs.webkit.org/show_bug.cgi?id=153478
3034
3035         Reviewed by Csaba Osztrogonác.
3036
3037         Enable B3 by default on all x86.
3038
3039         * wtf/Platform.h:
3040
3041 2016-02-03  Anders Carlsson  <andersca@apple.com>
3042
3043         Fix BlockPtr's call operator
3044         https://bugs.webkit.org/show_bug.cgi?id=153836
3045
3046         Reviewed by Enrica Casucci.
3047
3048         * wtf/BlockPtr.h:
3049
3050 2016-02-01  Said Abou-Hallawa  <sabouhallawa@apple.com>
3051
3052         Cache the Path instead of creating it every time it is required
3053         https://bugs.webkit.org/show_bug.cgi?id=152939
3054
3055         Reviewed by Darin Adler.
3056
3057         If the key type of an LRU cache can't to be strongly tided to a specific
3058         data type; e.g. FloatRect -> Path, we need to be able to pass the policy
3059         type to the TinyLRUCache template instead of just specializing it. This
3060         will make the code more readable and will allow different caches for the
3061         same key type.
3062
3063         * wtf/TinyLRUCache.h:
3064         (WebCore::TinyLRUCache::get):
3065
3066 2016-02-01  Alex Christensen  <achristensen@webkit.org>
3067
3068         [Win] WTFHeaderDetection.h no longer needed
3069         https://bugs.webkit.org/show_bug.cgi?id=153753
3070         rdar://problem/24434627
3071
3072         Reviewed by Darin Adler.
3073
3074         * wtf/Platform.h:
3075         * wtf/PlatformWin.cmake:
3076
3077 2016-01-31  Darin Adler  <darin@apple.com>
3078
3079         Cut down on calls to String::lower; mostly replace with convertToASCIILowercase
3080         https://bugs.webkit.org/show_bug.cgi?id=153732
3081
3082         Reviewed by Dean Jackson.
3083
3084         * wtf/text/StringView.h: Added toIntStrict. Not thrilled about the name of this
3085         function, but generally it seems likely to be useful more often than toInt.
3086         And it's needed for one call site in WebCore that was using String::lower.
3087
3088 2016-01-31  Darin Adler  <darin@apple.com>
3089
3090         Get rid of most calls to String::upper; mostly replace them with convertToASCIIUppercase
3091         https://bugs.webkit.org/show_bug.cgi?id=153715
3092
3093         Reviewed by Gyuyoung Kim.
3094
3095         * wtf/text/AtomicString.h:
3096         (WTF::AtomicString::upper): Deleted.
3097
3098 2016-01-31  Dan Bernstein  <mitz@apple.com>
3099
3100         [Cocoa] Remove unused definition of HAVE_HEADER_DETECTION_H
3101         https://bugs.webkit.org/show_bug.cgi?id=153729
3102
3103         Reviewed by Sam Weinig.
3104
3105         After r141700, HAVE_HEADER_DETECTION_H is no longer used.
3106
3107         * Configurations/Base.xcconfig:
3108
3109 2016-01-31  Darin Adler  <darin@apple.com>
3110
3111         Replace CaseFoldingHash with ASCIICaseInsensitiveHash
3112         https://bugs.webkit.org/show_bug.cgi?id=153639
3113
3114         Reviewed by Filip Pizlo.
3115
3116         * wtf/text/StringHash.h: Renamed CaseFoldingHash to ASCIICaseInsensitiveHash.
3117         (WTF::ASCIICaseInsensitiveHash::foldCase): Use toASCIILower.
3118         (WTF::ASCIICaseInsensitiveHash::equal): Use equalIgnoringASCIICase.
3119         Also added some assertions.
3120
3121         * wtf/text/StringImpl.cpp: Made the latin1CaseFoldTable private to this file,
3122         since it's no longer needed by CaseFoldingHash. Moved it up before its first use.
3123         (WTF::equalCompatibilityCaseless): Fixed typo in the name of this function.
3124         (WTF::equalCompatibiltyCaselessNonNull): Deleted.
3125
3126         * wtf/text/StringImpl.h: Removed declarations of latin1CaseFoldTable and
3127         equalCompatibiltyCaselessNonNull
3128
3129 2016-01-30  Commit Queue  <commit-queue@webkit.org>
3130
3131         Unreviewed, rolling out r195911.
3132         https://bugs.webkit.org/show_bug.cgi?id=153723
3133
3134         Caused frequent assertion failures on bots (Requested by ap on
3135         #webkit).
3136
3137         Reverted changeset:
3138
3139         "Replace CaseFoldingHash with ASCIICaseInsensitiveHash"
3140         https://bugs.webkit.org/show_bug.cgi?id=153639
3141         http://trac.webkit.org/changeset/195911
3142
3143 2016-01-30  Darin Adler  <darin@apple.com>
3144
3145         Replace CaseFoldingHash with ASCIICaseInsensitiveHash
3146         https://bugs.webkit.org/show_bug.cgi?id=153639
3147
3148         Reviewed by Filip Pizlo.
3149
3150         * wtf/text/StringHash.h: Renamed CaseFoldingHash to ASCIICaseInsensitiveHash.
3151         (WTF::ASCIICaseInsensitiveHash::foldCase): Use toASCIILower.
3152         (WTF::ASCIICaseInsensitiveHash::equal): Use equalIgnoringASCIICase.
3153         Also added some assertions.
3154
3155         * wtf/text/StringImpl.cpp: Made the latin1CaseFoldTable private to this file,
3156         since it's no longer needed by CaseFoldingHash. Moved it up before its first use.
3157         (WTF::equalCompatibilityCaseless): Fixed typo in the name of this function.
3158         (WTF::equalCompatibiltyCaselessNonNull): Deleted.
3159
3160         * wtf/text/StringImpl.h: Removed declarations of latin1CaseFoldTable and
3161         equalCompatibiltyCaselessNonNull
3162
3163 2016-01-29  Ada Chan  <adachan@apple.com>
3164
3165         Enable VIDEO_PRESENTATION_MODE only in Debug and Release builds on Mac
3166         https://bugs.webkit.org/show_bug.cgi?id=153665
3167
3168         Reviewed by Dan Bernstein.
3169
3170         * wtf/Platform.h:
3171         Remove this as the flag is already defined in FeatureDefines.xcconfig files.
3172
3173 2016-01-30  Yusuke Suzuki  <utatane.tea@gmail.com>
3174
3175         Enable SamplingProfiler on POSIX environment
3176         https://bugs.webkit.org/show_bug.cgi?id=153584
3177
3178         Reviewed by Michael Saboff.
3179
3180         Use __GLIBC__ since mcontext_t layout depends on it.
3181
3182         * wtf/Platform.h:
3183
3184 2016-01-28  Darin Adler  <darin@apple.com>
3185
3186         Remove equalIgnoringCase since all callers really wanted equalIgnoringASCIICase
3187         https://bugs.webkit.org/show_bug.cgi?id=153411
3188
3189         Reviewed by Ryosuke Niwa.
3190
3191         * wtf/text/AtomicString.h: Removed equalIgnoringCase.
3192         Added some overloads for equalIgnoringASCIICase and moved the function bodies to
3193         bottom of the file to make the function declarations easier to read and scan through.
3194         I plan to do this for more of the functions in this class in the future.
3195
3196         * wtf/text/StringCommon.h: Added overloads for equalIgnoringASCIICase,
3197         equalPossiblyIgnoringASCIICase, and a helper named equalIgnoringASCIICaseCommon.
3198         Added an overload for equalLettersIgnoringASCIICase.
3199
3200         * wtf/text/StringImpl.cpp:
3201         (WTF::equalIgnoringCase): Made the few remaining versions of this function private
3202         to this file. Once we get done moving every client that should be using ASCII case
3203         instead to new functions, these will almost certainly be deleted.
3204         (WTF::equalIgnoringASCIICaseNonNull): Tweaked implementation a tiny bit.
3205
3206         * wtf/text/StringImpl.h: Sorted forward declarations at the top of the file.
3207         Fixed some small formatting mistakes. Removed equalIgnoringCase, but left
3208         equalIgnoringCaseNonNull behind for use by CaseFoldingHash until it is replaced
3209         with ASCIICaseFoldingHash. Improved equalIgnoringASCIICase implementation.
3210         Removed unneeded using for equalIgnoringASCIICase now that StringCommon.h takes
3211         care of it.
3212
3213         * wtf/text/StringView.cpp:
3214         (WTF::equalIgnoringASCIICase): Deleted. We no longer pass in the length for this,
3215         so the arguments have changed and the implementation is also now in ASCIICommon.h
3216         so it's an inline in the header file.
3217
3218         * wtf/text/StringView.h: Added an overload of equalIgnoringASCIICase,while
3219         removing another.
3220
3221         * wtf/text/WTFString.h: Removed some unneeded forward delcarations. Fixed formatting
3222         of the type name NSString *. Improved some comments. Removed equalIgnoringCase.
3223         Separated declaration from implementation in a few cases to start making the
3224         function declarations easier to read and scan through. I plan to do more in the future.
3225
3226 2016-01-27  Chris Dumez  <cdumez@apple.com>
3227
3228         window.atob() should ignore spaces in input
3229         https://bugs.webkit.org/show_bug.cgi?id=153522
3230         <rdar://problem/24357822>
3231
3232         Reviewed by Benjamin Poulain.
3233
3234         Turn Base64DecodePolicy enum into flags so that the caller can indicate
3235         to both validate padding AND ignore spaces.
3236
3237         Also make sure that the output Vector size is properly shrunk when
3238         spaces are ignored.
3239
3240         * wtf/text/Base64.cpp:
3241         (WTF::base64DecodeInternal):
3242         (WTF::base64Decode):
3243         (WTF::base64URLDecode):
3244         * wtf/text/Base64.h:
3245
3246 2016-01-27  Alexey Proskuryakov  <ap@apple.com>
3247
3248         Remove ENABLE_CURRENTSRC
3249         https://bugs.webkit.org/show_bug.cgi?id=153545
3250
3251         Reviewed by Simon Fraser.
3252
3253         * wtf/FeatureDefines.h:
3254
3255 2016-01-26  I-Ting Liu  <iting_liu@apple.com>
3256
3257         Implement wildcard matching for plug-in policy host.
3258         https://bugs.webkit.org/show_bug.cgi?id=153090
3259
3260         Reviewed by Darin Adler.
3261
3262         * wtf/text/AtomicString.h:
3263         (WTF::AtomicString::AtomicString):
3264         Add __bridge to allow compilation.
3265
3266 2016-01-26  Joseph Pecoraro  <pecoraro@apple.com>
3267
3268         Generalize ResourceUsageData gathering to be used outside of ResourceUsageOverlay
3269         https://bugs.webkit.org/show_bug.cgi?id=153509
3270         <rdar://problem/24354291>
3271
3272         Reviewed by Andreas Kling.
3273
3274         * wtf/Platform.h:
3275         Rename the ENABLE flag.
3276
3277 2016-01-26  Yusuke Suzuki  <utatane.tea@gmail.com>
3278
3279         Make HashTable iterators STL iterators compatible
3280         https://bugs.webkit.org/show_bug.cgi?id=153512
3281
3282         Reviewed by Alex Christensen.
3283
3284         While r178581 makes many hash table iterators STL compatible, still several iterators are not.
3285         This patch fixes that; inheriting std::iterator correctly to meet STL iterator requirements (like iterator_category etc.)
3286         It could recover Windows build failure.
3287
3288         * wtf/HashTable.h:
3289
3290 2016-01-26  Anders Carlsson  <andersca@apple.com>
3291
3292         BlockPtr needs boolean operators
3293         https://bugs.webkit.org/show_bug.cgi?id=153506
3294
3295         Reviewed by Tim Horton.
3296
3297         * wtf/BlockPtr.h:
3298
3299 2016-01-25  Filip Pizlo  <fpizlo@apple.com>
3300
3301         FTLB3Output should maintain good block order like the LLVM one does
3302         https://bugs.webkit.org/show_bug.cgi?id=152222
3303
3304         Reviewed by Geoffrey Garen.
3305
3306         In the FTL we need to be able to construct a list by inserting elements before other
3307         specific elements. We didn't already have a scalable way to do this, so this adds such a
3308         data structure to WTF. This also has changes to SentinelLinkedList to make it support
3309         these kinds of insertions.
3310
3311         * WTF.xcodeproj/project.pbxproj:
3312         * wtf/OrderMaker.h: Added.
3313         (WTF::OrderMaker::Node::Node):
3314         (WTF::OrderMaker::OrderMaker):
3315         (WTF::OrderMaker::prepend):
3316         (WTF::OrderMaker::append):
3317         (WTF::OrderMaker::insertBefore):
3318         (WTF::OrderMaker::insertAfter):
3319         (WTF::OrderMaker::iterator::iterator):
3320         (WTF::OrderMaker::iterator::operator*):
3321         (WTF::OrderMaker::iterator::operator++):
3322         (WTF::OrderMaker::iterator::operator==):
3323         (WTF::OrderMaker::iterator::operator!=):
3324         (WTF::OrderMaker::begin):
3325         (WTF::OrderMaker::end):
3326         (WTF::OrderMaker::newNode):
3327         * wtf/SentinelLinkedList.h:
3328         (WTF::BasicRawSentinelNode::isOnList):
3329         (WTF::BasicRawSentinelNode<T>::remove):
3330         (WTF::BasicRawSentinelNode<T>::prepend):
3331         (WTF::BasicRawSentinelNode<T>::append):
3332         (WTF::RawNode>::SentinelLinkedList):
3333         (WTF::RawNode>::push):
3334         (WTF::RawNode>::append):
3335         (WTF::RawNode>::remove):
3336         (WTF::RawNode>::prepend):
3337         (WTF::RawNode>::isOnList):
3338
3339 2016-01-25  Alex Christensen  <achristensen@webkit.org>
3340
3341         [Win] Copy forwarding headers before building a project
3342         https://bugs.webkit.org/show_bug.cgi?id=153434
3343
3344         Reviewed by Brent Fulgham.
3345
3346         * wtf/CMakeLists.txt:
3347         * wtf/PlatformWin.cmake:
3348
3349 2016-01-20  Ryosuke Niwa  <rniwa@webkit.org>
3350
3351         HTMLElement::nodeName should not upper case non-ASCII characters
3352         https://bugs.webkit.org/show_bug.cgi?id=153231
3353
3354         Reviewed by Darin Adler.
3355
3356         Added convertToASCIIUppercase to AtomicString, String, and StringImpl. 
3357
3358         * wtf/text/AtomicString.cpp:
3359         (WTF::AtomicString::convertASCIICase): Generalized from convertToASCIILowercase.
3360         (WTF::AtomicString::convertToASCIILowercase):
3361         (WTF::AtomicString::convertToASCIIUppercase):
3362         * wtf/text/AtomicString.h:
3363         * wtf/text/StringImpl.cpp:
3364         (WTF::StringImpl::convertASCIICase): Generalized from convertToASCIILowercase.
3365         (WTF::StringImpl::convertToASCIILowercase):
3366         (WTF::StringImpl::convertToASCIIUppercase):
3367         * wtf/text/StringImpl.h:
3368         * wtf/text/WTFString.cpp:
3369         (WTF::String::convertToASCIIUppercase): Added.
3370         * wtf/text/WTFString.h:
3371
3372 2016-01-22  Chris Dumez  <cdumez@apple.com>
3373
3374         Unreviewed attempt to fix the Windows build after r195452.
3375
3376         * wtf/text/WTFString.h:
3377
3378 2016-01-22  Darin Adler  <darin@apple.com>
3379
3380         Reduce use of equalIgnoringCase to just ignore ASCII case
3381         https://bugs.webkit.org/show_bug.cgi?id=153266
3382
3383         Reviewed by Ryosuke Niwa.
3384
3385         * wtf/ASCIICType.h:
3386         (WTF::isASCIIAlphaCaselessEqual): Loosened the assertion in this function
3387         so it can work with ASCII spaces, numeric digits, and some punctuation.
3388         Commented that we might want to change its name later.
3389
3390         * wtf/Assertions.cpp:
3391         (WTFInitializeLogChannelStatesFromString): Use equalLettersIgnoringASCIICase.
3392
3393         * wtf/text/AtomicString.h:
3394         (WTF::equalLettersIgnoringASCIICase): Added. Calls the version that takes a String.
3395
3396         * wtf/text/StringCommon.h:
3397         (WTF::equalLettersIgnoringASCIICase): Added. Takes a pointer to characters.
3398         (WTF::equalLettersIgnoringASCIICaseCommonWithoutLength): Added.
3399         (WTF::equalLettersIgnoringASCIICaseCommon): Added.
3400
3401         * wtf/text/StringImpl.h:
3402         (WTF::equalLettersIgnoringASCIICase): Added. Calls equalLettersIgnoringASCIICaseCommon.
3403
3404         * wtf/text/StringView.h:
3405         (WTF::equalLettersIgnoringASCIICase): Added. Calls equalLettersIgnoringASCIICaseCommon.
3406
3407         * wtf/text/WTFString.h: Reordered/reformatted a little.
3408         (WTF::equalIgnoringASCIICase): Added. Calls the version that takes a StringImpl.
3409
3410 2016-01-22  Csaba Osztrogonác  <ossy@webkit.org>
3411
3412         Buildfix for older GCCs after r195142
3413         https://bugs.webkit.org/show_bug.cgi?id=153351
3414
3415         Unreviewed buildfix.
3416
3417         * wtf/SystemTracing.h:
3418
3419 2016-01-21  Filip Pizlo  <fpizlo@apple.com>
3420
3421         REGRESSION(r195417): many tests crash
3422         https://bugs.webkit.org/show_bug.cgi?id=153316
3423
3424         Reviewed by Saam Barati.
3425
3426         This rolls out the StdLibExtras.h change, and simplifies RangeSet to not use binary search.
3427         That's fine for now, since B3 doesn't stress RangeSet enough right now.
3428
3429         * wtf/RangeSet.h:
3430         (WTF::RangeSet::contains):
3431         (WTF::RangeSet::overlaps):
3432         (WTF::RangeSet::clear):
3433         (WTF::RangeSet::findRange):
3434         * wtf/StdLibExtras.h:
3435         (WTF::binarySearchImpl):
3436         (WTF::binarySearch):
3437         (WTF::tryBinarySearch):
3438         (WTF::approximateBinarySearch):
3439
3440 2016-01-21  Filip Pizlo  <fpizlo@apple.com>
3441
3442         B3 should have load elimination
3443         https://bugs.webkit.org/show_bug.cgi?id=153288
3444
3445         Reviewed by Geoffrey Garen.
3446
3447         I needed a way to track sets of ranges, where there is a high likelihood that all of the
3448         ranges overlap. So I created RangeSet. It's a usually-sorted list of coalesced ranges.
3449         Practically this means that right now, FTL B3 will end up with two kinds of range sets: a set
3450         that just contains top and a set that contains nothing. In the future, most sets will either
3451         be top of empty but some of them will contain a handful of other things.
3452
3453         * WTF.xcodeproj/project.pbxproj:
3454         * wtf/CMakeLists.txt:
3455         * wtf/MathExtras.h:
3456         (WTF::leftShiftWithSaturation):
3457         (WTF::nonEmptyRangesOverlap):
3458         (WTF::rangesOverlap):
3459         * wtf/RangeSet.h: Added.
3460         (WTF::RangeSet::RangeSet):
3461         (WTF::RangeSet::~RangeSet):
3462         (WTF::RangeSet::add):
3463         (WTF::RangeSet::contains):
3464         (WTF::RangeSet::overlaps):
3465         (WTF::RangeSet::clear):
3466         (WTF::RangeSet::dump):
3467         (WTF::RangeSet::dumpRaw):
3468         (WTF::RangeSet::compact):
3469         (WTF::RangeSet::overlapsNonEmpty):
3470         (WTF::RangeSet::subsumesNonEmpty):
3471         (WTF::RangeSet::findRange):
3472         * wtf/StdLibExtras.h:
3473         (WTF::binarySearchImpl):
3474         (WTF::binarySearch):
3475         (WTF::tryBinarySearch):
3476         (WTF::approximateBinarySearch):
3477
3478 2016-01-19  Ada Chan  <adachan@apple.com>
3479
3480         Make it possible to enable VIDEO_PRESENTATION_MODE on other Cocoa platforms.
3481         https://bugs.webkit.org/show_bug.cgi?id=153218
3482
3483         Reviewed by Eric Carlson.
3484
3485         * wtf/Platform.h:
3486
3487 2016-01-19  Filip Pizlo  <fpizlo@apple.com>
3488
3489         B3 should have basic path specialization
3490         https://bugs.webkit.org/show_bug.cgi?id=153200
3491
3492         Reviewed by Benjamin Poulain.
3493
3494         * wtf/GraphNodeWorklist.h:
3495         (WTF::GraphNodeWorklist::push):
3496         (WTF::GraphNodeWorklist::pushAll):
3497         (WTF::GraphNodeWorklist::isEmpty):
3498         (WTF::GraphNodeWorklist::notEmpty):
3499
3500 2016-01-20  Said Abou-Hallawa  <sabouhallawa@apple.com>
3501
3502         Refactor AtomicStringKeyedMRUCache to be a generic LRU cache
3503         https://bugs.webkit.org/show_bug.cgi?id=153109
3504
3505         Reviewed by Darin Adler.
3506
3507         Refactor AtomicStringKeyedMRUCache, move it to WTF project and rename it
3508         to be TinyLRUCache. Define another template and call it TinyLRUCachePolicy.
3509         This one can be overridden for different keys and values. Its function is 
3510         creating the cached values.
3511
3512         * WTF.xcodeproj/project.pbxproj:
3513         * wtf/TinyLRUCache.h: Added.
3514         (WebCore::TinyLRUCachePolicy::isKeyNull):
3515         (WebCore::TinyLRUCachePolicy::createValueForNullKey):
3516         (WebCore::TinyLRUCachePolicy::createValueForKey):
3517         (WebCore::TinyLRUCache::get):
3518
3519 2016-01-19  Saam barati  <sbarati@apple.com>
3520
3521         WTF::Bag should be non-copyable
3522         https://bugs.webkit.org/show_bug.cgi?id=153253
3523
3524         Reviewed by Filip Pizlo.
3525
3526         * wtf/Bag.h:
3527         * wtf/SegmentedVector.h:
3528         (WTF::SegmentedVector::append):
3529         (WTF::SegmentedVector::alloc):
3530
3531 2016-01-19  Enrica Casucci  <enrica@apple.com>
3532
3533         Add support for DataDetectors in WK (iOS).
3534         https://bugs.webkit.org/show_bug.cgi?id=152989
3535         rdar://problem/22855960
3536
3537         Reviewed by Tim Horton.
3538
3539         Adding feature definition for data detection.
3540
3541         * wtf/FeatureDefines.h:
3542
3543 2016-01-19  Commit Queue  <commit-queue@webkit.org>
3544
3545         Unreviewed, rolling out r195300.
3546         https://bugs.webkit.org/show_bug.cgi?id=153244
3547
3548         enrica wants more time to fix Windows (Requested by thorton on
3549         #webkit).
3550
3551         Reverted changeset:
3552
3553         "Add support for DataDetectors in WK (iOS)."
3554         https://bugs.webkit.org/show_bug.cgi?id=152989
3555         http://trac.webkit.org/changeset/195300
3556
3557 2016-01-19  Chris Dumez  <cdumez@apple.com>
3558
3559         Unreviewed, rolling out r195141.
3560
3561         Seems to cause crashes on iOS9 64bit
3562
3563         Reverted changeset:
3564
3565         "Fragmentation-free allocator for timeless and/or coupled
3566         allocations."
3567         https://bugs.webkit.org/show_bug.cgi?id=152696
3568         http://trac.webkit.org/changeset/195141
3569
3570 2016-01-19  Enrica Casucci  <enrica@apple.com>
3571
3572         Add support for DataDetectors in WK (iOS).
3573         https://bugs.webkit.org/show_bug.cgi?id=152989
3574         rdar://problem/22855960
3575
3576         Reviewed by Tim Horton.
3577
3578         Adding feature definition for data detection.
3579
3580         * wtf/FeatureDefines.h:
3581
3582 2016-01-17  Filip Pizlo  <fpizlo@apple.com>
3583
3584         FTL B3 should be just as fast as FTL LLVM on Octane/crypto
3585         https://bugs.webkit.org/show_bug.cgi?id=153113
3586
3587         Reviewed by Saam Barati.