2fa14ab692760041a01af39e404ffae2dec8344c
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-04-16  Brent Fulgham  <bfulgham@webkit.org>
2
3         [Windows, WinCairo] Stop individually building WTF files in JSC.
4         https://bugs.webkit.org/show_bug.cgi?id=114705
5
6         Reviewed by Anders Carlsson.
7
8         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
9         Export additional String/fastMalloc symbols needed by JSC program.
10         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Don't manually build
11         WTF implementation files (a second time!) in this project.
12         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
13         Export additional String/fastMalloc symbols needed by JSC program.
14         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Don't manually
15         build WTF implementation files (a second time!) in this project.
16         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.filters: Ditto.
17
18 2013-04-16  Patrick Gansterer  <paroga@webkit.org>
19
20         [CMake] Do not use JAVASCRIPTCORE_DIR in add_custom_command() of JavaScriptCore project
21         https://bugs.webkit.org/show_bug.cgi?id=114265
22
23         Reviewed by Brent Fulgham.
24
25         Use CMAKE_CURRENT_SOURCE_DIR instead, since it provides the same value and is more
26         understandable. Also move the GENERATE_HASH_LUT macro into the CMakeLists.txt
27         of JavaScriptCore to avoid the usage of JAVASCRIPTCORE_DIR there too.
28
29         * CMakeLists.txt:
30
31 2013-04-16  Anders Carlsson  <andersca@apple.com>
32
33         Another Windows build fix attempt.
34
35         * runtime/JSGlobalData.h:
36         (JSGlobalData):
37
38 2013-04-16  Anders Carlsson  <andersca@apple.com>
39
40         Try to fix the Windows build.
41
42         * runtime/JSGlobalData.h:
43
44 2013-04-16  Brent Fulgham  <bfulgham@webkit.org>
45
46         [Windows] Unreviewed VS2010 build correction.
47
48         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
49         Specify proper link library to avoid mixture of ICU 4.0 and 4.6
50         symbols during link.
51
52 2013-04-15  Ryosuke Niwa  <rniwa@webkit.org>
53
54         Windows clean build fix after r148479.
55
56         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
57         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
58
59 2013-04-15  Anders Carlsson  <andersca@apple.com>
60
61         ScriptWrappable subclasses shouldn't have to include WeakInlines.h
62         https://bugs.webkit.org/show_bug.cgi?id=114641
63
64         Reviewed by Alexey Proskuryakov.
65
66         Move back the Weak constructor, destructor and clear() to Weak.h. Add a new weakClearSlowCase function
67         and put it in Weak.cpp.
68
69         * CMakeLists.txt:
70         * GNUmakefile.list.am:
71         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
72         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
73         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
74         * JavaScriptCore.xcodeproj/project.pbxproj:
75         * Target.pri:
76         * heap/Weak.cpp: Added.
77         * heap/Weak.h:
78         * heap/WeakInlines.h:
79         * heap/WeakSetInlines.h:
80
81 2013-04-15  Mark Hahnenberg  <mhahnenberg@apple.com>
82
83         HeapTimer lifetime should be less complicated
84         https://bugs.webkit.org/show_bug.cgi?id=114529
85
86         Reviewed by Oliver Hunt.
87
88         Right now our HeapTimer lifetime is rather complicated. HeapTimers are "owned" by the JSGlobalData, 
89         but there's an issue in that there can be races between a thread that is trying to tear down a JSGlobalData 
90         and the HeapTimer's fire function. Our current code for tearing down HeapTimers is an intricate and delicate 
91         dance which probably contains subtle bugs.
92
93         We can make our lives easier by changing things around a bit. 
94
95         1) We should free the API lock from being solely owned by the JSGlobalData so we don't have to worry about 
96            grabbing the lock out of invalid memory when our HeapTimer callback fires. 
97
98         2) We should also make it so that we deref the JSGlobalData first, then unlock the API lock so that when we 
99            have the lock, the JSGlobalData is in one of two states: fully valid or completely destroyed, and we know exactly which one. 
100
101         3) The JSLock can tell us this information by keeping a back pointer to the JSGlobalData. When the JSGlobalData's 
102            destructor is called, it clears this pointer in the JSLock. Other clients of the API lock can then check 
103            this pointer to determine whether or not the JSGlobalData is still around.
104
105         4) The CFRunLoopTimer will use the API lock as its context rather than the HeapTimer itself. The only way 
106            the HeapTimer's callback can get to the HeapTimer is through the API lock's JSGlobalData pointer.
107
108         5) The CFRunLoopTimerContext struct has two fields for retain and release callbacks for the context's info field. 
109            We'll provide these callbacks to ref() and deref() the JSLock as necessary. Thus, the timer becomes the other 
110            owner of the JSLock apart from the JSGlobalData.
111
112         * API/APIShims.h: Remove the cruft that was required by the previous design, such as RefGlobalDataTag.
113         (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
114         (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
115         (APIEntryShimWithoutLock):
116         (JSC::APIEntryShim::APIEntryShim):
117         (JSC::APIEntryShim::~APIEntryShim): Protect the API lock with a RefPtr, deref the JSGlobalData, which could destroy it,
118         then unlock the API lock. This ordering prevents others from obtaining the API lock while the JSGlobalData is in the 
119         middle of being torn down.
120         (JSC::APIEntryShim::init): We now take the lock, then ref the JSGlobalData, which is the opposite order of when we 
121         tear down the shim.
122         * heap/Heap.cpp:
123         (JSC::Heap::setActivityCallback): Use PassOwnPtr now.
124         (JSC::Heap::activityCallback): Ditto.
125         (JSC::Heap::sweeper): Ditto.
126         (JSC):
127         * heap/Heap.h:
128         (Heap):
129         * heap/HeapTimer.cpp:
130         (JSC::retainAPILock): Retain callback for CFRunLoopTimerContext struct.
131         (JSC::releaseAPILock): Release callback for the CFRunLoopTimerContext struct.
132         (JSC::HeapTimer::HeapTimer): Use the API lock as the context's info field rather than the HeapTimer.
133         (JSC::HeapTimer::timerDidFire): Grab the API lock. Return early if the JSGlobalData has already been destroyed.
134         Otherwise, figure out which kind of HeapTimer we are based on the CFRunLoopTimerRef passed to the callback and 
135         call the HeapTimer's callback.
136         * heap/HeapTimer.h:
137         (HeapTimer):
138         * heap/IncrementalSweeper.cpp:
139         (JSC::IncrementalSweeper::create): PassOwnPtr all the things.
140         * heap/IncrementalSweeper.h:
141         (IncrementalSweeper):
142         * jsc.cpp:
143         (jscmain): We use an APIEntryShim instead of a RefPtr for the JSGlobalData because we need to 
144         tear down the JSGlobalData while we still hold the lock, which the APIEntryShim handles correctly.
145         * runtime/GCActivityCallback.h:
146         (DefaultGCActivityCallback):
147         (JSC::DefaultGCActivityCallback::create):
148         * runtime/JSGlobalData.cpp:
149         (JSC::JSGlobalData::JSGlobalData):
150         (JSC::JSGlobalData::~JSGlobalData): Notify the API lock that the JSGlobalData is being torn down.
151         * runtime/JSGlobalData.h:
152         (JSGlobalData):
153         (JSC::JSGlobalData::apiLock):
154         * runtime/JSLock.cpp:
155         (JSC::JSLockHolder::JSLockHolder): Ref, then lock (just like the API shim).
156         (JSC):
157         (JSC::JSLock::willDestroyGlobalData):
158         (JSC::JSLockHolder::init):
159         (JSC::JSLockHolder::~JSLockHolder): Protect, deref, then unlock (just like the API shim).
160         (JSC::JSLock::JSLock):
161         * runtime/JSLock.h: Add back pointer to the JSGlobalData and a callback for when the JSGlobalData is being
162         torn down that clears this pointer to notify other clients (i.e. timer callbacks) that the JSGlobalData is no
163         longer valid.
164         (JSLockHolder):
165         (JSLock):
166         (JSC::JSLock::globalData):
167         * testRegExp.cpp:
168         (realMain): We use an APIEntryShim instead of a RefPtr for the JSGlobalData because we need to 
169         tear down the JSGlobalData while we still hold the lock, which the APIEntryShim handles correctly.
170
171 2013-04-15  Julien Brianceau  <jbrianceau@nds.com>
172
173         LLInt SH4 backend implementation
174         https://bugs.webkit.org/show_bug.cgi?id=112886
175
176         Reviewed by Oliver Hunt.
177
178         * dfg/DFGOperations.cpp:
179         (JSC):
180         * jit/JITStubs.cpp:
181         * llint/LLIntOfflineAsmConfig.h:
182         * llint/LowLevelInterpreter.asm:
183         * llint/LowLevelInterpreter32_64.asm:
184         * offlineasm/arm.rb:
185         * offlineasm/ast.rb:
186         * offlineasm/backends.rb:
187         * offlineasm/instructions.rb:
188         * offlineasm/mips.rb:
189         * offlineasm/risc.rb:
190         * offlineasm/sh4.rb: Added.
191
192 2013-04-15  Patrick Gansterer  <paroga@webkit.org>
193
194         [CMake] Add WTF_USE_*_UNICODE variables
195         https://bugs.webkit.org/show_bug.cgi?id=114556
196
197         Reviewed by Brent Fulgham.
198
199         WTF_USE_ICU_UNICODE and WTF_USE_WCHAR_UNICODE are used to
200         reduce duplication in the platform specific CMake files.
201
202         * CMakeLists.txt:
203         * PlatformEfl.cmake:
204
205 2013-04-13  Patrick Gansterer  <paroga@webkit.org>
206
207         Add missing export macro to SymbolTableEntry::freeFatEntrySlow()
208
209         * runtime/SymbolTable.h:
210         (SymbolTableEntry):
211
212 2013-04-12  Mark Hahnenberg  <mhahnenberg@apple.com>
213
214         Block freeing thread should call Region::destroy instead of delete
215         https://bugs.webkit.org/show_bug.cgi?id=114544
216
217         Reviewed by Oliver Hunt.
218
219         Since Region doesn't have a virtual destructor, calling delete will not properly clean up all of 
220         the state of the Region. We should call destroy() instead.
221
222         * heap/BlockAllocator.cpp:
223         (JSC::BlockAllocator::releaseFreeRegions):
224         (JSC::BlockAllocator::blockFreeingThreadMain):
225
226 2013-04-11  Benjamin Poulain  <bpoulain@apple.com>
227
228         Merge CharacterClassTable into CharacterClass
229         https://bugs.webkit.org/show_bug.cgi?id=114409
230
231         Reviewed by Darin Adler.
232
233         CharacterClassTable is only a pointer and a boolean.
234         It is a little overkill to make a separate allocation
235         for that.
236
237         * create_regex_tables:
238         * yarr/YarrJIT.cpp:
239         (JSC::Yarr::YarrGenerator::matchCharacterClass):
240         * yarr/YarrPattern.cpp:
241         (JSC::Yarr::CharacterClassConstructor::charClass):
242         * yarr/YarrPattern.h:
243         (CharacterClass):
244         (JSC::Yarr::CharacterClass::CharacterClass):
245
246 2013-04-11  Michael Saboff  <msaboff@apple.com>
247
248         Added UNLIKELY() suggested in https://bugs.webkit.org/show_bug.cgi?id=114366
249         after checking in the original change. 
250
251         Rubber-stamped by Jessie Berlin.
252
253         * dfg/DFGOperations.cpp:
254
255 2013-04-10  Benjamin Poulain  <benjamin@webkit.org>
256
257         Unify JSC Parser's error and error message
258         https://bugs.webkit.org/show_bug.cgi?id=114363
259
260         Reviewed by Geoffrey Garen.
261
262         The parser kept the error state over two attributes:
263         error and errorMessage. They were changed in sync,
264         but had some discrepancy (for example, the error message
265         was always defined to something).
266
267         This patch unifies the two. There is an error if
268         if the error message is non-null or if the parsing finished
269         before the end.
270
271         This also gets rid of the allocation of the error message
272         when instantiating a parser.
273
274         * parser/Parser.cpp:
275         (JSC::::Parser):
276         (JSC::::parseInner):
277         (JSC::::parseSourceElements):
278         (JSC::::parseVarDeclaration):
279         (JSC::::parseConstDeclaration):
280         (JSC::::parseForStatement):
281         (JSC::::parseSwitchStatement):
282         (JSC::::parsePrimaryExpression):
283         * parser/Parser.h:
284         (JSC::Parser::updateErrorMessage):
285         (JSC::Parser::updateErrorWithNameAndMessage):
286         (JSC::Parser::hasError):
287         (Parser):
288
289 2013-04-10  Oliver Hunt  <oliver@apple.com>
290
291         Set trap is not being called for API objects
292         https://bugs.webkit.org/show_bug.cgi?id=114403
293
294         Reviewed by Anders Carlsson.
295
296         Intercept putByIndex on the callback object and add tests
297         to make sure we don't regress in future.
298
299         * API/JSCallbackObject.h:
300         (JSCallbackObject):
301         * API/JSCallbackObjectFunctions.h:
302         (JSC::::putByIndex):
303         (JSC):
304         * API/tests/testapi.c:
305         (PropertyCatchalls_setProperty):
306         * API/tests/testapi.js:
307
308 2013-04-10  Benjamin Poulain  <bpoulain@apple.com>
309
310         Mass remove all the empty directories
311
312         Rubberstamped by Ryosuke Niwa.
313
314         * qt/api: Removed.
315         * qt/benchmarks/qscriptengine: Removed.
316         * qt/benchmarks/qscriptvalue: Removed.
317         * qt/tests/qscriptengine: Removed.
318         * qt/tests/qscriptstring: Removed.
319         * qt/tests/qscriptvalue: Removed.
320         * qt/tests/qscriptvalueiterator: Removed.
321
322 2013-04-10  Mark Hahnenberg  <mhahnenberg@apple.com>
323
324         JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
325         https://bugs.webkit.org/show_bug.cgi?id=114235
326
327         Reviewed by Filip Pizlo.
328
329         If the object doesn't have any properties but the prototype does, we'll assume those prototype properties are 
330         accessible in the base object's backing store, which is bad.
331
332         * runtime/JSObject.cpp:
333         (JSC::JSObject::getPropertyNames):
334         (JSC::JSObject::getOwnNonIndexPropertyNames):
335         * runtime/PropertyNameArray.h:
336         (JSC::PropertyNameArray::PropertyNameArray):
337         (JSC::PropertyNameArray::setNumCacheableSlotsForObject):
338         (JSC::PropertyNameArray::setBaseObject):
339         (PropertyNameArray):
340
341 2013-04-10  Patrick Gansterer  <paroga@webkit.org>
342
343         Remove code duplicates from MacroAssemblerARM
344         https://bugs.webkit.org/show_bug.cgi?id=104457
345
346         Reviewed by Oliver Hunt.
347
348         Reuse some existing methods to avoid duplicated code.
349
350         * assembler/MacroAssemblerARM.h:
351         (JSC::MacroAssemblerARM::store8):
352         (JSC::MacroAssemblerARM::store32):
353         (JSC::MacroAssemblerARM::swap):
354         (JSC::MacroAssemblerARM::add32):
355         (JSC::MacroAssemblerARM::sub32):
356
357 2013-04-10  Michael Saboff  <msaboff@apple.com>
358
359         DFG: Negative size for new Array() interpreted as large unsigned int
360         https://bugs.webkit.org/show_bug.cgi?id=114366
361
362         Reviewed by Oliver Hunt.
363
364         Added new check in operationNewArrayWithSize() for a negative
365         size.  If size is negative throw a "RangeError: Array size is not a
366         small enough positive integer" exception.
367
368         * dfg/DFGOperations.cpp:
369
370 2013-04-10  peavo@outlook.com  <peavo@outlook.com>
371
372         WinCairo build fails to link.
373         https://bugs.webkit.org/show_bug.cgi?id=114358
374
375         Reviewed by Brent Fulgham.
376
377         Export the symbol WTF::MD5::checksum().
378
379         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
380         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
381
382 2013-04-08  Anders Carlsson  <andersca@apple.com>
383
384         Remove unneeded headers from FrameLoader.h
385         https://bugs.webkit.org/show_bug.cgi?id=114223
386
387         Reviewed by Geoffrey Garen.
388
389         Update for WTF changes.
390
391         * bytecode/SpeculatedType.h:
392         * runtime/JSCJSValue.h:
393
394 2013-04-09  Geoffrey Garen  <ggaren@apple.com>
395
396         Removed bitrotted TimeoutChecker code
397         https://bugs.webkit.org/show_bug.cgi?id=114336
398
399         Reviewed by Alexey Proskuryakov.
400
401         This mechanism hasn't worked for a while.
402
403         MarkL is working on a new version of this feature with a distinct
404         implementation.
405
406         * API/APIShims.h:
407         (JSC::APIEntryShim::~APIEntryShim):
408         (JSC::APIEntryShim::init):
409         * GNUmakefile.list.am:
410         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
411         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
412         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
413         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
414         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
415         * JavaScriptCore.xcodeproj/project.pbxproj:
416         * Target.pri:
417         * dfg/DFGGPRInfo.h:
418         * jit/JIT.cpp:
419         * jit/JIT.h:
420         * jit/JITStubs.cpp:
421         * jit/JITStubs.h:
422         * jit/JSInterfaceJIT.h:
423         (JSInterfaceJIT):
424         * runtime/JSGlobalData.cpp:
425         (JSC::JSGlobalData::JSGlobalData):
426         * runtime/JSGlobalData.h:
427         * runtime/JSGlobalObject.cpp:
428         * runtime/JSONObject.cpp:
429         (JSC::Stringifier::appendStringifiedValue):
430         (JSC::Walker::walk):
431         * runtime/TimeoutChecker.cpp: Removed.
432         * runtime/TimeoutChecker.h: Removed.
433
434 2013-04-10  Oliver Hunt  <oliver@apple.com>
435
436         REGRESSION (r148073): WebKit Nightly r148082 crashes on launch in JSObjectSetPrivate
437         https://bugs.webkit.org/show_bug.cgi?id=114341
438
439         Reviewed by Alexey Proskuryakov.
440
441         Make JSObjectSetPrivate use uncheckedToJS as some clients
442         clear their private data during finalization for some reason.
443
444         * API/JSObjectRef.cpp:
445         (JSObjectSetPrivate):
446
447 2013-04-09  Oliver Hunt  <oliver@apple.com>
448
449         Add liveness tests to JSC API entry points
450         https://bugs.webkit.org/show_bug.cgi?id=114318
451
452         Reviewed by Geoffrey Garen.
453
454         Add simple checks for the existence of a method table on any
455         JSCells passed across the API.  This in turn forces a structure
456         validity test.
457
458         * API/APICast.h:
459         (toJS):
460         (toJSForGC):
461         (unsafeToJS):
462         * API/JSObjectRef.cpp:
463         (JSObjectGetPrivate):
464
465 2013-04-09  Oliver Hunt  <oliver@apple.com>
466
467         Rollout last patch as it destroyed everything
468
469         * API/APICast.h:
470         (toJS):
471         (toJSForGC):
472
473 2013-04-09  Oliver Hunt  <oliver@apple.com>
474
475         Add liveness tests to JSC API entry points
476         https://bugs.webkit.org/show_bug.cgi?id=114318
477
478         Reviewed by Filip Pizlo.
479
480         Add simple checks for the existence of a method table on any
481         JSCells passed across the API.  This in turn forces a structure
482         validity test.
483
484         * API/APICast.h:
485         (toJS):
486         (toJSForGC):
487
488 2013-04-09  Balazs Kilvady  <kilvadyb@homejinni.com>
489
490         LLInt conditional branch compilation fault on MIPS.
491         https://bugs.webkit.org/show_bug.cgi?id=114264
492
493         Reviewed by Filip Pizlo.
494
495         Fix conditional branch compilation in LLInt offlineasm.
496
497         * offlineasm/mips.rb:
498
499 2013-04-08  Mark Hahnenberg  <mhahnenberg@apple.com>
500
501         JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
502         https://bugs.webkit.org/show_bug.cgi?id=114235
503
504         Reviewed by Geoffrey Garen.
505
506         Due to the way that numCacheableSlots is currently calculated, checking an object's prototype for enumerable 
507         properties causes us not to cache any properties at all. We should only cache properties on the object itself
508         since we currently don't take advantage of any sort of name caching for properties in the prototype chain.
509         This fix undoes a ~2% SunSpider regression caused by http://trac.webkit.org/changeset/147570.
510
511         * runtime/JSObject.cpp:
512         (JSC::JSObject::getOwnNonIndexPropertyNames):
513
514 2013-04-09  Ryosuke Niwa  <rniwa@webkit.org>
515
516         Remove yarr.gyp
517         https://bugs.webkit.org/show_bug.cgi?id=114247
518
519         Reviewed by Benjamin Poulain.
520
521         * yarr/yarr.gyp: Removed.
522
523 2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>
524
525         Remove JavaScriptCore.gyp/gypi
526         https://bugs.webkit.org/show_bug.cgi?id=114238
527
528         Reviewed by Benjamin Poulain.
529
530         * JavaScriptCore.gyp: Removed.
531         * JavaScriptCore.gyp/.gitignore: Removed.
532         * JavaScriptCore.gypi: Removed.
533
534 2013-04-08  Vahag Vardanyan  <vaag@ispras.ru>
535
536         Adds fromCharCode intrinsic support.
537         https://bugs.webkit.org/show_bug.cgi?id=104807
538
539         Reviewed by Oliver Hunt.
540
541         Switch to using fromCharCode intrinsic instead of call operation in some cases.
542
543         * dfg/DFGAbstractState.cpp:
544         (JSC::DFG::AbstractState::executeEffects):
545         * dfg/DFGByteCodeParser.cpp:
546         (JSC::DFG::ByteCodeParser::handleIntrinsic):
547         * dfg/DFGFixupPhase.cpp:
548         (JSC::DFG::FixupPhase::fixupNode):
549         * dfg/DFGNodeType.h:
550         (DFG):
551         * dfg/DFGOperations.cpp:
552         * dfg/DFGOperations.h:
553         * dfg/DFGPredictionPropagationPhase.cpp:
554         (JSC::DFG::PredictionPropagationPhase::propagate):
555         * dfg/DFGSpeculativeJIT.cpp:
556         (JSC::DFG::SpeculativeJIT::compileFromCharCode):
557         (DFG):
558         * dfg/DFGSpeculativeJIT.h:
559         (JSC::DFG::SpeculativeJIT::callOperation):
560         (SpeculativeJIT):
561         * dfg/DFGSpeculativeJIT32_64.cpp:
562         (JSC::DFG::SpeculativeJIT::compile):
563         * dfg/DFGSpeculativeJIT64.cpp:
564         (JSC::DFG::SpeculativeJIT::compile):
565         * runtime/StringConstructor.cpp:
566         (JSC::stringFromCharCode):
567         (JSC):
568         * runtime/StringConstructor.h:
569         (JSC):
570
571 2013-04-08  Benjamin Poulain  <benjamin@webkit.org>
572
573         Remove HTML Notification
574         https://bugs.webkit.org/show_bug.cgi?id=114231
575
576         Reviewed by Ryosuke Niwa.
577
578         * Configurations/FeatureDefines.xcconfig:
579
580 2013-04-05  Roger Fong  <roger_fong@apple.com>
581
582         Build fix.
583
584         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
585         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
586
587 2013-04-08  Filip Pizlo  <fpizlo@apple.com>
588
589         DFG should be able to inline string equality comparisons
590         https://bugs.webkit.org/show_bug.cgi?id=114224
591
592         Reviewed by Oliver Hunt.
593         
594         Inline 8-bit string equality, go to slow path for 16-bit strings. 2x speed-up for string equality
595         comparisons on 8-bit strings. 20-50% speed-up on JSRegress/HashMap tests. 30% speed-up on
596         string-fasta. 2% speed-up on SunSpider overall. Some small speed-ups elsewhere.
597
598         This is a gnarly change but we have loads of test coverage already between the HashMap tests and
599         preexisting DFG string equality tests (which appear to have been designed to test OSR exits, but
600         also give us good overall coverage on string equality behavior).
601
602         * dfg/DFGFixupPhase.cpp:
603         (JSC::DFG::FixupPhase::fixupNode):
604         * dfg/DFGOperations.cpp:
605         * dfg/DFGOperations.h:
606         * dfg/DFGSpeculativeJIT.cpp:
607         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
608         (JSC::DFG::SpeculativeJIT::compare):
609         (JSC::DFG::SpeculativeJIT::compileStrictEq):
610         (JSC::DFG::SpeculativeJIT::compileStringEquality):
611         (DFG):
612         * dfg/DFGSpeculativeJIT.h:
613         (SpeculativeJIT):
614
615 2013-04-08  Geoffrey Garen  <ggaren@apple.com>
616
617         Stop #include-ing all of JavaScriptCore in every DOM-related file
618         https://bugs.webkit.org/show_bug.cgi?id=114220
619
620         Reviewed by Sam Weinig.
621
622         I separated WeakInlines.h from Weak.h so WebCore data types that need
623         to declare a Weak<T> data member don't have to #include all of the
624         infrastructure for accessing that data member.
625
626         This also required separating Weak<T> from PassWeak<T> by removing the
627         WeakImplAccessor class template and pushing code down into its subclasses.
628
629         * API/JSWeakObjectMapRefPrivate.cpp:
630         * JavaScriptCore.xcodeproj/project.pbxproj:
631         * bytecode/UnlinkedCodeBlock.h:
632         * heap/PassWeak.h:
633         (JSC):
634         (PassWeak):
635         (JSC::::PassWeak):
636         (JSC::::operator):
637         (JSC::::get):
638         * heap/SlotVisitorInlines.h:
639         * heap/Weak.h:
640         (JSC):
641         (Weak):
642         * heap/WeakInlines.h: Copied from Source/JavaScriptCore/heap/Weak.h.
643         (JSC):
644         (JSC::::Weak):
645         (JSC::::operator):
646         (JSC::::get):
647         (JSC::::was):
648         (JSC::weakClear):
649         * jit/JITThunks.h:
650         * runtime/RegExpCache.h:
651         * runtime/Structure.h:
652         * runtime/WeakGCMap.h:
653
654 2013-04-05  Roger Fong  <roger_fong@apple.com>
655
656         Windows build fix fix.
657
658         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
659
660 2013-04-05  Roger Fong  <roger_fong@apple.com>
661
662         Windows build fix.
663
664         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
665         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
666
667 2013-04-08  Oliver Hunt  <oliver@apple.com>
668
669         Make resolve more robust in the face of lookup misses
670         https://bugs.webkit.org/show_bug.cgi?id=114211
671
672         Reviewed by Filip Pizlo.
673
674         This simply short circuits the resolve operations in the
675         event that we don't find a path to a property.  There's no
676         repro case for this happening unfortunately.
677
678         * llint/LLIntSlowPaths.cpp:
679         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
680
681 2013-04-08  Oliver Hunt  <oliver@apple.com>
682
683         Build fix.
684
685         * assembler/ARMv7Assembler.h:
686         (ARMv7Assembler):
687
688 2013-04-08  Justin Haygood  <jhaygood@reaktix.com>
689
690         Allow KeywordLookupGenerator.py to work on Windows with Windows style line endings
691         https://bugs.webkit.org/show_bug.cgi?id=63234
692
693         Reviewed by Oliver Hunt.
694
695         * KeywordLookupGenerator.py:
696         (parseKeywords):
697
698 2013-04-08  Filip Pizlo  <fpizlo@apple.com>
699
700         REGRESSION(r146669): Assertion hit in JSC::DFG::SpeculativeJIT::fillSpeculateCell() running webgl tests
701         https://bugs.webkit.org/show_bug.cgi?id=114129
702         <rdar://problem/13594898>
703
704         Reviewed by Darin Adler.
705         
706         The check to see if we need a cell check when simplifying a GetById or PutById needs to be hoisted to
707         above where we abstractly execute the instruction, since after we abstracting execute it, it will
708         seem like it no longer needs the cell check.
709
710         * dfg/DFGConstantFoldingPhase.cpp:
711         (JSC::DFG::ConstantFoldingPhase::foldConstants):
712
713 2013-04-07  Oliver Hunt  <oliver@apple.com>
714
715         Add bounds checking for WTF::Vector::operator[]
716         https://bugs.webkit.org/show_bug.cgi?id=89600
717
718         Reviewed by Filip Pizlo.
719
720         Make a few JSC classes opt-out of release mode bounds checking.
721
722         * assembler/AssemblerBuffer.h:
723         (AssemblerBuffer):
724         * assembler/AssemblerBufferWithConstantPool.h:
725         (AssemblerBufferWithConstantPool):
726         * bytecode/CodeBlock.cpp:
727         (JSC::CodeBlock::CodeBlock):
728         (JSC::CodeBlock::bytecodeOffset):
729         (JSC):
730         (JSC::replaceExistingEntries):
731         * bytecode/CodeBlock.h:
732         (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
733         (JSC::CodeBlock::callReturnIndexVector):
734         (JSC::CodeBlock::codeOrigins):
735         (RareData):
736         * bytecode/UnlinkedCodeBlock.h:
737         (JSC::UnlinkedEvalCodeBlock::adoptVariables):
738         (UnlinkedEvalCodeBlock):
739         * bytecompiler/BytecodeGenerator.cpp:
740         (JSC::BytecodeGenerator::BytecodeGenerator):
741         (JSC::BytecodeGenerator::emitNewArray):
742         (JSC::BytecodeGenerator::emitCall):
743         (JSC::BytecodeGenerator::emitConstruct):
744         * bytecompiler/BytecodeGenerator.h:
745         (CallArguments):
746         (JSC::BytecodeGenerator::instructions):
747         (BytecodeGenerator):
748         * bytecompiler/StaticPropertyAnalysis.h:
749         (JSC::StaticPropertyAnalysis::create):
750         (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis):
751         (StaticPropertyAnalysis):
752         * bytecompiler/StaticPropertyAnalyzer.h:
753         (StaticPropertyAnalyzer):
754         (JSC::StaticPropertyAnalyzer::StaticPropertyAnalyzer):
755         * dfg/DFGJITCompiler.cpp:
756         (JSC::DFG::JITCompiler::link):
757         * parser/ASTBuilder.h:
758         (ASTBuilder):
759         * runtime/ArgList.h:
760         (MarkedArgumentBuffer):
761         * runtime/ArrayPrototype.cpp:
762         (JSC::arrayProtoFuncSort):
763
764 2013-04-07  Benjamin Poulain  <benjamin@webkit.org>
765
766         Use Vector::reserveInitialCapacity() when possible in JavaScriptCore runtime
767         https://bugs.webkit.org/show_bug.cgi?id=114111
768
769         Reviewed by Andreas Kling.
770
771         Almost all the code was already using Vector::reserveInitialCapacity()
772         and Vector::uncheckedAppend(). Fix the remaining parts.
773
774         * runtime/ArgList.h:
775         (MarkedArgumentBuffer): The type VectorType is unused.
776
777         * runtime/ArrayPrototype.cpp:
778         (JSC::arrayProtoFuncSort):
779         Move the variable closer to where it is needed.
780
781         * runtime/JSArray.cpp:
782         (JSC::JSArray::setLengthWithArrayStorage):
783         * runtime/JSObject.cpp:
784         (JSC::JSObject::getOwnPropertyNames):
785
786 2013-04-07  Patrick Gansterer  <paroga@webkit.org>
787
788         Remove references to Skia and V8 from CMake files
789         https://bugs.webkit.org/show_bug.cgi?id=114130
790
791         Reviewed by Geoffrey Garen.
792
793         * shell/PlatformBlackBerry.cmake:
794
795 2013-04-07  David Kilzer  <ddkilzer@apple.com>
796
797         Remove the rest of SVG_DOM_OBJC_BINDINGS
798         <http://webkit.org/b/114112>
799
800         Reviewed by Geoffrey Garen.
801
802         * Configurations/FeatureDefines.xcconfig:
803         - Remove ENABLE_SVG_DOM_OBJC_BINDINGS macro.
804
805 2013-04-07  Oliver Hunt  <oliver@apple.com>
806
807         Inspector should display information about non-object exceptions
808         https://bugs.webkit.org/show_bug.cgi?id=114123
809
810         Reviewed by Adele Peterson.
811
812         Make sure we store the right stack information, even when throwing
813         a primitive.
814
815         * interpreter/CallFrame.h:
816         (JSC::ExecState::clearSupplementaryExceptionInfo):
817         (ExecState):
818         * interpreter/Interpreter.cpp:
819         (JSC::Interpreter::addStackTraceIfNecessary):
820         (JSC::Interpreter::throwException):
821
822 2013-04-06  Oliver Hunt  <oliver@apple.com>
823
824         Unify the many and varied stack trace mechanisms, and make the result sane.
825         https://bugs.webkit.org/show_bug.cgi?id=114072
826
827         Reviewed by Filip Pizlo.
828
829         Makes JSC::StackFrame record the bytecode offset and other necessary data
830         rather than requiring us to perform eager evaluation of the line number, etc.
831         Then remove most of the users of retrieveLastCaller, as most of them were
832         using it to create a stack trace in a fairly incomplete and inefficient way.
833
834         StackFrame now also has a couple of helpers to get the line and column info.
835
836         * API/JSContextRef.cpp:
837         (JSContextCreateBacktrace):
838         * bytecompiler/BytecodeGenerator.cpp:
839         (JSC::BytecodeGenerator::emitDebugHook):
840         * interpreter/Interpreter.cpp:
841         (JSC):
842         (JSC::Interpreter::dumpRegisters):
843         (JSC::Interpreter::unwindCallFrame):
844         (JSC::getBytecodeOffsetForCallFrame):
845         (JSC::getCallerInfo):
846         (JSC::StackFrame::line):
847         (JSC::StackFrame::column):
848         (JSC::StackFrame::expressionInfo):
849         (JSC::StackFrame::toString):
850         (JSC::Interpreter::getStackTrace):
851         (JSC::Interpreter::addStackTraceIfNecessary):
852         (JSC::Interpreter::retrieveCallerFromVMCode):
853         * interpreter/Interpreter.h:
854         (StackFrame):
855         (Interpreter):
856         * runtime/Error.cpp:
857         (JSC::throwError):
858         * runtime/JSGlobalData.h:
859         (JSC):
860         (JSGlobalData):
861         * runtime/JSGlobalObject.cpp:
862         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
863
864 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
865
866         Removed v8 bindings hooks from IDL files
867         https://bugs.webkit.org/show_bug.cgi?id=114091
868
869         Reviewed by Anders Carlsson and Sam Weinig.
870
871         * heap/HeapStatistics.h:
872
873 2013-04-03  Roger Fong  <roger_fong@apple.com>
874
875         Windows VS2010 build fix.
876
877         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
878
879 2013-04-06  Zan Dobersek  <zdobersek@igalia.com>
880
881         Remove the remaining PLATFORM(CHROMIUM) guard in JavaScriptCore
882         https://bugs.webkit.org/show_bug.cgi?id=114082
883
884         Reviewed by Ryosuke Niwa.
885
886         * runtime/JSExportMacros.h: Remove the remaining PLATFORM(CHROMIUM) guard.
887
888 2013-04-06  Ed Bartosh  <bartosh@gmail.com>
889
890         --minimal build fails with error: control reaches end of non-void function
891         https://bugs.webkit.org/show_bug.cgi?id=114085
892
893         Reviewed by Oliver Hunt.
894
895         * interpreter/Interpreter.cpp: return 0 if JIT is not enabled
896         (JSC::getBytecodeOffsetForCallFrame):
897
898 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
899
900         Try to fix the Windows build.
901
902         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
903         Added back a symbol that is exported.
904
905 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
906
907         Try to fix the Windows build.
908
909         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
910         Removed symbols that aren't exported.
911
912 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
913
914         Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
915         https://bugs.webkit.org/show_bug.cgi?id=114094
916
917         Reviewed by Anders Carlsson.
918
919         * API/JSContextRef.cpp:
920         (JSContextCreateBacktrace):
921         * bytecompiler/BytecodeGenerator.cpp:
922         (JSC::BytecodeGenerator::emitDebugHook):
923         * interpreter/Interpreter.cpp:
924         (JSC):
925         (JSC::Interpreter::dumpRegisters):
926         (JSC::Interpreter::unwindCallFrame):
927         (JSC::getLineNumberForCallFrame):
928         (JSC::getCallerInfo):
929         (JSC::Interpreter::getStackTrace):
930         (JSC::Interpreter::addStackTraceIfNecessary):
931         (JSC::Interpreter::retrieveCallerFromVMCode):
932         * interpreter/Interpreter.h:
933         (StackFrame):
934         (JSC::StackFrame::toString):
935         (JSC::StackFrame::friendlyLineNumber):
936         (Interpreter):
937         * runtime/Error.cpp:
938         (JSC::throwError):
939         * runtime/JSGlobalData.h:
940         (JSC):
941         (JSGlobalData):
942         * runtime/JSGlobalObject.cpp:
943         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
944
945 2013-04-06  Patrick Gansterer  <paroga@webkit.org>
946
947         Unreviewed build fix after r146932.
948
949         * profiler/ProfilerDatabase.cpp:
950         (Profiler):
951
952 2013-04-06  Patrick Gansterer  <paroga@webkit.org>
953
954         Do not call getenv() on Windows CE where it does not exist.
955
956         * runtime/JSGlobalData.cpp:
957         (JSC::JSGlobalData::JSGlobalData):
958
959 2013-04-05  Benjamin Poulain  <benjamin@webkit.org>
960
961         Second attempt to fix the Windows bot
962
963         Unreviewed.
964
965         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
966         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
967
968 2013-04-05  Benjamin Poulain  <bpoulain@apple.com>
969
970         Attempt to fix the Windows bot
971
972         Unreviewed.
973
974         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
975         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
976         r147825 removed the symbol for nullptr_t. Add it back.
977
978 2013-04-02  Roger Fong  <roger_fong@apple.com>
979
980         Build fix.
981
982         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
983         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
984
985 2013-04-05  Oliver Hunt  <oliver@apple.com>
986
987         Build fix.
988
989         * interpreter/Interpreter.cpp:
990         (JSC::getBytecodeOffsetForCallFrame):
991
992 2013-04-05  Oliver Hunt  <oliver@apple.com>
993
994         Unify the many and varied stack trace mechanisms, and make the result sane.
995         https://bugs.webkit.org/show_bug.cgi?id=114072
996
997         Reviewed by Filip Pizlo.
998
999         Makes JSC::StackFrame record the bytecode offset and other necessary data
1000         rather than requiring us to perform eager evaluation of the line number, etc.
1001         Then remove most of the users of retrieveLastCaller, as most of them were
1002         using it to create a stack trace in a fairly incomplete and inefficient way.
1003
1004         StackFrame now also has a couple of helpers to get the line and column info.
1005
1006         * API/JSContextRef.cpp:
1007         (JSContextCreateBacktrace):
1008         * bytecompiler/BytecodeGenerator.cpp:
1009         (JSC::BytecodeGenerator::emitDebugHook):
1010         * interpreter/Interpreter.cpp:
1011         (JSC):
1012         (JSC::Interpreter::dumpRegisters):
1013         (JSC::Interpreter::unwindCallFrame):
1014         (JSC::getBytecodeOffsetForCallFrame):
1015         (JSC::getCallerInfo):
1016         (JSC::StackFrame::line):
1017         (JSC::StackFrame::column):
1018         (JSC::StackFrame::expressionInfo):
1019         (JSC::StackFrame::toString):
1020         (JSC::Interpreter::getStackTrace):
1021         (JSC::Interpreter::addStackTraceIfNecessary):
1022         (JSC::Interpreter::retrieveCallerFromVMCode):
1023         * interpreter/Interpreter.h:
1024         (StackFrame):
1025         (Interpreter):
1026         * runtime/Error.cpp:
1027         (JSC::throwError):
1028         * runtime/JSGlobalData.h:
1029         (JSC):
1030         (JSGlobalData):
1031         * runtime/JSGlobalObject.cpp:
1032         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
1033
1034 2013-04-05  Mark Hahnenberg  <mhahnenberg@apple.com>
1035
1036         tryCacheGetByID sets StructureStubInfo accessType to an incorrect value
1037         https://bugs.webkit.org/show_bug.cgi?id=114068
1038
1039         Reviewed by Geoffrey Garen.
1040
1041         In the case where we have a non-Value cacheable property, we set the StructureStubInfo accessType to 
1042         get_by_id_self, but then we don't patch self and instead patch in a get_by_id_self_fail. This leads to 
1043         incorrect profiling data so when the DFG compiles the function, it uses a GetByOffset rather than a GetById, 
1044         which leads to loading a GetterSetter directly out of an object.
1045
1046         * jit/JITStubs.cpp:
1047         (JSC::tryCacheGetByID):
1048         (JSC::DEFINE_STUB_FUNCTION):
1049
1050 2013-04-05  Filip Pizlo  <fpizlo@apple.com>
1051
1052         If CallFrame::trueCallFrame() knows that it's about to read garbage instead of a valid CodeOrigin/InlineCallFrame, then it should give up and return 0 and all callers should be robust against this
1053         https://bugs.webkit.org/show_bug.cgi?id=114062
1054
1055         Reviewed by Oliver Hunt.
1056
1057         * bytecode/CodeBlock.h:
1058         (JSC::CodeBlock::canGetCodeOrigin):
1059         (CodeBlock):
1060         * interpreter/CallFrame.cpp:
1061         (JSC::CallFrame::trueCallFrame):
1062         * interpreter/Interpreter.cpp:
1063         (JSC::Interpreter::getStackTrace):
1064
1065 2013-04-05  Geoffrey Garen  <ggaren@apple.com>
1066
1067         Made USE(JSC) unconditional
1068         https://bugs.webkit.org/show_bug.cgi?id=114058
1069
1070         Reviewed by Anders Carlsson.
1071
1072         * config.h:
1073
1074 2013-04-05  Filip Pizlo  <fpizlo@apple.com>
1075
1076         Unreviewed, rolling out http://trac.webkit.org/changeset/147729
1077
1078         It's causing a bunch of breakage on some more strict compilers:
1079         <inline asm>:1267:2: error: ambiguous instructions require an explicit suffix (could be 'ficomps', or 'ficompl')
1080
1081         * offlineasm/x86.rb:
1082
1083 2013-04-05  Roger Fong  <roger_fong@apple.com>
1084
1085         More VS2010 solution makefile fixes.
1086         <rdar://problem/13588964>
1087
1088         * JavaScriptCore.vcxproj/JavaScriptCore.make:
1089
1090 2013-04-05  Allan Sandfeld Jensen  <allan.jensen@digia.com>
1091
1092         LLint should be able to use x87 instead of SSE for floating pointer
1093
1094         https://bugs.webkit.org/show_bug.cgi?id=112239
1095
1096         Reviewed by Filip Pizlo.
1097
1098         Implements LLInt floating point operations in x87, to ensure we support
1099         x86 without SSE2.
1100
1101         X86 (except 64bit) now defaults to using x87 instructions in order to
1102         support all 32bit x86 back to i686. The implementation uses the fucomi
1103         instruction from i686 which sets the new minimum.
1104
1105         * offlineasm/x86.rb:
1106
1107 2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>
1108
1109         Unreviewed EFL build fix.
1110
1111         We had undefined reference to `JSC::CodeOrigin::maximumBytecodeIndex'.
1112
1113         * bytecode/CodeBlock.cpp:
1114         (JSC::CodeBlock::findClosureCallForReturnPC):
1115         (JSC::CodeBlock::bytecodeOffset):
1116
1117 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
1118
1119         Stop pretending that statements return a value
1120         https://bugs.webkit.org/show_bug.cgi?id=113969
1121
1122         Reviewed by Oliver Hunt.
1123
1124         Expressions have an intrinsic value, which they return to their parent
1125         in the AST.
1126
1127         Statements just execute for effect in sequence.
1128
1129         This patch moves emitBytecode into the ExpressionNode and StatementNode
1130         subclasses, and changes the SatementNode subclass to return void. This
1131         eliminates some cruft where we used to return 0, or try to save a bogus
1132         register and return it, as if a statement had a consuming parent in the
1133         AST.
1134
1135         * bytecompiler/BytecodeGenerator.h:
1136         (JSC::BytecodeGenerator::emitNode):
1137         (BytecodeGenerator):
1138         (JSC::BytecodeGenerator::emitNodeInConditionContext):
1139         * bytecompiler/NodesCodegen.cpp:
1140         (JSC::ConstStatementNode::emitBytecode):
1141         (JSC::BlockNode::emitBytecode):
1142         (JSC::EmptyStatementNode::emitBytecode):
1143         (JSC::DebuggerStatementNode::emitBytecode):
1144         (JSC::ExprStatementNode::emitBytecode):
1145         (JSC::VarStatementNode::emitBytecode):
1146         (JSC::IfNode::emitBytecode):
1147         (JSC::IfElseNode::emitBytecode):
1148         (JSC::DoWhileNode::emitBytecode):
1149         (JSC::WhileNode::emitBytecode):
1150         (JSC::ForNode::emitBytecode):
1151         (JSC::ForInNode::emitBytecode):
1152         (JSC::ContinueNode::emitBytecode):
1153         (JSC::BreakNode::emitBytecode):
1154         (JSC::ReturnNode::emitBytecode):
1155         (JSC::WithNode::emitBytecode):
1156         (JSC::CaseClauseNode::emitBytecode):
1157         (JSC::CaseBlockNode::emitBytecodeForBlock):
1158         (JSC::SwitchNode::emitBytecode):
1159         (JSC::LabelNode::emitBytecode):
1160         (JSC::ThrowNode::emitBytecode):
1161         (JSC::TryNode::emitBytecode):
1162         (JSC::ScopeNode::emitStatementsBytecode):
1163         (JSC::ProgramNode::emitBytecode):
1164         (JSC::EvalNode::emitBytecode):
1165         (JSC::FunctionBodyNode::emitBytecode):
1166         (JSC::FuncDeclNode::emitBytecode):
1167         * parser/NodeConstructors.h:
1168         (JSC::PropertyListNode::PropertyListNode):
1169         (JSC::ArgumentListNode::ArgumentListNode):
1170         * parser/Nodes.h:
1171         (Node):
1172         (ExpressionNode):
1173         (StatementNode):
1174         (ConstStatementNode):
1175         (BlockNode):
1176         (EmptyStatementNode):
1177         (DebuggerStatementNode):
1178         (ExprStatementNode):
1179         (VarStatementNode):
1180         (IfNode):
1181         (IfElseNode):
1182         (DoWhileNode):
1183         (WhileNode):
1184         (ForNode):
1185         (ForInNode):
1186         (ContinueNode):
1187         (BreakNode):
1188         (ReturnNode):
1189         (WithNode):
1190         (LabelNode):
1191         (ThrowNode):
1192         (TryNode):
1193         (ProgramNode):
1194         (EvalNode):
1195         (FunctionBodyNode):
1196         (FuncDeclNode):
1197         (CaseBlockNode):
1198         (SwitchNode):
1199
1200 2013-04-04  Oliver Hunt  <oliver@apple.com>
1201
1202         Exception stack unwinding doesn't handle inline callframes correctly
1203         https://bugs.webkit.org/show_bug.cgi?id=113952
1204
1205         Reviewed by Geoffrey Garen.
1206
1207         The basic problem here is that the exception stack unwinding was
1208         attempting to be "clever" and avoid doing a correct stack walk
1209         as it "knew" inline callframes couldn't have exception handlers.
1210
1211         This used to be safe as the exception handling machinery was
1212         designed to fail gently and just claim that no handler existed.
1213         This was "safe" and even "correct" inasmuch as we currently
1214         don't run any code with exception handlers through the dfg.
1215
1216         This patch fixes the logic by simply making everything uniformly
1217         use the safe stack walking machinery, and making the correct
1218         boundary checks occur everywhere that they should.
1219
1220         * bytecode/CodeBlock.cpp:
1221         (JSC::CodeBlock::findClosureCallForReturnPC):
1222         (JSC::CodeBlock::bytecodeOffset):
1223         * interpreter/Interpreter.cpp:
1224         (JSC):
1225         (JSC::Interpreter::dumpRegisters):
1226         (JSC::Interpreter::unwindCallFrame):
1227         (JSC::getCallerInfo):
1228         (JSC::Interpreter::getStackTrace):
1229         (JSC::Interpreter::retrieveCallerFromVMCode):
1230
1231 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
1232
1233         Removed a defunct comment
1234         https://bugs.webkit.org/show_bug.cgi?id=113948
1235
1236         Reviewed by Oliver Hunt.
1237
1238         This is also a convenient way to test the EWS.
1239
1240         * bytecompiler/BytecodeGenerator.cpp:
1241         (JSC):
1242
1243 2013-04-04  Martin Robinson  <mrobinson@igalia.com>
1244
1245         [GTK] Remove the gyp build
1246         https://bugs.webkit.org/show_bug.cgi?id=113942
1247
1248         Reviewed by Gustavo Noronha Silva.
1249
1250         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Removed.
1251         * JavaScriptCore.gyp/redirect-stdout.sh: Removed.
1252
1253 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
1254
1255         Simplified bytecode generation by merging prefix and postfix nodes
1256         https://bugs.webkit.org/show_bug.cgi?id=113925
1257
1258         Reviewed by Filip Pizlo.
1259
1260         PostfixNode now inherits from PrefixNode, so when we detect that we're
1261         in a context where postifx and prefix are equivalent, PostFixNode can
1262         just call through to PrefixNode codegen, instead of duplicating the
1263         logic.
1264
1265         * bytecompiler/NodesCodegen.cpp:
1266         (JSC::PostfixNode::emitResolve):
1267         (JSC::PostfixNode::emitBracket):
1268         (JSC::PostfixNode::emitDot):
1269         * parser/NodeConstructors.h:
1270         (JSC::PostfixNode::PostfixNode):
1271         * parser/Nodes.h:
1272         (JSC):
1273         (PrefixNode):
1274         (PostfixNode):
1275
1276 2013-04-04  Andras Becsi  <andras.becsi@digia.com>
1277
1278         Fix the build with GCC 4.8
1279         https://bugs.webkit.org/show_bug.cgi?id=113147
1280
1281         Reviewed by Allan Sandfeld Jensen.
1282
1283         Initialize JSObject* exception to suppress warnings that make
1284         the build fail because of -Werror=maybe-uninitialized.
1285
1286         * runtime/Executable.cpp:
1287         (JSC::FunctionExecutable::compileForCallInternal):
1288         (JSC::FunctionExecutable::compileForConstructInternal):
1289
1290 2013-04-02  Mark Hahnenberg  <mhahnenberg@apple.com>
1291
1292         get_by_pname can become confused when iterating over objects with static properties
1293         https://bugs.webkit.org/show_bug.cgi?id=113831
1294
1295         Reviewed by Geoffrey Garen.
1296
1297         get_by_pname doesn't take static properties into account when using a JSPropertyNameIterator to directly 
1298         access an object's backing store. One way to fix this is to not cache any properties when iterating over 
1299         objects with static properties. This patch fixes the bug that was originally reported on swisscom.ch.
1300
1301         * runtime/JSObject.cpp:
1302         (JSC::JSObject::getOwnNonIndexPropertyNames):
1303         * runtime/JSPropertyNameIterator.cpp:
1304         (JSC::JSPropertyNameIterator::create):
1305         * runtime/PropertyNameArray.h:
1306         (JSC::PropertyNameArray::PropertyNameArray):
1307         (JSC::PropertyNameArray::numCacheableSlots):
1308         (JSC::PropertyNameArray::setNumCacheableSlots):
1309         (PropertyNameArray):
1310
1311 2013-04-02  Geoffrey Garen  <ggaren@apple.com>
1312
1313         DFG should compile a little sooner
1314         https://bugs.webkit.org/show_bug.cgi?id=113835
1315
1316         Unreviewed.
1317
1318         Rolled out r147511 because it was based on incorrect performance
1319         measurement.
1320
1321         * bytecode/CodeBlock.cpp:
1322         (JSC::CodeBlock::optimizationThresholdScalingFactor):
1323
1324 2013-04-02  Geoffrey Garen  <ggaren@apple.com>
1325
1326         DFG should compile a little sooner
1327         https://bugs.webkit.org/show_bug.cgi?id=113835
1328
1329         Reviewed by Michael Saboff.
1330
1331         2% speedup on SunSpider.
1332
1333         2% speedup on JSRegress.
1334
1335         Neutral on Octane, v8, and Kraken.
1336
1337         The worst-hit single sub-test is kraken-stanford-crypto-ccm.js, which gets
1338         18% slower. Since Kraken is neutral overall in its preferred mean, I
1339         think that's OK for now.
1340
1341         (Our array indexing speculation fails pathologically on
1342         kraken-stanford-crypto-ccm.js. Compiling sooner is a regression because
1343         it triggers those failures sooner. I'm going to file some follow-up bugs
1344         explaining how to fix our speculations on this sub-test, at which point
1345         compiling earlier should become a slight speedup on Kraken overall.)
1346
1347         * bytecode/CodeBlock.cpp:
1348         (JSC::CodeBlock::optimizationThresholdScalingFactor): I experimented
1349         with a few different options, including reducing the coefficient 'a'.
1350         A simple linear reduction on instruction count worked best.
1351
1352 2013-04-01  Benjamin Poulain  <benjamin@webkit.org>
1353
1354         Use Vector::reserveInitialCapacity and Vector::uncheckedAppend for JSC's APIs
1355         https://bugs.webkit.org/show_bug.cgi?id=113651
1356
1357         Reviewed by Andreas Kling.
1358
1359         This removes a bunch of branches on initialization and when
1360         filling the vector.
1361
1362         * API/JSCallbackConstructor.cpp:
1363         (JSC::constructJSCallback):
1364         * API/JSCallbackFunction.cpp:
1365         (JSC::JSCallbackFunction::call):
1366         * API/JSCallbackObjectFunctions.h:
1367         (JSC::::construct):
1368         (JSC::::call):
1369         * API/JSObjectRef.cpp:
1370         (JSObjectCopyPropertyNames):
1371
1372 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1373
1374         Fixing borked VS 2010 project file
1375
1376         Unreviewed bot greening.
1377
1378         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1379         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1380
1381 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1382
1383         One more Windows build fix
1384
1385         Unreviewed.
1386
1387         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
1388
1389 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1390
1391         More build fallout fixes.
1392
1393         Unreviewed build fix.
1394
1395         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: Add new export symbols.
1396         * heap/SuperRegion.cpp: Windows didn't like "LLU". 
1397
1398 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1399
1400         r147324 broke the world
1401         https://bugs.webkit.org/show_bug.cgi?id=113704
1402
1403         Unreviewed build fix.
1404
1405         Remove a bunch of unused variables and use the correctly sized types for 32-bit platforms.
1406
1407         * heap/BlockAllocator.cpp:
1408         (JSC::BlockAllocator::BlockAllocator):
1409         * heap/BlockAllocator.h:
1410         (BlockAllocator):
1411         * heap/Heap.cpp:
1412         (JSC::Heap::Heap):
1413         * heap/SuperRegion.cpp:
1414         (JSC::SuperRegion::SuperRegion):
1415         * heap/SuperRegion.h:
1416         (SuperRegion):
1417
1418 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1419
1420         32-bit Windows build fix
1421
1422         Unreviewed build fix.
1423
1424         * heap/SuperRegion.cpp:
1425         * heap/SuperRegion.h: Use uint64_t instead of size_t.
1426         (SuperRegion):
1427
1428 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1429
1430         EFL build fix
1431
1432         Unreviewed build fix.
1433
1434         * CMakeLists.txt:
1435
1436 2013-03-31  Mark Hahnenberg  <mhahnenberg@apple.com>
1437
1438         Regions should be allocated from the same contiguous segment of virtual memory
1439         https://bugs.webkit.org/show_bug.cgi?id=113662
1440
1441         Reviewed by Filip Pizlo.
1442
1443         Instead of letting the OS spread our Regions all over the place, we should allocate them all within 
1444         some range of each other. This change will open the door to some other optimizations, e.g. doing simple 
1445         range checks for our write barriers and compressing JSCell pointers to 32-bits.
1446
1447         Added new SuperRegion class that encapsulates allocating Regions from a contiguous reserved chunk of 
1448         virtual address space. It functions very similarly to the FixedVMPoolExecutableAllocator class used by the JIT.
1449
1450         Also added two new subclasses of Region, NormalRegion and ExcessRegion. 
1451         
1452         NormalRegion is the type of Region that is normally allocated when there is available space remaining 
1453         in the SuperRegion. If we ever run out of space in the SuperRegion, we fall back to allocating 
1454         ExcessRegions, which are identical to how Regions have behaved up until now, i.e. they contain a 
1455         PageAllocationAligned.
1456
1457         We only use the SuperRegion (and NormalRegions) on 64-bit systems, since it doesn't make sense to reserve the 
1458         entire 4 GB address space on 32-bit systems just for the JS heap.
1459
1460         * GNUmakefile.list.am:
1461         * JavaScriptCore.gypi:
1462         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1463         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1464         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1465         * JavaScriptCore.xcodeproj/project.pbxproj:
1466         * Target.pri:
1467         * heap/BlockAllocator.cpp:
1468         (JSC::BlockAllocator::BlockAllocator):
1469         * heap/BlockAllocator.h:
1470         (JSC):
1471         (BlockAllocator):
1472         (JSC::BlockAllocator::allocate):
1473         (JSC::BlockAllocator::allocateCustomSize):
1474         (JSC::BlockAllocator::deallocateCustomSize):
1475         * heap/Heap.cpp:
1476         (JSC::Heap::Heap):
1477         (JSC):
1478         (JSC::Heap::didExceedFixedHeapSizeLimit):
1479         * heap/Heap.h:
1480         (Heap):
1481         * heap/MarkedBlock.cpp:
1482         (JSC::MarkedBlock::create):
1483         * heap/Region.h:
1484         (Region):
1485         (JSC):
1486         (NormalRegion):
1487         (JSC::NormalRegion::base):
1488         (JSC::NormalRegion::size):
1489         (ExcessRegion):
1490         (JSC::ExcessRegion::base):
1491         (JSC::ExcessRegion::size):
1492         (JSC::NormalRegion::NormalRegion):
1493         (JSC::NormalRegion::tryCreate):
1494         (JSC::NormalRegion::tryCreateCustomSize):
1495         (JSC::NormalRegion::reset):
1496         (JSC::ExcessRegion::ExcessRegion):
1497         (JSC::ExcessRegion::~ExcessRegion):
1498         (JSC::ExcessRegion::create):
1499         (JSC::ExcessRegion::createCustomSize):
1500         (JSC::ExcessRegion::reset):
1501         (JSC::Region::Region):
1502         (JSC::Region::initializeBlockList):
1503         (JSC::Region::create):
1504         (JSC::Region::createCustomSize):
1505         (JSC::Region::~Region):
1506         (JSC::Region::destroy):
1507         (JSC::Region::reset):
1508         (JSC::Region::deallocate):
1509         (JSC::Region::base):
1510         (JSC::Region::size):
1511         * heap/SuperRegion.cpp: Added.
1512         (JSC):
1513         (JSC::SuperRegion::SuperRegion):
1514         (JSC::SuperRegion::getAlignedBase):
1515         (JSC::SuperRegion::allocateNewSpace):
1516         (JSC::SuperRegion::notifyNeedPage):
1517         (JSC::SuperRegion::notifyPageIsFree):
1518         * heap/SuperRegion.h: Added.
1519         (JSC):
1520         (SuperRegion):
1521
1522 2013-04-01  Benjamin Poulain  <benjamin@webkit.org>
1523
1524         Remove an unused variable from the ARMv7 Assembler
1525         https://bugs.webkit.org/show_bug.cgi?id=113653
1526
1527         Reviewed by Andreas Kling.
1528
1529         * assembler/ARMv7Assembler.h:
1530         (ARMv7Assembler):
1531
1532 2013-03-31  Adam Barth  <abarth@webkit.org>
1533
1534         [Chromium] Yarr should build using a separate GYP file from JavaScriptCore
1535         https://bugs.webkit.org/show_bug.cgi?id=113652
1536
1537         Reviewed by Nico Weber.
1538
1539         This patch moves JavaScriptCore.gyp to yarr.gyp because Chromium only
1540         uses this GYP file to build yarr.
1541
1542         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp:
1543         * JavaScriptCore.gypi:
1544         * yarr/yarr.gyp: Renamed from Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp.
1545
1546 2013-03-31  Filip Pizlo  <fpizlo@apple.com>
1547
1548         Unreviewed, fix a comment. While thinking about TBAA for array accesses,
1549         I realized that we have to be super careful about aliasing of typed arrays.
1550
1551         * dfg/DFGCSEPhase.cpp:
1552         (JSC::DFG::CSEPhase::getByValLoadElimination):
1553
1554 2013-03-30  Mark Hahnenberg  <mhahnenberg@apple.com>
1555
1556         Move Region into its own header
1557         https://bugs.webkit.org/show_bug.cgi?id=113617
1558
1559         Reviewed by Geoffrey Garen.
1560
1561         BlockAllocator.h is getting a little crowded. We should move the Region class into its own 
1562         header, since it's pretty independent from the BlockAllocator.
1563
1564         * GNUmakefile.list.am:
1565         * JavaScriptCore.gypi:
1566         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1567         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1568         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1569         * JavaScriptCore.xcodeproj/project.pbxproj:
1570         * heap/BlockAllocator.h:
1571         (JSC):
1572         * heap/Region.h: Added.
1573         (JSC):
1574         (DeadBlock):
1575         (JSC::DeadBlock::DeadBlock):
1576         (Region):
1577         (JSC::Region::blockSize):
1578         (JSC::Region::isFull):
1579         (JSC::Region::isEmpty):
1580         (JSC::Region::isCustomSize):
1581         (JSC::Region::create):
1582         (JSC::Region::createCustomSize):
1583         (JSC::Region::Region):
1584         (JSC::Region::~Region):
1585         (JSC::Region::reset):
1586         (JSC::Region::allocate):
1587         (JSC::Region::deallocate):
1588
1589 2013-03-29  Mark Hahnenberg  <mhahnenberg@apple.com>
1590
1591         Objective-C API: Remove -[JSManagedValue managedValueWithValue:owner:]
1592         https://bugs.webkit.org/show_bug.cgi?id=113602
1593
1594         Reviewed by Geoffrey Garen.
1595
1596         Since we put the primary way of keeping track of external object graphs (i.e. "managed" references) 
1597         in JSVirtualMachine, there is some overlap in the functionality of that interface and JSManagedValue.
1598         Specifically, we no longer need the methods that include an owner, since ownership is now tracked 
1599         by JSVirtualMachine. These JSManagedValues will become weak pointers unless they are used 
1600         with [JSVirtualMachine addManagedReference:withOwner:], in which case their lifetime is tied to that 
1601         of their owner.
1602
1603         * API/JSManagedValue.h:
1604         * API/JSManagedValue.mm:
1605         (-[JSManagedValue init]):
1606         (-[JSManagedValue initWithValue:]):
1607         (JSManagedValueHandleOwner::isReachableFromOpaqueRoots):
1608         * API/JSVirtualMachine.mm:
1609         (getInternalObjcObject):
1610         * API/tests/testapi.mm:
1611         (-[TextXYZ setOnclick:]):
1612         (-[TextXYZ dealloc]):
1613
1614 2013-03-29  Geoffrey Garen  <ggaren@apple.com>
1615
1616         Simplified bytecode generation by unforking "condition context" codegen
1617         https://bugs.webkit.org/show_bug.cgi?id=113554
1618
1619         Reviewed by Mark Hahnenberg.
1620
1621         Now, a node that establishes a condition context can always ask its child
1622         nodes to generate into that context.
1623
1624         This has a few advantages:
1625
1626         (*) Removes a bunch of code;
1627
1628         (*) Optimizes a few missed cases like "if (!(x < 2))", "if (!!x)", and
1629         "if (!x || !y)";
1630
1631         (*) Paves the way to removing more opcodes.
1632
1633         * bytecode/Opcode.h:
1634         (JSC): Separated out the branching opcodes for clarity.
1635         * bytecompiler/NodesCodegen.cpp:
1636         (JSC::ExpressionNode::emitBytecodeInConditionContext): All expressions
1637         can be emitted in a condition context now -- the default behavior is
1638         to branch based on the expression's value.
1639
1640         (JSC::LogicalNotNode::emitBytecodeInConditionContext):
1641         (JSC::LogicalOpNode::emitBytecodeInConditionContext):
1642         (JSC::ConditionalNode::emitBytecode):
1643         (JSC::IfNode::emitBytecode):
1644         (JSC::IfElseNode::emitBytecode):
1645         (JSC::DoWhileNode::emitBytecode):
1646         (JSC::WhileNode::emitBytecode):
1647         (JSC::ForNode::emitBytecode):
1648         * parser/Nodes.h:
1649         (JSC::ExpressionNode::isSubtract):
1650         (ExpressionNode):
1651         (LogicalNotNode):
1652         (LogicalOpNode): Removed lots of code for handling expressions
1653         that couldn't generate into a condition context because all expressions
1654         can now.
1655
1656 2013-03-28  Geoffrey Garen  <ggaren@apple.com>
1657
1658         Simplified the bytecode by removing op_loop and op_loop_if_*
1659         https://bugs.webkit.org/show_bug.cgi?id=113548
1660
1661         Reviewed by Filip Pizlo.
1662
1663         Regular jumps will suffice.
1664
1665         These opcodes are identical to branches, except they also do timeout
1666         checking. That style of timeout checking has been broken for a long 
1667         time, and when we add back timeout checking, it won't use these opcodes.
1668
1669         * JavaScriptCore.order:
1670         * bytecode/CodeBlock.cpp:
1671         (JSC::CodeBlock::dumpBytecode):
1672         * bytecode/Opcode.h:
1673         (JSC):
1674         (JSC::padOpcodeName):
1675         * bytecode/PreciseJumpTargets.cpp:
1676         (JSC::computePreciseJumpTargets):
1677         * bytecompiler/BytecodeGenerator.cpp:
1678         (JSC::BytecodeGenerator::emitJump):
1679         (JSC::BytecodeGenerator::emitJumpIfTrue):
1680         (JSC::BytecodeGenerator::emitJumpIfFalse):
1681         * dfg/DFGByteCodeParser.cpp:
1682         (JSC::DFG::ByteCodeParser::parseBlock):
1683         * dfg/DFGCapabilities.h:
1684         (JSC::DFG::canCompileOpcode):
1685         * jit/JIT.cpp:
1686         (JSC::JIT::privateCompileMainPass):
1687         (JSC::JIT::privateCompileSlowCases):
1688         * jit/JIT.h:
1689         (JIT):
1690         (JSC):
1691         * llint/LowLevelInterpreter.asm:
1692         * llint/LowLevelInterpreter32_64.asm:
1693         * llint/LowLevelInterpreter64.asm:
1694
1695 2013-03-28  Geoffrey Garen  <ggaren@apple.com>
1696
1697         Simplified the bytecode by removing op_jmp_scopes
1698         https://bugs.webkit.org/show_bug.cgi?id=113545
1699
1700         Reviewed by Filip Pizlo.
1701
1702         We already have op_pop_scope and op_jmp, so we don't need op_jmp_scopes.
1703         Using op_jmp_scopes was also adding a "jump to self" to codegen for
1704         return statements, which was pretty silly.
1705
1706         * JavaScriptCore.order:
1707         * bytecode/CodeBlock.cpp:
1708         (JSC::CodeBlock::dumpBytecode):
1709         * bytecode/Opcode.h:
1710         (JSC::padOpcodeName):
1711         * bytecode/PreciseJumpTargets.cpp:
1712         (JSC::computePreciseJumpTargets):
1713         * bytecompiler/BytecodeGenerator.cpp:
1714         (JSC::BytecodeGenerator::emitComplexPopScopes):
1715         (JSC::BytecodeGenerator::emitPopScopes):
1716         * bytecompiler/BytecodeGenerator.h:
1717         (BytecodeGenerator):
1718         * bytecompiler/NodesCodegen.cpp:
1719         (JSC::ContinueNode::emitBytecode):
1720         (JSC::BreakNode::emitBytecode):
1721         (JSC::ReturnNode::emitBytecode):
1722         * jit/JIT.cpp:
1723         (JSC::JIT::privateCompileMainPass):
1724         * jit/JIT.h:
1725         * jit/JITOpcodes.cpp:
1726         * jit/JITOpcodes32_64.cpp:
1727         * jit/JITStubs.cpp:
1728         * jit/JITStubs.h:
1729         * llint/LLIntSlowPaths.cpp:
1730         * llint/LLIntSlowPaths.h:
1731         * llint/LowLevelInterpreter.asm:
1732
1733 2013-03-28  Mark Hahnenberg  <mhahnenberg@apple.com>
1734
1735         Safari hangs during test262 run in CodeCache::pruneSlowCase
1736         https://bugs.webkit.org/show_bug.cgi?id=113469
1737
1738         Reviewed by Geoffrey Garen.
1739
1740         We can end up hanging for quite some time if we add a lot of small keys to the CodeCache.
1741         By the time we get around to pruning the cache, we have a potentially tens or hundreds of 
1742         thousands of small entries, which can cause a noticeable hang when pruning them.
1743
1744         To fix this issue we added a hard cap to the number of entries in the cache because we 
1745         could potentially have to remove every element in the map.
1746
1747         * runtime/CodeCache.cpp:
1748         (JSC::CodeCacheMap::pruneSlowCase): We need to prune until we're both under the hard cap and the
1749         capacity in bytes.
1750         * runtime/CodeCache.h:
1751         (CodeCacheMap):
1752         (JSC::CodeCacheMap::numberOfEntries): Convenience accessor function to the number of entries in 
1753         the map that does the cast to size_t of m_map.size() for us. 
1754         (JSC::CodeCacheMap::canPruneQuickly): Checks that the total number is under the hard cap. We put this 
1755         check inside a function to more accurately describe why we're doing the check and to abstract out 
1756         the actual calculation in case we want to coalesce calls to pruneSlowCase in the future.
1757         (JSC::CodeCacheMap::prune): Check the number of entries against our hard cap. If it's greater than
1758         the cap then we need to drop down to pruneSlowCase.
1759
1760 2013-03-28  Zan Dobersek  <zdobersek@igalia.com>
1761
1762         Unreviewed build fix for the EFL and GTK ports.
1763
1764         * runtime/CodeCache.cpp:
1765         (JSC::CodeCacheMap::pruneSlowCase): Pass a 0 casted to the int64_t type instead of 0LL
1766         to the std::max call so the arguments' types match.
1767
1768 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1769
1770         Unreviewed build fix: Removed a dead field.
1771
1772         Pointed out by Mark Lam.
1773
1774         * dfg/DFGByteCodeParser.cpp:
1775         (JSC::DFG::ByteCodeParser::ByteCodeParser):
1776         (ByteCodeParser):
1777
1778 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1779
1780         Unreviewed build fix: Removed a dead field.
1781
1782         * dfg/DFGByteCodeParser.cpp:
1783         (JSC::DFG::ByteCodeParser::ByteCodeParser):
1784         (ByteCodeParser):
1785
1786 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1787
1788         Removed some dead code in the DFG bytecode parser
1789         https://bugs.webkit.org/show_bug.cgi?id=113472
1790
1791         Reviewed by Sam Weinig.
1792
1793         Now that Phi creation and liveness analysis are separate passes, we can
1794         remove the vestiges of code that used to do that in the bytecode
1795         parser.
1796
1797         * dfg/DFGByteCodeParser.cpp:
1798         (ByteCodeParser):
1799         (JSC::DFG::ByteCodeParser::addToGraph):
1800         (JSC::DFG::ByteCodeParser::parse):
1801
1802 2013-03-27  Filip Pizlo  <fpizlo@apple.com>
1803
1804         JIT and DFG should NaN-check loads from Float32 arrays
1805         https://bugs.webkit.org/show_bug.cgi?id=113462
1806         <rdar://problem/13490804>
1807
1808         Reviewed by Mark Hahnenberg.
1809
1810         * dfg/DFGSpeculativeJIT.cpp:
1811         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
1812         * jit/JITPropertyAccess.cpp:
1813         (JSC::JIT::emitFloatTypedArrayGetByVal):
1814
1815 2013-03-27  Mark Hahnenberg  <mhahnenberg@apple.com>
1816
1817         CodeCache::m_capacity can becoming negative, producing undefined results in pruneSlowCase
1818         https://bugs.webkit.org/show_bug.cgi?id=113453
1819
1820         Reviewed by Geoffrey Garen.
1821
1822         * runtime/CodeCache.cpp:
1823         (JSC::CodeCacheMap::pruneSlowCase): We make sure that m_minCapacity doesn't drop below zero now.
1824         This prevents m_capacity from doing the same.
1825
1826 2013-03-27  Filip Pizlo  <fpizlo@apple.com>
1827
1828         DFG should use CheckStructure for typed array checks whenever possible
1829         https://bugs.webkit.org/show_bug.cgi?id=113374
1830
1831         Reviewed by Geoffrey Garen.
1832         
1833         We used to do the right thing, but it appears that this regressed at some point. Since the
1834         FixupPhase now has the ability to outright remove spurious CheckStructures on array
1835         operations, it is profitable for the ByteCodeParser to insert CheckStructures whenver there
1836         is a chance that it might be profitable, and when the profiling tells us what structure to
1837         check.
1838         
1839         Also added some code for doing ArrayProfile debugging.
1840         
1841         This is a slightly speed-up. Maybe 3% on Mandreel.
1842
1843         * bytecode/ArrayProfile.cpp:
1844         (JSC::ArrayProfile::computeUpdatedPrediction):
1845         * dfg/DFGArrayMode.h:
1846         (JSC::DFG::ArrayMode::benefitsFromStructureCheck):
1847
1848 2013-03-27  Zeno Albisser  <zeno@webkit.org>
1849
1850         [Qt] Remove Qt specific WorkQueueItem definitions.
1851         https://bugs.webkit.org/show_bug.cgi?id=112891
1852
1853         This patch is preparation work for removing
1854         WorkQueue related code from TestRunnerQt and
1855         replacing it with generic TestRunner code.
1856
1857         Reviewed by Benjamin Poulain.
1858
1859         * API/JSStringRefQt.cpp:
1860         (JSStringCreateWithQString):
1861             Adding a convenience function to create a
1862             JSStringRef from a QString.
1863         * API/JSStringRefQt.h:
1864
1865 2013-03-26  Filip Pizlo  <fpizlo@apple.com>
1866
1867         REGRESSION: Sometimes, operations on proven strings ignore changes to the string prototype
1868         https://bugs.webkit.org/show_bug.cgi?id=113353
1869         <rdar://problem/13510778>
1870
1871         Reviewed by Mark Hahnenberg and Geoffrey Garen.
1872         
1873         ToString should call speculateStringObject() even if you know that it's a string object, since
1874         it calls it to also get the watchpoint. Note that even with this change, if you do
1875         Phantom(Check:StringObject:@a), it might get eliminated just because we proved that @a is a
1876         string object (thereby eliminating the prototype watchpoint); that's fine since ToString is
1877         MustGenerate and never decays to Phantom.
1878
1879         * dfg/DFGSpeculativeJIT.cpp:
1880         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
1881         (JSC::DFG::SpeculativeJIT::speculateStringObject):
1882         (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
1883         * dfg/DFGSpeculativeJIT.h:
1884         (SpeculativeJIT):
1885         (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
1886
1887 2013-03-26  Mark Hahnenberg  <mhahnenberg@apple.com>
1888
1889         REGRESSION(r144131): It made fast/js/regress/string-repeat-arith.html assert on 32 bit
1890         https://bugs.webkit.org/show_bug.cgi?id=112106
1891
1892         Rubber stamped by Filip Pizlo.
1893
1894         * dfg/DFGSpeculativeJIT.cpp:
1895         (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32): Get rid of the case for constants because
1896         we would have done constant folding anyways on a ValueToInt32.
1897         * dfg/DFGSpeculativeJIT32_64.cpp:
1898         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): Fixed a random compile error with this flag enabled.
1899
1900 2013-03-26  Filip Pizlo  <fpizlo@apple.com>
1901
1902         JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
1903         https://bugs.webkit.org/show_bug.cgi?id=113144
1904
1905         Reviewed by Geoffrey Garen.
1906         
1907         Forgot to include Geoff's requested change in the original commit.
1908
1909         * profiler/ProfilerDatabase.cpp:
1910         (Profiler):
1911
1912 2013-03-25  Filip Pizlo  <fpizlo@apple.com>
1913
1914         JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
1915         https://bugs.webkit.org/show_bug.cgi?id=113144
1916
1917         Reviewed by Geoffrey Garen.
1918         
1919         Added the ability to save profiler output with JSC_enableProfiler=true. It will save it
1920         to the current directory, or JSC_PROFILER_PATH if the latter was specified.
1921         
1922         This works by saving the Profiler::Database either when it is destroyed or atexit(),
1923         whichever happens first.
1924         
1925         This allows use of the profiler from any WebKit client.
1926
1927         * jsc.cpp:
1928         (jscmain):
1929         * profiler/ProfilerDatabase.cpp:
1930         (Profiler):
1931         (JSC::Profiler::Database::Database):
1932         (JSC::Profiler::Database::~Database):
1933         (JSC::Profiler::Database::registerToSaveAtExit):
1934         (JSC::Profiler::Database::addDatabaseToAtExit):
1935         (JSC::Profiler::Database::removeDatabaseFromAtExit):
1936         (JSC::Profiler::Database::performAtExitSave):
1937         (JSC::Profiler::Database::removeFirstAtExitDatabase):
1938         (JSC::Profiler::Database::atExitCallback):
1939         * profiler/ProfilerDatabase.h:
1940         (JSC::Profiler::Database::databaseID):
1941         (Database):
1942         * runtime/JSGlobalData.cpp:
1943         (JSC::JSGlobalData::JSGlobalData):
1944
1945 2013-03-25  Filip Pizlo  <fpizlo@apple.com>
1946
1947         ArrayMode should not consider SpecOther when refining the base
1948         https://bugs.webkit.org/show_bug.cgi?id=113271
1949
1950         Reviewed by Geoffrey Garen.
1951         
1952         9% speed-up on Octane/pdfjs.
1953
1954         * dfg/DFGArrayMode.cpp:
1955         (JSC::DFG::ArrayMode::refine):
1956
1957 2013-03-26  Csaba Osztrogonác  <ossy@webkit.org>
1958
1959         Fix unused parameter warnings in JITInlines.h
1960         https://bugs.webkit.org/show_bug.cgi?id=112560
1961
1962         Reviewed by Zoltan Herczeg.
1963
1964         * jit/JITInlines.h:
1965         (JSC::JIT::beginUninterruptedSequence):
1966         (JSC::JIT::endUninterruptedSequence):
1967         (JSC):
1968
1969 2013-03-25  Kent Tamura  <tkent@chromium.org>
1970
1971         Rename ENABLE_INPUT_TYPE_DATETIME
1972         https://bugs.webkit.org/show_bug.cgi?id=113254
1973
1974         Reviewed by Kentaro Hara.
1975
1976         Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
1977         Actually I'd like to remove the code, but we shouldn't remove it yet
1978         because we shipped products with it on some platforms.
1979
1980         * Configurations/FeatureDefines.xcconfig:
1981
1982 2013-03-25  Mark Lam  <mark.lam@apple.com>
1983
1984         Offlineasm cloop backend compiles op+branch incorrectly.
1985         https://bugs.webkit.org/show_bug.cgi?id=113146.
1986
1987         Reviewed by Geoffrey Garen.
1988
1989         * dfg/DFGRepatch.h:
1990         (JSC::DFG::dfgResetGetByID):
1991         (JSC::DFG::dfgResetPutByID):
1992         - These functions never return when the DFG is dsiabled, not just when
1993           asserts are enabled. Changing the attribute from NO_RETURN_DUE_TO_ASSERT
1994           to NO_RETURN.
1995         * llint/LLIntOfflineAsmConfig.h:
1996         - Added some #defines needed to get the cloop building again.
1997         * offlineasm/cloop.rb:
1998         - Fix cloopEmitOpAndBranchIfOverflow() and cloopEmitOpAndBranch() to
1999           emit code that unconditionally executes the specified operation before
2000           doing the conditional branch.
2001
2002 2013-03-25  Mark Hahnenberg  <mhahnenberg@apple.com>
2003
2004         JSObject::enterDictionaryIndexingMode doesn't have a case for ALL_BLANK_INDEXING_TYPES
2005         https://bugs.webkit.org/show_bug.cgi?id=113236
2006
2007         Reviewed by Geoffrey Garen.
2008
2009         * runtime/JSObject.cpp:
2010         (JSC::JSObject::enterDictionaryIndexingMode): We forgot blank indexing types.
2011
2012 2013-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2013
2014         HandleSet should use HeapBlocks for storing handles
2015         https://bugs.webkit.org/show_bug.cgi?id=113145
2016
2017         Reviewed by Geoffrey Garen.
2018
2019         * GNUmakefile.list.am: Build project changes.
2020         * JavaScriptCore.gypi: Ditto.
2021         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2022         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
2023         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
2024         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2025         * heap/BlockAllocator.cpp: Rename the RegionSet to m_fourKBBlockRegionSet because there are 
2026         too many block types to include them all in the name now.
2027         (JSC::BlockAllocator::BlockAllocator):
2028         * heap/BlockAllocator.h:
2029         (BlockAllocator): Add the appropriate override for regionSetFor.
2030         (JSC::WeakBlock):
2031         (JSC::MarkStackSegment):
2032         (JSC::HandleBlock):
2033         * heap/HandleBlock.h: Added.
2034         (HandleBlock): New class for HandleBlocks.
2035         (JSC::HandleBlock::blockFor): Static method to get the block of the given HandleNode pointer. Allows
2036         us to quickly figure out which HandleSet the HandleNode belongs to without storing the pointer to it
2037         in the HandleNode.
2038         (JSC::HandleBlock::handleSet): Getter.
2039         * heap/HandleBlockInlines.h: Added.
2040         (JSC::HandleBlock::create):
2041         (JSC::HandleBlock::HandleBlock):
2042         (JSC::HandleBlock::payloadEnd):
2043         (JSC::HandleBlock::payload):
2044         (JSC::HandleBlock::nodes):
2045         (JSC::HandleBlock::nodeAtIndex):
2046         (JSC::HandleBlock::nodeCapacity):
2047         * heap/HandleSet.cpp:
2048         (JSC::HandleSet::~HandleSet): 
2049         (JSC::HandleSet::grow):
2050         * heap/HandleSet.h:
2051         (HandleNode): Move the internal Node class from HandleSet to be its own public class so it can be 
2052         used by HandleBlock.
2053         (HandleSet): Add a typedef so that Node refers to the new HandleNode class.
2054         (JSC::HandleSet::toHandle):
2055         (JSC::HandleSet::toNode):
2056         (JSC::HandleSet::allocate):
2057         (JSC::HandleSet::deallocate):
2058         (JSC::HandleNode::HandleNode):
2059         (JSC::HandleNode::slot):
2060         (JSC::HandleNode::handleSet): Use the new blockFor static function to get the right HandleBlock and lookup 
2061         the HandleSet.
2062         (JSC::HandleNode::setPrev):
2063         (JSC::HandleNode::prev):
2064         (JSC::HandleNode::setNext):
2065         (JSC::HandleNode::next):
2066         (JSC::HandleSet::forEachStrongHandle):
2067         * heap/Heap.h: Friend HandleSet so that it can access the BlockAllocator when allocating HandleBlocks.
2068
2069 2013-03-22  David Kilzer  <ddkilzer@apple.com>
2070
2071         BUILD FIX (r145119): Make JSValue* properties default to (assign)
2072         <rdar://problem/13380794>
2073
2074         Reviewed by Mark Hahnenberg.
2075
2076         Fixes the following build failures:
2077
2078             Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
2079             @property JSValue *onclick;
2080             ^
2081             Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: default property attrib ute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
2082             Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
2083             @property JSValue *weakOnclick;
2084             ^
2085             Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: default property attribute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
2086             4 errors generated.
2087
2088         * API/tests/testapi.mm: Default to (assign) for JSValue*
2089         properties.
2090
2091 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
2092
2093         testLeakingPrototypesAcrossContexts added in r146682 doesn't compile on Win and fails on Mac
2094         https://bugs.webkit.org/show_bug.cgi?id=113125
2095
2096         Reviewed by Mark Hahnenberg
2097
2098         Remove the test added in r146682 as it's now failing on Mac.
2099         This is the test that was causing a compilation failure on Windows.
2100
2101         * API/tests/testapi.c:
2102         (main):
2103
2104 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
2105
2106         Fix the typo: WIN -> WINDOWS.
2107
2108         * API/tests/testapi.c:
2109         (main):
2110
2111 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
2112
2113         I really can't figure out what's wrong with this one.
2114         Temporarily disable the test added by r146682 on Windows since it doesn't compile.
2115
2116         * API/tests/testapi.c:
2117         (main):
2118
2119 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
2120
2121         Another build fix (after r146693) for r146682.
2122
2123         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
2124         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
2125
2126 2013-03-22  Roger Fong  <roger_fong@apple.com>
2127
2128         Unreviewed. AppleWin build fix.
2129
2130         * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
2131         * JavaScriptCore.vcxproj/copy-files.cmd:
2132
2133 2013-03-22  Mark Hahnenberg  <mhahnenberg@apple.com>
2134
2135         -[TinyDOMNode dealloc] should call [super dealloc] when ARC is not enabled
2136         https://bugs.webkit.org/show_bug.cgi?id=113054
2137
2138         Reviewed by Geoffrey Garen.
2139
2140         * API/tests/testapi.mm:
2141         (-[TinyDOMNode dealloc]):
2142
2143 2013-03-22  Mark Hahnenberg  <mhahnenberg@apple.com>
2144
2145         opaqueJSClassData should be cached on JSGlobalObject, not the JSGlobalData
2146         https://bugs.webkit.org/show_bug.cgi?id=113086
2147
2148         Reviewed by Geoffrey Garen.
2149
2150         opaqueJSClassData stores cached prototypes for JSClassRefs in the C API. It doesn't make sense to 
2151         share these prototypes within a JSGlobalData across JSGlobalObjects, and in fact doing so will cause 
2152         a leak of the original JSGlobalObject that these prototypes were created in. Therefore we should move 
2153         this cache to JSGlobalObject where it belongs and where it won't cause memory leaks.
2154
2155         * API/JSBase.cpp: Needed to add an extern "C" so that testapi.c can use the super secret GC function.
2156         * API/JSClassRef.cpp: We now grab the cached context data from the global object rather than the global data.
2157         (OpaqueJSClass::contextData):
2158         * API/JSClassRef.h: Remove this header because it's unnecessary and causes circular dependencies.
2159         * API/tests/testapi.c: Added a new test that makes sure that using the same JSClassRef in two different contexts
2160         doesn't cause leaks of the original global object.
2161         (leakFinalize):
2162         (nestedAllocateObject): This is a hack to bypass the conservative scan of the GC, which was unnecessarily marking
2163         objects and keeping them alive, ruining the test result.
2164         (testLeakingPrototypesAcrossContexts):
2165         (main):
2166         * API/tests/testapi.mm: extern "C" this so we can continue using it here.
2167         * runtime/JSGlobalData.cpp: Remove JSClassRef related stuff.
2168         (JSC::JSGlobalData::~JSGlobalData):
2169         * runtime/JSGlobalData.h:
2170         (JSGlobalData):
2171         * runtime/JSGlobalObject.h: Add the stuff that JSGlobalData had. We add it to JSGlobalObjectRareData so that 
2172         clients who don't use the C API don't have to pay the memory cost of this extra HashMap.
2173         (JSGlobalObject):
2174         (JSGlobalObjectRareData):
2175         (JSC::JSGlobalObject::opaqueJSClassData):
2176
2177 2013-03-19  Martin Robinson  <mrobinson@igalia.com>
2178
2179         [GTK] Add support for building the WebCore bindings to the gyp build
2180         https://bugs.webkit.org/show_bug.cgi?id=112638
2181
2182         Reviewed by Nico Weber.
2183
2184         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Export all include directories to direct
2185         dependents and fix the indentation of the libjavascriptcore target.
2186
2187 2013-03-21  Filip Pizlo  <fpizlo@apple.com>
2188
2189         Fix some minor issues in the DFG's profiling of heap accesses
2190         https://bugs.webkit.org/show_bug.cgi?id=113010
2191
2192         Reviewed by Goeffrey Garen.
2193         
2194         1) If a CodeBlock gets jettisoned by GC, we should count the exit sites.
2195
2196         2) If a CodeBlock clears a structure stub during GC, it should record this, and
2197         the DFG should prefer to not inline that access (i.e. treat it as if it had an
2198         exit site).
2199
2200         3) If a PutById was seen by the baseline JIT, and the JIT attempted to cache it,
2201         but it chose not to, then assume that it will take slow path.
2202
2203         4) If we frequently exited because of a structure check on a weak constant,
2204         don't try to inline that access in the future.
2205
2206         5) Treat all exits that were counted as being frequent.
2207         
2208         81% speed-up on Octane/gbemu. Small speed-ups elsewhere, and no regressions.
2209
2210         * bytecode/CodeBlock.cpp:
2211         (JSC::CodeBlock::finalizeUnconditionally):
2212         (JSC):
2213         (JSC::CodeBlock::resetStubDuringGCInternal):
2214         (JSC::CodeBlock::reoptimize):
2215         (JSC::CodeBlock::jettison):
2216         (JSC::ProgramCodeBlock::jettisonImpl):
2217         (JSC::EvalCodeBlock::jettisonImpl):
2218         (JSC::FunctionCodeBlock::jettisonImpl):
2219         (JSC::CodeBlock::tallyFrequentExitSites):
2220         * bytecode/CodeBlock.h:
2221         (CodeBlock):
2222         (JSC::CodeBlock::tallyFrequentExitSites):
2223         (ProgramCodeBlock):
2224         (EvalCodeBlock):
2225         (FunctionCodeBlock):
2226         * bytecode/GetByIdStatus.cpp:
2227         (JSC::GetByIdStatus::computeFor):
2228         * bytecode/PutByIdStatus.cpp:
2229         (JSC::PutByIdStatus::computeFor):
2230         * bytecode/StructureStubInfo.h:
2231         (JSC::StructureStubInfo::StructureStubInfo):
2232         (StructureStubInfo):
2233         * dfg/DFGByteCodeParser.cpp:
2234         (JSC::DFG::ByteCodeParser::handleGetById):
2235         (JSC::DFG::ByteCodeParser::parseBlock):
2236         * dfg/DFGOSRExit.cpp:
2237         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
2238         * dfg/DFGOSRExit.h:
2239         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
2240         (OSRExit):
2241         * jit/JITStubs.cpp:
2242         (JSC::DEFINE_STUB_FUNCTION):
2243         * runtime/Options.h:
2244         (JSC):
2245
2246 2013-03-22  Filip Pizlo  <fpizlo@apple.com>
2247
2248         DFG folding of PutById to SimpleReplace should consider the specialized function case
2249         https://bugs.webkit.org/show_bug.cgi?id=113093
2250
2251         Reviewed by Geoffrey Garen and Mark Hahnenberg.
2252
2253         * bytecode/PutByIdStatus.cpp:
2254         (JSC::PutByIdStatus::computeFor):
2255
2256 2013-03-22  David Kilzer  <ddkilzer@apple.com>
2257
2258         BUILD FIX (r146558): Build testapi.mm with ARC enabled for armv7s
2259         <http://webkit.org/b/112608>
2260
2261         Fixes the following build failure:
2262
2263             Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
2264             }
2265             ^
2266             1 error generated.
2267
2268         * Configurations/ToolExecutable.xcconfig: Enable ARC for armv7s
2269         architecture.
2270
2271 2013-03-22  David Kilzer  <ddkilzer@apple.com>
2272
2273         Revert "BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]"
2274
2275         This fixes a build failure introduced by this change:
2276
2277             Source/JavaScriptCore/API/tests/testapi.mm:206:6: error: ARC forbids explicit message send of 'dealloc'
2278                 [super dealloc];
2279                  ^     ~~~~~~~
2280             1 error generated.
2281
2282         Not sure why this didn't fail locally on my Mac Pro.
2283
2284         * API/tests/testapi.mm:
2285         (-[TinyDOMNode dealloc]): Remove call to [super dealloc].
2286
2287 2013-03-22  David Kilzer  <ddkilzer@apple.com>
2288
2289         BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]
2290         <http://webkit.org/b/112608>
2291
2292         Fixes the following build failure:
2293
2294             Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
2295             }
2296             ^
2297             1 error generated.
2298
2299         * API/tests/testapi.mm:
2300         (-[TinyDOMNode dealloc]): Call [super dealloc].
2301
2302 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
2303
2304         Leak bots erroneously report JSC::WatchpointSet as leaking
2305         https://bugs.webkit.org/show_bug.cgi?id=107781
2306
2307         Reviewed by Filip Pizlo.
2308
2309         Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate
2310         the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim.
2311
2312         Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is
2313         initially "slim".
2314
2315         * runtime/SymbolTable.cpp:
2316         (JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag.
2317         (JSC::SymbolTableEntry::inflateSlow): Ditto.
2318
2319         * runtime/SymbolTable.h:
2320         (JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default.
2321         (JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag.
2322         (JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag
2323         is not set.
2324
2325         (JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default.
2326         (JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry.
2327         (JSC::SymbolTableEntry::isNull): Ignore SlimFlag.
2328         (JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag.
2329         (JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset.
2330         (JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore.
2331         (JSC::SymbolTableEntry::pack): Preserve SlimFlag.
2332
2333         (JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true.
2334
2335 2013-03-21  Mark Hahnenberg  <mhahnenberg@apple.com>
2336
2337         Objective-C API: Need a good way to preserve custom properties on JS wrappers
2338         https://bugs.webkit.org/show_bug.cgi?id=112608
2339
2340         Reviewed by Geoffrey Garen.
2341
2342         Currently, we just use a weak map, which means that garbage collection can cause a wrapper to 
2343         disappear if it isn't directly exported to JavaScript.
2344
2345         The most straightforward and safe way (with respect to garbage collection and concurrency) is to have 
2346         clients add and remove their external references along with their owners. Effectively, the client is 
2347         recording the structure of the external object graph so that the garbage collector can make sure to 
2348         mark any wrappers that are reachable through either the JS object graph of the external Obj-C object 
2349         graph. By keeping these wrappers alive, this has the effect that custom properties on these wrappers 
2350         will also remain alive.
2351
2352         The rule for if an object needs to be tracked by the runtime (and therefore whether the client should report it) is as follows:
2353         For a particular object, its references to its children should be added if:
2354         1. The child is referenced from JavaScript.
2355         2. The child contains references to other objects for which (1) or (2) are true.
2356
2357         * API/JSAPIWrapperObject.mm:
2358         (JSAPIWrapperObjectHandleOwner::finalize):
2359         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots): A wrapper object is kept alive only if its JSGlobalObject
2360         is marked and its corresponding Objective-C object was added to the set of opaque roots.
2361         (JSC::JSAPIWrapperObject::visitChildren): We now call out to scanExternalObjectGraph, which handles adding all Objective-C
2362         objects to the set of opaque roots.
2363         * API/JSAPIWrapperObject.h:
2364         (JSAPIWrapperObject):
2365         * API/JSContext.mm: Moved dealloc to its proper place in the main implementation.
2366         (-[JSContext dealloc]):
2367         * API/JSVirtualMachine.h:
2368         * API/JSVirtualMachine.mm:
2369         (-[JSVirtualMachine initWithContextGroupRef:]):
2370         (-[JSVirtualMachine dealloc]):
2371         (getInternalObjcObject): Helper funciton to get the Objective-C object out of JSManagedValues or JSValues if there is one.
2372         (-[JSVirtualMachine addManagedReference:withOwner:]): Adds the Objective-C object to the set of objects 
2373         owned by the owner object in that particular virtual machine.
2374         (-[JSVirtualMachine removeManagedReference:withOwner:]): Removes the relationship between the two objects.
2375         (-[JSVirtualMachine externalObjectGraph]):
2376         (scanExternalObjectGraph): Does a depth-first search of the external object graph in a particular virtual machine starting at
2377         the specified root. Each new object it encounters it adds to the set of opaque roots. These opaque roots will keep their 
2378         corresponding wrapper objects alive if they have them. 
2379         * API/JSManagedReferenceInternal.h: Added.
2380         * API/JSVirtualMachine.mm: Added the per-JSVirtualMachine map between objects and the objects they own, which is more formally
2381         known as that virtual machine's external object graph.
2382         * API/JSWrapperMap.mm:
2383         (-[JSWrapperMap dealloc]): We were leaking this before :-(
2384         (-[JSVirtualMachine initWithContextGroupRef:]):
2385         (-[JSVirtualMachine dealloc]):
2386         (-[JSVirtualMachine externalObjectGraph]):
2387         * API/JSVirtualMachineInternal.h:
2388         * API/tests/testapi.mm: Added two new tests using the TinyDOMNode class. The first tests that a custom property added to a wrapper 
2389         doesn't vanish after GC, even though that wrapper isn't directly accessible to the JS garbage collector but is accessible through 
2390         the external Objective-C object graph. The second test makes sure that adding an object to the external object graph with the same 
2391         owner doesn't cause any sort of problems.
2392         (+[TinyDOMNode sharedVirtualMachine]):
2393         (-[TinyDOMNode init]):
2394         (-[TinyDOMNode dealloc]):
2395         (-[TinyDOMNode appendChild:]):
2396         (-[TinyDOMNode numberOfChildren]):
2397         (-[TinyDOMNode childAtIndex:]):
2398         (-[TinyDOMNode removeChildAtIndex:]):
2399         * JavaScriptCore.xcodeproj/project.pbxproj:
2400         * heap/SlotVisitor.h:
2401         (SlotVisitor):
2402         * heap/SlotVisitorInlines.h:
2403         (JSC::SlotVisitor::containsOpaqueRootTriState): Added a new method to SlotVisitor to allow scanExternalObjectGraph to have a 
2404         thread-safe view of opaque roots during parallel marking. The set of opaque roots available to any one SlotVisitor isn't guaranteed
2405         to be 100% correct, but that just results in a small duplication of work in scanExternalObjectGraph. To indicate this change for
2406         false negatives we return a TriState that's either true or mixed, but never false.
2407
2408 2013-03-21  Mark Lam  <mark.lam@apple.com>
2409
2410         Fix O(n^2) op_debug bytecode charPosition to column computation.
2411         https://bugs.webkit.org/show_bug.cgi?id=112957.
2412
2413         Reviewed by Geoffrey Garen.
2414
2415         The previous algorithm does a linear reverse scan of the source string
2416         to find the line start for any given char position. This results in a
2417         O(n^2) algortithm when the source string has no line breaks.
2418
2419         The new algorithm computes a line start column table for a
2420         SourceProvider on first use. This line start table is used to fix up
2421         op_debug's charPosition operand into a column operand when an
2422         UnlinkedCodeBlock is linked into a CodeBlock. The initialization of
2423         the line start table is O(n), and the CodeBlock column fix up is
2424         O(log(n)).
2425
2426         * bytecode/CodeBlock.cpp:
2427         (JSC::CodeBlock::dumpBytecode): 
2428         (JSC::CodeBlock::CodeBlock): - do column fix up.
2429         * interpreter/Interpreter.cpp:
2430         (JSC::Interpreter::debug): - no need to do column fixup anymore.
2431         * interpreter/Interpreter.h:
2432         * jit/JITStubs.cpp:
2433         (JSC::DEFINE_STUB_FUNCTION):
2434         * llint/LLIntSlowPaths.cpp:
2435         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2436         * parser/SourceProvider.cpp:
2437         (JSC::SourceProvider::lineStarts):
2438         (JSC::charPositionExtractor):
2439         (JSC::SourceProvider::charPositionToColumnNumber):
2440         - initialize line start column table if needed.
2441         - look up line start for the given char position.
2442         * parser/SourceProvider.h:
2443
2444 2013-03-21  Filip Pizlo  <fpizlo@apple.com>
2445
2446         JSC profiler should have an at-a-glance report of the success of DFG optimization
2447         https://bugs.webkit.org/show_bug.cgi?id=112988
2448
2449         Reviewed by Geoffrey Garen.
2450
2451         * dfg/DFGByteCodeParser.cpp:
2452         (JSC::DFG::ByteCodeParser::handleCall):
2453         (JSC::DFG::ByteCodeParser::handleGetById):
2454         (JSC::DFG::ByteCodeParser::parseBlock):
2455         * profiler/ProfilerCompilation.cpp:
2456         (JSC::Profiler::Compilation::Compilation):
2457         (JSC::Profiler::Compilation::toJS):
2458         * profiler/ProfilerCompilation.h:
2459         (JSC::Profiler::Compilation::noticeInlinedGetById):
2460         (JSC::Profiler::Compilation::noticeInlinedPutById):
2461         (JSC::Profiler::Compilation::noticeInlinedCall):
2462         (Compilation):
2463         * runtime/CommonIdentifiers.h:
2464
2465 2013-03-21  Mark Lam  <mark.lam@apple.com>
2466
2467         Fix lexer charPosition computation when "rewind"ing the lexer.
2468         https://bugs.webkit.org/show_bug.cgi?id=112952.
2469
2470         Reviewed by Michael Saboff.
2471
2472         Changed the Lexer to no longer keep a m_charPosition. Instead, we compute
2473         currentCharPosition() from m_code and m_codeStartPlusOffset, where
2474         m_codeStartPlusOffset is the SourceProvider m_codeStart + the SourceCode
2475         start offset. This ensures that the charPosition is always in sync with
2476         m_code.
2477
2478         * parser/Lexer.cpp:
2479         (JSC::::setCode):
2480         (JSC::::internalShift):
2481         (JSC::::shift):
2482         (JSC::::lex):
2483         * parser/Lexer.h:
2484         (JSC::Lexer::currentCharPosition):
2485         (JSC::::lexExpectIdentifier):
2486
2487 2013-03-21  Alberto Garcia  <agarcia@igalia.com>
2488
2489         [BlackBerry] GCActivityCallback: replace JSLock with JSLockHolder
2490         https://bugs.webkit.org/show_bug.cgi?id=112448
2491
2492         Reviewed by Xan Lopez.
2493
2494         This changed in r121381.
2495
2496         * runtime/GCActivityCallbackBlackBerry.cpp:
2497         (JSC::DefaultGCActivityCallback::doWork):
2498
2499 2013-03-21  Mark Hahnenberg  <mhahnenberg@apple.com>
2500
2501         Objective-C API: wrapperClass holds a static JSClassRef, which causes JSGlobalObjects to leak
2502         https://bugs.webkit.org/show_bug.cgi?id=112856
2503
2504         Reviewed by Geoffrey Garen.
2505
2506         Through a very convoluted path that involves the caching of prototypes on the JSClassRef, we can leak 
2507         JSGlobalObjects when inserting an Objective-C object into multiple independent JSContexts.
2508
2509         * API/JSAPIWrapperObject.cpp: Removed.
2510         * API/JSAPIWrapperObject.h:
2511         (JSAPIWrapperObject):
2512         * API/JSAPIWrapperObject.mm: Copied from Source/JavaScriptCore/API/JSAPIWrapperObject.cpp. Made this an
2513         Objective-C++ file so that we can call release on the wrappedObject. Also added a WeakHandleOwner for 
2514         JSAPIWrapperObjects. This will also be used in a future patch for https://bugs.webkit.org/show_bug.cgi?id=112608.
2515         (JSAPIWrapperObjectHandleOwner):
2516         (jsAPIWrapperObjectHandleOwner):
2517         (JSAPIWrapperObjectHandleOwner::finalize): This finalize replaces the old finalize that was done through
2518         the C API.
2519         (JSC::JSAPIWrapperObject::finishCreation): Allocate the WeakImpl. Balanced in finalize.
2520         (JSC::JSAPIWrapperObject::setWrappedObject): We now do the retain of the wrappedObject here rather than in random
2521         places scattered around JSWrapperMap.mm
2522         * API/JSObjectRef.cpp: Added some ifdefs for platforms that don't support the Obj-C API.
2523         (JSObjectGetPrivate): Ditto.
2524         (JSObjectSetPrivate): Ditto.
2525         (JSObjectGetPrivateProperty): Ditto.
2526         (JSObjectSetPrivateProperty): Ditto.
2527         (JSObjectDeletePrivateProperty): Ditto.
2528         * API/JSValueRef.cpp: Ditto.
2529         (JSValueIsObjectOfClass): Ditto.
2530         * API/JSWrapperMap.mm: Remove wrapperClass().
2531         (objectWithCustomBrand): Change to no longer use a parent class, which was only used to give the ability to 
2532         finalize wrapper objects.
2533         (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]): Change to no longer use wrapperClass(). 
2534         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): Ditto.
2535         (tryUnwrapObjcObject): We now check if the object inherits from JSAPIWrapperObject.
2536         * API/tests/testapi.mm: Added a test that exports an Objective-C object to two different JSContexts and makes 
2537         sure that the first one is collected properly by using a weak JSManagedValue for the wrapper in the first JSContext.
2538         * CMakeLists.txt: Build file modifications.
2539         * GNUmakefile.list.am: Ditto.
2540         * JavaScriptCore.gypi: Ditto.
2541         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2542         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
2543         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
2544         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2545         * runtime/JSGlobalObject.cpp: More ifdefs for unsupported platforms.
2546         (JSC::JSGlobalObject::reset): Ditto.
2547         (JSC::JSGlobalObject::visitChildren): Ditto.
2548         * runtime/JSGlobalObject.h: Ditto.
2549         (JSGlobalObject): Ditto.
2550         (JSC::JSGlobalObject::objcCallbackFunctionStructure): Ditto.
2551
2552 2013-03-21  Anton Muhin  <antonm@chromium.org>
2553
2554         Unreviewed, rolling out r146483.
2555         http://trac.webkit.org/changeset/146483
2556         https://bugs.webkit.org/show_bug.cgi?id=111695
2557
2558         Breaks debug builds.
2559
2560         * bytecode/GlobalResolveInfo.h: Removed property svn:mergeinfo.
2561
2562 2013-03-21  Gabor Rapcsanyi  <rgabor@webkit.org>
2563
2564         Implement LLInt for CPU(ARM_TRADITIONAL)
2565         https://bugs.webkit.org/show_bug.cgi?id=97589
2566
2567         Reviewed by Zoltan Herczeg.
2568
2569         Enable LLInt for ARMv5 and ARMv7 traditional as well.
2570
2571         * llint/LLIntOfflineAsmConfig.h:
2572         * llint/LowLevelInterpreter.asm:
2573         * llint/LowLevelInterpreter32_64.asm:
2574         * offlineasm/arm.rb:
2575         * offlineasm/backends.rb:
2576         * offlineasm/instructions.rb:
2577
2578 2013-03-20  Cosmin Truta  <ctruta@blackberry.com>
2579
2580         [QNX][ARM] REGRESSION(r135330): Various failures in Octane
2581         https://bugs.webkit.org/show_bug.cgi?id=112863
2582
2583         Reviewed by Yong Li.
2584
2585         This was fixed in http://trac.webkit.org/changeset/146396 on Linux only.
2586         Enable this fix on QNX.
2587
2588         * assembler/ARMv7Assembler.h:
2589         (ARMv7Assembler):
2590         (JSC::ARMv7Assembler::replaceWithJump):
2591         (JSC::ARMv7Assembler::maxJumpReplacementSize):
2592         * assembler/MacroAssemblerARMv7.h:
2593         (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
2594
2595 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2596
2597         Fix indentation of JSString.h
2598
2599         Rubber stamped by Mark Hahnenberg.
2600
2601         * runtime/JSString.h:
2602
2603 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2604
2605         "" + x where x is not a string should be optimized by the DFG to some manner of ToString conversion
2606         https://bugs.webkit.org/show_bug.cgi?id=112845
2607
2608         Reviewed by Mark Hahnenberg.
2609         
2610         I like to do "" + x. So I decided to make DFG recognize it, and related idioms.
2611
2612         * dfg/DFGFixupPhase.cpp:
2613         (JSC::DFG::FixupPhase::fixupNode):
2614         (JSC::DFG::FixupPhase::fixupToPrimitive):
2615         (FixupPhase):
2616         (JSC::DFG::FixupPhase::fixupToString):
2617         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
2618         * dfg/DFGPredictionPropagationPhase.cpp:
2619         (JSC::DFG::resultOfToPrimitive):
2620         (DFG):
2621         (JSC::DFG::PredictionPropagationPhase::propagate):
2622         * dfg/DFGPredictionPropagationPhase.h:
2623         (DFG):
2624
2625 2013-03-20  Zoltan Herczeg  <zherczeg@webkit.org>
2626
2627         ARMv7 replaceWithJump ASSERT failure after r135330.
2628         https://bugs.webkit.org/show_bug.cgi?id=103146
2629
2630         Reviewed by Filip Pizlo.
2631
2632         On Linux, the 24 bit distance range of jumps sometimes does not
2633         enough to cover all targets addresses. This patch supports jumps
2634         outside of this range using a mov/movt/bx 10 byte long sequence.
2635
2636         * assembler/ARMv7Assembler.h:
2637         (ARMv7Assembler):
2638         (JSC::ARMv7Assembler::revertJumpTo_movT3movtcmpT2):
2639         (JSC::ARMv7Assembler::nopw):
2640         (JSC::ARMv7Assembler::label):
2641         (JSC::ARMv7Assembler::replaceWithJump):
2642         (JSC::ARMv7Assembler::maxJumpReplacementSize):
2643         * assembler/MacroAssemblerARMv7.h:
2644         (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
2645
2646 2013-03-20  Mark Hahnenberg  <mhahnenberg@apple.com>
2647
2648         Objective-C API: Fix over-releasing in allocateConstructorAndPrototypeWithSuperClassInfo:
2649         https://bugs.webkit.org/show_bug.cgi?id=112832
2650
2651         Reviewed by Geoffrey Garen.
2652
2653         If either the m_constructor or m_prototype (but not both) is collected, we will call 
2654         allocateConstructorAndPrototypeWithSuperClassInfo, which will create a new object to replace the one 
2655         that was collected, but at the end of the method we call release on both of them. 
2656         This is incorrect since we autorelease the JSValue in the case that the object doesn't need to be 
2657         reallocated. Thus we'll end up overreleasing later during the drain of the autorelease pool.
2658
2659         * API/JSWrapperMap.mm:
2660         (objectWithCustomBrand): We no longer alloc here. We instead call the JSValue valueWithValue class method,
2661         which autoreleases for us.
2662         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We no longer call release on the 
2663         constructor or prototype JSValues.
2664         * API/tests/testapi.mm: Added a new test that crashes on ToT due to over-releasing.
2665
2666 2013-03-19  Filip Pizlo  <fpizlo@apple.com>
2667
2668         It's called "Hash Consing" not "Hash Consting"
2669         https://bugs.webkit.org/show_bug.cgi?id=112768
2670
2671         Rubber stamped by Mark Hahnenberg.
2672         
2673         See http://en.wikipedia.org/wiki/Hash_consing
2674
2675         * heap/GCThreadSharedData.cpp:
2676         (JSC::GCThreadSharedData::GCThreadSharedData):
2677         (JSC::GCThreadSharedData::reset):
2678         * heap/GCThreadSharedData.h:
2679         (GCThreadSharedData):
2680         * heap/SlotVisitor.cpp:
2681         (JSC::SlotVisitor::SlotVisitor):
2682         (JSC::SlotVisitor::setup):
2683         (JSC::SlotVisitor::reset):
2684         (JSC::JSString::tryHashConsLock):
2685         (JSC::JSString::releaseHashConsLock):
2686         (JSC::JSString::shouldTryHashCons):
2687         (JSC::SlotVisitor::internalAppend):
2688         * heap/SlotVisitor.h:
2689         (SlotVisitor):
2690         * runtime/JSGlobalData.cpp:
2691         (JSC::JSGlobalData::JSGlobalData):
2692         * runtime/JSGlobalData.h:
2693         (JSGlobalData):
2694         (JSC::JSGlobalData::haveEnoughNewStringsToHashCons):
2695         (JSC::JSGlobalData::resetNewStringsSinceLastHashCons):
2696         * runtime/JSString.h:
2697         (JSC::JSString::finishCreation):
2698         (JSString):
2699         (JSC::JSString::isHashConsSingleton):
2700         (JSC::JSString::clearHashConsSingleton):
2701         (JSC::JSString::setHashConsSingleton):
2702
2703 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2704
2705         DFG implementation of op_strcat should inline rope allocations
2706         https://bugs.webkit.org/show_bug.cgi?id=112780
2707
2708         Reviewed by Oliver Hunt.
2709         
2710         This gets rid of the StrCat node and adds a MakeRope node. The MakeRope node can
2711         take either two or three operands, and allocates a rope string with either two or
2712         three fibers. (The magic choice of three children for non-VarArg nodes happens to
2713         match exactly with the magic choice of three fibers for rope strings.)
2714         
2715         ValueAdd on KnownString is replaced with MakeRope with two children.
2716         
2717         StrCat gets replaced by an appropriate sequence of MakeRope's.
2718         
2719         MakeRope does not do the dynamic check to see if its children are empty strings.
2720         This is replaced by a static check, instead. The downside is that we may use more
2721         memory if the strings passed to MakeRope turn out to dynamically be empty. The
2722         upside is that we do fewer checks in the cases where either the strings are not
2723         empty, or where the strings are statically known to be empty. I suspect both of
2724         those cases are more common, than the case where the string is dynamically empty.
2725         
2726         This also results in some badness for X86. MakeRope needs six registers if it is
2727         allocating a three-rope. We don't have six registers to spare on X86. Currently,
2728         the code side-steps this problem by just never usign three-ropes in optimized
2729         code on X86. All other architectures, including X86_64, don't have this problem.
2730         
2731         This is a shocking speed-up. 9% progressions on both V8/splay and
2732         SunSpider/date-format-xparb. 1% progression on V8v7 overall, and ~0.5% progression
2733         on SunSpider. 2x speed-up on microbenchmarks that test op_strcat.
2734
2735         * dfg/DFGAbstractState.cpp:
2736         (JSC::DFG::AbstractState::executeEffects):
2737         * dfg/DFGAdjacencyList.h:
2738         (AdjacencyList):
2739         (JSC::DFG::AdjacencyList::removeEdge):
2740         * dfg/DFGArgumentsSimplificationPhase.cpp:
2741         (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
2742         * dfg/DFGBackwardsPropagationPhase.cpp:
2743         (JSC::DFG::BackwardsPropagationPhase::propagate):
2744         * dfg/DFGByteCodeParser.cpp:
2745         (JSC::DFG::ByteCodeParser::parseBlock):
2746         * dfg/DFGCSEPhase.cpp:
2747         (JSC::DFG::CSEPhase::putStructureStoreElimination):
2748         (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
2749         (JSC::DFG::CSEPhase::performNodeCSE):
2750         * dfg/DFGDCEPhase.cpp:
2751         (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
2752         * dfg/DFGFixupPhase.cpp:
2753         (JSC::DFG::FixupPhase::fixupNode):
2754         (JSC::DFG::FixupPhase::createToString):
2755         (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
2756         (JSC::DFG::FixupPhase::convertStringAddUse):
2757         (FixupPhase):
2758         (JSC::DFG::FixupPhase::convertToMakeRope):
2759         (JSC::DFG::FixupPhase::fixupMakeRope):
2760         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
2761         * dfg/DFGNodeType.h:
2762         (DFG):
2763         * dfg/DFGOperations.cpp:
2764         * dfg/DFGOperations.h:
2765         * dfg/DFGPredictionPropagationPhase.cpp:
2766         (JSC::DFG::PredictionPropagationPhase::propagate):
2767         * dfg/DFGSpeculativeJIT.cpp:
2768         (JSC::DFG::SpeculativeJIT::compileAdd):
2769         (JSC::DFG::SpeculativeJIT::compileMakeRope):
2770         (DFG):
2771         * dfg/DFGSpeculativeJIT.h:
2772         (JSC::DFG::SpeculativeJIT::callOperation):
2773         (SpeculativeJIT):
2774         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2775         (JSC::DFG::SpeculateCellOperand::~SpeculateCellOperand):
2776         (JSC::DFG::SpeculateCellOperand::gpr):
2777         (JSC::DFG::SpeculateCellOperand::use):
2778         * dfg/DFGSpeculativeJIT32_64.cpp:
2779         (JSC::DFG::SpeculativeJIT::compile):
2780         * dfg/DFGSpeculativeJIT64.cpp:
2781         (JSC::DFG::SpeculativeJIT::compile):
2782         * runtime/JSString.h:
2783         (JSRopeString):
2784
2785 2013-03-20  Peter Gal  <galpeter@inf.u-szeged.hu>
2786
2787         Implement and32 on MIPS platform
2788         https://bugs.webkit.org/show_bug.cgi?id=112665
2789
2790         Reviewed by Zoltan Herczeg.
2791
2792         * assembler/MacroAssemblerMIPS.h:
2793         (JSC::MacroAssemblerMIPS::and32): Added missing method.
2794         (MacroAssemblerMIPS):
2795
2796 2013-03-20  Mark Lam  <mark.lam@apple.com>
2797
2798         Fix incorrect debugger column number value.
2799         https://bugs.webkit.org/show_bug.cgi?id=112741.
2800
2801         Reviewed by Oliver Hunt.
2802
2803         1. In lexer, parser, and debugger code, renamed column to charPosition.
2804         2. Convert the charPosition to the equivalent column number before
2805            passing it to the debugger.
2806         3. Changed ScopeNodes to take both a startLocation and an endLocation.
2807            This allows FunctionBodyNodes, ProgramNodes, and EvalNodess to emit
2808            correct debug hooks with correct starting line and column numbers.
2809         4. Fixed the Lexer to not reset the charPosition (previously
2810            columnNumber) in Lexer::lex().
2811
2812         * JavaScriptCore.order:
2813         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
2814         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
2815         * bytecode/CodeBlock.cpp:
2816         (JSC::CodeBlock::dumpBytecode):
2817         * bytecompiler/BytecodeGenerator.cpp:
2818         (JSC::BytecodeGenerator::emitDebugHook):
2819         * bytecompiler/BytecodeGenerator.h:
2820         (JSC::BytecodeGenerator::emitExpressionInfo):
2821         * bytecompiler/NodesCodegen.cpp:
2822         (JSC::ArrayNode::toArgumentList):
2823         (JSC::ConstStatementNode::emitBytecode):
2824         (JSC::EmptyStatementNode::emitBytecode):
2825         (JSC::DebuggerStatementNode::emitBytecode):
2826         (JSC::ExprStatementNode::emitBytecode):
2827         (JSC::VarStatementNode::emitBytecode):
2828         (JSC::IfNode::emitBytecode):
2829         (JSC::IfElseNode::emitBytecode):
2830         (JSC::DoWhileNode::emitBytecode):
2831         (JSC::WhileNode::emitBytecode):
2832         (JSC::ForNode::emitBytecode):
2833         (JSC::ForInNode::emitBytecode):
2834         (JSC::ContinueNode::emitBytecode):
2835         (JSC::BreakNode::emitBytecode):
2836         (JSC::ReturnNode::emitBytecode):
2837         (JSC::WithNode::emitBytecode):
2838         (JSC::SwitchNode::emitBytecode):
2839         (JSC::LabelNode::emitBytecode):
2840         (JSC::ThrowNode::emitBytecode):
2841         (JSC::TryNode::emitBytecode):
2842         (JSC::ProgramNode::emitBytecode):
2843         (JSC::EvalNode::emitBytecode):
2844         (JSC::FunctionBodyNode::emitBytecode):
2845         * interpreter/Interpreter.cpp:
2846         (JSC::Interpreter::debug):
2847         - convert charPosition to column for the debugger.
2848         * interpreter/Interpreter.h:
2849         * jit/JITStubs.cpp:
2850         (DEFINE_STUB_FUNCTION(void, op_debug)):
2851         * llint/LLIntSlowPaths.cpp:
2852         (LLINT_SLOW_PATH_DECL(slow_op_debug)):
2853         * parser/ASTBuilder.h:
2854         (JSC::ASTBuilder::createFunctionExpr):
2855         (JSC::ASTBuilder::createFunctionBody):
2856         (JSC::ASTBuilder::createGetterOrSetterProperty):
2857         (JSC::ASTBuilder::createFuncDeclStatement):
2858         (JSC::ASTBuilder::createBlockStatement):
2859         (JSC::ASTBuilder::createExprStatement):
2860         (JSC::ASTBuilder::createIfStatement):
2861         (JSC::ASTBuilder::createForLoop):
2862         (JSC::ASTBuilder::createForInLoop):
2863         (JSC::ASTBuilder::createVarStatement):
2864         (JSC::ASTBuilder::createReturnStatement):
2865         (JSC::ASTBuilder::createBreakStatement):
2866         (JSC::ASTBuilder::createContinueStatement):
2867         (JSC::ASTBuilder::createTryStatement):
2868         (JSC::ASTBuilder::createSwitchStatement):
2869         (JSC::ASTBuilder::createWhileStatement):
2870         (JSC::ASTBuilder::createDoWhileStatement):
2871         (JSC::ASTBuilder::createWithStatement):
2872         (JSC::ASTBuilder::createThrowStatement):
2873         (JSC::ASTBuilder::createDebugger):
2874         (JSC::ASTBuilder::createConstStatement):
2875         * parser/Lexer.cpp:
2876         (JSC::::setCode):
2877         (JSC::::internalShift):
2878         (JSC::::shift):
2879         (JSC::::lex):
2880         * parser/Lexer.h:
2881         (JSC::Lexer::currentCharPosition):
2882         (Lexer):
2883         (JSC::::lexExpectIdentifier):
2884         * parser/NodeConstructors.h:
2885         (JSC::Node::Node):
2886         * parser/Nodes.cpp:
2887         (JSC::StatementNode::setLoc):
2888         (JSC::ScopeNode::ScopeNode):
2889         (JSC::ProgramNode::ProgramNode):
2890         (JSC::ProgramNode::create):
2891         (JSC::EvalNode::EvalNode):
2892         (JSC::EvalNode::create):
2893         (JSC::FunctionBodyNode::FunctionBodyNode):
2894         (JSC::FunctionBodyNode::create):
2895         * parser/Nodes.h:
2896         (JSC::Node::charPosition):
2897         (Node):
2898         (StatementNode):
2899         (JSC::StatementNode::lastLine):
2900         (ScopeNode):
2901         (JSC::ScopeNode::startLine):
2902         (JSC::ScopeNode::startCharPosition):
2903         (ProgramNode):
2904         (EvalNode):
2905         (FunctionBodyNode):
2906         * parser/Parser.cpp:
2907         (JSC::::Parser):
2908         (JSC::::parseFunctionBody):
2909         (JSC::::parseFunctionInfo):
2910         * parser/Parser.h:
2911         (JSC::::parse):
2912         * parser/ParserTokens.h:
2913         (JSC::JSTokenLocation::JSTokenLocation):
2914         (JSTokenLocation):
2915         * parser/SyntaxChecker.h:
2916         (JSC::SyntaxChecker::createFunctionBody):
2917
2918 2013-03-20  Csaba Osztrogonác  <ossy@webkit.org>
2919
2920         REGRESSION(r146089): It broke 20 sputnik tests on ARM traditional and Thumb2
2921         https://bugs.webkit.org/show_bug.cgi?id=112676
2922
2923         Rubber-stamped by Filip Pizlo.
2924
2925         Add one more EABI_32BIT_DUMMY_ARG to make DFG JIT ARM EABI compatible
2926         again after r146089 similar to https://bugs.webkit.org/show_bug.cgi?id=84449
2927
2928         * dfg/DFGSpeculativeJIT.h:
2929         (JSC::DFG::SpeculativeJIT::callOperation):
2930
2931 2013-03-19  Michael Saboff  <msaboff@apple.com>
2932
2933         Crash when loading http://www.jqchart.com/jquery/gauges/RadialGauge/LiveData
2934         https://bugs.webkit.org/show_bug.cgi?id=112694
2935
2936         Reviewed by Filip Pizlo.
2937
2938         We were trying to convert an NewArray to a Phantom, but convertToPhantom doesn't handle
2939         nodes with variable arguments.  Added code to insert a Phantom node in front of all the
2940         live children of a var args node.  Added ASSERT not var args for convertToPhantom to
2941         catch any other similar cases.  Added a new convertToPhantomUnchecked() for converting 
2942         var arg nodes.
2943
2944         * dfg/DFGDCEPhase.cpp:
2945         (JSC::DFG::DCEPhase::run):
2946         * dfg/DFGNode.h:
2947         (Node):
2948         (JSC::DFG::Node::setOpAndDefaultNonExitFlags): Added ASSERT(!(m_flags & NodeHasVarArgs))
2949         (JSC::DFG::Node::setOpAndDefaultNonExitFlagsUnchecked):
2950         (JSC::DFG::Node::convertToPhantomUnchecked):
2951
2952 2013-03-19  Mark Hahnenberg  <mhahnenberg@apple.com>
2953
2954         Crash in SpeculativeJIT::fillSpeculateIntInternal<false> on http://bellard.org/jslinux
2955         https://bugs.webkit.org/show_bug.cgi?id=112738
2956
2957         Reviewed by Filip Pizlo.
2958
2959         * dfg/DFGFixupPhase.cpp:
2960         (JSC::DFG::FixupPhase::fixIntEdge): We shouldn't be killing this node because it could be
2961         referenced by other people.
2962
2963 2013-03-19  Oliver Hunt  <oliver@apple.com>
2964
2965         RELEASE_ASSERT fires in exception handler lookup
2966
2967         RS=Geoff Garen.
2968
2969         Temporarily switch this RELEASE_ASSERT into a regular ASSERT 
2970         as currently this is producing fairly bad crashiness.
2971
2972         * bytecode/CodeBlock.cpp:
2973         (JSC::CodeBlock::handlerForBytecodeOffset):
2974
2975 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
2976
2977         DFG should optimize StringObject.length and StringOrStringObject.length
2978         https://bugs.webkit.org/show_bug.cgi?id=112658
2979
2980         Reviewed by Mark Hahnenberg.
2981         
2982         Implemented by injecting a ToString(StringObject:@a) or ToString(StringOrStringObject:@a) prior
2983         to GetArrayLength with ArrayMode(Array::String) if @a is predicted StringObject or
2984         StringOrStringObject.
2985
2986         * dfg/DFGFixupPhase.cpp:
2987         (JSC::DFG::FixupPhase::fixupNode):
2988         (JSC::DFG::FixupPhase::createToString):
2989         (FixupPhase):
2990         (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
2991         (JSC::DFG::FixupPhase::convertStringAddUse):
2992
2993 2013-03-19  Gabor Rapcsanyi  <rgabor@webkit.org>
2994
2995         Implement and32 on ARMv7 and ARM traditional platforms
2996         https://bugs.webkit.org/show_bug.cgi?id=112663
2997
2998         Reviewed by Zoltan Herczeg.
2999
3000         * assembler/MacroAssemblerARM.h:
3001         (JSC::MacroAssemblerARM::and32): Add missing method.
3002         (MacroAssemblerARM):
3003         * assembler/MacroAssemblerARMv7.h:
3004         (JSC::MacroAssemblerARMv7::and32): Add missing method.
3005         (MacroAssemblerARMv7):
3006
3007 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
3008
3009         DFG ToString generic cases should work correctly
3010         https://bugs.webkit.org/show_bug.cgi?id=112654
3011         <rdar://problem/13447250>
3012
3013         Reviewed by Geoffrey Garen.
3014
3015         * dfg/DFGSpeculativeJIT.cpp:
3016         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
3017         * dfg/DFGSpeculativeJIT32_64.cpp:
3018         (JSC::DFG::SpeculativeJIT::compile):
3019         * dfg/DFGSpeculativeJIT64.cpp:
3020         (JSC::DFG::SpeculativeJIT::compile):
3021
3022 2013-03-18  Michael Saboff  <msaboff@apple.com>
3023
3024         Unreviewed build fix for 32 bit builds.
3025
3026         * dfg/DFGSpeculativeJIT32_64.cpp:
3027         (JSC::DFG::SpeculativeJIT::compile):
3028
3029 2013-03-18  Michael Saboff  <msaboff@apple.com>
3030
3031         EFL: Unsafe branch detected in compilePutByValForFloatTypedArray()
3032         https://bugs.webkit.org/show_bug.cgi?id=112609
3033
3034         Reviewed by Geoffrey Garen.
3035
3036         Created local valueFPR and scratchFPR and filled them with valueOp.fpr() and scratch.fpr()
3037         respectively so that if valueOp.fpr() causes a spill during allocation, it occurs before the
3038         branch and also to follow convention.  Added register allocation checks to FPRTemporary.
3039         Cleaned up a couple of other places to follow the "AllocatVirtualRegType foo, get machine
3040         reg from foo" pattern.
3041
3042         * dfg/DFGSpeculativeJIT.cpp:
3043         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
3044         * dfg/DFGSpeculativeJIT.h:
3045         (JSC::DFG::SpeculativeJIT::fprAllocate):
3046         * dfg/DFGSpeculativeJIT32_64.cpp:
3047         (JSC::DFG::SpeculativeJIT::convertToDouble):
3048         (JSC::DFG::SpeculativeJIT::compile):
3049         * dfg/DFGSpeculativeJIT64.cpp:
3050         (JSC::DFG::SpeculativeJIT::compile):
3051
3052 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
3053
3054         DFG should inline binary string concatenations (i.e. ValueAdd with string children)
3055         https://bugs.webkit.org/show_bug.cgi?id=112599
3056
3057         Reviewed by Oliver Hunt.
3058         
3059         This does as advertised: if you do x + y where x and y are strings, you'll get
3060         a fast inlined JSRopeString allocation (along with whatever checks are necessary).
3061         It also does good things if either x or y (or both) are StringObjects, or some
3062         other thing like StringOrStringObject. It also lays the groundwork for making this
3063         fast if either x or y are numbers, or some other reasonably-cheap-to-convert
3064         value.
3065
3066         * dfg/DFGAbstractState.cpp:
3067         (JSC::DFG::AbstractState::executeEffects):
3068         * dfg/DFGFixupPhase.cpp:
3069         (JSC::DFG::FixupPhase::fixupNode):
3070         (FixupPhase):
3071         (JSC::DFG::FixupPhase::isStringObjectUse):
3072         (JSC::DFG::FixupPhase::convertStringAddUse):
3073         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
3074         * dfg/DFGOperations.cpp:
3075         * dfg/DFGOperations.h:
3076         * dfg/DFGSpeculativeJIT.cpp:
3077         (JSC::DFG::SpeculativeJIT::compileAdd):
3078         * dfg/DFGSpeculativeJIT.h:
3079         (JSC::DFG::SpeculativeJIT::callOperation):
3080         (SpeculativeJIT):
3081         (JSC::DFG::SpeculativeJIT::emitAllocateJSCell):
3082         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
3083         * runtime/JSString.h:
3084         (JSC::JSString::offsetOfFlags):
3085         (JSString):
3086         (JSRopeString):
3087         (JSC::JSRopeString::offsetOfFibers):
3088
3089 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
3090
3091         JSC_NATIVE_FUNCTION() takes an identifier for the name and then uses #name, which is unsafe if name was already #define'd to something else
3092         https://bugs.webkit.org/show_bug.cgi?id=112639
3093
3094         Reviewed by Michael Saboff.
3095         
3096         Change it to take a string instead.
3097
3098         * runtime/JSObject.h:
3099         (JSC):
3100         * runtime/ObjectPrototype.cpp:
3101         (JSC::ObjectPrototype::finishCreation):
3102         * runtime/StringPrototype.cpp:
3103         (JSC::StringPrototype::finishCreation):
3104
3105 2013-03-18  Brent Fulgham  <bfulgham@webkit.org>
3106
3107         [WinCairo] Get build working under VS2010.
3108         https://bugs.webkit.org/show_bug.cgi?id=112604
3109
3110         Reviewed by Tim Horton.
3111
3112         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Use CFLite-specific
3113         build target (standard version links against CoreFoundation.lib
3114         instead of CFLite.lib).
3115         * JavaScriptCore.vcxproj/testapi/testapiCommonCFLite.props: Added.
3116         * JavaScriptCore.vcxproj/testapi/testapiDebugCFLite.props: Added.
3117         * JavaScriptCore.vcxproj/testapi/testapiReleaseCFLite.props: Added.
3118
3119 2013-03-18  Roger Fong  <roger_fong@apple.com>
3120
3121         AppleWin VS2010 Debug configuration build fix..
3122
3123         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
3124
3125 2013-03-18  Brent Fulgham  <bfulgham@webkit.org>
3126
3127         [WinCairo] Get build working under VS2010.
3128         https://bugs.webkit.org/show_bug.cgi?id=112604
3129
3130         Reviewed by Tim Horton.
3131
3132         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add build targets for
3133         Debug_WinCairo and Release_WinCairo using CFLite.
3134         * JavaScriptCore.vcxproj/JavaScriptCoreCFLite.props: Added.
3135         * JavaScriptCore.vcxproj/JavaScriptCoreDebugCFLite.props: Added.
3136         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
3137         Add Debug_WinCairo and Release_WinCairo build targets to
3138         make sure headers are copied to proper build folder.
3139         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj: Ditto.
3140         * JavaScriptCore.vcxproj/JavaScriptCoreReleaseCFLite.props: Added.
3141         * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
3142         Add Debug_WinCairo and Release_WinCairo build targets to
3143         make sure headers are copied to proper build folder.
3144         * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
3145         Ditto.
3146         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
3147         Ditto.
3148         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Ditto.
3149         * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj: Ditto.
3150         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Ditto.
3151
3152 2013-03-18  Michael Saboff  <msaboff@apple.com>
3153
3154         Potentially unsafe register allocations in DFG code generation
3155         https://bugs.webkit.org/show_bug.cgi?id=112477
3156
3157         Reviewed by Geoffrey Garen.
3158
3159         Moved allocation of temporary GPRs to be before any generated branches in the functions below.
3160
3161         * dfg/DFGSpeculativeJIT32_64.cpp:
3162         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
3163         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
3164         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
3165         * dfg/DFGSpeculativeJIT64.cpp:
3166         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
3167         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
3168         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
3169
3170 2013-03-15  Filip Pizlo  <fpizlo@apple.com>
3171
3172         DFG string conversions and allocations should be inlined
3173         https://bugs.webkit.org/show_bug.cgi?id=112376
3174
3175         Reviewed by Geoffrey Garen.
3176         
3177         This turns new String(), String(), String.prototype.valueOf(), and
3178         String.prototype.toString() into intrinsics. It gives the DFG the ability to handle
3179         conversions from StringObject to JSString and vice-versa, and also gives it the
3180         ability to handle cases where a variable may be either a StringObject or a JSString.
3181         To do this, I added StringObject to value profiling (and removed the stale
3182         distinction between Myarguments and Foreignarguments). I also cleaned up ToPrimitive
3183         handling, using some of the new functionality but also taking advantage of the
3184         existence of Identity(String:@a).
3185         
3186         This is a 2% SunSpider speed-up. Also there are some speed-ups on V8v7 and Kraken.
3187         On microbenchmarks that stress new String() this is a 14x speed-up.
3188
3189         * CMakeLists.txt:
3190         * DerivedSources.make:
3191         * DerivedSources.pri:
3192         * GNUmakefile.list.am:
3193         * bytecode/CodeBlock.h:
3194         (CodeBlock):
3195         (JSC::CodeBlock::hasExitSite):
3196         (JSC):
3197         * bytecode/DFGExitProfile.cpp:
3198         (JSC::DFG::ExitProfile::hasExitSite):
3199         (DFG):
3200         * bytecode/DFGExitProfile.h:
3201         (ExitProfile):
3202         (JSC::DFG::ExitProfile::hasExitSite):
3203         * bytecode/ExitKind.cpp:
3204         (JSC::exitKindToString):
3205         * bytecode/ExitKind.h:
3206         * bytecode/SpeculatedType.cpp:
3207         (JSC::dumpSpeculation):
3208         (JSC::speculationToAbbreviatedString):
3209         (JSC::speculationFromClassInfo):
3210         * bytecode/SpeculatedType.h:
3211         (JSC):
3212         (JSC::isStringObjectSpeculation):
3213         (JSC::isStringOrStringObjectSpeculation):
3214         * create_hash_table:
3215         * dfg/DFGAbstractState.cpp:
3216         (JSC::DFG::AbstractState::executeEffects):
3217         * dfg/DFGAbstractState.h:
3218         (JSC::DFG::AbstractState::filterEdgeByUse):
3219         * dfg/DFGByteCodeParser.cpp:
3220         (ByteCodeParser):
3221         (JSC::DFG::ByteCodeParser::handleCall):
3222         (JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
3223         (DFG):
3224         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
3225         * dfg/DFGCSEPhase.cpp:
3226         (JSC::DFG::CSEPhase::putStructureStoreElimination):
3227         * dfg/DFGEdge.h:
3228         (JSC::DFG::Edge::shift):
3229         * dfg/DFGFixupPhase.cpp:
3230         (JSC::DFG::FixupPhase::fixupNode):
3231         (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
3232         (FixupPhase):
3233         (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
3234         (JSC::DFG::FixupPhase::observeUseKindOnNode):
3235         * dfg/DFGGraph.h:
3236         (JSC::DFG::Graph::hasGlobalExitSite):
3237         (Graph):
3238         (JSC::DFG::Graph::hasExitSite):
3239         (JSC::DFG::Graph::clobbersWorld):
3240         * dfg/DFGNode.h:
3241         (JSC::DFG::Node::convertToToString):
3242         (Node):
3243         (JSC::DFG::Node::hasStructure):
3244         (JSC::DFG::Node::shouldSpeculateStringObject):
3245         (JSC::DFG::Node::shouldSpeculateStringOrStringObject):
3246         * dfg/DFGNodeType.h:
3247         (DFG):
3248         * dfg/DFGOperations.cpp:
3249         * dfg/DFGOperations.h:
3250         * dfg/DFGPredictionPropagationPhase.cpp:
3251         (JSC::DFG::PredictionPropagationPhase::propagate):
3252         * dfg/DFGSpeculativeJIT.cpp:
3253         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
3254         (DFG):
3255         (JSC::DFG::SpeculativeJIT::compileNewStringObject):
3256         (JSC::DFG::SpeculativeJIT::speculateObject):
3257         (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
3258         (JSC::DFG::SpeculativeJIT::speculateString):
3259         (JSC::DFG::SpeculativeJIT::speculateStringObject):
3260         (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
3261         (JSC::DFG::SpeculativeJIT::speculate):
3262         * dfg/DFGSpeculativeJIT.h:
3263         (JSC::DFG::SpeculativeJIT::callOperation):
3264         (SpeculativeJIT):
3265         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
3266         (DFG):
3267         (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
3268         * dfg/DFGSpeculativeJIT32_64.cpp:
3269         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
3270         (JSC::DFG::SpeculativeJIT::compile):
3271         * dfg/DFGSpeculativeJIT64.cpp:
3272         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
3273         (JSC::DFG::SpeculativeJIT::compile):
3274         * dfg/DFGUseKind.cpp:
3275         (WTF::printInternal):
3276         * dfg/DFGUseKind.h:
3277         (JSC::DFG::typeFilterFor):
3278         * interpreter/CallFrame.h:
3279         (JSC::ExecState::regExpPrototypeTable):
3280         * runtime/CommonIdentifiers.h:
3281         * runtime/Intrinsic.h:
3282         * runtime/JSDestructibleObject.h:
3283         (JSDestructibleObject):
3284         (JSC::JSDestructibleObject::classInfoOffset):
3285         * runtime/JSGlobalData.cpp:
3286         (JSC):
3287         (JSC::JSGlobalData::JSGlobalData):
3288         (JSC::JSGlobalData::~JSGlobalData):
3289         * runtime/JSGlobalData.h:
3290         (JSGlobalData):
3291         * runtime/JSObject.cpp:
3292         * runtime/JSObject.h:
3293         (JSC):
3294         * runtime/JSWrapperObject.h:
3295         (JSC::JSWrapperObject::allocationSize):
3296         (JSWrapperObject):
3297         (JSC::JSWrapperObject::internalValueOffset):
3298         (JSC::JSWrapperObject::internalValueCellOffset):
3299         * runtime/StringPrototype.cpp:
3300         (JSC):
3301         (JSC::StringPrototype::finishCreation):
3302         (JSC::StringPrototype::create):
3303         * runtime/StringPrototype.h:
3304         (StringPrototype):
3305
3306 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
3307
3308         ObjectPrototype properties should be eagerly created rather than lazily via static tables
3309         https://bugs.webkit.org/show_bug.cgi?id=112539
3310
3311         Reviewed by Oliver Hunt.
3312         
3313         This is the first part of https://bugs.webkit.org/show_bug.cgi?id=112233. Rolling this
3314         in first since it's the less-likely-to-be-broken part.
3315
3316         * CMakeLists.txt:
3317         * DerivedSources.make:
3318         * DerivedSources.pri:
3319         * GNUmakefile.list.am:
3320         * interpreter/CallFrame.h:
3321         (JSC::ExecState::objectConstructorTable):
3322         * runtime/CommonIdentifiers.h:
3323         * runtime/JSGlobalData.cpp:
3324         (JSC):
3325         (JSC::JSGlobalData::JSGlobalData):
3326         (JSC::JSGlobalData::~JSGlobalData):
3327         * runtime/JSGlobalData.h:
3328         (JSGlobalData):
3329         * runtime/JSObject.cpp:
3330         (JSC::JSObject::putDirectNativeFunction):
3331         (JSC):
3332         * runtime/JSObject.h:
3333         (JSObject):
3334         (JSC):
3335         * runtime/Lookup.cpp:
3336         (JSC::setUpStaticFunctionSlot):
3337         * runtime/ObjectPrototype.cpp:
3338         (JSC):
3339         (JSC::ObjectPrototype::finishCreation):
3340         (JSC::ObjectPrototype::create):
3341         * runtime/ObjectPrototype.h:
3342         (ObjectPrototype):
3343
3344 2013-03-16  Pratik Solanki  <psolanki@apple.com>
3345
3346         Disable High DPI Canvas on iOS
3347         https://bugs.webkit.org/show_bug.cgi?id=112511
3348
3349         Reviewed by Joseph Pecoraro.
3350
3351         * Configurations/FeatureDefines.xcconfig:
3352
3353 2013-03-15  Andreas Kling  <akling@apple.com>
3354
3355         Don't also clone StructureRareData when cloning Structure.
3356         <http://webkit.org/b/111672>
3357
3358         Reviewed by Mark Hahnenberg.
3359
3360         We were cloning a lot of StructureRareData with only the previousID pointer set since
3361         the enumerationCache is not shared between clones.
3362
3363         Let the Structure copy constructor decide whether it wants to clone the rare data.
3364         The decision is made by StructureRareData::needsCloning() and will currently always
3365         return false, since StructureRareData only holds on to caches at present.
3366         This may change in the future as more members are added to StructureRareData.
3367
3368         * runtime/Structure.cpp:
3369         (JSC::Structure::Structure):
3370         (JSC::Structure::cloneRareDataFrom):
3371         * runtime/StructureInlines.h:
3372         (JSC::Structure::create):
3373
3374 2013-03-15  Mark Hahnenberg  <mhahnenberg@apple.com>
3375
3376         Roll out r145838
3377         https://bugs.webkit.org/show_bug.cgi?id=112458
3378
3379         Unreviewed. Requested by Filip Pizlo.
3380
3381         * CMakeLists.txt:
3382         * DerivedSources.make:
3383         * DerivedSources.pri:
3384         * GNUmakefile.list.am:
3385         * dfg/DFGOperations.cpp:
3386         * interpreter/CallFrame.h:
3387         (JSC::ExecState::objectPrototypeTable):
3388         * jit/JITStubs.cpp:
3389         (JSC::getByVal):
3390         * llint/LLIntSlowPaths.cpp:
3391         (JSC::LLInt::getByVal):
3392         * runtime/CommonIdentifiers.h:
3393         * runtime/JSCell.cpp:
3394         (JSC):
3395         * runtime/JSCell.h:
3396         (JSCell):
3397         * runtime/JSCellInlines.h:
3398         (JSC):
3399         (JSC::JSCell::fastGetOwnProperty):
3400         * runtime/JSGlobalData.cpp:
3401         (JSC):
3402         (JSC::JSGlobalData::JSGlobalData):
3403         (JSC::JSGlobalData::~JSGlobalData):
3404         * runtime/JSGlobalData.h:
3405         (JSGlobalData):
3406         * runtime/JSObject.cpp:
3407         (JSC):
3408         * runtime/JSObject.h:
3409         (JSObject):
3410         (JSC):
3411         * runtime/Lookup.cpp:
3412         (JSC::setUpStaticFunctionSlot):
3413         * runtime/ObjectPrototype.cpp:
3414         (JSC):
3415         (JSC::ObjectPrototype::finishCreation):
3416         (JSC::ObjectPrototype::getOwnPropertySlot):
3417         (JSC::ObjectPrototype::getOwnPropertyDescriptor):
3418         * runtime/ObjectPrototype.h:
3419         (JSC::ObjectPrototype::create):
3420         (ObjectPrototype):
3421         * runtime/PropertyMapHashTable.h:
3422         (JSC::PropertyTable::findWithString):
3423         * runtime/Structure.h:
3424         (Structure):
3425         * runtime/StructureInlines.h:
3426         (JSC::Structure::get):
3427
3428 2013-03-15  Michael Saboff  <msaboff@apple.com>
3429
3430         Cleanup of DFG and Baseline JIT debugging code
3431         https://bugs.webkit.org/show_bug.cgi?id=111871
3432
3433         Reviewed by Geoffrey Garen.
3434
3435         Fixed various debug related issue in baseline and DFG JITs. See below.
3436
3437         * dfg/DFGRepatch.cpp:
3438         (JSC::DFG::dfgLinkClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3439         * dfg/DFGScratchRegisterAllocator.h: Now use ScratchBuffer::activeLengthPtr() to get
3440         pointer to scratch register length.
3441         (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
3442         (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
3443         * dfg/DFGSpeculativeJIT.cpp:
3444         (JSC::DFG::SpeculativeJIT::checkConsistency): Added missing case labels for DataFormatOSRMarker,
3445         DataFormatDead, and DataFormatArguments and made them RELEASE_ASSERT_NOT_REACHED();
3446         * jit/JITCall.cpp:
3447         (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3448         * jit/JITCall32_64.cpp:
3449         (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3450         * runtime/JSGlobalData.h:
3451         (JSC::ScratchBuffer::ScratchBuffer): Fixed buffer allocation alignment to
3452         be on a double boundary.
3453         (JSC::ScratchBuffer::setActiveLength):
3454         (JSC::ScratchBuffer::activeLength):
3455         (JSC::ScratchBuffer::activeLengthPtr):
3456
3457 2013-03-15  Michael Saboff  <msaboff@apple.com>
3458
3459         Add runtime check for improper register allocations in DFG
3460         https://bugs.webkit.org/show_bug.cgi?id=112380
3461
3462         Reviewed by Geoffrey Garen.
3463
3464         Added framework to check for register allocation within a branch source - target range.  All register allocations
3465         are saved using the offset in the code stream where the allocation occurred.  Later when a jump is linked, the
3466         currently saved register allocations are checked to make sure that they didn't occur in the range of code that was
3467         jumped over.  This protects against the case where an allocation could have spilled register contents to free up 
3468         a register and that spill only occurs on one path of a many through the code.  A subsequent fill of the spilled
3469         register may load garbage.  See https://bugs.webkit.org/show_bug.cgi?id=111777 for one such bug.
3470         This code is protected by the compile time check of #if ENABLE(DFG_REGISTER_ALLOCATION_VALIDATION).
3471         The check is only done during the processing of SpeculativeJIT::compile(Node* node) and its callees.
3472  
3473         * assembler/AbstractMacroAssembler.h:
3474         (JSC::AbstractMacroAssembler::Jump::link): Invoke register allocation checks using source and target of link.
3475         (JSC::AbstractMacroAssembler::Jump::linkTo): Invoke register allocation checks using source and target of link.
3476         (AbstractMacroAssembler):
3477         (RegisterAllocationOffset): New helper class to store the instruction stream offset and compare against a 
3478         jump range.
3479         (JSC::AbstractMacroAssembler::RegisterAllocationOffset::RegisterAllocationOffset):
3480         (JSC::AbstractMacroAssembler::RegisterAllocationOffset::check):
3481         (JSC::AbstractMacroAssembler::addRegisterAllocationAtOffset):
3482         (JSC::AbstractMacroAssembler::clearRegisterAllocationOffsets): 
3483         (JSC::AbstractMacroAssembler::checkRegisterAllocationAgainstBranchRange):
3484         * dfg/DFGSpeculativeJIT.h:
3485         (JSC::DFG::SpeculativeJIT::allocate):
3486         * dfg/DFGSpeculativeJIT32_64.cpp:
3487         (JSC::DFG::SpeculativeJIT::compile):
3488         * dfg/DFGSpeculativeJIT64.cpp:
3489         (JSC::DFG::SpeculativeJIT::compile):
3490
3491 2013-03-14  Oliver Hunt  <oliver@apple.com>
3492
3493         REGRESSION(r145000): Crash loading arstechnica.com when Safari Web Inspector is open
3494         https://bugs.webkit.org/show_bug.cgi?id=111868
3495
3496         Reviewed by Antti Koivisto.
3497
3498         Don't allow non-local property lookup when the debugger is enabled.
3499
3500         * bytecompiler/BytecodeGenerator.cpp:
3501         (JSC::BytecodeGenerator::resolve):
3502
3503 2013-03-11  Mark Hahnenberg  <mhahnenberg@apple.com>
3504
3505         Objective-C API: Objective-C functions exposed to JavaScript have the wrong type (object instead of function)
3506         https://bugs.webkit.org/show_bug.cgi?id=105892
3507
3508         Reviewed by Geoffrey Garen.
3509
3510         Changed ObjCCallbackFunction to subclass JSCallbackFunction which already has all of the machinery to call
3511         functions using the C API. Since ObjCCallbackFunction is now a JSCell, we changed the old implementation of
3512         ObjCCallbackFunction to be the internal implementation and keep track of all the proper data so that we 
3513         don't have to put all of that in the header, which will now be included from C++ files (e.g. JSGlobalObject.cpp).
3514
3515         * API/JSCallbackFunction.cpp: Change JSCallbackFunction to allow subclassing. Originally it was internally
3516         passing its own Structure up the chain of constructors, but we now want to be able to pass other Structures as well.
3517         (JSC::JSCallbackFunction::JSCallbackFunction):
3518         (JSC::JSCallbackFunction::create):
3519         * API/JSCallbackFunction.h:
3520         (JSCallbackFunction):
3521         * API/JSWrapperMap.mm: Changed interface to tryUnwrapBlock.
3522         (tryUnwrapObjcObject):
3523         * API/ObjCCallbackFunction.h:
3524         (ObjCCallbackFunction): Moved into the JSC namespace, just like JSCallbackFunction.
3525         (JSC::ObjCCallbackFunction::createStructure): Overridden so that the correct ClassInfo gets used since we have 
3526         a destructor.
3527         (JSC::ObjCCallbackFunction::impl): Getter for the internal impl.
3528         * API/ObjCCallbackFunction.mm:
3529         (JSC::ObjCCallbackFunctionImpl::ObjCCallbackFunctionImpl): What used to be ObjCCallbackFunction is now 
3530         ObjCCallbackFunctionImpl. It handles the Objective-C specific parts of managing callback functions.
3531         (JSC::ObjCCallbackFunctionImpl::~ObjCCallbackFunctionImpl):
3532         (JSC::objCCallbackFunctionCallAsFunction): Same as the old one, but now it casts to ObjCCallbackFunction and grabs the impl 
3533         rather than using JSObjectGetPrivate.
3534         (JSC::ObjCCallbackFunction::ObjCCallbackFunction): New bits to allow being part of the JSCell hierarchy.
3535         (JSC::ObjCCallbackFunction::create):
3536         (JSC::ObjCCallbackFunction::destroy):
3537         (JSC::ObjCCallbackFunctionImpl::call): Handles the actual invocation, just like it used to.
3538         (objCCallbackFunctionForInvocation):
3539         (tryUnwrapBlock): Changed to check the ClassInfo for inheritance directly, rather than going through the C API call.
3540         * API/tests/testapi.mm: Added new test to make sure that doing Function.prototype.toString.call(f) won't result in 
3541         an error when f is an Objective-C method or block underneath the covers.
3542         * runtime/JSGlobalObject.cpp: Added new Structure for ObjCCallbackFunction.
3543         (JSC::JSGlobalObject::reset):
3544         (JSC::JSGlobalObject::visitChildren):
3545         * runtime/JSGlobalObject.h:
3546         (JSGlobalObject):
3547         (JSC::JSGlobalObject::objcCallbackFunctionStructure):
3548
3549 2013-03-14  Mark Hahnenberg  <mhahnenberg@apple.com>
3550
3551         Objective-C API: Nested dictionaries are not converted properly in the Objective-C binding
3552         https://bugs.webkit.org/show_bug.cgi?id=112377
3553
3554         Reviewed by Oliver Hunt.
3555
3556         Accidental reassignment of the root task in the container conversion logic was causing the last 
3557         array or dictionary processed to be returned in the case of nested containers.
3558
3559         * API/JSValue.mm:
3560         (containerValueToObject):
3561         * API/tests/testapi.mm:
3562
3563 2013-03-13  Filip Pizlo  <fpizlo@apple.com>
3564
3565         JSObject fast by-string access optimizations should work even on the prototype chain, and even when the result is undefined
3566         https://bugs.webkit.org/show_bug.cgi?id=112233
3567
3568         Reviewed by Oliver Hunt.
3569         
3570         Extended the existing fast access path for String keys to work over the entire prototype chain,
3571         not just the self access case. This will fail as soon as it sees an object that intercepts
3572         getOwnPropertySlot, so this patch also ensures that ObjectPrototype does not fall into that
3573         category. This is accomplished by making ObjectPrototype eagerly reify all of its properties.
3574         This is safe for ObjectPrototype because it's so common and we expect all of its properties to
3575         be reified for any interesting programs anyway. A new idiom for adding native functions to
3576         prototypes is introduced, which ought to work well for any other prototypes that we wish to do
3577         this conversion for.
3578         
3579         This is a >60% speed-up in the case that you frequently do by-string lookups that "miss", i.e.
3580         they don't turn up anything.
3581
3582         * CMakeLists.txt:
3583         * DerivedSources.make:
3584         * DerivedSources.pri:
3585         * GNUmakefile.list.am:
3586         * dfg/DFGOperations.cpp:
3587         * interpreter/CallFrame.h:
3588         (JSC::ExecState::objectConstructorTable):
3589         * jit/JITStubs.cpp:
3590         (JSC::getByVal):
3591         * llint/LLIntSlowPaths.cpp:
3592         (JSC::LLInt::getByVal):
3593         * runtime/CommonIdentifiers.h:
3594         * runtime/JSCell.cpp:
3595         (JSC::JSCell::getByStringSlow):
3596         (JSC):
3597         * runtime/JSCell.h:
3598         (JSCell):
3599         * runtime/JSCellInlines.h:
3600         (JSC):
3601         (JSC::JSCell::getByStringAndKey):
3602         (JSC::JSCell::getByString):
3603         * runtime/JSGlobalData.cpp:
3604         (JSC):
3605         (JSC::JSGlobalData::JSGlobalData):
3606         (JSC::JSGlobalData::~JSGlobalData):
3607         * runtime/JSGlobalData.h:
3608         (JSGlobalData):
3609         * runtime/JSObject.cpp:
3610         (JSC::JSObject::putDirectNativeFunction):
3611         (JSC):
3612         * runtime/JSObject.h:
3613         (JSObject):
3614         (JSC):
3615         * runtime/Lookup.cpp:
3616         (JSC::setUpStaticFunctionSlot):
3617         * runtime/ObjectPrototype.cpp:
3618         (JSC):
3619         (JSC::ObjectPrototype::finishCreation):
3620         (JSC::ObjectPrototype::create):
3621         * runtime/ObjectPrototype.h:
3622         (ObjectPrototype):
3623         * runtime/PropertyMapHashTable.h:
3624         (JSC::PropertyTable::findWithString):
3625         * runtime/Structure.h:
3626         (Structure):
3627         * runtime/StructureInlines.h:
3628         (JSC::Structure::get):
3629         (JSC):
3630
3631 2013-03-13  Filip Pizlo  <fpizlo@apple.com>
3632
3633         DFG bytecode parser is too aggressive about getting rid of GetLocals on captured variables
3634         https://bugs.webkit.org/show_bug.cgi?id=112287
3635         <rdar://problem/13342340>
3636
3637         Reviewed by Oliver Hunt.
3638
3639         * bytecode/CodeBlock.cpp:
3640         (JSC::CodeBlock::dumpBytecode):
3641         (JSC::CodeBlock::finalizeUnconditionally):
3642         * dfg/DFGByteCodeParser.cpp:
3643         (JSC::DFG::ByteCodeParser::getLocal):
3644
3645 2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>
3646
3647         Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
3648         https://bugs.webkit.org/show_bug.cgi?id=112277
3649
3650         Reviewed by Adam Barth.
3651
3652         * Configurations/FeatureDefines.xcconfig:
3653
3654 2013-03-13  Csaba Osztrogonác  <ossy@webkit.org>
3655
3656         LLINT C loop warning fix for GCC
3657         https://bugs.webkit.org/show_bug.cgi?id=112145
3658
3659         Reviewed by Filip Pizlo.
3660
3661         * llint/LowLevelInterpreter.cpp:
3662         (JSC::CLoop::execute):
3663
3664 2013-02-13  Simon Hausmann  <simon.hausmann@digia.com>
3665
3666         Add support for convenient conversion from JSStringRef to QString
3667         https://bugs.webkit.org/show_bug.cgi?id=109694
3668
3669         Reviewed by Allan Sandfeld Jensen.
3670
3671         Add JSStringCopyQString helper function that allows for the convenient
3672         extraction of a QString out of a JSStringRef.
3673
3674         * API/JSStringRefQt.cpp: Added.
3675         (JSStringCopyQString):
3676         * API/JSStringRefQt.h: Added.
3677         * API/OpaqueJSString.h:
3678         (OpaqueJSString):
3679         (OpaqueJSString::qString):
3680         (OpaqueJSString::OpaqueJSString):
3681         * Target.pri:
3682
3683 2013-03-13  Peter Gal  <galpeter@inf.u-szeged.hu>
3684
3685         Token 'not' is ignored in the offlineasm.
3686         https://bugs.webkit.org/show_bug.cgi?id=111568
3687
3688         Reviewed by Filip Pizlo.
3689
3690         * offlineasm/parser.rb: Build the Not AST node if the 'not' token is found.
3691
3692 2013-03-12  Tim Horton  <timothy_horton@apple.com>
3693
3694         WTF uses macros for exports. Try to fix the Windows build. Unreviewed.
3695
3696         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3697         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3698
3699 2013-03-12  Filip Pizlo  <fpizlo@apple.com>
3700
3701         Array.prototype.sort should at least try to be PTIME even when the array is in some bizarre mode
3702         https://bugs.webkit.org/show_bug.cgi?id=112187
3703         <rdar://problem/13393550>
3704
3705         Reviewed by Michael Saboff and Gavin Barraclough.
3706         
3707         If we have an array-like object in crazy mode passed into Array.prototype.sort, and its length is large,
3708         then first copy all elements into a separate, compact, un-holy array and sort that. Then copy back.
3709         This means that sorting will be at worst O(n^2) in the actual number of things in the array, rather than
3710         O(n^2) in the array's length.
3711
3712         * runtime/ArrayPrototype.cpp:
3713         (JSC::attemptFastSort):
3714         (JSC::performSlowSort):
3715         (JSC):
3716         (JSC::arrayProtoFuncSort):
3717
3718 2013-03-12  Tim Horton  <timothy_horton@apple.com>
3719
3720         Try to fix the Windows build.
3721
3722         Not reviewed.
3723
3724         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3725
3726 2013-03-12  Geoffrey Garen  <ggaren@apple.com>
3727
3728         Try to fix the Windows build.
3729
3730         Not reviewed.
3731
3732         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3733         Export a thing.
3734
3735 2013-03-11  Oliver Hunt  <oliver@apple.com>
3736
3737         Harden JSStringJoiner
3738         https://bugs.webkit.org/show_bug.cgi?id=112093
3739
3740         Reviewed by Filip Pizlo.
3741
3742         Harden JSStringJoiner, make it use our CheckedArithmetic
3743         class to simplify everything.
3744
3745         * runtime/JSStringJoiner.cpp:
3746         (JSC::JSStringJoiner::build):
3747         * runtime/JSStringJoiner.h:
3748         (JSStringJoiner):
3749         (JSC::JSStringJoiner::JSStringJoiner):
3750         (JSC::JSStringJoiner::append):
3751
3752 2013-03-12  Filip Pizlo  <fpizlo@apple.com>
3753
3754         DFG generic array access cases should not be guarded by CheckStructure even of the profiling tells us that it could be
3755         https://bugs.webkit.org/show_bug.cgi?id=112183
3756
3757         Reviewed by Oliver Hunt.
3758         
3759         Slight speed-up on string-unpack-code.
3760
3761         * dfg/DFGFixupPhase.cpp:
3762         (JSC::DFG::FixupPhase::findAndRemoveUnnecessaryStructureCheck):
3763         (FixupPhase):
3764         (JSC::DFG::FixupPhase::checkArray):
3765         (JSC::DFG::FixupPhase::blessArrayOperation):
3766
3767 2013-03-12  Gabor Rapcsanyi  <rgabor@webkit.org>
3768
3769         https://bugs.webkit.org/show_bug.cgi?id=112141
3770         LLInt CLoop backend misses Double2Ints() on 32bit architectures
3771
3772         Reviewed by Filip Pizlo.
3773
3774         Implement Double2Ints() in CLoop backend of LLInt on 32bit architectures.
3775
3776         * llint/LowLevelInterpreter.cpp:
3777         (LLInt):
3778         (JSC::LLInt::Double2Ints):
3779         * offlineasm/cloop.rb:
3780
3781 2013-03-12  Gabor Rapcsanyi  <rgabor@webkit.org>
3782
3783         Making more sophisticated cache flush on ARM Linux platform
3784         https://bugs.webkit.org/show_bug.cgi?id=111854
3785
3786         Reviewed by Zoltan Herczeg.
3787
3788         The cache flush on ARM Linux invalidates whole pages
3789         instead of just the required area.
3790
3791         * assembler/ARMAssembler.h:
3792         (ARMAssembler):
3793         (JSC::ARMAssembler::linuxPageFlush):
3794         (JSC::ARMAssembler::cacheFlush):
3795         * assembler/ARMv7Assembler.h:
3796         (ARMv7Assembler):
3797         (JSC::ARMv7Assembler::linuxPageFlush):
3798         (JSC::ARMv7Assembler::cacheFlush):
3799
3800 2013-03-12  Gabor Rapcsanyi  <rgabor@webkit.org>
3801
3802         Renaming the armv7.rb LLINT backend to arm.rb
3803         https://bugs.webkit.org/show_bug.cgi?id=110565
3804
3805         Reviewed by Zoltan Herczeg.
3806
3807         This is the first step of a unified ARM backend for
3808         all ARM 32 bit architectures in LLInt.
3809
3810         * CMakeLists.txt:
3811         * GNUmakefile.list.am:
3812         * JavaScriptCore.gypi:
3813         * LLIntOffsetsExtractor.pro:
3814         * offlineasm/arm.rb: Copied from Source/JavaScriptCore/offlineasm/armv7.rb.
3815         * offlineasm/armv7.rb: Removed.
3816         * offlineasm/backends.rb:
3817         * offlineasm/risc.rb:
3818
3819 2013-03-12  Csaba Osztrogonác  <ossy@webkit.org>
3820
3821         REGRESSION(r145482): It broke 33 jsc tests and zillion layout tests on all platform
3822         https://bugs.webkit.org/show_bug.cgi?id=112112
3823
3824         Reviewed by Oliver Hunt.
3825
3826         Rolling out https://trac.webkit.org/changeset/145482 to unbreak the bots.
3827
3828         * runtime/JSStringJoiner.cpp:
3829         (JSC::JSStringJoiner::build):
3830         * runtime/JSStringJoiner.h:
3831         (JSStringJoiner):
3832         (JSC::JSStringJoiner::JSStringJoiner):
3833         (JSC::JSStringJoiner::append):
3834
3835 2013-03-12  Filip Pizlo  <fpizlo@apple.com>
3836
3837         DFG prediction propagation phase should not rerun forward propagation if double voting has already converged
3838         https://bugs.webkit.org/show_bug.cgi?id=111920
3839
3840         Reviewed by Oliver Hunt.
3841         
3842         I don't know why we weren't exiting early after double voting if !m_changed.
3843         
3844         This change also removes backwards propagation from the voting fixpoint, since at that
3845         point short-circuiting loops is probably not particularly profitable. Profiling shows
3846         that this reduces the time spent in prediction propagation even further.
3847         
3848         This change appears to be a 1% SunSpider speed-up.
3849
3850         * dfg/DFGPredictionPropagationPhase.cpp:
3851         (JSC::DFG::PredictionPropagationPhase::run):
3852
3853 2013-03-11  Filip Pizlo  <fpizlo@apple.com>
3854
3855         DFG overflow check elimination is too smart for its own good
3856         https://bugs.webkit.org/show_bug.cgi?id=111832
3857
3858         Reviewed by Oliver Hunt and Gavin Barraclough.
3859         
3860         Rolling this back in after fixing accidental misuse of JSValue. The code was doing value < someInt
3861         rather than value.asInt32() < someInt. This "worked" when isWithinPowerOfTwo wasn't templatized.
3862         It worked by always being false and always disabling the relvant optimization.
3863         
3864         This improves overflow check elimination in three ways:
3865         
3866         1) It reduces the amount of time the compiler will spend doing it.
3867         
3868         2) It fixes bugs where overflow check elimination was overzealous. Precisely, for a binary operation
3869            over @a and @b where both @a and @b will type check that their inputs (@a->children, @b->children)
3870            are int32's and then perform a possibly-overflowing operation, we must be careful not to assume
3871            that @a's non-int32 parts don't matter if at the point that @a runs we have as yet not proved that
3872            @b->children are int32's and that hence @b might produce a large enough result that doubles would
3873            start chopping low bits. The specific implication of this is that for a binary operation to not
3874            propagate that it cares about non-int32 parts (NodeUsedAsNumber), we must prove that at least one
3875            of the inputs is guaranteed to produce a result within 2^32 and that there won't be a tower of such
3876            operations large enough to ultimately produce a double greater than 2^52 (roughly). We achieve the
3877            latter by disabling this optimization for very large basic blocks. It's noteworthy that blocks that
3878            large won't even make it into the DFG currently.
3879         
3880         3) It makes the overflow check elimination more precise for cases where the inputs to an Add or Sub
3881            are the outputs of a bit-op. For example in (@a + (@b | 0)) | 0, we don't need to propagate
3882            NodeUsedAsNumber to either @a or @b.
3883         
3884         This is neutral on V8v7 and a slight speed-up on compile time benchmarks.
3885
3886         * CMakeLists.txt:
3887         * GNUmakefile.list.am:
3888         * JavaScriptCore.xcodeproj/project.pbxproj:
3889         * Target.pri:
3890         * dfg/DFGArrayMode.cpp:
3891         (JSC::DFG::ArrayMode::refine):
3892         * dfg/DFGBackwardsPropagationPhase.cpp: Added.
3893         (DFG):
3894         (BackwardsPropagationPhase):
3895         (JSC::DFG::BackwardsPropagationPhase::BackwardsPropagationPhase):
3896         (JSC::DFG::BackwardsPropagationPhase::run):
3897         (JSC::DFG::BackwardsPropagationPhase::isNotNegZero):
3898         (JSC::DFG::BackwardsPropagationPhase::isNotZero):
3899         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoForConstant):
3900         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoNonRecursive):
3901         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
3902         (JSC::DFG::BackwardsPropagationPhase::mergeDefaultFlags):
3903         (JSC::DFG::BackwardsPropagationPhase::propagate):
3904         (JSC::DFG::performBackwardsPropagation):
3905         * dfg/DFGBackwardsPropagationPhase.h: Added.
3906         (DFG):
3907         * dfg/DFGCPSRethreadingPhase.cpp:
3908         (JSC::DFG::CPSRethreadingPhase::run):
3909         (JSC::DFG::CPSRethreadingPhase::clearIsLoadedFrom):
3910         (CPSRethreadingPhase):
3911         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
3912         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
3913         * dfg/DFGDriver.cpp:
3914         (JSC::DFG::compile):
3915         * dfg/DFGGraph.cpp:
3916         (JSC::DFG::Graph::dump):
3917         * dfg/DFGNodeFlags.cpp:
3918         (JSC::DFG::dumpNodeFlags):
3919         (DFG):
3920         * dfg/DFGNodeFlags.h:
3921         (DFG):
3922         * dfg/DFGPredictionPropagationPhase.cpp:
3923         (PredictionPropagationPhase):
3924         (JSC::DFG::PredictionPropagationPhase::propagate):
3925         * dfg/DFGUnificationPhase.cpp:
3926         (JSC::DFG::UnificationPhase::run):
3927         * dfg/DFGVariableAccessData.h:
3928         (JSC::DFG::VariableAccessData::VariableAccessData):
3929         (JSC::DFG::VariableAccessData::mergeIsLoadedFrom):
3930         (VariableAccessData):
3931         (JSC::DFG::VariableAccessData::setIsLoadedFrom):
3932         (JSC::DFG::VariableAccessData::isLoadedFrom):
3933
3934 2013-03-11  Oliver Hunt  <oliver@apple.com>
3935
3936         Harden JSStringJoiner
3937         https://bugs.webkit.org/show_bug.cgi?id=112093
3938
3939         Reviewed by Filip Pizlo.
3940
3941         Harden JSStringJoiner, make it use our CheckedArithmetic
3942         class to simplify everything.
3943
3944         * runtime/JSStringJoiner.cpp:
3945         (JSC::JSStringJoiner::build):
3946         * runtime/JSStringJoiner.h:
3947         (JSStringJoiner):
3948         (JSC::JSStringJoiner::JSStringJoiner):
3949         (JSC::JSStringJoiner::append):
3950
3951 2013-03-11  Michael Saboff  <msaboff@apple.com>
3952
3953         Crash beneath operationCreateInlinedArguments running fast/js/dfg-create-inlined-arguments-in-closure-inline.html (32-bit only)
3954         https://bugs.webkit.org/show_bug.cgi?id=112067
3955
3956         Reviewed by Geoffrey Garen.
3957
3958         We weren't setting the tag in SetCallee.  Therefore set it to CellTag.
3959
3960         * dfg/DFGSpeculativeJIT32_64.cpp:
3961         (JSC::DFG::SpeculativeJIT::compile):
3962
3963 2013-03-11  Oliver Hunt  <oliver@apple.com>
3964
3965         Make SegmentedVector Noncopyable
3966         https://bugs.webkit.org/show_bug.cgi?id=112059
3967
3968         Reviewed by Geoffrey Garen.
3969
3970         Copying a SegmentedVector is very expensive, and really shouldn't
3971         be necessary.  So I've taken the one place where we currently copy
3972         and replaced it with a regular Vector, and replaced the address
3973         dependent logic with a indexing ref instead.
3974
3975         * bytecompiler/BytecodeGenerator.cpp:
3976         (JSC::BytecodeGenerator::newLabelScope):
3977         (JSC::BytecodeGenerator::emitComplexJumpScopes):
3978         * bytecompiler/BytecodeGenerator.h:
3979         (BytecodeGenerator):
3980         * bytecompiler/LabelScope.h:
3981         (JSC):
3982         (JSC::LabelScopePtr::LabelScopePtr):
3983         (LabelScopePtr):
3984         (JSC::LabelScopePtr::operator=):
3985         (JSC::LabelScopePtr::~LabelScopePtr):
3986         (JSC::LabelScopePtr::operator*):
3987         (JSC::LabelScopePtr::operator->):
3988         * bytecompiler/NodesCodegen.cpp:
3989         (JSC::DoWhileNode::emitBytecode):
3990         (JSC::WhileNode::emitBytecode):
3991         (JSC::ForNode::emitBytecode):
3992         (JSC::ForInNode::emitBytecode):
3993         (JSC::SwitchNode::emitBytecode):
3994         (JSC::LabelNode::emitBytecode):
3995
3996 2013-03-10  Andreas Kling  <akling@apple.com>
3997
3998         SpeculativeJIT should use OwnPtr<SlowPathGenerator>.
3999         <http://webkit.org/b/111942>
4000
4001         Reviewed by Anders Carlsson.
4002
4003         There's no need to include DFGSlowPathGenerator.h from the header as long as the destructor is out-of-line,
4004         so let's use OwnPtr instead of raw pointers + deleteAllValues().
4005
4006         * dfg/DFGSpeculativeJIT.cpp:
4007         (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
4008         (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
4009         * dfg/DFGSpeculativeJIT.h:
4010         (SpeculativeJIT):