[Qt][Mac] Build fails after adding ICU support (r105997).
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-01-27  Zeno Albisser  <zeno@webkit.org>
2
3         [Qt][Mac] Build fails after adding ICU support (r105997).
4         https://bugs.webkit.org/show_bug.cgi?id=77118
5
6         Use Apple code path for unicode date formats on mac.
7
8         Reviewed by Tor Arne Vestbø.
9
10         * runtime/DatePrototype.cpp:
11         ():
12
13 2012-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>
14
15         [GTK] Add a GKeyFile especialization to GOwnPtr
16         https://bugs.webkit.org/show_bug.cgi?id=77191
17
18         Reviewed by Martin Robinson.
19
20         * wtf/gobject/GOwnPtr.cpp:
21         (WTF::GKeyFile): Implement freeOwnedGPtr for GKeyFile.
22         * wtf/gobject/GOwnPtr.h: Add GKeyFile template.
23         * wtf/gobject/GTypedefs.h: Add forward declaration for GKeyFile.
24
25 2012-01-25  Yury Semikhatsky  <yurys@chromium.org>
26
27         Web Inspector: should be possible to open function declaration from script popover
28         https://bugs.webkit.org/show_bug.cgi?id=76913
29
30         Added display function name and source location to the popover in scripts panel.
31         Now when a function is hovered user can navigate to its definition.
32
33         Reviewed by Pavel Feldman.
34
35         * JavaScriptCore/JavaScriptCore.exp
36         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
37         * runtime/JSFunction.h:
38         (JSFunction):
39
40 2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>
41
42         [wx] Unreviewed. Build fix, wx uses the Mac ICU headers so we must match Mac behavior.
43         
44         * runtime/DatePrototype.cpp:
45         ():
46
47 2012-01-26  Mark Hahnenberg  <mhahnenberg@apple.com>
48
49         Merge AllocationSpace into MarkedSpace
50         https://bugs.webkit.org/show_bug.cgi?id=77116
51
52         Reviewed by Geoffrey Garen.
53
54         Merging AllocationSpace and MarkedSpace in preparation for future refactoring/enhancement to 
55         MarkedSpace allocation.
56
57         * CMakeLists.txt:
58         * GNUmakefile.list.am:
59         * JavaScriptCore.exp:
60         * JavaScriptCore.gypi:
61         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
62         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
63         * JavaScriptCore.xcodeproj/project.pbxproj:
64         * Target.pri:
65         * heap/AllocationSpace.cpp: Removed.
66         * heap/AllocationSpace.h: Removed.
67         * heap/BumpSpace.h:
68         (BumpSpace):
69         * heap/Heap.h:
70         (JSC::Heap::objectSpace):
71         (Heap):
72         ():
73         * heap/HeapBlock.h:
74         ():
75         * heap/MarkedSpace.cpp:
76         (JSC::MarkedSpace::tryAllocateHelper):
77         (JSC):
78         (JSC::MarkedSpace::tryAllocate):
79         (JSC::MarkedSpace::allocateSlowCase):
80         (JSC::MarkedSpace::allocateBlock):
81         (JSC::MarkedSpace::freeBlocks):
82         (TakeIfUnmarked):
83         (JSC::TakeIfUnmarked::TakeIfUnmarked):
84         (JSC::TakeIfUnmarked::operator()):
85         (JSC::TakeIfUnmarked::returnValue):
86         (JSC::MarkedSpace::shrink):
87         (GatherDirtyCells):
88         (JSC::GatherDirtyCells::returnValue):
89         (JSC::GatherDirtyCells::GatherDirtyCells):
90         (JSC::GatherDirtyCells::operator()):
91         (JSC::MarkedSpace::gatherDirtyCells):
92         * heap/MarkedSpace.h:
93         (MarkedSpace):
94         (JSC::MarkedSpace::blocks):
95         (JSC::MarkedSpace::forEachCell):
96         (JSC):
97         (JSC::MarkedSpace::allocate):
98
99 2012-01-26  Oliver Hunt  <oliver@apple.com>
100
101         MSVC bug fix.
102         <rdar://problem/10703671> MSVC generates bad code for enum compare.
103
104         RS=Geoff
105
106         Make bitfield large enough to work around MSVC's desire to make enums
107         signed types.
108
109         * bytecode/CallLinkInfo.h:
110         (CallLinkInfo):
111
112 2012-01-26  Filip Pizlo  <fpizlo@apple.com>
113
114         All DFG helpers that may call out to arbitrary JS code must know where they
115         were called from due to inlining and call stack walking
116         https://bugs.webkit.org/show_bug.cgi?id=77070
117         <rdar://problem/10750834>
118
119         Reviewed by Geoff Garen.
120         
121         Changed the DFG to always record a code origin index in the tag of the argument
122         count (which we previously left blank for the benefit of LLInt, but is still
123         otherwise unused by the DFG), so that if we ever need to walk the stack accurately
124         we know where to start. In particular, if the current ExecState* points several
125         semantic call frames away from the true semantic call frame because we had
126         performed inlining, having the code origin index recorded means that we can reify
127         those call frames as necessary to give runtime/library code an accurate view of
128         the current JS state.
129         
130         This required several large but mechanical changes:
131         
132         - Calling a function from the DFG now plants a store32 instruction to store the
133           code origin index. But the indices of code origins were previously picked by
134           the DFG::JITCompiler after code generation completed. I changed this somewhat;
135           even though the code origins are put into the CodeBlock after code gen, the
136           code gen now knows a priori what their indices will be. Extensive assertions
137           are in place to ensure that the two don't get out of sync, in the form of the
138           DFG::CallBeginToken. Note that this mechanism has almost no effect on JS calls;
139           those don't need the code origin index set in the call frame because we can get
140           it by doing a binary search on the return PC.
141
142         - Stack walking now always calls trueCallFrame() first before beginning the walk,
143           since even the top call frame may be wrong. It still calls trueCallerFrame() as
144           before to get to the next frame, though trueCallerFrame() is now mostly a
145           wrapper around callerFrame()->trueCallFrame().
146           
147         - Because the mechanism for getting the code origin of a call frame is bimodal
148           (either the call frame knows its code origin because the code origin index was
149           set, or it's necessary to use the callee frame's return PC), I put in extra
150           mechanisms to determine whether your caller, or your callee, corresponds to
151           a call out of C++ code. Previously we just had the host call flag, but this is
152           insufficient as it does not cover the case of someone calling JSC::call(). But
153           luckily we can determine this just by looking at the return PC: if the return
154           PC is in range of the ctiTrampiline, then two things are true: this call
155           frame's PC will tell you nothing about where you came from in your caller, and
156           the caller already knows where it's at because it must have set the code origin
157           index (unless it's not DFG code, in which case we don't care because there is
158           no inlining to worry about).
159           
160         - During testing this revealed a simple off-by-one goof in DFG::ByteCodeParser's
161           inlining code, so I fixed it.
162
163         - Finally because I was tired of doing random #if's for checking if I should be
164           passing around an Instruction* or a ReturnAddressPtr, I created a class called
165           AbstractPC that holds whatever notion of a PC is appropriate for the current
166           execution environment. It's designed to work gracefully even if both the
167           interpreter and the JIT are compiled in, and should integrate nicely with the
168           LLInt.
169           
170         This is neutral on all benchmarks and fixes some nasty corner-case regressions of
171         evil code that uses combinations of getters/setters and function.arguments.
172
173         * CMakeLists.txt:
174         * GNUmakefile.list.am:
175         * JavaScriptCore.exp:
176         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
177         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
178         * JavaScriptCore.xcodeproj/project.pbxproj:
179         * Target.pri:
180         * bytecode/CodeBlock.h:
181         (JSC::CodeBlock::codeOrigin):
182         (CodeBlock):
183         * dfg/DFGByteCodeParser.cpp:
184         (JSC::DFG::ByteCodeParser::handleInlining):
185         * dfg/DFGJITCompiler.cpp:
186         (JSC::DFG::JITCompiler::link):
187         * dfg/DFGJITCompiler.h:
188         (CallBeginToken):
189         (JSC::DFG::CallBeginToken::CallBeginToken):
190         (JSC::DFG::CallBeginToken::assertCodeOriginIndex):
191         (JSC::DFG::CallBeginToken::assertNoCodeOriginIndex):
192         (DFG):
193         (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
194         (CallExceptionRecord):
195         (JSC::DFG::JITCompiler::JITCompiler):
196         (JITCompiler):
197         (JSC::DFG::JITCompiler::nextCallBeginToken):
198         (JSC::DFG::JITCompiler::beginCall):
199         (JSC::DFG::JITCompiler::notifyCall):
200         (JSC::DFG::JITCompiler::addExceptionCheck):
201         (JSC::DFG::JITCompiler::addFastExceptionCheck):
202         * dfg/DFGOperations.cpp:
203         ():
204         * dfg/DFGRepatch.cpp:
205         (JSC::DFG::tryBuildGetByIDList):
206         * dfg/DFGSpeculativeJIT.h:
207         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
208         * dfg/DFGSpeculativeJIT32_64.cpp:
209         (JSC::DFG::SpeculativeJIT::emitCall):
210         * dfg/DFGSpeculativeJIT64.cpp:
211         (JSC::DFG::SpeculativeJIT::emitCall):
212         * interpreter/AbstractPC.cpp: Added.
213         (JSC):
214         (JSC::AbstractPC::AbstractPC):
215         * interpreter/AbstractPC.h: Added.
216         (JSC):
217         (AbstractPC):
218         (JSC::AbstractPC::AbstractPC):
219         (JSC::AbstractPC::hasJITReturnAddress):
220         (JSC::AbstractPC::jitReturnAddress):
221         (JSC::AbstractPC::hasInterpreterReturnAddress):
222         (JSC::AbstractPC::interpreterReturnAddress):
223         (JSC::AbstractPC::isSet):
224         (JSC::AbstractPC::operator!):
225         ():
226         * interpreter/CallFrame.cpp:
227         (JSC):
228         (JSC::CallFrame::trueCallFrame):
229         (JSC::CallFrame::trueCallerFrame):
230         * interpreter/CallFrame.h:
231         (JSC::ExecState::abstractReturnPC):
232         (JSC::ExecState::codeOriginIndexForDFGWithInlining):
233         (ExecState):
234         (JSC::ExecState::trueCallFrame):
235         (JSC::ExecState::trueCallFrameFromVMCode):
236         * interpreter/Interpreter.cpp:
237         (JSC::Interpreter::retrieveArgumentsFromVMCode):
238         (JSC::Interpreter::retrieveCallerFromVMCode):
239         (JSC::Interpreter::findFunctionCallFrameFromVMCode):
240         * interpreter/Interpreter.h:
241         (Interpreter):
242         ():
243         * jit/JITStubs.cpp:
244         (JSC):
245         ():
246         * jit/JITStubs.h:
247         (JSC):
248         (JSC::returnAddressIsInCtiTrampoline):
249         * runtime/JSFunction.cpp:
250         (JSC::JSFunction::argumentsGetter):
251         (JSC::JSFunction::callerGetter):
252         (JSC::JSFunction::getOwnPropertyDescriptor):
253
254 2012-01-26  Peter Varga  <pvarga@webkit.org>
255
256         Fix build when VERBOSE_SPECULATION_FAILURE is enabled in DFG
257         https://bugs.webkit.org/show_bug.cgi?id=77104
258
259         Reviewed by Filip Pizlo.
260
261         * dfg/DFGOperations.cpp:
262         ():
263
264 2012-01-26  Michael Saboff  <msaboff@apple.com>
265
266         String::latin1() should take advantage of 8 bit strings
267         https://bugs.webkit.org/show_bug.cgi?id=76646
268
269         Reviewed by Geoffrey Garen.
270
271         * wtf/text/WTFString.cpp:
272         (WTF::String::latin1): For 8 bit strings, use existing buffer
273         without conversion.
274
275 2012-01-26  Michael Saboff  <msaboff@apple.com>
276
277         Dromaeo tests usage of StringImpl find routines cause 8->16 bit conversions
278         https://bugs.webkit.org/show_bug.cgi?id=76645
279
280         Reviewed by Geoffrey Garen.
281
282         * wtf/text/StringImpl.cpp:
283         (WTF::equalIgnoringCase): New LChar version.
284         (WTF::findInner): New helper function.
285         (WTF::StringImpl::find): Added 8 bit path.
286         (WTF::reverseFindInner): New helper funciton.
287         (WTF::StringImpl::reverseFind): Added 8 bit path.
288         (WTF::StringImpl::reverseFindIgnoringCase): Added 8 bit path.
289         * wtf/text/StringImpl.h:
290         (WTF):
291
292 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
293
294         [Qt][Win] One more speculative buildfix after r105970.
295
296         * JavaScriptCore.pri:
297
298 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
299
300         [Qt][Win] Speculative buildfix after r105970.
301
302         * JavaScriptCore.pri: Link lgdi for DeleteObject() and DeleteDC().
303
304 2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>
305
306         Unreviewed, rolling out r105982.
307         http://trac.webkit.org/changeset/105982
308         https://bugs.webkit.org/show_bug.cgi?id=77090
309
310         breaks the world (Requested by WildFox on #webkit).
311
312         * wtf/MainThread.cpp:
313         (WTF):
314         * wtf/Platform.h:
315         * wtf/mac/MainThreadMac.mm:
316         (WTF):
317         (WTF::registerGCThread):
318         (WTF::isMainThreadOrGCThread):
319
320 2012-01-26  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
321
322         [Qt] GC should be parallel on Qt platform
323         https://bugs.webkit.org/show_bug.cgi?id=73309
324
325         Reviewed by Zoltan Herczeg.
326
327         These changes made the parallel gc feature available for Qt port.
328         The implementation of "registerGCThread" and "isMainThreadOrGCThread"
329         is moved from MainThreadMac.mm to the common MainThread.cpp to make
330         them available for other platforms.
331
332         Measurement results:
333         V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
334         WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
335         V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]
336
337         Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
338
339         * wtf/MainThread.cpp:
340         (WTF):
341         (WTF::registerGCThread):
342         (WTF::isMainThreadOrGCThread):
343         * wtf/Platform.h:
344         * wtf/mac/MainThreadMac.mm:
345
346 2012-01-26  Andy Estes  <aestes@apple.com>
347
348         REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
349         https://bugs.webkit.org/show_bug.cgi?id=77073
350
351         Reviewed by Ryosuke Niwa.
352         
353         r105555 changed PLATFORM(WIN) to OS(WIN), but WTF_OS_WIN isn't defined.
354         This should have been changed to OS(WINDOWS). This causes the
355         preprocessor to strip out Win32 data type overrides for deleteOwnedPtr,
356         causing allocations made by Win32 to be deleted by fastmalloc.
357
358         * wtf/OwnPtrCommon.h:
359         (WTF): Use OS(WINDOWS) instead of OS(WIN).
360
361 2012-01-25  Mark Rowe  <mrowe@apple.com>
362
363         Attempted Mac build fix after r105939.
364
365         * runtime/DatePrototype.cpp: Don't #include unicode/udat.h on Mac or iOS.
366         It isn't used on these platforms and isn't available in the ICU headers
367         for Mac.
368
369 2012-01-25  Mark Rowe  <mrowe@apple.com>
370
371         Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.
372
373         <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH
374
375         Reviewed by David Kilzer.
376
377         * Configurations/Base.xcconfig: Define NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR, which contains
378         the path where JavaScriptCore is normally installed. Update JAVASCRIPTCORE_FRAMEWORKS_DIR
379         to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.
380         * Configurations/JavaScriptCore.xcconfig: Always set the framework's install name based on
381         the normal framework location. This prevents an incorrect install name from being used when
382         installing in to the staged frameworks directory.
383
384 2012-01-25  Eli Fidler  <efidler@rim.com>
385
386         Implement Date.toLocaleString() using ICU
387         https://bugs.webkit.org/show_bug.cgi?id=76714
388
389         Reviewed by Darin Adler.
390
391         * runtime/DatePrototype.cpp:
392         (JSC::formatLocaleDate):
393
394 2012-01-25  Hajime Morita  <morrita@google.com>
395
396         ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
397         https://bugs.webkit.org/show_bug.cgi?id=76863
398
399         Reviewed by Dimitri Glazkov.
400
401         Added a feature flag.
402
403         * Configurations/FeatureDefines.xcconfig:
404
405 2012-01-25  Yong Li  <yoli@rim.com>
406
407         [BlackBerry] Implement OSAllocator::commit/decommit.
408         BlackBerry port should support virtual memory decommiting.
409         https://bugs.webkit.org/show_bug.cgi?id=77013
410
411         Reviewed by Rob Buis.
412
413         * wtf/OSAllocatorPosix.cpp:
414         (WTF::OSAllocator::reserveUncommitted):
415         (WTF::OSAllocator::commit):
416         (WTF::OSAllocator::decommit):
417         * wtf/Platform.h:
418
419 2012-01-24  Oliver Hunt  <oliver@apple.com>
420
421         Make DFG update topCallFrame
422         https://bugs.webkit.org/show_bug.cgi?id=76969
423
424         Reviewed by Filip Pizlo.
425
426         Add NativeCallFrameTracer to manage topCallFrame assignment
427         in the DFG operations, and make use of it.
428
429         * dfg/DFGOperations.cpp:
430         (JSC::DFG::operationPutByValInternal):
431         ():
432         * interpreter/Interpreter.h:
433         (JSC):
434         (NativeCallFrameTracer):
435         (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
436
437 2012-01-24  Filip Pizlo  <fpizlo@apple.com>
438
439         Inlining breaks call frame walking when the walking is done from outside the inlinee,
440         but inside a code block that had inlining
441         https://bugs.webkit.org/show_bug.cgi?id=76978
442         <rdar://problem/10720904>
443
444         Reviewed by Oliver Hunt.
445
446         * bytecode/CodeBlock.h:
447         (JSC::CodeBlock::codeOriginForReturn):
448         * interpreter/CallFrame.cpp:
449         (JSC::CallFrame::trueCallerFrame):
450
451 2012-01-24  Gavin Barraclough  <barraclough@apple.com>
452
453         https://bugs.webkit.org/show_bug.cgi?id=76855
454         Implement a JIT-code aware sampling profiler for JSC
455
456         Reviewed by Oliver Hunt.
457
458         Add support to MetaAllocator.cpp to track all live handles in a map,
459         allowing lookup based on any address within the allocation.
460
461         * wtf/MetaAllocator.cpp:
462         (WTF::MetaAllocatorTracker::notify):
463         (WTF::MetaAllocatorTracker::release):
464             - Track live handle objects in a map.
465         (WTF::MetaAllocator::release):
466             - Removed support for handles with null m_allocator (no longer used).
467             - Notify the tracker of handles being released.
468         (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
469             - Moved functionality out into MetaAllocator::release.
470         (WTF::MetaAllocatorHandle::shrink):
471             - Removed support for handles with null m_allocator (no longer used).
472         (WTF::MetaAllocator::MetaAllocator):
473             - Initialize m_tracker.
474         (WTF::MetaAllocator::allocate):
475             - Notify the tracker of new allocations.
476         * wtf/MetaAllocator.h:
477         (WTF::MetaAllocatorTracker::find):
478             - Lookup a MetaAllocatorHandle based on an address inside the allocation.
479         (WTF::MetaAllocator::trackAllocations):
480             - Register a callback object to track allocation state.
481         * wtf/MetaAllocatorHandle.h:
482             - Remove unused createSelfManagedHandle/constructor.
483         (WTF::MetaAllocatorHandle::key):
484             - Added, for use in RedBlackTree.
485
486 2012-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>
487
488         Use copying collector for out-of-line JSObject property storage
489         https://bugs.webkit.org/show_bug.cgi?id=76665
490
491         Reviewed by Geoffrey Garen.
492
493         * runtime/JSObject.cpp:
494         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
495         Also added a temporary variable to avoid warnings from GCC.
496         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
497         operator new. Also added a temporary variable to avoid warnings from GCC.
498         * runtime/JSObject.h:
499
500 2012-01-24  Geoffrey Garen  <ggaren@apple.com>
501
502         JSValue::toString() should return a JSString* instead of a UString
503         https://bugs.webkit.org/show_bug.cgi?id=76861
504
505         Fixed two failing layout tests after my last patch.
506
507         Reviewed by Gavin Barraclough.
508
509         * runtime/ArrayPrototype.cpp:
510         (JSC::arrayProtoFuncSort): Call value() after calling toString(), as
511         in all other cases.
512         
513         I missed this case because the JSString* type has a valid operator<,
514         so the compiler didn't complain.
515
516 2012-01-24  Kenichi Ishibashi  <bashi@chromium.org>
517
518         [V8] Add Uint8ClampedArray support
519         https://bugs.webkit.org/show_bug.cgi?id=76803
520
521         Reviewed by Kenneth Russell.
522
523         * wtf/ArrayBufferView.h:
524         (WTF::ArrayBufferView::isUnsignedByteClampedArray): Added.
525         * wtf/Uint8ClampedArray.h:
526         (WTF::Uint8ClampedArray::isUnsignedByteClampedArray): Overridden to return true.
527
528 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
529
530         [GTK] Add WebKitDownload to WebKit2 GTK+ API
531         https://bugs.webkit.org/show_bug.cgi?id=72949
532
533         Reviewed by Martin Robinson.
534
535         * wtf/gobject/GOwnPtr.cpp:
536         (WTF::GTimer): Use g_timer_destroy() to free a GTimer.
537         * wtf/gobject/GOwnPtr.h: Add GTimer template.
538         * wtf/gobject/GTypedefs.h: Add GTimer forward declaration.
539
540 2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>
541
542         Unreviewed build fix for Qt LinuxSH4 build after r105698.
543
544         * interpreter/Interpreter.cpp:
545         (JSC::Interpreter::privateExecute):
546
547 2012-01-23  Geoffrey Garen  <ggaren@apple.com>
548
549         JSValue::toString() should return a JSString* instead of a UString
550         https://bugs.webkit.org/show_bug.cgi?id=76861
551
552         Reviewed by Gavin Barraclough.
553         
554         This makes the common case -- toString() on a string -- faster and
555         inline-able. (Not a measureable speedup, but we can now remove a bunch
556         of duplicate hand-rolled code for this optimization.)
557         
558         This also clarifies the boundary between "C++ strings" and "JS strings".
559         
560         In all cases other than true, false, null, undefined, and multi-digit
561         numbers, the JS runtime was just retrieving a UString from a JSString,
562         so returning a JSString* is strictly better. In the other cases, we can
563         optimize to avoid creating a new JSString if we care to, but it doesn't
564         seem to be a big deal.
565
566         * JavaScriptCore.exp: Export!
567         
568         * jsc.cpp:
569         (functionPrint):
570         (functionDebug):
571         (functionRun):
572         (functionLoad):
573         (functionCheckSyntax):
574         (runWithScripts):
575         (runInteractive):
576         * API/JSValueRef.cpp:
577         (JSValueToStringCopy):
578         * bytecode/CodeBlock.cpp:
579         (JSC::valueToSourceString): Call value() after calling toString(), to
580         convert from "JS string" (JSString*) to "C++ string" (UString), since
581         toString() no longer returns a "C++ string".
582
583         * dfg/DFGOperations.cpp:
584         (JSC::DFG::operationValueAddNotNumber):
585         * jit/JITStubs.cpp:
586         (op_add): Updated for removal of toPrimitiveString():
587         all '+' operands can use toString(), except for object operands, which
588         need to take a slow path to call toPrimitive().
589
590         * runtime/ArrayPrototype.cpp:
591         (JSC::arrayProtoFuncToString):
592         (JSC::arrayProtoFuncToLocaleString):
593         (JSC::arrayProtoFuncJoin):
594         (JSC::arrayProtoFuncPush):
595         * runtime/CommonSlowPaths.h:
596         (JSC::CommonSlowPaths::opIn):
597         * runtime/DateConstructor.cpp:
598         (JSC::dateParse):
599         * runtime/DatePrototype.cpp:
600         (JSC::formatLocaleDate): Call value() after calling toString(), as above.
601
602         * runtime/ErrorInstance.h:
603         (JSC::ErrorInstance::create): Simplified down to one canonical create()
604         function, to make string handling easier.
605
606         * runtime/ErrorPrototype.cpp:
607         (JSC::errorProtoFuncToString):
608         * runtime/ExceptionHelpers.cpp:
609         (JSC::createInvalidParamError):
610         (JSC::createNotAConstructorError):
611         (JSC::createNotAFunctionError):
612         (JSC::createNotAnObjectError):
613         * runtime/FunctionConstructor.cpp:
614         (JSC::constructFunctionSkippingEvalEnabledCheck):
615         * runtime/FunctionPrototype.cpp:
616         (JSC::functionProtoFuncBind):
617         * runtime/JSArray.cpp:
618         (JSC::JSArray::sort): Call value() after calling toString(), as above.
619
620         * runtime/JSCell.cpp:
621         * runtime/JSCell.h: Removed JSCell::toString() because JSValue does this
622         job now. Doing it in JSCell is slower (requires extra type checking), and
623         creates the misimpression that language-defined toString() behavior is
624         an implementation detail of JSCell.
625         
626         * runtime/JSGlobalObjectFunctions.cpp:
627         (JSC::encode):
628         (JSC::decode):
629         (JSC::globalFuncEval):
630         (JSC::globalFuncParseInt):
631         (JSC::globalFuncParseFloat):
632         (JSC::globalFuncEscape):
633         (JSC::globalFuncUnescape): Call value() after calling toString(), as above.
634
635         * runtime/JSONObject.cpp:
636         (JSC::unwrapBoxedPrimitive):
637         (JSC::Stringifier::Stringifier):
638         (JSC::JSONProtoFuncParse): Removed some manual optimization that toString()
639         takes care of.
640
641         * runtime/JSObject.cpp:
642         (JSC::JSObject::toString):
643         * runtime/JSObject.h: Updated to return JSString*.
644
645         * runtime/JSString.cpp:
646         * runtime/JSString.h:
647         (JSC::JSValue::toString): Removed, since I removed JSCell::toString().
648
649         * runtime/JSValue.cpp:
650         (JSC::JSValue::toStringSlowCase): Removed toPrimitiveString(), and re-
651         spawned toStringSlowCase() from its zombie corpse, since toPrimitiveString()
652         basically did what we want all the time. (Note that the toPrimitive()
653         preference changes from NoPreference to PreferString, because that's
654         how ToString is defined in the language. op_add does not want this behavior.)
655
656         * runtime/NumberPrototype.cpp:
657         (JSC::numberProtoFuncToString):
658         (JSC::numberProtoFuncToLocaleString): A little simpler, now that toString()
659         returns a JSString*.
660
661         * runtime/ObjectConstructor.cpp:
662         (JSC::objectConstructorGetOwnPropertyDescriptor):
663         (JSC::objectConstructorDefineProperty):
664         * runtime/ObjectPrototype.cpp:
665         (JSC::objectProtoFuncHasOwnProperty):
666         (JSC::objectProtoFuncDefineGetter):
667         (JSC::objectProtoFuncDefineSetter):
668         (JSC::objectProtoFuncLookupGetter):
669         (JSC::objectProtoFuncLookupSetter):
670         (JSC::objectProtoFuncPropertyIsEnumerable): More calls to value(), as above.
671
672         * runtime/Operations.cpp:
673         (JSC::jsAddSlowCase): Need to check for object before taking the toString()
674         fast path becuase adding an object to a string requires calling toPrimitive()
675         on the object, not toString(). (They differ in their preferred conversion
676         type.)
677
678         * runtime/Operations.h:
679         (JSC::jsString):
680         (JSC::jsStringFromArguments): This code gets simpler, now that toString()
681         does the right thing.
682
683         (JSC::jsAdd): Now checks for object, just like jsAddSlowCase().
684
685         * runtime/RegExpConstructor.cpp:
686         (JSC::setRegExpConstructorInput):
687         (JSC::constructRegExp):
688         * runtime/RegExpObject.cpp:
689         (JSC::RegExpObject::match):
690         * runtime/RegExpPrototype.cpp:
691         (JSC::regExpProtoFuncCompile):
692         (JSC::regExpProtoFuncToString): More calls to value(), as above.
693
694         * runtime/StringConstructor.cpp:
695         (JSC::constructWithStringConstructor):
696         (JSC::callStringConstructor): This code gets simpler, now that toString()
697         does the right thing.
698
699         * runtime/StringPrototype.cpp:
700         (JSC::replaceUsingRegExpSearch):
701         (JSC::replaceUsingStringSearch):
702         (JSC::stringProtoFuncReplace):
703         (JSC::stringProtoFuncCharAt):
704         (JSC::stringProtoFuncCharCodeAt):
705         (JSC::stringProtoFuncConcat):
706         (JSC::stringProtoFuncIndexOf):
707         (JSC::stringProtoFuncLastIndexOf):
708         (JSC::stringProtoFuncMatch):
709         (JSC::stringProtoFuncSearch):
710         (JSC::stringProtoFuncSlice):
711         (JSC::stringProtoFuncSplit):
712         (JSC::stringProtoFuncSubstr):
713         (JSC::stringProtoFuncSubstring):
714         (JSC::stringProtoFuncToLowerCase):
715         (JSC::stringProtoFuncToUpperCase):
716         (JSC::stringProtoFuncLocaleCompare):
717         (JSC::stringProtoFuncBig):
718         (JSC::stringProtoFuncSmall):
719         (JSC::stringProtoFuncBlink):
720         (JSC::stringProtoFuncBold):
721         (JSC::stringProtoFuncFixed):
722         (JSC::stringProtoFuncItalics):
723         (JSC::stringProtoFuncStrike):
724         (JSC::stringProtoFuncSub):
725         (JSC::stringProtoFuncSup):
726         (JSC::stringProtoFuncFontcolor):
727         (JSC::stringProtoFuncFontsize):
728         (JSC::stringProtoFuncAnchor):
729         (JSC::stringProtoFuncLink):
730         (JSC::trimString): Some of this code gets simpler, now that toString()
731         does the right thing. More calls to value(), as above.
732
733 2012-01-23  Luke Macpherson   <macpherson@chromium.org>
734
735         Unreviewed, rolling out r105676.
736         http://trac.webkit.org/changeset/105676
737         https://bugs.webkit.org/show_bug.cgi?id=76665
738
739         Breaks build on max due to compile warnings.
740
741         * runtime/JSObject.cpp:
742         (JSC::JSObject::finalize):
743         (JSC::JSObject::visitChildren):
744         (JSC::JSObject::allocatePropertyStorage):
745         * runtime/JSObject.h:
746
747 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
748
749         Use copying collector for out-of-line JSObject property storage
750         https://bugs.webkit.org/show_bug.cgi?id=76665
751
752         Reviewed by Geoffrey Garen.
753
754         * runtime/JSObject.cpp:
755         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
756         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
757         operator new.
758         * runtime/JSObject.h:
759
760 2012-01-23  Brian Weinstein  <bweinstein@apple.com>
761
762         More build fixing after r105646.
763
764         * JavaScriptCore.exp:
765
766 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
767
768         https://bugs.webkit.org/show_bug.cgi?id=76855
769         Implement a JIT-code aware sampling profiler for JSC
770
771         Reviewed by Geoff Garen.
772
773         Step 2: generalize RedBlackTree. The profiler is going to want tio use
774         a RedBlackTree, allow this class to work with subclasses of
775         RedBlackTree::Node, Node should not need to know the names of the m_key
776         and m_value fields (the subclass can provide a key() accessor), and
777         RedBlackTree does not need to know anything about ValueType.
778
779         * JavaScriptCore.exp:
780         * wtf/MetaAllocator.cpp:
781         (WTF::MetaAllocator::findAndRemoveFreeSpace):
782         (WTF::MetaAllocator::debugFreeSpaceSize):
783         (WTF::MetaAllocator::addFreeSpace):
784         * wtf/MetaAllocator.h:
785         (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
786         (WTF::MetaAllocator::FreeSpaceNode::key):
787         * wtf/MetaAllocatorHandle.h:
788         (WTF::MetaAllocatorHandle::key):
789         * wtf/RedBlackTree.h:
790         (WTF::RedBlackTree::Node::successor):
791         (WTF::RedBlackTree::Node::predecessor):
792         (WTF::RedBlackTree::Node::parent):
793         (WTF::RedBlackTree::Node::setParent):
794         (WTF::RedBlackTree::Node::left):
795         (WTF::RedBlackTree::Node::setLeft):
796         (WTF::RedBlackTree::Node::right):
797         (WTF::RedBlackTree::Node::setRight):
798         (WTF::RedBlackTree::insert):
799         (WTF::RedBlackTree::remove):
800         (WTF::RedBlackTree::findExact):
801         (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
802         (WTF::RedBlackTree::findGreatestLessThanOrEqual):
803         (WTF::RedBlackTree::first):
804         (WTF::RedBlackTree::last):
805         (WTF::RedBlackTree::size):
806         (WTF::RedBlackTree::treeMinimum):
807         (WTF::RedBlackTree::treeMaximum):
808         (WTF::RedBlackTree::treeInsert):
809         (WTF::RedBlackTree::leftRotate):
810         (WTF::RedBlackTree::rightRotate):
811         (WTF::RedBlackTree::removeFixup):
812
813 2012-01-23  Andy Estes  <aestes@apple.com>
814
815         Fix the build after r105635.
816
817         * JavaScriptCore.exp:
818
819 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
820
821         Remove StackBounds from JSGlobalData
822         https://bugs.webkit.org/show_bug.cgi?id=76310
823
824         Reviewed by Sam Weinig.
825
826         Removed StackBounds and the stack() function from JSGlobalData since it no 
827         longer accessed any members of JSGlobalData.
828
829         * bytecompiler/BytecodeGenerator.cpp:
830         (JSC::BytecodeGenerator::BytecodeGenerator):
831         * heap/MachineStackMarker.cpp:
832         (JSC::MachineThreads::addCurrentThread):
833         (JSC::MachineThreads::gatherFromCurrentThread):
834         * parser/Parser.cpp:
835         (JSC::::Parser):
836         * runtime/JSGlobalData.cpp:
837         (JSC::JSGlobalData::JSGlobalData):
838         * runtime/JSGlobalData.h:
839
840 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
841
842         Implement a JIT-code aware sampling profiler for JSC
843         https://bugs.webkit.org/show_bug.cgi?id=76855
844
845         Rubber stanmped by Geoff Garen.
846
847         Mechanical change - pass CodeBlock through to the executable allocator,
848         such that we will be able to map ranges of JIT code back to their owner.
849
850         * assembler/ARMAssembler.cpp:
851         (JSC::ARMAssembler::executableCopy):
852         * assembler/ARMAssembler.h:
853         * assembler/AssemblerBuffer.h:
854         (JSC::AssemblerBuffer::executableCopy):
855         * assembler/AssemblerBufferWithConstantPool.h:
856         (JSC::AssemblerBufferWithConstantPool::executableCopy):
857         * assembler/LinkBuffer.h:
858         (JSC::LinkBuffer::LinkBuffer):
859         (JSC::LinkBuffer::linkCode):
860         * assembler/MIPSAssembler.h:
861         (JSC::MIPSAssembler::executableCopy):
862         * assembler/SH4Assembler.h:
863         (JSC::SH4Assembler::executableCopy):
864         * assembler/X86Assembler.h:
865         (JSC::X86Assembler::executableCopy):
866         (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
867         * dfg/DFGJITCompiler.cpp:
868         (JSC::DFG::JITCompiler::compile):
869         (JSC::DFG::JITCompiler::compileFunction):
870         * dfg/DFGOSRExitCompiler.cpp:
871         * dfg/DFGRepatch.cpp:
872         (JSC::DFG::generateProtoChainAccessStub):
873         (JSC::DFG::tryCacheGetByID):
874         (JSC::DFG::tryBuildGetByIDList):
875         (JSC::DFG::tryCachePutByID):
876         * dfg/DFGThunks.cpp:
877         (JSC::DFG::osrExitGenerationThunkGenerator):
878         * jit/ExecutableAllocator.cpp:
879         (JSC::ExecutableAllocator::allocate):
880         * jit/ExecutableAllocator.h:
881         * jit/ExecutableAllocatorFixedVMPool.cpp:
882         (JSC::ExecutableAllocator::allocate):
883         * jit/JIT.cpp:
884         (JSC::JIT::privateCompile):
885         * jit/JITOpcodes.cpp:
886         (JSC::JIT::privateCompileCTIMachineTrampolines):
887         * jit/JITOpcodes32_64.cpp:
888         (JSC::JIT::privateCompileCTIMachineTrampolines):
889         (JSC::JIT::privateCompileCTINativeCall):
890         * jit/JITPropertyAccess.cpp:
891         (JSC::JIT::stringGetByValStubGenerator):
892         (JSC::JIT::privateCompilePutByIdTransition):
893         (JSC::JIT::privateCompilePatchGetArrayLength):
894         (JSC::JIT::privateCompileGetByIdProto):
895         (JSC::JIT::privateCompileGetByIdSelfList):
896         (JSC::JIT::privateCompileGetByIdProtoList):
897         (JSC::JIT::privateCompileGetByIdChainList):
898         (JSC::JIT::privateCompileGetByIdChain):
899         * jit/JITPropertyAccess32_64.cpp:
900         (JSC::JIT::stringGetByValStubGenerator):
901         (JSC::JIT::privateCompilePutByIdTransition):
902         (JSC::JIT::privateCompilePatchGetArrayLength):
903         (JSC::JIT::privateCompileGetByIdProto):
904         (JSC::JIT::privateCompileGetByIdSelfList):
905         (JSC::JIT::privateCompileGetByIdProtoList):
906         (JSC::JIT::privateCompileGetByIdChainList):
907         (JSC::JIT::privateCompileGetByIdChain):
908         * jit/JITStubs.cpp:
909         * jit/SpecializedThunkJIT.h:
910         (JSC::SpecializedThunkJIT::finalize):
911         * yarr/YarrJIT.cpp:
912         (JSC::Yarr::YarrGenerator::compile):
913
914 2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>
915
916         Basic enhancements to StringBuilder
917         https://bugs.webkit.org/show_bug.cgi?id=67081
918
919         This change contains the following enhancements to StringBuilder,
920         for convenience, performance, testability, etc.:
921         - Change toStringPreserveCapacity() to const
922         - new public methods: capacity(), swap(), toAtomicString(), canShrink()
923           and append(const StringBuilder&)
924         - == and != opearators to compare StringBuilders and a StringBuilder/String
925
926         Unit tests: Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
927
928         Reviewed by Darin Adler.
929
930         * JavaScriptCore.exp:
931         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
932         * wtf/text/AtomicString.cpp:
933         (WTF::SubstringTranslator::hash):
934         (WTF::SubstringTranslator::equal):
935         (WTF::SubstringTranslator::translate):
936         (WTF::AtomicString::add):
937         (WTF::AtomicString::addSlowCase):
938         * wtf/text/AtomicString.h:
939         (WTF::AtomicString::AtomicString):
940         (WTF::AtomicString::add):
941         * wtf/text/StringBuilder.cpp:
942         (WTF::StringBuilder::reifyString):
943         (WTF::StringBuilder::resize):
944         (WTF::StringBuilder::canShrink):
945         (WTF::StringBuilder::shrinkToFit):
946         * wtf/text/StringBuilder.h:
947         (WTF::StringBuilder::append):
948         (WTF::StringBuilder::toString):
949         (WTF::StringBuilder::toStringPreserveCapacity):
950         (WTF::StringBuilder::toAtomicString):
951         (WTF::StringBuilder::isEmpty):
952         (WTF::StringBuilder::capacity):
953         (WTF::StringBuilder::is8Bit):
954         (WTF::StringBuilder::swap):
955         (WTF::equal):
956         (WTF::operator==):
957         (WTF::operator!=):
958         * wtf/text/StringImpl.h:
959
960 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
961
962         Unreviewed. Fix make distcheck.
963
964         * GNUmakefile.list.am: Add missing files, remove deleted files and
965         fix indentation.
966
967 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
968
969         Build fix for non-DFG platforms that error out on warn-unused-parameter.
970
971         * bytecode/CallLinkStatus.cpp:
972         (JSC::CallLinkStatus::computeFor):
973         * bytecode/GetByIdStatus.cpp:
974         (JSC::GetByIdStatus::computeFor):
975         * bytecode/MethodCallLinkStatus.cpp:
976         (JSC::MethodCallLinkStatus::computeFor):
977         * bytecode/PutByIdStatus.cpp:
978         (JSC::PutByIdStatus::computeFor):
979
980 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
981
982         Build fix for non-DFG platforms.
983
984         * bytecode/CallLinkStatus.cpp:
985         (JSC::CallLinkStatus::computeFor):
986         * bytecode/GetByIdStatus.cpp:
987         (JSC::GetByIdStatus::computeFor):
988         * bytecode/MethodCallLinkStatus.cpp:
989         (JSC::MethodCallLinkStatus::computeFor):
990         * bytecode/PutByIdStatus.cpp:
991         (JSC::PutByIdStatus::computeFor):
992
993 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
994
995         DFG should not have code that directly decodes the states of old JIT inline
996         cache data structures
997         https://bugs.webkit.org/show_bug.cgi?id=76768
998
999         Reviewed by Sam Weinig.
1000         
1001         Introduced new classes (like GetByIdStatus) that encapsulate the set of things
1002         that the DFG would like to know about property accesses and calls. Whereas it
1003         previously got this information by directly decoding the data structures used
1004         by the old JIT for inline caching, it now uses these classes, which do the work
1005         for it. This should make it somewhat more straight forward to introduce new
1006         ways of profiling the same information.
1007         
1008         Also hoisted StructureSet into bytecode/ from dfg/, because it's now used by
1009         code in bytecode/.
1010         
1011         Making this work right involved carefully ensuring that the heuristics for
1012         choosing how to handle property accesses was at least as good as what we had
1013         before, since I completely restructured that code. Currently the performance
1014         looks neutral. Since I rewrote the code I did change some things that I never
1015         liked before, like previously if a put_bu_id had executed exactly once then
1016         we'd compile it as if it had taken slow-path. Executing once is special because
1017         then the inline cache is not baked in, so there is no information about how the
1018         DFG should optimize the code. Now this is rationalized: if the put_by_id does
1019         not offer enough information to be optimized (i.e. had executed 0 or 1 times)
1020         then we turn it into a forced OSR exit (i.e. a patch point). However, get_by_id
1021         still has the old behavior; I left it that way because I didn't want to make
1022         too many changes at once.
1023
1024         * CMakeLists.txt:
1025         * GNUmakefile.list.am:
1026         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1027         * JavaScriptCore.xcodeproj/project.pbxproj:
1028         * Target.pri:
1029         * bytecode/CallLinkStatus.cpp: Added.
1030         (JSC::CallLinkStatus::computeFor):
1031         * bytecode/CallLinkStatus.h: Added.
1032         (JSC::CallLinkStatus::CallLinkStatus):
1033         (JSC::CallLinkStatus::isSet):
1034         (JSC::CallLinkStatus::operator!):
1035         (JSC::CallLinkStatus::couldTakeSlowPath):
1036         (JSC::CallLinkStatus::callTarget):
1037         * bytecode/GetByIdStatus.cpp: Added.
1038         (JSC::GetByIdStatus::computeFor):
1039         * bytecode/GetByIdStatus.h: Added.
1040         (JSC::GetByIdStatus::GetByIdStatus):
1041         (JSC::GetByIdStatus::state):
1042         (JSC::GetByIdStatus::isSet):
1043         (JSC::GetByIdStatus::operator!):
1044         (JSC::GetByIdStatus::isSimpleDirect):
1045         (JSC::GetByIdStatus::takesSlowPath):
1046         (JSC::GetByIdStatus::makesCalls):
1047         (JSC::GetByIdStatus::structureSet):
1048         (JSC::GetByIdStatus::offset):
1049         * bytecode/MethodCallLinkStatus.cpp: Added.
1050         (JSC::MethodCallLinkStatus::computeFor):
1051         * bytecode/MethodCallLinkStatus.h: Added.
1052         (JSC::MethodCallLinkStatus::MethodCallLinkStatus):
1053         (JSC::MethodCallLinkStatus::isSet):
1054         (JSC::MethodCallLinkStatus::operator!):
1055         (JSC::MethodCallLinkStatus::needsPrototypeCheck):
1056         (JSC::MethodCallLinkStatus::structure):
1057         (JSC::MethodCallLinkStatus::prototypeStructure):
1058         (JSC::MethodCallLinkStatus::function):
1059         (JSC::MethodCallLinkStatus::prototype):
1060         * bytecode/PutByIdStatus.cpp: Added.
1061         (JSC::PutByIdStatus::computeFor):
1062         * bytecode/PutByIdStatus.h: Added.
1063         (JSC::PutByIdStatus::PutByIdStatus):
1064         (JSC::PutByIdStatus::state):
1065         (JSC::PutByIdStatus::isSet):
1066         (JSC::PutByIdStatus::operator!):
1067         (JSC::PutByIdStatus::isSimpleReplace):
1068         (JSC::PutByIdStatus::isSimpleTransition):
1069         (JSC::PutByIdStatus::takesSlowPath):
1070         (JSC::PutByIdStatus::oldStructure):
1071         (JSC::PutByIdStatus::newStructure):
1072         (JSC::PutByIdStatus::structureChain):
1073         (JSC::PutByIdStatus::offset):
1074         * bytecode/StructureSet.h: Added.
1075         (JSC::StructureSet::StructureSet):
1076         (JSC::StructureSet::clear):
1077         (JSC::StructureSet::add):
1078         (JSC::StructureSet::addAll):
1079         (JSC::StructureSet::remove):
1080         (JSC::StructureSet::contains):
1081         (JSC::StructureSet::isSubsetOf):
1082         (JSC::StructureSet::isSupersetOf):
1083         (JSC::StructureSet::size):
1084         (JSC::StructureSet::at):
1085         (JSC::StructureSet::operator[]):
1086         (JSC::StructureSet::last):
1087         (JSC::StructureSet::predictionFromStructures):
1088         (JSC::StructureSet::operator==):
1089         (JSC::StructureSet::dump):
1090         * dfg/DFGAbstractValue.h:
1091         * dfg/DFGByteCodeParser.cpp:
1092         (JSC::DFG::ByteCodeParser::handleCall):
1093         (JSC::DFG::ByteCodeParser::parseBlock):
1094         * dfg/DFGStructureSet.h: Removed.
1095
1096 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
1097
1098         JIT compilation should not require ExecState
1099         https://bugs.webkit.org/show_bug.cgi?id=76729
1100         <rdar://problem/10731545>
1101
1102         Reviewed by Gavin Barraclough.
1103         
1104         Changed the relevant JIT driver functions to take JSGlobalData& instead of
1105         ExecState*, since really they just needed the global data.
1106
1107         * dfg/DFGDriver.cpp:
1108         (JSC::DFG::compile):
1109         (JSC::DFG::tryCompile):
1110         (JSC::DFG::tryCompileFunction):
1111         * dfg/DFGDriver.h:
1112         (JSC::DFG::tryCompile):
1113         (JSC::DFG::tryCompileFunction):
1114         * jit/JITDriver.h:
1115         (JSC::jitCompileIfAppropriate):
1116         (JSC::jitCompileFunctionIfAppropriate):
1117         * runtime/Executable.cpp:
1118         (JSC::EvalExecutable::compileInternal):
1119         (JSC::ProgramExecutable::compileInternal):
1120         (JSC::FunctionExecutable::compileForCallInternal):
1121         (JSC::FunctionExecutable::compileForConstructInternal):
1122
1123 2012-01-20  David Levin  <levin@chromium.org>
1124
1125         Make OwnPtr<HDC> work for the Chromium Windows port.
1126         https://bugs.webkit.org/show_bug.cgi?id=76738
1127
1128         Reviewed by Jian Li.
1129
1130         * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnPtrWin.cpp to the
1131         Chromium Windows build.
1132         * wtf/OwnPtrCommon.h: Changed from platform WIN to OS WIN for
1133         OwnPtr<HDC> and similar constructs.
1134
1135 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
1136
1137         Removed some regexp entry boilerplate code
1138         https://bugs.webkit.org/show_bug.cgi?id=76687
1139
1140         Reviewed by Darin Adler.
1141         
1142         1% - 2% speedup on regexp tests, no change overall.
1143
1144         * runtime/RegExp.cpp:
1145         (JSC::RegExp::match):
1146             - ASSERT that our startIndex is non-negative, because anything less
1147             would be uncivilized.
1148             
1149             - ASSERT that our input is not the null string for the same reason.
1150
1151             - No need to test for startOffset being past the end of the string,
1152             since the regular expression engine will do this test for us.
1153
1154             - No need to initialize the output vector, since the regular expression
1155             engine will fill it in for us.
1156
1157         * yarr/YarrInterpreter.cpp:
1158         (JSC::Yarr::Interpreter::interpret):
1159         * yarr/YarrJIT.cpp:
1160         (JSC::Yarr::YarrGenerator::compile):
1161         
1162             RegExp used to do these jobs for us, but now we do them for ourselves
1163             because it's a better separation of concerns, and the JIT can do them
1164             more efficiently than C++ code:
1165
1166             - Test for "past the end" before doing any matching -- otherwise
1167             a* will match with zero length past the end of the string, which is wrong.
1168
1169             - Initialize the output vector before doing any matching.
1170
1171 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
1172
1173         Build fix for no-DFG configuration.
1174         Needed for <rdar://problem/10727689>.
1175
1176         * bytecompiler/BytecodeGenerator.cpp:
1177         (JSC::BytecodeGenerator::emitProfiledOpcode):
1178         * jit/JIT.h:
1179         (JSC::JIT::emitValueProfilingSite):
1180
1181 2012-01-19  Filip Pizlo  <fpizlo@apple.com>
1182
1183         Bytecode instructions that may have value profiling should have a direct inline
1184         link to the ValueProfile instance
1185         https://bugs.webkit.org/show_bug.cgi?id=76682
1186         <rdar://problem/10727689>
1187
1188         Reviewed by Sam Weinig.
1189         
1190         Each opcode that gets value profiled now has a link to its ValueProfile. This
1191         required rationalizing the emission of value profiles for opcode combos, like
1192         op_method_check/op_get_by_id and op_call/op_call_put_result. It only makes
1193         sense for one of them to have a value profile link, and it makes most sense
1194         for it to be the one that actually sets the result. The previous behavior was
1195         to have op_method_check profile for op_get_by_id when they were used together,
1196         but otherwise for op_get_by_id to have its own profiles. op_call already did
1197         the right thing; all profiling was done by op_call_put_result.
1198         
1199         But rationalizing this code required breaking some of the natural boundaries
1200         that the code had; for instance the code in DFG that emits a GetById in place
1201         of both op_method_check and op_get_by_id must now know that it's the latter of
1202         those that has the value profile, while the first of those constitutes the OSR
1203         target. Hence each CodeOrigin must now have two bytecode indices - one for
1204         OSR exit and one for profiling.
1205         
1206         Finally this change required some refiddling of our optimization heuristics,
1207         because now all code blocks have "more instructions" due to the value profile
1208         slots.
1209
1210         * bytecode/CodeBlock.cpp:
1211         (JSC::CodeBlock::printGetByIdOp):
1212         (JSC::CodeBlock::dump):
1213         * bytecode/CodeBlock.h:
1214         (JSC::CodeBlock::valueProfileForBytecodeOffset):
1215         * bytecode/CodeOrigin.h:
1216         (JSC::CodeOrigin::CodeOrigin):
1217         (JSC::CodeOrigin::bytecodeIndexForValueProfile):
1218         * bytecode/Instruction.h:
1219         (JSC::Instruction::Instruction):
1220         * bytecode/Opcode.h:
1221         * bytecompiler/BytecodeGenerator.cpp:
1222         (JSC::BytecodeGenerator::emitProfiledOpcode):
1223         (JSC::BytecodeGenerator::emitResolve):
1224         (JSC::BytecodeGenerator::emitGetScopedVar):
1225         (JSC::BytecodeGenerator::emitResolveBase):
1226         (JSC::BytecodeGenerator::emitResolveBaseForPut):
1227         (JSC::BytecodeGenerator::emitResolveWithBase):
1228         (JSC::BytecodeGenerator::emitResolveWithThis):
1229         (JSC::BytecodeGenerator::emitGetById):
1230         (JSC::BytecodeGenerator::emitGetByVal):
1231         (JSC::BytecodeGenerator::emitCall):
1232         (JSC::BytecodeGenerator::emitCallVarargs):
1233         (JSC::BytecodeGenerator::emitConstruct):
1234         * bytecompiler/BytecodeGenerator.h:
1235         * dfg/DFGByteCodeParser.cpp:
1236         (JSC::DFG::ByteCodeParser::ByteCodeParser):
1237         (JSC::DFG::ByteCodeParser::currentCodeOrigin):
1238         (JSC::DFG::ByteCodeParser::addCall):
1239         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
1240         (JSC::DFG::ByteCodeParser::getPrediction):
1241         (JSC::DFG::ByteCodeParser::handleCall):
1242         (JSC::DFG::ByteCodeParser::handleInlining):
1243         (JSC::DFG::ByteCodeParser::parseBlock):
1244         (JSC::DFG::ByteCodeParser::parse):
1245         * dfg/DFGGraph.h:
1246         (JSC::DFG::Graph::valueProfileFor):
1247         * jit/JIT.h:
1248         (JSC::JIT::emitValueProfilingSite):
1249         * jit/JITCall.cpp:
1250         (JSC::JIT::emit_op_call_put_result):
1251         * jit/JITCall32_64.cpp:
1252         (JSC::JIT::emit_op_call_put_result):
1253         * jit/JITInlineMethods.h:
1254         (JSC::JIT::emitValueProfilingSite):
1255         * jit/JITOpcodes.cpp:
1256         (JSC::JIT::emit_op_resolve):
1257         (JSC::JIT::emit_op_resolve_base):
1258         (JSC::JIT::emit_op_resolve_skip):
1259         (JSC::JIT::emit_op_resolve_global):
1260         (JSC::JIT::emitSlow_op_resolve_global):
1261         (JSC::JIT::emit_op_resolve_with_base):
1262         (JSC::JIT::emit_op_resolve_with_this):
1263         (JSC::JIT::emitSlow_op_resolve_global_dynamic):
1264         * jit/JITOpcodes32_64.cpp:
1265         (JSC::JIT::emit_op_resolve):
1266         (JSC::JIT::emit_op_resolve_base):
1267         (JSC::JIT::emit_op_resolve_skip):
1268         (JSC::JIT::emit_op_resolve_global):
1269         (JSC::JIT::emitSlow_op_resolve_global):
1270         (JSC::JIT::emit_op_resolve_with_base):
1271         (JSC::JIT::emit_op_resolve_with_this):
1272         * jit/JITPropertyAccess.cpp:
1273         (JSC::JIT::emit_op_get_by_val):
1274         (JSC::JIT::emitSlow_op_get_by_val):
1275         (JSC::JIT::emit_op_method_check):
1276         (JSC::JIT::emitSlow_op_method_check):
1277         (JSC::JIT::emit_op_get_by_id):
1278         (JSC::JIT::emitSlow_op_get_by_id):
1279         (JSC::JIT::emit_op_get_scoped_var):
1280         (JSC::JIT::emit_op_get_global_var):
1281         * jit/JITPropertyAccess32_64.cpp:
1282         (JSC::JIT::emit_op_method_check):
1283         (JSC::JIT::emitSlow_op_method_check):
1284         (JSC::JIT::emit_op_get_by_val):
1285         (JSC::JIT::emitSlow_op_get_by_val):
1286         (JSC::JIT::emit_op_get_by_id):
1287         (JSC::JIT::emitSlow_op_get_by_id):
1288         (JSC::JIT::emit_op_get_scoped_var):
1289         (JSC::JIT::emit_op_get_global_var):
1290         * jit/JITStubCall.h:
1291         (JSC::JITStubCall::callWithValueProfiling):
1292         * runtime/Options.cpp:
1293         (JSC::Options::initializeOptions):
1294
1295 2012-01-20  ChangSeok Oh  <shivamidow@gmail.com>
1296
1297         undefined reference to symbol eina_module_free
1298         https://bugs.webkit.org/show_bug.cgi?id=76681
1299
1300         Reviewed by Martin Robinson.
1301
1302         eina_module_free has been used without including eina libraries after r104936.
1303
1304         * wtf/PlatformEfl.cmake: Add EINA_LIBRARIES.
1305
1306 2012-01-19  Tony Chang  <tony@chromium.org>
1307
1308         [chromium] Remove an obsolete comment about features.gypi
1309         https://bugs.webkit.org/show_bug.cgi?id=76643
1310
1311         There can be only one features.gypi.
1312
1313         Reviewed by James Robinson.
1314
1315         * JavaScriptCore.gyp/JavaScriptCore.gyp:
1316
1317 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
1318
1319         Implicit creation of a regular expression should eagerly check for syntax errors
1320         https://bugs.webkit.org/show_bug.cgi?id=76642
1321
1322         Reviewed by Oliver Hunt.
1323         
1324         This is a correctness fix and a slight optimization.
1325
1326         * runtime/StringPrototype.cpp:
1327         (JSC::stringProtoFuncMatch):
1328         (JSC::stringProtoFuncSearch): Check for syntax errors because that's the
1329         correct behavior.
1330
1331         * runtime/RegExp.cpp:
1332         (JSC::RegExp::match): ASSERT that we aren't a syntax error. (One line
1333         of code change, many lines of indentation change.)
1334
1335         Since we have no clients that try to match a RegExp that is a syntax error,
1336         let's optimize out the check.
1337
1338 2012-01-19  Mark Hahnenberg  <mhahnenberg@apple.com>
1339
1340         Implement a new allocator for backing stores
1341         https://bugs.webkit.org/show_bug.cgi?id=75181
1342
1343         Reviewed by Filip Pizlo.
1344
1345         We want to move away from using fastMalloc for the backing stores for 
1346         some of our objects (e.g. JSArray, JSObject, JSString, etc).  These backing 
1347         stores have a nice property in that they only have a single owner (i.e. a 
1348         single pointer to them at any one time).  One way that we can take advantage 
1349         of this property is to implement a simple bump allocator/copying collector, 
1350         which will run alongside our normal mark/sweep collector, that only needs to 
1351         update the single owner pointer rather than having to redirect an arbitrary 
1352         number of pointers in from-space to to-space.
1353
1354         This plan can give us a number of benefits. We can beat fastMalloc in terms 
1355         of both performance and memory usage, we can track how much memory we're using 
1356         far more accurately than our rough estimation now through the use of 
1357         reportExtraMemoryCost, and we can allocate arbitrary size objects (as opposed 
1358         to being limited to size classes like we have been historically). This is also 
1359         another step toward moving away from lazy destruction, which will improve our memory footprint.
1360
1361         We start by creating said allocator and moving the ArrayStorage for JSArray 
1362         to use it rather than fastMalloc.
1363
1364         The design of the collector is as follows:
1365         Allocation:
1366         -The collector allocates 64KB chunks from the OS to use for object allocation.
1367         -Each chunk contains an offset, a flag indicating if the block has been pinned, 
1368          and a payload, along with next and prev pointers so that they can be put in DoublyLinkedLists.
1369         -Any allocation greater than 64KB gets its own separate oversize block, which 
1370          is managed separately from the rest.
1371         -If the allocator receives a request for more than the remaining amount in the 
1372          current block, it grabs a fresh block.
1373         -Grabbing a fresh block means grabbing one off of the global free list (which is now 
1374          shared between the mark/sweep allocator and the bump allocator) if there is one. 
1375          If there isn't a new one we do one of two things: allocate a new block from the OS 
1376          if we're not ready for a GC yet, or run a GC and then try again. If we still don't 
1377          have enough space after the GC, we allocate a new block from the OS.
1378
1379         Garbage collection:
1380         -At the start of garbage collection during conservative stack scanning, if we encounter 
1381          what appears to be a pointer to a bump-allocated block of memory, we pin that block so 
1382          that it will not be copied for this round of collection.
1383         -We also pin any oversize blocks that we encounter, which effectively doubles as a 
1384          "mark bit" for that block. Any oversize blocks that aren't pinned at the end of copying 
1385          are given back to the OS.
1386         -Marking threads are now also responsible for copying bump-allocated objects to newSpace
1387         -Each marking thread has a private 64KB block into which it copies bump-allocated objects that it encounters.
1388         -When that block fills up, the marking thread gives it back to the allocator and requests a new one.
1389         -When all marking has concluded, each thread gives back its copy block, even if it isn't full.
1390         -At the conclusion of copying (which is done by the end of the marking phase), we un-pin 
1391          any pinned blocks and give any blocks left in from-space to the global free list.
1392
1393         * CMakeLists.txt:
1394         * GNUmakefile.list.am:
1395         * JavaScriptCore.gypi:
1396         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1397         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1398         * JavaScriptCore.xcodeproj/project.pbxproj:
1399         * Target.pri:
1400         * heap/AllocationSpace.cpp:
1401         (JSC::AllocationSpace::allocateSlowCase):
1402         (JSC::AllocationSpace::allocateBlock):
1403         (JSC::AllocationSpace::freeBlocks):
1404         * heap/AllocationSpace.h:
1405         (JSC::AllocationSpace::waterMark):
1406         * heap/BumpBlock.h: Added.
1407         (JSC::BumpBlock::BumpBlock):
1408         * heap/BumpSpace.cpp: Added.
1409         (JSC::BumpSpace::tryAllocateSlowCase):
1410         * heap/BumpSpace.h: Added.
1411         (JSC::BumpSpace::isInCopyPhase):
1412         (JSC::BumpSpace::totalMemoryAllocated):
1413         (JSC::BumpSpace::totalMemoryUtilized):
1414         * heap/BumpSpaceInlineMethods.h: Added.
1415         (JSC::BumpSpace::BumpSpace):
1416         (JSC::BumpSpace::init):
1417         (JSC::BumpSpace::contains):
1418         (JSC::BumpSpace::pin):
1419         (JSC::BumpSpace::startedCopying):
1420         (JSC::BumpSpace::doneCopying):
1421         (JSC::BumpSpace::doneFillingBlock):
1422         (JSC::BumpSpace::recycleBlock):
1423         (JSC::BumpSpace::getFreshBlock):
1424         (JSC::BumpSpace::borrowBlock):
1425         (JSC::BumpSpace::addNewBlock):
1426         (JSC::BumpSpace::allocateNewBlock):
1427         (JSC::BumpSpace::fitsInBlock):
1428         (JSC::BumpSpace::fitsInCurrentBlock):
1429         (JSC::BumpSpace::tryAllocate):
1430         (JSC::BumpSpace::tryAllocateOversize):
1431         (JSC::BumpSpace::allocateFromBlock):
1432         (JSC::BumpSpace::tryReallocate):
1433         (JSC::BumpSpace::tryReallocateOversize):
1434         (JSC::BumpSpace::isOversize):
1435         (JSC::BumpSpace::isPinned):
1436         (JSC::BumpSpace::oversizeBlockFor):
1437         (JSC::BumpSpace::blockFor):
1438         * heap/ConservativeRoots.cpp:
1439         (JSC::ConservativeRoots::ConservativeRoots):
1440         (JSC::ConservativeRoots::genericAddPointer):
1441         (JSC::ConservativeRoots::add):
1442         * heap/ConservativeRoots.h:
1443         * heap/Heap.cpp:
1444         (JSC::Heap::Heap):
1445         (JSC::Heap::blockFreeingThreadMain):
1446         (JSC::Heap::reportExtraMemoryCostSlowCase):
1447         (JSC::Heap::getConservativeRegisterRoots):
1448         (JSC::Heap::markRoots):
1449         (JSC::Heap::collect):
1450         (JSC::Heap::releaseFreeBlocks):
1451         * heap/Heap.h:
1452         (JSC::Heap::waterMark):
1453         (JSC::Heap::highWaterMark):
1454         (JSC::Heap::setHighWaterMark):
1455         (JSC::Heap::tryAllocateStorage):
1456         (JSC::Heap::tryReallocateStorage):
1457         * heap/HeapBlock.h: Added.
1458         (JSC::HeapBlock::HeapBlock):
1459         * heap/MarkStack.cpp:
1460         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
1461         (JSC::SlotVisitor::drain):
1462         (JSC::SlotVisitor::drainFromShared):
1463         (JSC::SlotVisitor::startCopying):
1464         (JSC::SlotVisitor::allocateNewSpace):
1465         (JSC::SlotVisitor::copy):
1466         (JSC::SlotVisitor::copyAndAppend):
1467         (JSC::SlotVisitor::doneCopying):
1468         * heap/MarkStack.h:
1469         * heap/MarkedBlock.cpp:
1470         (JSC::MarkedBlock::recycle):
1471         (JSC::MarkedBlock::MarkedBlock):
1472         * heap/MarkedBlock.h:
1473         * heap/MarkedSpace.cpp:
1474         (JSC::MarkedSpace::MarkedSpace):
1475         * heap/MarkedSpace.h:
1476         (JSC::MarkedSpace::allocate):
1477         (JSC::MarkedSpace::forEachBlock):
1478         (JSC::MarkedSpace::SizeClass::resetAllocator):
1479         * heap/SlotVisitor.h:
1480         (JSC::SlotVisitor::SlotVisitor):
1481         * heap/TinyBloomFilter.h:
1482         (JSC::TinyBloomFilter::reset):
1483         * runtime/JSArray.cpp:
1484         (JSC::JSArray::JSArray):
1485         (JSC::JSArray::finishCreation):
1486         (JSC::JSArray::tryFinishCreationUninitialized):
1487         (JSC::JSArray::~JSArray):
1488         (JSC::JSArray::enterSparseMode):
1489         (JSC::JSArray::defineOwnNumericProperty):
1490         (JSC::JSArray::setLengthWritable):
1491         (JSC::JSArray::getOwnPropertySlotByIndex):
1492         (JSC::JSArray::getOwnPropertyDescriptor):
1493         (JSC::JSArray::putByIndexBeyondVectorLength):
1494         (JSC::JSArray::deletePropertyByIndex):
1495         (JSC::JSArray::getOwnPropertyNames):
1496         (JSC::JSArray::increaseVectorLength):
1497         (JSC::JSArray::unshiftCountSlowCase):
1498         (JSC::JSArray::setLength):
1499         (JSC::JSArray::pop):
1500         (JSC::JSArray::unshiftCount):
1501         (JSC::JSArray::visitChildren):
1502         (JSC::JSArray::sortNumeric):
1503         (JSC::JSArray::sort):
1504         (JSC::JSArray::compactForSorting):
1505         (JSC::JSArray::subclassData):
1506         (JSC::JSArray::setSubclassData):
1507         (JSC::JSArray::checkConsistency):
1508         * runtime/JSArray.h:
1509         (JSC::JSArray::inSparseMode):
1510         (JSC::JSArray::isLengthWritable):
1511         * wtf/CheckedBoolean.h: Added.
1512         (CheckedBoolean::CheckedBoolean):
1513         (CheckedBoolean::~CheckedBoolean):
1514         (CheckedBoolean::operator bool):
1515         * wtf/DoublyLinkedList.h:
1516         (WTF::::push):
1517         * wtf/StdLibExtras.h:
1518         (WTF::isPointerAligned):
1519
1520 2012-01-19  Joi Sigurdsson  <joi@chromium.org>
1521
1522         Enable use of precompiled headers in Chromium port on Windows.
1523
1524         Bug 76381 - Use precompiled headers in Chromium port on Windows
1525         https://bugs.webkit.org/show_bug.cgi?id=76381
1526
1527         Reviewed by Tony Chang.
1528
1529         * JavaScriptCore.gyp/JavaScriptCore.gyp: Include WinPrecompile.gypi.
1530
1531 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
1532
1533         Cross-platform processor core counter fix
1534         https://bugs.webkit.org/show_bug.cgi?id=76540
1535
1536         Reviewed by Zoltan Herczeg.
1537
1538         I attached "OS(FREEBSD)" to "#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)"
1539         and I removed the OS checking macros from ParallelJobsGeneric.cpp because
1540         the NumberOfCores.cpp contains them for counting CPU cores.
1541         The processor core counter patch located at
1542         https://bugs.webkit.org/show_bug.cgi?id=76530
1543
1544         * wtf/NumberOfCores.cpp:
1545         * wtf/ParallelJobsGeneric.cpp:
1546
1547 2012-01-18  Csaba Osztrogonác  <ossy@webkit.org>
1548
1549         Cross-platform processor core counter
1550         https://bugs.webkit.org/show_bug.cgi?id=76530
1551
1552         Unreviewed cross-MinGW buildfix after r105270.
1553
1554         * wtf/NumberOfCores.cpp: Use windows.h instead of Windows.h.
1555
1556 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
1557
1558         Cross-platform processor core counter
1559         https://bugs.webkit.org/show_bug.cgi?id=76530
1560
1561         Reviewed by Zoltan Herczeg.
1562
1563         Two files have been created that include the processor core counter function.
1564         It used to be in ParallelJobsGeneric.h/cpp before.
1565
1566         * GNUmakefile.list.am:
1567         * JavaScriptCore.gypi:
1568         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1569         * JavaScriptCore.xcodeproj/project.pbxproj:
1570         * runtime/Options.cpp:
1571         (JSC::Options::initializeOptions):
1572         * wtf/CMakeLists.txt:
1573         * wtf/NumberOfCores.cpp: Added.
1574         (WTF::numberOfProcessorCores):
1575         * wtf/NumberOfCores.h: Added.
1576         * wtf/ParallelJobsGeneric.cpp:
1577         (WTF::ParallelEnvironment::ParallelEnvironment):
1578         * wtf/ParallelJobsGeneric.h:
1579
1580 2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>
1581
1582         [Qt] Consolidate layout test crash logging
1583         https://bugs.webkit.org/show_bug.cgi?id=75088
1584
1585         Reviewed by Simon Hausmann.
1586
1587         Move backtrace generating logic into WTFReportBacktrace
1588         and add a way to deinstall signal handlers if we know
1589         that we have already printed the backtrace.
1590
1591         * JavaScriptCore.exp:
1592         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1593         * wtf/Assertions.cpp:
1594         (WTFLogLocker::WTFReportBacktrace):
1595         (WTFLogLocker::WTFSetCrashHook):
1596         (WTFLogLocker::WTFInvokeCrashHook):
1597         * wtf/Assertions.h:
1598
1599 2012-01-17  Geoffrey Garen  <ggaren@apple.com>
1600
1601         Factored out some code into a helper function.
1602         
1603         I think this might help getting rid of omit-frame-pointer.
1604
1605         Reviewed by Sam Weinig.
1606         
1607         No benchmark change.
1608
1609         * runtime/StringPrototype.cpp:
1610         (JSC::removeUsingRegExpSearch): Moved to here...
1611         (JSC::replaceUsingRegExpSearch): ...from here.
1612
1613 2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
1614
1615         Uint8ClampedArray support
1616         https://bugs.webkit.org/show_bug.cgi?id=74455
1617
1618         Reviewed by Filip Pizlo.
1619
1620         * GNUmakefile.list.am:
1621         * JavaScriptCore.xcodeproj/project.pbxproj:
1622         * bytecode/PredictedType.cpp:
1623         (JSC::predictionToString):
1624         (JSC::predictionFromClassInfo):
1625         * bytecode/PredictedType.h:
1626         (JSC::isUint8ClampedArrayPrediction):
1627         (JSC::isActionableMutableArrayPrediction):
1628         * dfg/DFGAbstractState.cpp:
1629         (JSC::DFG::AbstractState::initialize):
1630         (JSC::DFG::AbstractState::execute):
1631         * dfg/DFGNode.h:
1632         (JSC::DFG::Node::shouldSpeculateUint8ClampedArray):
1633         * dfg/DFGPropagator.cpp:
1634         (JSC::DFG::Propagator::propagateNodePredictions):
1635         (JSC::DFG::Propagator::fixupNode):
1636         (JSC::DFG::Propagator::performNodeCSE):
1637         * dfg/DFGSpeculativeJIT.cpp:
1638         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
1639         (JSC::DFG::clampDoubleToByte):
1640         (JSC::DFG::compileClampIntegerToByte):
1641         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
1642         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1643         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
1644         * dfg/DFGSpeculativeJIT.h:
1645         * dfg/DFGSpeculativeJIT32_64.cpp:
1646         (JSC::DFG::SpeculativeJIT::compile):
1647         * dfg/DFGSpeculativeJIT64.cpp:
1648         (JSC::DFG::SpeculativeJIT::compile):
1649         * runtime/JSCell.h:
1650         * runtime/JSGlobalData.h:
1651         * wtf/Forward.h:
1652         * wtf/Uint8Array.h:
1653         * wtf/Uint8ClampedArray.h: Added.
1654         (WTF::Uint8ClampedArray::set):
1655         (WTF::Uint8ClampedArray::create):
1656         (WTF::Uint8ClampedArray::Uint8ClampedArray):
1657         (WTF::Uint8ClampedArray::subarray):
1658
1659 2012-01-17  Sam Weinig  <sam@webkit.org>
1660
1661         Add helper macro for forward declaring objective-c classes
1662         https://bugs.webkit.org/show_bug.cgi?id=76485
1663
1664         Reviewed by Anders Carlsson.
1665
1666         * wtf/Compiler.h:
1667         Add OBJC_CLASS macro which helps reduce code when forward declaring an
1668         objective-c class in a header which can be included from both Objective-C
1669         and non-Objective-C files.
1670
1671 2012-01-17  Filip Pizlo  <fpizlo@apple.com>
1672
1673         DFG should be able to do JS and custom getter caching
1674         https://bugs.webkit.org/show_bug.cgi?id=76361
1675
1676         Reviewed by Csaba Osztrogonác.
1677         
1678         Fix for 32-bit.
1679
1680         * dfg/DFGRepatch.cpp:
1681         (JSC::DFG::tryBuildGetByIDList):
1682         * dfg/DFGSpeculativeJIT32_64.cpp:
1683         (JSC::DFG::SpeculativeJIT::compile):
1684
1685 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
1686
1687         DFG should be able to do JS and custom getter caching
1688         https://bugs.webkit.org/show_bug.cgi?id=76361
1689         <rdar://problem/10698060>
1690
1691         Reviewed by Geoff Garen.
1692         
1693         Added the ability to cache JS getter calls and custom getter calls in the DFG.
1694         Most of this is pretty mundane, since the old JIT supported this functionality
1695         as well. But a couple interesting things had to happen:
1696         
1697         - There are now two variants of GetById: GetById, which works as before, and
1698           GetByIdFlush, which flushes registers prior to doing the GetById. Only
1699           GetByIdFlush can be used for caching getters. We detect which GetById style
1700           to use by looking at the inline caches of the old JIT.
1701         
1702         - Exception handling for getter calls planted in stubs uses a separate lookup
1703           handler routine, which uses the CodeOrigin stored in the StructureStubInfo.
1704           
1705         This is a 40% speed-up in the Dromaeo DOM Traversal average. It removes all of
1706         the DFG regressions we saw in Dromaeo. This is neutral on SunSpider, V8, and
1707         Kraken.
1708
1709         * bytecode/StructureStubInfo.h:
1710         * dfg/DFGAbstractState.cpp:
1711         (JSC::DFG::AbstractState::execute):
1712         * dfg/DFGAssemblyHelpers.h:
1713         (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
1714         * dfg/DFGByteCodeParser.cpp:
1715         (JSC::DFG::ByteCodeParser::willNeedFlush):
1716         (JSC::DFG::ByteCodeParser::parseBlock):
1717         * dfg/DFGCCallHelpers.h:
1718         (JSC::DFG::CCallHelpers::setupResults):
1719         * dfg/DFGJITCompiler.cpp:
1720         (JSC::DFG::JITCompiler::link):
1721         * dfg/DFGJITCompiler.h:
1722         (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
1723         (JSC::DFG::JITCompiler::addExceptionCheck):
1724         * dfg/DFGNode.h:
1725         (JSC::DFG::Node::hasIdentifier):
1726         (JSC::DFG::Node::hasHeapPrediction):
1727         * dfg/DFGOperations.cpp:
1728         * dfg/DFGOperations.h:
1729         * dfg/DFGPropagator.cpp:
1730         (JSC::DFG::Propagator::propagateNodePredictions):
1731         * dfg/DFGRepatch.cpp:
1732         (JSC::DFG::tryCacheGetByID):
1733         (JSC::DFG::tryBuildGetByIDList):
1734         * dfg/DFGSpeculativeJIT.h:
1735         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
1736         * dfg/DFGSpeculativeJIT32_64.cpp:
1737         (JSC::DFG::SpeculativeJIT::cachedGetById):
1738         (JSC::DFG::SpeculativeJIT::compile):
1739         * dfg/DFGSpeculativeJIT64.cpp:
1740         (JSC::DFG::SpeculativeJIT::cachedGetById):
1741         (JSC::DFG::SpeculativeJIT::compile):
1742
1743 2012-01-16  Jon Lee  <jonlee@apple.com>
1744
1745         Build fix for r105086.
1746
1747         * Configurations/FeatureDefines.xcconfig:
1748         * wtf/Platform.h:
1749
1750 2012-01-16  Jon Lee  <jonlee@apple.com>
1751
1752         Remove HTML notifications support on Mac
1753         https://bugs.webkit.org/show_bug.cgi?id=76401
1754         <rdar://problem/10589881>
1755
1756         Reviewed by Sam Weinig.
1757
1758         * wtf/Platform.h: Define ENABLE_HTML_NOTIFICATIONS macro.
1759
1760 2012-01-16  Zeno Albisser  <zeno@webkit.org>
1761
1762         [Qt] Fix QT_VERSION related warnings when building on Mac OS X
1763         https://bugs.webkit.org/show_bug.cgi?id=76340
1764
1765         This bug was caused by r104826.
1766         As already mentioned for https://bugs.webkit.org/show_bug.cgi?id=57239
1767         we should not use "using namespace WebCore" in header files,
1768         because it might cause ambiguous references.
1769         This patch reverts the changes from r104826 and r104981
1770         and removes the "using namespace WebCore" statement from
1771         two header files.
1772
1773         Reviewed by Tor Arne Vestbø.
1774
1775         * wtf/Platform.h:
1776
1777 2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>
1778
1779         Unreviewed. Fix make distcheck.
1780
1781         * GNUmakefile.list.am: Fix typo.
1782
1783 2012-01-16  Pavel Heimlich  <tropikhajma@gmail.com>
1784
1785         Solaris Studio supports alignment macros too
1786         https://bugs.webkit.org/show_bug.cgi?id=75453
1787
1788         Reviewed by Hajime Morita.
1789
1790         * wtf/Alignment.h:
1791
1792 2012-01-16  Yuqiang Xian  <yuqiang.xian@intel.com>
1793
1794         Build fix on 32bit if verbose debug is enabled in DFG
1795         https://bugs.webkit.org/show_bug.cgi?id=76351
1796
1797         Reviewed by Hajime Morita.
1798
1799         Mostly change "%lu" to "%zu" to print a "size_t" variable.
1800
1801         * dfg/DFGAbstractState.cpp:
1802         (JSC::DFG::AbstractState::endBasicBlock):
1803         * dfg/DFGByteCodeParser.cpp:
1804         (JSC::DFG::ByteCodeParser::handleCall):
1805         (JSC::DFG::ByteCodeParser::handleInlining):
1806         (JSC::DFG::ByteCodeParser::parseBlock):
1807         (JSC::DFG::ByteCodeParser::parseCodeBlock):
1808         * dfg/DFGGraph.cpp:
1809         (JSC::DFG::Graph::predictArgumentTypes):
1810         * dfg/DFGJITCompiler.cpp:
1811         (JSC::DFG::JITCompiler::link):
1812         * dfg/DFGOSREntry.cpp:
1813         (JSC::DFG::prepareOSREntry):
1814
1815 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
1816
1817         The C calling convention logic in DFG::SpeculativeJIT should be available even
1818         when not generating code for the DFG speculative path
1819         https://bugs.webkit.org/show_bug.cgi?id=76355
1820
1821         Reviewed by Dan Bernstein.
1822         
1823         Moved all of the logic for placing C call arguments into the right place (stack
1824         or registers) into a new class, DFG::CCallHelpers.  This class inherits from
1825         AssemblyHelpers, another DFG grab-bag of helper functions.  I could have moved
1826         this code into AssemblyHelpers, but decided against it, because I wanted to
1827         limit the number of methods each class in the JIT has.  Hence now we have a
1828         slightly odd organization of JIT classes in DFG: MacroAssembler (basic instruction
1829         emission) <= AssemblyHelpers (some additional JS smarts) <= CCallHelpers
1830         (understands calls to C functions) <= JITCompiler (can compile a graph to machine
1831         code).  Each of these except for JITCompiler can be reused for stub compilation.
1832         
1833         * GNUmakefile.list.am:
1834         * JavaScriptCore.xcodeproj/project.pbxproj:
1835         * dfg/DFGCCallHelpers.h: Added.
1836         (JSC::DFG::CCallHelpers::CCallHelpers):
1837         (JSC::DFG::CCallHelpers::resetCallArguments):
1838         (JSC::DFG::CCallHelpers::addCallArgument):
1839         (JSC::DFG::CCallHelpers::setupArguments):
1840         (JSC::DFG::CCallHelpers::setupArgumentsExecState):
1841         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
1842         (JSC::DFG::CCallHelpers::setupTwoStubArgs):
1843         (JSC::DFG::CCallHelpers::setupStubArguments):
1844         * dfg/DFGJITCompiler.h:
1845         (JSC::DFG::JITCompiler::JITCompiler):
1846         * dfg/DFGSpeculativeJIT.h:
1847         (JSC::DFG::SpeculativeJIT::callOperation):
1848
1849 2012-01-15  Pablo Flouret  <pablof@motorola.com>
1850
1851         Fix compilation errors on build-webkit --debug --no-video on mac.
1852         https://bugs.webkit.org/show_bug.cgi?id=75867
1853
1854         Reviewed by Philippe Normand.
1855
1856         Make ENABLE_VIDEO_TRACK conditional on ENABLE_VIDEO, video track feature
1857         doesn't build without video.
1858
1859         * wtf/Platform.h:
1860
1861 2012-01-14  David Levin  <levin@chromium.org>
1862
1863         HWndDC should be in platform/win instead of wtf.
1864         https://bugs.webkit.org/show_bug.cgi?id=76314
1865
1866         Reviewed by Sam Weinig.
1867
1868         * JavaScriptCore.gyp/JavaScriptCore.gyp:
1869         * JavaScriptCore.gypi:
1870
1871 2012-01-13  David Levin  <levin@chromium.org>
1872
1873         check-webkit-style: should encourage the use of Own* classes for Windows DC.
1874         https://bugs.webkit.org/show_bug.cgi?id=76227
1875
1876         Reviewed by Dirk Pranke.
1877
1878         * wtf/win/HWndDCWin.h:
1879         (WTF::HwndDC::HwndDC): Add a way to do GetDCEx.
1880         There are no users, but I want to catch this in check-webkit-style
1881         and tell any users to use HwndDC to avoid leaks.
1882
1883 2012-01-13  David Levin  <levin@chromium.org>
1884
1885         Header file is missing header guard.
1886
1887         Reviewed by Dirk Pranke.
1888
1889         * wtf/win/HWndDCWin.h: Added the guards.
1890
1891 2012-01-13  Andy Wingo  <wingo@igalia.com>
1892
1893         Eval in strict mode does not need dynamic checks
1894         https://bugs.webkit.org/show_bug.cgi?id=76286
1895
1896         Reviewed by Oliver Hunt.
1897
1898         * runtime/JSActivation.cpp (JSC::JSActivation::JSActivation):
1899         Eval in strict mode cannot introduce variables, so it not impose
1900         the need for dynamic checks.
1901
1902 2012-01-13  David Levin  <levin@chromium.org>
1903
1904         HWndDC is a better name than HwndDC.
1905         https://bugs.webkit.org/show_bug.cgi?id=76281
1906
1907         Reviewed by Darin Adler.
1908
1909         * JavaScriptCore.gyp/JavaScriptCore.gyp:
1910         * JavaScriptCore.gypi:
1911         * wtf/win/HWndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/HwndDCWin.h.
1912         (WTF::HWndDC::HWndDC):
1913         (WTF::HWndDC::~HWndDC):
1914         (WTF::HWndDC::operator HDC):
1915
1916 2012-01-13  YoungTaeck Song  <youngtaeck.song@samsung.com>
1917
1918         [EFL] Add OwnPtr specialization for Eina_Module.
1919         https://bugs.webkit.org/show_bug.cgi?id=76255
1920
1921         Reviewed by Andreas Kling.
1922
1923         Add an overload for deleteOwnedPtr(Eina_Module*) on EFL port.
1924
1925         * wtf/OwnPtrCommon.h:
1926         * wtf/efl/OwnPtrEfl.cpp:
1927         (WTF::deleteOwnedPtr):
1928
1929 2012-01-13  Yuqiang Xian  <yuqiang.xian@intel.com>
1930
1931         Unreviewed build fix after r104787 if JIT_VERBOSE_OSR is defined
1932
1933         * jit/JITStubs.cpp:
1934         (JSC::DEFINE_STUB_FUNCTION):
1935
1936 2012-01-12  Hajime Morrita  <morrita@chromium.org>
1937
1938         JavaScriptCore: Mark all exported symbols in the header file automatically.
1939         https://bugs.webkit.org/show_bug.cgi?id=72855
1940
1941         Reviewed by Darin Adler.
1942
1943         Added WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE based on JavaScriptCore.exp files.
1944         The change is generated by a tool calledListExportables (https://github.com/omo/ListExportables)
1945
1946         * API/OpaqueJSString.h:
1947         * bytecode/CodeBlock.h:
1948         * bytecode/SamplingTool.h:
1949         * debugger/Debugger.h:
1950         * debugger/DebuggerActivation.h:
1951         * debugger/DebuggerCallFrame.h:
1952         * heap/AllocationSpace.h:
1953         * heap/HandleHeap.h:
1954         * heap/Heap.h:
1955         * heap/MachineStackMarker.h:
1956         * heap/MarkStack.h:
1957         * heap/VTableSpectrum.h:
1958         * heap/WriteBarrierSupport.h:
1959         * parser/Nodes.h:
1960         * parser/ParserArena.h:
1961         * profiler/Profile.h:
1962         * runtime/ArgList.h:
1963         * runtime/CallData.h:
1964         * runtime/Completion.h:
1965         * runtime/ConstructData.h:
1966         * runtime/DateInstance.h:
1967         * runtime/Error.h:
1968         * runtime/ExceptionHelpers.h:
1969         * runtime/FunctionConstructor.h:
1970         * runtime/Identifier.h:
1971         * runtime/InitializeThreading.h:
1972         * runtime/InternalFunction.h:
1973         * runtime/JSArray.h:
1974         * runtime/JSByteArray.h:
1975         * runtime/JSCell.h:
1976         * runtime/JSFunction.h:
1977         * runtime/JSGlobalData.cpp:
1978         * runtime/JSGlobalData.h:
1979         * runtime/JSGlobalObject.h:
1980         * runtime/JSGlobalThis.h:
1981         * runtime/JSLock.h:
1982         * runtime/JSObject.h:
1983         * runtime/JSString.h:
1984         * runtime/JSValue.h:
1985         * runtime/JSVariableObject.h:
1986         * runtime/Lookup.h:
1987         * runtime/MemoryStatistics.h:
1988         * runtime/ObjectPrototype.h:
1989         * runtime/Options.h:
1990         * runtime/PropertyDescriptor.h:
1991         * runtime/PropertyNameArray.h:
1992         * runtime/PropertySlot.h:
1993         * runtime/RegExp.h:
1994         * runtime/RegExpObject.h:
1995         * runtime/SamplingCounter.h:
1996         * runtime/SmallStrings.h:
1997         * runtime/StringObject.h:
1998         * runtime/Structure.h:
1999         * runtime/TimeoutChecker.h:
2000         * runtime/UString.h:
2001         * runtime/WriteBarrier.h:
2002         * wtf/ArrayBufferView.h:
2003         * wtf/ByteArray.h:
2004         * wtf/CryptographicallyRandomNumber.h:
2005         * wtf/CurrentTime.h:
2006         * wtf/DateMath.h:
2007         * wtf/DecimalNumber.h:
2008         * wtf/FastMalloc.cpp:
2009         * wtf/FastMalloc.h:
2010         * wtf/MD5.h:
2011         * wtf/MainThread.h:
2012         * wtf/MetaAllocator.h:
2013         * wtf/MetaAllocatorHandle.h:
2014         * wtf/OSAllocator.h:
2015         * wtf/PageBlock.h:
2016         * wtf/RandomNumber.h:
2017         * wtf/RefCountedLeakCounter.h:
2018         * wtf/SHA1.h:
2019         * wtf/Threading.cpp:
2020         * wtf/Threading.h:
2021         * wtf/ThreadingPrimitives.h:
2022         * wtf/WTFThreadData.h:
2023         * wtf/dtoa.h:
2024         * wtf/text/AtomicString.h:
2025         * wtf/text/CString.h:
2026         * wtf/text/StringBuilder.h:
2027         * wtf/text/StringImpl.h:
2028         * wtf/text/WTFString.h:
2029         * wtf/unicode/Collator.h:
2030         * wtf/unicode/UTF8.h:
2031         * yarr/Yarr.h:
2032         * yarr/YarrPattern.h:
2033
2034 2012-01-12  MORITA Hajime  <morrita@google.com>
2035
2036         [Chromium] JSExportMacros.h should be visible.
2037         https://bugs.webkit.org/show_bug.cgi?id=76147
2038
2039         Reviewed by Tony Chang.
2040
2041         * config.h:
2042
2043 2012-01-12  David Levin  <levin@chromium.org>
2044
2045         HwndDC is a better name than OwnGetDC.
2046         https://bugs.webkit.org/show_bug.cgi?id=76235
2047
2048         Reviewed by Dmitry Titov.
2049
2050         This is a better name for two reasons:
2051         1. "Own" implies "delete". In this case, the final call is a release (ReleaseDC).
2052         2. "Ref" would be a better name due to the release but the RefPtr (and OwnPtr)
2053            classes always take something to hold on to. In this case, the object (the DC)
2054            is created by the class once it is given a Window to ensure that the HDC
2055            was actually created using GetDC.
2056
2057         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2058         * JavaScriptCore.gypi:
2059         * wtf/win/HwndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/OwnGetDCWin.h.
2060         (WTF::HwndDC::HwndDC):
2061         (WTF::HwndDC::~HwndDC):
2062         (WTF::HwndDC::operator HDC):
2063
2064 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
2065
2066         Clean up putDirect (part 2)
2067         https://bugs.webkit.org/show_bug.cgi?id=76232
2068
2069         Reviewed by Sam Weinig.
2070
2071         Rename putWithAttributes to putDirectVirtual, to identify that this
2072         has the same unchecked-DefineOwnProperty behaviour, change putDirectInternal
2073         to be templated on an enum indicating which behaviour it is supposed to be
2074         implementing, and change clients that are defining properties to call
2075         putDirectInternal correctly.
2076
2077         * API/JSObjectRef.cpp:
2078         (JSObjectSetProperty):
2079         * JavaScriptCore.exp:
2080         * debugger/DebuggerActivation.cpp:
2081         (JSC::DebuggerActivation::putDirectVirtual):
2082         * debugger/DebuggerActivation.h:
2083         * interpreter/Interpreter.cpp:
2084         (JSC::Interpreter::execute):
2085         * runtime/ClassInfo.h:
2086         * runtime/Error.cpp:
2087         (JSC::addErrorInfo):
2088         * runtime/JSActivation.cpp:
2089         (JSC::JSActivation::putDirectVirtual):
2090         * runtime/JSActivation.h:
2091         * runtime/JSCell.cpp:
2092         (JSC::JSCell::putDirectVirtual):
2093         * runtime/JSCell.h:
2094         * runtime/JSGlobalObject.cpp:
2095         (JSC::JSGlobalObject::putDirectVirtual):
2096         * runtime/JSGlobalObject.h:
2097         * runtime/JSObject.cpp:
2098         (JSC::JSObject::put):
2099         (JSC::JSObject::putDirectVirtual):
2100         (JSC::JSObject::defineGetter):
2101         (JSC::JSObject::initializeGetterSetterProperty):
2102         (JSC::JSObject::defineSetter):
2103         (JSC::putDescriptor):
2104         * runtime/JSObject.h:
2105         (JSC::JSObject::putDirectInternal):
2106         (JSC::JSObject::putOwnDataProperty):
2107         (JSC::JSObject::putDirect):
2108         * runtime/JSStaticScopeObject.cpp:
2109         (JSC::JSStaticScopeObject::putDirectVirtual):
2110         * runtime/JSStaticScopeObject.h:
2111         * runtime/JSVariableObject.cpp:
2112         (JSC::JSVariableObject::putDirectVirtual):
2113         * runtime/JSVariableObject.h:
2114
2115 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
2116
2117         Clean up putDirect (part 1)
2118         https://bugs.webkit.org/show_bug.cgi?id=76232
2119
2120         Reviewed by Sam Weinig.
2121
2122         putDirect has ambiguous semantics, clean these up a bit.
2123
2124         putDirect generally behaves a bit like a fast defineOwnProperty, but one that
2125         always creates the property, with no checking to validate the put it permitted.
2126
2127         It also encompasses two slightly different behaviors.
2128         (1) a fast form of put for JSActivation, which doesn't have to handle searching
2129             the prototype chain, getter/setter properties, or the magic __proto__ value.
2130             Break this out as a new method, 'putOwnDataProperty'.
2131         (2) the version of putDirect on JSValue will also check for overwriting ReadOnly
2132             values, in strict mode. This is, however, not so smart on a few level, since
2133             it is only called from op_put_by_id with direct set, which is only used with
2134             an object as the base, and is only used to put new properties onto objects.
2135
2136         * dfg/DFGOperations.cpp:
2137         * interpreter/Interpreter.cpp:
2138         (JSC::Interpreter::privateExecute):
2139         * jit/JITStubs.cpp:
2140         (JSC::DEFINE_STUB_FUNCTION):
2141         * runtime/JSActivation.cpp:
2142         (JSC::JSActivation::put):
2143         * runtime/JSFunction.cpp:
2144         (JSC::JSFunction::getOwnPropertySlot):
2145         * runtime/JSObject.h:
2146         (JSC::JSObject::putOwnDataProperty):
2147         * runtime/JSValue.h:
2148
2149 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
2150
2151         https://bugs.webkit.org/show_bug.cgi?id=76141
2152         defineSetter/defineGetter may fail to update Accessor attribute
2153
2154         Reviewed by Oliver Hunt.
2155
2156         * runtime/JSObject.cpp:
2157         (JSC::JSObject::defineGetter):
2158         (JSC::JSObject::initializeGetterSetterProperty):
2159         (JSC::JSObject::defineSetter):
2160         * runtime/Structure.cpp:
2161         (JSC::Structure::attributeChangeTransition):
2162         * runtime/Structure.h:
2163
2164 2012-01-12  David Levin  <levin@chromium.org>
2165
2166         [chromium] Fix DC leak in WebScreenInfoFactory.
2167         https://bugs.webkit.org/show_bug.cgi?id=76203
2168
2169         Reviewed by Dmitry Titov.
2170
2171         * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnGetDCWin.h
2172         * JavaScriptCore.gypi: Added OwnGetDCWin.h
2173         * JavaScriptCore/wtf/win/OwnGetDCWin.h: Made an owner class for GetDC which needs ReleaseDC as opposed to DeleteDC.
2174
2175 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
2176
2177         Allow accessor get/set property to be set to undefined
2178         https://bugs.webkit.org/show_bug.cgi?id=76148
2179
2180         Reviewed by Oliver Hunt.
2181
2182         AccessorDescriptor properties may have their get & set properties defined to reference a function
2183         (Callable object) or be set to undefined. Valid PropertyDescriptors created by toPropertyDescriptor
2184         (defined from JS code via Object.defineProperty, etc) have get and set properties that are in one of
2185         three states (1) nonexistent, (2) set to undefined, or (3) a function (any Callable object).
2186
2187         On the PropertyDescriptor object these three states are represneted by JSValue(), jsUndefined(), and
2188         any JSObject* (with a constraint that this must be callable).
2189
2190         Logically the get/set property of an accessor descriptor on an object might be in any of the three
2191         states above, but in practice there is no way to distinguish between the first two states. As such
2192         we stor the get/set values in property storage in a JSObject* field, with 0 indicating absent or
2193         undefined. When unboxing to a PropertyDescriptor, map this back to a JS undefined value.
2194
2195         * runtime/GetterSetter.h:
2196         (JSC::GetterSetter::setGetter):
2197         (JSC::GetterSetter::setSetter):
2198             - Allow the getter/setter to be cleared.
2199         * runtime/JSArray.cpp:
2200         (JSC::JSArray::putDescriptor):
2201             - Changed to call getterObject/setterObject.
2202         (JSC::JSArray::defineOwnNumericProperty):
2203             - Added ASSERT.
2204         * runtime/JSObject.cpp:
2205         (JSC::putDescriptor):
2206         (JSC::JSObject::defineOwnProperty):
2207             - Changed to call getterObject/setterObject.
2208         * runtime/ObjectConstructor.cpp:
2209         (JSC::objectConstructorGetOwnPropertyDescriptor):
2210             - getter/setter values read from properties on object are never missing, they will now be set as undefined by 'setDescriptor'.
2211         (JSC::toPropertyDescriptor):
2212             - Do not translate undefined->empty, this loses an important distinction between a get/set property being absent, or being explicitly set to undefined.
2213         * runtime/PropertyDescriptor.cpp:
2214         (JSC::PropertyDescriptor::getterObject):
2215         (JSC::PropertyDescriptor::setterObject):
2216             - Accessors to convert the get/set property to an object pointer, converting undefined to 0.
2217         (JSC::PropertyDescriptor::setDescriptor):
2218         (JSC::PropertyDescriptor::setAccessorDescriptor):
2219             - Translate a getter/setter internally represented at 0 to undefined, indicating that it is present.
2220         * runtime/PropertyDescriptor.h:
2221             - Declare getterObject/setterObject.
2222
2223 2012-01-12  Zeno Albisser  <zeno@webkit.org>
2224
2225         [Qt][WK2][Mac] Conflict of MacTypes.h defining a Fixed type after r104560.
2226         https://bugs.webkit.org/show_bug.cgi?id=76175
2227
2228         Defining ENABLE_CSS_FILTERS leads to ambiguous references
2229         due to MacTypes.h being included.
2230         Defining CF_OPEN_SOURCE works around this problem.
2231
2232         Reviewed by Simon Hausmann.
2233
2234         * wtf/Platform.h:
2235
2236 2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>
2237
2238         Make the new WTF module build on Qt
2239         https://bugs.webkit.org/show_bug.cgi?id=76163
2240
2241         Reviewed by Tor Arne Vestbø.
2242
2243         * JavaScriptCore.pro: Removed wtf from the subdirs to build.
2244
2245 2012-01-11  Filip Pizlo  <fpizlo@apple.com>
2246
2247         CodeBlock::m_executeCounter should be renamed to CodeBlock::m_jitExecuteCounter
2248         https://bugs.webkit.org/show_bug.cgi?id=76144
2249         <rdar://problem/10681711>
2250
2251         Rubber stamped by Gavin Barraclough.
2252
2253         * bytecode/CodeBlock.h:
2254         (JSC::CodeBlock::addressOfJITExecuteCounter):
2255         (JSC::CodeBlock::offsetOfJITExecuteCounter):
2256         (JSC::CodeBlock::jitExecuteCounter):
2257         (JSC::CodeBlock::optimizeNextInvocation):
2258         (JSC::CodeBlock::dontOptimizeAnytimeSoon):
2259         (JSC::CodeBlock::optimizeAfterWarmUp):
2260         (JSC::CodeBlock::optimizeAfterLongWarmUp):
2261         (JSC::CodeBlock::optimizeSoon):
2262         * dfg/DFGOSRExitCompiler32_64.cpp:
2263         (JSC::DFG::OSRExitCompiler::compileExit):
2264         * dfg/DFGOSRExitCompiler64.cpp:
2265         (JSC::DFG::OSRExitCompiler::compileExit):
2266         * jit/JIT.cpp:
2267         (JSC::JIT::emitOptimizationCheck):
2268
2269 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
2270
2271         Merge 'Getter'/'Setter' attributes into 'Accessor'
2272         https://bugs.webkit.org/show_bug.cgi?id=76141
2273
2274         Reviewed by Filip Pizlo.
2275
2276         These are currently ambiguous (and used inconsistently). It would logically appear
2277         that either being bit set implies that the corresponding type of accessor is present
2278         but (a) we don't correctly enforce this, and (b) this means the attributes would not
2279         be able to distinguish between a data descriptor and an accessor descriptor with
2280         neither a getter nor setter defined (which is a descriptor permissible under the spec).
2281         This ambiguity would lead to unsafe property caching behavior (though this does not
2282         represent an actual current bug, since we are currently unable to create descriptors
2283         that have neither a getter nor setter, it just prevents us from doing so).
2284
2285         * runtime/Arguments.cpp:
2286         (JSC::Arguments::createStrictModeCallerIfNecessary):
2287         (JSC::Arguments::createStrictModeCalleeIfNecessary):
2288         * runtime/JSArray.cpp:
2289         (JSC::SparseArrayValueMap::put):
2290         (JSC::JSArray::putDescriptor):
2291         * runtime/JSBoundFunction.cpp:
2292         (JSC::JSBoundFunction::finishCreation):
2293         * runtime/JSFunction.cpp:
2294         (JSC::JSFunction::getOwnPropertySlot):
2295         (JSC::JSFunction::getOwnPropertyDescriptor):
2296         * runtime/JSObject.cpp:
2297         (JSC::JSObject::defineGetter):
2298         (JSC::JSObject::initializeGetterSetterProperty):
2299         (JSC::JSObject::defineSetter):
2300         (JSC::putDescriptor):
2301         (JSC::JSObject::defineOwnProperty):
2302         * runtime/JSObject.h:
2303         * runtime/ObjectConstructor.cpp:
2304         (JSC::objectConstructorDefineProperty):
2305         * runtime/PropertyDescriptor.cpp:
2306         (JSC::PropertyDescriptor::setDescriptor):
2307         (JSC::PropertyDescriptor::setAccessorDescriptor):
2308         (JSC::PropertyDescriptor::setSetter):
2309         (JSC::PropertyDescriptor::setGetter):
2310         (JSC::PropertyDescriptor::attributesOverridingCurrent):
2311
2312 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
2313
2314         Object.defineProperty([], 'length', {}) should not make length read-only
2315         https://bugs.webkit.org/show_bug.cgi?id=76097
2316
2317         Reviewed by Oliver Hunt.
2318
2319         * runtime/JSArray.cpp:
2320         (JSC::JSArray::defineOwnProperty):
2321             - We should be checking writablePresent().
2322
2323 2012-01-11  Filip Pizlo  <fpizlo@apple.com>
2324
2325         Code duplication for invoking the JIT and DFG should be reduced
2326         https://bugs.webkit.org/show_bug.cgi?id=76117
2327         <rdar://problem/10680189>
2328
2329         Rubber stamped by Geoff Garen.
2330
2331         * GNUmakefile.list.am:
2332         * JavaScriptCore.xcodeproj/project.pbxproj:
2333         * jit/JITDriver.h: Added.
2334         (JSC::jitCompileIfAppropriate):
2335         (JSC::jitCompileFunctionIfAppropriate):
2336         * runtime/Executable.cpp:
2337         (JSC::EvalExecutable::compileInternal):
2338         (JSC::ProgramExecutable::compileInternal):
2339         (JSC::FunctionExecutable::compileForCallInternal):
2340         (JSC::FunctionExecutable::compileForConstructInternal):
2341
2342 2012-01-11  Geoffrey Garen  <ggaren@apple.com>
2343
2344         Bytecode dumping is broken for call opcodes (due to two new operands)
2345         https://bugs.webkit.org/show_bug.cgi?id=75886
2346
2347         Reviewed by Oliver Hunt.
2348
2349         * bytecode/CodeBlock.cpp:
2350         (JSC::CodeBlock::printCallOp): Made a helper function, so I wouldn't have
2351         to fix this more than once. The helper function skips the extra two operands
2352         at the end of the opcode, used for optimization.
2353         
2354         (JSC::CodeBlock::dump): Used the helper function.
2355
2356         * bytecode/CodeBlock.h: Declared the helper function.
2357
2358 2012-01-09  Geoffrey Garen  <ggaren@apple.com>
2359
2360         REGRESSION: d3 Bullet Charts demo doesn't work (call with argument assignment is broken)
2361         https://bugs.webkit.org/show_bug.cgi?id=75911
2362
2363         * bytecompiler/BytecodeGenerator.h:
2364         (JSC::BytecodeGenerator::emitNodeForLeftHandSide): Cleanup: No need to
2365         explicitly cast to our return type in C++.
2366
2367         * bytecompiler/NodesCodegen.cpp:
2368         (JSC::FunctionCallResolveNode::emitBytecode):
2369         (JSC::ApplyFunctionCallDotNode::emitBytecode): Make sure to copy our function
2370         into a temporary register before evaluating our arguments, since argument
2371         evaluation might include function calls or assignments that overwrite our callee by name.
2372
2373 2012-01-11  Michael Saboff  <msaboff@apple.com>
2374
2375         v8-regexp spends 35% of its time allocating and copying internal regexp results data
2376         https://bugs.webkit.org/show_bug.cgi?id=76079
2377
2378         Reviewed by Geoffrey Garen.
2379
2380         Added a new RegExpResults struct that has the input string, the number of
2381         subexpressions and the output vector.  Changed RegExpConstructor to
2382         include a RegExpConstructorPrivate instead of having a reference to one.
2383         Changed RegExpMatchesArray to include a RegExpResults instead of a 
2384         reference to a RegExpConstructorPrivate.  Created an overloaded assignment
2385         operator to assign a RegExpConstructorPrivate to a RegExpResults.
2386         Collectively this change is worth 24% performance improvement to v8-regexp.
2387         
2388         * runtime/RegExpConstructor.cpp:
2389         (JSC::RegExpResult::operator=):
2390         (JSC::RegExpConstructor::RegExpConstructor):
2391         (JSC::RegExpMatchesArray::RegExpMatchesArray):
2392         (JSC::RegExpMatchesArray::finishCreation):
2393         (JSC::RegExpMatchesArray::~RegExpMatchesArray):
2394         (JSC::RegExpMatchesArray::fillArrayInstance):
2395         (JSC::RegExpConstructor::arrayOfMatches):
2396         (JSC::RegExpConstructor::getBackref):
2397         (JSC::RegExpConstructor::getLastParen):
2398         (JSC::RegExpConstructor::getLeftContext):
2399         (JSC::RegExpConstructor::getRightContext):
2400         (JSC::RegExpConstructor::setInput):
2401         (JSC::RegExpConstructor::input):
2402         (JSC::RegExpConstructor::setMultiline):
2403         (JSC::RegExpConstructor::multiline):
2404         * runtime/RegExpConstructor.h:
2405         (JSC::RegExpResult::RegExpResult):
2406         (JSC::RegExpConstructor::performMatch):
2407         * runtime/RegExpMatchesArray.h:
2408         (JSC::RegExpMatchesArray::create):
2409         (JSC::RegExpMatchesArray::getOwnPropertySlot):
2410         (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
2411         (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
2412         (JSC::RegExpMatchesArray::put):
2413         (JSC::RegExpMatchesArray::putByIndex):
2414         (JSC::RegExpMatchesArray::deleteProperty):
2415         (JSC::RegExpMatchesArray::deletePropertyByIndex):
2416         (JSC::RegExpMatchesArray::getOwnPropertyNames):
2417
2418 2012-01-11  Eugene Girard  <girard@google.com>
2419
2420         Typo in error message: Unexpected token 'defualt'
2421         https://bugs.webkit.org/show_bug.cgi?id=75105
2422
2423         Reviewed by Simon Fraser.
2424
2425         * parser/Parser.h:
2426         (JSC::Parser::getTokenName):
2427
2428 2012-01-11  Anders Carlsson  <andersca@apple.com>
2429
2430         Assertion failure in JSC::allocateCell trying to allocate a JSString
2431         https://bugs.webkit.org/show_bug.cgi?id=76101
2432
2433         Reviewed by Adam Roben.
2434
2435         Remove the ExecutableBase::s_info and JSString::s_info static member variables  from the .def file and
2436         export them explicitly using the JS_EXPORTDATA macro.
2437
2438         member variables explicitly using 
2439         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2440         * runtime/Executable.h:
2441         * runtime/JSString.h:
2442
2443 2012-01-10  Mark Rowe  <mrowe@apple.com>
2444
2445         <rdar://problem/10673792> jsc should install directly in to versioned Resources subfolder
2446
2447         This ensures that jsc ends up in a consistent location whether built in to the same DSTROOT
2448         as JavaScriptCore.framework or in to a different one.
2449
2450         Rubber-stamped by Dan Bernstein.
2451
2452         * Configurations/JSC.xcconfig: Update INSTALL_PATH.
2453
2454 2012-01-10  Filip Pizlo  <fpizlo@apple.com>
2455
2456         DFG inlining block linking compares BlockIndex against bytecode index
2457         https://bugs.webkit.org/show_bug.cgi?id=76018
2458         <rdar://problem/10671979>
2459
2460         Reviewed by Gavin Barraclough.
2461
2462         * dfg/DFGByteCodeParser.cpp:
2463         (JSC::DFG::ByteCodeParser::parseCodeBlock):
2464
2465 2012-01-10  Filip Pizlo  <fpizlo@apple.com>
2466
2467         CodeBlock.h declares too many things
2468         https://bugs.webkit.org/show_bug.cgi?id=76001
2469
2470         Rubber stamped by Gavin Barraclough.
2471         
2472         Removed all non-CodeBlock type declarations from CodeBlock.h, and put them
2473         into separate header files. Also removed all non-CodeBlock method implementations
2474         from CodeBlock.cpp and put them into corresponding cpp files.
2475
2476         * CMakeLists.txt:
2477         * GNUmakefile.list.am:
2478         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2479         * JavaScriptCore.xcodeproj/project.pbxproj:
2480         * Target.pri:
2481         * assembler/RepatchBuffer.h:
2482         * bytecode/CallLinkInfo.cpp: Added.
2483         (JSC::CallLinkInfo::unlink):
2484         * bytecode/CallLinkInfo.h: Added.
2485         (JSC::CallLinkInfo::callTypeFor):
2486         (JSC::CallLinkInfo::CallLinkInfo):
2487         (JSC::CallLinkInfo::~CallLinkInfo):
2488         (JSC::CallLinkInfo::isLinked):
2489         (JSC::CallLinkInfo::seenOnce):
2490         (JSC::CallLinkInfo::setSeen):
2491         (JSC::getCallLinkInfoReturnLocation):
2492         (JSC::getCallLinkInfoBytecodeIndex):
2493         * bytecode/CallReturnOffsetToBytecodeOffset.h: Added.
2494         (JSC::CallReturnOffsetToBytecodeOffset::CallReturnOffsetToBytecodeOffset):
2495         (JSC::getCallReturnOffset):
2496         * bytecode/CodeBlock.cpp:
2497         * bytecode/CodeBlock.h:
2498         * bytecode/CodeType.h: Added.
2499         * bytecode/ExpressionRangeInfo.h: Added.
2500         * bytecode/GlobalResolveInfo.h: Added.
2501         (JSC::GlobalResolveInfo::GlobalResolveInfo):
2502         * bytecode/HandlerInfo.h: Added.
2503         * bytecode/LineInfo.h: Added.
2504         * bytecode/MethodCallLinkInfo.cpp: Added.
2505         (JSC::MethodCallLinkInfo::reset):
2506         * bytecode/MethodCallLinkInfo.h: Added.
2507         (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
2508         (JSC::MethodCallLinkInfo::seenOnce):
2509         (JSC::MethodCallLinkInfo::setSeen):
2510         (JSC::getMethodCallLinkInfoReturnLocation):
2511         (JSC::getMethodCallLinkInfoBytecodeIndex):
2512         * bytecode/StructureStubInfo.h:
2513         (JSC::getStructureStubInfoReturnLocation):
2514         (JSC::getStructureStubInfoBytecodeIndex):
2515
2516 2012-01-10  Anders Carlsson  <andersca@apple.com>
2517
2518         Hang opening movie that requires authentication
2519         https://bugs.webkit.org/show_bug.cgi?id=75989
2520         <rdar://problem/9601915>
2521
2522         Reviewed by Sam Weinig.
2523
2524         * wtf/Functional.h:
2525         Add function wrapper for a function that takes three parameters.
2526
2527 2012-01-10  Filip Pizlo  <fpizlo@apple.com>
2528
2529         CodeBlock::m_numParameters should be encapsulated
2530         https://bugs.webkit.org/show_bug.cgi?id=75985
2531         <rdar://problem/10671020>
2532
2533         Reviewed by Oliver Hunt.
2534         
2535         Encapsulated CodeBlock::m_numParameters and hooked argument profile creation
2536         into it.  This appears to be performance neutral.
2537
2538         * bytecode/CodeBlock.cpp:
2539         (JSC::CodeBlock::CodeBlock):
2540         (JSC::CodeBlock::setNumParameters):
2541         (JSC::CodeBlock::addParameter):
2542         * bytecode/CodeBlock.h:
2543         (JSC::CodeBlock::numParameters):
2544         (JSC::CodeBlock::addressOfNumParameters):
2545         (JSC::CodeBlock::offsetOfNumParameters):
2546         (JSC::CodeBlock::numberOfArgumentValueProfiles):
2547         * bytecompiler/BytecodeGenerator.cpp:
2548         (JSC::BytecodeGenerator::BytecodeGenerator):
2549         (JSC::BytecodeGenerator::addParameter):
2550         (JSC::BytecodeGenerator::emitReturn):
2551         * dfg/DFGAbstractState.cpp:
2552         (JSC::DFG::AbstractState::AbstractState):
2553         * dfg/DFGByteCodeParser.cpp:
2554         (JSC::DFG::ByteCodeParser::ByteCodeParser):
2555         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
2556         * dfg/DFGGraph.cpp:
2557         (JSC::DFG::Graph::predictArgumentTypes):
2558         * dfg/DFGJITCompiler.cpp:
2559         (JSC::DFG::JITCompiler::compileFunction):
2560         * dfg/DFGOperations.cpp:
2561         * dfg/DFGSpeculativeJIT.cpp:
2562         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
2563         * dfg/DFGSpeculativeJIT.h:
2564         (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
2565         * interpreter/Interpreter.cpp:
2566         (JSC::Interpreter::slideRegisterWindowForCall):
2567         (JSC::Interpreter::dumpRegisters):
2568         (JSC::Interpreter::execute):
2569         (JSC::Interpreter::prepareForRepeatCall):
2570         * jit/JIT.cpp:
2571         (JSC::JIT::privateCompile):
2572         * jit/JITStubs.cpp:
2573         (JSC::arityCheckFor):
2574         (JSC::lazyLinkFor):
2575         * runtime/Executable.cpp:
2576         (JSC::FunctionExecutable::compileForCallInternal):
2577         (JSC::FunctionExecutable::compileForConstructInternal):
2578
2579 2012-01-10  Gavin Barraclough  <barraclough@apple.com>
2580
2581         Build fix following https://bugs.webkit.org/show_bug.cgi?id=75935
2582
2583         Fix 32-bit builds.
2584
2585         * runtime/JSArray.cpp:
2586         (JSC::JSArray::getOwnPropertyNames):
2587         (JSC::JSArray::setLength):
2588
2589 2012-01-10  Gavin Barraclough  <barraclough@apple.com>
2590
2591         Windows build fix.
2592
2593         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2594
2595 2012-01-10  Gavin Barraclough  <barraclough@apple.com>
2596
2597         Do not allow Array length to be set if it is non-configurable
2598         https://bugs.webkit.org/show_bug.cgi?id=75935
2599
2600         Reviewed by Sam Weinig.
2601
2602         Do not allow Array length to be set if it is non-configurable, and if the new
2603         length is less than the old length then intervening properties should removed
2604         in reverse order. Removal of properties should cease if an intervening indexed
2605         property being removed is non-configurable.
2606
2607         * JavaScriptCore.exp:
2608             - Removed export for setLength.
2609         * runtime/ArrayPrototype.cpp:
2610         (JSC::arrayProtoFuncConcat):
2611             - JSArray::setLength now takes an ExecState*
2612         (JSC::arrayProtoFuncSlice):
2613             - JSArray::setLength now takes an ExecState*
2614         * runtime/JSArray.cpp:
2615         (JSC::JSArray::defineOwnProperty):
2616             - JSArray::setLength now takes an ExecState*
2617         (JSC::JSArray::put):
2618             - JSArray::setLength now takes an ExecState*
2619         (JSC::compareKeysForQSort):
2620             - Keys extracted from the map can be stored as unsigneds.
2621         (JSC::JSArray::getOwnPropertyNames):
2622             - Keys extracted from the map can be stored as unsigneds.
2623         (JSC::JSArray::setLength):
2624             - Check lengthIsReadOnly(), rather than copying the entire map to iterate
2625               over to determine which keys to remove, instead just copy the keys from
2626               the map to a Vector. When inSparseMode sort the keys in the Vector so
2627               that we can remove properties in reverse order.
2628         * runtime/JSArray.h:
2629             - JSArray::setLength now takes an ExecState*
2630
2631 2012-01-10  Gavin Barraclough  <barraclough@apple.com>
2632
2633         Use SameValue to compare property descriptor values
2634         https://bugs.webkit.org/show_bug.cgi?id=75975
2635
2636         Reviewed by Sam Weinig.
2637
2638         Rather than strictEqual.
2639
2640         * runtime/JSArray.cpp:
2641         (JSC::JSArray::defineOwnNumericProperty):
2642             - Missing configurablePresent() check.
2643         * runtime/JSObject.cpp:
2644         (JSC::JSObject::defineOwnProperty):
2645             - call sameValue.
2646         * runtime/PropertyDescriptor.cpp:
2647         (JSC::sameValue):
2648             - Moved from JSArray.cpp, fix NaN comparison.
2649         (JSC::PropertyDescriptor::equalTo):
2650             - call sameValue.
2651         * runtime/PropertyDescriptor.h:
2652             - Added declaration for sameValue.
2653 2012-01-09  Gavin Barraclough  <barraclough@apple.com>
2654
2655         Error handling : in ISO8601 timezone
2656         https://bugs.webkit.org/show_bug.cgi?id=75919
2657
2658         Reviewed by Sam Weinig.
2659
2660         * wtf/DateMath.cpp:
2661         (WTF::parseDateFromNullTerminatedCharacters):
2662             - need to increment the string position.
2663
2664 2012-01-09  Mark Rowe  <mrowe@apple.com>
2665
2666         JavaScriptCore executable targets shouldn't explicitly depend on the JavaScriptCore framework target
2667         <http://webkit.org/b/75907> / <rdar://problem/10659862>
2668
2669         We'd like for it to be possible to build jsc without building JavaScriptCore.framework and the explicit
2670         dependencies prevent this.
2671
2672         Reviewed by Dan Bernstein.
2673
2674         * JavaScriptCore.xcodeproj/project.pbxproj:
2675
2676 2012-01-09  Adam Treat  <atreat@rim.com>
2677
2678         Log is a little to verbose for blackberry port
2679         https://bugs.webkit.org/show_bug.cgi?id=75728
2680
2681         The BlackBerry::Platform::Log* functions take care of the call to vfprintf
2682         which is resulting in unintentional noise in our logs.  Add a conditional
2683         directive to fix.
2684
2685         Change to using BlackBerry::Platform::logStreamV which does not insert
2686         threading info and newlines unlike BlackBerry::Platform::log.
2687
2688         Finally, add log locking and unlocking which the BlackBerry platform
2689         uses to ensure that N threads do not trample on each other's logs.
2690
2691         Reviewed by Rob Buis.
2692
2693         * wtf/Assertions.cpp:
2694         (WTFLogLocker::WTFReportAssertionFailure):
2695         (WTFLogLocker::WTFReportAssertionFailureWithMessage):
2696         (WTFLogLocker::WTFReportArgumentAssertionFailure):
2697         (WTFLogLocker::WTFReportFatalError):
2698         (WTFLogLocker::WTFReportError):
2699         (WTFLogLocker::WTFLog):
2700         (WTFLogLocker::WTFLogVerbose):
2701
2702 2012-01-09  Gavin Barraclough  <barraclough@apple.com>
2703
2704         https://bugs.webkit.org/show_bug.cgi?id=75789
2705         defineOwnProperty not implemented for Array objects
2706
2707         Reviewed by Sam Weinig.
2708
2709         Implements support for getter/setter & non-default attribute properties on arrays,
2710         by forcing them into a dictionary-like 'SparseMode'. This fixes ~300 test-262
2711         test failures.
2712
2713         * JavaScriptCore.exp:
2714             - Updated exports.
2715         * dfg/DFGOperations.cpp:
2716             - JSArray::pop now requires an exec state.
2717         * runtime/ArrayPrototype.cpp:
2718         (JSC::arrayProtoFuncPop):
2719             - JSArray::pop now requires an exec state.
2720         * runtime/JSArray.cpp:
2721         (JSC::SparseArrayValueMap::add):
2722             - Add a potentially empty entry into the map.
2723         (JSC::SparseArrayValueMap::put):
2724             - Changed to call setter.
2725         (JSC::SparseArrayEntry::get):
2726             - calls getters.
2727         (JSC::SparseArrayEntry::getNonSparseMode):
2728             - does not call getters.
2729         (JSC::JSArray::enterSparseMode):
2730             - Convert into 'SparseMode' - removes the vectors, don't allow it to be recreated.
2731         (JSC::JSArray::putDescriptor):
2732             - Create a numeric property based on a descriptor.
2733         (JSC::sameValue):
2734             - See ES5.1 9.12.
2735         (JSC::reject):
2736             - Helper for the [[DefineOwnProperty]] algorithm.
2737         (JSC::JSArray::defineOwnNumericProperty):
2738             - Define an indexed property on an array object.
2739         (JSC::JSArray::setLengthWritable):
2740             - Marks the length read-only, enters SparseMode as necessary.
2741         (JSC::JSArray::defineOwnProperty):
2742             - Defines either an indexed property or 'length' on an array object.
2743         (JSC::JSArray::getOwnPropertySlotByIndex):
2744             - Updated to correctly handle accessor descriptors & attributes.
2745         (JSC::JSArray::getOwnPropertyDescriptor):
2746             - Updated to correctly handle accessor descriptors & attributes.
2747         (JSC::JSArray::put):
2748             - Pass strict mode flag to setLength.
2749         (JSC::JSArray::putByIndex):
2750             - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
2751         (JSC::JSArray::putByIndexBeyondVectorLength):
2752             - Pass exec to SparseArrayValueMap::put.
2753         (JSC::JSArray::deletePropertyByIndex):
2754             - Do not allow deletion of non-configurable properties.
2755         (JSC::compareKeysForQSort):
2756             - used in implementation of getOwnPropertyNames.
2757         (JSC::JSArray::getOwnPropertyNames):
2758             - Properties in the sparse map should be iterated in order.
2759         (JSC::JSArray::setLength):
2760             - Updated to take a 'shouldThrow' flag, return a result indicating error.
2761         (JSC::JSArray::pop):
2762             - pop should throw an error if length is not writable, even if the array is empty.
2763         (JSC::JSArray::push):
2764             - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
2765         (JSC::JSArray::sort):
2766             - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
2767         (JSC::JSArray::compactForSorting):
2768             - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
2769         * runtime/JSArray.h:
2770         (JSC::SparseArrayValueMap::lengthIsReadOnly):
2771             - Check if the length is read only.
2772         (JSC::SparseArrayValueMap::setLengthIsReadOnly):
2773             - Mark the length as read only.
2774         (JSC::SparseArrayValueMap::find):
2775             - Moved into header.
2776         (JSC::JSArray::isLengthWritable):
2777             - Wraps SparseArrayValueMap::lengthIsReadOnly.
2778         * runtime/JSObject.cpp:
2779         (JSC::JSObject::defineOwnProperty):
2780             - Should be returning the result of putDescriptor.
2781         * runtime/PropertyDescriptor.cpp:
2782         (JSC::PropertyDescriptor::attributesOverridingCurrent):
2783             - Added attributesOverridingCurrent - this should probably be merged with attributesWithOverride.
2784         * runtime/PropertyDescriptor.h:
2785             - Added attributesOverridingCurrent.
2786
2787 2012-01-09  Pavel Heimlich  <tropikhajma@gmail.com>
2788
2789         There is no support for fastcall in Solaris Studio.
2790         Fixes build on Solaris.
2791         https://bugs.webkit.org/show_bug.cgi?id=75736
2792
2793         Reviewed by Gavin Barraclough.
2794
2795         * jit/JITStubs.h:
2796
2797 2012-01-09  Pavel Heimlich  <tropikhajma@gmail.com>
2798
2799         Fix build failure on Solaris
2800         https://bugs.webkit.org/show_bug.cgi?id=75733
2801
2802         Reviewed by Gavin Barraclough.
2803
2804         * wtf/ByteArray.h:
2805
2806 2012-01-01  Raphael Kubo da Costa  <kubo@profusion.mobi>
2807
2808         [CMake] Clean up some cruft from WTF's CMakeLists.txt
2809         https://bugs.webkit.org/show_bug.cgi?id=75420
2810
2811         Reviewed by Daniel Bates.
2812
2813         * wtf/CMakeLists.txt: Remove the unused WTF_PORT_FLAGS variable; add
2814         all needed paths to WTF_INCLUDE_DIRECTORIES in a single place.
2815
2816 2012-01-08  Xianzhu Wang  <wangxianzhu@chromium.org>
2817
2818         Fix compilation error about ListHashSetReverseIterator
2819         https://bugs.webkit.org/show_bug.cgi?id=75372
2820
2821         Reviewed by Darin Adler.
2822
2823         There is a typo in class ListHashSetReverseIterator:
2824         typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
2825         Should be
2826         typedef ListHashSetConstReverseIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
2827
2828         * wtf/ListHashSet.h:
2829
2830 2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>
2831
2832         WinCE build fix after r104415.
2833
2834         * jit/JITExceptions.cpp:
2835         * jit/JITExceptions.h:
2836
2837 2012-01-08  Filip Pizlo  <fpizlo@apple.com>
2838
2839         The JIT's protocol for exception handling should be available to other parts of the system
2840         https://bugs.webkit.org/show_bug.cgi?id=75808
2841         <rdar://problem/10661025>
2842
2843         Reviewed by Oliver Hunt.
2844
2845         * CMakeLists.txt:
2846         * GNUmakefile.list.am:
2847         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2848         * JavaScriptCore.xcodeproj/project.pbxproj:
2849         * Target.pri:
2850         * jit/JITExceptions.cpp: Added.
2851         (JSC::genericThrow):
2852         (JSC::jitThrow):
2853         * jit/JITExceptions.h: Added.
2854         * jit/JITStubs.cpp:
2855         * runtime/JSGlobalData.h:
2856
2857 2012-01-06  Hajime Morrita  <morrita@chromium.org>
2858
2859         https://bugs.webkit.org/show_bug.cgi?id=75296
2860         JSString should not have JS_EXPORTCLASS annotation
2861
2862         Reviewed by Kevin Ollivier.
2863
2864         * runtime/JSString.h: Removed JS_EXPORTCLASS annotation.
2865         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2866         Added missing symbols which were hidden by JS_EXPORTCLASS.
2867
2868 2012-01-06  Michael Saboff  <msaboff@apple.com>
2869
2870         JSArray::pop() should compare SparseArrayValueMap::find() to SparseArrayValueMap::notFound()
2871         https://bugs.webkit.org/show_bug.cgi?id=75757
2872
2873         Reviewed by Gavin Barraclough.
2874
2875         * runtime/JSArray.cpp:
2876         (JSC::JSArray::pop): Changed map->end() to map->notFound().
2877
2878 2012-01-06  Filip Pizlo  <fpizlo@apple.com>
2879
2880         JIT stub slow paths that would be identical to that of an interpreter should be factored out
2881         https://bugs.webkit.org/show_bug.cgi?id=75743
2882         <rdar://problem/10657024>
2883
2884         Reviewed by Geoff Garen.
2885
2886         * GNUmakefile.list.am:
2887         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2888         * JavaScriptCore.xcodeproj/project.pbxproj:
2889         * jit/JITStubs.cpp:
2890         (JSC::DEFINE_STUB_FUNCTION):
2891         * runtime/CommonSlowPaths.h: Added.
2892         (JSC::CommonSlowPaths::opInstanceOfSlow):
2893         (JSC::CommonSlowPaths::opIn):
2894         (JSC::CommonSlowPaths::opResolve):
2895         (JSC::CommonSlowPaths::opResolveSkip):
2896         (JSC::CommonSlowPaths::opResolveWithBase):
2897         (JSC::CommonSlowPaths::opResolveWithThis):
2898
2899 2012-01-06  Sam Weinig  <sam@webkit.org>
2900
2901         Fix windows build.
2902
2903         * wtf/TypeTraits.cpp:
2904
2905 2012-01-05  Michael Saboff  <msaboff@apple.com>
2906
2907         Default HashTraits for Opcode don't work for Opcode = 0
2908         https://bugs.webkit.org/show_bug.cgi?id=75595
2909
2910         Reviewed by Oliver Hunt.
2911
2912         Removed the populating of the m_opcodeIDTable table in the
2913         case where the OpcodeID and Opcode are the same (m_enabled is false).
2914         Instead we just cast the one type to the other.
2915
2916         * interpreter/Interpreter.cpp:
2917         (JSC::Interpreter::initialize):
2918         (JSC::Interpreter::isOpcode):
2919         * interpreter/Interpreter.h:
2920         (JSC::Interpreter::getOpcodeID):
2921
2922 2012-01-06  Sam Weinig  <sam@webkit.org>
2923
2924         Add a DecayArray type trait as a first step towards merging OwnPtr and OwnArrayPtr
2925         https://bugs.webkit.org/show_bug.cgi?id=75737
2926
2927         Reviewed by Anders Carlsson.
2928
2929         * wtf/TypeTraits.cpp:
2930         * wtf/TypeTraits.h:
2931         Added a DecayArray trait, that can convert T[] and T[3] -> T*. DecayArray
2932         is composed of some helpers which are also exposed, Conditional<>, which
2933         can provide one type or another based on a boolean predicate, IsArray<>
2934         which can deduce array types, and RemoveExtent<>, which removes the extent
2935         from an array type. 
2936
2937 2012-01-06  Oliver Hunt  <oliver@apple.com>
2938
2939         GetByteArrayLength is incorrect
2940         https://bugs.webkit.org/show_bug.cgi?id=75735
2941
2942         Reviewed by Filip Pizlo.
2943
2944         Load the byte array length from the correct location.
2945         This stops an existing test from hanging.
2946
2947         * dfg/DFGSpeculativeJIT32_64.cpp:
2948         (JSC::DFG::SpeculativeJIT::compile):
2949         * dfg/DFGSpeculativeJIT64.cpp:
2950         (JSC::DFG::SpeculativeJIT::compile):
2951
2952 2012-01-06  Filip Pizlo  <fpizlo@apple.com>
2953
2954         Fix build.
2955
2956         * JavaScriptCore.xcodeproj/project.pbxproj:
2957
2958 2012-01-06  Oliver Hunt  <oliver@apple.com>
2959
2960         DFG no longer optimises CanvasPixelArray
2961         https://bugs.webkit.org/show_bug.cgi?id=75729
2962
2963         Reviewed by Gavin Barraclough.
2964
2965         Rename ByteArray (in its ClassInfo) to Uint8ClampedArray to match
2966         the future name when we switch over to the new typed-array based
2967         ImageData specification.
2968
2969         * runtime/JSByteArray.cpp:
2970
2971 2012-01-06  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
2972
2973         Use HashMap<OwnPtr> for SourceProviderCache items
2974         https://bugs.webkit.org/show_bug.cgi?id=75346
2975
2976         Reviewed by Daniel Bates.
2977
2978         * parser/Parser.cpp:
2979         * parser/SourceProviderCache.cpp:
2980         (JSC::SourceProviderCache::clear):
2981         (JSC::SourceProviderCache::add):
2982         * parser/SourceProviderCache.h:
2983
2984 2012-01-06  Sam Weinig  <sam@webkit.org>
2985
2986         Remove unused OwnFastMallocPtr class.
2987         https://bugs.webkit.org/show_bug.cgi?id=75722
2988
2989         Reviewed by Geoffrey Garen.
2990
2991         * GNUmakefile.list.am:
2992         * JavaScriptCore.gypi:
2993         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2994         * JavaScriptCore.xcodeproj/project.pbxproj:
2995         * wtf/CMakeLists.txt:
2996         * wtf/OwnFastMallocPtr.h: Removed.
2997         * wtf/text/StringImpl.h:
2998         * wtf/wtf.pro:
2999
3000 2012-01-06  Benjamin Poulain  <bpoulain@webkit.org>
3001
3002         [Mac] Sort the resources of JavaScriptCore.xcodeproj and remove duplicates
3003         https://bugs.webkit.org/show_bug.cgi?id=75631
3004
3005         Reviewed by Andreas Kling.
3006
3007         * JavaScriptCore.xcodeproj/project.pbxproj:
3008
3009 2012-01-06  Eric Seidel  <eric@webkit.org> and Gustavo Noronha Silva  <gustavo.noronha@collabora.com>
3010
3011         Make the new WTF module build on Gtk
3012         https://bugs.webkit.org/show_bug.cgi?id=75669
3013
3014         * GNUmakefile.am:
3015
3016 2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
3017
3018         [Qt] Remove un-needed VPATHs from project includes
3019
3020         Reviewed by Simon Hausmann.
3021
3022         * JavaScriptCore.pri:
3023         * wtf/wtf.pri:
3024
3025 2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
3026
3027         [Qt] Move listing of include paths and libs to pri files in sources
3028
3029         Includepaths are sometimes modified by non-Qt contributors so keeping
3030         them in files inside Sources makes it more likely that they are updated
3031         along with project files for the other ports.
3032
3033         Using pri files instead of prf files for this also has the benefit that
3034         the include() from the main target file can be parsed and followed by
3035         Qt Creator -- something that does not work with load().
3036
3037         Dependency from a target to a library through the WEBKIT variable are
3038         handled through forwarding-files in Tools/qmake/mkspecs/modules, which
3039         set the source root of the module and include the right pri file.
3040
3041         Ideally we'd use the variant of include() that takes an optional
3042         namespace to read the variables into, or the fromfile() function,
3043         but both of these add an overhead of about 40% on the total qmake
3044         runtime, due to making a deep copy of all the variables in the
3045         project or re-reading all the prf files from scratch.
3046
3047         Reviewed by Simon Hausmann.
3048         Reviewed by Ossy.
3049
3050         * JavaScriptCore.pri: Renamed from Tools/qmake/mkspecs/features/javascriptcore.prf.
3051         * Target.pri:
3052         * wtf/wtf.pri: Renamed from Tools/qmake/mkspecs/features/wtf.prf.
3053         * wtf/wtf.pro:
3054
3055 2012-01-06  Hajime Morrita  <morrita@chromium.org>
3056
3057         WTF::String: Inline method shouldn't have WTF_EXPORT_PRIVATE
3058         https://bugs.webkit.org/show_bug.cgi?id=75612
3059
3060         Reviewed by Kevin Ollivier.
3061
3062         * wtf/text/WTFString.h:
3063         (WTF::String::findIgnoringCase):
3064         (WTF::String::append):
3065         (WTF::String::fromUTF8):
3066         (WTF::String::fromUTF8WithLatin1Fallback):
3067         (WTF::String::isHashTableDeletedValue):
3068
3069 2012-01-05  Dan Bernstein  <mitz@apple.com>
3070
3071         <rdar://problem/10633760> Update copyright strings
3072
3073         Reviewed by Mark Rowe.
3074
3075         * Info.plist:
3076
3077 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3078
3079         Date constructor handles infinite values incorrectly.
3080         https://bugs.webkit.org/show_bug.cgi?id=70998
3081
3082         Reviewed by Filip Pizlo.
3083
3084         * runtime/DateConstructor.cpp:
3085         (JSC::constructDate):
3086             - should be checking !finite rather then isnan.
3087
3088 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3089
3090         date.toISOString produces incorrect results for dates with ms prior to 1970
3091         https://bugs.webkit.org/show_bug.cgi?id=75684
3092
3093         Reviewed by Sam Weinig.
3094
3095         * runtime/DatePrototype.cpp:
3096         (JSC::dateProtoFuncToISOString):
3097
3098 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3099
3100         Array.prototype.lastIndexOf ignores undefined fromIndex.
3101         https://bugs.webkit.org/show_bug.cgi?id=75678
3102
3103         Reviewed by Sam Weinig.
3104
3105         array.lastIndexOf(x, undefined) is equivalent to array.lastIndexOf(x, 0), not array.lastIndexOf(x)
3106
3107         * runtime/ArrayPrototype.cpp:
3108         (JSC::arrayProtoFuncLastIndexOf):
3109             - should check argumnet count, rather than checking agument value for undefined.
3110
3111 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3112
3113         Date parsing is too restrictive.
3114         https://bugs.webkit.org/show_bug.cgi?id=75671
3115
3116         Reviewed by Oliver Hunt.
3117
3118         ES5 date parsing currently requires all fields to be present, which does not match the spec (ES5.1 15.9.1.15).
3119         The spec allow a date to be date only, or date + time.
3120
3121         The date portion on the should match: (pseudocode!:)
3122             [(+|-)YY]YYYY[-MM[-DD]]
3123         though we are slightly more liberal (permitted by the spec), allowing:
3124             [+|-]Y+[-MM[-DD]]
3125         The time portion should match:
3126             THH:mm[:ss[.sss]][Z|(+|-)HH:mm]
3127         again we're slightly more liberal, allowing:
3128             THH:mm[:ss[.s+]][Z|(+|-)HH:mm]
3129
3130         * wtf/DateMath.cpp:
3131         (WTF::parseES5DatePortion):
3132             - Month/day fields are optional, default to 01.
3133         (WTF::parseES5TimePortion):
3134             - Hours/Minutes are requires, seconds/timezone are optional.
3135         (WTF::parseES5DateFromNullTerminatedCharacters):
3136             - Dates may be date only, or date + time.
3137
3138 2012-01-05  Bruno Dilly  <bdilly@profusion.mobi>
3139
3140         [EFL] Undefined references to ICU_I18N symbols on WTF
3141         https://bugs.webkit.org/show_bug.cgi?id=75642
3142
3143         Unreviewed build fix.
3144
3145         Add ${ICU_I18N_LIBRARIES} to WTF_LIBRARIES on wtf efl platform cmake.
3146         Some undefined references were ucol_setAttribute_44, ucol_close_44,
3147         ucol_getAttribute_44...
3148
3149         * wtf/PlatformEfl.cmake:
3150
3151 2012-01-05  Geoffrey Garen  <ggaren@apple.com>
3152
3153         Refined the fast path for StringImpl::hash()
3154         https://bugs.webkit.org/show_bug.cgi?id=75178
3155
3156         Reviewed by Darin Adler.
3157
3158         Moved the hash calculation code into an out-of-line function to clean up
3159         the hot path.
3160
3161         No measurable benchmark change, but this knocks some samples off in
3162         Instruments, and I think this is a step toward removing -fomit-frame-pointer.
3163         
3164         * wtf/text/StringImpl.cpp:
3165         (WTF::StringImpl::hashSlowCase):
3166         * wtf/text/StringImpl.h:
3167         (WTF::StringImpl::hash): The patch.
3168
3169         * wtf/text/StringStatics.cpp:
3170         (WTF::StringImpl::hashSlowCase): Abide by the cockamamie Windows build
3171         scheme, which requires all out-of-line StringImpl functions used by
3172         WebCore be defined in this file instead of StringImpl.cpp. (See http://trac.webkit.org/changeset/59187.)
3173
3174 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3175
3176         Literal tab in JSONString fails
3177         https://bugs.webkit.org/show_bug.cgi?id=71772
3178
3179         Reviewed by Oliver Hunt.
3180
3181         rfc4627 does not allow literal tab characters in JSON source.
3182
3183         * runtime/LiteralParser.cpp:
3184         (JSC::isSafeStringCharacter):
3185             - do not allow literal tab in StrictJSON mode.
3186
3187 2012-01-05  Gavin Barraclough  <barraclough@apple.com>
3188
3189         push/shift fifo may consume excessive memory
3190         https://bugs.webkit.org/show_bug.cgi?id=75610
3191
3192         Reviewed by Sam Weinig.
3193
3194         Array object commonly store data in a vector, consisting of a portion that is
3195         in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
3196         m_length and m_vectorLength). Calls to shift with grow the pre-capacity, and
3197         the current algorithm for increaseVectorLength (used by push, or [[Put]]) will
3198         never shrink the pre-capacity, so a push/shift fifo may consume an inordinate
3199         amount of memory, whilst having a relatively small active length.
3200
3201         * runtime/JSArray.cpp:
3202         (JSC::JSArray::increaseVectorLength):
3203             - If m_indexBias is non-zero, decay it over time.
3204
3205 2012-01-05  Csaba Osztrogonác  <ossy@webkit.org>
3206
3207         unshift/pop fifo may consume excessive memory
3208         https://bugs.webkit.org/show_bug.cgi?id=75588
3209
3210         Reviewed by Zoltan Herczeg.
3211
3212         Buildfix after r104120.
3213
3214         * runtime/JSArray.cpp: Remove useless asserts, baecause unsigned expression >= 0 is always true
3215         (JSC::JSArray::unshiftCount):
3216
3217 2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>
3218
3219         Unreviewed gardening after r104134.
3220
3221         * wtf/Assertions.cpp:
3222
3223 2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>
3224
3225         Unreviewed gardening after r75605.
3226
3227         Rubber stamped by NOBODY Csaba Osztrogonác.
3228
3229         * wtf/Assertions.cpp:
3230
3231 2012-01-05  Benjamin Poulain  <benjamin@webkit.org>
3232
3233         Improve charactersAreAllASCII() to compare multiple characters at a time
3234         https://bugs.webkit.org/show_bug.cgi?id=74063
3235
3236         Reviewed by Darin Adler.
3237
3238         A new header ASCIIFastPath.h contains the functions related to
3239         the detection of ASCII by using machine words. Part of it comes from
3240         WebCore's TextCodecASCIIFastPath.h.
3241
3242         The function charactersAreAllASCII() is moved to TextCodecASCIIFastPath.h
3243         and is implemented with computer word comparison.
3244         The gain over the previous implementation of charactersAreAllASCII() is of
3245         the order of how many comparison are avoided (4x, 8x, 16x depending on the
3246         format and the CPU type).
3247
3248         * GNUmakefile.list.am:
3249         * JavaScriptCore.gypi:
3250         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3251         * JavaScriptCore.xcodeproj/project.pbxproj:
3252         * wtf/text/ASCIIFastPath.h: Added.
3253         (WTF::isAlignedToMachineWord):
3254         (WTF::alignToMachineWord):
3255         (WTF::isAllASCII):
3256         (WTF::charactersAreAllASCII):
3257         * wtf/text/WTFString.h:
3258         * wtf/wtf.pro:
3259
3260 2012-01-05  Mark Rowe  <mrowe@apple.com>
3261
3262         <http://webkit.org/b/75606> [Mac] WTF logging functions should output to both stderr and ASL
3263
3264         We should always log to both ASL and stderr on platforms where this won't result in launchd
3265         duplicating the messages.
3266
3267         Reviewed by Dan Bernstein.
3268
3269         * wtf/Assertions.cpp:
3270         (vprintf_stderr_common):
3271
3272 2012-01-05  Mark Rowe  <mrowe@apple.com>
3273
3274         <http://webkit.org/b/75605> WTF logging functions should call vprintf_stderr_common only once per line
3275
3276         Several of the WTF logging functions make multiple calls to vprintf_stderr_common to output a
3277         single line of text. This results in strangely formatted output if vprintf_stderr_common is
3278         retargeted to an output device that is message-oriented (such as ASL) rather than stream-oriented
3279         like stderr.
3280
3281         Reviewed by Dan Bernstein.
3282
3283         * wtf/Assertions.cpp:
3284         (vprintf_stderr_with_prefix): Helper function to prepend a given prefix on to the given format
3285         string before handing it off to vprintf_stderr_common. This requires disabling warnings about
3286         calling a printf-like function with a non-literal format string for this piece of code. It's
3287         safe in this particular case as vprintf_stderr_with_prefix is only ever given a literal prefix.
3288         (vprintf_stderr_with_trailing_newline): Helper function to append a trailling newline on to the
3289         given format string if one does not already exist. It requires the same treatment with regards
3290         to the non-literal format string warning.
3291         (WTFReportAssertionFailureWithMessage): Switch to using vprintf_stderr_with_prefix.
3292         (WTFReportBacktrace): Switch from calling fprintf directly to using fprintf_stderr_common.
3293         (WTFReportFatalError): Switch to using vprintf_stderr_with_prefix.
3294         (WTFReportError): Ditto.
3295         (WTFLog): Switch to using vprintf_stderr_with_trailing_newline.
3296         (WTFLogVerbose): Ditto.
3297
3298 2012-01-04  Gavin Barraclough  <barraclough@apple.com>
3299
3300         unshift/pop fifo may consume excessive memory
3301         https://bugs.webkit.org/show_bug.cgi?id=75588
3302
3303         Reviewed by Sam Weinig.
3304
3305         The Array object commonly store data in a vector, consisting of a portion that
3306         is in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
3307         m_length and m_vectorLength). Calls to pop with grow the post-capacity, and the
3308         current algorithm for increasePrefixVectorLength (used by unshift) will never
3309         stink the post-capacity, so a unshift/pop fifo may consume an inordinate amount
3310         of memory, whilst having a relatively small active length.
3311
3312         * runtime/JSArray.cpp:
3313         (JSC::storageSize):
3314             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
3315         (JSC::SparseArrayValueMap::put):
3316             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
3317         (JSC::JSArray::increaseVectorLength):
3318             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
3319         (JSC::JSArray::unshiftCountSlowCase):
3320             - renamed from increaseVectorPrefixLength (this was a bad name, since it
3321               also moved the ArrayStorage header), rewritten.
3322         (JSC::JSArray::shiftCount):
3323             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned
3324         (JSC::JSArray::unshiftCount):
3325             - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned,
3326               increaseVectorPrefixLength renamed to unshiftCountSlowCase
3327         (JSC::JSArray::sortNumeric):
3328         * runtime/JSArray.h:
3329             - Updated function declarations, m_indexBias should be unsigned.
3330
3331 2012-01-04  Mark Rowe  <mrowe@apple.com>
3332
3333         <http://webkit.org/b/75604> All instances of JSC::ArgumentsData appear to be leaked by JSC::Arguments
3334
3335         Since JSC::Arguments has an OwnPtr for a member it needs to override destroy
3336         to ensure that the correct destructor is invoked. This is necessary because
3337         JSCell subclasses all intentionally have non-virtual destructors.
3338
3339         Reviewed by Filip Pizlo.
3340
3341         * runtime/Arguments.cpp:
3342         (JSC::Arguments::destroy):
3343         * runtime/Arguments.h:
3344
3345 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
3346
3347         Unreviewed, accidentally turned off the JIT in previous commit. Turning
3348         it back on.
3349
3350         * wtf/Platform.h:
3351
3352 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
3353
3354         Changed "return" to "break" in some macrology I introduced in
3355         http://trac.webkit.org/changeset/104086. This is a benign change, as
3356         "return" was technically correct for all uses of the macro.
3357
3358         Reviewed by Oliver Hunt.
3359
3360         * dfg/DFGGraph.cpp:
3361         * wtf/Platform.h:
3362
3363 2012-01-04  Michael Saboff  <msaboff@apple.com>
3364
3365         StructureStubInfo not reset when corresponding MethodCallLinkInfo is reset
3366         https://bugs.webkit.org/show_bug.cgi?id=75583
3367
3368         Reviewed by Filip Pizlo.
3369
3370         * bytecode/CodeBlock.cpp:
3371         (JSC::CodeBlock::finalizeUnconditionally): Find the corresponding
3372         StructureStubInfo and reset the appropriate JIT and
3373         the StructureStubInfo itself when reseting a MethodCallLinkInfo.
3374
3375 2012-01-04  Michael Saboff  <msaboff@apple.com>
3376
3377         Invalid ASSERT() in DFGRepatch.cpp near line 385
3378         https://bugs.webkit.org/show_bug.cgi?id=75584
3379
3380         Reviewed by Filip Pizlo.
3381
3382         * dfg/DFGRepatch.cpp:
3383         (JSC::DFG::tryBuildGetByIDProtoList): Fixed ASSERT to use ==.
3384
3385 2012-01-04  Filip Pizlo  <fpizlo@apple.com>
3386
3387         Incorrect use of DFG node reference counts when mutating the graph
3388         https://bugs.webkit.org/show_bug.cgi?id=75580
3389         <rdar://problem/10644607>
3390
3391         Reviewed by Oliver Hunt.
3392         
3393         Made deref(node) follow the pattern of ref(node), which it should have
3394         to begin with.
3395
3396         * dfg/DFGGraph.cpp:
3397         (JSC::DFG::Graph::refChildren):
3398         (JSC::DFG::Graph::derefChildren):
3399         * dfg/DFGGraph.h:
3400         (JSC::DFG::Graph::deref):
3401         (JSC::DFG::Graph::clearAndDerefChild1):
3402         (JSC::DFG::Graph::clearAndDerefChild2):
3403         (JSC::DFG::Graph::clearAndDerefChild3):
3404         * dfg/DFGNode.h:
3405         (JSC::DFG::Node::deref):
3406         * dfg/DFGPropagator.cpp:
3407         (JSC::DFG::Propagator::fixupNode):
3408
3409 2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
3410
3411         [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies
3412
3413         The custom qmake variable 'WEBKIT' is used for signaling that a
3414         target depends in some way on other subproject of the WebKit
3415         project. For now this is limited to the set of intermediate
3416         librarie