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