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