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