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