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