[CMake] Clean up some cruft from WTF's CMakeLists.txt
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-01-01  Raphael Kubo da Costa  <kubo@profusion.mobi>
2
3         [CMake] Clean up some cruft from WTF's CMakeLists.txt
4         https://bugs.webkit.org/show_bug.cgi?id=75420
5
6         Reviewed by Daniel Bates.
7
8         * wtf/CMakeLists.txt: Remove the unused WTF_PORT_FLAGS variable; add
9         all needed paths to WTF_INCLUDE_DIRECTORIES in a single place.
10
11 2012-01-08  Xianzhu Wang  <wangxianzhu@chromium.org>
12
13         Fix compilation error about ListHashSetReverseIterator
14         https://bugs.webkit.org/show_bug.cgi?id=75372
15
16         Reviewed by Darin Adler.
17
18         There is a typo in class ListHashSetReverseIterator:
19         typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
20         Should be
21         typedef ListHashSetConstReverseIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
22
23         * wtf/ListHashSet.h:
24
25 2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>
26
27         WinCE build fix after r104415.
28
29         * jit/JITExceptions.cpp:
30         * jit/JITExceptions.h:
31
32 2012-01-08  Filip Pizlo  <fpizlo@apple.com>
33
34         The JIT's protocol for exception handling should be available to other parts of the system
35         https://bugs.webkit.org/show_bug.cgi?id=75808
36         <rdar://problem/10661025>
37
38         Reviewed by Oliver Hunt.
39
40         * CMakeLists.txt:
41         * GNUmakefile.list.am:
42         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
43         * JavaScriptCore.xcodeproj/project.pbxproj:
44         * Target.pri:
45         * jit/JITExceptions.cpp: Added.
46         (JSC::genericThrow):
47         (JSC::jitThrow):
48         * jit/JITExceptions.h: Added.
49         * jit/JITStubs.cpp:
50         * runtime/JSGlobalData.h:
51
52 2012-01-06  Hajime Morrita  <morrita@chromium.org>
53
54         https://bugs.webkit.org/show_bug.cgi?id=75296
55         JSString should not have JS_EXPORTCLASS annotation
56
57         Reviewed by Kevin Ollivier.
58
59         * runtime/JSString.h: Removed JS_EXPORTCLASS annotation.
60         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
61         Added missing symbols which were hidden by JS_EXPORTCLASS.
62
63 2012-01-06  Michael Saboff  <msaboff@apple.com>
64
65         JSArray::pop() should compare SparseArrayValueMap::find() to SparseArrayValueMap::notFound()
66         https://bugs.webkit.org/show_bug.cgi?id=75757
67
68         Reviewed by Gavin Barraclough.
69
70         * runtime/JSArray.cpp:
71         (JSC::JSArray::pop): Changed map->end() to map->notFound().
72
73 2012-01-06  Filip Pizlo  <fpizlo@apple.com>
74
75         JIT stub slow paths that would be identical to that of an interpreter should be factored out
76         https://bugs.webkit.org/show_bug.cgi?id=75743
77         <rdar://problem/10657024>
78
79         Reviewed by Geoff Garen.
80
81         * GNUmakefile.list.am:
82         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
83         * JavaScriptCore.xcodeproj/project.pbxproj:
84         * jit/JITStubs.cpp:
85         (JSC::DEFINE_STUB_FUNCTION):
86         * runtime/CommonSlowPaths.h: Added.
87         (JSC::CommonSlowPaths::opInstanceOfSlow):
88         (JSC::CommonSlowPaths::opIn):
89         (JSC::CommonSlowPaths::opResolve):
90         (JSC::CommonSlowPaths::opResolveSkip):
91         (JSC::CommonSlowPaths::opResolveWithBase):
92         (JSC::CommonSlowPaths::opResolveWithThis):
93
94 2012-01-06  Sam Weinig  <sam@webkit.org>
95
96         Fix windows build.
97
98         * wtf/TypeTraits.cpp:
99
100 2012-01-05  Michael Saboff  <msaboff@apple.com>
101
102         Default HashTraits for Opcode don't work for Opcode = 0
103         https://bugs.webkit.org/show_bug.cgi?id=75595
104
105         Reviewed by Oliver Hunt.
106
107         Removed the populating of the m_opcodeIDTable table in the
108         case where the OpcodeID and Opcode are the same (m_enabled is false).
109         Instead we just cast the one type to the other.
110
111         * interpreter/Interpreter.cpp:
112         (JSC::Interpreter::initialize):
113         (JSC::Interpreter::isOpcode):
114         * interpreter/Interpreter.h:
115         (JSC::Interpreter::getOpcodeID):
116
117 2012-01-06  Sam Weinig  <sam@webkit.org>
118
119         Add a DecayArray type trait as a first step towards merging OwnPtr and OwnArrayPtr
120         https://bugs.webkit.org/show_bug.cgi?id=75737
121
122         Reviewed by Anders Carlsson.
123
124         * wtf/TypeTraits.cpp:
125         * wtf/TypeTraits.h:
126         Added a DecayArray trait, that can convert T[] and T[3] -> T*. DecayArray
127         is composed of some helpers which are also exposed, Conditional<>, which
128         can provide one type or another based on a boolean predicate, IsArray<>
129         which can deduce array types, and RemoveExtent<>, which removes the extent
130         from an array type. 
131
132 2012-01-06  Oliver Hunt  <oliver@apple.com>
133
134         GetByteArrayLength is incorrect
135         https://bugs.webkit.org/show_bug.cgi?id=75735
136
137         Reviewed by Filip Pizlo.
138
139         Load the byte array length from the correct location.
140         This stops an existing test from hanging.
141
142         * dfg/DFGSpeculativeJIT32_64.cpp:
143         (JSC::DFG::SpeculativeJIT::compile):
144         * dfg/DFGSpeculativeJIT64.cpp:
145         (JSC::DFG::SpeculativeJIT::compile):
146
147 2012-01-06  Filip Pizlo  <fpizlo@apple.com>
148
149         Fix build.
150
151         * JavaScriptCore.xcodeproj/project.pbxproj:
152
153 2012-01-06  Oliver Hunt  <oliver@apple.com>
154
155         DFG no longer optimises CanvasPixelArray
156         https://bugs.webkit.org/show_bug.cgi?id=75729
157
158         Reviewed by Gavin Barraclough.
159
160         Rename ByteArray (in its ClassInfo) to Uint8ClampedArray to match
161         the future name when we switch over to the new typed-array based
162         ImageData specification.
163
164         * runtime/JSByteArray.cpp:
165
166 2012-01-06  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
167
168         Use HashMap<OwnPtr> for SourceProviderCache items
169         https://bugs.webkit.org/show_bug.cgi?id=75346
170
171         Reviewed by Daniel Bates.
172
173         * parser/Parser.cpp:
174         * parser/SourceProviderCache.cpp:
175         (JSC::SourceProviderCache::clear):
176         (JSC::SourceProviderCache::add):
177         * parser/SourceProviderCache.h:
178
179 2012-01-06  Sam Weinig  <sam@webkit.org>
180
181         Remove unused OwnFastMallocPtr class.
182         https://bugs.webkit.org/show_bug.cgi?id=75722
183
184         Reviewed by Geoffrey Garen.
185
186         * GNUmakefile.list.am:
187         * JavaScriptCore.gypi:
188         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
189         * JavaScriptCore.xcodeproj/project.pbxproj:
190         * wtf/CMakeLists.txt:
191         * wtf/OwnFastMallocPtr.h: Removed.
192         * wtf/text/StringImpl.h:
193         * wtf/wtf.pro:
194
195 2012-01-06  Benjamin Poulain  <bpoulain@webkit.org>
196
197         [Mac] Sort the resources of JavaScriptCore.xcodeproj and remove duplicates
198         https://bugs.webkit.org/show_bug.cgi?id=75631
199
200         Reviewed by Andreas Kling.
201
202         * JavaScriptCore.xcodeproj/project.pbxproj:
203
204 2012-01-06  Eric Seidel  <eric@webkit.org> and Gustavo Noronha Silva  <gustavo.noronha@collabora.com>
205
206         Make the new WTF module build on Gtk
207         https://bugs.webkit.org/show_bug.cgi?id=75669
208
209         * GNUmakefile.am:
210
211 2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
212
213         [Qt] Remove un-needed VPATHs from project includes
214
215         Reviewed by Simon Hausmann.
216
217         * JavaScriptCore.pri:
218         * wtf/wtf.pri:
219
220 2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
221
222         [Qt] Move listing of include paths and libs to pri files in sources
223
224         Includepaths are sometimes modified by non-Qt contributors so keeping
225         them in files inside Sources makes it more likely that they are updated
226         along with project files for the other ports.
227
228         Using pri files instead of prf files for this also has the benefit that
229         the include() from the main target file can be parsed and followed by
230         Qt Creator -- something that does not work with load().
231
232         Dependency from a target to a library through the WEBKIT variable are
233         handled through forwarding-files in Tools/qmake/mkspecs/modules, which
234         set the source root of the module and include the right pri file.
235
236         Ideally we'd use the variant of include() that takes an optional
237         namespace to read the variables into, or the fromfile() function,
238         but both of these add an overhead of about 40% on the total qmake
239         runtime, due to making a deep copy of all the variables in the
240         project or re-reading all the prf files from scratch.
241
242         Reviewed by Simon Hausmann.
243         Reviewed by Ossy.
244
245         * JavaScriptCore.pri: Renamed from Tools/qmake/mkspecs/features/javascriptcore.prf.
246         * Target.pri:
247         * wtf/wtf.pri: Renamed from Tools/qmake/mkspecs/features/wtf.prf.
248         * wtf/wtf.pro:
249
250 2012-01-06  Hajime Morrita  <morrita@chromium.org>
251
252         WTF::String: Inline method shouldn't have WTF_EXPORT_PRIVATE
253         https://bugs.webkit.org/show_bug.cgi?id=75612
254
255         Reviewed by Kevin Ollivier.
256
257         * wtf/text/WTFString.h:
258         (WTF::String::findIgnoringCase):
259         (WTF::String::append):
260         (WTF::String::fromUTF8):
261         (WTF::String::fromUTF8WithLatin1Fallback):
262         (WTF::String::isHashTableDeletedValue):
263
264 2012-01-05  Dan Bernstein  <mitz@apple.com>
265
266         <rdar://problem/10633760> Update copyright strings
267
268         Reviewed by Mark Rowe.
269
270         * Info.plist:
271
272 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
273
274         Date constructor handles infinite values incorrectly.
275         https://bugs.webkit.org/show_bug.cgi?id=70998
276
277         Reviewed by Filip Pizlo.
278
279         * runtime/DateConstructor.cpp:
280         (JSC::constructDate):
281             - should be checking !finite rather then isnan.
282
283 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
284
285         date.toISOString produces incorrect results for dates with ms prior to 1970
286         https://bugs.webkit.org/show_bug.cgi?id=75684
287
288         Reviewed by Sam Weinig.
289
290         * runtime/DatePrototype.cpp:
291         (JSC::dateProtoFuncToISOString):
292
293 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
294
295         Array.prototype.lastIndexOf ignores undefined fromIndex.
296         https://bugs.webkit.org/show_bug.cgi?id=75678
297
298         Reviewed by Sam Weinig.
299
300         array.lastIndexOf(x, undefined) is equivalent to array.lastIndexOf(x, 0), not array.lastIndexOf(x)
301
302         * runtime/ArrayPrototype.cpp:
303         (JSC::arrayProtoFuncLastIndexOf):
304             - should check argumnet count, rather than checking agument value for undefined.
305
306 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
307
308         Date parsing is too restrictive.
309         https://bugs.webkit.org/show_bug.cgi?id=75671
310
311         Reviewed by Oliver Hunt.
312
313         ES5 date parsing currently requires all fields to be present, which does not match the spec (ES5.1 15.9.1.15).
314         The spec allow a date to be date only, or date + time.
315
316         The date portion on the should match: (pseudocode!:)
317             [(+|-)YY]YYYY[-MM[-DD]]
318         though we are slightly more liberal (permitted by the spec), allowing:
319             [+|-]Y+[-MM[-DD]]
320         The time portion should match:
321             THH:mm[:ss[.sss]][Z|(+|-)HH:mm]
322         again we're slightly more liberal, allowing:
323             THH:mm[:ss[.s+]][Z|(+|-)HH:mm]
324
325         * wtf/DateMath.cpp:
326         (WTF::parseES5DatePortion):
327             - Month/day fields are optional, default to 01.
328         (WTF::parseES5TimePortion):
329             - Hours/Minutes are requires, seconds/timezone are optional.
330         (WTF::parseES5DateFromNullTerminatedCharacters):
331             - Dates may be date only, or date + time.
332
333 2012-01-05  Bruno Dilly  <bdilly@profusion.mobi>
334
335         [EFL] Undefined references to ICU_I18N symbols on WTF
336         https://bugs.webkit.org/show_bug.cgi?id=75642
337
338         Unreviewed build fix.
339
340         Add ${ICU_I18N_LIBRARIES} to WTF_LIBRARIES on wtf efl platform cmake.
341         Some undefined references were ucol_setAttribute_44, ucol_close_44,
342         ucol_getAttribute_44...
343
344         * wtf/PlatformEfl.cmake:
345
346 2012-01-05  Geoffrey Garen  <ggaren@apple.com>
347
348         Refined the fast path for StringImpl::hash()
349         https://bugs.webkit.org/show_bug.cgi?id=75178
350
351         Reviewed by Darin Adler.
352
353         Moved the hash calculation code into an out-of-line function to clean up
354         the hot path.
355
356         No measurable benchmark change, but this knocks some samples off in
357         Instruments, and I think this is a step toward removing -fomit-frame-pointer.
358         
359         * wtf/text/StringImpl.cpp:
360         (WTF::StringImpl::hashSlowCase):
361         * wtf/text/StringImpl.h:
362         (WTF::StringImpl::hash): The patch.
363
364         * wtf/text/StringStatics.cpp:
365         (WTF::StringImpl::hashSlowCase): Abide by the cockamamie Windows build
366         scheme, which requires all out-of-line StringImpl functions used by
367         WebCore be defined in this file instead of StringImpl.cpp. (See http://trac.webkit.org/changeset/59187.)
368
369 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
370
371         Literal tab in JSONString fails
372         https://bugs.webkit.org/show_bug.cgi?id=71772
373
374         Reviewed by Oliver Hunt.
375
376         rfc4627 does not allow literal tab characters in JSON source.
377
378         * runtime/LiteralParser.cpp:
379         (JSC::isSafeStringCharacter):
380             - do not allow literal tab in StrictJSON mode.
381
382 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
383
384         push/shift fifo may consume excessive memory
385         https://bugs.webkit.org/show_bug.cgi?id=75610
386
387         Reviewed by Sam Weinig.
388
389         Array object commonly store data in a vector, consisting of a portion that is
390         in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
391         m_length and m_vectorLength). Calls to shift with grow the pre-capacity, and
392         the current algorithm for increaseVectorLength (used by push, or [[Put]]) will
393         never shrink the pre-capacity, so a push/shift fifo may consume an inordinate
394         amount of memory, whilst having a relatively small active length.
395
396         * runtime/JSArray.cpp:
397         (JSC::JSArray::increaseVectorLength):
398             - If m_indexBias is non-zero, decay it over time.
399
400 2012-01-05  Csaba Osztrogonác  <ossy@webkit.org>
401
402         unshift/pop fifo may consume excessive memory
403         https://bugs.webkit.org/show_bug.cgi?id=75588
404
405         Reviewed by Zoltan Herczeg.
406
407         Buildfix after r104120.
408
409         * runtime/JSArray.cpp: Remove useless asserts, baecause unsigned expression >= 0 is always true
410         (JSC::JSArray::unshiftCount):
411
412 2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>
413
414         Unreviewed gardening after r104134.
415
416         * wtf/Assertions.cpp:
417
418 2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>
419
420         Unreviewed gardening after r75605.
421
422         Rubber stamped by NOBODY Csaba Osztrogonác.
423
424         * wtf/Assertions.cpp:
425
426 2012-01-05  Benjamin Poulain  <benjamin@webkit.org>
427
428         Improve charactersAreAllASCII() to compare multiple characters at a time
429         https://bugs.webkit.org/show_bug.cgi?id=74063
430
431         Reviewed by Darin Adler.
432
433         A new header ASCIIFastPath.h contains the functions related to
434         the detection of ASCII by using machine words. Part of it comes from
435         WebCore's TextCodecASCIIFastPath.h.
436
437         The function charactersAreAllASCII() is moved to TextCodecASCIIFastPath.h
438         and is implemented with computer word comparison.
439         The gain over the previous implementation of charactersAreAllASCII() is of
440         the order of how many comparison are avoided (4x, 8x, 16x depending on the
441         format and the CPU type).
442
443         * GNUmakefile.list.am:
444         * JavaScriptCore.gypi:
445         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
446         * JavaScriptCore.xcodeproj/project.pbxproj:
447         * wtf/text/ASCIIFastPath.h: Added.
448         (WTF::isAlignedToMachineWord):
449         (WTF::alignToMachineWord):
450         (WTF::isAllASCII):
451         (WTF::charactersAreAllASCII):
452         * wtf/text/WTFString.h:
453         * wtf/wtf.pro:
454
455 2012-01-05  Mark Rowe  <mrowe@apple.com>
456
457         <http://webkit.org/b/75606> [Mac] WTF logging functions should output to both stderr and ASL
458
459         We should always log to both ASL and stderr on platforms where this won't result in launchd
460         duplicating the messages.
461
462         Reviewed by Dan Bernstein.
463
464         * wtf/Assertions.cpp:
465         (vprintf_stderr_common):
466
467 2012-01-05  Mark Rowe  <mrowe@apple.com>
468
469         <http://webkit.org/b/75605> WTF logging functions should call vprintf_stderr_common only once per line
470
471         Several of the WTF logging functions make multiple calls to vprintf_stderr_common to output a
472         single line of text. This results in strangely formatted output if vprintf_stderr_common is
473         retargeted to an output device that is message-oriented (such as ASL) rather than stream-oriented
474         like stderr.
475
476         Reviewed by Dan Bernstein.
477
478         * wtf/Assertions.cpp:
479         (vprintf_stderr_with_prefix): Helper function to prepend a given prefix on to the given format
480         string before handing it off to vprintf_stderr_common. This requires disabling warnings about
481         calling a printf-like function with a non-literal format string for this piece of code. It's
482         safe in this particular case as vprintf_stderr_with_prefix is only ever given a literal prefix.
483         (vprintf_stderr_with_trailing_newline): Helper function to append a trailling newline on to the
484         given format string if one does not already exist. It requires the same treatment with regards
485         to the non-literal format string warning.
486         (WTFReportAssertionFailureWithMessage): Switch to using vprintf_stderr_with_prefix.
487         (WTFReportBacktrace): Switch from calling fprintf directly to using fprintf_stderr_common.
488         (WTFReportFatalError): Switch to using vprintf_stderr_with_prefix.
489         (WTFReportError): Ditto.
490         (WTFLog): Switch to using vprintf_stderr_with_trailing_newline.
491         (WTFLogVerbose): Ditto.
492
493 2012-01-04  Gavin Barraclough  <barraclough@apple.com>
494
495         unshift/pop fifo may consume excessive memory
496         https://bugs.webkit.org/show_bug.cgi?id=75588
497
498         Reviewed by Sam Weinig.
499
500         The Array object commonly store data in a vector, consisting of a portion that
501         is in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
502         m_length and m_vectorLength). Calls to pop with grow the post-capacity, and the
503         current algorithm for increasePrefixVectorLength (used by unshift) will never
504         stink the post-capacity, so a unshift/pop fifo may consume an inordinate amount
505         of memory, whilst having a relatively small active length.
506
507         * runtime/JSArray.cpp:
508         (JSC::storageSize):
509             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
510         (JSC::SparseArrayValueMap::put):
511             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
512         (JSC::JSArray::increaseVectorLength):
513             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
514         (JSC::JSArray::unshiftCountSlowCase):
515             - renamed from increaseVectorPrefixLength (this was a bad name, since it
516               also moved the ArrayStorage header), rewritten.
517         (JSC::JSArray::shiftCount):
518             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned
519         (JSC::JSArray::unshiftCount):
520             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned,
521               increaseVectorPrefixLength renamed to unshiftCountSlowCase
522         (JSC::JSArray::sortNumeric):
523         * runtime/JSArray.h:
524             - Updated function declarations, m_indexBias should be unsigned.
525
526 2012-01-04  Mark Rowe  <mrowe@apple.com>
527
528         <http://webkit.org/b/75604> All instances of JSC::ArgumentsData appear to be leaked by JSC::Arguments
529
530         Since JSC::Arguments has an OwnPtr for a member it needs to override destroy
531         to ensure that the correct destructor is invoked. This is necessary because
532         JSCell subclasses all intentionally have non-virtual destructors.
533
534         Reviewed by Filip Pizlo.
535
536         * runtime/Arguments.cpp:
537         (JSC::Arguments::destroy):
538         * runtime/Arguments.h:
539
540 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
541
542         Unreviewed, accidentally turned off the JIT in previous commit. Turning
543         it back on.
544
545         * wtf/Platform.h:
546
547 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
548
549         Changed "return" to "break" in some macrology I introduced in
550         http://trac.webkit.org/changeset/104086. This is a benign change, as
551         "return" was technically correct for all uses of the macro.
552
553         Reviewed by Oliver Hunt.
554
555         * dfg/DFGGraph.cpp:
556         * wtf/Platform.h:
557
558 2012-01-04  Michael Saboff  <msaboff@apple.com>
559
560         StructureStubInfo not reset when corresponding MethodCallLinkInfo is reset
561         https://bugs.webkit.org/show_bug.cgi?id=75583
562
563         Reviewed by Filip Pizlo.
564
565         * bytecode/CodeBlock.cpp:
566         (JSC::CodeBlock::finalizeUnconditionally): Find the corresponding
567         StructureStubInfo and reset the appropriate JIT and
568         the StructureStubInfo itself when reseting a MethodCallLinkInfo.
569
570 2012-01-04  Michael Saboff  <msaboff@apple.com>
571
572         Invalid ASSERT() in DFGRepatch.cpp near line 385
573         https://bugs.webkit.org/show_bug.cgi?id=75584
574
575         Reviewed by Filip Pizlo.
576
577         * dfg/DFGRepatch.cpp:
578         (JSC::DFG::tryBuildGetByIDProtoList): Fixed ASSERT to use ==.
579
580 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
581
582         Incorrect use of DFG node reference counts when mutating the graph
583         https://bugs.webkit.org/show_bug.cgi?id=75580
584         <rdar://problem/10644607>
585
586         Reviewed by Oliver Hunt.
587         
588         Made deref(node) follow the pattern of ref(node), which it should have
589         to begin with.
590
591         * dfg/DFGGraph.cpp:
592         (JSC::DFG::Graph::refChildren):
593         (JSC::DFG::Graph::derefChildren):
594         * dfg/DFGGraph.h:
595         (JSC::DFG::Graph::deref):
596         (JSC::DFG::Graph::clearAndDerefChild1):
597         (JSC::DFG::Graph::clearAndDerefChild2):
598         (JSC::DFG::Graph::clearAndDerefChild3):
599         * dfg/DFGNode.h:
600         (JSC::DFG::Node::deref):
601         * dfg/DFGPropagator.cpp:
602         (JSC::DFG::Propagator::fixupNode):
603
604 2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
605
606         [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies
607
608         The custom qmake variable 'WEBKIT' is used for signaling that a
609         target depends in some way on other subproject of the WebKit
610         project. For now this is limited to the set of intermediate
611         libraries: wtf, javascriptcore, webcore, and webkit2.
612
613         This replaces the previous convension of using load(foo) for
614         just include paths, and CONFIG += foo to also link against foo.
615
616         Adding a dependency results in additional include paths being
617         available, and potentially linking to the library. This is
618         decided by the build system based on conditions such as what
619         kind of target is being built and the general build config.
620
621         An advantage to his approach is that it simplifies the individual
622         foo.prf files, for example by allowing us to use INCLUDEPATH +=
623         and LIBS += as normal instead of prepending.
624
625         Reviewed by Simon Hausmann.
626
627         * Target.pri:
628         * jsc.pro:
629         * wtf/wtf.pro:
630
631 2012-01-03  Filip Pizlo  <fpizlo@apple.com>
632
633         DFG: The assertion that a double-voted variable cannot become double-unvoted is wrong
634         https://bugs.webkit.org/show_bug.cgi?id=75516
635         <rdar://problem/10640266>
636
637         Reviewed by Gavin Barraclough.
638         
639         Removed the offending assertion, since it was wrong.  Also hardened the code to make
640         this case less likely by first having the propagator fixpoint converge, and then doing
641         double voting combined with a second fixpoint.  This is neutral on benchmarks and
642         fixes the assertion in a fairly low-risk way (i.e. we won't vote a variable double
643         until we've converged to the conclusion that it really is double).
644
645         * dfg/DFGPropagator.cpp:
646         (JSC::DFG::Propagator::propagatePredictions):
647         * dfg/DFGVariableAccessData.h:
648         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
649
650 2012-01-03  Filip Pizlo  <fpizlo@apple.com>
651
652         REGRESSION (r98196-98236): Incorrect layout of iGoogle with RSS feeds
653         https://bugs.webkit.org/show_bug.cgi?id=75303
654         <rdar://problem/10633533>
655
656         Reviewed by Gavin Barraclough.
657         
658         The this argument was not being kept alive in some cases during inlining and intrinsic
659         optimizations.
660
661         * dfg/DFGByteCodeParser.cpp:
662         (JSC::DFG::ByteCodeParser::handleCall):
663         (JSC::DFG::ByteCodeParser::emitFunctionCheck):
664         (JSC::DFG::ByteCodeParser::handleInlining):
665
666 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
667
668         Windows build fix.
669
670         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
671
672 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
673
674         Windows build fix.
675
676         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
677
678 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
679
680         https://bugs.webkit.org/show_bug.cgi?id=75140
681
682         Reviewed by Sam Weinig.
683
684         Rewrite JSArray::putSlowCase to be much cleaner & simpler.
685
686         This rewrite only significantly changes behaviour for sparse array, specifically
687         in how sparse arrays are reified back to vector form. This does not affect arrays
688         with less than 10000 entries (since these always use a vector). The more common
689         cases of sparse array behavior (though large sparse arrays are rare) - arrays that
690         always remain sparse, and arrays that are filled in reverse sequential order -
691         should be just as fast or faster (since reification is simpler & no longer
692         requires map lookups) after these changes.
693
694         Simplifying this code allows all cases of putByIndex that need to grow the vector
695         to do so via increaseVectorLength, which means that this method can encapsulate
696         the policy of determining how the vector should be grown.
697
698         No performance impact.
699
700         * runtime/JSArray.cpp:
701         (JSC::isDenseEnoughForVector):
702             - any array of length <= MIN_SPARSE_ARRAY_INDEX is dense enough for a vector.
703         (JSC::JSArray::putByIndex):
704             - simplify & comment.
705         (JSC::JSArray::putByIndexBeyondVectorLength):
706             - Re-written to be much clearer & simpler.
707         (JSC::JSArray::increaseVectorLength):
708         (JSC::JSArray::increaseVectorPrefixLength):
709             - add explicit checks against MAX_STORAGE_VECTOR_LENGTH, so clients do not need do so.
710         (JSC::JSArray::push):
711             - simplify & comment.
712         * runtime/JSArray.h:
713             - removed SparseArrayValueMap::take.
714
715 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
716
717         Windows build fix.
718
719         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
720
721 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
722
723         https://bugs.webkit.org/show_bug.cgi?id=75140
724
725         Reviewed by Sam Weinig.
726
727         Simplify JSArray creation - remove ArgsList/JSValue* create methods
728         (this functionality can be implemented in terms of tryCreateUninitialized).
729
730         * JavaScriptCore.exp:
731         * runtime/ArrayConstructor.cpp:
732             - use constructArray/constructEmptyArray instead of calling JSArray::create directly
733         (JSC::constructArrayWithSizeQuirk):
734         * runtime/JSArray.cpp:
735         * runtime/JSArray.h:
736             - removed ArgsList/JSValue* create methods
737         * runtime/JSGlobalObject.h:
738         (JSC::constructEmptyArray):
739         (JSC::constructArray):
740             - changed to be implemented in terms of JSArray::tryCreateUninitialized
741
742 2012-01-03  Gavin Barraclough  <barraclough@apple.com>
743
744         https://bugs.webkit.org/show_bug.cgi?id=75429
745         ThrowTypeError should be a singleton object
746
747         Reviewed by Sam Weinig.
748
749         Per section 13.2.3 of the spec.
750         We could change setAccessorDescriptor to be able to share the global
751         GetterSetter object, rather than storing the accessor functions and
752         creating a new GetterSetter in defineProperty - but this won't be a
753         small change to PropertyDescriptors (and would probably mean making
754         GetterSetter objects immutable?) - so I'll leave that for another
755         patch.
756
757         * JavaScriptCore.exp:
758             - don't export setAccessorDescriptor
759         * runtime/Arguments.cpp:
760         (JSC::Arguments::createStrictModeCallerIfNecessary):
761         (JSC::Arguments::createStrictModeCalleeIfNecessary):
762             - call throwTypeErrorGetterSetter instead of createTypeErrorFunction
763         * runtime/Error.cpp:
764         * runtime/Error.h:
765             - remove createTypeErrorFunction
766         * runtime/JSFunction.cpp:
767         * runtime/JSFunction.h:
768             - remove unused createDescriptorForThrowingProperty
769         * runtime/JSGlobalObject.cpp:
770         (JSC::JSGlobalObject::reset):
771         (JSC::JSGlobalObject::visitChildren):
772             - removed m_strictModeTypeErrorFunctionStructure.
773         * runtime/JSGlobalObject.h:
774         (JSC::JSGlobalObject::internalFunctionStructure):
775             - removed m_strictModeTypeErrorFunctionStructure.
776         * runtime/PropertyDescriptor.cpp:
777         (JSC::PropertyDescriptor::setAccessorDescriptor):
778             - changed to take a GetterSetter
779         * runtime/PropertyDescriptor.h:
780             - changed to take a GetterSetter
781
782 2012-01-02  Gavin Barraclough  <barraclough@apple.com>
783
784         Check in fixes for jsc tests following bug #75455.
785
786         * tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js:
787         * tests/mozilla/ecma/GlobalObject/15.1.2.2-2.js:
788
789 2012-01-02  Gavin Barraclough  <barraclough@apple.com>
790
791         https://bugs.webkit.org/show_bug.cgi?id=75452
792         If argument to Error is undefined, message is not set
793
794         Reviewed by Sam Weinig.
795
796         Per section 15.11.1.1 of the spec.
797
798         * runtime/ErrorInstance.h:
799         (JSC::ErrorInstance::create):
800         (JSC::ErrorInstance::finishCreation):
801
802 2012-01-02  Gavin Barraclough  <barraclough@apple.com>
803
804         ES5 prohibits parseInt from supporting octal
805         https://bugs.webkit.org/show_bug.cgi?id=75455
806
807         Reviewed by Sam Weinig.
808
809         See sections 15.1.2.2 and annex E.
810
811         * runtime/JSGlobalObjectFunctions.cpp:
812         (JSC::parseInt):
813
814 2012-01-02  Gavin Barraclough  <barraclough@apple.com>
815
816         https://bugs.webkit.org/show_bug.cgi?id=55343
817         Global JSON should be configurable but isn't
818
819         Reviewed by Sam Weinig.
820
821         * runtime/JSGlobalObject.cpp:
822         (JSC::JSGlobalObject::reset):
823             - make JSON configurable
824
825 2012-01-01  Filip Pizlo  <fpizlo@apple.com>
826
827         Call instructions should leave room for linking information
828         https://bugs.webkit.org/show_bug.cgi?id=75422
829         <rdar://problem/10633985>
830
831         Reviewed by Oliver Hunt.
832
833         * bytecode/Opcode.h:
834         * bytecompiler/BytecodeGenerator.cpp:
835         (JSC::BytecodeGenerator::emitCall):
836         (JSC::BytecodeGenerator::emitConstruct):
837
838 2011-12-31  Dan Bernstein  <mitz@apple.com>
839
840         Continue trying to fix the Windows build after r103823.
841
842         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
843
844 2011-12-31  Dan Bernstein  <mitz@apple.com>
845
846         Start trying to fix the Windows build after r103823.
847
848         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
849
850 2011-12-30  Anders Carlsson  <andersca@apple.com>
851
852         Add a ParamStorageTraits specialization for RetainPtr
853         https://bugs.webkit.org/show_bug.cgi?id=75392
854
855         Reviewed by Daniel Bates.
856
857         * wtf/Functional.h:
858         Add a partial specialization of ParamStorageTraits for RetainPtr<T>.
859
860         * wtf/RetainPtr.h:
861         Bring in the retainPtr function template from WTF.
862
863 2011-12-29  Sam Weinig  <sam@webkit.org>
864
865         It should be easier to iterate a Vector backwards
866         https://bugs.webkit.org/show_bug.cgi?id=75359
867
868         Reviewed by Anders Carlsson.
869
870         Adds Vector::rbegin(), Vector::rend(), and Vector::reversed(),
871         a new proxy driven way to access a vector backwards. One can use
872         reversed() in a range-based for loop like so:
873
874             for (auto val: myVector.reversed())
875                 doSomething(val)
876
877         * wtf/Vector.h:
878         (WTF::Vector::~Vector):
879         Fix style.
880
881         (WTF::Vector::rbegin):
882         (WTF::Vector::rend):
883         Added using standard adaptor std::reverse_iterator.
884
885         (WTF::Vector::reversed):
886         (WTF::Vector::VectorReverseProxy::begin):
887         (WTF::Vector::VectorReverseProxy::end):
888         Add proxy similar to one used in HashMap for keys() and values()
889         which allows access to a Vector backwards for use in range-based
890         for loops.
891
892 2011-12-29  Gavin Barraclough  <barraclough@apple.com>
893
894         https://bugs.webkit.org/show_bug.cgi?id=75140
895
896         Reviewed by Oliver Hunt.
897
898         Start cleaning up JSArray construction. JSArray has a set of create methods,
899         one of which (currently) takes a 'creation mode' enum parameter. Based on that
900         parameter, the constructor does one of two completely different things. If the
901         parameter is 'CreateInitialized' it creates an array, setting the length, but
902         does not eagerly allocate a storage vector of the specified length. A small
903         (BASE_VECTOR_LEN sized) initial vector will be allocated, and cleared, property
904         access to the vector will read the hole value (return undefined). The alternate
905         usage of this method ('CreateCompact') does something very different. It tries
906         to create an array of the requested length, and also allocates a storage vector
907         large enough to hold all properties. It does not clear the storage vector,
908         leaving the memory uninitialized and requiring the user to call a method
909         'uncheckedSetIndex' to initialize values in the vector.
910
911         This patch factors out these two behaviours, moving the 'CreateCompact' mode
912         into its own method, 'tryCreateUninitialized' (matching the naming for this
913         functionality in the string classes). 'tryCreateUninitialized' may return 0 if
914         memory allocation fails during construction of the object. The construction
915         pattern changes such that values added during initialization will be marked if
916         a GC is triggered during array allocation. 'CreateInitialized' no longer need
917         be passed to create a normal, fully constructed array with a length, and this
918         method is merged with the version of 'create' that does not take an initial
919         length (length parameter defaults to 0).
920
921         * JavaScriptCore.exp:
922         * runtime/ArrayConstructor.cpp:
923         (JSC::constructArrayWithSizeQuirk):
924             - removed 'CreateInitialized' argument
925         * runtime/ArrayPrototype.cpp:
926         (JSC::arrayProtoFuncSplice):
927             - changed to call 'tryCreateUninitialized'
928         * runtime/FunctionPrototype.cpp:
929         (JSC::functionProtoFuncBind):
930             - changed to call 'tryCreateUninitialized'
931         * runtime/JSArray.cpp:
932         (JSC::JSArray::JSArray):
933             - initialize m_storage to null; if construction fails, make destruction safe
934         (JSC::JSArray::finishCreation):
935             - merge versions of this method, takes an initialLength parameter defaulting to zero
936         (JSC::JSArray::tryFinishCreationUninitialized):
937             - version of 'finishCreation' that tries to eagerly allocate storage; may fail & return 0
938         (JSC::JSArray::~JSArray):
939             - check for null m_storage, in case array construction failed.
940         (JSC::JSArray::increaseVectorPrefixLength):
941         * runtime/JSArray.h:
942         (JSC::JSArray::create):
943             - merge versions of this method, takes an initialLength parameter defaulting to zero
944         (JSC::JSArray::tryCreateUninitialized):
945             - version of 'create' that tries to eagerly allocate storage; may fail & return 0
946         (JSC::JSArray::initializeIndex):
947         (JSC::JSArray::completeInitialization):
948             - used in conjunction with 'tryCreateUninitialized' to initialize the array
949         * runtime/JSGlobalObject.h:
950         (JSC::constructEmptyArray):
951             - removed 'CreateInitialized' argument
952         * runtime/RegExpConstructor.cpp:
953         (JSC::RegExpMatchesArray::finishCreation):
954             - removed 'CreateInitialized' argument
955
956 2011-12-29  Anders Carlsson  <andersca@apple.com>
957
958         Add a retainPtr function template
959         https://bugs.webkit.org/show_bug.cgi?id=75365
960
961         Reviewed by Dan Bernstein.
962
963         This makes it easier to make a RetainPtr using template argument deduction, which
964         is useful when passing RetainPtr objects as function arguments.
965
966         * wtf/RetainPtr.h:
967         (WTF::retainPtr):
968
969 2011-12-28  Yuqiang Xian  <yuqiang.xian@intel.com>
970
971         spill unboxed values in DFG 32_64
972         https://bugs.webkit.org/show_bug.cgi?id=75291
973
974         Reviewed by Filip Pizlo.
975
976         Currently all the values are spilled as boxed in DFG 32_64, which is
977         not necessary and introduces additional stores/loads. Instead we
978         can spill them as unboxed if feasible. It can be applied to the
979         Integers, Cells and Booleans in DFG 32_64. Doubles are left as is
980         because they don't need to be boxed at all. The modifications to the
981         spill/fill and the OSR exit are required, as well as a bug fix to the
982         "isUnknownJS" logic.
983
984         * bytecode/ValueRecovery.h:
985         (JSC::ValueRecovery::displacedInRegisterFile):
986         (JSC::ValueRecovery::virtualRegister):
987         (JSC::ValueRecovery::dump):
988         * dfg/DFGGenerationInfo.h:
989         (JSC::DFG::GenerationInfo::isUnknownJS):
990         (JSC::DFG::GenerationInfo::spill):
991         * dfg/DFGOSRExitCompiler32_64.cpp:
992         (JSC::DFG::OSRExitCompiler::compileExit):
993         * dfg/DFGSpeculativeJIT.cpp:
994         (JSC::DFG::SpeculativeJIT::isKnownNotBoolean):
995         * dfg/DFGSpeculativeJIT.h:
996         (JSC::DFG::SpeculativeJIT::silentFillGPR):
997         (JSC::DFG::SpeculativeJIT::spill):
998         * dfg/DFGSpeculativeJIT32_64.cpp:
999         (JSC::DFG::SpeculativeJIT::fillInteger):
1000         (JSC::DFG::SpeculativeJIT::fillDouble):
1001         (JSC::DFG::SpeculativeJIT::fillJSValue):
1002         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1003         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1004         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1005         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
1006         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
1007         (JSC::DFG::SpeculativeJIT::compile):
1008
1009 2011-12-28  Anders Carlsson  <andersca@apple.com>
1010
1011         Add an implicit block conversion operator to WTF::Function
1012         https://bugs.webkit.org/show_bug.cgi?id=75325
1013
1014         Reviewed by Dan Bernstein.
1015
1016         * wtf/Compiler.h:
1017         Add a define for COMPILER_SUPPORTS(BLOCKS). It's only defined for clang, since the gcc blocks implementation
1018         is buggy, especially when it comes to C++.
1019
1020         * wtf/Functional.h:
1021         Add a block conversion operator that creates and returns an autoreleased block that will call the function when executed.
1022
1023 2011-12-27  Anders Carlsson  <andersca@apple.com>
1024
1025         Add a new WTF::bind overload that takes 6 parameters
1026         https://bugs.webkit.org/show_bug.cgi?id=75287
1027
1028         Reviewed by Sam Weinig.
1029
1030         * wtf/Functional.h:
1031
1032 2011-12-27  Sam Weinig  <sam@webkit.org>
1033
1034         Continue moving compiler feature checks to use the COMPILER_SUPPORTS() macro
1035         https://bugs.webkit.org/show_bug.cgi?id=75268
1036
1037         Reviewed by Anders Carlsson.
1038
1039         * wtf/Compiler.h:
1040         Add support for COMPILER_SUPPORTS(CXX_NULLPTR) and COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).
1041
1042         * wtf/Noncopyable.h:
1043         Use COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).
1044
1045         * wtf/NullPtr.cpp:
1046         * wtf/NullPtr.h:
1047         Use COMPILER_SUPPORTS(CXX_NULLPTR). Remove support for HAVE(NULLPTR).
1048
1049         * wtf/RefPtr.h:
1050         * wtf/RetainPtr.h:
1051         Switch from HAVE(NULLPTR) to COMPILER_SUPPORTS(CXX_NULLPTR).
1052
1053 2011-12-27  Anders Carlsson  <andersca@apple.com>
1054
1055         Misc fixes and cleanups in Functional.h
1056         https://bugs.webkit.org/show_bug.cgi?id=75281
1057
1058         Reviewed by Andreas Kling.
1059
1060         - Reformat template declarations so that the class begins on a new line.
1061         - Change the parameter template parameters to start at P1 instead of P0.
1062         - Add function wrappers and bind overloads for 4 and 5 parameter functions.
1063         - Change the Function call operator to be const so const functions can be called.
1064
1065         * wtf/Functional.h:
1066
1067 2011-12-27  Tony Chang  <tony@chromium.org>
1068
1069         [chromium] Minor cleanup of gyp files.
1070         https://bugs.webkit.org/show_bug.cgi?id=75269
1071
1072         Reviewed by Adam Barth.
1073
1074         * JavaScriptCore.gyp/JavaScriptCore.gyp: msvs_guid is no longer needed
1075         and vim/emacs specific hooks should be added by the user.
1076
1077 2011-12-27  Gavin Barraclough  <barraclough@apple.com>
1078
1079         https://bugs.webkit.org/show_bug.cgi?id=75260
1080         Null name for host function can result in dereference of uninitialize memory
1081
1082         Reviewed by Filip Pizlo.
1083
1084         This is a recent regression in ToT, if the name passed to finishCreation of a host function is null,
1085         we are currently skipping the putDirect, which leaves memory uninitialized. This patch reverts the
1086         aspect of the change that introduced the issue.  It might be better if functions that don't have a
1087         name don't have this property at all, but that's change should be separate from fixing the bug.
1088
1089         * runtime/JSFunction.cpp:
1090         (JSC::JSFunction::finishCreation):
1091             - Always initialize the name property.
1092
1093 2011-12-27  Anders Carlsson  <andersca@apple.com>
1094
1095         Function should handle wrapping/unwrapping RefPtr and PassRefPtr
1096         https://bugs.webkit.org/show_bug.cgi?id=75266
1097
1098         Reviewed by Sam Weinig.
1099
1100         Add ParamStorageTraits that can be used for deciding how bound parameters should be stored
1101         and peeked at. For RefPtr we want to use the raw pointer when "peeking" to avoid ref-churn.
1102         For PassRefPtr, we want to use RefPtr for storage but still use the raw pointer when peeking.
1103
1104         * wtf/Functional.h:
1105         (WTF::ParamStorageTraits::wrap):
1106         (WTF::ParamStorageTraits::unwrap):
1107
1108 2011-12-27  Tony Chang  <tony@chromium.org>
1109
1110         [chromium] really enable wpo for WebCore libs and for WTF
1111         https://bugs.webkit.org/show_bug.cgi?id=75264
1112
1113         Reviewed by Adam Barth.
1114
1115         * JavaScriptCore.gyp/JavaScriptCore.gyp: Enable WPO for wtf and yarr.
1116
1117 2011-12-26  Gavin Barraclough  <barraclough@apple.com>
1118
1119         Errk! OS X build fix.
1120
1121         * JavaScriptCore.exp:
1122
1123 2011-12-26  Gavin Barraclough  <barraclough@apple.com>
1124
1125         Windows build fix.
1126
1127         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1128         * runtime/JSObject.h:
1129
1130 2011-12-26  Gavin Barraclough  <barraclough@apple.com>
1131
1132         https://bugs.webkit.org/show_bug.cgi?id=75231
1133         Fail to throw in strict mode on assign to read only static properties
1134
1135         Reviewed by Filip Pizlo.
1136
1137         There are three bugs here:
1138         * symbolTablePut should throw for strict mode accesses.
1139         * lookupPut should throw for strict mode accesses.
1140         * NumberConstructor should override put to call lookupPut, to trap assignment to readonly properties.
1141
1142         * runtime/JSActivation.cpp:
1143         (JSC::JSActivation::symbolTablePut):
1144         (JSC::JSActivation::put):
1145         * runtime/JSActivation.h:
1146         * runtime/JSGlobalObject.cpp:
1147         (JSC::JSGlobalObject::put):
1148         * runtime/JSStaticScopeObject.cpp:
1149         (JSC::JSStaticScopeObject::put):
1150         * runtime/JSVariableObject.h:
1151         (JSC::JSVariableObject::symbolTablePut):
1152         * runtime/Lookup.h:
1153         (JSC::lookupPut):
1154         * runtime/NumberConstructor.cpp:
1155         (JSC::NumberConstructor::put):
1156         * runtime/NumberConstructor.h:
1157
1158 2011-12-26  Gavin Barraclough  <barraclough@apple.com>
1159
1160         Fix miss-commit of utf8 change.
1161
1162         Reviewed by Filip Pizlo
1163
1164         Eeep, patch as landed a while ago had no effect! - acidentally landed
1165         modified version of patch used for performance testing.
1166
1167         (This isn't covered by layout tests because layour tests don't use jsc,
1168         and the tests/mozilla tests use latin1, which was already supported!)
1169
1170         Landing changes as intended (and as originally reviewed).
1171
1172         * jsc.cpp:
1173         (jscSource):
1174
1175 2011-12-26  Filip Pizlo  <fpizlo@apple.com>
1176
1177         Unreviewed build fix for ARMv7.
1178
1179         * assembler/MacroAssemblerARMv7.h:
1180         (JSC::MacroAssemblerARMv7::load16Signed):
1181         (JSC::MacroAssemblerARMv7::load8Signed):
1182
1183 2011-12-26  Hajime Morrita  <morrita@google.com>
1184
1185         Rename WTF_INLINE, JS_INLINE to HIDDEN_INLINE
1186         https://bugs.webkit.org/show_bug.cgi?id=74990
1187
1188         Reviewed by Kevin Ollivier.
1189
1190         * runtime/JSExportMacros.h: Removed JS_INLINE
1191         * wtf/ExportMacros.h: Renamed WTF_INLINE to HIDDEN_INLINE
1192
1193 2011-12-24  Filip Pizlo  <fpizlo@apple.com>
1194
1195         The ArgumentCount field in the CallFrame should have its tag left blank for other uses
1196         https://bugs.webkit.org/show_bug.cgi?id=75199
1197         <rdar://problem/10625105>
1198         <rdar://problem/10625106>
1199
1200         Reviewed by Oliver Hunt.
1201
1202         * dfg/DFGOSRExitCompiler32_64.cpp:
1203         (JSC::DFG::OSRExitCompiler::compileExit):
1204         * dfg/DFGOSRExitCompiler64.cpp:
1205         (JSC::DFG::OSRExitCompiler::compileExit):
1206         * dfg/DFGSpeculativeJIT.h:
1207         (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
1208         * dfg/DFGSpeculativeJIT32_64.cpp:
1209         (JSC::DFG::SpeculativeJIT::emitCall):
1210         * dfg/DFGSpeculativeJIT64.cpp:
1211         (JSC::DFG::SpeculativeJIT::emitCall):
1212         * interpreter/CallFrame.h:
1213         (JSC::ExecState::argumentCountIncludingThis):
1214         (JSC::ExecState::setArgumentCountIncludingThis):
1215         * interpreter/Register.h:
1216         (JSC::Register::unboxedInt32):
1217         (JSC::Register::unboxedBoolean):
1218         (JSC::Register::unboxedCell):
1219         (JSC::Register::payload):
1220         (JSC::Register::tag):
1221         * jit/JITCall.cpp:
1222         (JSC::JIT::compileOpCall):
1223         * jit/JITCall32_64.cpp:
1224         (JSC::JIT::compileLoadVarargs):
1225         (JSC::JIT::compileOpCall):
1226
1227 2011-12-25  Andreas Kling  <awesomekling@apple.com>
1228
1229         Yarr: Avoid copying vectors in CharacterClassConstructor.
1230         <http://webkit.org/b/75206>
1231
1232         Reviewed by Darin Adler.
1233
1234         Yarr::CharacterClassConstructor::charClass() was hot when loading twitter
1235         feeds (1.2%), replace the usage of Vector::append() by swap() since we're
1236         always clearing the source vector afterwards anyway.
1237
1238         * yarr/YarrPattern.cpp:
1239         (JSC::Yarr::CharacterClassConstructor::charClass):
1240
1241 2011-12-24  Darin Adler  <darin@apple.com>
1242
1243         Specialize HashTraits for RefPtr to use PassRefPtr as "pass type" to reduce reference count churn
1244         https://bugs.webkit.org/show_bug.cgi?id=72476
1245
1246         Reviewed by Sam Weinig.
1247
1248         * wtf/HashTraits.h: Defined PassInType and store function in HashTraits<RefPtr>.
1249
1250 2011-12-23  Geoffrey Garen  <ggaren@apple.com>
1251
1252         Inlined Yarr::execute
1253         https://bugs.webkit.org/show_bug.cgi?id=75180
1254
1255         Reviewed reluctantly by Beth Dakin.
1256         
1257         Tiny speedup on SunSpider string tests. Removes some samples from
1258         Instruments. A step toward removing -fomit-frame-pointer.
1259
1260         * yarr/YarrJIT.cpp:
1261         * yarr/YarrJIT.h:
1262         (JSC::Yarr::execute): ONE LINE FUNCTION, Y U NOT INLINED?!
1263
1264 2011-12-23  Filip Pizlo  <fpizlo@apple.com>
1265
1266         DFG loads from signed 8-bit and 16-bit typed arrays are broken
1267         https://bugs.webkit.org/show_bug.cgi?id=75163
1268
1269         Reviewed by Geoffrey Garen.
1270         
1271         Added 8-bit and 16-bit signed loads. Because doing so on ARM is less trivial, I'm
1272         currently disabling Int8Array and Int16Array optimizations on ARM.
1273
1274         * assembler/MacroAssemblerX86Common.h:
1275         (JSC::MacroAssemblerX86Common::load8Signed):
1276         (JSC::MacroAssemblerX86Common::load16Signed):
1277         * assembler/X86Assembler.h:
1278         (JSC::X86Assembler::movswl_mr):
1279         (JSC::X86Assembler::movsbl_mr):
1280         * bytecode/PredictedType.h:
1281         (JSC::isActionableMutableArrayPrediction):
1282         * dfg/DFGNode.h:
1283         (JSC::DFG::Node::shouldSpeculateInt8Array):
1284         (JSC::DFG::Node::shouldSpeculateInt16Array):
1285         * dfg/DFGSpeculativeJIT.cpp:
1286         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
1287
1288 2011-12-23  Filip Pizlo  <fpizlo@apple.com>
1289
1290         DFG does double-to-int conversion incorrectly when storing into int typed arrays
1291         https://bugs.webkit.org/show_bug.cgi?id=75164
1292         <rdar://problem/10557547>
1293
1294         Reviewed by Geoffrey Garen.
1295
1296         * assembler/MacroAssemblerARMv7.h:
1297         (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32):
1298         * assembler/MacroAssemblerX86Common.h:
1299         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToUint32):
1300         (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
1301         * dfg/DFGSpeculativeJIT.cpp:
1302         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1303
1304 2011-12-23  Geoffrey Garen  <ggaren@apple.com>
1305
1306         Refactored String.prototype.replace
1307         https://bugs.webkit.org/show_bug.cgi?id=75114
1308         
1309         Reviewed by Darin Adler.
1310
1311         No performance difference.
1312         
1313         I think this is a step toward removing -fomit-frame-pointer.
1314
1315         * runtime/JSString.cpp:
1316         * runtime/JSString.h: Removed the test and special case for a single-character
1317         search string because the standard path does this test and special case
1318         for us. (As an aside, if we do come up with a unique single-character
1319         replace optimization in future, it probably belongs in the replace function,
1320         and not in JSString.)
1321
1322         * runtime/StringPrototype.cpp:
1323         (JSC::stringProtoFuncReplace): Split this mega-sized function into:
1324         (JSC::replaceUsingStringSearch): - This reasonably sized function, and
1325         (JSC::replaceUsingRegExpSearch): - This still mega-sized function.
1326
1327 2011-12-23  Pierre Rossi  <pierre.rossi@gmail.com>
1328
1329         [Qt] REGRESSION(r103467): It broke fast/images/animated-gif-restored-from-bfcache.html
1330         https://bugs.webkit.org/show_bug.cgi?id=75087
1331
1332         monotonicallyIncreasingTime needs to hava a higher resolution than milliseconds.
1333
1334         Reviewed by Darin Adler.
1335
1336         * wtf/CurrentTime.cpp:
1337         (WTF::monotonicallyIncreasingTime):
1338
1339 2011-12-22  Filip Pizlo  <fpizlo@apple.com>
1340
1341         DFG should not speculate array even when predictions say that the base is not an array
1342         https://bugs.webkit.org/show_bug.cgi?id=75160
1343         <rdar://problem/10622646>
1344         <rdar://problem/10622649>
1345
1346         Reviewed by Oliver Hunt.
1347         
1348         Added the ability to call slow path when the base is known to not be an array.
1349         Also rationalized the logic for deciding when the index is not an int, and
1350         cleaned up the logic for deciding when to speculate typed array.
1351         
1352         Neutral for the most part, with odd speed-ups and slow-downs. The slow-downs can
1353         likely be mitigated by having the notion of a polymorphic array access, where we
1354         try, but don't speculate, to access the array one way before either trying some
1355         other ways or calling slow path.
1356
1357         * bytecode/PredictedType.h:
1358         (JSC::isActionableMutableArrayPrediction):
1359         (JSC::isActionableArrayPrediction):
1360         * dfg/DFGAbstractState.cpp:
1361         (JSC::DFG::AbstractState::execute):
1362         * dfg/DFGNode.h:
1363         (JSC::DFG::Node::shouldSpeculateInt8Array):
1364         (JSC::DFG::Node::shouldSpeculateInt16Array):
1365         (JSC::DFG::Node::shouldSpeculateInt32Array):
1366         (JSC::DFG::Node::shouldSpeculateUint8Array):
1367         (JSC::DFG::Node::shouldSpeculateUint16Array):
1368         (JSC::DFG::Node::shouldSpeculateUint32Array):
1369         (JSC::DFG::Node::shouldSpeculateFloat32Array):
1370         (JSC::DFG::Node::shouldSpeculateFloat64Array):
1371         * dfg/DFGPropagator.cpp:
1372         (JSC::DFG::Propagator::byValIsPure):
1373         * dfg/DFGSpeculativeJIT.cpp:
1374         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
1375         * dfg/DFGSpeculativeJIT32_64.cpp:
1376         (JSC::DFG::SpeculativeJIT::compile):
1377         * dfg/DFGSpeculativeJIT64.cpp:
1378         (JSC::DFG::SpeculativeJIT::compile):
1379
1380 2011-12-22  Gavin Barraclough  <barraclough@apple.com>
1381
1382         Unreviewed - fix stylebot issues from last patch.
1383
1384         * runtime/JSArray.cpp:
1385         (JSC::JSArray::putSlowCase):
1386
1387 2011-12-22  Gavin Barraclough  <barraclough@apple.com>
1388
1389         https://bugs.webkit.org/show_bug.cgi?id=75151
1390         Add attributes field to JSArray's SparseMap
1391
1392         Reviewed by Sam Weinig.
1393
1394         This will be necessary to be able to support non- writable/configurable/enumerable
1395         properties, and helpful for getters/setters.
1396
1397         Added a concept of being 'inSparseMode' - this indicates the array has a non-standard
1398
1399         * runtime/ArrayPrototype.cpp:
1400         (JSC::arrayProtoFuncSort):
1401             - JSArray::sort methods not allowed on arrays that are 'inSparseMode'.
1402               (must fall back to generic sort alogrithm).
1403         * runtime/JSArray.cpp:
1404         (JSC::JSArray::finishCreation):
1405             - moved reportedMapCapacity into the SparseArrayValueMap object.
1406         (JSC::SparseArrayValueMap::find):
1407         (JSC::SparseArrayValueMap::put):
1408         (JSC::SparseArrayValueMap::visitChildren):
1409             - Added.
1410         (JSC::JSArray::getOwnPropertySlotByIndex):
1411         (JSC::JSArray::getOwnPropertyDescriptor):
1412         (JSC::JSArray::putSlowCase):
1413         (JSC::JSArray::deletePropertyByIndex):
1414         (JSC::JSArray::getOwnPropertyNames):
1415         (JSC::JSArray::setLength):
1416         (JSC::JSArray::pop):
1417         (JSC::JSArray::visitChildren):
1418             - Updated for changes in SparseArrayValueMap.
1419         (JSC::JSArray::sortNumeric):
1420         (JSC::JSArray::sort):
1421         (JSC::JSArray::compactForSorting):
1422             - Disallow on 'SparseMode' arrays.
1423         * runtime/JSArray.h:
1424         (JSC::SparseArrayEntry::SparseArrayEntry):
1425             - An entry in the sparse array - value (WriteBarrier) + attributes.
1426         (JSC::SparseArrayValueMap::SparseArrayValueMap):
1427         (JSC::SparseArrayValueMap::sparseMode):
1428         (JSC::SparseArrayValueMap::setSparseMode):
1429             - Flags to track whether an Array is forced into SparseMode.
1430         (JSC::SparseArrayValueMap::remove):
1431         (JSC::SparseArrayValueMap::notFound):
1432         (JSC::SparseArrayValueMap::isEmpty):
1433         (JSC::SparseArrayValueMap::contains):
1434         (JSC::SparseArrayValueMap::size):
1435         (JSC::SparseArrayValueMap::begin):
1436         (JSC::SparseArrayValueMap::end):
1437             - accessors to the map
1438         (JSC::SparseArrayValueMap::take):
1439             - only for use on non-SpareMode arrays.
1440         (JSC::JSArray::inSparseMode):
1441             - Added.
1442
1443 2011-12-22  Filip Pizlo  <fpizlo@apple.com>
1444
1445         DFG CFA sometimes generates an incorrect proof that a node is known to be a typed array
1446         https://bugs.webkit.org/show_bug.cgi?id=75150
1447         <rdar://problem/10621900>
1448
1449         Reviewed by Gavin Barraclough.
1450
1451         * dfg/DFGAbstractState.cpp:
1452         (JSC::DFG::AbstractState::execute):
1453
1454 2011-12-22  Filip Pizlo  <fpizlo@apple.com>
1455
1456         DFG JIT does exactly the wrong thing when doing strict equality on two known cells
1457         https://bugs.webkit.org/show_bug.cgi?id=75138
1458         <rdar://problem/10621526>
1459
1460         Reviewed by Oliver Hunt.
1461
1462         * dfg/DFGSpeculativeJIT32_64.cpp:
1463         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
1464         * dfg/DFGSpeculativeJIT64.cpp:
1465         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
1466
1467 2011-12-22  Balazs Kelemen  <kbalazs@webkit.org>
1468
1469         Fix debug build with assertions disabled
1470         https://bugs.webkit.org/show_bug.cgi?id=75075
1471
1472         Reviewed by Darin Adler.
1473
1474         Check whether assertions are disabled instead of NDEBUG
1475         where appropriate to avoid "defined but not used" warnings.
1476
1477         * wtf/DateMath.cpp:
1478         (WTF::initializeDates):
1479
1480 2011-12-22  Mariusz Grzegorczyk  <mariusz.g@samsung.com>
1481
1482         [EFL] Missing plugins support for efl port
1483         https://bugs.webkit.org/show_bug.cgi?id=44505
1484
1485         Reviewed by Anders Carlsson.
1486
1487         Add define of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for efl port.
1488
1489         * wtf/Platform.h:
1490
1491 2011-12-22  Wei Charles  <charles.wei@torchmobile.com.cn>
1492
1493         Remove un-used data member of LiteralParser::Lex::m_string
1494         https://bugs.webkit.org/show_bug.cgi?id=68216
1495
1496         Reviewed by George Staikos.
1497
1498         * runtime/LiteralParser.h:
1499
1500 2011-12-21  Dan Bernstein  <mitz@apple.com>
1501
1502         OS X build fix after r103488.
1503
1504         * JavaScriptCore.exp:
1505
1506 2011-12-21  Konrad Piascik  <kpiascik@rim.com>
1507
1508         Implement the JavaScriptCore bindings for eventListenerHandlerLocation
1509         https://bugs.webkit.org/show_bug.cgi?id=74313
1510
1511         Reviewed by Eric Seidel.
1512
1513         Updated project files to get Windows and Mac builds working.
1514
1515         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1516         * JavaScriptCore.xcodeproj/project.pbxproj:
1517
1518 2011-12-21  Filip Pizlo  <fpizlo@apple.com>
1519
1520         DFG ConvertThis optimizations do not honor the distinction between the global object and the global this object
1521         https://bugs.webkit.org/show_bug.cgi?id=75058
1522         <rdar://problem/10616612>
1523         <rdar://problem/10617500>
1524
1525         Reviewed by Oliver Hunt.
1526         
1527         Added a call to toThisObject() in the DFG when planting a direct reference to the global this object.
1528         Instead of adding a separate toThisObject() method on JSCell which does not take ExecState*, I reascribed
1529         a new contract: if you're calling toThisObject() on JSObject or one of its subtypes, then the ExecState*
1530         is optional.
1531
1532         * dfg/DFGAssemblyHelpers.h:
1533         (JSC::DFG::AssemblyHelpers::globalThisObjectFor):
1534         * dfg/DFGSpeculativeJIT32_64.cpp:
1535         (JSC::DFG::SpeculativeJIT::compile):
1536         * dfg/DFGSpeculativeJIT64.cpp:
1537         (JSC::DFG::SpeculativeJIT::compile):
1538         * runtime/JSObject.h:
1539
1540 2011-12-21  Pierre Rossi  <pierre.rossi@gmail.com>
1541
1542         Implement montonicallyIncreasingClock() on Qt
1543         https://bugs.webkit.org/show_bug.cgi?id=62159
1544
1545         Reviewed by Darin Adler.
1546
1547         * wtf/CurrentTime.cpp:
1548         (WTF::monotonicallyIncreasingTime):
1549
1550 2011-12-20  Filip Pizlo  <fpizlo@apple.com>
1551
1552         32_64 baseline JIT should attempt to convert division results to integers, and record when that fails
1553         https://bugs.webkit.org/show_bug.cgi?id=74997
1554         <rdar://problem/10612389>
1555
1556         Reviewed by Gavin Barraclough.
1557
1558         * jit/JITArithmetic32_64.cpp:
1559         (JSC::JIT::emit_op_div):
1560
1561 2011-12-20  Filip Pizlo  <fpizlo@apple.com>
1562
1563         JavaScriptCore should be consistent about how it reads and writes ArgumentCount
1564         https://bugs.webkit.org/show_bug.cgi?id=74989
1565         <rdar://problem/10612006>
1566
1567         Reviewed by Gavin Barraclough.
1568
1569         * dfg/DFGJITCompiler.cpp:
1570         (JSC::DFG::JITCompiler::compileFunction):
1571         * jit/JIT.cpp:
1572         (JSC::JIT::privateCompile):
1573         * jit/JITCall32_64.cpp:
1574         (JSC::JIT::compileLoadVarargs):
1575         * jit/JITOpcodes32_64.cpp:
1576         (JSC::JIT::emit_op_get_arguments_length):
1577         (JSC::JIT::emit_op_get_argument_by_val):
1578         * jit/SpecializedThunkJIT.h:
1579         (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
1580
1581 2011-12-20  Filip Pizlo  <fpizlo@apple.com>
1582
1583         Value Profiles for arguments should be more easily accessible to the interpreter
1584         https://bugs.webkit.org/show_bug.cgi?id=74984
1585         <rdar://problem/10611364>
1586
1587         Reviewed by Gavin Barraclough.
1588
1589         * bytecode/CodeBlock.cpp:
1590         (JSC::CodeBlock::stronglyVisitStrongReferences):
1591         (JSC::CodeBlock::shouldOptimizeNow):
1592         (JSC::CodeBlock::dumpValueProfiles):
1593         * bytecode/CodeBlock.h:
1594         (JSC::CodeBlock::setArgumentValueProfileSize):
1595         (JSC::CodeBlock::numberOfArgumentValueProfiles):
1596         (JSC::CodeBlock::valueProfileForArgument):
1597         (JSC::CodeBlock::addValueProfile):
1598         (JSC::CodeBlock::valueProfile):
1599         (JSC::CodeBlock::valueProfileForBytecodeOffset):
1600         (JSC::CodeBlock::totalNumberOfValueProfiles):
1601         (JSC::CodeBlock::getFromAllValueProfiles):
1602         * bytecode/ValueProfile.h:
1603         (JSC::ValueProfile::ValueProfile):
1604         * jit/JIT.cpp:
1605         (JSC::JIT::privateCompile):
1606         * jit/JIT.h:
1607         * jit/JITInlineMethods.h:
1608         (JSC::JIT::emitValueProfilingSite):
1609
1610 2011-12-20  Gavin Barraclough  <barraclough@apple.com>
1611
1612         JSC shell should accept utf8 input.
1613
1614         Reviewed by Filip Pizlo.
1615
1616         * jsc.cpp:
1617         (jscSource):
1618         (functionRun):
1619         (functionLoad):
1620         (functionCheckSyntax):
1621         (runWithScripts):
1622         (runInteractive):
1623
1624 2011-12-20  Gavin Barraclough  <barraclough@apple.com>
1625
1626         Rubber Stamped by Sam Weinig
1627
1628         * runtime/JSGlobalData.cpp:
1629             - removed some dead code.
1630
1631 2011-12-19  Geoffrey Garen  <ggaren@apple.com>
1632
1633         Tightened up Vector<T>::append
1634         https://bugs.webkit.org/show_bug.cgi?id=74906
1635
1636         Reviewed by Sam Weinig.
1637
1638         Not a measurable speedup, but code inspection shows better code generated,
1639         and I believe this is a step toward turning off -fomit-frame-pointer.
1640
1641         * wtf/Vector.h:
1642         (WTF::::append):
1643         (WTF::::appendSlowCase): Split out the slow case into a separate function
1644         to keep unnecessary instructions off the hot path. This means the hot
1645         path can now be inlined more often.
1646         
1647         Removed some old MSVC7 cruft. Hopefully, we don't need to hang on to a
1648         compiler work-around from 2007.
1649
1650 2011-12-19  Yuqiang Xian  <yuqiang.xian@intel.com>
1651
1652         Temporary GPR should not be lazily allocated in DFG JIT on X86
1653         https://bugs.webkit.org/show_bug.cgi?id=74908
1654
1655         Reviewed by Filip Pizlo.
1656
1657         On X86, we used to allocate a temporary GPR lazily when it's really
1658         used rather than defined. This may cause potential issues of
1659         allocating registers inside control flow and result in problems in
1660         subsequent code generation, for example the DFG JIT may think an
1661         operand already being spilled (to satisfy the allocation request) and
1662         generate code to read the data from memory, but the allocation and
1663         spilling are in a branch which is not taken at runtime, so the
1664         generated code is incorrect.
1665
1666         Although current DFG JIT code doesn't have this problematic pattern,
1667         it's better to cut-off the root to avoid any potential issues in the
1668         future.
1669
1670         * dfg/DFGSpeculativeJIT.cpp:
1671         (JSC::DFG::GPRTemporary::GPRTemporary):
1672         * dfg/DFGSpeculativeJIT.h:
1673         (JSC::DFG::GPRTemporary::gpr):
1674         * dfg/DFGSpeculativeJIT32_64.cpp:
1675         (JSC::DFG::SpeculativeJIT::compile):
1676
1677 2011-12-19  Yuqiang Xian  <yuqiang.xian@intel.com>
1678
1679         Remove unused code for non-speculative Arith operations from DFG JIT
1680         https://bugs.webkit.org/show_bug.cgi?id=74905
1681
1682         Reviewed by Filip Pizlo.
1683
1684         * dfg/DFGSpeculativeJIT.h:
1685         * dfg/DFGSpeculativeJIT32_64.cpp:
1686         * dfg/DFGSpeculativeJIT64.cpp:
1687
1688 2011-12-19  Gavin Barraclough  <barraclough@apple.com>
1689
1690         https://bugs.webkit.org/show_bug.cgi?id=74903
1691         Exceptions not thrown correctly from DFG JIT on 32bit
1692
1693         Reviewed by Oliver Hunt.
1694
1695         Arguments for lookupExceptionHandler are not setup correctly.
1696         In the case of ARMv7 we rely on lr being preserved over a call,
1697         this in invalid. On x86 we don't should be poking the arguments onto the stack!
1698
1699         * bytecode/CodeBlock.h:
1700         (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
1701         * dfg/DFGAssemblyHelpers.h:
1702         (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
1703         * dfg/DFGGPRInfo.h:
1704         * dfg/DFGJITCompiler.cpp:
1705         (JSC::DFG::JITCompiler::compileBody):
1706         * dfg/DFGJITCompiler.h:
1707         (JSC::DFG::JITCompiler::addExceptionCheck):
1708         (JSC::DFG::JITCompiler::addFastExceptionCheck):
1709         * dfg/DFGOperations.cpp:
1710         * dfg/DFGOperations.h:
1711
1712 2011-12-19  Filip Pizlo  <fpizlo@apple.com>
1713
1714         If we detect that we can use the JIT, don't use computed opcode lookups
1715         https://bugs.webkit.org/show_bug.cgi?id=74899
1716         <rdar://problem/10604551>
1717
1718         Reviewed by Gavin Barraclough.
1719
1720         * interpreter/Interpreter.cpp:
1721         (JSC::Interpreter::Interpreter):
1722         (JSC::Interpreter::initialize):
1723         (JSC::Interpreter::privateExecute):
1724         * interpreter/Interpreter.h:
1725         (JSC::Interpreter::getOpcode):
1726         (JSC::Interpreter::getOpcodeID):
1727         * runtime/JSGlobalData.cpp:
1728         (JSC::JSGlobalData::JSGlobalData):
1729
1730 2011-12-19  Geoffrey Garen  <ggaren@apple.com>
1731
1732         Try to fix the Qt build.
1733
1734         Unreviewed.
1735
1736         * wtf/ThreadSpecific.h: #include!
1737
1738 2011-12-18  Filip Pizlo  <fpizlo@apple.com>
1739
1740         It should be possible to change the value of an Options variable without recompiling the world
1741         https://bugs.webkit.org/show_bug.cgi?id=74807
1742
1743         Reviewed by Gavin Barraclough.
1744
1745         * runtime/Options.cpp:
1746         (JSC::Options::initializeOptions):
1747         * runtime/Options.h:
1748
1749 2011-12-19  Sheriff Bot  <webkit.review.bot@gmail.com>
1750
1751         Unreviewed, rolling out r103250.
1752         http://trac.webkit.org/changeset/103250
1753         https://bugs.webkit.org/show_bug.cgi?id=74877
1754
1755         it still breaks codegen (Requested by olliej on #webkit).
1756
1757         * dfg/DFGAbstractState.cpp:
1758         (JSC::DFG::AbstractState::execute):
1759         * dfg/DFGByteCodeParser.cpp:
1760         (JSC::DFG::ByteCodeParser::parseBlock):
1761         * dfg/DFGNode.h:
1762         * dfg/DFGPropagator.cpp:
1763         (JSC::DFG::Propagator::propagateArithNodeFlags):
1764         (JSC::DFG::Propagator::fixupNode):
1765         (JSC::DFG::Propagator::byValIsPure):
1766         (JSC::DFG::Propagator::clobbersWorld):
1767         (JSC::DFG::Propagator::getByValLoadElimination):
1768         (JSC::DFG::Propagator::checkStructureLoadElimination):
1769         (JSC::DFG::Propagator::getByOffsetLoadElimination):
1770         (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
1771         (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
1772         (JSC::DFG::Propagator::performNodeCSE):
1773         * dfg/DFGSpeculativeJIT.cpp:
1774         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
1775         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1776         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
1777         * dfg/DFGSpeculativeJIT.h:
1778         * dfg/DFGSpeculativeJIT32_64.cpp:
1779         (JSC::DFG::SpeculativeJIT::compile):
1780         * dfg/DFGSpeculativeJIT64.cpp:
1781         (JSC::DFG::SpeculativeJIT::compile):
1782
1783 2011-12-16  Oliver Hunt  <oliver@apple.com>
1784
1785         Rolling r103120 back in with merge errors corrected.
1786
1787         PutByVal[Alias] unnecessarily reloads the storage buffer
1788         https://bugs.webkit.org/show_bug.cgi?id=74747
1789
1790         Reviewed by Gavin Barraclough.
1791
1792         Make PutByVal use GetIndexedStorage to load the storage buffer.
1793         This required switching PutByVal to a vararg node (which is
1794         responsible for most of the noise in this patch).  This fixes the
1795         remaining portion of the kraken regression caused by the GetByVal
1796         storage load elimination, and a 1-5% win on some of the sub tests of
1797         the typed array benchmark at:
1798         http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html
1799
1800         * dfg/DFGAbstractState.cpp:
1801         (JSC::DFG::AbstractState::execute):
1802         * dfg/DFGByteCodeParser.cpp:
1803         (JSC::DFG::ByteCodeParser::parseBlock):
1804         * dfg/DFGNode.h:
1805         * dfg/DFGPropagator.cpp:
1806         (JSC::DFG::Propagator::propagateArithNodeFlags):
1807         (JSC::DFG::Propagator::fixupNode):
1808         (JSC::DFG::Propagator::byValIndexIsPure):
1809         (JSC::DFG::Propagator::clobbersWorld):
1810         (JSC::DFG::Propagator::getByValLoadElimination):
1811         (JSC::DFG::Propagator::checkStructureLoadElimination):
1812         (JSC::DFG::Propagator::getByOffsetLoadElimination):
1813         (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
1814         (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
1815         (JSC::DFG::Propagator::performNodeCSE):
1816         * dfg/DFGSpeculativeJIT.cpp:
1817         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
1818         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1819         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
1820         * dfg/DFGSpeculativeJIT.h:
1821         * dfg/DFGSpeculativeJIT32_64.cpp:
1822         (JSC::DFG::SpeculativeJIT::compile):
1823         * dfg/DFGSpeculativeJIT64.cpp:
1824         (JSC::DFG::SpeculativeJIT::compile):
1825
1826 2011-12-15  Geoffrey Garen  <ggaren@apple.com>
1827
1828         Placement new does an unnecessary NULL check
1829         https://bugs.webkit.org/show_bug.cgi?id=74676
1830
1831         Reviewed by Sam Weinig.
1832
1833         We can define our own version, which skips the NULL check.
1834         
1835         Not a measurable speedup, but code inspection shows better code generated,
1836         and I believe this is a step toward turning off -fomit-frame-pointer.
1837
1838         * API/JSCallbackConstructor.h:
1839         (JSC::JSCallbackConstructor::create):
1840         * API/JSCallbackFunction.h:
1841         (JSC::JSCallbackFunction::create): Use the NotNull version of placement
1842         new to skip the NULL check.
1843
1844         * API/JSCallbackObject.h: Removed a conflicting, unnecessaray placement new.
1845
1846         (JSC::JSCallbackObject::create):
1847         * debugger/DebuggerActivation.h:
1848         (JSC::DebuggerActivation::create):
1849         * heap/HandleHeap.cpp:
1850         (JSC::HandleHeap::grow):
1851         * heap/HandleHeap.h:
1852         (JSC::HandleHeap::allocate):
1853         * heap/MarkedBlock.cpp:
1854         (JSC::MarkedBlock::create):
1855         (JSC::MarkedBlock::recycle):
1856         * jit/JITCode.h:
1857         (JSC::JITCode::clear):
1858         * jsc.cpp:
1859         (GlobalObject::create):
1860         * profiler/CallIdentifier.h:
1861         * runtime/Arguments.h:
1862         (JSC::Arguments::create):
1863         * runtime/ArrayConstructor.h:
1864         (JSC::ArrayConstructor::create):
1865         * runtime/ArrayPrototype.h:
1866         (JSC::ArrayPrototype::create):
1867         * runtime/BooleanConstructor.h:
1868         (JSC::BooleanConstructor::create):
1869         * runtime/BooleanObject.h:
1870         (JSC::BooleanObject::create):
1871         * runtime/BooleanPrototype.h:
1872         (JSC::BooleanPrototype::create):
1873         * runtime/DateConstructor.h:
1874         (JSC::DateConstructor::create):
1875         * runtime/DateInstance.h:
1876         (JSC::DateInstance::create):
1877         * runtime/DatePrototype.h:
1878         (JSC::DatePrototype::create):
1879         * runtime/Error.h:
1880         (JSC::StrictModeTypeErrorFunction::create):
1881         * runtime/ErrorConstructor.h:
1882         (JSC::ErrorConstructor::create):
1883         * runtime/ErrorInstance.h:
1884         (JSC::ErrorInstance::create):
1885         * runtime/ErrorPrototype.h:
1886         (JSC::ErrorPrototype::create):
1887         * runtime/ExceptionHelpers.h:
1888         (JSC::InterruptedExecutionError::create):
1889         (JSC::TerminatedExecutionError::create):
1890         * runtime/Executable.h:
1891         (JSC::NativeExecutable::create):
1892         (JSC::EvalExecutable::create):
1893         (JSC::ProgramExecutable::create):
1894         (JSC::FunctionExecutable::create):
1895         * runtime/FunctionConstructor.h:
1896         (JSC::FunctionConstructor::create):
1897         * runtime/FunctionPrototype.h:
1898         (JSC::FunctionPrototype::create):
1899         * runtime/GetterSetter.h:
1900         (JSC::GetterSetter::create):
1901         * runtime/JSAPIValueWrapper.h:
1902         (JSC::JSAPIValueWrapper::create):
1903         * runtime/JSActivation.h:
1904         (JSC::JSActivation::create):
1905         * runtime/JSArray.h:
1906         (JSC::JSArray::create):
1907         * runtime/JSBoundFunction.cpp:
1908         (JSC::JSBoundFunction::create):
1909         * runtime/JSByteArray.h:
1910         (JSC::JSByteArray::create): Use the NotNull version of placement
1911         new to skip the NULL check.
1912
1913         * runtime/JSCell.h: Removed a conflicting, unnecessaray placement new.
1914
1915         * runtime/JSFunction.cpp:
1916         (JSC::JSFunction::create):
1917         * runtime/JSFunction.h:
1918         (JSC::JSFunction::create):
1919         * runtime/JSGlobalObject.h:
1920         (JSC::JSGlobalObject::create):
1921         * runtime/JSGlobalThis.h:
1922         (JSC::JSGlobalThis::create):
1923         * runtime/JSNotAnObject.h:
1924         (JSC::JSNotAnObject::create):
1925         * runtime/JSONObject.h:
1926         (JSC::JSONObject::create):
1927         * runtime/JSObject.h:
1928         (JSC::JSFinalObject::create):
1929         * runtime/JSPropertyNameIterator.cpp:
1930         (JSC::JSPropertyNameIterator::create):
1931         * runtime/JSPropertyNameIterator.h:
1932         (JSC::JSPropertyNameIterator::create):
1933         * runtime/JSStaticScopeObject.h:
1934         (JSC::JSStaticScopeObject::create):
1935         * runtime/JSString.cpp:
1936         (JSC::StringObject::create):
1937         * runtime/JSString.h:
1938         (JSC::RopeBuilder::createNull):
1939         (JSC::RopeBuilder::create):
1940         (JSC::RopeBuilder::createHasOtherOwner):
1941         * runtime/MathObject.h:
1942         (JSC::MathObject::create):
1943         * runtime/NativeErrorConstructor.h:
1944         (JSC::NativeErrorConstructor::create):
1945         * runtime/NativeErrorPrototype.h:
1946         (JSC::NativeErrorPrototype::create):
1947         * runtime/NumberConstructor.h:
1948         (JSC::NumberConstructor::create):
1949         * runtime/NumberObject.h:
1950         (JSC::NumberObject::create):
1951         * runtime/NumberPrototype.h:
1952         (JSC::NumberPrototype::create):
1953         * runtime/ObjectConstructor.h:
1954         (JSC::ObjectConstructor::create):
1955         * runtime/ObjectPrototype.h:
1956         (JSC::ObjectPrototype::create):
1957         * runtime/RegExp.cpp:
1958         (JSC::RegExp::createWithoutCaching):
1959         * runtime/RegExpConstructor.h:
1960         (JSC::RegExpConstructor::create):
1961         * runtime/RegExpMatchesArray.h:
1962         (JSC::RegExpMatchesArray::create):
1963         * runtime/RegExpObject.h:
1964         (JSC::RegExpObject::create):
1965         * runtime/RegExpPrototype.h:
1966         (JSC::RegExpPrototype::create):
1967         * runtime/ScopeChain.h:
1968         (JSC::ScopeChainNode::create):
1969         * runtime/StrictEvalActivation.h:
1970         (JSC::StrictEvalActivation::create):
1971         * runtime/StringConstructor.h:
1972         (JSC::StringConstructor::create):
1973         * runtime/StringObject.h:
1974         (JSC::StringObject::create):
1975         * runtime/StringPrototype.h:
1976         (JSC::StringPrototype::create):
1977         * runtime/Structure.h:
1978         (JSC::Structure::create):
1979         (JSC::Structure::createStructure):
1980         * runtime/StructureChain.h:
1981         (JSC::StructureChain::create):
1982         * testRegExp.cpp:
1983         (GlobalObject::create):
1984         * wtf/BitVector.cpp:
1985         (WTF::BitVector::OutOfLineBits::create): Use the NotNull version of placement
1986         new to skip the NULL check.
1987
1988         * wtf/BumpPointerAllocator.h:
1989         (WTF::BumpPointerPool::create): Standardized spacing to make grep easier.
1990
1991         * wtf/ByteArray.cpp:
1992         (WTF::ByteArray::create):
1993         * wtf/Deque.h:
1994         (WTF::::append):
1995         (WTF::::prepend): Use NotNull, as above.
1996
1997         * wtf/FastAllocBase.h: Added a placement new, since this class would otherwise
1998         hide the name of the global placement new.
1999
2000         (WTF::fastNew): Standardized spacing. Most of these functions don't need
2001         NotNull, since they check for NULL, and the optimizer can see that.
2002
2003         * wtf/HashTable.h:
2004         * wtf/HashTraits.h:
2005         (WTF::SimpleClassHashTraits::constructDeletedValue):
2006         * wtf/MetaAllocator.cpp:
2007         (WTF::MetaAllocator::allocFreeSpaceNode): NotNull, as above.
2008
2009         * wtf/StdLibExtras.h:
2010         (throw): This is our NotNull placement new. Declaring that we throw is
2011         the C++ way to say that operator new will not return NULL.
2012
2013         * wtf/ThreadSpecific.h:
2014         (WTF::T):
2015         * wtf/Vector.h:
2016         (WTF::::append):
2017         (WTF::::tryAppend):
2018         (WTF::::uncheckedAppend):
2019         (WTF::::insert):
2020         * wtf/text/AtomicStringHash.h:
2021         * wtf/text/StringImpl.cpp:
2022         (WTF::StringImpl::createUninitialized):
2023         (WTF::StringImpl::reallocate):
2024         * wtf/text/StringImpl.h:
2025         (WTF::StringImpl::tryCreateUninitialized):
2026         * wtf/text/StringStatics.cpp:
2027         (WTF::AtomicString::init): Use NotNull, as above.
2028
2029         * yarr/YarrInterpreter.cpp:
2030         (JSC::Yarr::Interpreter::allocDisjunctionContext):
2031         (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
2032         (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): Standardized
2033         spacing for easy grep.
2034
2035 2011-12-19  Eric Carlson  <eric.carlson@apple.com>
2036
2037         Enable <track> for Mac build
2038         https://bugs.webkit.org/show_bug.cgi?id=74838
2039
2040         Reviewed by Darin Adler.
2041
2042         * wtf/Platform.h:
2043
2044 2011-12-18  Filip Pizlo  <fpizlo@apple.com>
2045
2046         DFG is too sloppy with register allocation
2047         https://bugs.webkit.org/show_bug.cgi?id=74835
2048
2049         Reviewed by Gavin Barraclough.
2050         
2051         Added assertions that at the end of a successfully generated basic block,
2052         all use counts should be zero. This revealed a number of bugs:
2053         
2054         - Array length optimizations were turning a must-generate node into one
2055           that is not must-generate, but failing to change the ref count
2056           accordingly.
2057           
2058         - Indexed property storage optimizations were failing to deref their
2059           children, or to deref the indexed property storage node itself. Also,
2060           they used the Phantom node as a replacement. But the Phantom node is
2061           must-generate, which was causing bizarre issues. So this introduces a
2062           Nop node, which should be used in cases where you want a node that is
2063           skipped and has no children.
2064           
2065         This does not have any significant performance effect, but it should
2066         relieve some register pressure. The main thing this patch adds, though,
2067         are the assertions, which should make it easier to do register allocation
2068         related changes in the future.
2069
2070         * dfg/DFGAbstractState.cpp:
2071         (JSC::DFG::AbstractState::execute):
2072         * dfg/DFGGenerationInfo.h:
2073         (JSC::DFG::GenerationInfo::initConstant):
2074         (JSC::DFG::GenerationInfo::initInteger):
2075         (JSC::DFG::GenerationInfo::initJSValue):
2076         (JSC::DFG::GenerationInfo::initCell):
2077         (JSC::DFG::GenerationInfo::initBoolean):
2078         (JSC::DFG::GenerationInfo::initDouble):
2079         (JSC::DFG::GenerationInfo::initStorage):
2080         (JSC::DFG::GenerationInfo::use):
2081         * dfg/DFGGraph.h:
2082         (JSC::DFG::Graph::clearAndDerefChild1):
2083         (JSC::DFG::Graph::clearAndDerefChild2):
2084         (JSC::DFG::Graph::clearAndDerefChild3):
2085         * dfg/DFGNode.h:
2086         (JSC::DFG::Node::deref):
2087         * dfg/DFGPropagator.cpp:
2088         (JSC::DFG::Propagator::propagateNodePredictions):
2089         (JSC::DFG::Propagator::fixupNode):
2090         * dfg/DFGSpeculativeJIT.cpp:
2091         (JSC::DFG::SpeculativeJIT::compile):
2092         * dfg/DFGSpeculativeJIT32_64.cpp:
2093         (JSC::DFG::SpeculativeJIT::compile):
2094         * dfg/DFGSpeculativeJIT64.cpp:
2095         (JSC::DFG::SpeculativeJIT::compile):
2096
2097 2011-12-18  Benjamin Poulain  <bpoulain@apple.com>
2098
2099         Remove the duplicated code from ASCIICType.h
2100         https://bugs.webkit.org/show_bug.cgi?id=74771
2101
2102         Reviewed by Andreas Kling.
2103
2104         Use isASCIIDigit() and isASCIIAlpha() instead of copying the code.
2105
2106         * wtf/ASCIICType.h:
2107         (WTF::isASCIIDigit):
2108         (WTF::isASCIIAlphanumeric):
2109         (WTF::isASCIIHexDigit):
2110
2111 2011-12-18  Anders Carlsson  <andersca@apple.com>
2112
2113         Set the main frame view scroll position asynchronously
2114         https://bugs.webkit.org/show_bug.cgi?id=74823
2115
2116         Reviewed by Sam Weinig.
2117
2118         * JavaScriptCore.exp:
2119
2120 2011-12-10  Andreas Kling  <kling@webkit.org>
2121
2122         OpaqueJSClass: Remove RVCT2 workarounds.
2123         <http://webkit.org/b/74250>
2124
2125         Reviewed by Benjamin Poulain.
2126
2127         We no longer need workarounds for the RVCT2 compiler since it was
2128         only used for the Symbian port of WebKit which is now defunct.
2129
2130         * API/JSClassRef.cpp:
2131         (OpaqueJSClass::OpaqueJSClass):
2132         (OpaqueJSClassContextData::OpaqueJSClassContextData):
2133
2134 2011-12-16  Benjamin Poulain  <bpoulain@apple.com>
2135
2136         Remove the duplicated code from ASCIICType.h
2137         https://bugs.webkit.org/show_bug.cgi?id=74771
2138
2139         Reviewed by Andreas Kling.
2140
2141         The functions were sharing similar code and were defined for the various input types.
2142         Use templates instead to avoid code duplication.
2143
2144         * wtf/ASCIICType.h:
2145         (WTF::isASCII):
2146         (WTF::isASCIIAlpha):
2147         (WTF::isASCIIAlphanumeric):
2148         (WTF::isASCIIDigit):
2149         (WTF::isASCIIHexDigit):
2150         (WTF::isASCIILower):
2151         (WTF::isASCIIOctalDigit):
2152         (WTF::isASCIIPrintable):
2153         (WTF::isASCIISpace):
2154         (WTF::isASCIIUpper):
2155         (WTF::toASCIILower):
2156         (WTF::toASCIIUpper):
2157         (WTF::toASCIIHexValue):
2158         (WTF::lowerNibbleToASCIIHexDigit):
2159         (WTF::upperNibbleToASCIIHexDigit):
2160
2161 2011-12-16  Filip Pizlo  <fpizlo@apple.com>
2162
2163         DFG OSR exit may get confused about where in the scratch buffer it stored a value
2164         https://bugs.webkit.org/show_bug.cgi?id=74695
2165
2166         Reviewed by Oliver Hunt.
2167         
2168         The code that reads from the scratch buffer now explicitly knows which locations to
2169         read from. No new tests, since this patch covers a case so uncommon that I don't know
2170         how to make a test for it.
2171
2172         * dfg/DFGOSRExitCompiler.h:
2173         (JSC::DFG::OSRExitCompiler::badIndex):
2174         (JSC::DFG::OSRExitCompiler::initializePoisoned):
2175         (JSC::DFG::OSRExitCompiler::poisonIndex):
2176         * dfg/DFGOSRExitCompiler32_64.cpp:
2177         (JSC::DFG::OSRExitCompiler::compileExit):
2178         * dfg/DFGOSRExitCompiler64.cpp:
2179         (JSC::DFG::OSRExitCompiler::compileExit):
2180
2181 2011-12-16  Oliver Hunt  <oliver@apple.com>
2182
2183         PutByVal[Alias] unnecessarily reloads the storage buffer
2184         https://bugs.webkit.org/show_bug.cgi?id=74747
2185
2186         Reviewed by Gavin Barraclough.
2187
2188         Make PutByVal use GetIndexedStorage to load the storage buffer.
2189         This required switching PutByVal to a vararg node (which is
2190         responsible for most of the noise in this patch).  This fixes the
2191         remaining portion of the kraken regression caused by the GetByVal
2192         storage load elimination, and a 1-5% win on some of the sub tests of
2193         the typed array benchmark at:
2194         http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html
2195
2196         * dfg/DFGAbstractState.cpp:
2197         (JSC::DFG::AbstractState::execute):
2198         * dfg/DFGByteCodeParser.cpp:
2199         (JSC::DFG::ByteCodeParser::parseBlock):
2200         * dfg/DFGNode.h:
2201         * dfg/DFGPropagator.cpp:
2202         (JSC::DFG::Propagator::propagateArithNodeFlags):
2203         (JSC::DFG::Propagator::fixupNode):
2204         (JSC::DFG::Propagator::byValIndexIsPure):
2205         (JSC::DFG::Propagator::clobbersWorld):
2206         (JSC::DFG::Propagator::getByValLoadElimination):
2207         (JSC::DFG::Propagator::checkStructureLoadElimination):
2208         (JSC::DFG::Propagator::getByOffsetLoadElimination):
2209         (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
2210         (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
2211         (JSC::DFG::Propagator::performNodeCSE):
2212         * dfg/DFGSpeculativeJIT.cpp:
2213         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
2214         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2215         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
2216         * dfg/DFGSpeculativeJIT.h:
2217         * dfg/DFGSpeculativeJIT32_64.cpp:
2218         (JSC::DFG::SpeculativeJIT::compile):
2219         * dfg/DFGSpeculativeJIT64.cpp:
2220         (JSC::DFG::SpeculativeJIT::compile):
2221
2222 2011-12-16  Daniel Bates  <dbates@rim.com>
2223
2224         Include BlackBerryPlatformLog.h instead of BlackBerryPlatformMisc.h
2225
2226         Rubber-stamped by Antonio Gomes.
2227
2228         BlackBerry::Platform::logV() is declared in BlackBerryPlatformLog.h. That is, it isn't
2229         declared in BlackBerryPlatformMisc.h. Hence, we should include BlackBerryPlatformLog.h
2230         instead of BlackBerryPlatformMisc.h.
2231
2232         * wtf/Assertions.cpp:
2233
2234 2011-12-16  Mark Hahnenberg  <mhahnenberg@apple.com>
2235
2236         De-virtualize destructors
2237         https://bugs.webkit.org/show_bug.cgi?id=74331
2238
2239         Reviewed by Geoffrey Garen.
2240
2241         This is a megapatch which frees us from the chains of virtual destructors.
2242
2243         In order to remove the virtual destructors, which are the last of the virtual 
2244         functions, from the JSCell hierarchy, we need to add the ClassInfo pointer to 
2245         the cell rather than to the structure because in order to be able to lazily call 
2246         the static destroy() functions that will replace the virtual destructors, we 
2247         need to be able to access the ClassInfo without the danger of the object's 
2248         Structure being collected before the object itself.
2249
2250         After adding the ClassInfo to the cell, we can then begin to remove our use 
2251         of vptrs for optimizations within the JIT and the GC.  When we have removed 
2252         all of the stored vptrs from JSGlobalData, we can then also remove all of 
2253         the related VPtrStealingHack code.
2254
2255         The replacement for virtual destructors will be to add a static destroy function 
2256         pointer to the MethodTable stored in ClassInfo.  Any subclass of JSCell that has 
2257         a non-trivial destructor will require its own static destroy function to static 
2258         call its corresponding destructor, which will now be non-virtual.  In future 
2259         patches we will slowly move away from destructors altogether as we make more and 
2260         more objects backed by GC memory rather than malloc-ed memory.  The GC will now 
2261         call the static destroy method rather than the virtual destructor.
2262
2263         As we go through the hierarchy and add static destroy functions to classes, 
2264         we will also add a new assert, ASSERT_HAS_TRIVIAL_DESTRUCTOR, to those classes 
2265         to which it applies.  The future goal is to eventually have every class have that assert.
2266
2267         * API/JSCallbackConstructor.cpp:
2268         (JSC::JSCallbackConstructor::destroy): Add a destroy function to statically call 
2269         ~JSCallbackConstructor because it has some extra destruction logic.
2270         * API/JSCallbackConstructor.h:
2271         * API/JSCallbackFunction.cpp: Add trivial destructor assert for JSCallbackFunction.
2272         * API/JSCallbackObject.cpp: Add a destroy function to statically call ~JSCallbackObject 
2273         because it has a member OwnPtr that needs destruction.
2274         (JSC::::destroy):
2275         * API/JSCallbackObject.h:
2276         * JavaScriptCore.exp: Add/remove necessary symbols for JSC.
2277         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Same for Windows symbols.
2278         * debugger/DebuggerActivation.cpp: DebuggerActivation, for some strange reason, didn't 
2279         have its own ClassInfo despite the fact that it overrides a number of MethodTable 
2280         methods.  Added the ClassInfo, along with an assertion that its destructor is trivial.
2281         * debugger/DebuggerActivation.h:
2282         * dfg/DFGOperations.cpp: Remove global data first argument to isJSArray, isJSByteArray, 
2283         isJSString, as it is no longer necessary.
2284         (JSC::DFG::putByVal):
2285         * dfg/DFGRepatch.cpp:  Ditto.  Also remove uses of jsArrayVPtr in favor of using the 
2286         JSArray ClassInfo pointer.
2287         (JSC::DFG::tryCacheGetByID):
2288         * dfg/DFGSpeculativeJIT.cpp:  Replace uses of the old vptrs with new ClassInfo 
2289         comparisons since we don't have vptrs anymore.
2290         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
2291         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2292         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
2293         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
2294         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
2295         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2296         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
2297         (JSC::DFG::SpeculativeJIT::compare):
2298         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2299         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
2300         * dfg/DFGSpeculativeJIT.h: Ditto.
2301         (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
2302         * dfg/DFGSpeculativeJIT32_64.cpp: Ditto.
2303         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2304         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2305         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2306         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2307         (JSC::DFG::SpeculativeJIT::emitBranch):
2308         (JSC::DFG::SpeculativeJIT::compile):
2309         * dfg/DFGSpeculativeJIT64.cpp: Ditto.
2310         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2311         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2312         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2313         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2314         (JSC::DFG::SpeculativeJIT::emitBranch):
2315         (JSC::DFG::SpeculativeJIT::compile):
2316         * heap/Heap.cpp: Remove all uses of vptrs in GC optimizations and replace them with 
2317         ClassInfo comparisons.
2318         (JSC::Heap::Heap):
2319         * heap/MarkStack.cpp: Ditto.
2320         (JSC::MarkStackThreadSharedData::markingThreadMain):
2321         (JSC::visitChildren):
2322         (JSC::SlotVisitor::drain):
2323         * heap/MarkStack.h: Ditto.
2324         (JSC::MarkStack::MarkStack):
2325         * heap/MarkedBlock.cpp: Ditto.
2326         (JSC::MarkedBlock::callDestructor):
2327         (JSC::MarkedBlock::specializedSweep):
2328         * heap/MarkedBlock.h: Ditto.
2329         * heap/SlotVisitor.h: Ditto.
2330         (JSC::SlotVisitor::SlotVisitor):
2331         * heap/VTableSpectrum.cpp: Now that we don't have vptrs, we can't count them.  
2332         We'll have to rename this class and make it use ClassInfo ptrs in a future patch.
2333         (JSC::VTableSpectrum::count):
2334         * interpreter/Interpreter.cpp: Remove all global data arguments from isJSArray, 
2335         etc. functions.
2336         (JSC::loadVarargs):
2337         (JSC::Interpreter::tryCacheGetByID):
2338         (JSC::Interpreter::privateExecute):
2339         * jit/JIT.h: Remove vptr argument from emitAllocateBasicJSObject 
2340         * jit/JITInlineMethods.h: Remove vptr planting, and add ClassInfo planting, 
2341         remove all vtable related code.
2342         (JSC::JIT::emitLoadCharacterString):
2343         (JSC::JIT::emitAllocateBasicJSObject):
2344         (JSC::JIT::emitAllocateJSFinalObject):
2345         (JSC::JIT::emitAllocateJSFunction):
2346         * jit/JITOpcodes.cpp: Replace vptr related branch code with corresponding ClassInfo.
2347         (JSC::JIT::privateCompileCTIMachineTrampolines):
2348         (JSC::JIT::emit_op_to_primitive):
2349         (JSC::JIT::emit_op_convert_this):
2350         * jit/JITOpcodes32_64.cpp: Ditto.
2351         (JSC::JIT::privateCompileCTIMachineTrampolines):
2352         (JSC::JIT::emit_op_to_primitive):
2353         (JSC::JIT::emitSlow_op_eq):
2354         (JSC::JIT::emitSlow_op_neq):
2355         (JSC::JIT::compileOpStrictEq):
2356         (JSC::JIT::emit_op_convert_this):
2357         * jit/JITPropertyAccess.cpp: Ditto.
2358         (JSC::JIT::stringGetByValStubGenerator):
2359         (JSC::JIT::emit_op_get_by_val):
2360         (JSC::JIT::emitSlow_op_get_by_val):
2361         (JSC::JIT::emit_op_put_by_val):
2362         (JSC::JIT::privateCompilePutByIdTransition):
2363         (JSC::JIT::privateCompilePatchGetArrayLength):
2364         * jit/JITPropertyAccess32_64.cpp: Ditto.
2365         (JSC::JIT::stringGetByValStubGenerator):
2366         (JSC::JIT::emit_op_get_by_val):
2367         (JSC::JIT::emitSlow_op_get_by_val):
2368         (JSC::JIT::emit_op_put_by_val):
2369         (JSC::JIT::privateCompilePatchGetArrayLength):
2370         * jit/JITStubs.cpp: Remove global data argument from isJSString, etc.
2371         (JSC::JITThunks::tryCacheGetByID):
2372         (JSC::DEFINE_STUB_FUNCTION):
2373         * jit/SpecializedThunkJIT.h: Replace vptr related stuff with ClassInfo stuff.
2374         (JSC::SpecializedThunkJIT::loadJSStringArgument):
2375         * runtime/ArrayConstructor.cpp: Add trivial destructor assert.
2376         * runtime/ArrayPrototype.cpp: Remove global data argument from isJSArray.
2377         (JSC::arrayProtoFuncToString):
2378         (JSC::arrayProtoFuncJoin):
2379         (JSC::arrayProtoFuncPop):
2380         (JSC::arrayProtoFuncPush):
2381         (JSC::arrayProtoFuncShift):
2382         (JSC::arrayProtoFuncSplice):
2383         (JSC::arrayProtoFuncUnShift):
2384         (JSC::arrayProtoFuncFilter):
2385         (JSC::arrayProtoFuncMap):
2386         (JSC::arrayProtoFuncEvery):
2387         (JSC::arrayProtoFuncForEach):
2388         (JSC::arrayProtoFuncSome):
2389         (JSC::arrayProtoFuncReduce):
2390         (JSC::arrayProtoFuncReduceRight):
2391         * runtime/BooleanConstructor.cpp: Add trivial destructor assert.
2392         * runtime/BooleanObject.cpp: Ditto.
2393         * runtime/BooleanPrototype.cpp: Ditto.
2394         * runtime/ClassInfo.h: Add destroy function pointer to MethodTable.
2395         * runtime/DateConstructor.cpp: Add trivial destructor assert.
2396         * runtime/DateInstance.cpp: Add destroy function for DateInstance because it has a RefPtr 
2397         that needs destruction.
2398         (JSC::DateInstance::destroy):
2399         * runtime/DateInstance.h:
2400         * runtime/Error.cpp: Ditto (because of UString member).
2401         (JSC::StrictModeTypeErrorFunction::destroy):
2402         * runtime/Error.h:
2403         * runtime/ErrorConstructor.cpp: Add trivial destructor assert.
2404         * runtime/ErrorInstance.cpp: Ditto.
2405         * runtime/ExceptionHelpers.cpp: Ditto.
2406         * runtime/Executable.cpp: Add destroy functions for ExecutableBase and subclasses.
2407         (JSC::ExecutableBase::destroy):
2408         (JSC::NativeExecutable::destroy):
2409         (JSC::ScriptExecutable::destroy):
2410         (JSC::EvalExecutable::destroy):
2411         (JSC::ProgramExecutable::destroy):
2412         (JSC::FunctionExecutable::destroy):
2413         * runtime/Executable.h:
2414         * runtime/FunctionConstructor.cpp: Add trivial destructor assert.
2415         * runtime/FunctionPrototype.cpp: Ditto. Also remove global data first arg from isJSArray.
2416         (JSC::functionProtoFuncApply):
2417         * runtime/GetterSetter.cpp: Ditto.
2418         * runtime/InitializeThreading.cpp: Remove call to JSGlobalData::storeVPtrs since it no 
2419         longer exists.
2420         (JSC::initializeThreadingOnce):
2421         * runtime/InternalFunction.cpp: Remove vtableAnchor function, add trivial destructor assert, 
2422         remove first arg from isJSString.
2423         (JSC::InternalFunction::displayName):
2424         * runtime/InternalFunction.h: Remove VPtrStealingHack.
2425         * runtime/JSAPIValueWrapper.cpp: Add trivial destructor assert.
2426         * runtime/JSArray.cpp: Add static destroy to call ~JSArray.  Replace vptr checks in 
2427         destructor with ClassInfo checks.
2428         (JSC::JSArray::~JSArray):
2429         (JSC::JSArray::destroy):
2430         * runtime/JSArray.h: Remove VPtrStealingHack.  Remove globalData argument from isJSArray 
2431         and change them to check the ClassInfo rather than the vptrs.
2432         (JSC::isJSArray):
2433         * runtime/JSBoundFunction.cpp: Add trival destructor assert. Remove first arg from isJSArray.
2434         (JSC::boundFunctionCall):
2435         (JSC::boundFunctionConstruct):
2436         * runtime/JSByteArray.cpp: Add static destroy function, replace vptr checks with ClassInfo checks.
2437         (JSC::JSByteArray::~JSByteArray):
2438         (JSC::JSByteArray::destroy):
2439         * runtime/JSByteArray.h: Remove VPtrStealingHack code.
2440         (JSC::isJSByteArray):
2441         * runtime/JSCell.cpp: Add trivial destructor assert.  Add static destroy function.
2442         (JSC::JSCell::destroy):
2443         * runtime/JSCell.h: Remove VPtrStealingHack code.  Add function for returning the offset 
2444         of the ClassInfo pointer in the object for use by the JIT.  Add the ClassInfo pointer to 
2445         the JSCell itself, and grab it from the Structure.  Remove the vptr and setVPtr functions, 
2446         as they are no longer used.  Add a validatedClassInfo function to JSCell for any clients 
2447         that want to verify, while in Debug mode, that the ClassInfo contained in the cell is the 
2448         same one as that contained in the Structure.  This isn't used too often, because most of 
2449         the places where we compare the ClassInfo to things can be called during destruction.  
2450         Since the Structure is unreliable during the phase when destructors are being called, 
2451         we can't call validatedClassInfo.
2452         (JSC::JSCell::classInfoOffset):
2453         (JSC::JSCell::structure):
2454         (JSC::JSCell::classInfo):
2455         * runtime/JSFunction.cpp: Remove VPtrStealingHack code.  Add static destroy, remove vtableAnchor, 
2456         remove first arg from call to isJSString.
2457         (JSC::JSFunction::destroy):
2458         (JSC::JSFunction::displayName):
2459         * runtime/JSFunction.h: 
2460         * runtime/JSGlobalData.cpp: Remove all VPtr stealing code and storage, including storeVPtrs, 
2461         as these vptrs are no longer needed in the codebase.
2462         * runtime/JSGlobalData.h:
2463         (JSC::TypedArrayDescriptor::TypedArrayDescriptor): Changed the TypedArrayDescriptor to use 
2464         ClassInfo rather than the vptr.
2465         * runtime/JSGlobalObject.cpp: Add static destroy function.
2466         (JSC::JSGlobalObject::destroy):
2467         * runtime/JSGlobalObject.h:
2468         * runtime/JSGlobalThis.cpp: Add trivial destructor assert.
2469         * runtime/JSNotAnObject.cpp: Ditto.
2470         * runtime/JSONObject.cpp: Ditto. Remove first arg from isJSArray calls.
2471         (JSC::Stringifier::Holder::appendNextProperty):
2472         (JSC::Walker::walk):
2473         * runtime/JSObject.cpp: 
2474         (JSC::JSFinalObject::destroy):
2475         (JSC::JSNonFinalObject::destroy):
2476         (JSC::JSObject::destroy):
2477         * runtime/JSObject.h: Add trivial destructor assert for JSObject, remove vtableAnchor 
2478         from JSNonFinalObject and JSFinalObject, add static destroy for JSFinalObject and 
2479         JSNonFinalObject, add isJSFinalObject utility function similar to isJSArray, remove all VPtrStealingHack code.
2480         (JSC::JSObject::finishCreation):
2481         (JSC::JSNonFinalObject::finishCreation):
2482         (JSC::JSFinalObject::finishCreation):
2483         (JSC::isJSFinalObject):
2484         * runtime/JSPropertyNameIterator.cpp: Add static destroy.
2485         (JSC::JSPropertyNameIterator::destroy):
2486         * runtime/JSPropertyNameIterator.h:
2487         * runtime/JSStaticScopeObject.cpp: Ditto.
2488         (JSC::JSStaticScopeObject::destroy):
2489         * runtime/JSStaticScopeObject.h: Ditto. 
2490         * runtime/JSString.cpp:
2491         (JSC::JSString::destroy):
2492         * runtime/JSString.h: Ditto. Remove VPtrStealingHack code. Also remove fixupVPtr code, 
2493         since we no longer need to fixup vptrs.
2494         (JSC::jsSingleCharacterString):
2495         (JSC::jsSingleCharacterSubstring):
2496         (JSC::jsNontrivialString):
2497         (JSC::jsString):
2498         (JSC::jsSubstring8):
2499         (JSC::jsSubstring):
2500         (JSC::jsOwnedString):
2501         (JSC::jsStringBuilder):
2502         (JSC::isJSString):
2503         * runtime/JSVariableObject.cpp: 
2504         (JSC::JSVariableObject::destroy):
2505         * runtime/JSVariableObject.h: Ditto.
2506         * runtime/JSWrapperObject.cpp:
2507         * runtime/JSWrapperObject.h: Add trivial destructor assert.
2508         * runtime/MathObject.cpp: Ditto.
2509         * runtime/NativeErrorConstructor.cpp: Ditto.
2510         * runtime/NumberConstructor.cpp: Ditto.
2511         * runtime/NumberObject.cpp: Ditto.
2512         * runtime/NumberPrototype.cpp: Ditto.
2513         * runtime/ObjectConstructor.cpp: Ditto.
2514         * runtime/ObjectPrototype.cpp: Ditto.
2515         * runtime/Operations.h: Remove calls to fixupVPtr, remove first arg to isJSString.
2516         (JSC::jsString):
2517         (JSC::jsLess):
2518         (JSC::jsLessEq):
2519         * runtime/RegExp.cpp: Add static destroy.
2520         (JSC::RegExp::destroy):
2521         * runtime/RegExp.h:
2522         * runtime/RegExpConstructor.cpp: Add static destroy for RegExpConstructor and RegExpMatchesArray.
2523         (JSC::RegExpConstructor::destroy):
2524         (JSC::RegExpMatchesArray::destroy):
2525         * runtime/RegExpConstructor.h:
2526         * runtime/RegExpMatchesArray.h:
2527         * runtime/RegExpObject.cpp: Add static destroy.
2528         (JSC::RegExpObject::destroy):
2529         * runtime/RegExpObject.h:
2530         * runtime/ScopeChain.cpp: Add trivial destructor assert.
2531         * runtime/ScopeChain.h:
2532         * runtime/StrictEvalActivation.cpp: Ditto.
2533         * runtime/StringConstructor.cpp:
2534         * runtime/StringObject.cpp: Ditto. Remove vtableAnchor.
2535         * runtime/StringObject.h:
2536         * runtime/StringPrototype.cpp: Ditto.
2537         * runtime/Structure.cpp: Add static destroy.
2538         (JSC::Structure::destroy):
2539         * runtime/Structure.h: Move JSCell::finishCreation and JSCell constructor into Structure.h 
2540         because they need to have the full Structure type to access the ClassInfo to store in the JSCell.
2541         (JSC::JSCell::setStructure):
2542         (JSC::JSCell::validatedClassInfo):
2543         (JSC::JSCell::JSCell):
2544         (JSC::JSCell::finishCreation):
2545         * runtime/StructureChain.cpp: Add static destroy.
2546         (JSC::StructureChain::destroy):
2547         * runtime/StructureChain.h:
2548         * wtf/Assertions.h: Add new assertion ASSERT_HAS_TRIVIAL_DESTRUCTOR, which uses clangs 
2549         ability to tell us when a class has a trivial destructor. We will use this assert 
2550         more in future patches as we move toward having all JSC objects backed by GC memory, 
2551         which means moving away from using destructors/finalizers.
2552
2553 2011-12-15  Martin Robinson  <mrobinson@igalia.com>
2554
2555         Fix 'make dist' in preparation for the GTK+ release.
2556
2557         * GNUmakefile.list.am: Add missing header.
2558
2559 2011-12-15  Sam Weinig  <sam@webkit.org>
2560
2561         <rdar://problem/10552550> JavaScriptCore uses obsolete 'cpy' mnemonic in ARM assembly
2562
2563         Reviewed by Gavin Barraclough.
2564
2565         Original patch by Jim Grosbach.
2566
2567         * jit/JITStubs.cpp:
2568         (JSC::ctiTrampoline):
2569         (JSC::ctiVMThrowTrampoline):
2570         Replace uses of the 'cpy' mnemonic with 'mov'.
2571
2572 2011-12-15  Filip Pizlo  <fpizlo@apple.com>
2573
2574         Value profiling should distinguished between NaN and non-NaN doubles
2575         https://bugs.webkit.org/show_bug.cgi?id=74682
2576
2577         Reviewed by Gavin Barraclough.
2578         
2579         Added PredictDoubleReal and PredictDoubleNaN. PredictDouble is now the union
2580         of the two.
2581
2582         * bytecode/PredictedType.cpp:
2583         (JSC::predictionToString):
2584         (JSC::predictionFromValue):
2585         * bytecode/PredictedType.h:
2586         (JSC::isDoubleRealPrediction):
2587         (JSC::isDoublePrediction):
2588
2589 2011-12-15  Anders Carlsson  <andersca@apple.com>
2590
2591         Regression (r102866): Navigating away from or closing a page with a plugin crashes
2592         https://bugs.webkit.org/show_bug.cgi?id=74655
2593         <rdar://problem/10590024>
2594
2595         Reviewed by Sam Weinig.
2596
2597         Rewrite HasRefAndDeref to work if ref and deref are implemented in base classes,
2598         using a modified version of the technique described here:
2599         http://groups.google.com/group/comp.lang.c++.moderated/msg/e5fbc9305539f699
2600         
2601         * wtf/Functional.h:
2602
2603 2011-12-15  Andy Wingo  <wingo@igalia.com>
2604
2605         Warnings fixes in Interpreter.cpp and PrivateExecute.cpp
2606         https://bugs.webkit.org/show_bug.cgi?id=74624
2607
2608         Reviewed by Darin Adler.
2609
2610         * interpreter/Interpreter.cpp:
2611         (JSC::Interpreter::privateExecute): Fix variables unused in
2612         release mode.
2613         * wtf/ParallelJobsGeneric.cpp:
2614         (WTF::ParallelEnvironment::ParallelEnvironment): Fix
2615         signed/unsigned comparison warning, with a cast.
2616
2617 2011-12-15  Andy Wingo  <wingo@igalia.com>
2618
2619         Use more macrology in JSC::Options
2620         https://bugs.webkit.org/show_bug.cgi?id=72938
2621
2622         Reviewed by Filip Pizlo.
2623
2624         * runtime/Options.cpp:
2625         (JSC::Options::initializeOptions):
2626         * runtime/Options.h: Use macros to ensure that all heuristics are
2627         declared and have initializers.
2628
2629 2011-12-15  Anders Carlsson  <andersca@apple.com>
2630
2631         Add ScrollingCoordinator class and ENABLE_THREADED_SCROLLING define
2632         https://bugs.webkit.org/show_bug.cgi?id=74639
2633
2634         Reviewed by Andreas Kling.
2635
2636         Add ENABLE_THREADED_SCROLLING #define.
2637
2638         * wtf/Platform.h:
2639
2640 2011-12-15  Anders Carlsson  <andersca@apple.com>
2641
2642         EventDispatcher should handle wheel events on the connection queue
2643         https://bugs.webkit.org/show_bug.cgi?id=74627
2644
2645         Reviewed by Andreas Kling.
2646
2647         Add a BoundFunctionImpl specialization that takes three parameters.
2648
2649         * wtf/Functional.h:
2650         (WTF::C::):
2651         (WTF::R):
2652         (WTF::bind):
2653
2654 2011-12-14  Anders Carlsson  <andersca@apple.com>
2655
2656         Add WTF::Function to wtf/Forward.h
2657         https://bugs.webkit.org/show_bug.cgi?id=74576
2658
2659         Reviewed by Adam Roben.
2660
2661         * jsc.cpp:
2662         Work around a name conflict in the readline library.
2663
2664         * wtf/Forward.h:
2665         Add Function.
2666
2667 2011-12-15  Igor Oliveira  <igor.oliveira@openbossa.org>
2668
2669         [Qt] Support requestAnimationFrame API
2670         https://bugs.webkit.org/show_bug.cgi?id=74528
2671
2672         Let Qt port use REQUEST_ANIMATION_FRAME_TIMER.
2673
2674         Reviewed by Kenneth Rohde Christiansen.
2675
2676         * wtf/Platform.h:
2677
2678 2011-12-15  Andy Wingo  <wingo@igalia.com>
2679
2680         Minor refactor to Parser::parseTryStatement
2681         https://bugs.webkit.org/show_bug.cgi?id=74507
2682
2683         Reviewed by Geoffrey Garen.
2684
2685         * parser/Parser.cpp (JSC::Parser::parseTryStatement): Use the
2686         Parser's declareVariable instead of going directly to the scope.
2687         This will facilitate future checks related to harmony block
2688         scoping.
2689
2690 2011-12-15  Andy Wingo  <wingo@igalia.com>
2691
2692         Rename JSC::Heuristics to JSC::Options
2693         https://bugs.webkit.org/show_bug.cgi?id=72889
2694
2695         Reviewed by Filip Pizlo.
2696
2697         * runtime/Options.cpp: Renamed from Source/JavaScriptCore/runtime/Heuristics.cpp.
2698         * runtime/Options.h: Renamed from Source/JavaScriptCore/runtime/Heuristics.h.
2699
2700         * CMakeLists.txt:
2701         * GNUmakefile.list.am:
2702         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2703         * JavaScriptCore.xcodeproj/project.pbxproj:
2704         * Target.pri:
2705         * bytecode/CodeBlock.cpp:
2706         (JSC::CodeBlock::shouldOptimizeNow):
2707         * bytecode/CodeBlock.h:
2708         (JSC::CodeBlock::likelyToTakeSlowCase):
2709         (JSC::CodeBlock::couldTakeSlowCase):
2710         (JSC::CodeBlock::likelyToTakeSpecialFastCase):
2711         (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
2712         (JSC::CodeBlock::likelyToTakeAnySlowCase):
2713         (JSC::CodeBlock::reoptimizationRetryCounter):
2714         (JSC::CodeBlock::countReoptimization):
2715         (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
2716         (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
2717         (JSC::CodeBlock::optimizeNextInvocation):
2718         (JSC::CodeBlock::dontOptimizeAnytimeSoon):
2719         (JSC::CodeBlock::optimizeSoon):
2720         (JSC::CodeBlock::largeFailCountThreshold):
2721         (JSC::CodeBlock::largeFailCountThresholdForLoop):
2722         (JSC::CodeBlock::shouldReoptimizeNow):
2723         (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
2724         * dfg/DFGByteCodeParser.cpp:
2725         (JSC::DFG::ByteCodeParser::handleInlining):
2726         * dfg/DFGCapabilities.h:
2727         (JSC::DFG::mightCompileEval):
2728         (JSC::DFG::mightCompileProgram):
2729         (JSC::DFG::mightCompileFunctionForCall):
2730         (JSC::DFG::mightCompileFunctionForConstruct):
2731         (JSC::DFG::mightInlineFunctionForCall):
2732         (JSC::DFG::mightInlineFunctionForConstruct):
2733         * dfg/DFGOSRExit.cpp:
2734         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
2735         * dfg/DFGOSRExitCompiler32_64.cpp:
2736         (JSC::DFG::OSRExitCompiler::compileExit):
2737         * dfg/DFGOSRExitCompiler64.cpp:
2738         (JSC::DFG::OSRExitCompiler::compileExit):
2739         * dfg/DFGVariableAccessData.h:
2740         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
2741         * heap/MarkStack.cpp:
2742         (JSC::MarkStackSegmentAllocator::allocate):
2743         (JSC::MarkStackSegmentAllocator::shrinkReserve):
2744         (JSC::MarkStackArray::MarkStackArray):
2745         (JSC::MarkStackArray::donateSomeCellsTo):
2746         (JSC::MarkStackArray::stealSomeCellsFrom):
2747         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
2748         (JSC::SlotVisitor::donateSlow):
2749         (JSC::SlotVisitor::drain):
2750         (JSC::SlotVisitor::drainFromShared):
2751         * heap/MarkStack.h:
2752         (JSC::MarkStack::mergeOpaqueRootsIfProfitable):
2753         (JSC::MarkStack::addOpaqueRoot):
2754         (JSC::MarkStackArray::canDonateSomeCells):
2755         * heap/SlotVisitor.h:
2756         (JSC::SlotVisitor::donate):
2757         * jit/JIT.cpp:
2758         (JSC::JIT::emitOptimizationCheck):
2759         * runtime/InitializeThreading.cpp:
2760         (JSC::initializeThreadingOnce): Adapt callers and build systems.
2761
2762         * testRegExp.cpp:
2763         (CommandLine::CommandLine):
2764         * jsc.cpp:
2765         (CommandLine::CommandLine):
2766         Rename from Options, to avoid name conflict.
2767
2768 2011-12-14  Sam Weinig  <sam@webkit.org>
2769
2770         Revert unintentional change to JavaScriptCore.def
2771
2772         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2773
2774 2011-12-14  Sam Weinig  <weinig@apple.com>
2775
2776         Remove whitespace from InheritedPropertySheets attributes in
2777         vsprops files to appease the Visual Studio project migrator.
2778
2779         Reviewed by Adam Roben.
2780
2781         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2782         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops:
2783         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops:
2784         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops:
2785         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops:
2786         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops:
2787         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops:
2788         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops:
2789         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops:
2790         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops:
2791         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops:
2792         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
2793         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops:
2794         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops:
2795         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
2796         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
2797         * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops:
2798         * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops:
2799         * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops:
2800         * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
2801         * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops:
2802         * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops:
2803         * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
2804         * JavaScriptCore.vcproj/jsc/jscDebug.vsprops:
2805         * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops:
2806         * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops:
2807         * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
2808         * JavaScriptCore.vcproj/jsc/jscRelease.vsprops:
2809         * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops:
2810         * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
2811         * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops:
2812         * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops:
2813         * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops:
2814         * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops:
2815         * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops:
2816         * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops:
2817         * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
2818         * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops:
2819         * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops:
2820         * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops:
2821         * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
2822         * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops:
2823         * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops:
2824
2825 2011-12-14  Anders Carlsson  <andersca@apple.com>
2826
2827         binding a member function should ref/deref the object pointer if needed
2828         https://bugs.webkit.org/show_bug.cgi?id=74552
2829
2830         Reviewed by Sam Weinig.
2831
2832         Add a HasRefAndDeref helper class template which checks if a given class type has ref and deref
2833         member functions which the right type. Use this to determine if we should ref/deref the first parameter.
2834
2835         * wtf/Functional.h:
2836         (WTF::R):
2837         (WTF::C::):
2838         (WTF::RefAndDeref::ref):
2839         (WTF::RefAndDeref::deref):
2840
2841 2011-12-14  Hajime Morrita  <morrita@chromium.org>
2842
2843         JS_INLINE and WTF_INLINE should be visible from WebCore
2844         https://bugs.webkit.org/show_bug.cgi?id=73191
2845
2846         - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
2847         - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
2848         - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.
2849
2850         Reviewed by Kevin Ollivier.
2851
2852         * JavaScriptCore.xcodeproj/project.pbxproj:
2853         * config.h:
2854         * runtime/JSExportMacros.h: Added.
2855         * wtf/ExportMacros.h:
2856         * wtf/Platform.h:
2857         * wtf/WTFThreadData.h:
2858         * wtf/text/AtomicString.h:
2859         * wtf/text/StringStatics.cpp:
2860
2861 2011-12-14  Anders Carlsson  <andersca@apple.com>
2862
2863         Work around a bug in the MSVC2005 compiler
2864         https://bugs.webkit.org/show_bug.cgi?id=74550
2865
2866         Reviewed by Sam Weinig.
2867
2868         Add template parameters for the return types of the partial specializations of BoundFunctionImpl.
2869
2870         * wtf/Functional.h:
2871         (WTF::R):
2872
2873 2011-12-13  Jon Lee  <jonlee@apple.com>
2874
2875         Enable notifications on Mac.
2876
2877         Reviewed by Sam Weinig.
2878
2879         * Configurations/FeatureDefines.xcconfig:
2880
2881 2011-12-14  David Kilzer  <ddkilzer@apple.com>
2882
2883         Remove definition of old ENABLE(YARR) macro
2884         <http://webkit.org/b/74532>
2885
2886         Reviewed by Darin Adler.
2887
2888         * wtf/Platform.h: Removed ENABLE_YARR macros.
2889
2890 2011-12-14  Anders Carlsson  <andersca@apple.com>
2891
2892         bind should handle member functions
2893         https://bugs.webkit.org/show_bug.cgi?id=74529
2894
2895         Reviewed by Sam Weinig.
2896
2897         Add FunctionWrapper partial specializations for member function pointers.
2898
2899         * wtf/Functional.h:
2900         (WTF::C::):
2901
2902 2011-12-14  Gavin Barraclough  <barraclough@apple.com>
2903
2904         DFG relies on returning a struct in registers
2905         https://bugs.webkit.org/show_bug.cgi?id=74527
2906
2907         Reviewed by Geoff Garen.
2908
2909         This will not work on all platforms. Returning a uint64_t will more reliably achieve
2910         what we want, on 32-bit platforms (on 64-bit, stick with the struct return).
2911
2912         * dfg/DFGOperations.cpp:
2913         * dfg/DFGOperations.h:
2914         (JSC::DFG::DFGHandler::dfgHandlerEncoded):
2915
2916 2011-12-14  Anders Carlsson  <andersca@apple.com>
2917
2918         Add unary and binary bind overloads
2919         https://bugs.webkit.org/show_bug.cgi?id=74524
2920
2921         Reviewed by Sam Weinig.
2922
2923         * wtf/Functional.h:
2924         (WTF::R):
2925         (WTF::FunctionWrapper::ResultType):
2926         (WTF::bind):
2927
2928 2011-12-14  Anders Carlsson  <andersca@apple.com>
2929
2930         Add back the callOnMainThread overload that takes a WTF::Function
2931         https://bugs.webkit.org/show_bug.cgi?id=74512
2932
2933         Reviewed by Darin Adler.
2934
2935         Add back the overload; the changes to WebCore should hopefully keep Windows building.
2936
2937         * wtf/MainThread.cpp:
2938         (WTF::callFunctionObject):
2939         (WTF::callOnMainThread):
2940         * wtf/MainThread.h:
2941
2942 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
2943
2944         DFG should infer when local variables are doubles
2945         https://bugs.webkit.org/show_bug.cgi?id=74480
2946
2947         Reviewed by Oliver Hunt.
2948         
2949         Introduced the notion that a local variable (though not an argument, yet!) can
2950         be stored as a double, and will be guaranteed to always contain a double. This
2951         requires more magic in the OSR (conversion in both entry and exit). The inference
2952         is quite unorthodox: all uses of a variable vote on whether they think it should
2953         be a double or a JSValue, based on how they use it. If they use it in an integer
2954         or boxed value context, they vote JSValue. If they use it in a double context,
2955         they vote double. This voting is interleaved in the propagator's fixpoint, so
2956         that variables voted double then have a double prediction propagated from them.
2957         This interleaving is needed because a variable that actually always contains an
2958         integer that always gets used in arithmetic that involves doubles may end up
2959         being voted double, which then means that all uses of the variable will see a
2960         double rather than an integer.
2961         
2962         This is worth 18% to SunSpider/3d-cube, 7% to Kraken/audio-beat-detection, 7%
2963         to Kraken/audio-fft, 6% to Kraken/imaging-darkroom, 20% to
2964         Kraken/imaging-gaussian-blur, and just over 1% to Kraken/json-parse-financial.
2965         It results in a 1% speed-up on SunSpider and a 4% speed-up in Kraken.  Similar
2966         results on JSVALUE32_64, though with a bigger win on Kraken (5%) and no overall
2967         win on SunSpider.
2968
2969         * bytecode/ValueRecovery.h:
2970         (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedDouble):
2971         (JSC::ValueRecovery::dump):
2972         * dfg/DFGAbstractState.cpp:
2973         (JSC::DFG::AbstractState::execute):
2974         * dfg/DFGAssemblyHelpers.h:
2975         (JSC::DFG::AssemblyHelpers::boxDouble):
2976         * dfg/DFGGraph.cpp:
2977         (JSC::DFG::Graph::dump):
2978         * dfg/DFGJITCompiler.h:
2979         (JSC::DFG::JITCompiler::noticeOSREntry):
2980         * dfg/DFGOSREntry.cpp:
2981         (JSC::DFG::prepareOSREntry):
2982         * dfg/DFGOSREntry.h:
2983         * dfg/DFGOSRExitCompiler64.cpp:
2984         (JSC::DFG::OSRExitCompiler::compileExit):
2985         * dfg/DFGPropagator.cpp:
2986         (JSC::DFG::Propagator::vote):
2987         (JSC::DFG::Propagator::doRoundOfDoubleVoting):
2988         (JSC::DFG::Propagator::propagatePredictions):
2989         (JSC::DFG::Propagator::fixupNode):
2990         * dfg/DFGSpeculativeJIT.cpp:
2991         (JSC::DFG::ValueSource::dump):
2992         (JSC::DFG::SpeculativeJIT::compile):
2993         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
2994         * dfg/DFGSpeculativeJIT.h:
2995         * dfg/DFGSpeculativeJIT32_64.cpp:
2996         (JSC::DFG::SpeculativeJIT::compile):
2997         * dfg/DFGSpeculativeJIT64.cpp:
2998         (JSC::DFG::SpeculativeJIT::compile):
2999         * dfg/DFGVariableAccessData.h:
3000         (JSC::DFG::VariableAccessData::VariableAccessData):
3001         (JSC::DFG::VariableAccessData::clearVotes):
3002         (JSC::DFG::VariableAccessData::vote):
3003         (JSC::DFG::VariableAccessData::doubleVoteRatio):
3004         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
3005         (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
3006         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
3007         * runtime/Arguments.cpp:
3008         (JSC::Arguments::tearOff):
3009         * runtime/Heuristics.cpp:
3010         (JSC::Heuristics::initializeHeuristics):
3011         * runtime/Heuristics.h:
3012
3013 2011-12-13  Anders Carlsson  <andersca@apple.com>
3014
3015         Try to fix the Windows build.
3016
3017         Remove the callOnMainThread overload that takes a WTF::Function since it's not being used.
3018
3019         * wtf/MainThread.cpp:
3020         * wtf/MainThread.h:
3021
3022 2011-12-13  Anders Carlsson  <andersca@apple.com>
3023
3024         Add a very bare-bones implementation of bind and Function to WTF
3025         https://bugs.webkit.org/show_bug.cgi?id=74462
3026
3027         Reviewed by Sam Weinig.
3028
3029         In order to make it easier to package up function calls and send them across
3030         threads, add a (currently very simple) implementation of WTF::bind and WTF::Function to a new
3031         wtf/Functional.h header.
3032
3033         Currently, all bind can do is bind a nullary function and return a Function object that can be called and copied,
3034         but I'll add more as the need arises.
3035
3036         * GNUmakefile.list.am:
3037         * JavaScriptCore.gypi:
3038         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3039         * JavaScriptCore.xcodeproj/project.pbxproj:
3040         * wtf/Functional.h: Added.
3041         (WTF::R):
3042         (WTF::FunctionImplBase::~FunctionImplBase):
3043         (WTF::FunctionWrapper::ResultType):
3044         (WTF::FunctionBase::isNull):
3045         (WTF::FunctionBase::FunctionBase):
3046         (WTF::FunctionBase::impl):
3047         (WTF::bind):
3048         * wtf/MainThread.cpp:
3049         (WTF::callFunctionObject):
3050         (WTF::callOnMainThread):
3051         * wtf/MainThread.h:
3052         * wtf/wtf.pro:
3053
3054 2011-12-13  Geoffrey Garen  <ggaren@apple.com>
3055
3056         <rdar://problem/10577239> GC Crash introduced in r102545
3057
3058         Reviewed by Gavin Barraclough.
3059         
3060         MarkedArgumentBuffer was still marking items in forwards order, even though
3061         the argument order has been reversed.
3062         
3063         I fixed this bug, and replaced address calculation code with some helper
3064         functions -- mallocBase() and slotFor() -- so it stays fixed everywhere.
3065
3066         * runtime/ArgList.cpp:
3067         (JSC::MarkedArgumentBuffer::markLists):
3068         (JSC::MarkedArgumentBuffer::slowAppend):
3069         * runtime/ArgList.h:
3070         (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
3071         (JSC::MarkedArgumentBuffer::at):
3072         (JSC::MarkedArgumentBuffer::append):
3073         (JSC::MarkedArgumentBuffer::last):
3074         (JSC::MarkedArgumentBuffer::slotFor):
3075         (JSC::MarkedArgumentBuffer::mallocBase):
3076
3077 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
3078
3079         DFG OSR exit for UInt32ToNumber should roll forward, not roll backward
3080         https://bugs.webkit.org/show_bug.cgi?id=74463
3081
3082         Reviewed by Gavin Barraclough.
3083         
3084         Implements roll-forward OSR exit for UInt32ToNumber, which requires ValueRecoveries knowing
3085         how to execute the slow path of UInt32ToNumber.
3086
3087         * bytecode/CodeBlock.h:
3088         (JSC::CodeBlock::lastOSRExit):
3089         * bytecode/CodeOrigin.h:
3090         (JSC::CodeOrigin::operator!=):
3091         * bytecode/ValueRecovery.h:
3092         (JSC::ValueRecovery::uint32InGPR):
3093         (JSC::ValueRecovery::gpr):
3094         (JSC::ValueRecovery::dump):
3095         * dfg/DFGAssemblyHelpers.cpp:
3096         * dfg/DFGAssemblyHelpers.h:
3097         * dfg/DFGOSRExit.h:
3098         (JSC::DFG::OSRExit::valueRecoveryForOperand):
3099         * dfg/DFGOSRExitCompiler32_64.cpp:
3100         (JSC::DFG::OSRExitCompiler::compileExit):
3101         * dfg/DFGOSRExitCompiler64.cpp:
3102         (JSC::DFG::OSRExitCompiler::compileExit):
3103         * dfg/DFGSpeculativeJIT.cpp:
3104         (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
3105         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
3106         * dfg/DFGSpeculativeJIT.h:
3107         * dfg/DFGSpeculativeJIT32_64.cpp:
3108         (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
3109         (JSC::DFG::SpeculativeJIT::compile):
3110         * dfg/DFGSpeculativeJIT64.cpp:
3111         (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
3112         (JSC::DFG::SpeculativeJIT::compile):
3113
3114 2011-12-13  Oliver Hunt  <oliver@apple.com>
3115
3116         Arguments object doesn't handle mutation of length property correctly
3117         https://bugs.webkit.org/show_bug.cgi?id=74454
3118
3119         Reviewed by Gavin Barraclough.
3120
3121         Correct handling of arguments objects with overridden length property
3122
3123         * interpreter/Interpreter.cpp:
3124         (JSC::loadVarargs):
3125         * runtime/Arguments.cpp:
3126         (JSC::Arguments::copyToArguments):
3127         (JSC::Arguments::fillArgList):
3128
3129 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
3130
3131         DFG GetByVal CSE rule should match PutByValAlias
3132         https://bugs.webkit.org/show_bug.cgi?id=74390
3133
3134         Reviewed by Geoff Garen.
3135         
3136         Tiny win on some benchmarks. Maybe a 0.2% win on SunSpider.
3137
3138         * dfg/DFGPropagator.cpp:
3139         (JSC::DFG::Propagator::getByValLoadElimination):
3140
3141 2011-12-13  Andy Wingo  <wingo@igalia.com>
3142
3143         Fix interpreter debug build.
3144         https://bugs.webkit.org/show_bug.cgi?id=74439
3145
3146         Reviewed by Geoffrey Garen.
3147
3148         * bytecode/ValueRecovery.h: Include stdio.h on debug builds.
3149
3150 2011-12-13  Filip Pizlo  <fpizlo@apple.com>
3151
3152         DFG should know exactly why recompilation was triggered
3153         https://bugs.webkit.org/show_bug.cgi?id=74362
3154
3155         Reviewed by Oliver Hunt.
3156         
3157         Each OSR exit is now individually counted, as well as counting the total number 
3158         of OSR exits that occurred in a code block. If recompilation is triggered, we
3159         check to see if there are OSR exit sites that make up a sufficiently large
3160         portion of the total OSR exits that occurred. For any such OSR exit sites, we
3161         add a description of the site (bytecode index, kind) to a data structure in the
3162         corresponding baseline CodeBlock. Then, when we recompile the code, we immediately
3163         know which speculations would be unwise based on the fact that previous such
3164         speculations proved to be fruitless.
3165         
3166         This means 2% win on two of the SunSpider string tests, a 4% win on V8's deltablue,
3167         and 5% on Kraken's imaging-darkroom. It is only a minor win in the averages, less
3168         than 0.5%.
3169
3170         * CMakeLists.txt:
3171         * GNUmakefile.list.am:
3172         * JavaScriptCore.xcodeproj/project.pbxproj:
3173         * Target.pri:
3174         * bytecode/CodeBlock.cpp:
3175         (JSC::CodeBlock::tallyFrequentExitSites):
3176         * bytecode/CodeBlock.h:
3177         (JSC::CodeBlock::addFrequentExitSite):
3178         (JSC::CodeBlock::exitProfile):
3179         (JSC::CodeBlock::reoptimize):
3180         (JSC::CodeBlock::tallyFrequentExitSites):
3181         * bytecode/DFGExitProfile.cpp: Added.
3182         (JSC::DFG::ExitProfile::ExitProfile):
3183         (JSC::DFG::ExitProfile::~ExitProfile):
3184         (JSC::DFG::ExitProfile::add):
3185         (JSC::DFG::QueryableExitProfile::QueryableExitProfile):
3186         (JSC::DFG::QueryableExitProfile::~QueryableExitProfile):
3187         * bytecode/DFGExitProfile.h: Added.
3188         (JSC::DFG::exitKindToString):
3189         (JSC::DFG::exitKindIsCountable):
3190         (JSC::DFG::FrequentExitSite::FrequentExitSite):
3191         (JSC::DFG::FrequentExitSite::operator!):
3192         (JSC::DFG::FrequentExitSite::operator==):
3193         (JSC::DFG::FrequentExitSite::hash):
3194         (JSC::DFG::FrequentExitSite::bytecodeOffset):
3195         (JSC::DFG::FrequentExitSite::kind):
3196         (JSC::DFG::FrequentExitSite::isHashTableDeletedValue):
3197         (JSC::DFG::FrequentExitSiteHash::hash):
3198         (JSC::DFG::FrequentExitSiteHash::equal):
3199         (JSC::DFG::QueryableExitProfile::hasExitSite):
3200         * dfg/DFGAssemblyHelpers.h:
3201         (JSC::DFG::AssemblyHelpers::baselineCodeBlockForOriginAndBaselineCodeBlock):
3202         (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
3203         * dfg/DFGByteCodeParser.cpp:
3204         (JSC::DFG::ByteCodeParser::makeSafe):
3205         (JSC::DFG::ByteCodeParser::makeDivSafe):
3206         (JSC::DFG::ByteCodeParser::handleCall):
3207         (JSC::DFG::ByteCodeParser::handleIntrinsic):
3208         (JSC::DFG::ByteCodeParser::parseBlock):
3209         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
3210         * dfg/DFGOSRExit.cpp:
3211         (JSC::DFG::OSRExit::OSRExit):
3212         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
3213         * dfg/DFGOSRExit.h:
3214         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
3215         * dfg/DFGOSRExitCompiler.cpp:
3216         * dfg/DFGOSRExitCompiler32_64.cpp:
3217         (JSC::DFG::OSRExitCompiler::compileExit):
3218         * dfg/DFGOSRExitCompiler64.cpp:
3219         (JSC::DFG::OSRExitCompiler::compileExit):
3220         * dfg/DFGSpeculativeJIT.cpp:
3221         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
3222         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
3223         (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
3224         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
3225         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
3226         (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
3227         (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
3228         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
3229         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
3230         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
3231         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
3232         (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
3233         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
3234         (JSC::DFG::SpeculativeJIT::compileArithMul):
3235         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
3236         * dfg/DFGSpeculativeJIT.h:
3237         (JSC::DFG::SpeculativeJIT::speculationCheck):
3238         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
3239         * dfg/DFGSpeculativeJIT32_64.cpp:
3240         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
3241         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
3242         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
3243         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
3244         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
3245         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
3246         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
3247         (JSC::DFG::SpeculativeJIT::compile):
3248         * dfg/DFGSpeculativeJIT64.cpp:
3249         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
3250         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
3251         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
3252         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
3253         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
3254         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
3255         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
3256         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
3257         (JSC::DFG::SpeculativeJIT::emitBranch):
3258         (JSC::DFG::SpeculativeJIT::compile):
3259         * runtime/Heuristics.cpp:
3260         (JSC::Heuristics::initializeHeuristics):
3261         * runtime/Heuristics.h:
3262
3263 2011-12-13  Michael Saboff  <msaboff@apple.com>
3264
3265         Cleanup of StringImpl::equal in r102631 post commit
3266         https://bugs.webkit.org/show_bug.cgi?id=74421
3267
3268         Reviewed by Darin Adler.
3269
3270         * wtf/text/AtomicString.h:
3271         (WTF::operator==): Removed cast no longer needed.
3272         * wtf/text/StringImpl.h:
3273         (WTF::equal): Changed template to several overloaded methods.
3274
3275 2011-12-12  Michael Saboff  <msaboff@apple.com>
3276
3277         Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h
3278         https://bugs.webkit.org/show_bug.cgi?id=73622
3279
3280         Reviewed by Oliver Hunt.
3281
3282         Moved equal(charType1 *, charType2, unsigned) template methods
3283         from static StringImpl.cpp to StringImpl.h and then replaced the
3284         processor specific character comparison code in StringHash::equal
3285         with calls to these methods.
3286
3287         This change is worth 3% on SunSpider string-unpack-code as reported
3288         by the SunSpider command line harness.  No other tests appear to
3289         have measurable performance changes.
3290
3291         * wtf/text/AtomicString.h:
3292         (WTF::operator==):
3293         * wtf/text/StringHash.h:
3294         (WTF::StringHash::equal):
3295         * wtf/text/StringImpl.cpp:
3296         * wtf/text/StringImpl.h:
3297         (WTF::LChar):
3298         (WTF::UChar):
3299         (WTF::equal):
3300
3301 2011-12-12  Filip Pizlo  <fpizlo@apple.com>
3302
3303         ARMv7 version of DFG soft modulo does register allocation inside of control flow
3304         https://bugs.webkit.org/show_bug.cgi?id=74354
3305
3306         Reviewed by Gavin Barraclough.
3307
3308         * dfg/DFGSpeculativeJIT.cpp:
3309         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
3310
3311 2011-12-12  Andy Wingo  <wingo@igalia.com>
3312
3313         Simplify autotools configure.ac
3314         https://bugs.webkit.org/show_bug.cgi?id=74312
3315
3316         Reviewed by Martin Robinson.
3317
3318         * GNUmakefile.am: Add JSC_CPPFLAGS to javascriptcore_cppflags.
3319
3320 2011-12-12  Filip Pizlo  <fpizlo@apple.com>
3321
3322         DFG GetByVal CSE incorrectly assumes that a non-matching PutByVal cannot clobber
3323         https://bugs.webkit.org/show_bug.cgi?id=74329
3324
3325         Reviewed by Gavin Barraclough.
3326
3327         * dfg/DFGPropagator.cpp:
3328         (JSC::DFG::Propagator::getByValLoadElimination):
3329
3330 2011-12-09  Alexander Pavlov  <apavlov@chromium.org>
3331
3332         WebKit does not enumerate over CSS properties in HTMLElement.style
3333         https://bugs.webkit.org/show_bug.cgi?id=23946
3334
3335         Reviewed by Darin Adler.
3336
3337         Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
3338         introduce an std::sort() comparator function.
3339
3340         * JavaScriptCore.exp:
3341         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3342         * wtf/text/WTFString.h:
3343         (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
3344
3345 2011-12-12  Alexander Pavlov  <apavlov@chromium.org>
3346
3347         Unreviewed, build fix.
3348
3349         Revert r102570 which broke SnowLeopard builders.
3350
3351         * JavaScriptCore.exp:
3352         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3353         * wtf/text/WTFString.h:
3354
3355 2011-12-09  Alexander Pavlov  <apavlov@chromium.org>
3356
3357         WebKit does not enumerate over CSS properties in HTMLElement.style
3358         https://bugs.webkit.org/show_bug.cgi?id=23946
3359
3360         Reviewed by Darin Adler.
3361
3362         Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
3363         introduce an std::sort() comparator function.
3364
3365         * JavaScriptCore.exp:
3366         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3367         * wtf/text/WTFString.h:
3368         (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
3369
3370 2011-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>
3371
3372         Unreviewed. Fix make distcheck issues.
3373
3374         * GNUmakefile.list.am:
3375
3376 2011-12-11  Sam Weinig  <sam@webkit.org>
3377
3378         Fix another signed vs. unsigned warning
3379
3380         * runtime/ArgList.h:
3381         (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
3382
3383 2011-12-11  Sam Weinig  <sam@webkit.org>
3384
3385         Fix a signed vs. unsigned warning.
3386
3387         * runtime/ArgList.cpp:
3388         (JSC::MarkedArgumentBuffer::slowAppend):
3389         Cast inlineCapacity to an int to appease the warning. This is known OK
3390         since inlineCapacity is defined to be 8.
3391
3392 2011-12-11  Geoffrey Garen  <ggaren@apple.com>
3393
3394         Rolled out *another* debugging change I committed accidentally.
3395
3396         Unreviewed.
3397
3398         * Configurations/Base.xcconfig:
3399
3400 2011-12-11  Geoffrey Garen  <ggaren@apple.com>
3401         
3402         Rolled out a debug counter I committed accidentally.
3403
3404         Unreviewed.
3405
3406         * jit/JITStubs.cpp:
3407         (JSC::arityCheckFor):
3408
3409 2011-12-10  Geoffrey Garen  <ggaren@apple.com>
3410
3411         v8 benchmark takes 12-13 million function call slow paths due to extra arguments
3412         https://bugs.webkit.org/show_bug.cgi?id=74244
3413
3414         Reviewed by Filip Pizlo.
3415         
3416         .arguments function of order the Reversed
3417         
3418         10% speedup on v8-raytrace, 1.7% speedup on v8 overall, neutral on Kraken
3419         and SunSpider.
3420
3421         * bytecode/CodeBlock.h:
3422         (JSC::CodeBlock::valueProfileForArgument): Clarified that the interface
3423         to this function is an argument number.
3424
3425         * bytecompiler/BytecodeGenerator.cpp:
3426         (JSC::BytecodeGenerator::BytecodeGenerator):
3427         (JSC::BytecodeGenerator::emitCall):
3428         (JSC::BytecodeGenerator::emitConstruct):
3429         (JSC::BytecodeGenerator::isArgumentNumber): Switched to using CallFrame
3430         helper functions for computing offsets for arguments, rather than doing