Remove m_subclassData from JSArray, move the attribute to subclass as needed
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-04-18  Benjamin Poulain  <bpoulain@apple.com>
2
3         Remove m_subclassData from JSArray, move the attribute to subclass as needed
4         https://bugs.webkit.org/show_bug.cgi?id=84249
5
6         Reviewed by Geoffrey Garen.
7
8         JSArray's m_subclassData is only used by WebCore's RuntimeArray. This patch moves
9         the attribute to RuntimeArray to avoid allocating memory for the pointer in the common
10         case.
11
12         This gives ~1% improvement in JSArray creation microbenchmark thanks to fewer allocations
13         of CopiedSpace.
14
15         * jit/JITInlineMethods.h:
16         (JSC::JIT::emitAllocateJSArray):
17         * runtime/JSArray.cpp:
18         (JSC::JSArray::JSArray):
19         * runtime/JSArray.h:
20
21 2012-04-18  Benjamin Poulain  <bpoulain@apple.com>
22
23         replaceUsingStringSearch: delay the creation of the replace string until needed
24         https://bugs.webkit.org/show_bug.cgi?id=83841
25
26         Reviewed by Geoffrey Garen.
27
28         We do not need to obtain the replaceValue until we have a match. By moving the intialization
29         of replaceValue when needed, we save a few instructions when there is no match.
30
31         * runtime/StringPrototype.cpp:
32         (JSC::replaceUsingRegExpSearch):
33         (JSC::replaceUsingStringSearch):
34         (JSC::stringProtoFuncReplace):
35
36 2012-04-18  Mark Hahnenberg  <mhahnenberg@apple.com>
37
38         GC activity timer should be tied to allocation, not collection
39         https://bugs.webkit.org/show_bug.cgi?id=83919
40
41         Reviewed by Geoffrey Garen.
42
43         * API/JSContextRef.cpp: Used the new didAbandonObjectGraph callback to indicate that now that we've 
44         released a global object, we're abandoning a potentially large number of objects that JSC might want 
45         to collect.
46         * heap/CopiedSpace.cpp:
47         (JSC::CopiedSpace::tryAllocateSlowCase): Added the call to timer's willAllocate function to indicate 
48         that we've hit a slow path and are allocating now, so schedule the timer.
49         * heap/Heap.cpp:
50         (JSC::Heap::Heap):
51         (JSC::Heap::collectAllGarbage): Removed the call to discardAllCompiledCode because it was causing us to 
52         throw away too much code during our benchmarks (especially vp8, which is very large and thus has large 
53         amounts of compiled code).
54         (JSC::Heap::collect): Added the new call to didCollect at the conclusion of a collection so that we 
55         can cancel the timer if we no longer need to run a collection. Also added a check at the beginning of a 
56         collection to see if we should throw away our compiled code. Currently this is set to happen about once 
57         every minute.
58         * heap/Heap.h: Added field to keep track of the last time we threw away our compiled code.
59         * heap/MarkedAllocator.cpp:
60         (JSC::MarkedAllocator::allocateSlowCase): Added call to willAllocate on the allocation slow path, just like 
61         in CopiedSpace.
62         * runtime/GCActivityCallback.cpp: Added default stubs for non-CF platforms.
63         (JSC::DefaultGCActivityCallback::willAllocate):
64         (JSC):
65         (JSC::DefaultGCActivityCallback::didCollect):
66         (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):
67         * runtime/GCActivityCallback.h: Added new functions to make JSC's GC timer less arcane. This includes replacing 
68         the operator () with willAllocate() and adding an explicit didCollect() to cancel the timer after a collection 
69         occurs rather than relying on the way the timer is invoked to cancel itself. Also added a callback for 
70         when somebody else (e.g. WebCore or the JSC API) to notify JSC that they have just abandoned an entire graph of 
71         objects and that JSC might want to clean them up.
72         (JSC::GCActivityCallback::~GCActivityCallback):
73         (JSC::GCActivityCallback::willAllocate):
74         (JSC::GCActivityCallback::didCollect):
75         (JSC::GCActivityCallback::didAbandonObjectGraph):
76         (JSC::GCActivityCallback::synchronize):
77         (DefaultGCActivityCallback):
78         * runtime/GCActivityCallbackCF.cpp: Re-wired all the run loop stuff to implement the aforementioned functions. 
79         We added a flag to check whether the timer was active because the call to CFRunLoopTimerSetNextFireDate actually 
80         turned out to be quite expensive (although Instruments couldn't tell us this).
81         (DefaultGCActivityCallbackPlatformData):
82         (JSC):
83         (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
84         (JSC::DefaultGCActivityCallback::commonConstructor):
85         (JSC::scheduleTimer):
86         (JSC::cancelTimer):
87         (JSC::DefaultGCActivityCallback::willAllocate):
88         (JSC::DefaultGCActivityCallback::didCollect):
89         (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):
90
91 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
92
93         DFG should not attempt to get rare case counts for op_mod on ARM
94         https://bugs.webkit.org/show_bug.cgi?id=84218
95
96         Reviewed by Geoff Garen.
97
98         * dfg/DFGByteCodeParser.cpp:
99         (JSC::DFG::ByteCodeParser::makeSafe):
100         * dfg/DFGCommon.h:
101         (JSC::DFG::isX86):
102         (DFG):
103
104 2012-04-17  Myles Maxfield  <mmaxfield@google.com>
105
106         BumpPointerAllocator assumes page size is less than MINIMUM_BUMP_POOL_SIZE
107         https://bugs.webkit.org/show_bug.cgi?id=80912
108
109         Reviewed by Hajime Morita.
110
111         * wtf/BumpPointerAllocator.h:
112         (WTF::BumpPointerPool::create):
113
114 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
115
116         Attempt to fix Windows build.
117
118         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
119
120 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
121
122         It should be possible to create an inheritorID for the global this object without crashing
123         https://bugs.webkit.org/show_bug.cgi?id=84200
124         <rdar://problem/11251082>
125
126         Reviewed by Oliver Hunt.
127
128         * runtime/JSGlobalThis.cpp:
129         (JSC::JSGlobalThis::setUnwrappedObject):
130         * runtime/JSGlobalThis.h:
131         (JSC::JSGlobalThis::unwrappedObject):
132         (JSGlobalThis):
133         * runtime/JSObject.cpp:
134         (JSC::JSObject::createInheritorID):
135         * runtime/JSObject.h:
136         (JSObject):
137         (JSC::JSObject::resetInheritorID):
138
139 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
140
141         DFG and LLInt should not clobber the frame pointer on ARMv7
142         https://bugs.webkit.org/show_bug.cgi?id=84185
143         <rdar://problem/10767252>
144
145         Reviewed by Gavin Barraclough.
146         
147         Changed LLInt to use a different register. Changed DFG to use one fewer
148         registers. We should revisit this and switch the DFG to use a different
149         register instead of r7, but we can do that in a subsequent step since
150         the performance effect is tiny.
151
152         * dfg/DFGGPRInfo.h:
153         (GPRInfo):
154         (JSC::DFG::GPRInfo::toRegister):
155         (JSC::DFG::GPRInfo::toIndex):
156         * offlineasm/armv7.rb:
157
158 2012-04-17  Filip Pizlo  <fpizlo@apple.com>
159
160         use after free in JSC::DFG::Node::op / JSC::DFG::ByteCodeParser::flushArgument
161         https://bugs.webkit.org/show_bug.cgi?id=83942
162         <rdar://problem/11247370>
163
164         Reviewed by Gavin Barraclough.
165         
166         Don't use references to the graph after resizing the graph.
167
168         * dfg/DFGByteCodeParser.cpp:
169         (JSC::DFG::ByteCodeParser::flushArgument):
170
171 2012-04-16  Gavin Barraclough  <barraclough@apple.com>
172
173         Array.prototype.toString should be generic
174         https://bugs.webkit.org/show_bug.cgi?id=81588
175
176         Reviewed by Sam Weinig.
177
178         * runtime/ArrayPrototype.cpp:
179         (JSC::arrayProtoFuncToString):
180             - check for join function, use fast case if base object is array & join is present & default.
181         * runtime/CommonIdentifiers.h:
182             - added 'join'.
183
184 2012-04-16  Carlos Garcia Campos  <cgarcia@igalia.com>
185
186         Unreviewed. Fix make distcheck issues.
187
188         * GNUmakefile.list.am: Add missing files.
189
190 2012-04-16  Sheriff Bot  <webkit.review.bot@gmail.com>
191
192         Unreviewed, rolling out r114309.
193         http://trac.webkit.org/changeset/114309
194         https://bugs.webkit.org/show_bug.cgi?id=84097
195
196         it broke everything (Requested by olliej on #webkit).
197
198         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
199         * bytecode/CodeBlock.h:
200         * dfg/DFGOperations.cpp:
201         * interpreter/Interpreter.cpp:
202         (JSC::Interpreter::getStackTrace):
203         (JSC::Interpreter::throwException):
204         * interpreter/Interpreter.h:
205         (Interpreter):
206         * jit/JITStubs.cpp:
207         (JSC::DEFINE_STUB_FUNCTION):
208         * jsc.cpp:
209         (functionJSCStack):
210         * llint/LLIntSlowPaths.cpp:
211         (JSC::LLInt::handleHostCall):
212         * parser/Parser.h:
213         (JSC::::parse):
214         * runtime/Error.cpp:
215         (JSC::addErrorInfo):
216         (JSC::throwError):
217         * runtime/Error.h:
218         (JSC):
219
220 2012-04-16  Oliver Hunt  <oliver@apple.com>
221
222         Exception stack traces aren't complete when the exception starts in native code
223         https://bugs.webkit.org/show_bug.cgi?id=84073
224
225         Reviewed by Gavin Barraclough.
226
227         Refactored building the stack trace to so that we can construct
228         it earlier, and don't rely on any prior work performed in the
229         exception handling machinery. Also updated LLInt and the DFG to
230         completely initialise the callframes of host function calls.
231
232         * bytecode/CodeBlock.h:
233         (JSC::CodeBlock::codeOriginIndexForReturn):
234         (CodeBlock):
235         * dfg/DFGOperations.cpp:
236         * interpreter/Interpreter.cpp:
237         (JSC::Interpreter::getStackTrace):
238         (JSC::Interpreter::addStackTraceIfNecessary):
239         (JSC):
240         (JSC::Interpreter::throwException):
241         * interpreter/Interpreter.h:
242         (Interpreter):
243         * jit/JITStubs.cpp:
244         (JSC::DEFINE_STUB_FUNCTION):
245         * jsc.cpp:
246         (functionJSCStack):
247         * llint/LLIntSlowPaths.cpp:
248         (JSC::LLInt::handleHostCall):
249         * parser/Parser.h:
250         (JSC::::parse):
251         * runtime/Error.cpp:
252         (JSC::addErrorInfo):
253         (JSC::throwError):
254         * runtime/Error.h:
255         (JSC):
256
257 2012-04-16  Oliver Hunt  <oliver@apple.com>
258
259         Fix COMMANDLINE_TYPEDARRAYS build
260         https://bugs.webkit.org/show_bug.cgi?id=84051
261
262         Reviewed by Gavin Barraclough.
263
264         Update for new putByIndex API and wtf changes.
265
266         * JSCTypedArrayStubs.h:
267         (JSC):
268
269 2012-04-16  Mark Hahnenberg  <mhahnenberg@apple.com>
270
271         GC in the middle of JSObject::allocatePropertyStorage can cause badness
272         https://bugs.webkit.org/show_bug.cgi?id=83839
273
274         Reviewed by Geoffrey Garen.
275
276         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
277         * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
278         (JSC::DEFINE_STUB_FUNCTION):
279         * runtime/JSObject.cpp:
280         (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're 
281         growing our already-existing PropertyStorage.
282         * runtime/JSObject.h:
283         (JSObject):
284         (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage 
285         and the new structure so that we can be sure a GC never occurs when our Structure
286         info is out of sync with our PropertyStorage.
287         (JSC):
288         (JSC::JSObject::putDirectInternal): Moved the check to see if we should 
289         allocate more backing store before the actual property insertion into 
290         the structure.
291         (JSC::JSObject::putDirectWithoutTransition): Ditto.
292         (JSC::JSObject::transitionTo): Ditto.
293         * runtime/Structure.cpp:
294         (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy 
295         for property backing stores contained within the Structure class.
296         (JSC):
297         * runtime/Structure.h:
298         (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion 
299         into the Structure would require resizing the property backing store so that they can 
300         preallocate the required storage.
301         (Structure):
302
303 2012-04-13  Sheriff Bot  <webkit.review.bot@gmail.com>
304
305         Unreviewed, rolling out r114185.
306         http://trac.webkit.org/changeset/114185
307         https://bugs.webkit.org/show_bug.cgi?id=83967
308
309         Broke a bunch of JavaScript related tests (Requested by
310         andersca on #webkit).
311
312         * runtime/ArrayPrototype.cpp:
313         (JSC::arrayProtoFuncToString):
314         (JSC::arrayProtoFuncToLocaleString):
315         * runtime/CommonIdentifiers.h:
316         * tests/mozilla/ecma/Array/15.4.4.2.js:
317         (getTestCases):
318
319 2012-04-13  Gavin Barraclough  <barraclough@apple.com>
320
321         Don't rely on fixed offsets to patch calls
322         https://bugs.webkit.org/show_bug.cgi?id=83966
323
324         Rubber stamped by Oliver Hunt.
325
326         These aren't being used anywhere!
327
328         * jit/JIT.h:
329         * jit/JITCall.cpp:
330         (JSC::JIT::compileOpCall):
331         * jit/JITCall32_64.cpp:
332         (JSC::JIT::compileOpCall):
333
334 2012-04-13  Hojong Han  <hojong.han@samsung.com>
335
336         Array.prototype.toString and Array.prototype.toLocaleString should be generic
337         https://bugs.webkit.org/show_bug.cgi?id=81588
338
339         Reviewed by Gavin Barraclough.
340
341         * runtime/ArrayPrototype.cpp:
342         (JSC::arrayProtoFuncToString):
343         (JSC::arrayProtoFuncToLocaleString):
344         * runtime/CommonIdentifiers.h:
345         * tests/mozilla/ecma/Array/15.4.4.2.js:
346         (getTestCases.array.item.new.TestCase):
347         (getTestCases):
348
349 2012-04-13  Gavin Barraclough  <barraclough@apple.com>
350
351         Don't rely on fixed offsets to patch method checks
352         https://bugs.webkit.org/show_bug.cgi?id=83958
353
354         Reviewed by Oliver Hunt.
355
356         * bytecode/StructureStubInfo.h:
357             - Add fields for the method check info.
358         * jit/JIT.cpp:
359         (JSC::PropertyStubCompilationInfo::copyToStubInfo):
360             - Store the offsets on the stub info, instead of asserting.
361         * jit/JIT.h:
362             - Delete all the method check related offsets.
363         * jit/JITPropertyAccess.cpp:
364         (JSC::JIT::patchMethodCallProto):
365             - Use the offset from the stubInfo.
366         * jit/JITStubs.cpp:
367         (JSC::DEFINE_STUB_FUNCTION):
368             - Pass the stubInfo to patchMethodCallProto.
369
370 2012-04-13  Gavin Barraclough  <barraclough@apple.com>
371
372         Don't rely on fixed offsets to patch get_by_id/put_by_id
373         https://bugs.webkit.org/show_bug.cgi?id=83924
374
375         Reviewed by Oliver Hunt.
376
377         Store offsets in the structure stub info, as we do for the DFG JIT.
378
379         * assembler/AbstractMacroAssembler.h:
380         (JSC::AbstractMacroAssembler::differenceBetween):
381             - this method can be static (now used from PropertyStubCompilationInfo::copyToStubInfo, will be removed soon!)
382         * bytecode/StructureStubInfo.h:
383             - added new fields for baseline JIT offsets.
384         * jit/JIT.cpp:
385         (JSC::PropertyStubCompilationInfo::copyToStubInfo):
386             - moved out from JIT::privateCompile.
387         (JSC::JIT::privateCompile):
388             - moved out code to PropertyStubCompilationInfo::copyToStubInfo.
389         * jit/JIT.h:
390         (PropertyStubCompilationInfo):
391             - added helper functions to initializae PropertyStubCompilationInfo, state to store more offset info.
392             - removed many offsets.
393         * jit/JITPropertyAccess.cpp:
394         (JSC::JIT::emit_op_method_check):
395         (JSC::JIT::compileGetByIdHotPath):
396         (JSC::JIT::compileGetByIdSlowCase):
397         (JSC::JIT::emit_op_put_by_id):
398         (JSC::JIT::emitSlow_op_put_by_id):
399         (JSC::JIT::patchGetByIdSelf):
400         (JSC::JIT::patchPutByIdReplace):
401         (JSC::JIT::privateCompilePatchGetArrayLength):
402         (JSC::JIT::privateCompileGetByIdProto):
403         (JSC::JIT::privateCompileGetByIdSelfList):
404         (JSC::JIT::privateCompileGetByIdProtoList):
405         (JSC::JIT::privateCompileGetByIdChainList):
406         (JSC::JIT::privateCompileGetByIdChain):
407         (JSC::JIT::resetPatchGetById):
408         (JSC::JIT::resetPatchPutById):
409             - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
410             - changed repatch functions to read offsets from the structure stub info.
411         * jit/JITPropertyAccess32_64.cpp:
412         (JSC::JIT::emit_op_method_check):
413         (JSC::JIT::compileGetByIdHotPath):
414         (JSC::JIT::compileGetByIdSlowCase):
415         (JSC::JIT::emit_op_put_by_id):
416         (JSC::JIT::emitSlow_op_put_by_id):
417         (JSC::JIT::patchGetByIdSelf):
418         (JSC::JIT::patchPutByIdReplace):
419         (JSC::JIT::privateCompilePatchGetArrayLength):
420         (JSC::JIT::privateCompileGetByIdProto):
421         (JSC::JIT::privateCompileGetByIdSelfList):
422         (JSC::JIT::privateCompileGetByIdProtoList):
423         (JSC::JIT::privateCompileGetByIdChainList):
424         (JSC::JIT::privateCompileGetByIdChain):
425         (JSC::JIT::resetPatchGetById):
426         (JSC::JIT::resetPatchPutById):
427             - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
428             - changed repatch functions to read offsets from the structure stub info.
429
430 2012-04-13  Rob Buis  <rbuis@rim.com>
431
432         Fix some compiler warnings (miscellaneous)
433         https://bugs.webkit.org/show_bug.cgi?id=80790
434
435         Reviewed by Antonio Gomes.
436
437         Fix signed/unsigned comparison warning.
438
439         * parser/Lexer.cpp:
440         (JSC::::record16):
441
442 2012-04-12  Benjamin Poulain  <bpoulain@apple.com>
443
444         Improve replaceUsingStringSearch() for case of a single character searchValue
445         https://bugs.webkit.org/show_bug.cgi?id=83738
446
447         Reviewed by Geoffrey Garen.
448
449         This patch improves replaceUsingStringSearch() with the following:
450         -Add a special case for single character search, taking advantage of the faster WTF::find().
451         -Inline replaceUsingStringSearch().
452         -Use StringImpl::create() instead of UString::substringSharingImpl() since we know we are in the bounds
453          by definition.
454
455         This gives less than 1% improvement for the multicharacter replace.
456         The single character search show about 9% improvement.
457
458         * runtime/StringPrototype.cpp:
459         (JSC::replaceUsingStringSearch):
460
461 2012-04-12  Michael Saboff  <msaboff@apple.com>
462
463         StructureStubInfo::reset() causes leaks of PolymorphicAccessStructureList and ExecutableMemoryHandle objects
464         https://bugs.webkit.org/show_bug.cgi?id=83823
465
466         Reviewed by Gavin Barraclough.
467
468         Put the clearing of the accessType to after the call to deref() so that
469         deref() can use the accessType to delete referenced objects as needed.
470
471         * bytecode/StructureStubInfo.h:
472         (JSC::StructureStubInfo::reset):
473
474 2012-04-12  Balazs Kelemen  <kbalazs@webkit.org>
475
476         [Qt] Fix WebKit1 build with V8
477         https://bugs.webkit.org/show_bug.cgi?id=83322
478
479         Reviewed by Adam Barth.
480
481         * yarr/yarr.pri:
482
483 2012-04-12  Gavin Barraclough  <barraclough@apple.com>
484
485         https://bugs.webkit.org/show_bug.cgi?id=83821
486         Move dfg repatching properties of structure stub info into a union
487
488         Reviewed by Oliver Hunt.
489
490         We want to be able to have similar properties for the baseline JIT, some restructuring to prepare for this.
491
492         * bytecode/StructureStubInfo.h:
493         (StructureStubInfo):
494         * dfg/DFGJITCompiler.cpp:
495         (JSC::DFG::JITCompiler::link):
496         * dfg/DFGRepatch.cpp:
497         (JSC::DFG::dfgRepatchByIdSelfAccess):
498         (JSC::DFG::linkRestoreScratch):
499         (JSC::DFG::generateProtoChainAccessStub):
500         (JSC::DFG::tryCacheGetByID):
501         (JSC::DFG::tryBuildGetByIDList):
502         (JSC::DFG::tryBuildGetByIDProtoList):
503         (JSC::DFG::emitPutReplaceStub):
504         (JSC::DFG::emitPutTransitionStub):
505         (JSC::DFG::tryCachePutByID):
506         (JSC::DFG::tryBuildPutByIdList):
507         (JSC::DFG::dfgResetGetByID):
508         (JSC::DFG::dfgResetPutByID):
509
510 2012-04-12  Gavin Barraclough  <barraclough@apple.com>
511
512         Delete a bunch of unused, copy & pasted values in JIT.h
513         https://bugs.webkit.org/show_bug.cgi?id=83822
514
515         Reviewed by Oliver Hunt.
516         
517         The only architecture we support the JSVALUE64 JIT on is x86-64, all the patch offsets for other architectures are just nonsense.
518
519         * jit/JIT.h:
520         (JIT):
521
522 2012-04-12  Csaba Osztrogonác  <ossy@webkit.org>
523
524         [Qt][ARM] Buildfix after r113934.
525
526         Reviewed by Zoltan Herczeg.
527
528         * assembler/MacroAssemblerARM.h:
529         (JSC::MacroAssemblerARM::compare8):
530         (MacroAssemblerARM):
531
532 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
533
534         It is incorrect to short-circuit Branch(LogicalNot(@a)) if boolean speculations on @a may fail
535         https://bugs.webkit.org/show_bug.cgi?id=83744
536         <rdar://problem/11206946>
537
538         Reviewed by Andy Estes.
539         
540         This does the conservative thing: it only short-circuits Branch(LogicalNot(@a)) if @a is a node
541         that is statically known to return boolean results.
542
543         * dfg/DFGFixupPhase.cpp:
544         (JSC::DFG::FixupPhase::fixupNode):
545
546 2012-04-11  Michael Saboff  <msaboff@apple.com>
547
548         Invalid Union Reference in StructureStubInfo.{cpp.h}
549         https://bugs.webkit.org/show_bug.cgi?id=83735
550
551         Reviewed by Filip Pizlo.
552
553         Changed the references to u.getByIdProtoList and u.getByIdSelfList
554         to be consistent.
555
556         * bytecode/StructureStubInfo.cpp:
557         (JSC::StructureStubInfo::visitWeakReferences):
558         * bytecode/StructureStubInfo.h:
559         (JSC::StructureStubInfo::initGetByIdSelfList):
560
561 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
562
563         Unreviewed attempting to make Qt's eccentric hardware work.
564
565         * assembler/MacroAssemblerARM.h:
566         (JSC::MacroAssemblerARM::compare8):
567         (MacroAssemblerARM):
568         * assembler/MacroAssemblerMIPS.h:
569         (JSC::MacroAssemblerMIPS::compare8):
570         (MacroAssemblerMIPS):
571         * assembler/MacroAssemblerSH4.h:
572         (JSC::MacroAssemblerSH4::compare8):
573         (MacroAssemblerSH4):
574
575 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
576
577         op_is_foo should be optimized
578         https://bugs.webkit.org/show_bug.cgi?id=83666
579
580         Reviewed by Gavin Barraclough.
581         
582         This implements inlining of op_is_undefined, op_is_string, op_is_number,
583         and op_is_boolean in LLInt and the baseline JIT. op_is_object and
584         op_is_function are not inlined because they are quite a bit more complex.
585         
586         This also implements all of the op_is_foo opcodes in the DFG, but it does
587         not do any type profiling based optimizations, yet.
588
589         * assembler/MacroAssemblerARMv7.h:
590         (JSC::MacroAssemblerARMv7::compare8):
591         (MacroAssemblerARMv7):
592         * assembler/MacroAssemblerX86Common.h:
593         (JSC::MacroAssemblerX86Common::compare8):
594         (MacroAssemblerX86Common):
595         * assembler/MacroAssemblerX86_64.h:
596         (MacroAssemblerX86_64):
597         (JSC::MacroAssemblerX86_64::testPtr):
598         * dfg/DFGAbstractState.cpp:
599         (JSC::DFG::AbstractState::execute):
600         * dfg/DFGByteCodeParser.cpp:
601         (JSC::DFG::ByteCodeParser::parseBlock):
602         * dfg/DFGCCallHelpers.h:
603         (JSC::DFG::CCallHelpers::setupArguments):
604         (CCallHelpers):
605         * dfg/DFGCSEPhase.cpp:
606         (JSC::DFG::CSEPhase::performNodeCSE):
607         * dfg/DFGCapabilities.h:
608         (JSC::DFG::canCompileOpcode):
609         * dfg/DFGNodeType.h:
610         (DFG):
611         * dfg/DFGOperations.cpp:
612         * dfg/DFGOperations.h:
613         * dfg/DFGPredictionPropagationPhase.cpp:
614         (JSC::DFG::PredictionPropagationPhase::propagate):
615         * dfg/DFGSpeculativeJIT.h:
616         (JSC::DFG::SpeculativeJIT::callOperation):
617         (JSC::DFG::SpeculativeJIT::appendCallSetResult):
618         * dfg/DFGSpeculativeJIT32_64.cpp:
619         (JSC::DFG::SpeculativeJIT::compile):
620         * dfg/DFGSpeculativeJIT64.cpp:
621         (JSC::DFG::SpeculativeJIT::compile):
622         * jit/JIT.cpp:
623         (JSC::JIT::privateCompileMainPass):
624         * jit/JIT.h:
625         (JIT):
626         * jit/JITOpcodes.cpp:
627         (JSC::JIT::emit_op_is_undefined):
628         (JSC):
629         (JSC::JIT::emit_op_is_boolean):
630         (JSC::JIT::emit_op_is_number):
631         (JSC::JIT::emit_op_is_string):
632         * jit/JITOpcodes32_64.cpp:
633         (JSC::JIT::emit_op_is_undefined):
634         (JSC):
635         (JSC::JIT::emit_op_is_boolean):
636         (JSC::JIT::emit_op_is_number):
637         (JSC::JIT::emit_op_is_string):
638         * jit/JITStubs.cpp:
639         (JSC):
640         * llint/LLIntSlowPaths.cpp:
641         (LLInt):
642         * llint/LLIntSlowPaths.h:
643         (LLInt):
644         * llint/LowLevelInterpreter.asm:
645         * llint/LowLevelInterpreter32_64.asm:
646         * llint/LowLevelInterpreter64.asm:
647         * offlineasm/armv7.rb:
648         * offlineasm/instructions.rb:
649         * offlineasm/x86.rb:
650
651 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
652
653         If you use an IntegerOperand and want to return it with integerResult, you need to
654         zero extend to get rid of the box
655         https://bugs.webkit.org/show_bug.cgi?id=83734
656         <rdar://problem/11232296>
657
658         Reviewed by Oliver Hunt.
659
660         * dfg/DFGSpeculativeJIT64.cpp:
661         (JSC::DFG::SpeculativeJIT::fillInteger):
662         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
663
664 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
665
666         SpeculativeJIT::fillStorage() should work with all the states that a cell may be in
667         https://bugs.webkit.org/show_bug.cgi?id=83722
668
669         Reviewed by Gavin Barraclough.
670         
671         It's now possible to do StorageOperand on a cell, in the case that the storage is
672         inline. But this means that fillStorage() must be able to handle all of the states
673         that a cell might be in. Previously it didn't.
674         
675         With this change, it now does handle all of the states, and moreover, it does so
676         by preserving the DataFormat of cells and performing all of the cell speculations
677         that should be performed if you're using a cell as storage. But if you use this on
678         something that is known to be storage already then it behaves as it did before.
679
680         * dfg/DFGSpeculativeJIT.cpp:
681         (JSC::DFG::SpeculativeJIT::fillStorage):
682
683 2012-04-11  Filip Pizlo  <fpizlo@apple.com>
684
685         Global variable predictions should not be coalesced unnecessarily
686         https://bugs.webkit.org/show_bug.cgi?id=83678
687
688         Reviewed by Geoff Garen.
689         
690         Removed the PredictionTracker and everyone who used it. Converted GetGlobalVar
691         to have a heapPrediction like a civilized DFG opcode ought to.
692         
693         No performance effect.
694
695         * GNUmakefile.list.am:
696         * JavaScriptCore.xcodeproj/project.pbxproj:
697         * bytecode/CodeBlock.h:
698         * bytecode/PredictionTracker.h: Removed.
699         * dfg/DFGByteCodeParser.cpp:
700         (JSC::DFG::ByteCodeParser::parseBlock):
701         * dfg/DFGGenerationInfo.h:
702         * dfg/DFGGraph.cpp:
703         (JSC::DFG::Graph::dump):
704         * dfg/DFGGraph.h:
705         (Graph):
706         * dfg/DFGNode.h:
707         (JSC::DFG::Node::hasHeapPrediction):
708         * dfg/DFGPredictionPropagationPhase.cpp:
709         (JSC::DFG::PredictionPropagationPhase::propagate):
710
711 2012-04-11  Benjamin Poulain  <bpoulain@apple.com>
712
713         Optimize String.split() for 1 character separator
714         https://bugs.webkit.org/show_bug.cgi?id=83546
715
716         Reviewed by Gavin Barraclough.
717
718         This patch adds a serie of optimizations to make stringProtoFuncSplit() faster in the common case
719         where the separator is a single character.
720
721         The two main gains are:
722         -Use of the find() function with a single character instead of doing a full string matching.
723         -Use of WTF::find() instead of UString::find() to avoid branching on is8Bit() and have a simpler inline
724          function.
725
726         The code is also changed to avoid making unnecessary allocations by converting the 8bit string to 16bits.
727
728         This makes String.split() faster by about 13% in that particular case.
729
730         * runtime/StringPrototype.cpp:
731         (JSC):
732         (JSC::splitStringByOneCharacterImpl):
733         (JSC::stringProtoFuncSplit):
734
735 2012-04-10  Carlos Garcia Campos  <cgarcia@igalia.com>
736
737         Unreviewed. Fix make distcheck issues.
738
739         * GNUmakefile.list.am: Ad missing files.
740
741 2012-04-10  Mark Rowe  <mrowe@apple.com>
742
743         Attempt to fix the Windows build.
744
745         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
746
747 2012-04-10  Patrick Gansterer  <paroga@webkit.org>
748
749         Cleanup wtf/Platform.h and config.h files
750         https://bugs.webkit.org/show_bug.cgi?id=83431
751
752         Reviewed by Eric Seidel.
753
754         The ENABLE() and USE() macros take care about the case when the flag
755         isn't defined. So there is no need to define anything with 0.
756
757         Also move duplicated code from the config.h files to Platform.h and
758         merge a few preprocessor commands to make the file more readable.
759
760         * config.h:
761
762 2012-04-10  Filip Pizlo  <fpizlo@apple.com>
763
764         DFG should flush SetLocals to arguments
765         https://bugs.webkit.org/show_bug.cgi?id=83554
766
767         Reviewed by Gavin Barraclough.
768         
769         This is necessary to match baseline JIT argument capture behavior.
770         
771         But to make this work right we need to have a story for arguments into
772         which we store values of different formats. This patch introduces the
773         notion of an ArgumentPosition - i.e. an argument in a particular inline
774         call frame - and forces unification of all data pertinent to selecting
775         the argument's data format.
776         
777         Also fixed an amusing bug in the handling of OSR on SetLocals if there
778         was any insertion/deletion of nodes in the basic block. This is benign
779         for now but won't be eventually since the DFG is getting smarter. So
780         better fix it now.
781         
782         Also fixed an amusing bug in the handling of OSR on SetLocals if they
783         are immediately followed by a Flush. I think this bug might have always
784         been there but now it'll happen more commonly, and it's covered by the
785         run-javascriptcore-tests.
786
787         * JavaScriptCore.xcodeproj/project.pbxproj:
788         * dfg/DFGAbstractState.cpp:
789         (JSC::DFG::AbstractState::execute):
790         * dfg/DFGArgumentPosition.h: Added.
791         (DFG):
792         (ArgumentPosition):
793         (JSC::DFG::ArgumentPosition::ArgumentPosition):
794         (JSC::DFG::ArgumentPosition::addVariable):
795         (JSC::DFG::ArgumentPosition::mergeArgumentAwareness):
796         * dfg/DFGByteCodeParser.cpp:
797         (JSC::DFG::ByteCodeParser::setLocal):
798         (JSC::DFG::ByteCodeParser::setArgument):
799         (InlineStackEntry):
800         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
801         * dfg/DFGDoubleFormatState.h: Added.
802         (DFG):
803         (JSC::DFG::mergeDoubleFormatStates):
804         (JSC::DFG::mergeDoubleFormatState):
805         (JSC::DFG::doubleFormatStateToString):
806         * dfg/DFGGraph.h:
807         (Graph):
808         * dfg/DFGPredictionPropagationPhase.cpp:
809         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
810         * dfg/DFGSpeculativeJIT32_64.cpp:
811         (JSC::DFG::SpeculativeJIT::compile):
812         * dfg/DFGSpeculativeJIT64.cpp:
813         (JSC::DFG::SpeculativeJIT::compile):
814         * dfg/DFGVariableAccessData.h:
815         (JSC::DFG::VariableAccessData::VariableAccessData):
816         (JSC::DFG::VariableAccessData::predict):
817         (JSC::DFG::VariableAccessData::argumentAwarePrediction):
818         (VariableAccessData):
819         (JSC::DFG::VariableAccessData::mergeArgumentAwarePrediction):
820         (JSC::DFG::VariableAccessData::doubleFormatState):
821         (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
822         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
823         (JSC::DFG::VariableAccessData::mergeDoubleFormatState):
824         (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):
825
826 2012-04-10  Adam Klein  <adamk@chromium.org>
827
828         Remove unused NonNullPassRefPtr from WTF
829         https://bugs.webkit.org/show_bug.cgi?id=82389
830
831         Reviewed by Kentaro Hara.
832
833         * JavaScriptCore.order: Remove nonexistent symbols referencing NonNullPassRefPtr.
834
835 2012-04-10  Darin Adler  <darin@apple.com>
836
837         Remove unused data member from Lexer class
838         https://bugs.webkit.org/show_bug.cgi?id=83429
839
840         Reviewed by Kentaro Hara.
841
842         I noticed that m_delimited was "write-only", so I deleted it.
843
844         * parser/Lexer.cpp:
845         (JSC::Lexer::setCode): Removed code to set m_delimited.
846         (JSC::Lexer::parseIdentifier): Ditto.
847         (JSC::Lexer::parseIdentifierSlowCase): Ditto.
848         (JSC::Lexer::lex): Ditto.
849         * parser/Lexer.h: Deleted m_delimited.
850
851 2012-04-10  Patrick Gansterer  <paroga@webkit.org>
852
853         [CMake] Enable USE_FOLDERS property
854         https://bugs.webkit.org/show_bug.cgi?id=83571
855
856         Reviewed by Daniel Bates.
857
858         Setting the FOLDER property on targets gives more structure 
859         to the generated Visual Studio solutions.
860         This does not affect other CMake generators.
861
862         * CMakeLists.txt:
863         * shell/CMakeLists.txt:
864
865 2012-04-10  Filip Pizlo  <fpizlo@apple.com>
866
867         It should be possible to see why a code block was not compiled by the DFG
868         https://bugs.webkit.org/show_bug.cgi?id=83553
869
870         Reviewed by Geoff Garen.
871         
872         If DFG_ENABLE(DEBUG_VERBOSE) and a code block is rejected, then print the
873         opcode that caused the rejection.
874
875         * dfg/DFGCapabilities.cpp:
876         (JSC::DFG::debugFail):
877         (DFG):
878         (JSC::DFG::canHandleOpcodes):
879
880 2012-04-09  Gavin Barraclough  <barraclough@apple.com>
881
882         If a callback constructor returns a C++ null, throw a type error.
883         https://bugs.webkit.org/show_bug.cgi?id=83537
884
885         Rubber Stamped by Geoff Garen.
886
887         * API/JSCallbackConstructor.cpp:
888         (JSC::constructJSCallback):
889             - If a callback constructor returns a C++ null, throw a type error.
890         * API/tests/testapi.c:
891         (Base_returnHardNull):
892         * API/tests/testapi.js:
893             - Add a test case for callback constructors that return a C++ null.
894
895 2012-04-09  Gavin Barraclough  <barraclough@apple.com>
896
897         If a callback function returns a C++ null, convert to undefined.
898         https://bugs.webkit.org/show_bug.cgi?id=83534
899
900         Reviewed by Geoff Garen.
901
902         * API/JSCallbackFunction.cpp:
903             - If a callback function returns a C++ null, convert to undefined.
904         (JSC::JSCallbackFunction::call):
905         * API/tests/testapi.c:
906         (Base_returnHardNull):
907         * API/tests/testapi.js:
908             - Add a test case for callback functions that return a C++ null.
909
910 2012-04-09  Filip Pizlo  <fpizlo@apple.com>
911
912         Classic interpreter's GC hooks shouldn't attempt to scan instructions for code blocks that
913         are currently being generated
914         https://bugs.webkit.org/show_bug.cgi?id=83531
915         <rdar://problem/11215200>
916
917         Reviewed by Gavin Barraclough.
918
919         * bytecode/CodeBlock.cpp:
920         (JSC::CodeBlock::stronglyVisitStrongReferences):
921
922 2012-04-09  Filip Pizlo  <fpizlo@apple.com>
923
924         Unreviewed, modernize and clean up uses of ARM assembly mnemonics in inline asm blocks.
925
926         * dfg/DFGOperations.cpp:
927         (JSC):
928         * offlineasm/armv7.rb:
929
930 2012-04-09  Patrick Gansterer  <paroga@webkit.org>
931
932         Remove HAVE_STDINT_H
933         https://bugs.webkit.org/show_bug.cgi?id=83434
934
935         Reviewed by Kentaro Hara.
936
937         HAVE_STDINT_H is defined with 1 all the time and we us stdint.h without HAVE(STDINT_H) already.
938
939         * config.h:
940
941 2012-04-08  Filip Pizlo  <fpizlo@apple.com>
942
943         DFG should not load the property storage if it is inline.
944         https://bugs.webkit.org/show_bug.cgi?id=83455
945
946         Reviewed by Gavin Barraclough.
947         
948         We had previously decided to have all property storage accesses go through
949         the property storage pointer even if they don't "really" have to, because
950         we were thinking this would help GC barriers somehow. Well, we never ended
951         up doing anything with that. Hence, doing these wasted loads of the
952         property storage pointer when the storage is inline is just a waste of CPU
953         cycles.
954         
955         This change makes the DFG's inline property accesses (GetByOffset and
956         PutByOffset) go directly to the inline property storage if the structure(s)
957         tell us that it's OK.
958         
959         This looks like an across-the-board 1% win.
960
961         * bytecode/StructureSet.h:
962         (JSC):
963         (JSC::StructureSet::allAreUsingInlinePropertyStorage):
964         (StructureSet):
965         * dfg/DFGByteCodeParser.cpp:
966         (JSC::DFG::ByteCodeParser::parseBlock):
967         * dfg/DFGSpeculativeJIT.cpp:
968         (JSC::DFG::SpeculativeJIT::fillStorage):
969
970 2012-04-08  Filip Pizlo  <fpizlo@apple.com>
971
972         Command-line jsc's exception handling should be rationalized
973         https://bugs.webkit.org/show_bug.cgi?id=83437
974
975         Reviewed by Dan Bernstein.
976         
977         - If an exception is thrown during run() execution, it is now propagated,
978           so that it will terminate program execution unless it is caught.
979           
980         - If program execution terminates with an exception, the exception is now
981           always printed.
982           
983         - When printing the exception, the backtrace is now also printed if one is
984           available. It will only not be available if you use something akin to my
985           favorite line of code, 'throw "error"', since primitives don't have
986           properties and hence we cannot attach a "stack" property to them.
987
988         * jsc.cpp:
989         (functionRun):
990         (runWithScripts):
991
992 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
993
994         Forced OSR exits should lead to recompilation based on count, not rate
995         https://bugs.webkit.org/show_bug.cgi?id=83247
996         <rdar://problem/10720925>
997
998         Reviewed by Geoff Garen.
999         
1000         Track which OSR exits happen because of inadequate coverage. Count them
1001         separately. If the count reaches a threshold, immediately trigger
1002         reoptimization.
1003         
1004         This is in contrast to the recompilation trigger for all other OSR exits.
1005         Normally recomp is triggered when the exit rate exceeds a certain ratio.
1006         
1007         Looks like a slight V8 speedup (sub 1%).
1008
1009         * bytecode/CodeBlock.cpp:
1010         (JSC::CodeBlock::CodeBlock):
1011         * bytecode/CodeBlock.h:
1012         (JSC::CodeBlock::forcedOSRExitCounter):
1013         (JSC::CodeBlock::addressOfForcedOSRExitCounter):
1014         (JSC::CodeBlock::offsetOfForcedOSRExitCounter):
1015         (JSC::CodeBlock::shouldReoptimizeNow):
1016         (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
1017         (CodeBlock):
1018         * bytecode/DFGExitProfile.h:
1019         (JSC::DFG::exitKindToString):
1020         * dfg/DFGOSRExitCompiler.cpp:
1021         (JSC::DFG::OSRExitCompiler::handleExitCounts):
1022         (DFG):
1023         * dfg/DFGOSRExitCompiler.h:
1024         (OSRExitCompiler):
1025         * dfg/DFGOSRExitCompiler32_64.cpp:
1026         (JSC::DFG::OSRExitCompiler::compileExit):
1027         * dfg/DFGOSRExitCompiler64.cpp:
1028         (JSC::DFG::OSRExitCompiler::compileExit):
1029         * dfg/DFGOperations.cpp:
1030         * dfg/DFGSpeculativeJIT.cpp:
1031         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
1032         * dfg/DFGSpeculativeJIT32_64.cpp:
1033         (JSC::DFG::SpeculativeJIT::compile):
1034         * dfg/DFGSpeculativeJIT64.cpp:
1035         (JSC::DFG::SpeculativeJIT::compile):
1036         * runtime/Options.cpp:
1037         (Options):
1038         (JSC::Options::initializeOptions):
1039         * runtime/Options.h:
1040         (Options):
1041
1042 2012-04-06  Benjamin Poulain  <bpoulain@apple.com>
1043
1044         Do not abuse ArrayStorage's m_length for testing array consistency
1045         https://bugs.webkit.org/show_bug.cgi?id=83403
1046
1047         Reviewed by Geoffrey Garen.
1048
1049         Array creation from a list of values is a 3 steps process:
1050         -JSArray::tryCreateUninitialized()
1051         -JSArray::initializeIndex() for each values
1052         -JSArray::completeInitialization()
1053
1054         Previously, the attribute m_length was not set to the final size
1055         JSArray::tryCreateUninitialized() because it was used to test the array
1056         consistency JSArray::initializeIndex().
1057
1058         This caused the initialization loop using JSArray::initializeIndex() maintain
1059         two counters:
1060         -index of the loop
1061         -storage->m_length++
1062
1063         This patch fixes this by using the index of the initialization loop for the indinces of
1064         JSArray::initializeIndex(). For testing consistency, the variable m_initializationIndex
1065         is introduced if CHECK_ARRAY_CONSISTENCY is defined.
1066
1067         The patch also fixes minor unrelated build issue when CHECK_ARRAY_CONSISTENCY is defined.
1068
1069         This improves the performance of JSArray creation from literals by 8%.
1070
1071         * runtime/JSArray.cpp:
1072         (JSC::JSArray::tryFinishCreationUninitialized):
1073         (JSC::JSArray::checkConsistency):
1074         * runtime/JSArray.h:
1075         (ArrayStorage):
1076         (JSC::JSArray::initializeIndex):
1077         (JSC::JSArray::completeInitialization):
1078
1079 2012-04-06  Jon Lee  <jonlee@apple.com>
1080
1081         Build fix for Windows bots.
1082
1083         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: export missing symbol.
1084
1085 2012-04-06  Geoffrey Garen  <ggaren@apple.com>
1086
1087         Renamed
1088
1089                 WeakHeap => WeakSet
1090                 HandleHeap => HandleSet
1091
1092         Reviewed by Sam Weinig.
1093
1094         These sets do have internal allocators, but it's confusing to call them
1095         heaps because they're sub-objects of an object called "heap".
1096
1097         * heap/HandleHeap.cpp: Removed.
1098         * heap/HandleHeap.h: Removed.
1099         * heap/HandleSet.cpp: Copied from JavaScriptCore/heap/HandleHeap.cpp.
1100         * heap/WeakHeap.cpp: Removed.
1101         * heap/WeakHeap.h: Removed.
1102         * heap/WeakSet.cpp: Copied from JavaScriptCore/heap/WeakHeap.cpp.
1103         * heap/WeakSet.h: Copied from JavaScriptCore/heap/WeakHeap.h.
1104
1105         Plus global rename using grep.
1106
1107 2012-04-06  Dan Bernstein  <mitz@apple.com>
1108
1109         <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access
1110
1111         Reviewed by Sam Weinig.
1112
1113         * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.
1114
1115 2012-04-06  Rob Buis  <rbuis@rim.com>
1116
1117         Fix cast-align warnings in JSC
1118         https://bugs.webkit.org/show_bug.cgi?id=80790
1119
1120         Reviewed by George Staikos.
1121
1122         * assembler/ARMv7Assembler.h:
1123         (JSC::ARMv7Assembler::computeJumpType):
1124         (JSC::ARMv7Assembler::link):
1125         * assembler/LinkBuffer.h:
1126         (JSC::LinkBuffer::linkCode):
1127         * heap/MarkStack.cpp:
1128         (JSC::SlotVisitor::copyAndAppend):
1129         * runtime/JSArray.cpp:
1130         (JSC::JSArray::visitChildren):
1131         * wtf/RefCountedArray.h:
1132         (WTF::RefCountedArray::Header::payload):
1133
1134 2012-04-06  Darin Adler  <darin@apple.com>
1135
1136         Streamline strtod and fix some related problems
1137         https://bugs.webkit.org/show_bug.cgi?id=82857
1138
1139         Reviewed by Geoffrey Garen.
1140
1141         * parser/Lexer.cpp:
1142         (JSC::Lexer<>::lex): Use parseDouble. Since we have already scanned the number
1143         and we know it has only correct characters, leading spaces, trailing junk, and
1144         trailing spaces are not a possibility. No need to add a trailing null character.
1145
1146         * runtime/JSGlobalObjectFunctions.cpp:
1147         (JSC::parseInt): Changed overflow based 10 case to use parseDouble. No need
1148         to allow trailing junk since the code above already allows only numeric digits
1149         in the string. This code path is used only in unusual cases, so it's not
1150         optimized for 8-bit strings, but easily could be.
1151         (JSC::jsStrDecimalLiteral): Removed the allow trailing junk argument to this
1152         function template because all the callers are OK with trailing junk. Use the
1153         parseDouble function. No need to copy the data into a byte buffer, because
1154         parseDouble handles that.
1155         (JSC::toDouble): Got rid of the DisallowTrailingJunk argument to the
1156         jsStrDecimalLiteral function template. That's OK because this function
1157         already checks for trailing junk and handles it appropriately. The old code
1158         path was doing it twice.
1159         (JSC::parseFloat): Got rid of the AllowTrailingJunk argument to the
1160         jsStrDecimalLiteral function template; the template allows junk unconditionally.
1161
1162         * runtime/LiteralParser.cpp:
1163         (JSC::::Lexer::lexNumber): Use parseDouble. Since we have already scanned the number
1164         and we know it has only correct characters, leading spaces, trailing junk, and
1165         trailing spaces are not a possibility. No need to add a trailing null character.
1166         No need to copy the data into a byte buffer, because parseDouble handles that.
1167         We could optimize the UChar case even more because we know all the characters
1168         are ASCII, but not doing that at this time.
1169
1170         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated.
1171
1172 2012-04-06  Patrick Gansterer  <paroga@webkit.org>
1173
1174         Remove JSC dependency from GregorianDateTime
1175         https://bugs.webkit.org/show_bug.cgi?id=83290
1176
1177         Reviewed by Geoffrey Garen.
1178
1179         This allows us to move it to WTF later.
1180
1181         * runtime/DateConstructor.cpp:
1182         (JSC::callDate):
1183         * runtime/JSDateMath.h:
1184
1185 2012-04-05  Michael Saboff  <msaboff@apple.com>
1186
1187         Call Heap::discardAllCompiledCode() in low memory situations
1188         https://bugs.webkit.org/show_bug.cgi?id=83335
1189
1190         Reviewed by Geoffrey Garen.
1191
1192         Restructured Heap::discardAllCompiledCode() to do the "Is JavaScriptRunning?"
1193         check inline so that it can be called directly without this check.
1194
1195         * heap/Heap.cpp:
1196         (JSC::Heap::discardAllCompiledCode):
1197         (JSC::Heap::collectAllGarbage):
1198         * heap/Heap.h: Added JS_EXPORT_PRIVATE to discardAllCompiledCode() so it can be
1199         called from WebCore.
1200         (Heap):
1201         * runtime/JSGlobalData.h: Removed unused " void discardAllCompiledCode()" declaration.
1202         (JSGlobalData):
1203
1204 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
1205
1206         Speed up the conversion from JSValue to String for bulk operations
1207         https://bugs.webkit.org/show_bug.cgi?id=83243
1208
1209         Reviewed by Geoffrey Garen.
1210
1211         When making operations on primitive types, we loose some time converting
1212         values to JSString in order to extract the string.
1213
1214         This patch speeds up some basic Array operations by avoiding the creation
1215         of intermediary JSString when possible.
1216
1217         For the cases where we need to convert a lot of JSValue in a tight loop,
1218         an inline conversion is used.
1219
1220         * runtime/ArrayPrototype.cpp:
1221         (JSC::arrayProtoFuncToString):
1222         (JSC::arrayProtoFuncToLocaleString):
1223         (JSC::arrayProtoFuncJoin):
1224         (JSC::arrayProtoFuncPush):
1225         (JSC::arrayProtoFuncSort):
1226         * runtime/CommonIdentifiers.h:
1227         * runtime/JSArray.cpp:
1228         (JSC::JSArray::sort):
1229         * runtime/JSString.h:
1230         (JSC::JSValue::toUString):
1231         (JSC):
1232         (JSC::inlineJSValueNotStringtoUString):
1233         (JSC::JSValue::toUStringInline):
1234         * runtime/JSValue.cpp:
1235         (JSC::JSValue::toUStringSlowCase):
1236         (JSC):
1237         * runtime/JSValue.h:
1238         (JSValue):
1239
1240 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
1241
1242         Use QuickSort when sorting primitive values by string representation
1243         https://bugs.webkit.org/show_bug.cgi?id=83312
1244
1245         Reviewed by Gavin Barraclough.
1246
1247         When the value we are sorting are all primitive values, we do not need to
1248         ensure a stable sort as two values with equal string representation are
1249         indistinguishable from JavaScript.
1250
1251         This gives about 16% performance increase when sorting primitive values.
1252
1253         * runtime/JSArray.cpp:
1254         (JSC::JSArray::sort):
1255
1256 2012-04-05  Oliver Hunt  <oliver@apple.com>
1257
1258         SIGILL in JavaScriptCore on a Geode processor
1259         https://bugs.webkit.org/show_bug.cgi?id=82496
1260
1261         Reviewed by Gavin Barraclough.
1262
1263         Don't attempt to use the DFG when SSE2 is not available.
1264
1265         * dfg/DFGCapabilities.cpp:
1266         (JSC::DFG::canCompileOpcodes):
1267
1268 2012-04-05  Oliver Hunt  <oliver@apple.com>
1269
1270         Fix 32-bit build.
1271
1272         * API/APICast.h:
1273         (toJS):
1274
1275 2012-04-05  Oliver Hunt  <oliver@apple.com>
1276
1277         Replace static_cast with jsCast when casting JSCell subclasses in JSC
1278         https://bugs.webkit.org/show_bug.cgi?id=83307
1279
1280         Reviewed by Gavin Barraclough.
1281
1282         Replace all usage of static_cast<JSCell subtype*> with jsCast<> in JavaScriptCore.
1283         This results in assertions when unsafe casts are performed, but simply leaves
1284         a static_cast<> in release builds.
1285
1286         * API/APICast.h:
1287         (toJS):
1288         * API/JSCallbackConstructor.cpp:
1289         (JSC::constructJSCallback):
1290         * API/JSCallbackFunction.cpp:
1291         (JSC::JSCallbackFunction::call):
1292         * API/JSCallbackObjectFunctions.h:
1293         (JSC::::asCallbackObject):
1294         (JSC::::finishCreation):
1295         (JSC::::construct):
1296         (JSC::::call):
1297         * API/JSObjectRef.cpp:
1298         (JSObjectGetPrivate):
1299         (JSObjectSetPrivate):
1300         (JSObjectGetPrivateProperty):
1301         (JSObjectSetPrivateProperty):
1302         (JSObjectDeletePrivateProperty):
1303         * API/JSValueRef.cpp:
1304         (JSValueIsObjectOfClass):
1305         * API/JSWeakObjectMapRefPrivate.cpp:
1306         * bytecompiler/BytecodeGenerator.cpp:
1307         (JSC::BytecodeGenerator::resolve):
1308         (JSC::BytecodeGenerator::resolveConstDecl):
1309         * debugger/DebuggerActivation.cpp:
1310         (JSC::DebuggerActivation::finishCreation):
1311         * dfg/DFGOperations.cpp:
1312         * interpreter/Interpreter.cpp:
1313         (JSC::Interpreter::execute):
1314         (JSC::Interpreter::privateExecute):
1315         * jit/JITStubs.cpp:
1316         (JSC::DEFINE_STUB_FUNCTION):
1317         * runtime/Executable.h:
1318         (JSC::isHostFunction):
1319         * runtime/JSActivation.h:
1320         (JSC::asActivation):
1321         * runtime/JSArray.cpp:
1322         (JSC::JSArray::defineOwnProperty):
1323         * runtime/JSArray.h:
1324         (JSC::asArray):
1325         * runtime/JSBoundFunction.cpp:
1326         (JSC::boundFunctionCall):
1327         (JSC::boundFunctionConstruct):
1328         * runtime/JSByteArray.h:
1329         (JSC::asByteArray):
1330         * runtime/JSCell.cpp:
1331         (JSC::JSCell::toObject):
1332         * runtime/JSCell.h:
1333         (JSC::jsCast):
1334         * runtime/JSGlobalObject.h:
1335         (JSC::asGlobalObject):
1336         * runtime/JSGlobalObjectFunctions.cpp:
1337         (JSC::globalFuncEval):
1338         * runtime/JSObject.cpp:
1339         (JSC::JSObject::setPrototypeWithCycleCheck):
1340         (JSC::JSObject::allowsAccessFrom):
1341         (JSC::JSObject::toThisObject):
1342         (JSC::JSObject::unwrappedObject):
1343         * runtime/JSObject.h:
1344         (JSC::asObject):
1345         * runtime/JSPropertyNameIterator.h:
1346         (JSC::Register::propertyNameIterator):
1347         * runtime/JSString.h:
1348         (JSC::asString):
1349         (JSC::JSValue::toString):
1350         * runtime/StringPrototype.cpp:
1351         (JSC::stringProtoFuncSubstr):
1352
1353 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
1354
1355         Make something faster than JSStringBuilder for joining an array of JSValue
1356         https://bugs.webkit.org/show_bug.cgi?id=83180
1357
1358         Reviewed by Geoffrey Garen.
1359
1360         This patch add the class JSStringJoiner optimized for join() operations.
1361
1362         This class makes stricter constraints than JSStringBuilder in order avoid
1363         memory allocations.
1364
1365         In the best case, the class allocate memory only twice:
1366         -Allocate an array to keep a list of UString to join.
1367         -Allocate the final string.
1368
1369         We also avoid the conversion from 8bits strings to 16bits strings since
1370         they are costly and unlikly to help for subsequent calls.
1371
1372         * CMakeLists.txt:
1373         * GNUmakefile.list.am:
1374         * JavaScriptCore.gypi:
1375         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1376         * JavaScriptCore.xcodeproj/project.pbxproj:
1377         * Target.pri:
1378         * runtime/ArrayPrototype.cpp:
1379         (JSC::arrayProtoFuncToLocaleString):
1380         (JSC::arrayProtoFuncJoin):
1381         * runtime/JSStringJoiner.cpp: Added.
1382         (JSC):
1383         (JSC::appendStringToData):
1384         (JSC::joinStrings):
1385         (JSC::JSStringJoiner::build):
1386         * runtime/JSStringJoiner.h: Added.
1387         (JSC):
1388         (JSStringJoiner):
1389         (JSC::JSStringJoiner::JSStringJoiner):
1390         (JSC::JSStringJoiner::append):
1391
1392 2012-04-05  Gavin Barraclough  <barraclough@apple.com>
1393
1394         https://bugs.webkit.org/show_bug.cgi?id=77293
1395         [Un]Reserve 'let'
1396
1397         Rubber stamped by Oliver Hunt.
1398
1399         Revert r106198.
1400         This does break the web - e.g. https://bvi.bnc.ca/index/bnc/indexen.html
1401         If we're going to reserve let, we're going to have to do so in a more
1402         circumspect fashion.
1403
1404         * parser/Keywords.table:
1405
1406 2012-04-05  Michael Saboff  <msaboff@apple.com>
1407
1408         Rolling out http://trac.webkit.org/changeset/113262.
1409         Original code was fine.
1410
1411         Rubber-stamped by Oliver Hunt.
1412
1413         * assembler/MacroAssembler.h:
1414         (JSC::MacroAssembler::additionBlindedConstant):
1415
1416 2012-04-05  Patrick Gansterer  <paroga@webkit.org>
1417
1418         [WinCE] Remove unnecessary function decleration
1419         https://bugs.webkit.org/show_bug.cgi?id=83155
1420
1421         Reviewed by Kentaro Hara.
1422
1423         * runtime/JSDateMath.cpp:
1424
1425 2012-04-04  Patrick Gansterer  <paroga@webkit.org>
1426
1427         Add WTF::getCurrentLocalTime()
1428         https://bugs.webkit.org/show_bug.cgi?id=83164
1429
1430         Reviewed by Alexey Proskuryakov.
1431
1432         Replace the calls to WTF::getLocalTime() with time(0) with the new function.
1433         This allows us to use Win32 API on windows to get the same result in a next step.
1434
1435         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1436         * runtime/DateConstructor.cpp:
1437         (JSC::callDate):
1438
1439 2012-04-04  Oliver Hunt  <oliver@apple.com>
1440
1441         Parser fails to revert some state after parsing expression and object literals.
1442         https://bugs.webkit.org/show_bug.cgi?id=83236
1443
1444         Reviewed by Gavin Barraclough.
1445
1446         Reset left hand side counter after parsing the literals.
1447
1448         * parser/Parser.cpp:
1449         (JSC::::parseObjectLiteral):
1450         (JSC::::parseStrictObjectLiteral):
1451         (JSC::::parseArrayLiteral):
1452
1453 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
1454
1455         DFG InstanceOf should not uselessly speculate cell
1456         https://bugs.webkit.org/show_bug.cgi?id=83234
1457
1458         Reviewed by Oliver Hunt.
1459         
1460         If InstanceOf is the only user of its child then don't speculate cell, since
1461         the not-cell case is super easy to handle.
1462
1463         * dfg/DFGSpeculativeJIT.cpp:
1464         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
1465
1466 2012-04-04  Michael Saboff  <msaboff@apple.com>
1467
1468         Fixed minor error: "& 3" should be "& 2".
1469
1470         Rubber-stamped by Oliver Hunt.
1471
1472         * assembler/MacroAssembler.h:
1473         (JSC::MacroAssembler::additionBlindedConstant):
1474
1475 2012-04-04  Michael Saboff  <msaboff@apple.com>
1476
1477         Constant Blinding for add/sub immediate crashes in ArmV7 when dest is SP
1478         https://bugs.webkit.org/show_bug.cgi?id=83191
1479
1480         Reviewed by Oliver Hunt.
1481
1482         Make are that blinded constant pairs are similarly aligned to the
1483         original immediate values so that instructions that expect that
1484         alignment work correctly.  One example is ARMv7 add/sub imm to SP.
1485
1486         * assembler/ARMv7Assembler.h:
1487         (JSC::ARMv7Assembler::add): Added ASSERT that immediate is word aligned.
1488         (JSC::ARMv7Assembler::sub): Added ASSERT that immediate is word aligned.
1489         (JSC::ARMv7Assembler::sub_S): Added ASSERT that immediate is word aligned.
1490         * assembler/MacroAssembler.h:
1491         (JSC::MacroAssembler::additionBlindedConstant):
1492
1493 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
1494
1495         DFG should short-circuit Branch(LogicalNot(...))
1496         https://bugs.webkit.org/show_bug.cgi?id=83181
1497
1498         Reviewed by Geoff Garen.
1499         
1500         Slight (sub 1%) speed-up on V8.
1501
1502         * dfg/DFGFixupPhase.cpp:
1503         (JSC::DFG::FixupPhase::fixupNode):
1504
1505 2012-04-04  Geoffrey Garen  <ggaren@apple.com>
1506
1507         [Qt] REGRESSION(r113141): All tests assert on 32 bit debug mode
1508         https://bugs.webkit.org/show_bug.cgi?id=83139
1509
1510         Reviewed by Sam Weinig.
1511
1512         * heap/PassWeak.h:
1513         (JSC::::get): 32-bit JSValue treats JSValue(nullptr).asCell() as an error,
1514         so work around that here. (Long-term, we should make 32-bit and 64-bit
1515         agree on the right behavior.)
1516
1517 2012-04-03  Geoffrey Garen  <ggaren@apple.com>
1518
1519         Updated JSC expected test results to reflect recent bug fixes <disapproving look>.
1520
1521         Reviewed by Sam Weinig.
1522
1523         * tests/mozilla/expected.html:
1524
1525 2012-03-29  Geoffrey Garen  <ggaren@apple.com>
1526
1527         First step toward incremental Weak<T> finalization
1528         https://bugs.webkit.org/show_bug.cgi?id=82670
1529
1530         Reviewed by Filip Pizlo.
1531
1532         This patch implements a Weak<T> heap that is compatible with incremental
1533         finalization, while making as few behavior changes as possible. The behavior
1534         changes it makes are:
1535
1536         (*) Weak<T>'s raw JSValue no longer reverts to JSValue() automatically --
1537         instead, a separate flag indicates that the JSValue is no longer valid.
1538         (This is required so that the JSValue can be preserved for later finalization.)
1539         Objects dealing with WeakImpls directly must change to check the flag.
1540
1541         (*) Weak<T> is no longer a subclass of Handle<T>.
1542
1543         (*) DOM GC performance is different -- 9% faster in the geometric mean,
1544         but 15% slower in one specific case:
1545                 gc-dom1.html: 6%  faster
1546                 gc-dom2.html: 23% faster
1547                 gc-dom3.html: 17% faster
1548                 gc-dom4.html: 15% *slower*
1549
1550         The key features of this new heap are:
1551
1552         (*) Each block knows its own state, independent of any other blocks.
1553
1554         (*) Each block caches its own sweep result.
1555
1556         (*) The heap visits dead Weak<T>s at the end of GC. (It doesn't
1557         mark them yet, since that would be a behavior change.)
1558
1559         * API/JSCallbackObject.cpp:
1560         (JSC::JSCallbackObjectData::finalize):
1561         * API/JSCallbackObjectFunctions.h:
1562         (JSC::::init): Updated to use the new WeakHeap API.
1563
1564         * CMakeLists.txt:
1565         * GNUmakefile.list.am:
1566         * JavaScriptCore.gypi:
1567         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1568         * JavaScriptCore.xcodeproj/project.pbxproj:
1569         * Target.pri: Paid the build system tax since I added some new files.
1570
1571         * heap/Handle.h: Made WeakBlock a friend and exposed slot() as public,
1572         so we can keep passing a Handle<T> to finalizers, to avoid more surface
1573         area change in this patch. A follow-up patch should change the type we
1574         pass to finalizers.
1575
1576         * heap/HandleHeap.cpp:
1577         (JSC):
1578         (JSC::HandleHeap::writeBarrier):
1579         (JSC::HandleHeap::isLiveNode):
1580         * heap/HandleHeap.h:
1581         (JSC):
1582         (HandleHeap):
1583         (Node):
1584         (JSC::HandleHeap::Node::Node): Removed all code related to Weak<T>, since
1585         we have a separate WeakHeap now.
1586
1587         * heap/Heap.cpp:
1588         (JSC::Heap::Heap): Removed m_extraCost because extra cost is accounted
1589         for through our watermark now. Removed m_waterMark because it was unused.
1590
1591         (JSC::Heap::destroy): Updated for addition of WeakHeap.
1592
1593         (JSC::Heap::reportExtraMemoryCostSlowCase): Changed from using its own
1594         variable to participating in the watermark strategy. I wanted to standardize
1595         WeakHeap and all other Heap clients on this strategy, to make sure it's
1596         accurate.
1597  
1598         (JSC::Heap::markRoots): Updated for addition of WeakHeap. Added WeakHeap
1599         dead visit pass, as explained above.
1600
1601         (JSC::Heap::collect):
1602         (JSC::Heap::resetAllocators): Updated for addition of WeakHeap.
1603
1604         (JSC::Heap::addFinalizer):
1605         (JSC::Heap::FinalizerOwner::finalize): Updated for new Weak<T> API.
1606
1607         * heap/Heap.h:
1608         (JSC::Heap::weakHeap):
1609         (Heap):
1610         (JSC::Heap::addToWaterMark): Added a way to participate in the watermarking
1611         strategy, since this is the best way for WeakHeap to report its memory
1612         cost. (I plan to update this in a follow-up patch to make it more accurate,
1613         but for now it is not less accurate than it used to be.)
1614
1615         * heap/MarkedSpace.cpp:
1616         (JSC::MarkedSpace::MarkedSpace):
1617         (JSC::MarkedSpace::resetAllocators):
1618         * heap/MarkedSpace.h:
1619         (MarkedSpace):
1620         (JSC::MarkedSpace::addToWaterMark):
1621         (JSC::MarkedSpace::didConsumeFreeList): Removed m_nurseryWaterMark because
1622         it was unused, and I didn't want to update WeakHeap to keep an usused
1623         variable working. Added API for above.
1624
1625         * heap/PassWeak.h:
1626         (JSC):
1627         (WeakImplAccessor):
1628         (PassWeak):
1629         (JSC::::operator):
1630         (JSC::::get):
1631         (JSC::::was):
1632         (JSC::::PassWeak):
1633         (JSC::::~PassWeak):
1634         (JSC::UnspecifiedBoolType):
1635         (JSC::::leakImpl):
1636         (JSC::adoptWeak):
1637         * heap/Strong.h:
1638         (JSC::Strong::operator!):
1639         (Strong):
1640         (JSC::Strong::operator UnspecifiedBoolType*):
1641         (JSC::Strong::get):
1642         * heap/Weak.h:
1643         (Weak):
1644         (JSC::::Weak):
1645         (JSC):
1646         (JSC::::isHashTableDeletedValue):
1647         (JSC::::~Weak):
1648         (JSC::::swap):
1649         (JSC::=):
1650         (JSC::::operator):
1651         (JSC::UnspecifiedBoolType):
1652         (JSC::::release):
1653         (JSC::::clear):
1654         (JSC::::hashTableDeletedValue): Lots of code changes here, but they boil
1655         down to two things:
1656
1657         (*) Allocate WeakImpls from the WeakHeap instead of Handles from the HandleHeap.
1658
1659         (*) Explicitly check WeakImpl::state() for non-liveness before returning
1660         a value (explained above).
1661
1662         These files implement the new Weak<T> heap behavior described above:
1663
1664         * heap/WeakBlock.cpp: Added.
1665         * heap/WeakBlock.h: Added.
1666         * heap/WeakHandleOwner.cpp: Added.
1667         * heap/WeakHandleOwner.h: Added.
1668         * heap/WeakHeap.cpp: Added.
1669         * heap/WeakHeap.h: Added.
1670         * heap/WeakImpl.h: Added.
1671
1672         One interesting difference from the old heap is that we don't allow
1673         clients to overwrite a WeakImpl after allocating it, and we don't recycle
1674         WeakImpls prior to garbage collection. This is required for lazy finalization,
1675         but it will also help us esablish a useful invariant in the future: allocating
1676         a WeakImpl will be a binding contract to run a finalizer at some point in the
1677         future, even if the WeakImpl is later deallocated.
1678
1679         * jit/JITStubs.cpp:
1680         (JSC::JITThunks::hostFunctionStub): Check the Weak<T> for ! instead of
1681         its JSValue, since that's our API contract now, and the JSValue might
1682         be stale.
1683
1684         * runtime/JSCell.h:
1685         (JSC::jsCast): Allow casting NULL pointers because it's useful and harmless.
1686
1687         * runtime/Structure.cpp:
1688         (JSC::StructureTransitionTable::add): I can't remember why I did this.
1689
1690         * runtime/StructureTransitionTable.h:
1691         * runtime/WeakGCMap.h: I had to update these classes because they allocate
1692         and deallocate weak pointers manually. They should probably stop doing that.
1693
1694 2012-04-03  Keishi Hattori  <keishi@webkit.org>
1695
1696         Disable ENABLE_DATALIST for now
1697         https://bugs.webkit.org/show_bug.cgi?id=82871
1698
1699         Reviewed by Kent Tamura.
1700
1701         * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.
1702
1703 2012-04-02  Filip Pizlo  <fpizlo@apple.com>
1704
1705         jsr/sret should be removed
1706         https://bugs.webkit.org/show_bug.cgi?id=82986
1707         <rdar://problem/11017015>
1708
1709         Reviewed by Sam Weinig and Geoff Garen.
1710         
1711         Replaces jsr/sret with finally block inlining.
1712
1713         * bytecode/CodeBlock.cpp:
1714         (JSC::CodeBlock::dump):
1715         * bytecode/Opcode.h:
1716         (JSC):
1717         (JSC::padOpcodeName):
1718         * bytecompiler/BytecodeGenerator.cpp:
1719         (JSC::BytecodeGenerator::pushFinallyContext):
1720         (JSC::BytecodeGenerator::emitComplexJumpScopes):
1721         (JSC):
1722         * bytecompiler/BytecodeGenerator.h:
1723         (FinallyContext):
1724         (BytecodeGenerator):
1725         * bytecompiler/NodesCodegen.cpp:
1726         (JSC::TryNode::emitBytecode):
1727         * interpreter/Interpreter.cpp:
1728         (JSC::Interpreter::privateExecute):
1729         * jit/JIT.cpp:
1730         (JSC::JIT::privateCompileMainPass):
1731         (JSC::JIT::privateCompile):
1732         * jit/JIT.h:
1733         (JIT):
1734         * jit/JITOpcodes.cpp:
1735         (JSC):
1736         * jit/JITOpcodes32_64.cpp:
1737         (JSC):
1738         * llint/LowLevelInterpreter32_64.asm:
1739         * llint/LowLevelInterpreter64.asm:
1740
1741 2012-04-03  Mark Rowe  <mrowe@apple.com>
1742
1743         Make it possible to install the JavaScriptCore test tools.
1744
1745         Part of <rdar://problem/11158607>.
1746         
1747         Reviewed by Filip Pizlo.
1748
1749         * JavaScriptCore.xcodeproj/project.pbxproj: Introduce an aggregate target named
1750         Test Tools that builds testapi, minidom and testRegExp. Switch All from depending on
1751         those targets individually to depending on the new aggregate target.
1752
1753 2012-04-03  Filip Pizlo  <fpizlo@apple.com>
1754
1755         Offlineasm ARM backend has a very convoluted way of saying it wants to emit a
1756         three-operand multiply instruction
1757         https://bugs.webkit.org/show_bug.cgi?id=83100
1758
1759         Reviewed by Darin Adler.
1760         
1761         Changed the "muli"/"mulp" case to call emitArmV7() since that helper method was
1762         already smart enough to do the Right Thing for multiply.
1763
1764         * offlineasm/armv7.rb:
1765
1766 2012-04-03  Filip Pizlo  <fpizlo@apple.com>
1767
1768         Offlineasm ARM backend uses the wrong mnemonic for multiply
1769         https://bugs.webkit.org/show_bug.cgi?id=83098
1770         <rdar://problem/11168744>
1771
1772         Reviewed by Gavin Barraclough.
1773         
1774         Use "mul" instead of "muls" since we're passing three operands, not two.
1775
1776         * offlineasm/armv7.rb:
1777
1778 2012-04-03  Gavin Barraclough  <barraclough@apple.com>
1779
1780         Linux crashes during boot
1781         https://bugs.webkit.org/show_bug.cgi?id=83096
1782
1783         Reviewed by Filip Pizlo.
1784
1785         The bug here is that we add empty JSValues to the sparse map, and then set them
1786         - but a GC may occur before doing so (due to a call to reportExtraMemory cost).
1787         We may want to consider making it safe to mark empty JSValues, but the simple &
1788         contained fix to this specific bug is to just initialize these values to
1789         something other than JSValue().
1790
1791         * runtime/JSArray.cpp:
1792         (JSC::SparseArrayValueMap::add):
1793             - Initialize sparse map entries.
1794
1795 2012-04-02  Oliver Hunt  <oliver@apple.com>
1796
1797         Incorrect liveness information when inlining
1798         https://bugs.webkit.org/show_bug.cgi?id=82985
1799
1800         Reviewed by Filip Pizlo.
1801
1802         Don't remap register numbers that have already been remapped.
1803
1804         * dfg/DFGByteCodeParser.cpp:
1805         (JSC::DFG::ByteCodeParser::handleInlining):
1806
1807 2012-04-02  Filip Pizlo  <fpizlo@apple.com>
1808
1809         Activation tear-off neglects to copy the callee and scope chain, leading to crashes if we
1810         try to create an arguments object from the activation
1811         https://bugs.webkit.org/show_bug.cgi?id=82947
1812         <rdar://problem/11058598>
1813
1814         Reviewed by Gavin Barraclough.
1815         
1816         We now copy the entire call frame header just to be sure. This is mostly perf-netural,
1817         except for a 3.7% slow-down in V8/earley.
1818
1819         * runtime/JSActivation.cpp:
1820         (JSC::JSActivation::visitChildren):
1821         * runtime/JSActivation.h:
1822         (JSC::JSActivation::tearOff):
1823
1824 2012-04-02  Daniel Bates  <dbates@webkit.org>
1825
1826         Remove Source/JavaScriptCore/wtf and its empty subdirectories
1827
1828         Rubber-stamped by Eric Seidel.
1829
1830         Following the move of WTF from Source/JavaScriptCore/wtf to Source/WTF
1831         (https://bugs.webkit.org/show_bug.cgi?id=75673), remove directory
1832         Source/JavaScriptCore/wtf and its empty subdirectories.
1833
1834         * wtf: Removed.
1835         * wtf/android: Removed.
1836         * wtf/blackberry: Removed.
1837         * wtf/chromium: Removed.
1838         * wtf/dtoa: Removed.
1839         * wtf/efl: Removed.
1840         * wtf/gobject: Removed.
1841         * wtf/gtk: Removed.
1842         * wtf/mac: Removed.
1843         * wtf/qt: Removed.
1844         * wtf/qt/compat: Removed.
1845         * wtf/tests: Removed.
1846         * wtf/text: Removed.
1847         * wtf/threads: Removed.
1848         * wtf/threads/win: Removed.
1849         * wtf/unicode: Removed.
1850         * wtf/unicode/glib: Removed.
1851         * wtf/unicode/icu: Removed.
1852         * wtf/unicode/qt4: Removed.
1853         * wtf/unicode/wince: Removed.
1854         * wtf/url: Removed.
1855         * wtf/url/api: Removed.
1856         * wtf/url/src: Removed.
1857         * wtf/win: Removed.
1858         * wtf/wince: Removed.
1859         * wtf/wx: Removed.
1860
1861 2012-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>
1862
1863         Unreviewed. Fix make distcheck issues.
1864
1865         * GNUmakefile.list.am: Add missing file.
1866
1867 2012-04-01  Darin Adler  <darin@apple.com>
1868
1869         Fix incorrect path for libWTF.a in Mac project file.
1870
1871         * JavaScriptCore.xcodeproj/project.pbxproj: Removed the "../Release" prefix that
1872         would cause other configurations to try to link with the "Release" version of
1873         libWTF.a instead of the correct version.
1874
1875 2012-03-29  Filip Pizlo  <fpizlo@apple.com>
1876
1877         DFG should optimize a==b for a being an object and b being either an object or
1878         null/undefined, and vice versa
1879         https://bugs.webkit.org/show_bug.cgi?id=82656
1880
1881         Reviewed by Oliver Hunt.
1882         
1883         Implements additional object equality optimizations for the case that one
1884         operand is predicted to be an easily speculated object (like FinalObject or
1885         Array) and the other is either an easily speculated object or Other, i.e.
1886         Null or Undefined.
1887         
1888         2-5% speed-up on V8/raytrace, leading to a sub-1% progression on V8.
1889         
1890         I also took the opportunity to clean up the control flow for the speculation
1891         decisions in the various Compare opcodes. And to fix a build bug in SamplingTool.
1892         And to remove debug cruft I stupidly committed in my last patch.
1893         
1894         * bytecode/SamplingTool.h:
1895         (SamplingRegion):
1896         * dfg/DFGAbstractState.cpp:
1897         (JSC::DFG::AbstractState::execute):
1898         * dfg/DFGOperations.cpp:
1899         * dfg/DFGSpeculativeJIT.cpp:
1900         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
1901         (JSC::DFG::SpeculativeJIT::compare):
1902         * dfg/DFGSpeculativeJIT.h:
1903         (SpeculativeJIT):
1904         * dfg/DFGSpeculativeJIT32_64.cpp:
1905         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1906         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
1907         (DFG):
1908         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
1909         * dfg/DFGSpeculativeJIT64.cpp:
1910         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1911         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
1912         (DFG):
1913         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
1914
1915 2012-03-30  David Barr  <davidbarr@chromium.org>
1916
1917         Split up top-level .gitignore and .gitattributes
1918         https://bugs.webkit.org/show_bug.cgi?id=82687
1919
1920         Reviewed by Tor Arne Vestbø.
1921
1922         * JavaScriptCore.gyp/.gitignore: Added.
1923
1924 2012-03-30  Steve Falkenburg  <sfalken@apple.com>
1925
1926         Windows (make based) build fix.
1927
1928         * JavaScriptCore.vcproj/JavaScriptCore.make: Copy WTF header files into a place where JavaScriptCore build can see them.
1929
1930 2012-03-30  Keishi Hattori  <keishi@webkit.org>
1931
1932         Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
1933         https://bugs.webkit.org/show_bug.cgi?id=80972
1934
1935         Reviewed by Kent Tamura.
1936
1937         * Configurations/FeatureDefines.xcconfig:
1938
1939 2012-03-29  Mark Hahnenberg  <mhahnenberg@apple.com>
1940
1941         Refactor recompileAllJSFunctions() to be less expensive
1942         https://bugs.webkit.org/show_bug.cgi?id=80330
1943
1944         Reviewed by Filip Pizlo.
1945
1946         This change is performance neutral on the JS benchmarks we track. It's mostly to improve page 
1947         load performance, which currently does at least a couple full GCs per navigation.
1948
1949         * heap/Heap.cpp:
1950         (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode 
1951         because the function doesn't actually recompile anything (and never did); it simply throws code
1952         away for it to be recompiled later if we determine we should do so.
1953         (JSC):
1954         (JSC::Heap::collectAllGarbage):
1955         (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
1956         (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
1957         * heap/Heap.h:
1958         (JSC):
1959         (Heap):
1960         * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can 
1961         be used in DoublyLinkedLists.
1962         (JSC::FunctionExecutable::FunctionExecutable):
1963         (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
1964         * runtime/Executable.h:
1965         (FunctionExecutable):
1966         (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
1967         * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage 
1968         the list of FunctionExecutables.
1969         * runtime/JSGlobalData.h:
1970         (JSGlobalData):
1971         * runtime/JSGlobalObject.cpp:
1972         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.
1973
1974 2012-03-29  Filip Pizlo  <fpizlo@apple.com>
1975
1976         Unreviewed build fix for non-x86 platforms.
1977
1978         * dfg/DFGSpeculativeJIT.cpp:
1979         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
1980         * dfg/DFGSpeculativeJIT.h:
1981         (JSC::DFG::SpeculativeJIT::callOperation):
1982         * jit/JITArithmetic32_64.cpp:
1983         (JSC::JIT::emitSlow_op_mod):
1984
1985 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1986
1987         Windows build fix p2.
1988
1989         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1990
1991 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1992
1993         Windows build fix p1.
1994
1995         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1996
1997 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1998
1999         Template the Yarr::Interpreter on the character type
2000         https://bugs.webkit.org/show_bug.cgi?id=82637
2001
2002         Reviewed by Sam Weinig.
2003
2004         We should be able to call to the interpreter after having already checked the character type,
2005         without having to re-package the character pointer back up into a string!
2006
2007         * runtime/RegExp.cpp:
2008         (JSC::RegExp::match):
2009         (JSC::RegExp::matchCompareWithInterpreter):
2010             - Don't pass length.
2011         * yarr/Yarr.h:
2012             - moved function declarations to YarrInterpreter.h.
2013         * yarr/YarrInterpreter.cpp:
2014         (Yarr):
2015         (Interpreter):
2016         (JSC::Yarr::Interpreter::InputStream::InputStream):
2017         (InputStream):
2018         (JSC::Yarr::Interpreter::Interpreter):
2019         (JSC::Yarr::interpret):
2020             - templated Interpreter class on CharType.
2021         * yarr/YarrInterpreter.h:
2022         (Yarr):
2023             - added function declarations.
2024
2025 2012-03-29  David Kilzer  <ddkilzer@apple.com>
2026
2027         Don't use a flattened framework path when building on OS X
2028
2029         Reviewed by Mark Rowe.
2030
2031         * Configurations/ToolExecutable.xcconfig: Use REAL_PLATFORM_NAME
2032         to select different INSTALL_PATH values.
2033
2034 2012-03-29  Kevin Ollivier  <kevino@theolliviers.com>
2035
2036         [wx] Unreviewed build fix, add Win-specific sources
2037         the wx port needs after WTF move.
2038
2039         * wscript:
2040
2041 2012-03-29  Andy Estes  <aestes@apple.com>
2042
2043         Remove an unused variable that breaks the build with newer versions of clang.
2044
2045         Rubber stamped by Gavin Barraclough.
2046
2047         * yarr/YarrJIT.cpp:
2048         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
2049
2050 2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
2051
2052         HashMap<>::add should return a more descriptive object
2053         https://bugs.webkit.org/show_bug.cgi?id=71063
2054
2055         Reviewed by Ryosuke Niwa.
2056
2057         Update code to use AddResult instead of a pair. Note that since WeakGCMap wraps
2058         the iterator type, there's a need for its own AddResult type -- instantiated from
2059         HashTableAddResult template class.
2060
2061         * API/JSCallbackObject.h:
2062         (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
2063         * API/JSClassRef.cpp:
2064         (OpaqueJSClass::contextData):
2065         * bytecompiler/BytecodeGenerator.cpp:
2066         (JSC::BytecodeGenerator::addVar):
2067         (JSC::BytecodeGenerator::addGlobalVar):
2068         (JSC::BytecodeGenerator::addConstant):
2069         (JSC::BytecodeGenerator::addConstantValue):
2070         (JSC::BytecodeGenerator::emitLoad):
2071         (JSC::BytecodeGenerator::addStringConstant):
2072         (JSC::BytecodeGenerator::emitLazyNewFunction):
2073         * bytecompiler/NodesCodegen.cpp:
2074         (JSC::PropertyListNode::emitBytecode):
2075         * debugger/Debugger.cpp:
2076         * dfg/DFGAssemblyHelpers.cpp:
2077         (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
2078         * dfg/DFGByteCodeParser.cpp:
2079         (JSC::DFG::ByteCodeParser::cellConstant):
2080         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
2081         * jit/JITStubs.cpp:
2082         (JSC::JITThunks::ctiStub):
2083         (JSC::JITThunks::hostFunctionStub):
2084         * parser/Parser.cpp:
2085         (JSC::::parseStrictObjectLiteral):
2086         * parser/Parser.h:
2087         (JSC::Scope::declareParameter):
2088         * runtime/Identifier.cpp:
2089         (JSC::Identifier::add):
2090         (JSC::Identifier::add8):
2091         (JSC::Identifier::addSlowCase):
2092         * runtime/Identifier.h:
2093         (JSC::Identifier::add):
2094         (JSC::IdentifierTable::add):
2095         * runtime/JSArray.cpp:
2096         (JSC::SparseArrayValueMap::add):
2097         (JSC::SparseArrayValueMap::put):
2098         (JSC::SparseArrayValueMap::putDirect):
2099         (JSC::JSArray::enterDictionaryMode):
2100         (JSC::JSArray::defineOwnNumericProperty):
2101         * runtime/JSArray.h:
2102         (SparseArrayValueMap):
2103         * runtime/PropertyNameArray.cpp:
2104         (JSC::PropertyNameArray::add):
2105         * runtime/StringRecursionChecker.h:
2106         (JSC::StringRecursionChecker::performCheck):
2107         * runtime/Structure.cpp:
2108         (JSC::StructureTransitionTable::add):
2109         * runtime/WeakGCMap.h:
2110         (WeakGCMap):
2111         (JSC::WeakGCMap::add):
2112         (JSC::WeakGCMap::set):
2113         * tools/ProfileTreeNode.h:
2114         (JSC::ProfileTreeNode::sampleChild):
2115
2116 2012-03-29  Patrick Gansterer  <paroga@webkit.org>
2117
2118         Build fix for !ENABLE(YARR_JIT) after r112454.
2119
2120         * runtime/RegExp.cpp:
2121         (JSC::RegExp::invalidateCode):
2122
2123 2012-03-28  Filip Pizlo  <fpizlo@apple.com>
2124
2125         DFG object equality speculations should be simplified
2126         https://bugs.webkit.org/show_bug.cgi?id=82557
2127
2128         Reviewed by Gavin Barraclough.
2129
2130         * dfg/DFGNode.h:
2131         (JSC::DFG::Node::shouldSpeculateFinalObject):
2132         (JSC::DFG::Node::shouldSpeculateArray):
2133
2134 2012-03-28  David Kilzer  <ddkilzer@apple.com>
2135
2136         minidom configurations should be based on ToolExecutable.xcconfig
2137         <http://webkit.org/b/82513>
2138
2139         Reviewed by Mark Rowe.
2140
2141         Note that this patch changes minidom from being installed in
2142         /usr/local/bin to JavaScriptCore.framework/Resources.
2143
2144         * Configurations/ToolExecutable.xcconfig: Add semi-colon.
2145         * JavaScriptCore.xcodeproj/project.pbxproj: Base minidom
2146         configurations on ToolExecutable.xcconfig.  Remove redundant
2147         PRODUCT_NAME and SKIP_INSTALL variables.
2148
2149 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
2150
2151         Build fix - some compiles generating NORETURN related warnings.
2152
2153         * yarr/YarrJIT.cpp:
2154         (JSC::Yarr::YarrGenerator::setSubpatternStart):
2155         (JSC::Yarr::YarrGenerator::setSubpatternEnd):
2156         (JSC::Yarr::YarrGenerator::clearSubpatternStart):
2157
2158 2012-03-28  Kevin Ollivier  <kevino@theolliviers.com>
2159
2160         [wx] Unreviewed. Build fix, move WTF back into JSCore target
2161         until issues with JSCore not linking in all WTF symbols are resolved.
2162         
2163         * wscript:
2164
2165 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
2166
2167         Yarr: if we're not using the output array, don't populate it!
2168         https://bugs.webkit.org/show_bug.cgi?id=82519
2169
2170         Reviewed by Sam Weinig.
2171
2172         * runtime/RegExp.cpp:
2173         (JSC):
2174             - Missed review comment! - didn't fully remove RegExpRepresentation.
2175
2176 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
2177
2178         Yarr: if we're not using the output array, don't populate it!
2179         https://bugs.webkit.org/show_bug.cgi?id=82519
2180
2181         Reviewed by Sam Weinig.
2182
2183         Add a new variant of the match method to RegExp that returns a MatchResult,
2184         and modify YarrJIT to be able to compile code that doesn't use an output vector.
2185
2186         This is a 3% progression on v8-regexp.
2187
2188         * JavaScriptCore.xcodeproj/project.pbxproj:
2189             - Moved MatchResult into its own header.
2190         * assembler/AbstractMacroAssembler.h:
2191             - Added missing include.
2192         * runtime/MatchResult.h: Added.
2193         (MatchResult::MatchResult):
2194         (MatchResult):
2195         (MatchResult::failed):
2196         (MatchResult::operator bool):
2197         (MatchResult::empty):
2198             - Moved MatchResult into its own header.
2199         * runtime/RegExp.cpp:
2200         (JSC::RegExp::compile):
2201         (JSC::RegExp::compileIfNecessary):
2202         (JSC::RegExp::match):
2203             - Changed due to execute & representation changes.
2204         (JSC::RegExp::compileMatchOnly):
2205         (JSC::RegExp::compileIfNecessaryMatchOnly):
2206             - Added helper to compile MatchOnly code.
2207         (JSC::RegExp::invalidateCode):
2208         (JSC::RegExp::matchCompareWithInterpreter):
2209         (JSC::RegExp::printTraceData):
2210             - Changed due representation changes.
2211         * runtime/RegExp.h:
2212         (RegExp):
2213         (JSC::RegExp::hasCode):
2214             - Made YarrCodeBlock a member.
2215         * runtime/RegExpConstructor.h:
2216         (RegExpConstructor):
2217         (JSC::RegExpConstructor::performMatch):
2218             - Added no-ovector form.
2219         * runtime/RegExpMatchesArray.cpp:
2220         (JSC::RegExpMatchesArray::reifyAllProperties):
2221             - Match now takes a reference to ovector, not a pointer.
2222         * runtime/RegExpObject.h:
2223         (JSC):
2224             - Moved MatchResult into its own header.
2225         * runtime/StringPrototype.cpp:
2226         (JSC::stringProtoFuncSplit):
2227             - Match now takes a reference to ovector, not a pointer.
2228         * testRegExp.cpp:
2229         (testOneRegExp):
2230             - Match now takes a reference to ovector, not a pointer.
2231         * yarr/YarrJIT.cpp:
2232         (Yarr):
2233         (YarrGenerator):
2234         (JSC::Yarr::YarrGenerator::initCallFrame):
2235         (JSC::Yarr::YarrGenerator::removeCallFrame):
2236         (JSC::Yarr::YarrGenerator::setSubpatternStart):
2237         (JSC::Yarr::YarrGenerator::setSubpatternEnd):
2238         (JSC::Yarr::YarrGenerator::clearSubpatternStart):
2239         (JSC::Yarr::YarrGenerator::setMatchStart):
2240         (JSC::Yarr::YarrGenerator::getMatchStart):
2241             - Added helper functions to intermediate access to output.
2242         (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
2243         (JSC::Yarr::YarrGenerator::generate):
2244         (JSC::Yarr::YarrGenerator::backtrack):
2245         (JSC::Yarr::YarrGenerator::generateEnter):
2246         (JSC::Yarr::YarrGenerator::compile):
2247             - Changed to use the new helpers, only generate subpatterns if IncludeSubpatterns.
2248         (JSC::Yarr::jitCompile):
2249             - Needs to template of MatchOnly or IncludeSubpatterns.
2250         * yarr/YarrJIT.h:
2251         (YarrCodeBlock):
2252         (JSC::Yarr::YarrCodeBlock::set8BitCode):
2253         (JSC::Yarr::YarrCodeBlock::set16BitCode):
2254         (JSC::Yarr::YarrCodeBlock::has8BitCodeMatchOnly):
2255         (JSC::Yarr::YarrCodeBlock::has16BitCodeMatchOnly):
2256         (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
2257         (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
2258         (JSC::Yarr::YarrCodeBlock::execute):
2259         (JSC::Yarr::YarrCodeBlock::clear):
2260             - Added a second set of CodeRefs, so that we can compile RexExps with/without subpattern matching.
2261
2262 2012-03-27  Filip Pizlo  <fpizlo@apple.com>
2263
2264         DFG OSR exit should not generate an exit for variables of inlinees if the
2265         inlinees are not in scope
2266         https://bugs.webkit.org/show_bug.cgi?id=82312
2267
2268         Reviewed by Oliver Hunt.
2269         
2270         * bytecode/CodeBlock.h:
2271         (JSC::baselineCodeBlockForInlineCallFrame):
2272         (JSC):
2273         (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
2274         * dfg/DFGOSRExit.cpp:
2275         (JSC::DFG::computeNumVariablesForCodeOrigin):
2276         (DFG):
2277         (JSC::DFG::OSRExit::OSRExit):
2278
2279 2012-03-27  Matt Lilek  <mrl@apple.com>
2280
2281         Stop compiling Interpreter.cpp with -fno-var-tracking
2282         https://bugs.webkit.org/show_bug.cgi?id=82299
2283
2284         Reviewed by Anders Carlsson.
2285
2286         * JavaScriptCore.xcodeproj/project.pbxproj:
2287
2288 2012-03-27  Pratik Solanki  <psolanki@apple.com>
2289
2290         Compiler warning when JIT is not enabled
2291         https://bugs.webkit.org/show_bug.cgi?id=82352
2292
2293         Reviewed by Filip Pizlo.
2294
2295         * runtime/JSFunction.cpp:
2296         (JSC::JSFunction::create):
2297
2298 2012-03-26  Thouraya ANDOLSI  <thouraya.andolsi@st.com>
2299
2300         Unaligned userspace access for SH4 platforms
2301         https://bugs.webkit.org/show_bug.cgi?id=79104
2302
2303         Reviewed by Gavin Barraclough.
2304
2305         * assembler/AbstractMacroAssembler.h:
2306         (Jump):
2307         (JSC::AbstractMacroAssembler::Jump::Jump):
2308         (JSC::AbstractMacroAssembler::Jump::link):
2309         * assembler/MacroAssemblerSH4.h:
2310         (JSC::MacroAssemblerSH4::load16Unaligned):
2311         (JSC::MacroAssemblerSH4::load32WithUnalignedHalfWords):
2312         (JSC::MacroAssemblerSH4::branchDouble):
2313         (JSC::MacroAssemblerSH4::branchTrue):
2314         (JSC::MacroAssemblerSH4::branchFalse):
2315         * assembler/SH4Assembler.h:
2316         (JSC::SH4Assembler::extraInstrForBranch):
2317         (SH4Assembler):
2318         (JSC::SH4Assembler::bra):
2319         (JSC::SH4Assembler::linkJump):
2320         * jit/JIT.h:
2321         (JIT):
2322         * yarr/YarrJIT.cpp:
2323         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
2324
2325 2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>
2326
2327         cssText should use shorthand notations
2328         https://bugs.webkit.org/show_bug.cgi?id=81737
2329
2330         Reviewed by Enrica Casucci.
2331
2332         Export symbols of BitVector on Windows.
2333
2334         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2335
2336 2012-03-26  Filip Pizlo  <fpizlo@apple.com>
2337
2338         DFG should assert that argument value recoveries can only be
2339         AlreadyInRegisterFile or Constant
2340         https://bugs.webkit.org/show_bug.cgi?id=82249
2341
2342         Reviewed by Michael Saboff.
2343         
2344         Made the assertions that the DFG makes for argument value recoveries match
2345         what Arguments expects.
2346
2347         * bytecode/ValueRecovery.h:
2348         (JSC::ValueRecovery::isConstant):
2349         (ValueRecovery):
2350         (JSC::ValueRecovery::isAlreadyInRegisterFile):
2351         * dfg/DFGSpeculativeJIT.cpp:
2352         (JSC::DFG::SpeculativeJIT::compile):
2353
2354 2012-03-26  Dan Bernstein  <mitz@apple.com>
2355
2356         Tried to fix the Windows build.
2357
2358         * yarr/YarrPattern.cpp:
2359         (JSC::Yarr::CharacterClassConstructor::putRange):
2360
2361 2012-03-26  Gavin Barraclough  <barraclough@apple.com>
2362
2363         Unreviewed - speculative Windows build fix.
2364
2365         * yarr/YarrCanonicalizeUCS2.h:
2366         (JSC::Yarr::getCanonicalPair):
2367
2368 2012-03-26  Dan Bernstein  <mitz@apple.com>
2369
2370         Fixed builds with assertions disabled.
2371
2372         * yarr/YarrCanonicalizeUCS2.h:
2373         (JSC::Yarr::areCanonicallyEquivalent):
2374
2375 2012-03-26  Gavin Barraclough  <barraclough@apple.com>
2376
2377         Unreviewed - errk! - accidentally the whole pbxproj.
2378
2379         * JavaScriptCore.xcodeproj/project.pbxproj:
2380
2381 2012-03-25  Gavin Barraclough  <barraclough@apple.com>
2382
2383         Greek sigma is handled wrong in case independent regexp.
2384         https://bugs.webkit.org/show_bug.cgi?id=82063
2385
2386         Reviewed by Oliver Hunt.
2387
2388         The bug here is that we assume that any given codepoint has at most one additional value it
2389         should match under a case insensitive match, and that the pair of codepoints that match (if
2390         a codepoint does not only match itself) can be determined by calling toUpper/toLower on the
2391         given codepoint). Life is not that simple.
2392
2393         Instead, pre-calculate a set of tables mapping from a UCS2 codepoint to the set of characters
2394         it may match, under the ES5.1 case-insensitive matching rules. Since unicode is fairly regular
2395         we can pack this table quite nicely, and get it down to 364 entries. This means we can use a
2396         simple binary search to find an entry in typically eight compares.
2397
2398         * CMakeLists.txt:
2399         * GNUmakefile.list.am:
2400         * JavaScriptCore.gypi:
2401         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2402         * JavaScriptCore.xcodeproj/project.pbxproj:
2403         * yarr/yarr.pri:
2404             - Added new files to build systems.
2405         * yarr/YarrCanonicalizeUCS2.cpp: Added.
2406             - New - autogenerated, UCS2 canonicalized comparison tables.
2407         * yarr/YarrCanonicalizeUCS2.h: Added.
2408         (JSC::Yarr::rangeInfoFor):
2409             - Look up the canonicalization info for a UCS2 character.
2410         (JSC::Yarr::getCanonicalPair):
2411             - For a UCS2 character with a single equivalent value, look it up.
2412         (JSC::Yarr::isCanonicallyUnique):
2413             - Returns true if no other UCS2 code points are canonically equal.
2414         (JSC::Yarr::areCanonicallyEquivalent):
2415             - Compare two values, under canonicalization rules.
2416         * yarr/YarrCanonicalizeUCS2.js: Added.
2417             - script used to generate YarrCanonicalizeUCS2.cpp.
2418         * yarr/YarrInterpreter.cpp:
2419         (JSC::Yarr::Interpreter::tryConsumeBackReference):
2420             - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
2421         * yarr/YarrJIT.cpp:
2422         (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
2423         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
2424         (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
2425             - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
2426         * yarr/YarrPattern.cpp:
2427         (JSC::Yarr::CharacterClassConstructor::putChar):
2428             - Updated to determine canonical equivalents correctly.
2429         (JSC::Yarr::CharacterClassConstructor::putUnicodeIgnoreCase):
2430             - Added, used to put a non-ascii, non-unique character in a case-insensitive match.
2431         (JSC::Yarr::CharacterClassConstructor::putRange):
2432             - Updated to determine canonical equivalents correctly.
2433         (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
2434             - Changed to call putUnicodeIgnoreCase, instead of putChar, avoid a double lookup of rangeInfo.
2435
2436 2012-03-26  Kevin Ollivier  <kevino@theolliviers.com>
2437
2438         [wx] Unreviewed build fix. Add the build outputs dir to the list of build dirs,
2439         so we make sure it finds the API headers on all platforms.
2440
2441         * wscript:
2442
2443 2012-03-26  Patrick Gansterer  <paroga@webkit.org>
2444
2445         Build fix for WinCE after r112039.
2446
2447         * interpreter/Register.h:
2448         (Register): Removed inline keyword from decleration since
2449                     there is an ALWAYS_INLINE at the definition anyway.
2450
2451 2012-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>
2452
2453         Unreviewed. Fix make distcheck.
2454
2455         * GNUmakefile.list.am: Add missing files.
2456
2457 2012-03-25  Kevin Ollivier  <kevino@theolliviers.com>
2458
2459         [wx] Unreviewed build fix. Move WTF to its own static lib build.
2460
2461         * wscript:
2462
2463 2012-03-25  Filip Pizlo  <fpizlo@apple.com>
2464
2465         DFG int-to-double conversion should be revealed to CSE
2466         https://bugs.webkit.org/show_bug.cgi?id=82135
2467
2468         Reviewed by Oliver Hunt.
2469         
2470         This introduces the notion of an Int32ToDouble node, which is injected
2471         into the graph anytime we know that we have a double use of a node that
2472         was predicted integer. The Int32ToDouble simplifies double speculation
2473         on integers by skipping the path that would unbox doubles, if we know
2474         that the value is already proven to be an integer. It allows integer to
2475         double conversions to be subjected to common subexpression elimination
2476         (CSE) by allowing the CSE phase to see where these conversions are
2477         occurring. Finally, it allows us to see when a constant is being used
2478         as both a double and an integer. This is a bit odd, since it means that
2479         sometimes a double use of a constant will not refer directly to the
2480         constant. This should not cause problems, for now, but it may require
2481         some canonizalization in the future if we want to support strength
2482         reductions of double operations based on constants.
2483         
2484         To allow injection of nodes into the graph, this change introduces the
2485         DFG::InsertionSet, which is a way of lazily inserting elements into a
2486         list. This allows the FixupPhase to remain O(N) despite performing
2487         multiple injections in a single basic block. Without the InsertionSet,
2488         each injection would require performing an insertion into a vector,
2489         which is O(N), leading to O(N^2) performance overall. With the
2490         InsertionSet, each injection simply records what insertion would have
2491         been performed, and all insertions are performed at once (via
2492         InsertionSet::execute) after processing of a basic block is completed.
2493
2494         * JavaScriptCore.xcodeproj/project.pbxproj:
2495         * bytecode/PredictedType.h:
2496         (JSC::isActionableIntMutableArrayPrediction):
2497         (JSC):
2498         (JSC::isActionableFloatMutableArrayPrediction):
2499         (JSC::isActionableTypedMutableArrayPrediction):
2500         (JSC::isActionableMutableArrayPrediction):
2501         * dfg/DFGAbstractState.cpp:
2502         (JSC::DFG::AbstractState::execute):
2503         * dfg/DFGCSEPhase.cpp:
2504         (JSC::DFG::CSEPhase::performNodeCSE):
2505         * dfg/DFGCommon.h:
2506         (JSC::DFG::useKindToString):
2507         (DFG):
2508         * dfg/DFGFixupPhase.cpp:
2509         (JSC::DFG::FixupPhase::run):
2510         (JSC::DFG::FixupPhase::fixupBlock):
2511         (FixupPhase):
2512         (JSC::DFG::FixupPhase::fixupNode):
2513         (JSC::DFG::FixupPhase::fixDoubleEdge):
2514         * dfg/DFGGraph.cpp:
2515         (JSC::DFG::Graph::dump):
2516         * dfg/DFGInsertionSet.h: Added.
2517         (DFG):
2518         (Insertion):
2519         (JSC::DFG::Insertion::Insertion):
2520         (JSC::DFG::Insertion::index):
2521         (JSC::DFG::Insertion::element):
2522         (InsertionSet):
2523         (JSC::DFG::InsertionSet::InsertionSet):
2524         (JSC::DFG::InsertionSet::append):
2525         (JSC::DFG::InsertionSet::execute):
2526         * dfg/DFGNodeType.h:
2527         (DFG):
2528         * dfg/DFGPredictionPropagationPhase.cpp:
2529         (JSC::DFG::PredictionPropagationPhase::propagate):
2530         * dfg/DFGSpeculativeJIT.cpp:
2531         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
2532         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2533         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2534         (DFG):
2535         * dfg/DFGSpeculativeJIT.h:
2536         (SpeculativeJIT):
2537         (JSC::DFG::IntegerOperand::IntegerOperand):
2538         (JSC::DFG::DoubleOperand::DoubleOperand):
2539         (JSC::DFG::JSValueOperand::JSValueOperand):
2540         (JSC::DFG::StorageOperand::StorageOperand):
2541         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
2542         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
2543         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
2544         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2545         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
2546         * dfg/DFGSpeculativeJIT32_64.cpp:
2547         (JSC::DFG::SpeculativeJIT::compile):
2548         * dfg/DFGSpeculativeJIT64.cpp:
2549         (JSC::DFG::SpeculativeJIT::compile):
2550
2551 2012-03-25  Filip Pizlo  <fpizlo@apple.com>
2552
2553         DFGOperands should be moved out of the DFG and into bytecode
2554         https://bugs.webkit.org/show_bug.cgi?id=82151
2555
2556         Reviewed by Dan Bernstein.
2557
2558         * GNUmakefile.list.am:
2559         * JavaScriptCore.xcodeproj/project.pbxproj:
2560         * bytecode/Operands.h: Copied from Source/JavaScriptCore/dfg/DFGOperands.h.
2561         * dfg/DFGBasicBlock.h:
2562         * dfg/DFGNode.h:
2563         * dfg/DFGOSREntry.h:
2564         * dfg/DFGOSRExit.h:
2565         * dfg/DFGOperands.h: Removed.
2566         * dfg/DFGVariableAccessData.h:
2567
2568 2012-03-24  Filip Pizlo  <fpizlo@apple.com>
2569
2570         DFG 64-bit Branch implementation should not be creating a JSValueOperand that
2571         it isn't going to use
2572         https://bugs.webkit.org/show_bug.cgi?id=82136
2573
2574         Reviewed by Geoff Garen.
2575
2576         * dfg/DFGSpeculativeJIT64.cpp:
2577         (JSC::DFG::SpeculativeJIT::emitBranch):
2578
2579 2012-03-24  Kevin Ollivier  <kevino@theolliviers.com>
2580
2581         [wx] Unreviewed. Fix the build after WTF move.
2582
2583         * wscript:
2584
2585 2012-03-23  Filip Pizlo  <fpizlo@apple.com>
2586
2587         DFG double voting may be overzealous in the case of variables that end up
2588         being used as integers
2589         https://bugs.webkit.org/show_bug.cgi?id=82008
2590
2591         Reviewed by Oliver Hunt.
2592         
2593         Cleaned up propagation, making the intent more explicit in most places.
2594         Back-propagate NodeUsedAsInt for cases where a node was used in a context
2595         that is known to strongly prefer integers.
2596
2597         * dfg/DFGByteCodeParser.cpp:
2598         (JSC::DFG::ByteCodeParser::handleCall):
2599         (JSC::DFG::ByteCodeParser::parseBlock):
2600         * dfg/DFGGraph.cpp:
2601         (JSC::DFG::Graph::dumpCodeOrigin):
2602         (JSC::DFG::Graph::dump):
2603         * dfg/DFGGraph.h:
2604         (Graph):
2605         * dfg/DFGNodeFlags.cpp:
2606         (JSC::DFG::nodeFlagsAsString):
2607         * dfg/DFGNodeFlags.h:
2608         (DFG):
2609         * dfg/DFGPredictionPropagationPhase.cpp:
2610         (JSC::DFG::PredictionPropagationPhase::run):
2611         (JSC::DFG::PredictionPropagationPhase::propagate):
2612         (PredictionPropagationPhase):
2613         (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
2614         (JSC::DFG::PredictionPropagationPhase::vote):
2615         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
2616         (JSC::DFG::PredictionPropagationPhase::fixupNode):
2617         * dfg/DFGVariableAccessData.h:
2618         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
2619
2620 2012-03-24  Filip Pizlo  <fpizlo@apple.com>
2621
2622         DFG::Node::shouldNotSpeculateInteger() should be eliminated
2623         https://bugs.webkit.org/show_bug.cgi?id=82123
2624
2625         Reviewed by Geoff Garen.
2626
2627         * dfg/DFGAbstractState.cpp:
2628         (JSC::DFG::AbstractState::execute):
2629         * dfg/DFGNode.h:
2630         (Node):
2631         * dfg/DFGSpeculativeJIT.cpp:
2632         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
2633         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2634
2635 2012-03-24  Yong Li  <yoli@rim.com>
2636
2637         Increase getByIdSlowCase ConstantSpace/InstructionSpace for CPU(ARM_TRADITIONAL)
2638         https://bugs.webkit.org/show_bug.cgi?id=81521
2639
2640         Increase sequenceGetByIdSlowCaseConstantSpace and sequenceGetByIdSlowCaseInstructionSpace
2641         for CPU(ARM_TRADITIONAL) to fit actual need.
2642
2643         Reviewed by Oliver Hunt.
2644
2645         * jit/JIT.h:
2646         (JIT):
2647
2648 2012-03-23  Filip Pizlo  <fpizlo@apple.com>
2649
2650         DFG Fixup should be able to short-circuit trivial ValueToInt32's
2651         https://bugs.webkit.org/show_bug.cgi?id=82030
2652
2653         Reviewed by Michael Saboff.
2654         
2655         Takes the fixup() method of the prediction propagation phase and makes it
2656         into its own phase. Adds the ability to short-circuit trivial ValueToInt32
2657         nodes, and mark pure ValueToInt32's as such.
2658
2659         * CMakeLists.txt:
2660         * GNUmakefile.list.am:
2661         * JavaScriptCore.xcodeproj/project.pbxproj:
2662         * Target.pri:
2663         * dfg/DFGByteCodeParser.cpp:
2664         (JSC::DFG::ByteCodeParser::makeSafe):
2665         (JSC::DFG::ByteCodeParser::handleCall):
2666         (JSC::DFG::ByteCodeParser::parseBlock):
2667         * dfg/DFGCommon.h:
2668         * dfg/DFGDriver.cpp:
2669         (JSC::DFG::compile):
2670         * dfg/DFGFixupPhase.cpp: Added.
2671         (DFG):
2672         (FixupPhase):
2673         (JSC::DFG::FixupPhase::FixupPhase):
2674         (JSC::DFG::FixupPhase::run):
2675         (JSC::DFG::FixupPhase::fixupNode):
2676         (JSC::DFG::FixupPhase::fixIntEdge):
2677         (JSC::DFG::performFixup):
2678         * dfg/DFGFixupPhase.h: Added.
2679         (DFG):
2680         * dfg/DFGPredictionPropagationPhase.cpp:
2681         (JSC::DFG::PredictionPropagationPhase::run):
2682         (PredictionPropagationPhase):
2683
2684 2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2685
2686         tryReallocate could break the zero-ed memory invariant of CopiedBlocks
2687         https://bugs.webkit.org/show_bug.cgi?id=82087
2688
2689         Reviewed by Filip Pizlo.
2690
2691         Removing this optimization turned out to be ~1% regression on kraken, so I simply 
2692         undid the modification to the current block if we fail.
2693
2694         * heap/CopiedSpace.cpp:
2695         (JSC::CopiedSpace::tryReallocate): Undid the reset in the CopiedAllocator if we fail 
2696         to reallocate from the current block.
2697
2698 2012-03-23  Alexey Proskuryakov  <ap@apple.com>
2699
2700         [Mac] No need for platform-specific ENABLE_BLOB values
2701         https://bugs.webkit.org/show_bug.cgi?id=82102
2702
2703         Reviewed by David Kilzer.
2704
2705         * Configurations/FeatureDefines.xcconfig:
2706
2707 2012-03-23  Michael Saboff  <msaboff@apple.com>
2708
2709         DFG::compileValueToInt32 Sometime Generates GPR to FPR reg back to GPR
2710         https://bugs.webkit.org/show_bug.cgi?id=81805
2711
2712         Reviewed by Filip Pizlo.
2713
2714         Added SpeculativeJIT::checkGeneratedType() to determine the current format
2715         of an operand.  Used that information in SpeculativeJIT::compileValueToInt32
2716         to generate code that will use integer and JSValue types in integer
2717         format directly without a conversion to double.
2718
2719         * JavaScriptCore.xcodeproj/project.pbxproj:
2720         * dfg/DFGSpeculativeJIT.cpp:
2721         (JSC::DFG::SpeculativeJIT::checkGeneratedType):
2722         (DFG):
2723         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2724         * dfg/DFGSpeculativeJIT.h:
2725         (DFG):
2726         (SpeculativeJIT):
2727
2728 2012-03-23  Steve Falkenburg  <sfalken@apple.com>
2729
2730         Update Apple Windows build files for WTF move
2731         https://bugs.webkit.org/show_bug.cgi?id=82069
2732
2733         Reviewed by Jessie Berlin.
2734
2735         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Removed WTF and WTFGenerated.
2736
2737 2012-03-23  Dean Jackson  <dino@apple.com>
2738
2739         Disable CSS_SHADERS in Apple builds
2740         https://bugs.webkit.org/show_bug.cgi?id=81996
2741
2742         Reviewed by Simon Fraser.
2743
2744         Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.
2745
2746         * Configurations/FeatureDefines.xcconfig:
2747
2748 2012-03-23  Gavin Barraclough  <barraclough@apple.com>
2749
2750         RexExp constructor last match properties should not rely on previous ovector
2751         https://bugs.webkit.org/show_bug.cgi?id=82077
2752
2753         Reviewed by Oliver Hunt.
2754
2755         This change simplifies matching, and will enable subpattern results to be fully lazily generated in the future.
2756
2757         This patch changes the scheme used to lazily generate the last match properties of the RegExp object.
2758         Instead of relying on the results in the ovector, we can instead lazily generate the subpatters using
2759         a RegExpMatchesArray. To do so we just need to store the input, the regexp matched, and the match
2760         location (the MatchResult). When the match is accessed or the input is set, we reify results. We use
2761         a special value of setting the saved result to MatchResult::failed() to indicated that we're in a
2762         reified state. This means that next time a match is performed, the store of the result will
2763         automatically blow away the reified value.
2764
2765         * JavaScriptCore.xcodeproj/project.pbxproj:
2766             - Added new files.
2767         * runtime/RegExp.cpp:
2768         (JSC::RegExpFunctionalTestCollector::outputOneTest):
2769             - changed 'subPattern' -> 'subpattern' (there was a mix in JSC, 'subpattern' was more common).
2770         * runtime/RegExpCachedResult.cpp: Added.
2771         (JSC::RegExpCachedResult::visitChildren):
2772         (JSC::RegExpCachedResult::lastResult):
2773         (JSC::RegExpCachedResult::setInput):
2774             - New methods, mark GC objects, lazily create the matches array, and record a user provided input (via assignment to RegExp.inupt).
2775         * runtime/RegExpCachedResult.h: Added.
2776         (RegExpCachedResult):
2777             - Added new class.
2778         (JSC::RegExpCachedResult::RegExpCachedResult):
2779         (JSC::RegExpCachedResult::record):
2780         (JSC::RegExpCachedResult::input):
2781             - Initialize the object, record the result of a RegExp match, access the stored input property.
2782         * runtime/RegExpConstructor.cpp:
2783         (JSC::RegExpConstructor::RegExpConstructor):
2784             - Initialize m_result/m_multiline properties.
2785         (JSC::RegExpConstructor::visitChildren):
2786             - Make sure the cached results (or lazy source for them) are marked.
2787         (JSC::RegExpConstructor::getBackref):
2788         (JSC::RegExpConstructor::getLastParen):
2789         (JSC::RegExpConstructor::getLeftContext):
2790         (JSC::RegExpConstructor::getRightContext):
2791             - Moved from RegExpConstructor, moved to RegExpCachedResult, and using new caching scheme.
2792         (JSC::regExpConstructorInput):
2793         (JSC::setRegExpConstructorInput):
2794             - Changed to use RegExpCachedResult.
2795         * runtime/RegExpConstructor.h:
2796         (JSC::RegExpConstructor::create):
2797         (RegExpConstructor):
2798         (JSC::RegExpConstructor::setMultiline):
2799         (JSC::RegExpConstructor::multiline):
2800             - Move multiline property onto the constructor object; it is not affected by the last match.
2801         (JSC::RegExpConstructor::setInput):
2802         (JSC::RegExpConstructor::input):
2803             - These defer to RegExpCachedResult.
2804         (JSC::RegExpConstructor::performMatch):
2805         * runtime/RegExpMatchesArray.cpp: Added.
2806         (JSC::RegExpMatchesArray::visitChildren):
2807             - Eeeep! added missing visitChildren!
2808         (JSC::RegExpMatchesArray::finishCreation):
2809         (JSC::RegExpMatchesArray::reifyAllProperties):
2810         (JSC::RegExpMatchesArray::reifyMatchProperty):
2811             - Moved from RegExpConstructor.cpp.
2812         (JSC::RegExpMatchesArray::leftContext):
2813         (JSC::RegExpMatchesArray::rightContext):
2814             - Since the match start/
2815         * runtime/RegExpMatchesArray.h:
2816         (RegExpMatchesArray):
2817             - Declare new methods & structure flags.
2818         * runtime/RegExpObject.cpp:
2819         (JSC::RegExpObject::match):
2820             - performMatch now requires the JSString input, to cache.
2821         * runtime/StringPrototype.cpp:
2822         (JSC::removeUsingRegExpSearch):
2823         (JSC::replaceUsingRegExpSearch):
2824         (JSC::stringProtoFuncMatch):
2825         (JSC::stringProtoFuncSearch):
2826             - performMatch now requires the JSString input, to cache.
2827
2828 2012-03-23  Tony Chang  <tony@chromium.org>
2829
2830         [chromium] rename newwtf target back to wtf
2831         https://bugs.webkit.org/show_bug.cgi?id=82064
2832
2833         Reviewed by Adam Barth.
2834
2835         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2836
2837 2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2838
2839         Simplify memory usage tracking in CopiedSpace
2840         https://bugs.webkit.org/show_bug.cgi?id=80705
2841
2842         Reviewed by Filip Pizlo.
2843
2844         * heap/CopiedAllocator.h:
2845         (CopiedAllocator): Rename currentUtilization to currentSize.
2846         (JSC::CopiedAllocator::currentCapacity):
2847         * heap/CopiedBlock.h:
2848         (CopiedBlock):
2849         (JSC::CopiedBlock::payload): Move the implementation of payload() out of the class
2850         declaration.
2851         (JSC):
2852         (JSC::CopiedBlock::size): Add new function to calculate the block's size.
2853         (JSC::CopiedBlock::capacity): Ditto for capacity.
2854         * heap/CopiedSpace.cpp:
2855         (JSC::CopiedSpace::CopiedSpace): Remove old bogus memory stats fields and add a new
2856         field for the water mark.
2857         (JSC::CopiedSpace::init):
2858         (JSC::CopiedSpace::tryAllocateSlowCase): When we fail to allocate from the current 
2859         block, we need to update our current water mark with the size of the block.
2860         (JSC::CopiedSpace::tryAllocateOversize): When we allocate a new oversize block, we 
2861         need to update our current water mark with the size of the used portion of the block.
2862         (JSC::CopiedSpace::tryReallocate): We don't need to update the water mark when 
2863         reallocating because it will either get accounted for when we fill up the block later 
2864         in the case of being able to reallocate in the current block or it will get picked up 
2865         immediately because we'll have to get a new block.
2866         (JSC::CopiedSpace::tryReallocateOversize): We do, however, need to update in when 
2867         realloc-ing an oversize block because we deallocate the old block and allocate a brand 
2868         new one.
2869         (JSC::CopiedSpace::doneFillingBlock): Update the water mark as blocks are returned to 
2870         the CopiedSpace by the SlotVisitors.
2871         (JSC::CopiedSpace::doneCopying): Add in any pinned blocks to the water mark.
2872         (JSC::CopiedSpace::getFreshBlock): We use the Heap's new function to tell us whether or 
2873         not we should collect now instead of doing the calculation ourself.
2874         (JSC::CopiedSpace::destroy):
2875         (JSC):
2876         (JSC::CopiedSpace::size): Manually calculate the size of the CopiedSpace, similar to how 
2877         MarkedSpace does.
2878         (JSC::CopiedSpace::capacity): Ditto for capacity.
2879         * heap/CopiedSpace.h:
2880         (JSC::CopiedSpace::waterMark):
2881         (CopiedSpace):
2882         * heap/CopiedSpaceInlineMethods.h:
2883         (JSC::CopiedSpace::startedCopying): Reset water mark to 0 when we start copying during a 
2884         collection.
2885         (JSC::CopiedSpace::allocateNewBlock):
2886         (JSC::CopiedSpace::fitsInBlock):
2887         (JSC::CopiedSpace::allocateFromBlock):
2888         * heap/Heap.cpp:
2889         (JSC::Heap::size): Incorporate size of CopiedSpace into the total size of the Heap.
2890         (JSC::Heap::capacity): Ditto for capacity.
2891         (JSC::Heap::collect):
2892         * heap/Heap.h:
2893         (Heap):
2894         (JSC::Heap::shouldCollect): New function for other sub-parts of the Heap to use to 
2895         determine whether they should initiate a collection or continue to allocate new blocks.
2896         (JSC):
2897         (JSC::Heap::waterMark): Now is the sum of the water marks of the two sub-parts of the
2898         Heap (MarkedSpace and CopiedSpace).
2899         * heap/MarkedAllocator.cpp:
2900         (JSC::MarkedAllocator::allocateSlowCase): Changed to use the Heap's new shouldCollect() function.
2901
2902 2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>
2903
2904         BitVector::resizeOutOfLine doesn't memset when converting an inline buffer
2905         https://bugs.webkit.org/show_bug.cgi?id=82012
2906
2907         Reviewed by Filip Pizlo.
2908
2909         Initialize out-of-line buffers while extending an inline buffer. Also export symbols to be used in WebCore.
2910
2911         * wtf/BitVector.cpp:
2912         (WTF::BitVector::resizeOutOfLine):
2913         * wtf/BitVector.h:
2914         (BitVector):
2915         (OutOfLineBits):
2916
2917 2012-03-22  Michael Saboff  <msaboff@apple.com>
2918
2919         ExecutableAllocator::memoryPressureMultiplier() might can return NaN
2920         https://bugs.webkit.org/show_bug.cgi?id=82002
2921
2922         Reviewed by Filip Pizlo.
2923
2924         Guard against divide by zero and then make sure the return
2925         value is >= 1.0.
2926
2927         * jit/ExecutableAllocator.cpp:
2928         (JSC::ExecutableAllocator::memoryPressureMultiplier):
2929         * jit/ExecutableAllocatorFixedVMPool.cpp:
2930         (JSC::ExecutableAllocator::memoryPressureMultiplier):
2931
2932 2012-03-22  Jessie Berlin  <jberlin@apple.com>
2933
2934         Windows build fix after r111778.
2935
2936         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2937         Don't include and try to build files owned by WTF.
2938         Also, let VS have its way with the vcproj in terms of file ordering.
2939
2940 2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>
2941
2942         [CMake] Unreviewed build fix after r111778.
2943
2944         * CMakeLists.txt: Move ${WTF_DIR} after ${JAVASCRIPTCORE_DIR} in
2945         the include paths so that the right config.h is used.
2946
2947 2012-03-22  Tony Chang  <tony@chromium.org>
2948
2949         Unreviewed, fix chromium build after wtf move.
2950
2951         Remove old wtf_config and wtf targets.
2952
2953         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2954
2955 2012-03-22  Martin Robinson  <mrobinson@igalia.com>
2956
2957         Fixed the GTK+ WTF/JavaScriptCore build after r111778.
2958
2959         * GNUmakefile.list.am: Removed an extra trailing backslash.
2960
2961 2012-03-22  Mark Rowe  <mrowe@apple.com>
2962
2963         Fix the build.
2964
2965         * Configurations/JavaScriptCore.xcconfig: Tell the linker to pull in all members from static libraries
2966         rather than only those that contain symbols that JavaScriptCore itself uses.
2967         * JavaScriptCore.xcodeproj/project.pbxproj: Remove some bogus settings that crept in to the Xcode project.
2968
2969 2012-03-22  Filip Pizlo  <fpizlo@apple.com>
2970
2971         DFG NodeFlags has some duplicate code and naming issues
2972         https://bugs.webkit.org/show_bug.cgi?id=81975
2973
2974         Reviewed by Gavin Barraclough.
2975         
2976         Removed most references to "ArithNodeFlags" since those are now just part
2977         of the node flags. Fixed some renaming goofs (EdgedAsNum is once again
2978         NodeUsedAsNum). Got rid of setArithNodeFlags() and mergeArithNodeFlags()
2979         because the former was never called and the latter did the same things as
2980         mergeFlags().
2981
2982         * dfg/DFGByteCodeParser.cpp:
2983         (JSC::DFG::ByteCodeParser::makeSafe):
2984         (JSC::DFG::ByteCodeParser::makeDivSafe):
2985         (JSC::DFG::ByteCodeParser::handleIntrinsic):
2986         * dfg/DFGGraph.cpp:
2987         (JSC::DFG::Graph::dump):
2988         * dfg/DFGNode.h:
2989         (JSC::DFG::Node::arithNodeFlags):
2990         (Node):
2991         * dfg/DFGNodeFlags.cpp:
2992         (JSC::DFG::nodeFlagsAsString):
2993         * dfg/DFGNodeFlags.h:
2994         (DFG):
2995         (JSC::DFG::nodeUsedAsNumber):
2996         * dfg/DFGPredictionPropagationPhase.cpp:
2997         (JSC::DFG::PredictionPropagationPhase::propagate):
2998         (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
2999
3000 2012-03-22  Eric Seidel  <eric@webkit.org>
3001
3002         Actually move WTF files to their new home
3003         https://bugs.webkit.org/show_bug.cgi?id=81844
3004
3005         Unreviewed.  The details of the port-specific changes
3006         have been seen by contributors from those ports, but
3007         the whole 5MB change isn't very reviewable as-is.
3008
3009         * GNUmakefile.am:
3010         * GNUmakefile.list.am:
3011         * JSCTypedArrayStubs.h:
3012         * JavaScriptCore.gypi:
3013         * JavaScriptCore.xcodeproj/project.pbxproj:
3014         * jsc.cpp:
3015
3016 2012-03-22  Kevin Ollivier  <kevino@theolliviers.com>
3017
3018         [wx] Unreviewed. Adding Source/WTF to the build.
3019
3020         * wscript:
3021
3022 2012-03-22  Gavin Barraclough  <barraclough@apple.com>
3023
3024         Add JSValue::isFunction
3025         https://bugs.webkit.org/show_bug.cgi?id=81935
3026
3027         Reviewed by Geoff Garen.
3028
3029         This would be useful in the WebCore bindings code.
3030         Also, remove asFunction, replace with jsCast<JSFunction*>.
3031
3032         * API/JSContextRef.cpp:
3033         * debugger/Debugger.cpp:
3034         * debugger/DebuggerCallFrame.cpp:
3035         (JSC::DebuggerCallFrame::functionName):
3036         * dfg/DFGGraph.h:
3037         (JSC::DFG::Graph::valueOfFunctionConstant):
3038         * dfg/DFGOperations.cpp:
3039         * interpreter/CallFrame.cpp:
3040         (JSC::CallFrame::isInlineCallFrameSlow):
3041         * interpreter/Interpreter.cpp:
3042         (JSC::Interpreter::privateExecute):
3043         * jit/JITStubs.cpp:
3044         (JSC::DEFINE_STUB_FUNCTION):
3045         (JSC::jitCompileFor):
3046         (JSC::lazyLinkFor):
3047         * llint/LLIntSlowPaths.cpp:
3048         (JSC::LLInt::traceFunctionPrologue):
3049         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3050         (JSC::LLInt::setUpCall):
3051         * runtime/Arguments.h:
3052         (JSC::Arguments::finishCreation):
3053         * runtime/ArrayPrototype.cpp:
3054         (JSC::arrayProtoFuncFilter):
3055         (JSC::arrayProtoFuncMap):
3056         (JSC::arrayProtoFuncEvery):
3057         (JSC::arrayProtoFuncForEach):
3058         (JSC::arrayProtoFuncSome):
3059         (JSC::arrayProtoFuncReduce):
3060         (JSC::arrayProtoFuncReduceRight):
3061         * runtime/CommonSlowPaths.h:
3062         (JSC::CommonSlowPaths::arityCheckFor):
3063         * runtime/Executable.h:
3064         (JSC::FunctionExecutable::compileFor):
3065         (JSC::FunctionExecutable::compileOptimizedFor):
3066         * runtime/FunctionPrototype.cpp:
3067         (JSC::functionProtoFuncToString):
3068         * runtime/JSArray.cpp:
3069         (JSC::JSArray::sort):
3070         * runtime/JSFunction.cpp:
3071         (JSC::JSFunction::argumentsGetter):
3072         (JSC::JSFunction::callerGetter):
3073         (JSC::JSFunction::lengthGetter):
3074         * runtime/JSFunction.h:
3075         (JSC):
3076         (JSC::asJSFunction):
3077         (JSC::JSValue::isFunction):
3078         * runtime/JSGlobalData.cpp:
3079         (WTF::Recompiler::operator()):
3080         (JSC::JSGlobalData::releaseExecutableMemory):
3081         * runtime/JSValue.h:
3082         * runtime/StringPrototype.cpp:
3083         (JSC::replaceUsingRegExpSearch):
3084
3085 2012-03-21  Filip Pizlo  <fpizlo@apple.com>
3086
3087         DFG speculation on booleans should be rationalized
3088         https://bugs.webkit.org/show_bug.cgi?id=81840
3089
3090         Reviewed by Gavin Barraclough.
3091         
3092         This removes isKnownBoolean() and replaces it with AbstractState-based
3093         optimization, and cleans up the control flow in code gen methods for
3094         Branch and LogicalNot. Also fixes a goof in Node::shouldSpeculateNumber,
3095         and removes isKnownNotBoolean() since that method appeared to be a
3096         helper used solely by 32_64's speculateBooleanOperation().
3097         
3098         This is performance-neutral.
3099
3100         * dfg/DFGAbstractState.cpp:
3101         (JSC::DFG::AbstractState::execute):
3102         * dfg/DFGNode.h:
3103         (JSC::DFG::Node::shouldSpeculateNumber):
3104         * dfg/DFGSpeculativeJIT.cpp:
3105         (DFG):
3106         * dfg/DFGSpeculativeJIT.h:
3107         (SpeculativeJIT):
3108         * dfg/DFGSpeculativeJIT32_64.cpp:
3109         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
3110         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
3111         (JSC::DFG::SpeculativeJIT::emitBranch):
3112         (JSC::DFG::SpeculativeJIT::compile):
3113         * dfg/DFGSpeculativeJIT64.cpp:
3114         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
3115         (JSC::DFG::SpeculativeJIT::emitBranch):
3116         (JSC::DFG::SpeculativeJIT::compile):
3117
3118 2012-03-21  Mark Rowe  <mrowe@apple.com>
3119
3120         Fix the build.
3121
3122         * wtf/MetaAllocator.h:
3123         (MetaAllocator): Export the destructor.
3124
3125 2012-03-21  Eric Seidel  <eric@webkit.org>
3126
3127         Fix remaining WTF includes in JavaScriptCore in preparation for moving WTF headers out of JavaScriptCore
3128         https://bugs.webkit.org/show_bug.cgi?id=81834
3129
3130         Reviewed by Adam Barth.
3131
3132         * jsc.cpp:
3133         * os-win32/WinMain.cpp:
3134         * runtime/JSDateMath.cpp:
3135         * runtime/TimeoutChecker.cpp:
3136         * testRegExp.cpp:
3137         * tools/CodeProfiling.cpp:
3138
3139 2012-03-21  Eric Seidel  <eric@webkit.org>
3140
3141         WTF::MetaAllocator has a weak vtable (discovered when building wtf as a static library)
3142         https://bugs.webkit.org/show_bug.cgi?id=81838
3143
3144         Reviewed by Geoffrey Garen.
3145
3146         My understanding is that weak vtables happen when the compiler/linker cannot
3147         determine which compilation unit should constain the vtable.  In this case
3148         because there were only pure virtual functions as well as an "inline"
3149         virtual destructor (thus the virtual destructor was defined in many compilation
3150         units).  Since you can't actually "inline" a virtual function (it still has to
3151         bounce through the vtable), the "inline" on this virutal destructor doesn't
3152         actually help performance, and is only serving to confuse the compiler here.
3153         I've moved the destructor implementation to the .cpp file, thus making
3154         it clear to the compiler where the vtable should be stored, and solving the error.
3155
3156         * wtf/MetaAllocator.cpp:
3157         (WTF::MetaAllocator::~MetaAllocator):
3158         (WTF):
3159         * wtf/MetaAllocator.h:
3160
3161 2012-03-20  Gavin Barraclough  <barraclough@apple.com>
3162
3163         RegExpMatchesArray should not copy the ovector
3164         https://bugs.webkit.org/show_bug.cgi?id=81742
3165
3166         Reviewed by Michael Saboff.
3167
3168         Currently, all RegExpMatchesArray object contain Vector<int, 32>, used to hold any sub-pattern results.
3169         This makes allocation/construction/destruction of these objects more expensive. Instead, just store the
3170         main match, and recreate the sub-pattern ranges only if necessary (these are often only used for grouping,
3171         and the results never accessed).
3172         If the main match (index 0) of the RegExpMatchesArray is accessed, reify that value alone.
3173
3174         * dfg/DFGOperations.cpp:
3175             - RegExpObject match renamed back to test (test returns a bool).
3176         * runtime/RegExpConstructor.cpp:
3177         (JSC):
3178             - Removed RegExpResult, RegExpMatchesArray constructor, destroy method.
3179         (JSC::RegExpMatchesArray::finishCreation):
3180             - Removed RegExpConstructorPrivate parameter.
3181         (JSC::RegExpMatchesArray::reifyAllProperties):
3182             - (Was fillArrayInstance) Reify all properties of the RegExpMatchesArray.
3183             If there are sub-pattern properties, the RegExp is re-run to generate their values.
3184         (JSC::RegExpMatchesArray::reifyMatchProperty):
3185             - Reify just the match (index 0) property of the RegExpMatchesArray.
3186         * runtime/RegExpConstructor.h:
3187         (RegExpConstructor):
3188         (JSC::RegExpConstructor::performMatch):
3189             - performMatch now returns a MatchResult, rather than using out-parameters.
3190         * runtime/RegExpMatchesArray.h:
3191         (JSC::RegExpMatchesArray::RegExpMatchesArray):
3192             - Moved from .cpp, stores the input/regExp/result to use when lazily reifying properties.
3193         (RegExpMatchesArray):
3194         (JSC::RegExpMatchesArray::create):
3195             - Now passed the input string matched against, the RegExp, and the MatchResult.
3196         (JSC::RegExpMatchesArray::reifyAllPropertiesIfNecessary):
3197         (JSC::RegExpMatchesArray::reifyMatchPropertyIfNecessary):
3198             - Helpers to conditionally reify properties.
3199         (JSC::RegExpMatchesArray::getOwnPropertySlot):
3200         (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
3201         (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
3202         (JSC::RegExpMatchesArray::put):
3203         (JSC::RegExpMatchesArray::putByIndex):
3204         (JSC::RegExpMatchesArray::deleteProperty):
3205         (JSC::RegExpMatchesArray::deletePropertyByIndex):
3206         (JSC::RegExpMatchesArray::getOwnPropertyNames):
3207         (JSC::RegExpMatchesArray::defineOwnProperty):
3208             - Changed to use reifyAllPropertiesIfNecessary/reifyMatchPropertyIfNecessary
3209             (getOwnPropertySlotByIndex calls reifyMatchPropertyIfNecessary if index is 0).
3210         * runtime/RegExpObject.cpp:
3211         (JSC::RegExpObject::exec):
3212         (JSC::RegExpObject::match):
3213             - match now returns a MatchResult.
3214         * runtime/RegExpObject.h:
3215         (JSC::MatchResult::MatchResult):
3216             - Added the result of a match is a start & end tuple.
3217         (JSC::MatchResult::failed):
3218             - A failure is indicated by (notFound, 0).
3219         (JSC::MatchResult::operator bool):
3220             - Evaluates to false if the match failed.
3221         (JSC::MatchResult::empty):
3222             - Evaluates to true if the match succeeded with length 0.
3223         (JSC::RegExpObject::test):
3224             - Now returns a bool.
3225         * runtime/RegExpPrototype.cpp:
3226         (JSC::regExpProtoFuncTest):
3227             - RegExpObject match renamed back to test (test returns a bool).
3228         * runtime/StringPrototype.cpp:
3229         (JSC::removeUsingRegExpSearch):
3230         (JSC::replaceUsingRegExpSearch):
3231         (JSC::stringProtoFuncMatch):
3232         (JSC::stringProtoFuncSearch):
3233             - performMatch now returns a MatchResult, rather than using out-parameters.
3234
3235 2012-03-21  Hojong Han  <hojong.han@samsung.com>
3236
3237         Fix out of memory by allowing overcommit
3238         https://bugs.webkit.org/show_bug.cgi?id=81743
3239
3240         Reviewed by Geoffrey Garen.
3241
3242         Garbage collection is not triggered and new blocks are added
3243         because overcommit is allowed by MAP_NORESERVE flag when high water mark is big enough.
3244
3245         * wtf/OSAllocatorPosix.cpp:
3246         (WTF::OSAllocator::reserveAndCommit):
3247
3248 2012-03-21  Jessie Berlin  <jberlin@apple.com>
3249
3250         More Windows build fixing.
3251
3252         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
3253         Fix the order of the include directories to look in include/private first before looking
3254         in include/private/JavaScriptCore.
3255         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
3256         Look in the Production output directory (where the wtf headers will be). This is the same
3257         thing that is done for jsc and testRegExp in ReleasePGO.
3258
3259 2012-03-21  Jessie Berlin  <jberlin@apple.com>
3260
3261         WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
3262         $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
3263         https://bugs.webkit.org/show_bug.cgi?id=81739
3264
3265         Reviewed by Dan Bernstein.
3266
3267         * JavaScriptCore.vcproj/jsc/jsc.vcproj:
3268         Look for AtomicString.cpp, StringBuilder.cpp, StringImpl.cpp, and WTFString.cpp in the wtf
3269         subdirectory of the build output, not the JavaScriptCore/wtf subdirectory.
3270         * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
3271         Ditto.
3272
3273         * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
3274         Get the headers for those 4 files from the wtf subdirectory of the build output, not the
3275         JavaScriptCore/wtf subdirectory.
3276         * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
3277         Ditto.
3278
3279 2012-03-20  Eric Seidel  <eric@webkit.org>
3280
3281         Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
3282         https://bugs.webkit.org/show_bug.cgi?id=80911
3283
3284         Reviewed by Adam Barth.
3285
3286         Update the various build systems to depend on Source/WTF headers
3287         as well as remove references to Platform.h (since it's now moved).
3288
3289         * CMakeLists.txt:
3290         * JavaScriptCore.pri:
3291         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
3292         * JavaScriptCore.xcodeproj/project.pbxproj:
3293         * wtf/CMakeLists.txt:
3294
3295 2012-03-20  Filip Pizlo  <fpizlo@apple.com>
3296
3297         op_mod fails on many interesting corner cases
3298         https://bugs.webkit.org/show_bug.cgi?id=81648
3299
3300         Reviewed by Oliver Hunt.
3301         
3302         Removed most strength reduction for op_mod, and fixed the integer handling
3303         to do the right thing for corner cases. Oddly, this revealed bugs in OSR,
3304         which this patch also fixes.
3305         
3306         This patch is performance neutral on all of the major benchmarks we track.
3307
3308         * dfg/DFGOperations.cpp:
3309         * dfg/DFGOperations.h:
3310         * dfg/DFGSpeculativeJIT.cpp:
3311         (DFG):
3312         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
3313         (JSC::DFG::SpeculativeJIT::compileArithMod):
3314         * jit/JIT.h:
3315         (JIT):
3316         * jit/JITArithmetic.cpp:
3317         (JSC):
3318         (JSC::JIT::emit_op_mod):
3319         (JSC::JIT::emitSlow_op_mod):
3320         * jit/JITArithmetic32_64.cpp:
3321         (JSC::JIT::emit_op_mod):
3322         (JSC::JIT::emitSlow_op_mod):
3323         * jit/JITOpcodes32_64.cpp:
3324         (JSC::JIT::privateCompileCTIMachineTrampolines):
3325         (JSC):
3326         * jit/JITStubs.h:
3327         (TrampolineStructure):
3328         (JSC::JITThunks::ctiNativeConstruct):
3329         * llint/LowLevelInterpreter64.asm:
3330         * wtf/Platform.h:
3331         * wtf/SimpleStats.h:
3332         (WTF::SimpleStats::variance):
3333
3334 2012-03-20  Steve Falkenburg  <sfalken@apple.com>
3335
3336         Windows (make based) build fix.
3337         <rdar://problem/11069015>
3338
3339         * JavaScriptCore.vcproj/JavaScriptCore.make: devenv /rebuild doesn't work with JavaScriptCore.vcproj. Use /clean and /build instead.
3340
3341 2012-03-20  Steve Falkenburg  <sfalken@apple.com>
3342
3343         Move WTF-related Windows project files out of JavaScriptCore
3344         https://bugs.webkit.org/show_bug.cgi?id=80680
3345
3346         This change only moves the vcproj and related files from JavaScriptCore/JavaScriptCore.vcproj/WTF.
3347         It does not move any source code. This is in preparation for the WTF source move out of
3348         JavaScriptCore.
3349
3350         Reviewed by Jessie Berlin.
3351
3352         * JavaScriptCore.vcproj/JavaScriptCore.sln:
3353         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
3354         * JavaScriptCore.vcproj/WTF: Removed.
3355         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed.
3356         * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Removed.
3357         * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Removed.
3358         * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Removed.
3359         * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Removed.
3360         * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Removed.
3361         * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Removed.
3362         * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Removed.
3363         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Removed.
3364         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Removed.
3365         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Removed.
3366         * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Removed.
3367         * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Removed.
3368         * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Removed.
3369         * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Removed.
3370         * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Removed.
3371         * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Removed.
3372         * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Removed.
3373         * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Removed.
3374         * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Removed.
3375         * JavaScriptCore.vcproj/WTF/copy-files.cmd: Removed.
3376         * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Removed.
3377
3378 2012-03-20  Benjamin Poulain  <bpoulain@apple.com>
3379
3380         Cache the type string of JavaScript object
3381         https://bugs.webkit.org/show_bug.cgi?id=81446
3382
3383         Reviewed by Geoffrey Garen.
3384
3385         Instead of creating the JSString every time, we create
3386         lazily the strings in JSGlobalData.
3387
3388         This avoid the construction of the StringImpl and of the JSString,
3389         which gives some performance improvements.
3390
3391         * runtime/CommonIdentifiers.h:
3392         * runtime/JSValue.cpp:
3393         (JSC::JSValue::toStringSlowCase):
3394         * runtime/Operations.cpp:
3395         (JSC::jsTypeStringForValue):
3396         * runtime/SmallStrings.cpp:
3397         (JSC::SmallStrings::SmallStrings):
3398         (JSC::SmallStrings::finalizeSmallStrings):
3399         (JSC::SmallStrings::initialize):
3400         (JSC):
3401         * runtime/SmallStrings.h:
3402         (SmallStrings):
3403
3404 2012-03-20  Oliver Hunt  <oliver@apple.com>
3405
3406         Allow LLINT to work even when executable allocation fails.
3407         https://bugs.webkit.org/show_bug.cgi?id=81693
3408
3409         Reviewed by Gavin Barraclough.
3410
3411         Don't crash if executable allocation fails if we can fall back on LLINT
3412
3413         * jit/ExecutableAllocatorFixedVMPool.cpp:
3414         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
3415         * wtf/OSAllocatorPosix.cpp:
3416         (WTF::OSAllocator::reserveAndCommit):
3417
3418 2012-03-20  Csaba Osztrogonác  <ossy@webkit.org>
3419
3420         Division optimizations fail to infer cases of truncated division and mishandle -2147483648/-1
3421         https://bugs.webkit.org/show_bug.cgi?id=81428
3422
3423         32 bit buildfix after r111355.
3424
3425         2147483648 (2^31) isn't valid int literal in ISO C90, because 2147483647 (2^31-1) is the biggest int.
3426         The smallest int is -2147483648 (-2^31) == -2147483647 - 1  == -INT32_MAX-1 == INT32_MIN (stdint.h).
3427
3428         Reviewed by Zoltan Herczeg.
3429
3430     &