[CMAKE] Use *bin* and *lib* directories for executable and libraries.
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
2
3         [CMAKE] Use *bin* and *lib* directories for executable and libraries.
4         https://bugs.webkit.org/show_bug.cgi?id=77928
5
6         Reviewed by Daniel Bates.
7
8         CMake has used *Programs* directory for executable. In addition, shared libraries are being
9         built in source directory. It is better to set common places in order to maintain executable
10         and libraries. *bin* is for executable and *lib* is for library.
11
12         * shell/CMakeLists.txt: Change *Programs* with *bin*.
13
14 2012-02-07  Gavin Barraclough  <barraclough@apple.com>
15
16         Crash on http://www.rickshawbags.com/
17         https://bugs.webkit.org/show_bug.cgi?id=78045
18
19         Reviewed by Darin Adler.
20
21         Problem URL is: http://www.rickshawbags.com/customize/custom-bag#!thl=rickshaw/bag()
22         
23         This is a bug introduced by https://bugs.webkit.org/show_bug.cgi?id=71933,
24         isVariableObject() checks were excluding StaticScopeObjects, this patch
25         inadvertently changed them to be included.
26
27         * runtime/JSType.h:
28             - sort JSType enum such that StaticScopeObjectType comes before VariableObjectType,
29               and thus is excluded from isVariableObject() checks.
30
31 2012-02-06  Jer Noble  <jer.noble@apple.com>
32
33         Use CMClock as a timing source for PlatformClock where available.
34         https://bugs.webkit.org/show_bug.cgi?id=77885
35
36         Reviewed by Eric Carlson.
37
38         * wtf/Platform.h: Added WTF_USE_COREMEDIA.
39
40 2012-02-06  Filip Pizlo  <fpizlo@apple.com>
41
42         ValueToNumber and ValueToDouble nodes don't do anything and should be removed
43         https://bugs.webkit.org/show_bug.cgi?id=77855
44         <rdar://problem/10811325>
45
46         Reviewed by Gavin Barraclough.
47         
48         Removed ValueToNumber and ValueToDouble, because the only thing they were doing
49         was wasting registers.
50         
51         This looks like a 1% win on V8 (with a 5% win on crypto) and a 2-3% win on Kraken,
52         mostly due to a >10% win on gaussian-blur. No win anywhere else.
53
54         * dfg/DFGAbstractState.cpp:
55         (JSC::DFG::AbstractState::execute):
56         * dfg/DFGByteCodeParser.cpp:
57         (JSC::DFG::ByteCodeParser::getToInt32):
58         (ByteCodeParser):
59         (JSC::DFG::ByteCodeParser::handleMinMax):
60         (JSC::DFG::ByteCodeParser::handleIntrinsic):
61         (JSC::DFG::ByteCodeParser::parseBlock):
62         * dfg/DFGNode.h:
63         (DFG):
64         (JSC::DFG::Node::hasArithNodeFlags):
65         * dfg/DFGPropagator.cpp:
66         (JSC::DFG::Propagator::propagateArithNodeFlags):
67         (JSC::DFG::Propagator::propagateNodePredictions):
68         (JSC::DFG::Propagator::vote):
69         (JSC::DFG::Propagator::doRoundOfDoubleVoting):
70         (Propagator):
71         (JSC::DFG::Propagator::fixupNode):
72         (JSC::DFG::Propagator::canonicalize):
73         * dfg/DFGSpeculativeJIT.cpp:
74         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
75         * dfg/DFGSpeculativeJIT32_64.cpp:
76         (JSC::DFG::SpeculativeJIT::compile):
77         * dfg/DFGSpeculativeJIT64.cpp:
78         (JSC::DFG::SpeculativeJIT::compile):
79
80 2012-02-06  Patrick Gansterer  <paroga@webkit.org>
81
82         Unreviewed WinCE build fix after r106197.
83
84         * tools/CodeProfiling.cpp:
85         (JSC::CodeProfiling::notifyAllocator): getenv() isn't supported by WinCE. Don't call it.
86
87 2012-02-05  Gavin Barraclough  <barraclough@apple.com>
88
89         Remove JSObject defineGetter/defineSetter lookupGetter/lookupSetter
90         https://bugs.webkit.org/show_bug.cgi?id=77451
91
92         Reviewed by Sam Weinig.
93
94         These can now all be implemented in terms of defineOwnProperty & getPropertyDescriptor.
95         Also remove initializeGetterSetterProperty, since this is equivalent to putDirectAccessor.
96
97         * JavaScriptCore.exp:
98         * debugger/DebuggerActivation.cpp:
99         (JSC::DebuggerActivation::defineOwnProperty):
100         * debugger/DebuggerActivation.h:
101         (DebuggerActivation):
102         * runtime/ClassInfo.h:
103         (MethodTable):
104         (JSC):
105         * runtime/JSBoundFunction.cpp:
106         (JSC::JSBoundFunction::finishCreation):
107         * runtime/JSCell.cpp:
108         (JSC):
109         * runtime/JSCell.h:
110         (JSCell):
111         * runtime/JSFunction.cpp:
112         (JSC::JSFunction::getOwnPropertySlot):
113         (JSC::JSFunction::getOwnPropertyDescriptor):
114         * runtime/JSGlobalObject.cpp:
115         (JSC::JSGlobalObject::defineOwnProperty):
116         (JSC):
117         * runtime/JSGlobalObject.h:
118         (JSGlobalObject):
119         * runtime/JSObject.cpp:
120         (JSC):
121         * runtime/JSObject.h:
122         (JSObject):
123         * runtime/ObjectPrototype.cpp:
124         (JSC::objectProtoFuncDefineGetter):
125         (JSC::objectProtoFuncDefineSetter):
126         (JSC::objectProtoFuncLookupGetter):
127         (JSC::objectProtoFuncLookupSetter):
128
129 2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>
130
131         Unreviewed. Fix make distcheck.
132
133         * GNUmakefile.list.am: Add missing files.
134
135 2012-02-05  Filip Pizlo  <fpizlo@apple.com>
136
137         DFG's child references from one node to another should have room for type information
138         https://bugs.webkit.org/show_bug.cgi?id=77797
139
140         Reviewed by Oliver Hunt.
141         
142         The DFG::Node::child fields now contain both a DFG::NodeIndex (which is just an unsigned)
143         and a DFG::UseKind (which is currently an effectively empty enum). They are encapsulated
144         together as a DFG::NodeUse, which can in most cases still be used as an index (for
145         example DFG::Graph, AbstractState, and SpeculativeJIT all accept NodeUse in most places
146         where they really want a NodeIndex).
147         
148         The NodeUse stores both the index and the UseKind without bloating the memory usage of
149         DFG::Node, since we really don't need full 32 bits for the NodeIndex (a DFG::Node is
150         roughly 11 words, so if we assume that we never want to use more than 1GB to DFG compile
151         something - likely a sensible assumption! - then we will only be able to have room for
152         about 24 million nodes, which means we only need about 24.5 bits for the node index).
153         Currently the DFG::NodeUse allocates 4 bits for the UseKind and 28 bits for the index,
154         but stores the index as a signed number to make NoNode work naturally. Hence we really
155         just have 27 bits for the index.
156         
157         This is performance-neutral on all benchmarks we track.
158
159         * JavaScriptCore.xcodeproj/project.pbxproj:
160         * dfg/DFGAbstractState.h:
161         (JSC::DFG::AbstractState::forNode):
162         (AbstractState):
163         * dfg/DFGByteCodeParser.cpp:
164         (JSC::DFG::ByteCodeParser::getLocal):
165         (JSC::DFG::ByteCodeParser::getArgument):
166         (JSC::DFG::ByteCodeParser::toInt32):
167         (JSC::DFG::ByteCodeParser::addVarArgChild):
168         (JSC::DFG::ByteCodeParser::processPhiStack):
169         * dfg/DFGCommon.h:
170         * dfg/DFGGraph.cpp:
171         (JSC::DFG::Graph::dump):
172         (DFG):
173         * dfg/DFGGraph.h:
174         (Graph):
175         (JSC::DFG::Graph::operator[]):
176         (JSC::DFG::Graph::at):
177         (JSC::DFG::Graph::ref):
178         (JSC::DFG::Graph::deref):
179         (JSC::DFG::Graph::clearAndDerefChild1):
180         (JSC::DFG::Graph::clearAndDerefChild2):
181         (JSC::DFG::Graph::clearAndDerefChild3):
182         * dfg/DFGJITCompiler.h:
183         (JSC::DFG::JITCompiler::getPrediction):
184         * dfg/DFGNode.h:
185         (JSC::DFG::Node::Node):
186         (JSC::DFG::Node::child1):
187         (JSC::DFG::Node::child1Unchecked):
188         (JSC::DFG::Node::child2):
189         (JSC::DFG::Node::child3):
190         (JSC::DFG::Node::firstChild):
191         (JSC::DFG::Node::numChildren):
192         (JSC::DFG::Node::dumpChildren):
193         (Node):
194         * dfg/DFGNodeReferenceBlob.h: Added.
195         (DFG):
196         (NodeReferenceBlob):
197         (JSC::DFG::NodeReferenceBlob::NodeReferenceBlob):
198         (JSC::DFG::NodeReferenceBlob::child):
199         (JSC::DFG::NodeReferenceBlob::child1):
200         (JSC::DFG::NodeReferenceBlob::child2):
201         (JSC::DFG::NodeReferenceBlob::child3):
202         (JSC::DFG::NodeReferenceBlob::child1Unchecked):
203         (JSC::DFG::NodeReferenceBlob::initialize):
204         (JSC::DFG::NodeReferenceBlob::firstChild):
205         (JSC::DFG::NodeReferenceBlob::setFirstChild):
206         (JSC::DFG::NodeReferenceBlob::numChildren):
207         (JSC::DFG::NodeReferenceBlob::setNumChildren):
208         * dfg/DFGNodeUse.h: Added.
209         (DFG):
210         (NodeUse):
211         (JSC::DFG::NodeUse::NodeUse):
212         (JSC::DFG::NodeUse::indexUnchecked):
213         (JSC::DFG::NodeUse::index):
214         (JSC::DFG::NodeUse::setIndex):
215         (JSC::DFG::NodeUse::useKind):
216         (JSC::DFG::NodeUse::setUseKind):
217         (JSC::DFG::NodeUse::isSet):
218         (JSC::DFG::NodeUse::operator!):
219         (JSC::DFG::NodeUse::operator==):
220         (JSC::DFG::NodeUse::operator!=):
221         (JSC::DFG::NodeUse::shift):
222         (JSC::DFG::NodeUse::makeWord):
223         (JSC::DFG::operator==):
224         (JSC::DFG::operator!=):
225         * dfg/DFGPropagator.cpp:
226         (JSC::DFG::Propagator::propagateArithNodeFlags):
227         (JSC::DFG::Propagator::vote):
228         (JSC::DFG::Propagator::toDouble):
229         (JSC::DFG::Propagator::fixupNode):
230         (JSC::DFG::Propagator::canonicalize):
231         (JSC::DFG::Propagator::startIndex):
232         (JSC::DFG::Propagator::globalVarLoadElimination):
233         (JSC::DFG::Propagator::getByValLoadElimination):
234         (JSC::DFG::Propagator::getByOffsetLoadElimination):
235         (JSC::DFG::Propagator::performSubstitution):
236         (JSC::DFG::Propagator::performNodeCSE):
237         * dfg/DFGScoreBoard.h:
238         (JSC::DFG::ScoreBoard::use):
239         * dfg/DFGSpeculativeJIT.cpp:
240         (JSC::DFG::SpeculativeJIT::useChildren):
241         (JSC::DFG::SpeculativeJIT::writeBarrier):
242         (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
243         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
244         (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
245         (JSC::DFG::SpeculativeJIT::compileMovHint):
246         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
247         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
248         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
249         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
250         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
251         (JSC::DFG::SpeculativeJIT::compileAdd):
252         (JSC::DFG::SpeculativeJIT::compileArithSub):
253         (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
254         (JSC::DFG::SpeculativeJIT::compileStrictEq):
255         * dfg/DFGSpeculativeJIT.h:
256         (JSC::DFG::SpeculativeJIT::at):
257         (JSC::DFG::SpeculativeJIT::canReuse):
258         (JSC::DFG::SpeculativeJIT::use):
259         (SpeculativeJIT):
260         (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
261         (JSC::DFG::SpeculativeJIT::speculationCheck):
262         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
263         (JSC::DFG::IntegerOperand::IntegerOperand):
264         (JSC::DFG::DoubleOperand::DoubleOperand):
265         (JSC::DFG::JSValueOperand::JSValueOperand):
266         (JSC::DFG::StorageOperand::StorageOperand):
267         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
268         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
269         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
270         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
271         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
272         * dfg/DFGSpeculativeJIT32_64.cpp:
273         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
274         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
275         (JSC::DFG::SpeculativeJIT::cachedPutById):
276         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
277         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
278         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
279         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
280         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
281         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
282         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
283         (JSC::DFG::SpeculativeJIT::emitCall):
284         (JSC::DFG::SpeculativeJIT::compileValueAdd):
285         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
286         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
287         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
288         (JSC::DFG::SpeculativeJIT::emitBranch):
289         (JSC::DFG::SpeculativeJIT::compile):
290         * dfg/DFGSpeculativeJIT64.cpp:
291         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
292         (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
293         (JSC::DFG::SpeculativeJIT::cachedPutById):
294         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
295         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
296         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
297         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
298         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
299         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
300         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
301         (JSC::DFG::SpeculativeJIT::emitCall):
302         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
303         (JSC::DFG::SpeculativeJIT::compileValueAdd):
304         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
305         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
306         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
307         (JSC::DFG::SpeculativeJIT::emitBranch):
308         (JSC::DFG::SpeculativeJIT::compile):
309
310 2012-02-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
311
312         [CMAKE] Support javascriptcore test for EFL port. 
313         https://bugs.webkit.org/show_bug.cgi?id=77425
314
315         Reviewed by Daniel Bates.
316
317         Efl and WinCE as well as Blackberry port are now using Cmake as its build system
318         and they are share the make file to create jsc excutable. In order to run
319         "run-javascriptcore-tests", EFL port needs to change jsc installation configuration
320         with executable output directory(e.g. Programs). So, this patch change jsc installation
321         configuration only for EFL port.
322
323         * shell/CMakeLists.txt:
324
325 2012-02-04  Gavin Barraclough  <barraclough@apple.com>
326
327         Rubber stamped by Sam Weinig.
328
329         * yarr/YarrPattern.cpp:
330         (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
331             - Fix comment.
332
333 2012-02-04  Kalev Lember  <kalevlember@gmail.com>
334
335         [GTK] CurrentTime: Reorder headers for win32
336         https://bugs.webkit.org/show_bug.cgi?id=77808
337
338         Reviewed by Martin Robinson.
339
340         In GTK+ win32 port, monotonicallyIncreasingTime() implementation is
341         based on g_get_monotonic_time(). Reorder headers to make sure glib.h
342         gets included even when the platform is win32.
343
344         CurrentTime.cpp: In function 'double WTF::monotonicallyIncreasingTime()':
345         CurrentTime.cpp:321:53: error: 'g_get_monotonic_time' was not declared in this scope
346         CurrentTime.cpp:322:1: warning: control reaches end of non-void function [-Wreturn-type]
347
348         * wtf/CurrentTime.cpp:
349
350 2012-02-03  Anders Carlsson  <andersca@apple.com>
351
352         Prefix the typedef in WTF_MAKE_FAST_ALLOCATED with underscores
353         https://bugs.webkit.org/show_bug.cgi?id=77788
354
355         Reviewed by Andreas Kling.
356
357         The current typedef name, 'ThisIsHereToForceASemicolonAfterThisMacro', shows up when trying to 
358         code-complete 'this' in Xcode. Prefix the typedef with two underscores to stop this from happening.
359
360         * wtf/FastAllocBase.h:
361
362 2012-02-03  Rob Buis  <rbuis@rim.com>
363
364         Fix alignment warnings in ARMv7
365         https://bugs.webkit.org/show_bug.cgi?id=55368
366
367         Reviewed by Filip Pizlo.
368
369         Use reinterpret_cast_ptr and static_cast to get rid of alignment issues in ARMv7 code.
370
371         * heap/HandleTypes.h:
372         (JSC::HandleTypes::getFromSlot):
373         * heap/MarkedBlock.cpp:
374         (JSC::MarkedBlock::specializedSweep):
375         * heap/MarkedBlock.h:
376         (JSC::MarkedBlock::forEachCell):
377         * runtime/WriteBarrier.h:
378         (JSC::WriteBarrierBase::get):
379         (JSC::WriteBarrierBase::unvalidatedGet):
380
381 2012-02-03  Mark Hahnenberg  <mhahnenberg@apple.com>
382
383         Build fix
384
385         Unreviewed build fix
386
387         Forgot to add a couple files.
388
389         * heap/MarkedAllocator.cpp: Added.
390         (JSC):
391         (JSC::MarkedAllocator::tryAllocateHelper):
392         (JSC::MarkedAllocator::tryAllocate):
393         (JSC::MarkedAllocator::allocateSlowCase):
394         (JSC::MarkedAllocator::allocateBlock):
395         (JSC::MarkedAllocator::addBlock):
396         (JSC::MarkedAllocator::removeBlock):
397         * heap/MarkedAllocator.h: Added.
398         (JSC):
399         (DFG):
400         (MarkedAllocator):
401         (JSC::MarkedAllocator::cellSize):
402         (JSC::MarkedAllocator::heap):
403         (JSC::MarkedAllocator::setHeap):
404         (JSC::MarkedAllocator::setCellSize):
405         (JSC::MarkedAllocator::setMarkedSpace):
406         (JSC::MarkedAllocator::MarkedAllocator):
407         (JSC::MarkedAllocator::allocate):
408         (JSC::MarkedAllocator::reset):
409         (JSC::MarkedAllocator::zapFreeList):
410         (JSC::MarkedAllocator::forEachBlock):
411
412 2012-02-03  Mark Hahnenberg  <mhahnenberg@apple.com>
413
414         Refactor MarkedBlock::SizeClass into a separate class
415         https://bugs.webkit.org/show_bug.cgi?id=77600
416
417         Reviewed by Geoffrey Garen.
418
419         We pulled SizeClass out into its own class, named MarkedAllocator, and gave it
420         the responsibility of allocating objects from the collection of MarkedBlocks 
421         that it manages. Also limited the amount of coupling to internal data fields 
422         from other places, although it's mostly unavoidable in the JIT code.
423
424         Eventually MarkedAllocator will implement various policies to do with object 
425         management, e.g. whether or not to run destructors on objects that it manages.
426         MarkedSpace will manage a collection of MarkedAllocators with varying policies,
427         as it does now but to a larger extent. 
428
429         * CMakeLists.txt:
430         * GNUmakefile.list.am:
431         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
432         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
433         * JavaScriptCore.xcodeproj/project.pbxproj:
434         * Target.pri:
435         * dfg/DFGSpeculativeJIT.h:
436         (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
437         * heap/Heap.cpp:
438         (JSC::Heap::collect):
439         (JSC::Heap::resetAllocators):
440         * heap/Heap.h:
441         (JSC::Heap::allocatorForObject):
442         (Heap):
443         * heap/MarkedAllocator.cpp: Added.
444         (JSC):
445         (JSC::MarkedAllocator::tryAllocateHelper):
446         (JSC::MarkedAllocator::tryAllocate):
447         (JSC::MarkedAllocator::allocateSlowCase):
448         (JSC::MarkedAllocator::allocateBlock):
449         (JSC::MarkedAllocator::addBlock):
450         (JSC::MarkedAllocator::removeBlock):
451         * heap/MarkedAllocator.h: Added.
452         (JSC):
453         (DFG):
454         (MarkedAllocator):
455         (JSC::MarkedAllocator::cellSize):
456         (JSC::MarkedAllocator::heap):
457         (JSC::MarkedAllocator::setHeap):
458         (JSC::MarkedAllocator::setCellSize):
459         (JSC::MarkedAllocator::setMarkedSpace):
460         (JSC::MarkedAllocator::MarkedAllocator):
461         (JSC::MarkedAllocator::allocate):
462         (JSC::MarkedAllocator::reset):
463         (JSC::MarkedAllocator::zapFreeList):
464         (JSC::MarkedAllocator::forEachBlock):
465         * heap/MarkedSpace.cpp:
466         (JSC::MarkedSpace::MarkedSpace):
467         (JSC::MarkedSpace::resetAllocators):
468         (JSC::MarkedSpace::canonicalizeCellLivenessData):
469         (JSC::TakeIfUnmarked::operator()):
470         * heap/MarkedSpace.h:
471         (MarkedSpace):
472         (JSC::MarkedSpace::allocatorFor):
473         (JSC::MarkedSpace::allocate):
474         (JSC::MarkedSpace::forEachBlock):
475         (JSC::MarkedSpace::didAddBlock):
476         (JSC::MarkedSpace::didConsumeFreeList):
477         * jit/JITInlineMethods.h:
478         (JSC::JIT::emitAllocateBasicJSObject):
479
480 2012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>
481
482         [Qt] Replace GNU linker script for exports with export macros in WTF/JSC
483         https://bugs.webkit.org/show_bug.cgi?id=77723
484
485         Reviewed by Tor Arne Vestbø.
486
487         * wtf/Platform.h: Enable use of export macros.
488
489 2012-02-02  Hajime Morrita  <morrita@chromium.org>
490
491         Unreviewed, removing an unnecessarily JS_PRIVATE_EXPORT annotation.
492
493         * interpreter/Interpreter.h:
494         (Interpreter):
495
496 2012-01-31  Hajime Morrita  <morrita@chromium.org>
497
498         [Mac] eliminate JavaScriptCore.exp
499         https://bugs.webkit.org/show_bug.cgi?id=72854
500
501         Reviewed by Darin Adler.
502
503         - Removed exp files and corresponding makefile entries.
504         - Changed the build configuration no to use exp file.
505
506         * Configurations/JavaScriptCore.xcconfig:
507         * DerivedSources.make:
508         * JavaScriptCore.JSVALUE32_64only.exp: Removed.
509         * JavaScriptCore.JSVALUE64only.exp: Removed.
510         * JavaScriptCore.exp: Removed.
511         * JavaScriptCore.xcodeproj/project.pbxproj:
512         * wtf/Platform.h:
513
514 2012-02-02  Benjamin Poulain  <bpoulain@apple.com>
515
516         Running a Web Worker on about:blank crashes the interpreter
517         https://bugs.webkit.org/show_bug.cgi?id=77593
518
519         Reviewed by Michael Saboff.
520
521         The method Interpreter::execute() was crashing on empty programs because
522         the assumption is made the source is not null.
523
524         This patch shortcut the execution when the String is null to avoid invalid
525         memory access.
526
527         * interpreter/Interpreter.cpp:
528         (JSC::Interpreter::execute):
529
530 2012-02-02  Kalev Lember  <kalevlember@gmail.com>
531
532         [GTK] Use win32 native threading
533         https://bugs.webkit.org/show_bug.cgi?id=77676
534
535         Reviewed by Martin Robinson.
536
537         r97269 switched from glib threading to pthreads, breaking win32 GTK+.
538         This is a follow up, removing some leftovers in ThreadSpecific.h and
539         switching win32 to use the native threading in ThreadingWin.cpp.
540
541         * GNUmakefile.list.am: Compile in win32 native threading support
542         * wtf/ThreadSpecific.h: Remove GTK+-specific definitions
543         (ThreadSpecific):
544         (WTF::::destroy):
545
546 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
547
548         retrieveCallerFromVMCode should call trueCallerFrame
549         https://bugs.webkit.org/show_bug.cgi?id=77684
550
551         Reviewed by Oliver Hunt.
552
553         * interpreter/Interpreter.cpp:
554         (JSC::Interpreter::retrieveCallerFromVMCode):
555
556 2012-02-02  Kalev Lember  <kalevlember@gmail.com>
557
558         [GTK] Implement current executable path finding for win32
559         https://bugs.webkit.org/show_bug.cgi?id=77677
560
561         Reviewed by Martin Robinson.
562
563         The WTF helper for getting the binary path that was added in r101710
564         left out the win32 implementation. Fix this.
565
566         * wtf/gobject/GlibUtilities.cpp:
567         (getCurrentExecutablePath):
568
569 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
570
571         Throwing away bytecode and then reparsing during DFG optimization is just
572         plain wrong and makes things crash
573         https://bugs.webkit.org/show_bug.cgi?id=77680
574         <rdar://problem/10798490>
575
576         Reviewed by Oliver Hunt.
577
578         This is the minimal surgical fix: it removes the code that triggered bytecode
579         throw-away. Once we're confident that this is a good idea, we can kill all of
580         the code that implements the feature.
581
582         * bytecode/CodeBlock.h:
583         (JSC::CodeBlock::discardBytecodeLater):
584         (JSC::CodeBlock::addValueProfile):
585         * jit/JITDriver.h:
586         (JSC::jitCompileIfAppropriate):
587         (JSC::jitCompileFunctionIfAppropriate):
588
589 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
590
591         Release build debugging should be easier
592         https://bugs.webkit.org/show_bug.cgi?id=77669
593
594         Reviewed by Gavin Barraclough.
595
596         * assembler/ARMAssembler.h:
597         (ARMAssembler):
598         (JSC::ARMAssembler::debugOffset):
599         * assembler/ARMv7Assembler.h:
600         (ARMv7Assembler):
601         (JSC::ARMv7Assembler::debugOffset):
602         (ARMInstructionFormatter):
603         (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
604         * assembler/AbstractMacroAssembler.h:
605         (AbstractMacroAssembler):
606         (JSC::AbstractMacroAssembler::debugOffset):
607         * assembler/AssemblerBuffer.h:
608         (AssemblerBuffer):
609         (JSC::AssemblerBuffer::debugOffset):
610         * assembler/LinkBuffer.h:
611         (LinkBuffer):
612         (JSC::LinkBuffer::debugSize):
613         * assembler/MIPSAssembler.h:
614         (MIPSAssembler):
615         (JSC::MIPSAssembler::debugOffset):
616         * assembler/X86Assembler.h:
617         (X86Assembler):
618         (JSC::X86Assembler::debugOffset):
619         (X86InstructionFormatter):
620         (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
621         * bytecode/CodeBlock.cpp:
622         (JSC):
623         * bytecode/CodeBlock.h:
624         (CodeBlock):
625         * bytecode/CodeOrigin.h:
626         (CodeOrigin):
627         (JSC):
628         (JSC::CodeOrigin::inlineStack):
629         * bytecode/DFGExitProfile.h:
630         (JSC::DFG::exitKindToString):
631         * bytecode/DataFormat.h:
632         (JSC::dataFormatToString):
633         * bytecode/PredictedType.cpp:
634         (JSC):
635         (JSC::predictionToString):
636         * bytecode/PredictedType.h:
637         (JSC):
638         * bytecode/ValueRecovery.h:
639         (ValueRecovery):
640         (JSC::ValueRecovery::dump):
641         * bytecompiler/BytecodeGenerator.cpp:
642         (JSC):
643         (JSC::BytecodeGenerator::setDumpsGeneratedCode):
644         (JSC::BytecodeGenerator::dumpsGeneratedCode):
645         (JSC::BytecodeGenerator::generate):
646         * dfg/DFGAbstractValue.h:
647         (StructureAbstractValue):
648         (JSC::DFG::StructureAbstractValue::dump):
649         (AbstractValue):
650         (JSC::DFG::AbstractValue::dump):
651         * dfg/DFGAssemblyHelpers.h:
652         (DFG):
653         (AssemblyHelpers):
654         (JSC::DFG::AssemblyHelpers::debugCall):
655         * dfg/DFGFPRInfo.h:
656         (FPRInfo):
657         (JSC::DFG::FPRInfo::debugName):
658         * dfg/DFGGPRInfo.h:
659         (GPRInfo):
660         (JSC::DFG::GPRInfo::debugName):
661         * dfg/DFGGraph.cpp:
662         (DFG):
663         * dfg/DFGGraph.h:
664         (Graph):
665         * dfg/DFGNode.h:
666         (DFG):
667         (JSC::DFG::arithNodeFlagsAsString):
668         (Node):
669         (JSC::DFG::Node::hasIdentifier):
670         (JSC::DFG::Node::dumpChildren):
671         * dfg/DFGOSRExit.cpp:
672         (DFG):
673         (JSC::DFG::OSRExit::dump):
674         * dfg/DFGOSRExit.h:
675         (OSRExit):
676         * runtime/JSValue.cpp:
677         (JSC):
678         (JSC::JSValue::description):
679         * runtime/JSValue.h:
680         (JSValue):
681         * wtf/BitVector.cpp:
682         (WTF):
683         (WTF::BitVector::dump):
684         * wtf/BitVector.h:
685         (BitVector):
686
687 2012-02-02  Oliver Hunt  <oliver@apple.com>
688
689         Getters and setters cause line numbers in errors/console.log to be offset for the whole file
690         https://bugs.webkit.org/show_bug.cgi?id=77675
691
692         Reviewed by Timothy Hatcher.
693
694         Our default literal parsing logic doesn't handle the extra work required for
695         getters and setters.  When it encounters one, it rolls back the lexer and 
696         then switches to a more complete parsing function.  Unfortunately it was only
697         winding back the character position, and was ignoring the line number and
698         other lexer data.  This led to every getter and setter causing the line number
699         to be incorrectly incremented leading to increasingly incorrect numbers for
700         the rest of the file.
701
702         * parser/Parser.cpp:
703         (JSC::::parseObjectLiteral):
704
705 2012-02-02  Andy Wingo  <wingo@igalia.com>
706
707         Fix type punning warning in HashTable.h debug builds
708         https://bugs.webkit.org/show_bug.cgi?id=77422
709
710         Reviewed by Gavin Barraclough.
711
712         * wtf/HashTable.h (WTF::HashTable::checkKey): Fix type punning
713         warning appearing in debug builds with gcc-4.6.2 on GNU/Linux.
714
715 2012-02-01  Michael Saboff  <msaboff@apple.com>
716
717         Yarr crash with regexp replace
718         https://bugs.webkit.org/show_bug.cgi?id=67454
719
720         Reviewed by Gavin Barraclough.
721
722         Properly handle the case of a back reference to an unmatched
723         subpattern by always matching without consuming any characters.
724
725         * yarr/YarrInterpreter.cpp:
726         (JSC::Yarr::Interpreter::matchBackReference):
727         (JSC::Yarr::Interpreter::backtrackBackReference):
728
729 2012-02-01  Gavin Barraclough  <barraclough@apple.com>
730
731         calling function on catch block scope containing an eval result in wrong this value being passed
732         https://bugs.webkit.org/show_bug.cgi?id=77581
733
734         Reviewed by Oliver Hunt.
735
736         javascript:function F(){ return 'F' in this; }; try { throw F; } catch (e) { eval(""); alert(e()); }
737
738         * bytecompiler/NodesCodegen.cpp:
739         (JSC::TryNode::emitBytecode):
740         * interpreter/Interpreter.cpp:
741         (JSC::Interpreter::execute):
742         * parser/ASTBuilder.h:
743         (JSC::ASTBuilder::createTryStatement):
744         * parser/NodeConstructors.h:
745         (JSC::TryNode::TryNode):
746         * parser/Nodes.h:
747         (TryNode):
748         * parser/Parser.cpp:
749         (JSC::::parseTryStatement):
750         * parser/SyntaxChecker.h:
751         (JSC::SyntaxChecker::createTryStatement):
752         * runtime/JSObject.h:
753         (JSObject):
754         (JSC::JSObject::isStaticScopeObject):
755         (JSC):
756
757 2012-02-01  Oliver Hunt  <oliver@apple.com>
758
759         Add support for inferred function names
760         https://bugs.webkit.org/show_bug.cgi?id=77579
761
762         Reviewed by Gavin Barraclough.
763
764         Add new "inferred" names to function expressions, getters, and setters.
765         This property is not exposed to JS, so is only visible in the debugger
766         and profiler.
767
768         * JavaScriptCore.exp:
769         * bytecompiler/BytecodeGenerator.h:
770         (JSC::BytecodeGenerator::makeFunction):
771         * debugger/DebuggerCallFrame.cpp:
772         (JSC::DebuggerCallFrame::calculatedFunctionName):
773         * parser/ASTBuilder.h:
774         (JSC::ASTBuilder::createAssignResolve):
775         (JSC::ASTBuilder::createGetterOrSetterProperty):
776         (JSC::ASTBuilder::createProperty):
777         (JSC::ASTBuilder::makeAssignNode):
778         * parser/Nodes.h:
779         (JSC::FunctionBodyNode::setInferredName):
780         (JSC::FunctionBodyNode::inferredName):
781         (FunctionBodyNode):
782         * profiler/Profiler.cpp:
783         (JSC):
784         (JSC::Profiler::createCallIdentifier):
785         (JSC::createCallIdentifierFromFunctionImp):
786         * runtime/Executable.cpp:
787         (JSC::FunctionExecutable::FunctionExecutable):
788         (JSC::FunctionExecutable::fromGlobalCode):
789         * runtime/Executable.h:
790         (JSC::FunctionExecutable::create):
791         (JSC::FunctionExecutable::inferredName):
792         (FunctionExecutable):
793         * runtime/JSFunction.cpp:
794         (JSC::JSFunction::calculatedDisplayName):
795         (JSC):
796         (JSC::getCalculatedDisplayName):
797         * runtime/JSFunction.h:
798         (JSC):
799
800 2012-02-01  Filip Pizlo  <fpizlo@apple.com>
801
802         DFG should fold double-to-int conversions
803         https://bugs.webkit.org/show_bug.cgi?id=77532
804
805         Reviewed by Oliver Hunt.
806         
807         Performance neutral on major benchmarks. But it makes calling V8's
808         Math.random() 4x faster.
809
810         * bytecode/CodeBlock.cpp:
811         (JSC):
812         (JSC::CodeBlock::addOrFindConstant):
813         * bytecode/CodeBlock.h:
814         (JSC::CodeBlock::addConstant):
815         (CodeBlock):
816         * dfg/DFGAbstractState.cpp:
817         (JSC::DFG::AbstractState::execute):
818         * dfg/DFGByteCodeParser.cpp:
819         (JSC::DFG::ByteCodeParser::toInt32):
820         (ByteCodeParser):
821         (JSC::DFG::ByteCodeParser::getJSConstantForValue):
822         (JSC::DFG::ByteCodeParser::isInt32Constant):
823         * dfg/DFGGraph.h:
824         (JSC::DFG::Graph::addShouldSpeculateInteger):
825         (Graph):
826         (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
827         * dfg/DFGPropagator.cpp:
828         (JSC::DFG::Propagator::propagateNodePredictions):
829         (JSC::DFG::Propagator::doRoundOfDoubleVoting):
830         (JSC::DFG::Propagator::fixupNode):
831         * dfg/DFGSpeculativeJIT.cpp:
832         (JSC::DFG::SpeculativeJIT::compileAdd):
833         (DFG):
834         (JSC::DFG::SpeculativeJIT::compileArithSub):
835         * dfg/DFGSpeculativeJIT.h:
836         (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
837         (SpeculativeJIT):
838         * dfg/DFGSpeculativeJIT32_64.cpp:
839         (JSC::DFG::SpeculativeJIT::compile):
840         * dfg/DFGSpeculativeJIT64.cpp:
841         (JSC::DFG::SpeculativeJIT::compile):
842         * runtime/JSValueInlineMethods.h:
843         (JSC::JSValue::asDouble):
844
845 2012-02-01  Filip Pizlo  <fpizlo@apple.com>
846
847         DFG graph dump for GetScopedVar should show the correct prediction
848         https://bugs.webkit.org/show_bug.cgi?id=77530
849
850         Reviewed by Geoff Garen.
851         
852         GetScopedVar has a heap prediction, not a variable prediction. But it does
853         have a variable. Hence we need to check for heap predictions before checking
854         for variable predictions.
855
856         * dfg/DFGGraph.cpp:
857         (JSC::DFG::Graph::dump):
858
859 2012-02-01  Mark Hahnenberg  <mhahnenberg@apple.com>
860
861         Replace JSArray destructor with finalizer
862         https://bugs.webkit.org/show_bug.cgi?id=77488
863
864         Reviewed by Geoffrey Garen.
865
866         * JavaScriptCore.exp:
867         * runtime/JSArray.cpp:
868         (JSC::JSArray::finalize): Added finalizer.
869         (JSC::JSArray::allocateSparseMap): Factored out code for allocating new sparse maps.
870         (JSC):
871         (JSC::JSArray::deallocateSparseMap): Factored out code for deallocating sparse maps.
872         (JSC::JSArray::enterDictionaryMode): Renamed enterSparseMode to enterDictionaryMode 
873         because the old name was confusing because we could have a sparse array that never 
874         called enterSparseMode.
875         (JSC::JSArray::defineOwnNumericProperty):
876         (JSC::JSArray::setLengthWritable):
877         (JSC::JSArray::putByIndexBeyondVectorLength):
878         (JSC::JSArray::setLength):
879         (JSC::JSArray::pop):
880         (JSC::JSArray::sort):
881         (JSC::JSArray::compactForSorting):
882         * runtime/JSArray.h:
883         (JSArray):
884
885 2012-02-01  Andy Wingo  <wingo@igalia.com>
886
887         Refactor identifier resolution in BytecodeGenerator
888         https://bugs.webkit.org/show_bug.cgi?id=76285
889
890         Reviewed by Geoffrey Garen.
891
892         * bytecompiler/BytecodeGenerator.h:
893         (JSC::ResolveResult): New class, to describe the storage
894         location corresponding to an identifier in a program.
895         * bytecompiler/BytecodeGenerator.cpp:
896         (JSC::BytecodeGenerator::resolve): New function, replacing
897         findScopedProperty.
898         (JSC::BytecodeGenerator::resolveConstDecl): New function,
899         encapsulating what ConstDeclNode::emitBytecode used to do.
900         (JSC::BytecodeGenerator::emitGetStaticVar):
901         (JSC::BytecodeGenerator::emitPutStaticVar): New functions,
902         corresponding to the old emitGetScopedVar and emitPutScopedVar.
903         (JSC::BytecodeGenerator::registerFor): Remove version that took an
904         Identifier&; replaced by ResolveResult::local().
905         (JSC::BytecodeGenerator::emitResolve):
906         (JSC::BytecodeGenerator::emitResolveBase):
907         (JSC::BytecodeGenerator::emitResolveBaseForPut):
908         (JSC::BytecodeGenerator::emitResolveWithBase):
909         (JSC::BytecodeGenerator::emitResolveWithThis): Change to accept a
910         "resolveResult" argument.  This is more clear, and reduces the
911         amount of double analysis happening at compile-time.
912         * bytecompiler/NodesCodegen.cpp:
913         (JSC::ResolveNode::emitBytecode):
914         (JSC::EvalFunctionCallNode::emitBytecode):
915         (JSC::FunctionCallResolveNode::emitBytecode):
916         (JSC::PostfixResolveNode::emitBytecode):
917         (JSC::DeleteResolveNode::emitBytecode):
918         (JSC::TypeOfResolveNode::emitBytecode):
919         (JSC::PrefixResolveNode::emitBytecode):
920         (JSC::ReadModifyResolveNode::emitBytecode):
921         (JSC::AssignResolveNode::emitBytecode):
922         (JSC::ConstDeclNode::emitCodeSingle):
923         (JSC::ForInNode::emitBytecode): Refactor to use the new
924         ResolveResult structure.
925
926 2012-02-01  Csaba Osztrogonác  <ossy@webkit.org>
927
928         Implement Error.stack
929         https://bugs.webkit.org/show_bug.cgi?id=66994
930
931         Unreviewed, rolling out r106407.
932
933         * JavaScriptCore.exp:
934         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
935         * interpreter/AbstractPC.cpp:
936         (JSC::AbstractPC::AbstractPC):
937         * interpreter/Interpreter.cpp:
938         (JSC::Interpreter::throwException):
939         * interpreter/Interpreter.h:
940         (JSC):
941         (Interpreter):
942         * jsc.cpp:
943         (GlobalObject::finishCreation):
944         * parser/Parser.h:
945         (JSC::::parse):
946         * runtime/CommonIdentifiers.h:
947         * runtime/Error.cpp:
948         (JSC::addErrorInfo):
949         * runtime/Error.h:
950         (JSC):
951
952 2012-01-31  Hajime Morrita  <morrita@chromium.org>
953
954         Add missing JS_PRIVATE_EXPORTs
955         https://bugs.webkit.org/show_bug.cgi?id=77507
956
957         Reviewed by Kevin Ollivier.
958
959         * heap/MarkedSpace.h:
960         (MarkedSpace):
961         * interpreter/Interpreter.h:
962         (Interpreter):
963         * runtime/JSValue.h:
964         (JSValue):
965         * wtf/text/AtomicString.h:
966         (WTF::AtomicString::add):
967         * wtf/text/WTFString.h:
968         (WTF):
969
970 2012-01-31  Geoffrey Garen  <ggaren@apple.com>
971
972         Stop using -fomit-frame-pointer
973         https://bugs.webkit.org/show_bug.cgi?id=77403
974
975         Reviewed by Filip Pizlo.
976         
977         JavaScriptCore is too fast. I'm just the man to fix it.
978
979         * Configurations/JavaScriptCore.xcconfig:
980
981 2012-01-31  Michael Saboff  <msaboff@apple.com>
982
983         StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
984         https://bugs.webkit.org/show_bug.cgi?id=76647
985
986         Reviewed by Darin Adler.
987
988         Changed stringProtoFuncToUpperCase to call StringImpl::upper() in a manor similar
989         to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle to special
990         cases.  One case is s-sharp (0xdf) which converts to "SS".  The other case is 
991         for characters which become 16 bit values when converted to upper case.  For
992         those, we up convert the the source string and use the 16 bit path.
993
994         * runtime/StringPrototype.cpp:
995         (JSC::stringProtoFuncToUpperCase):
996         * wtf/text/StringImpl.cpp:
997         (WTF::StringImpl::upper):
998         * wtf/unicode/CharacterNames.h:
999         (smallLetterSharpS): New constant
1000
1001 2012-01-31  Oliver Hunt  <oliver@apple.com>
1002
1003         Remove unneeded sourceId property
1004         https://bugs.webkit.org/show_bug.cgi?id=77495
1005
1006         Reviewed by Filip Pizlo.
1007
1008         sourceId isn't used anymore, so we'll just remove it.
1009
1010         * runtime/Error.cpp:
1011         (JSC):
1012         (JSC::addErrorInfo):
1013         (JSC::hasErrorInfo):
1014
1015 2012-01-31  Oliver Hunt  <oliver@apple.com>
1016
1017         Implement Error.stack
1018         https://bugs.webkit.org/show_bug.cgi?id=66994
1019
1020         Reviewed by Gavin Barraclough.
1021
1022         Original patch by Juan Carlos Montemayor Elosua:
1023             This patch utilizes topCallFrame to create a stack trace when
1024             an error is thrown. Users will also be able to use the stack()
1025             command in jsc to get arrays with stack trace information.
1026
1027         Modified to be correct on ToT, with a variety of correctness,
1028         performance, and security improvements.
1029
1030         * JavaScriptCore.exp:
1031         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1032         * interpreter/Interpreter.cpp:
1033         (JSC::getCallerLine):
1034         (JSC::getSourceURLFromCallFrame):
1035         (JSC::getStackFrameCodeType):
1036         (JSC::Interpreter::getStackTrace):
1037         (JSC::Interpreter::throwException):
1038         * interpreter/Interpreter.h:
1039         (JSC::StackFrame::toString):
1040         * jsc.cpp:
1041         (GlobalObject::finishCreation):
1042         (functionJSCStack):
1043         * parser/Parser.h:
1044         (JSC::Parser::parse):
1045         * runtime/CommonIdentifiers.h:
1046         * runtime/Error.cpp:
1047         (JSC::addErrorInfo):
1048         * runtime/Error.h:
1049
1050 2012-01-31  Scott Graham  <scottmg@chromium.org>
1051
1052         [Chromium] Remove references to gyp cygwin build target
1053         https://bugs.webkit.org/show_bug.cgi?id=77253
1054
1055         Reviewed by Julien Chaffraix.
1056
1057         Target dependency is no longer required, it's done earlier in the
1058         build process.
1059
1060         * JavaScriptCore.gyp/JavaScriptCore.gyp:
1061
1062 2012-01-31  Michael Saboff  <msaboff@apple.com>
1063
1064         ASSERT(m_jumpsToLink.isEmpty()) failing in ARMv7Assembler dtor
1065         https://bugs.webkit.org/show_bug.cgi?id=77443
1066
1067         Reviewed by Gavin Barraclough.
1068
1069         Removed failing ASSERT() and thus destructor.  The ASSERT isn't needed.
1070         We are hitting it in the YARR JIT case where we bail out and go to the
1071         interpreter with a partially JIT'ed function.  Since we haven't linked
1072         the JIT'ed code, there is likely to be some unresolved jumps in the vector
1073         when the ARMv7Assembler destructor is called.  For the case where we
1074         complete the JIT process, we clear the vector at the end of
1075         LinkBuffer::linkCode (LinkBuffer.h:292).
1076
1077         * assembler/ARMv7Assembler.h:
1078         (ARMv7Assembler):
1079
1080 2012-01-31  Anders Carlsson  <andersca@apple.com>
1081
1082         Vector<T>::operator== shouldn't require T to have operator!=
1083         https://bugs.webkit.org/show_bug.cgi?id=77448
1084
1085         Reviewed by Andreas Kling.
1086
1087         Change VectorComparer::compare to use !(a == b) instead of a != b since
1088         it makes more sense for Vector::operator== to use the element's operator==.
1089
1090         * wtf/Vector.h:
1091
1092 2012-01-30  Oliver Hunt  <oliver@apple.com>
1093
1094         get_by_val_arguments is broken in the interpreter
1095         https://bugs.webkit.org/show_bug.cgi?id=77389
1096
1097         Reviewed by Gavin Barraclough.
1098
1099         When get_by_val had wad a value profile added, the same slot was not added to
1100         get_by_val_arguments.  This broke the interpreter as the interpreter falls
1101         back on its regular get_by_val implementation.
1102
1103         No tests are added as the interpreter is fairly broken in its
1104         current state (multiple tests fail due to this bug).
1105
1106         * bytecode/CodeBlock.cpp:
1107         (JSC::CodeBlock::dump):
1108         * bytecode/Opcode.h:
1109         (JSC):
1110         ():
1111         * bytecompiler/BytecodeGenerator.cpp:
1112         (JSC::BytecodeGenerator::emitGetArgumentByVal):
1113
1114 2012-01-30  Oliver Hunt  <oliver@apple.com>
1115
1116         Unexpected syntax error
1117         https://bugs.webkit.org/show_bug.cgi?id=77340
1118
1119         Reviewed by Gavin Barraclough.
1120
1121         Function calls and new expressions have the same semantics for
1122         assignment, so should simply share their lhs handling.
1123
1124         * parser/Parser.cpp:
1125         (JSC::::parseMemberExpression):
1126
1127 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1128
1129         Unreviewed ARMv7 build fix.
1130
1131         * tools/CodeProfiling.cpp:
1132         (JSC):
1133         (JSC::setProfileTimer):
1134         (JSC::CodeProfiling::begin):
1135         (JSC::CodeProfiling::end):
1136
1137 2012-01-30  David Levin  <levin@chromium.org>
1138
1139         Using OS(WIN) or OS(MAC) should cause a build error.
1140         https://bugs.webkit.org/show_bug.cgi?id=77162
1141
1142         Reviewed by Darin Adler.
1143
1144         * wtf/Platform.h: Expand them into something that will
1145          cause a compile error.
1146
1147 2012-01-30  Yong Li  <yoli@rim.com>
1148
1149         [BlackBerry] OS(QNX) also has TM_GMTOFF, TM_ZONE, and TIMEGM
1150         https://bugs.webkit.org/show_bug.cgi?id=77360
1151
1152         Reviewed by Rob Buis.
1153
1154         Turn on HAVE(TM_GMTOFF), HAVE(TM_ZONE), and HAVE(TIMEGM)
1155         for OS(QNX).
1156
1157         * wtf/Platform.h:
1158
1159 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1160
1161         Speculative Windows build fix.
1162
1163         * assembler/MacroAssemblerCodeRef.h:
1164         (FunctionPtr):
1165
1166 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1167
1168         https://bugs.webkit.org/show_bug.cgi?id=77163
1169         MacroAssemblerCodeRef.h uses OS(WIN) instead of OS(WINDOWS)
1170
1171         Rubber stamped by Geoff Garen
1172
1173         * assembler/MacroAssemblerCodeRef.h:
1174
1175 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1176
1177         Unreviewed build fix for interpreter builds.
1178
1179         * bytecode/CodeBlock.cpp:
1180         (JSC::CodeBlock::CodeBlock):
1181         * bytecode/CodeBlock.h:
1182         (CodeBlock):
1183         * interpreter/Interpreter.cpp:
1184         (JSC::Interpreter::privateExecute):
1185         * tools/CodeProfile.cpp:
1186         (JSC::CodeProfile::sample):
1187
1188 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1189
1190         Unreviewed build fix following bug#76855
1191
1192         * JavaScriptCore.exp:
1193
1194 2012-01-30  Michael Saboff  <msaboff@apple.com>
1195
1196         CaseFoldingHash::hash() doesn't handle 8 bit strings directly
1197         https://bugs.webkit.org/show_bug.cgi?id=76652
1198
1199         Reviewed by Andreas Kling.
1200
1201         * wtf/text/StringHash.h:
1202         (WTF::CaseFoldingHash::hash): Added 8 bit string code path.
1203
1204 2012-01-30  Michael Saboff  <msaboff@apple.com>
1205
1206         stringProtoFuncReplace converts 8 bit strings to 16 bit during replacement
1207         https://bugs.webkit.org/show_bug.cgi?id=76651
1208
1209         Reviewed by Geoffrey Garen.
1210
1211         Made local function substituteBackreferencesSlow a template function
1212         based on character width.  Cleaned up getCharacters() in both UString
1213         and StringImpl.  Changed getCharacters<UChar> to up convert an 8 bit
1214         string to 16 bits if necessary.
1215
1216         * runtime/StringPrototype.cpp:
1217         (JSC::substituteBackreferencesSlow):
1218         (JSC::substituteBackreferences):
1219         * runtime/UString.h:
1220         (JSC::LChar):
1221         (JSC::UChar):
1222         * wtf/text/StringImpl.h:
1223         (WTF::UChar):
1224
1225 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
1226
1227         Clean up putDirect
1228         https://bugs.webkit.org/show_bug.cgi?id=76232
1229
1230         Reviewed by Sam Weinig.
1231
1232         Part 3 - merge op_put_getter & op_put_setter.
1233
1234         Putting these separately is inefficient (and makes future optimiation,
1235         e.g. making GetterSetter immutable) harder. Change to emit a single
1236         op_put_getter_setter bytecode op. Ultimately we should probably be
1237         able to merge this with put direct, to create a common op to initialize
1238         object literal properties.
1239
1240         * bytecode/CodeBlock.cpp:
1241         (JSC::CodeBlock::dump):
1242         * bytecode/Opcode.h:
1243         (JSC):
1244         ():
1245         * bytecompiler/BytecodeGenerator.cpp:
1246         (JSC::BytecodeGenerator::emitPutGetterSetter):
1247         * bytecompiler/BytecodeGenerator.h:
1248         (BytecodeGenerator):
1249         * bytecompiler/NodesCodegen.cpp:
1250         (JSC::PropertyListNode::emitBytecode):
1251         * interpreter/Interpreter.cpp:
1252         (JSC::Interpreter::privateExecute):
1253         * jit/JIT.cpp:
1254         (JSC::JIT::privateCompileMainPass):
1255         * jit/JIT.h:
1256         (JIT):
1257         * jit/JITPropertyAccess.cpp:
1258         (JSC::JIT::emit_op_put_getter_setter):
1259         * jit/JITPropertyAccess32_64.cpp:
1260         (JSC::JIT::emit_op_put_getter_setter):
1261         * jit/JITStubs.cpp:
1262         (JSC::DEFINE_STUB_FUNCTION):
1263         * jit/JITStubs.h:
1264         ():
1265         * runtime/JSObject.cpp:
1266         (JSC::JSObject::putDirectVirtual):
1267         (JSC::JSObject::putDirectAccessor):
1268         (JSC):
1269         (JSC::putDescriptor):
1270         (JSC::JSObject::defineOwnProperty):
1271         * runtime/JSObject.h:
1272         ():
1273         (JSC::JSObject::putDirectInternal):
1274         (JSC::JSObject::putDirect):
1275         (JSC::JSObject::putDirectWithoutTransition):
1276
1277 2012-01-30  Michael Saboff  <msaboff@apple.com>
1278
1279         Dromaeo tests call parseSimpleLengthValue() on 8 bit strings
1280         https://bugs.webkit.org/show_bug.cgi?id=76649
1281
1282         Reviewed by Geoffrey Garen.
1283
1284         * JavaScriptCore.exp: Added export for charactersToDouble.
1285
1286 2012-01-30  Michael Saboff  <msaboff@apple.com>
1287
1288         WebCore decodeEscapeSequences unnecessarily converts 8 bit strings to 16 bit when decoding.
1289         https://bugs.webkit.org/show_bug.cgi?id=76648
1290
1291         Reviewed by Geoffrey Garen.
1292
1293         Added a new overloaded append member that takes a String& argument, an offest
1294         and a length to do direct sub string appending to a StringBuilder.
1295
1296         * wtf/text/StringBuilder.h:
1297         (WTF::StringBuilder::append):
1298
1299 2012-01-29  Zoltan Herczeg  <zherczeg@webkit.org>
1300
1301         Custom written CSS lexer
1302         https://bugs.webkit.org/show_bug.cgi?id=70107
1303
1304         Reviewed by Antti Koivisto and Oliver Hunt.
1305
1306         Add new helper functions for the custom written CSS lexer.
1307
1308         * wtf/ASCIICType.h:
1309         (WTF::toASCIILowerUnchecked):
1310         (WTF):
1311         (WTF::isASCIIAlphaCaselessEqual):
1312
1313 2012-01-29  Filip Pizlo  <fpizlo@apple.com>
1314
1315         REGRESSION (r105576-r105582): Web Inspector Crash in JSC::JSValue::toString(JSC::ExecState*) const
1316         https://bugs.webkit.org/show_bug.cgi?id=77146
1317         <rdar://problem/10770586>
1318
1319         Reviewed by Oliver Hunt.
1320         
1321         The old JIT expects that the result of the last operation is in the lastResultRegister.  The DFG JIT is
1322         designed to correctly track the lastResultRegister by looking at SetLocal nodes.  However, when the DFG
1323         JIT inlines a code block, it forgets that the inlined code block's result would have been placed in the
1324         lastResultRegister.  Hence if we OSR exit on the first node following the end of an inlined code block
1325         that had a return value, and that first node uses the return value, the old JIT will get massively
1326         confused.  This patch takes a surgical approach: instead of making the DFG smarter, it makes the old
1327         JIT slightly dumber.
1328
1329         * jit/JITCall.cpp:
1330         (JSC::JIT::emit_op_call_put_result):
1331
1332 2012-01-29  Filip Pizlo  <fpizlo@apple.com>
1333
1334         Build fix for Mac non-x64 platforms.
1335
1336         * tools/CodeProfiling.cpp:
1337         (JSC):
1338
1339 2012-01-28  Gavin Barraclough  <barraclough@apple.com>
1340
1341         Reserve 'let'
1342         https://bugs.webkit.org/show_bug.cgi?id=77293
1343
1344         Rubber stamped by Oliver Hunt.
1345
1346         'let' may become a keyword in ES6.  We're going to try experimentally reserving it,
1347         to see if this breaks the web.
1348
1349         * parser/Keywords.table:
1350
1351 2012-01-27  Gavin Barraclough  <barraclough@apple.com>
1352
1353         Implement a JIT-code aware sampling profiler for JSC
1354         https://bugs.webkit.org/show_bug.cgi?id=76855
1355
1356         Reviewed by Oliver Hunt.
1357
1358         To enable the profiler, set the JSC_CODE_PROFILING environment variable to
1359         1 (no tracing the C stack), 2 (trace one level of C code) or 3 (recursively
1360         trace all samples).
1361
1362         The profiler requires -fomit-frame-pointer to be removed from the build flags.
1363
1364         * JavaScriptCore.exp:
1365             - Removed an export.
1366         * JavaScriptCore.xcodeproj/project.pbxproj:
1367             - Added new files
1368         * bytecode/CodeBlock.cpp:
1369             - For baseline codeblocks, cache the result of canCompileWithDFG.
1370         * bytecode/CodeBlock.h:
1371             - For baseline codeblocks, cache the result of canCompileWithDFG.
1372         * jit/ExecutableAllocator.cpp:
1373         (JSC::ExecutableAllocator::initializeAllocator):
1374             - Notify the profiler when the allocator is created.
1375         (JSC::ExecutableAllocator::allocate):
1376             - Inform the allocated of the ownerUID.
1377         * jit/ExecutableAllocatorFixedVMPool.cpp:
1378         (JSC::ExecutableAllocator::initializeAllocator):
1379             - Notify the profiler when the allocator is created.
1380         (JSC::ExecutableAllocator::allocate):
1381             - Inform the allocated of the ownerUID.
1382         * jit/JITStubs.cpp:
1383             - If profiling, don't mask the return address in JIT code.
1384               (We do so to provide nicer backtraces in debug builds).
1385         * runtime/Completion.cpp:
1386         (JSC::evaluate):
1387             - Notify the profiler of script evaluations.
1388         * tools: Added.
1389         * tools/CodeProfile.cpp: Added.
1390         (JSC::symbolName):
1391             - Helper function to get the name of a symbol in the framework.
1392         (JSC::truncateTrace):
1393             - Helper to truncate traces into methods know to have uninformatively deep stacks.
1394         (JSC::CodeProfile::sample):
1395             - Record a stack trace classifying samples.
1396         (JSC::CodeProfile::report):
1397             - {Print profiler output.
1398         * tools/CodeProfile.h: Added.
1399             - new class, captures a set of samples associated with an evaluated script,
1400               and nested to record samples from subscripts.
1401         * tools/CodeProfiling.cpp: Added.
1402         (JSC::CodeProfiling::profilingTimer):
1403             - callback fired then a timer event occurs.
1404         (JSC::CodeProfiling::notifyAllocator):
1405             - called when the executable allocator is constructed.
1406         (JSC::CodeProfiling::getOwnerUIDForPC):
1407             - helper to lookup the codeblock from an address in JIT code
1408         (JSC::CodeProfiling::begin):
1409             - enter a profiling scope.
1410         (JSC::CodeProfiling::end):
1411             - exit a profiling scope.
1412         * tools/CodeProfiling.h: Added.
1413             - new class, instantialed from Completion to define a profiling scope.
1414         * tools/ProfileTreeNode.h: Added.
1415             - new class, used to construct a tree of samples.
1416         * tools/TieredMMapArray.h: Added.
1417             - new class, a malloc-free vector (can be used while the main thread is suspended,
1418               possibly holding the malloc heap lock).
1419         * wtf/MetaAllocator.cpp:
1420         (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
1421         (WTF::MetaAllocator::allocate):
1422             - Allow allocation handles to track information about their owner.
1423         * wtf/MetaAllocator.h:
1424         (MetaAllocator):
1425             - Allow allocation handles to track information about their owner.
1426         * wtf/MetaAllocatorHandle.h:
1427         (MetaAllocatorHandle):
1428         (WTF::MetaAllocatorHandle::ownerUID):
1429             - Allow allocation handles to track information about their owner.
1430         * wtf/OSAllocator.h:
1431         (WTF::OSAllocator::reallocateCommitted):
1432             - reallocate an existing, committed memory allocation.
1433
1434 2012-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>
1435
1436         Unreviewed, rolling out r106187.
1437         http://trac.webkit.org/changeset/106187
1438         https://bugs.webkit.org/show_bug.cgi?id=77276
1439
1440         The last rollout was a false charge. (Requested by morrita on
1441         #webkit).
1442
1443         * runtime/ExceptionHelpers.h:
1444         (InterruptedExecutionError):
1445         * runtime/JSBoundFunction.h:
1446         (JSBoundFunction):
1447         * runtime/RegExp.h:
1448         (RegExp):
1449         * runtime/RegExpMatchesArray.h:
1450         (RegExpMatchesArray):
1451
1452 2012-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>
1453
1454         Unreviewed, rolling out r106151.
1455         http://trac.webkit.org/changeset/106151
1456         https://bugs.webkit.org/show_bug.cgi?id=77275
1457
1458         may break windows build (Requested by morrita on #webkit).
1459
1460         * runtime/ExceptionHelpers.h:
1461         (InterruptedExecutionError):
1462         * runtime/JSBoundFunction.h:
1463         (JSBoundFunction):
1464         * runtime/RegExp.h:
1465         (RegExp):
1466         * runtime/RegExpMatchesArray.h:
1467         (RegExpMatchesArray):
1468
1469 2012-01-28  Filip Pizlo  <fpizlo@apple.com>
1470
1471         GC invoked while doing an old JIT property storage reallocation may lead
1472         to an object that refers to a dead structure
1473         https://bugs.webkit.org/show_bug.cgi?id=77273
1474         <rdar://problem/10770565>
1475
1476         Reviewed by Gavin Barraclough.
1477         
1478         The put_by_id transition was already saving the old structure by virtue of
1479         having the object on the stack, so that wasn't going to get deleted. But the
1480         new structure was unprotected in the transition. I've now changed the
1481         transition code to save the new structure, ensuring that the GC will know it
1482         to be marked if invoked from within put_by_id_transition_realloc.
1483
1484         * jit/JITPropertyAccess.cpp:
1485         (JSC::JIT::privateCompilePutByIdTransition):
1486         * jit/JITPropertyAccess32_64.cpp:
1487         (JSC::JIT::privateCompilePutByIdTransition):
1488         * jit/JITStubs.cpp:
1489         (JSC::DEFINE_STUB_FUNCTION):
1490         * jit/JITStubs.h:
1491         (JSC):
1492         ():
1493
1494 2012-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>
1495
1496         Unreviewed, rolling out r106167.
1497         http://trac.webkit.org/changeset/106167
1498         https://bugs.webkit.org/show_bug.cgi?id=77264
1499
1500         broke LayoutTests/fast/js/string-capitalization.html
1501         (Requested by msaboff on #webkit).
1502
1503         * runtime/StringPrototype.cpp:
1504         (JSC::stringProtoFuncToLowerCase):
1505         (JSC::stringProtoFuncToUpperCase):
1506         * wtf/text/StringImpl.cpp:
1507         (WTF::StringImpl::upper):
1508
1509 2012-01-27  Filip Pizlo  <fpizlo@apple.com>
1510
1511         Build fix for interpreter platforms.
1512
1513         * interpreter/AbstractPC.cpp:
1514         (JSC::AbstractPC::AbstractPC):
1515
1516 2012-01-27  Michael Saboff  <msaboff@apple.com>
1517
1518         StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
1519         https://bugs.webkit.org/show_bug.cgi?id=76647
1520
1521         Reviewed by Geoffrey Garen.
1522
1523         Changed stringProtoFuncToUpperCase to call StringImpl::upper() is a manor similar
1524         to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle the two
1525         8 bit characters that when converted to upper case become 16 bit characters.
1526
1527         * runtime/StringPrototype.cpp:
1528         (JSC::stringProtoFuncToLowerCase): Removed extra trailing whitespace.
1529         (JSC::stringProtoFuncToUpperCase):
1530         * wtf/text/StringImpl.cpp:
1531         (WTF::StringImpl::upper):
1532
1533 2012-01-27  Hajime Morita  <morrita@google.com>
1534
1535         [JSC] ThunkGenerators.cpp should hide its asm-defined symbols
1536         https://bugs.webkit.org/show_bug.cgi?id=77244
1537
1538         Reviewed by Filip Pizlo.
1539
1540         * jit/ThunkGenerators.cpp: Added HIDE_SYMBOLS()
1541         * wtf/InlineASM.h: Moved some duplicated macros from ThunkGenerators.cpp
1542
1543 2012-01-27  Simon Hausmann  <simon.hausmann@nokia.com>
1544
1545         [JSC] Asm-originated symbols should be marked as hidden
1546         https://bugs.webkit.org/show_bug.cgi?id=77150
1547
1548         Reviewed by Filip Pizlo.
1549
1550         * dfg/DFGOperations.cpp: The HIDE_SYMBOLS macros were present in the CPU(ARM) preprocessor branches,
1551         but they were missing in the CPU(X86) and the CPU(X86_64) cases.
1552
1553 2012-01-27  MORITA Hajime  <morrita@google.com>
1554
1555         [JSC] Some JS_EXPORTDATA may not be necessary.
1556         https://bugs.webkit.org/show_bug.cgi?id=77145
1557
1558         Reviewed by Darin Adler.
1559
1560         Removed JS_EXPORTDATA attributes whose attributing symbols are
1561         not exported on Mac port.
1562         
1563         * runtime/ExceptionHelpers.h:
1564         (InterruptedExecutionError):
1565         * runtime/JSBoundFunction.h:
1566         (JSBoundFunction):
1567         * runtime/RegExp.h:
1568         (RegExp):
1569         * runtime/RegExpMatchesArray.h:
1570         (RegExpMatchesArray):
1571
1572 2012-01-27  MORITA Hajime  <morrita@google.com>
1573
1574         [WTF] WTFString.h has some extra JS_EXPORT_PRIVATEs
1575         https://bugs.webkit.org/show_bug.cgi?id=77113
1576
1577         Reviewed by Darin Adler.
1578
1579         * wtf/text/WTFString.h: Removed some WTF_EXPORT_PRIVATE attributes which we don't need to export.
1580
1581 2012-01-27  Zeno Albisser  <zeno@webkit.org>
1582
1583         [Qt][Mac] Build fails after adding ICU support (r105997).
1584         https://bugs.webkit.org/show_bug.cgi?id=77118
1585
1586         Use Apple code path for unicode date formats on mac.
1587
1588         Reviewed by Tor Arne Vestbø.
1589
1590         * runtime/DatePrototype.cpp:
1591         ():
1592
1593 2012-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>
1594
1595         [GTK] Add a GKeyFile especialization to GOwnPtr
1596         https://bugs.webkit.org/show_bug.cgi?id=77191
1597
1598         Reviewed by Martin Robinson.
1599
1600         * wtf/gobject/GOwnPtr.cpp:
1601         (WTF::GKeyFile): Implement freeOwnedGPtr for GKeyFile.
1602         * wtf/gobject/GOwnPtr.h: Add GKeyFile template.
1603         * wtf/gobject/GTypedefs.h: Add forward declaration for GKeyFile.
1604
1605 2012-01-25  Yury Semikhatsky  <yurys@chromium.org>
1606
1607         Web Inspector: should be possible to open function declaration from script popover
1608         https://bugs.webkit.org/show_bug.cgi?id=76913
1609
1610         Added display function name and source location to the popover in scripts panel.
1611         Now when a function is hovered user can navigate to its definition.
1612
1613         Reviewed by Pavel Feldman.
1614
1615         * JavaScriptCore/JavaScriptCore.exp
1616         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1617         * runtime/JSFunction.h:
1618         (JSFunction):
1619
1620 2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>
1621
1622         [wx] Unreviewed. Build fix, wx uses the Mac ICU headers so we must match Mac behavior.
1623         
1624         * runtime/DatePrototype.cpp:
1625         ():
1626
1627 2012-01-26  Mark Hahnenberg  <mhahnenberg@apple.com>
1628
1629         Merge AllocationSpace into MarkedSpace
1630         https://bugs.webkit.org/show_bug.cgi?id=77116
1631
1632         Reviewed by Geoffrey Garen.
1633
1634         Merging AllocationSpace and MarkedSpace in preparation for future refactoring/enhancement to 
1635         MarkedSpace allocation.
1636
1637         * CMakeLists.txt:
1638         * GNUmakefile.list.am:
1639         * JavaScriptCore.exp:
1640         * JavaScriptCore.gypi:
1641         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1642         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1643         * JavaScriptCore.xcodeproj/project.pbxproj:
1644         * Target.pri:
1645         * heap/AllocationSpace.cpp: Removed.
1646         * heap/AllocationSpace.h: Removed.
1647         * heap/BumpSpace.h:
1648         (BumpSpace):
1649         * heap/Heap.h:
1650         (JSC::Heap::objectSpace):
1651         (Heap):
1652         ():
1653         * heap/HeapBlock.h:
1654         ():
1655         * heap/MarkedSpace.cpp:
1656         (JSC::MarkedSpace::tryAllocateHelper):
1657         (JSC):
1658         (JSC::MarkedSpace::tryAllocate):
1659         (JSC::MarkedSpace::allocateSlowCase):
1660         (JSC::MarkedSpace::allocateBlock):
1661         (JSC::MarkedSpace::freeBlocks):
1662         (TakeIfUnmarked):
1663         (JSC::TakeIfUnmarked::TakeIfUnmarked):
1664         (JSC::TakeIfUnmarked::operator()):
1665         (JSC::TakeIfUnmarked::returnValue):
1666         (JSC::MarkedSpace::shrink):
1667         (GatherDirtyCells):
1668         (JSC::GatherDirtyCells::returnValue):
1669         (JSC::GatherDirtyCells::GatherDirtyCells):
1670         (JSC::GatherDirtyCells::operator()):
1671         (JSC::MarkedSpace::gatherDirtyCells):
1672         * heap/MarkedSpace.h:
1673         (MarkedSpace):
1674         (JSC::MarkedSpace::blocks):
1675         (JSC::MarkedSpace::forEachCell):
1676         (JSC):
1677         (JSC::MarkedSpace::allocate):
1678
1679 2012-01-26  Oliver Hunt  <oliver@apple.com>
1680
1681         MSVC bug fix.
1682         <rdar://problem/10703671> MSVC generates bad code for enum compare.
1683
1684         RS=Geoff
1685
1686         Make bitfield large enough to work around MSVC's desire to make enums
1687         signed types.
1688
1689         * bytecode/CallLinkInfo.h:
1690         (CallLinkInfo):
1691
1692 2012-01-26  Filip Pizlo  <fpizlo@apple.com>
1693
1694         All DFG helpers that may call out to arbitrary JS code must know where they
1695         were called from due to inlining and call stack walking
1696         https://bugs.webkit.org/show_bug.cgi?id=77070
1697         <rdar://problem/10750834>
1698
1699         Reviewed by Geoff Garen.
1700         
1701         Changed the DFG to always record a code origin index in the tag of the argument
1702         count (which we previously left blank for the benefit of LLInt, but is still
1703         otherwise unused by the DFG), so that if we ever need to walk the stack accurately
1704         we know where to start. In particular, if the current ExecState* points several
1705         semantic call frames away from the true semantic call frame because we had
1706         performed inlining, having the code origin index recorded means that we can reify
1707         those call frames as necessary to give runtime/library code an accurate view of
1708         the current JS state.
1709         
1710         This required several large but mechanical changes:
1711         
1712         - Calling a function from the DFG now plants a store32 instruction to store the
1713           code origin index. But the indices of code origins were previously picked by
1714           the DFG::JITCompiler after code generation completed. I changed this somewhat;
1715           even though the code origins are put into the CodeBlock after code gen, the
1716           code gen now knows a priori what their indices will be. Extensive assertions
1717           are in place to ensure that the two don't get out of sync, in the form of the
1718           DFG::CallBeginToken. Note that this mechanism has almost no effect on JS calls;
1719           those don't need the code origin index set in the call frame because we can get
1720           it by doing a binary search on the return PC.
1721
1722         - Stack walking now always calls trueCallFrame() first before beginning the walk,
1723           since even the top call frame may be wrong. It still calls trueCallerFrame() as
1724           before to get to the next frame, though trueCallerFrame() is now mostly a
1725           wrapper around callerFrame()->trueCallFrame().
1726           
1727         - Because the mechanism for getting the code origin of a call frame is bimodal
1728           (either the call frame knows its code origin because the code origin index was
1729           set, or it's necessary to use the callee frame's return PC), I put in extra
1730           mechanisms to determine whether your caller, or your callee, corresponds to
1731           a call out of C++ code. Previously we just had the host call flag, but this is
1732           insufficient as it does not cover the case of someone calling JSC::call(). But
1733           luckily we can determine this just by looking at the return PC: if the return
1734           PC is in range of the ctiTrampiline, then two things are true: this call
1735           frame's PC will tell you nothing about where you came from in your caller, and
1736           the caller already knows where it's at because it must have set the code origin
1737           index (unless it's not DFG code, in which case we don't care because there is
1738           no inlining to worry about).
1739           
1740         - During testing this revealed a simple off-by-one goof in DFG::ByteCodeParser's
1741           inlining code, so I fixed it.
1742
1743         - Finally because I was tired of doing random #if's for checking if I should be
1744           passing around an Instruction* or a ReturnAddressPtr, I created a class called
1745           AbstractPC that holds whatever notion of a PC is appropriate for the current
1746           execution environment. It's designed to work gracefully even if both the
1747           interpreter and the JIT are compiled in, and should integrate nicely with the
1748           LLInt.
1749           
1750         This is neutral on all benchmarks and fixes some nasty corner-case regressions of
1751         evil code that uses combinations of getters/setters and function.arguments.
1752
1753         * CMakeLists.txt:
1754         * GNUmakefile.list.am:
1755         * JavaScriptCore.exp:
1756         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1757         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1758         * JavaScriptCore.xcodeproj/project.pbxproj:
1759         * Target.pri:
1760         * bytecode/CodeBlock.h:
1761         (JSC::CodeBlock::codeOrigin):
1762         (CodeBlock):
1763         * dfg/DFGByteCodeParser.cpp:
1764         (JSC::DFG::ByteCodeParser::handleInlining):
1765         * dfg/DFGJITCompiler.cpp:
1766         (JSC::DFG::JITCompiler::link):
1767         * dfg/DFGJITCompiler.h:
1768         (CallBeginToken):
1769         (JSC::DFG::CallBeginToken::CallBeginToken):
1770         (JSC::DFG::CallBeginToken::assertCodeOriginIndex):
1771         (JSC::DFG::CallBeginToken::assertNoCodeOriginIndex):
1772         (DFG):
1773         (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
1774         (CallExceptionRecord):
1775         (JSC::DFG::JITCompiler::JITCompiler):
1776         (JITCompiler):
1777         (JSC::DFG::JITCompiler::nextCallBeginToken):
1778         (JSC::DFG::JITCompiler::beginCall):
1779         (JSC::DFG::JITCompiler::notifyCall):
1780         (JSC::DFG::JITCompiler::addExceptionCheck):
1781         (JSC::DFG::JITCompiler::addFastExceptionCheck):
1782         * dfg/DFGOperations.cpp:
1783         ():
1784         * dfg/DFGRepatch.cpp:
1785         (JSC::DFG::tryBuildGetByIDList):
1786         * dfg/DFGSpeculativeJIT.h:
1787         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
1788         * dfg/DFGSpeculativeJIT32_64.cpp:
1789         (JSC::DFG::SpeculativeJIT::emitCall):
1790         * dfg/DFGSpeculativeJIT64.cpp:
1791         (JSC::DFG::SpeculativeJIT::emitCall):
1792         * interpreter/AbstractPC.cpp: Added.
1793         (JSC):
1794         (JSC::AbstractPC::AbstractPC):
1795         * interpreter/AbstractPC.h: Added.
1796         (JSC):
1797         (AbstractPC):
1798         (JSC::AbstractPC::AbstractPC):
1799         (JSC::AbstractPC::hasJITReturnAddress):
1800         (JSC::AbstractPC::jitReturnAddress):
1801         (JSC::AbstractPC::hasInterpreterReturnAddress):
1802         (JSC::AbstractPC::interpreterReturnAddress):
1803         (JSC::AbstractPC::isSet):
1804         (JSC::AbstractPC::operator!):
1805         ():
1806         * interpreter/CallFrame.cpp:
1807         (JSC):
1808         (JSC::CallFrame::trueCallFrame):
1809         (JSC::CallFrame::trueCallerFrame):
1810         * interpreter/CallFrame.h:
1811         (JSC::ExecState::abstractReturnPC):
1812         (JSC::ExecState::codeOriginIndexForDFGWithInlining):
1813         (ExecState):
1814         (JSC::ExecState::trueCallFrame):
1815         (JSC::ExecState::trueCallFrameFromVMCode):
1816         * interpreter/Interpreter.cpp:
1817         (JSC::Interpreter::retrieveArgumentsFromVMCode):
1818         (JSC::Interpreter::retrieveCallerFromVMCode):
1819         (JSC::Interpreter::findFunctionCallFrameFromVMCode):
1820         * interpreter/Interpreter.h:
1821         (Interpreter):
1822         ():
1823         * jit/JITStubs.cpp:
1824         (JSC):
1825         ():
1826         * jit/JITStubs.h:
1827         (JSC):
1828         (JSC::returnAddressIsInCtiTrampoline):
1829         * runtime/JSFunction.cpp:
1830         (JSC::JSFunction::argumentsGetter):
1831         (JSC::JSFunction::callerGetter):
1832         (JSC::JSFunction::getOwnPropertyDescriptor):
1833
1834 2012-01-26  Peter Varga  <pvarga@webkit.org>
1835
1836         Fix build when VERBOSE_SPECULATION_FAILURE is enabled in DFG
1837         https://bugs.webkit.org/show_bug.cgi?id=77104
1838
1839         Reviewed by Filip Pizlo.
1840
1841         * dfg/DFGOperations.cpp:
1842         ():
1843
1844 2012-01-26  Michael Saboff  <msaboff@apple.com>
1845
1846         String::latin1() should take advantage of 8 bit strings
1847         https://bugs.webkit.org/show_bug.cgi?id=76646
1848
1849         Reviewed by Geoffrey Garen.
1850
1851         * wtf/text/WTFString.cpp:
1852         (WTF::String::latin1): For 8 bit strings, use existing buffer
1853         without conversion.
1854
1855 2012-01-26  Michael Saboff  <msaboff@apple.com>
1856
1857         Dromaeo tests usage of StringImpl find routines cause 8->16 bit conversions
1858         https://bugs.webkit.org/show_bug.cgi?id=76645
1859
1860         Reviewed by Geoffrey Garen.
1861
1862         * wtf/text/StringImpl.cpp:
1863         (WTF::equalIgnoringCase): New LChar version.
1864         (WTF::findInner): New helper function.
1865         (WTF::StringImpl::find): Added 8 bit path.
1866         (WTF::reverseFindInner): New helper funciton.
1867         (WTF::StringImpl::reverseFind): Added 8 bit path.
1868         (WTF::StringImpl::reverseFindIgnoringCase): Added 8 bit path.
1869         * wtf/text/StringImpl.h:
1870         (WTF):
1871
1872 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
1873
1874         [Qt][Win] One more speculative buildfix after r105970.
1875
1876         * JavaScriptCore.pri:
1877
1878 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
1879
1880         [Qt][Win] Speculative buildfix after r105970.
1881
1882         * JavaScriptCore.pri: Link lgdi for DeleteObject() and DeleteDC().
1883
1884 2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>
1885
1886         Unreviewed, rolling out r105982.
1887         http://trac.webkit.org/changeset/105982
1888         https://bugs.webkit.org/show_bug.cgi?id=77090
1889
1890         breaks the world (Requested by WildFox on #webkit).
1891
1892         * wtf/MainThread.cpp:
1893         (WTF):
1894         * wtf/Platform.h:
1895         * wtf/mac/MainThreadMac.mm:
1896         (WTF):
1897         (WTF::registerGCThread):
1898         (WTF::isMainThreadOrGCThread):
1899
1900 2012-01-26  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
1901
1902         [Qt] GC should be parallel on Qt platform
1903         https://bugs.webkit.org/show_bug.cgi?id=73309
1904
1905         Reviewed by Zoltan Herczeg.
1906
1907         These changes made the parallel gc feature available for Qt port.
1908         The implementation of "registerGCThread" and "isMainThreadOrGCThread"
1909         is moved from MainThreadMac.mm to the common MainThread.cpp to make
1910         them available for other platforms.
1911
1912         Measurement results:
1913         V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
1914         WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
1915         V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]
1916
1917         Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
1918
1919         * wtf/MainThread.cpp:
1920         (WTF):
1921         (WTF::registerGCThread):
1922         (WTF::isMainThreadOrGCThread):
1923         * wtf/Platform.h:
1924         * wtf/mac/MainThreadMac.mm:
1925
1926 2012-01-26  Andy Estes  <aestes@apple.com>
1927
1928         REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
1929         https://bugs.webkit.org/show_bug.cgi?id=77073
1930
1931         Reviewed by Ryosuke Niwa.
1932         
1933         r105555 changed PLATFORM(WIN) to OS(WIN), but WTF_OS_WIN isn't defined.
1934         This should have been changed to OS(WINDOWS). This causes the
1935         preprocessor to strip out Win32 data type overrides for deleteOwnedPtr,
1936         causing allocations made by Win32 to be deleted by fastmalloc.
1937
1938         * wtf/OwnPtrCommon.h:
1939         (WTF): Use OS(WINDOWS) instead of OS(WIN).
1940
1941 2012-01-25  Mark Rowe  <mrowe@apple.com>
1942
1943         Attempted Mac build fix after r105939.
1944
1945         * runtime/DatePrototype.cpp: Don't #include unicode/udat.h on Mac or iOS.
1946         It isn't used on these platforms and isn't available in the ICU headers
1947         for Mac.
1948
1949 2012-01-25  Mark Rowe  <mrowe@apple.com>
1950
1951         Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.
1952
1953         <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH
1954
1955         Reviewed by David Kilzer.
1956
1957         * Configurations/Base.xcconfig: Define NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR, which contains
1958         the path where JavaScriptCore is normally installed. Update JAVASCRIPTCORE_FRAMEWORKS_DIR
1959         to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.
1960         * Configurations/JavaScriptCore.xcconfig: Always set the framework's install name based on
1961         the normal framework location. This prevents an incorrect install name from being used when
1962         installing in to the staged frameworks directory.
1963
1964 2012-01-25  Eli Fidler  <efidler@rim.com>
1965
1966         Implement Date.toLocaleString() using ICU
1967         https://bugs.webkit.org/show_bug.cgi?id=76714
1968
1969         Reviewed by Darin Adler.
1970
1971         * runtime/DatePrototype.cpp:
1972         (JSC::formatLocaleDate):
1973
1974 2012-01-25  Hajime Morita  <morrita@google.com>
1975
1976         ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
1977         https://bugs.webkit.org/show_bug.cgi?id=76863
1978
1979         Reviewed by Dimitri Glazkov.
1980
1981         Added a feature flag.
1982
1983         * Configurations/FeatureDefines.xcconfig:
1984
1985 2012-01-25  Yong Li  <yoli@rim.com>
1986
1987         [BlackBerry] Implement OSAllocator::commit/decommit.
1988         BlackBerry port should support virtual memory decommiting.
1989         https://bugs.webkit.org/show_bug.cgi?id=77013
1990
1991         Reviewed by Rob Buis.
1992
1993         * wtf/OSAllocatorPosix.cpp:
1994         (WTF::OSAllocator::reserveUncommitted):
1995         (WTF::OSAllocator::commit):
1996         (WTF::OSAllocator::decommit):
1997         * wtf/Platform.h:
1998
1999 2012-01-24  Oliver Hunt  <oliver@apple.com>
2000
2001         Make DFG update topCallFrame
2002         https://bugs.webkit.org/show_bug.cgi?id=76969
2003
2004         Reviewed by Filip Pizlo.
2005
2006         Add NativeCallFrameTracer to manage topCallFrame assignment
2007         in the DFG operations, and make use of it.
2008
2009         * dfg/DFGOperations.cpp:
2010         (JSC::DFG::operationPutByValInternal):
2011         ():
2012         * interpreter/Interpreter.h:
2013         (JSC):
2014         (NativeCallFrameTracer):
2015         (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
2016
2017 2012-01-24  Filip Pizlo  <fpizlo@apple.com>
2018
2019         Inlining breaks call frame walking when the walking is done from outside the inlinee,
2020         but inside a code block that had inlining
2021         https://bugs.webkit.org/show_bug.cgi?id=76978
2022         <rdar://problem/10720904>
2023
2024         Reviewed by Oliver Hunt.
2025
2026         * bytecode/CodeBlock.h:
2027         (JSC::CodeBlock::codeOriginForReturn):
2028         * interpreter/CallFrame.cpp:
2029         (JSC::CallFrame::trueCallerFrame):
2030
2031 2012-01-24  Gavin Barraclough  <barraclough@apple.com>
2032
2033         https://bugs.webkit.org/show_bug.cgi?id=76855
2034         Implement a JIT-code aware sampling profiler for JSC
2035
2036         Reviewed by Oliver Hunt.
2037
2038         Add support to MetaAllocator.cpp to track all live handles in a map,
2039         allowing lookup based on any address within the allocation.
2040
2041         * wtf/MetaAllocator.cpp:
2042         (WTF::MetaAllocatorTracker::notify):
2043         (WTF::MetaAllocatorTracker::release):
2044             - Track live handle objects in a map.
2045         (WTF::MetaAllocator::release):
2046             - Removed support for handles with null m_allocator (no longer used).
2047             - Notify the tracker of handles being released.
2048         (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
2049             - Moved functionality out into MetaAllocator::release.
2050         (WTF::MetaAllocatorHandle::shrink):
2051             - Removed support for handles with null m_allocator (no longer used).
2052         (WTF::MetaAllocator::MetaAllocator):
2053             - Initialize m_tracker.
2054         (WTF::MetaAllocator::allocate):
2055             - Notify the tracker of new allocations.
2056         * wtf/MetaAllocator.h:
2057         (WTF::MetaAllocatorTracker::find):
2058             - Lookup a MetaAllocatorHandle based on an address inside the allocation.
2059         (WTF::MetaAllocator::trackAllocations):
2060             - Register a callback object to track allocation state.
2061         * wtf/MetaAllocatorHandle.h:
2062             - Remove unused createSelfManagedHandle/constructor.
2063         (WTF::MetaAllocatorHandle::key):
2064             - Added, for use in RedBlackTree.
2065
2066 2012-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>
2067
2068         Use copying collector for out-of-line JSObject property storage
2069         https://bugs.webkit.org/show_bug.cgi?id=76665
2070
2071         Reviewed by Geoffrey Garen.
2072
2073         * runtime/JSObject.cpp:
2074         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
2075         Also added a temporary variable to avoid warnings from GCC.
2076         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
2077         operator new. Also added a temporary variable to avoid warnings from GCC.
2078         * runtime/JSObject.h:
2079
2080 2012-01-24  Geoffrey Garen  <ggaren@apple.com>
2081
2082         JSValue::toString() should return a JSString* instead of a UString
2083         https://bugs.webkit.org/show_bug.cgi?id=76861
2084
2085         Fixed two failing layout tests after my last patch.
2086
2087         Reviewed by Gavin Barraclough.
2088
2089         * runtime/ArrayPrototype.cpp:
2090         (JSC::arrayProtoFuncSort): Call value() after calling toString(), as
2091         in all other cases.
2092         
2093         I missed this case because the JSString* type has a valid operator<,
2094         so the compiler didn't complain.
2095
2096 2012-01-24  Kenichi Ishibashi  <bashi@chromium.org>
2097
2098         [V8] Add Uint8ClampedArray support
2099         https://bugs.webkit.org/show_bug.cgi?id=76803
2100
2101         Reviewed by Kenneth Russell.
2102
2103         * wtf/ArrayBufferView.h:
2104         (WTF::ArrayBufferView::isUnsignedByteClampedArray): Added.
2105         * wtf/Uint8ClampedArray.h:
2106         (WTF::Uint8ClampedArray::isUnsignedByteClampedArray): Overridden to return true.
2107
2108 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
2109
2110         [GTK] Add WebKitDownload to WebKit2 GTK+ API
2111         https://bugs.webkit.org/show_bug.cgi?id=72949
2112
2113         Reviewed by Martin Robinson.
2114
2115         * wtf/gobject/GOwnPtr.cpp:
2116         (WTF::GTimer): Use g_timer_destroy() to free a GTimer.
2117         * wtf/gobject/GOwnPtr.h: Add GTimer template.
2118         * wtf/gobject/GTypedefs.h: Add GTimer forward declaration.
2119
2120 2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>
2121
2122         Unreviewed build fix for Qt LinuxSH4 build after r105698.
2123
2124         * interpreter/Interpreter.cpp:
2125         (JSC::Interpreter::privateExecute):
2126
2127 2012-01-23  Geoffrey Garen  <ggaren@apple.com>
2128
2129         JSValue::toString() should return a JSString* instead of a UString
2130         https://bugs.webkit.org/show_bug.cgi?id=76861
2131
2132         Reviewed by Gavin Barraclough.
2133         
2134         This makes the common case -- toString() on a string -- faster and
2135         inline-able. (Not a measureable speedup, but we can now remove a bunch
2136         of duplicate hand-rolled code for this optimization.)
2137         
2138         This also clarifies the boundary between "C++ strings" and "JS strings".
2139         
2140         In all cases other than true, false, null, undefined, and multi-digit
2141         numbers, the JS runtime was just retrieving a UString from a JSString,
2142         so returning a JSString* is strictly better. In the other cases, we can
2143         optimize to avoid creating a new JSString if we care to, but it doesn't
2144         seem to be a big deal.
2145
2146         * JavaScriptCore.exp: Export!
2147         
2148         * jsc.cpp:
2149         (functionPrint):
2150         (functionDebug):
2151         (functionRun):
2152         (functionLoad):
2153         (functionCheckSyntax):
2154         (runWithScripts):
2155         (runInteractive):
2156         * API/JSValueRef.cpp:
2157         (JSValueToStringCopy):
2158         * bytecode/CodeBlock.cpp:
2159         (JSC::valueToSourceString): Call value() after calling toString(), to
2160         convert from "JS string" (JSString*) to "C++ string" (UString), since
2161         toString() no longer returns a "C++ string".
2162
2163         * dfg/DFGOperations.cpp:
2164         (JSC::DFG::operationValueAddNotNumber):
2165         * jit/JITStubs.cpp:
2166         (op_add): Updated for removal of toPrimitiveString():
2167         all '+' operands can use toString(), except for object operands, which
2168         need to take a slow path to call toPrimitive().
2169
2170         * runtime/ArrayPrototype.cpp:
2171         (JSC::arrayProtoFuncToString):
2172         (JSC::arrayProtoFuncToLocaleString):
2173         (JSC::arrayProtoFuncJoin):
2174         (JSC::arrayProtoFuncPush):
2175         * runtime/CommonSlowPaths.h:
2176         (JSC::CommonSlowPaths::opIn):
2177         * runtime/DateConstructor.cpp:
2178         (JSC::dateParse):
2179         * runtime/DatePrototype.cpp:
2180         (JSC::formatLocaleDate): Call value() after calling toString(), as above.
2181
2182         * runtime/ErrorInstance.h:
2183         (JSC::ErrorInstance::create): Simplified down to one canonical create()
2184         function, to make string handling easier.
2185
2186         * runtime/ErrorPrototype.cpp:
2187         (JSC::errorProtoFuncToString):
2188         * runtime/ExceptionHelpers.cpp:
2189         (JSC::createInvalidParamError):
2190         (JSC::createNotAConstructorError):
2191         (JSC::createNotAFunctionError):
2192         (JSC::createNotAnObjectError):
2193         * runtime/FunctionConstructor.cpp:
2194         (JSC::constructFunctionSkippingEvalEnabledCheck):
2195         * runtime/FunctionPrototype.cpp:
2196         (JSC::functionProtoFuncBind):
2197         * runtime/JSArray.cpp:
2198         (JSC::JSArray::sort): Call value() after calling toString(), as above.
2199
2200         * runtime/JSCell.cpp:
2201         * runtime/JSCell.h: Removed JSCell::toString() because JSValue does this
2202         job now. Doing it in JSCell is slower (requires extra type checking), and
2203         creates the misimpression that language-defined toString() behavior is
2204         an implementation detail of JSCell.
2205         
2206         * runtime/JSGlobalObjectFunctions.cpp:
2207         (JSC::encode):
2208         (JSC::decode):
2209         (JSC::globalFuncEval):
2210         (JSC::globalFuncParseInt):
2211         (JSC::globalFuncParseFloat):
2212         (JSC::globalFuncEscape):
2213         (JSC::globalFuncUnescape): Call value() after calling toString(), as above.
2214
2215         * runtime/JSONObject.cpp:
2216         (JSC::unwrapBoxedPrimitive):
2217         (JSC::Stringifier::Stringifier):
2218         (JSC::JSONProtoFuncParse): Removed some manual optimization that toString()
2219         takes care of.
2220
2221         * runtime/JSObject.cpp:
2222         (JSC::JSObject::toString):
2223         * runtime/JSObject.h: Updated to return JSString*.
2224
2225         * runtime/JSString.cpp:
2226         * runtime/JSString.h:
2227         (JSC::JSValue::toString): Removed, since I removed JSCell::toString().
2228
2229         * runtime/JSValue.cpp:
2230         (JSC::JSValue::toStringSlowCase): Removed toPrimitiveString(), and re-
2231         spawned toStringSlowCase() from its zombie corpse, since toPrimitiveString()
2232         basically did what we want all the time. (Note that the toPrimitive()
2233         preference changes from NoPreference to PreferString, because that's
2234         how ToString is defined in the language. op_add does not want this behavior.)
2235
2236         * runtime/NumberPrototype.cpp:
2237         (JSC::numberProtoFuncToString):
2238         (JSC::numberProtoFuncToLocaleString): A little simpler, now that toString()
2239         returns a JSString*.
2240
2241         * runtime/ObjectConstructor.cpp:
2242         (JSC::objectConstructorGetOwnPropertyDescriptor):
2243         (JSC::objectConstructorDefineProperty):
2244         * runtime/ObjectPrototype.cpp:
2245         (JSC::objectProtoFuncHasOwnProperty):
2246         (JSC::objectProtoFuncDefineGetter):
2247         (JSC::objectProtoFuncDefineSetter):
2248         (JSC::objectProtoFuncLookupGetter):
2249         (JSC::objectProtoFuncLookupSetter):
2250         (JSC::objectProtoFuncPropertyIsEnumerable): More calls to value(), as above.
2251
2252         * runtime/Operations.cpp:
2253         (JSC::jsAddSlowCase): Need to check for object before taking the toString()
2254         fast path becuase adding an object to a string requires calling toPrimitive()
2255         on the object, not toString(). (They differ in their preferred conversion
2256         type.)
2257
2258         * runtime/Operations.h:
2259         (JSC::jsString):
2260         (JSC::jsStringFromArguments): This code gets simpler, now that toString()
2261         does the right thing.
2262
2263         (JSC::jsAdd): Now checks for object, just like jsAddSlowCase().
2264
2265         * runtime/RegExpConstructor.cpp:
2266         (JSC::setRegExpConstructorInput):
2267         (JSC::constructRegExp):
2268         * runtime/RegExpObject.cpp:
2269         (JSC::RegExpObject::match):
2270         * runtime/RegExpPrototype.cpp:
2271         (JSC::regExpProtoFuncCompile):
2272         (JSC::regExpProtoFuncToString): More calls to value(), as above.
2273
2274         * runtime/StringConstructor.cpp:
2275         (JSC::constructWithStringConstructor):
2276         (JSC::callStringConstructor): This code gets simpler, now that toString()
2277         does the right thing.
2278
2279         * runtime/StringPrototype.cpp:
2280         (JSC::replaceUsingRegExpSearch):
2281         (JSC::replaceUsingStringSearch):
2282         (JSC::stringProtoFuncReplace):
2283         (JSC::stringProtoFuncCharAt):
2284         (JSC::stringProtoFuncCharCodeAt):
2285         (JSC::stringProtoFuncConcat):
2286         (JSC::stringProtoFuncIndexOf):
2287         (JSC::stringProtoFuncLastIndexOf):
2288         (JSC::stringProtoFuncMatch):
2289         (JSC::stringProtoFuncSearch):
2290         (JSC::stringProtoFuncSlice):
2291         (JSC::stringProtoFuncSplit):
2292         (JSC::stringProtoFuncSubstr):
2293         (JSC::stringProtoFuncSubstring):
2294         (JSC::stringProtoFuncToLowerCase):
2295         (JSC::stringProtoFuncToUpperCase):
2296         (JSC::stringProtoFuncLocaleCompare):
2297         (JSC::stringProtoFuncBig):
2298         (JSC::stringProtoFuncSmall):
2299         (JSC::stringProtoFuncBlink):
2300         (JSC::stringProtoFuncBold):
2301         (JSC::stringProtoFuncFixed):
2302         (JSC::stringProtoFuncItalics):
2303         (JSC::stringProtoFuncStrike):
2304         (JSC::stringProtoFuncSub):
2305         (JSC::stringProtoFuncSup):
2306         (JSC::stringProtoFuncFontcolor):
2307         (JSC::stringProtoFuncFontsize):
2308         (JSC::stringProtoFuncAnchor):
2309         (JSC::stringProtoFuncLink):
2310         (JSC::trimString): Some of this code gets simpler, now that toString()
2311         does the right thing. More calls to value(), as above.
2312
2313 2012-01-23  Luke Macpherson   <macpherson@chromium.org>
2314
2315         Unreviewed, rolling out r105676.
2316         http://trac.webkit.org/changeset/105676
2317         https://bugs.webkit.org/show_bug.cgi?id=76665
2318
2319         Breaks build on max due to compile warnings.
2320
2321         * runtime/JSObject.cpp:
2322         (JSC::JSObject::finalize):
2323         (JSC::JSObject::visitChildren):
2324         (JSC::JSObject::allocatePropertyStorage):
2325         * runtime/JSObject.h:
2326
2327 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2328
2329         Use copying collector for out-of-line JSObject property storage
2330         https://bugs.webkit.org/show_bug.cgi?id=76665
2331
2332         Reviewed by Geoffrey Garen.
2333
2334         * runtime/JSObject.cpp:
2335         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
2336         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
2337         operator new.
2338         * runtime/JSObject.h:
2339
2340 2012-01-23  Brian Weinstein  <bweinstein@apple.com>
2341
2342         More build fixing after r105646.
2343
2344         * JavaScriptCore.exp:
2345
2346 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
2347
2348         https://bugs.webkit.org/show_bug.cgi?id=76855
2349         Implement a JIT-code aware sampling profiler for JSC
2350
2351         Reviewed by Geoff Garen.
2352
2353         Step 2: generalize RedBlackTree. The profiler is going to want tio use
2354         a RedBlackTree, allow this class to work with subclasses of
2355         RedBlackTree::Node, Node should not need to know the names of the m_key
2356         and m_value fields (the subclass can provide a key() accessor), and
2357         RedBlackTree does not need to know anything about ValueType.
2358
2359         * JavaScriptCore.exp:
2360         * wtf/MetaAllocator.cpp:
2361         (WTF::MetaAllocator::findAndRemoveFreeSpace):
2362         (WTF::MetaAllocator::debugFreeSpaceSize):
2363         (WTF::MetaAllocator::addFreeSpace):
2364         * wtf/MetaAllocator.h:
2365         (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
2366         (WTF::MetaAllocator::FreeSpaceNode::key):
2367         * wtf/MetaAllocatorHandle.h:
2368         (WTF::MetaAllocatorHandle::key):
2369         * wtf/RedBlackTree.h:
2370         (WTF::RedBlackTree::Node::successor):
2371         (WTF::RedBlackTree::Node::predecessor):
2372         (WTF::RedBlackTree::Node::parent):
2373         (WTF::RedBlackTree::Node::setParent):
2374         (WTF::RedBlackTree::Node::left):
2375         (WTF::RedBlackTree::Node::setLeft):
2376         (WTF::RedBlackTree::Node::right):
2377         (WTF::RedBlackTree::Node::setRight):
2378         (WTF::RedBlackTree::insert):
2379         (WTF::RedBlackTree::remove):
2380         (WTF::RedBlackTree::findExact):
2381         (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
2382         (WTF::RedBlackTree::findGreatestLessThanOrEqual):
2383         (WTF::RedBlackTree::first):
2384         (WTF::RedBlackTree::last):
2385         (WTF::RedBlackTree::size):
2386         (WTF::RedBlackTree::treeMinimum):
2387         (WTF::RedBlackTree::treeMaximum):
2388         (WTF::RedBlackTree::treeInsert):
2389         (WTF::RedBlackTree::leftRotate):
2390         (WTF::RedBlackTree::rightRotate):
2391         (WTF::RedBlackTree::removeFixup):
2392
2393 2012-01-23  Andy Estes  <aestes@apple.com>
2394
2395         Fix the build after r105635.
2396
2397         * JavaScriptCore.exp:
2398
2399 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2400
2401         Remove StackBounds from JSGlobalData
2402         https://bugs.webkit.org/show_bug.cgi?id=76310
2403
2404         Reviewed by Sam Weinig.
2405
2406         Removed StackBounds and the stack() function from JSGlobalData since it no 
2407         longer accessed any members of JSGlobalData.
2408
2409         * bytecompiler/BytecodeGenerator.cpp:
2410         (JSC::BytecodeGenerator::BytecodeGenerator):
2411         * heap/MachineStackMarker.cpp:
2412         (JSC::MachineThreads::addCurrentThread):
2413         (JSC::MachineThreads::gatherFromCurrentThread):
2414         * parser/Parser.cpp:
2415         (JSC::::Parser):
2416         * runtime/JSGlobalData.cpp:
2417         (JSC::JSGlobalData::JSGlobalData):
2418         * runtime/JSGlobalData.h:
2419
2420 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
2421
2422         Implement a JIT-code aware sampling profiler for JSC
2423         https://bugs.webkit.org/show_bug.cgi?id=76855
2424
2425         Rubber stanmped by Geoff Garen.
2426
2427         Mechanical change - pass CodeBlock through to the executable allocator,
2428         such that we will be able to map ranges of JIT code back to their owner.
2429
2430         * assembler/ARMAssembler.cpp:
2431         (JSC::ARMAssembler::executableCopy):
2432         * assembler/ARMAssembler.h:
2433         * assembler/AssemblerBuffer.h:
2434         (JSC::AssemblerBuffer::executableCopy):
2435         * assembler/AssemblerBufferWithConstantPool.h:
2436         (JSC::AssemblerBufferWithConstantPool::executableCopy):
2437         * assembler/LinkBuffer.h:
2438         (JSC::LinkBuffer::LinkBuffer):
2439         (JSC::LinkBuffer::linkCode):
2440         * assembler/MIPSAssembler.h:
2441         (JSC::MIPSAssembler::executableCopy):
2442         * assembler/SH4Assembler.h:
2443         (JSC::SH4Assembler::executableCopy):
2444         * assembler/X86Assembler.h:
2445         (JSC::X86Assembler::executableCopy):
2446         (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
2447         * dfg/DFGJITCompiler.cpp:
2448         (JSC::DFG::JITCompiler::compile):
2449         (JSC::DFG::JITCompiler::compileFunction):
2450         * dfg/DFGOSRExitCompiler.cpp:
2451         * dfg/DFGRepatch.cpp:
2452         (JSC::DFG::generateProtoChainAccessStub):
2453         (JSC::DFG::tryCacheGetByID):
2454         (JSC::DFG::tryBuildGetByIDList):
2455         (JSC::DFG::tryCachePutByID):
2456         * dfg/DFGThunks.cpp:
2457         (JSC::DFG::osrExitGenerationThunkGenerator):
2458         * jit/ExecutableAllocator.cpp:
2459         (JSC::ExecutableAllocator::allocate):
2460         * jit/ExecutableAllocator.h:
2461         * jit/ExecutableAllocatorFixedVMPool.cpp:
2462         (JSC::ExecutableAllocator::allocate):
2463         * jit/JIT.cpp:
2464         (JSC::JIT::privateCompile):
2465         * jit/JITOpcodes.cpp:
2466         (JSC::JIT::privateCompileCTIMachineTrampolines):
2467         * jit/JITOpcodes32_64.cpp:
2468         (JSC::JIT::privateCompileCTIMachineTrampolines):
2469         (JSC::JIT::privateCompileCTINativeCall):
2470         * jit/JITPropertyAccess.cpp:
2471         (JSC::JIT::stringGetByValStubGenerator):
2472         (JSC::JIT::privateCompilePutByIdTransition):
2473         (JSC::JIT::privateCompilePatchGetArrayLength):
2474         (JSC::JIT::privateCompileGetByIdProto):
2475         (JSC::JIT::privateCompileGetByIdSelfList):
2476         (JSC::JIT::privateCompileGetByIdProtoList):
2477         (JSC::JIT::privateCompileGetByIdChainList):
2478         (JSC::JIT::privateCompileGetByIdChain):
2479         * jit/JITPropertyAccess32_64.cpp:
2480         (JSC::JIT::stringGetByValStubGenerator):
2481         (JSC::JIT::privateCompilePutByIdTransition):
2482         (JSC::JIT::privateCompilePatchGetArrayLength):
2483         (JSC::JIT::privateCompileGetByIdProto):
2484         (JSC::JIT::privateCompileGetByIdSelfList):
2485         (JSC::JIT::privateCompileGetByIdProtoList):
2486         (JSC::JIT::privateCompileGetByIdChainList):
2487         (JSC::JIT::privateCompileGetByIdChain):
2488         * jit/JITStubs.cpp:
2489         * jit/SpecializedThunkJIT.h:
2490         (JSC::SpecializedThunkJIT::finalize):
2491         * yarr/YarrJIT.cpp:
2492         (JSC::Yarr::YarrGenerator::compile):
2493
2494 2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>
2495
2496         Basic enhancements to StringBuilder
2497         https://bugs.webkit.org/show_bug.cgi?id=67081
2498
2499         This change contains the following enhancements to StringBuilder,
2500         for convenience, performance, testability, etc.:
2501         - Change toStringPreserveCapacity() to const
2502         - new public methods: capacity(), swap(), toAtomicString(), canShrink()
2503           and append(const StringBuilder&)
2504         - == and != opearators to compare StringBuilders and a StringBuilder/String
2505
2506         Unit tests: Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
2507
2508         Reviewed by Darin Adler.
2509
2510         * JavaScriptCore.exp:
2511         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2512         * wtf/text/AtomicString.cpp:
2513         (WTF::SubstringTranslator::hash):
2514         (WTF::SubstringTranslator::equal):
2515         (WTF::SubstringTranslator::translate):
2516         (WTF::AtomicString::add):
2517         (WTF::AtomicString::addSlowCase):
2518         * wtf/text/AtomicString.h:
2519         (WTF::AtomicString::AtomicString):
2520         (WTF::AtomicString::add):
2521         * wtf/text/StringBuilder.cpp:
2522         (WTF::StringBuilder::reifyString):
2523         (WTF::StringBuilder::resize):
2524         (WTF::StringBuilder::canShrink):
2525         (WTF::StringBuilder::shrinkToFit):
2526         * wtf/text/StringBuilder.h:
2527         (WTF::StringBuilder::append):
2528         (WTF::StringBuilder::toString):
2529         (WTF::StringBuilder::toStringPreserveCapacity):
2530         (WTF::StringBuilder::toAtomicString):
2531         (WTF::StringBuilder::isEmpty):
2532         (WTF::StringBuilder::capacity):
2533         (WTF::StringBuilder::is8Bit):
2534         (WTF::StringBuilder::swap):
2535         (WTF::equal):
2536         (WTF::operator==):
2537         (WTF::operator!=):
2538         * wtf/text/StringImpl.h:
2539
2540 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
2541
2542         Unreviewed. Fix make distcheck.
2543
2544         * GNUmakefile.list.am: Add missing files, remove deleted files and
2545         fix indentation.
2546
2547 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
2548
2549         Build fix for non-DFG platforms that error out on warn-unused-parameter.
2550
2551         * bytecode/CallLinkStatus.cpp:
2552         (JSC::CallLinkStatus::computeFor):
2553         * bytecode/GetByIdStatus.cpp:
2554         (JSC::GetByIdStatus::computeFor):
2555         * bytecode/MethodCallLinkStatus.cpp:
2556         (JSC::MethodCallLinkStatus::computeFor):
2557         * bytecode/PutByIdStatus.cpp:
2558         (JSC::PutByIdStatus::computeFor):
2559
2560 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
2561
2562         Build fix for non-DFG platforms.
2563
2564         * bytecode/CallLinkStatus.cpp:
2565         (JSC::CallLinkStatus::computeFor):
2566         * bytecode/GetByIdStatus.cpp:
2567         (JSC::GetByIdStatus::computeFor):
2568         * bytecode/MethodCallLinkStatus.cpp:
2569         (JSC::MethodCallLinkStatus::computeFor):
2570         * bytecode/PutByIdStatus.cpp:
2571         (JSC::PutByIdStatus::computeFor):
2572
2573 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2574
2575         DFG should not have code that directly decodes the states of old JIT inline
2576         cache data structures
2577         https://bugs.webkit.org/show_bug.cgi?id=76768
2578
2579         Reviewed by Sam Weinig.
2580         
2581         Introduced new classes (like GetByIdStatus) that encapsulate the set of things
2582         that the DFG would like to know about property accesses and calls. Whereas it
2583         previously got this information by directly decoding the data structures used
2584         by the old JIT for inline caching, it now uses these classes, which do the work
2585         for it. This should make it somewhat more straight forward to introduce new
2586         ways of profiling the same information.
2587         
2588         Also hoisted StructureSet into bytecode/ from dfg/, because it's now used by
2589         code in bytecode/.
2590         
2591         Making this work right involved carefully ensuring that the heuristics for
2592         choosing how to handle property accesses was at least as good as what we had
2593         before, since I completely restructured that code. Currently the performance
2594         looks neutral. Since I rewrote the code I did change some things that I never
2595         liked before, like previously if a put_bu_id had executed exactly once then
2596         we'd compile it as if it had taken slow-path. Executing once is special because
2597         then the inline cache is not baked in, so there is no information about how the
2598         DFG should optimize the code. Now this is rationalized: if the put_by_id does
2599         not offer enough information to be optimized (i.e. had executed 0 or 1 times)
2600         then we turn it into a forced OSR exit (i.e. a patch point). However, get_by_id
2601         still has the old behavior; I left it that way because I didn't want to make
2602         too many changes at once.
2603
2604         * CMakeLists.txt:
2605         * GNUmakefile.list.am:
2606         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2607         * JavaScriptCore.xcodeproj/project.pbxproj:
2608         * Target.pri:
2609         * bytecode/CallLinkStatus.cpp: Added.
2610         (JSC::CallLinkStatus::computeFor):
2611         * bytecode/CallLinkStatus.h: Added.
2612         (JSC::CallLinkStatus::CallLinkStatus):
2613         (JSC::CallLinkStatus::isSet):
2614         (JSC::CallLinkStatus::operator!):
2615         (JSC::CallLinkStatus::couldTakeSlowPath):
2616         (JSC::CallLinkStatus::callTarget):
2617         * bytecode/GetByIdStatus.cpp: Added.
2618         (JSC::GetByIdStatus::computeFor):
2619         * bytecode/GetByIdStatus.h: Added.
2620         (JSC::GetByIdStatus::GetByIdStatus):
2621         (JSC::GetByIdStatus::state):
2622         (JSC::GetByIdStatus::isSet):
2623         (JSC::GetByIdStatus::operator!):
2624         (JSC::GetByIdStatus::isSimpleDirect):
2625         (JSC::GetByIdStatus::takesSlowPath):
2626         (JSC::GetByIdStatus::makesCalls):
2627         (JSC::GetByIdStatus::structureSet):
2628         (JSC::GetByIdStatus::offset):
2629         * bytecode/MethodCallLinkStatus.cpp: Added.
2630         (JSC::MethodCallLinkStatus::computeFor):
2631         * bytecode/MethodCallLinkStatus.h: Added.
2632         (JSC::MethodCallLinkStatus::MethodCallLinkStatus):
2633         (JSC::MethodCallLinkStatus::isSet):
2634         (JSC::MethodCallLinkStatus::operator!):
2635         (JSC::MethodCallLinkStatus::needsPrototypeCheck):
2636         (JSC::MethodCallLinkStatus::structure):
2637         (JSC::MethodCallLinkStatus::prototypeStructure):
2638         (JSC::MethodCallLinkStatus::function):
2639         (JSC::MethodCallLinkStatus::prototype):
2640         * bytecode/PutByIdStatus.cpp: Added.
2641         (JSC::PutByIdStatus::computeFor):
2642         * bytecode/PutByIdStatus.h: Added.
2643         (JSC::PutByIdStatus::PutByIdStatus):
2644         (JSC::PutByIdStatus::state):
2645         (JSC::PutByIdStatus::isSet):
2646         (JSC::PutByIdStatus::operator!):
2647         (JSC::PutByIdStatus::isSimpleReplace):
2648         (JSC::PutByIdStatus::isSimpleTransition):
2649         (JSC::PutByIdStatus::takesSlowPath):
2650         (JSC::PutByIdStatus::oldStructure):
2651         (JSC::PutByIdStatus::newStructure):
2652         (JSC::PutByIdStatus::structureChain):
2653         (JSC::PutByIdStatus::offset):
2654         * bytecode/StructureSet.h: Added.
2655         (JSC::StructureSet::StructureSet):
2656         (JSC::StructureSet::clear):
2657         (JSC::StructureSet::add):
2658         (JSC::StructureSet::addAll):
2659         (JSC::StructureSet::remove):
2660         (JSC::StructureSet::contains):
2661         (JSC::StructureSet::isSubsetOf):
2662         (JSC::StructureSet::isSupersetOf):
2663         (JSC::StructureSet::size):
2664         (JSC::StructureSet::at):
2665         (JSC::StructureSet::operator[]):
2666         (JSC::StructureSet::last):
2667         (JSC::StructureSet::predictionFromStructures):
2668         (JSC::StructureSet::operator==):
2669         (JSC::StructureSet::dump):
2670         * dfg/DFGAbstractValue.h:
2671         * dfg/DFGByteCodeParser.cpp:
2672         (JSC::DFG::ByteCodeParser::handleCall):
2673         (JSC::DFG::ByteCodeParser::parseBlock):
2674         * dfg/DFGStructureSet.h: Removed.
2675
2676 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2677
2678         JIT compilation should not require ExecState
2679         https://bugs.webkit.org/show_bug.cgi?id=76729
2680         <rdar://problem/10731545>
2681
2682         Reviewed by Gavin Barraclough.
2683         
2684         Changed the relevant JIT driver functions to take JSGlobalData& instead of
2685         ExecState*, since really they just needed the global data.
2686
2687         * dfg/DFGDriver.cpp:
2688         (JSC::DFG::compile):
2689         (JSC::DFG::tryCompile):
2690         (JSC::DFG::tryCompileFunction):
2691         * dfg/DFGDriver.h:
2692         (JSC::DFG::tryCompile):
2693         (JSC::DFG::tryCompileFunction):
2694         * jit/JITDriver.h:
2695         (JSC::jitCompileIfAppropriate):
2696         (JSC::jitCompileFunctionIfAppropriate):
2697         * runtime/Executable.cpp:
2698         (JSC::EvalExecutable::compileInternal):
2699         (JSC::ProgramExecutable::compileInternal):
2700         (JSC::FunctionExecutable::compileForCallInternal):
2701         (JSC::FunctionExecutable::compileForConstructInternal):
2702
2703 2012-01-20  David Levin  <levin@chromium.org>
2704
2705         Make OwnPtr<HDC> work for the Chromium Windows port.
2706         https://bugs.webkit.org/show_bug.cgi?id=76738
2707
2708         Reviewed by Jian Li.
2709
2710         * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnPtrWin.cpp to the
2711         Chromium Windows build.
2712         * wtf/OwnPtrCommon.h: Changed from platform WIN to OS WIN for
2713         OwnPtr<HDC> and similar constructs.
2714
2715 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
2716
2717         Removed some regexp entry boilerplate code
2718         https://bugs.webkit.org/show_bug.cgi?id=76687
2719
2720         Reviewed by Darin Adler.
2721         
2722         1% - 2% speedup on regexp tests, no change overall.
2723
2724         * runtime/RegExp.cpp:
2725         (JSC::RegExp::match):
2726             - ASSERT that our startIndex is non-negative, because anything less
2727             would be uncivilized.
2728             
2729             - ASSERT that our input is not the null string for the same reason.
2730
2731             - No need to test for startOffset being past the end of the string,
2732             since the regular expression engine will do this test for us.
2733
2734             - No need to initialize the output vector, since the regular expression
2735             engine will fill it in for us.
2736
2737         * yarr/YarrInterpreter.cpp:
2738         (JSC::Yarr::Interpreter::interpret):
2739         * yarr/YarrJIT.cpp:
2740         (JSC::Yarr::YarrGenerator::compile):
2741         
2742             RegExp used to do these jobs for us, but now we do them for ourselves
2743             because it's a better separation of concerns, and the JIT can do them
2744             more efficiently than C++ code:
2745
2746             - Test for "past the end" before doing any matching -- otherwise
2747             a* will match with zero length past the end of the string, which is wrong.
2748
2749             - Initialize the output vector before doing any matching.
2750
2751 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2752
2753         Build fix for no-DFG configuration.
2754         Needed for <rdar://problem/10727689>.
2755
2756         * bytecompiler/BytecodeGenerator.cpp:
2757         (JSC::BytecodeGenerator::emitProfiledOpcode):
2758         * jit/JIT.h:
2759         (JSC::JIT::emitValueProfilingSite):
2760
2761 2012-01-19  Filip Pizlo  <fpizlo@apple.com>
2762
2763         Bytecode instructions that may have value profiling should have a direct inline
2764         link to the ValueProfile instance
2765         https://bugs.webkit.org/show_bug.cgi?id=76682
2766         <rdar://problem/10727689>
2767
2768         Reviewed by Sam Weinig.
2769         
2770         Each opcode that gets value profiled now has a link to its ValueProfile. This
2771         required rationalizing the emission of value profiles for opcode combos, like
2772         op_method_check/op_get_by_id and op_call/op_call_put_result. It only makes
2773         sense for one of them to have a value profile link, and it makes most sense
2774         for it to be the one that actually sets the result. The previous behavior was
2775         to have op_method_check profile for op_get_by_id when they were used together,
2776         but otherwise for op_get_by_id to have its own profiles. op_call already did
2777         the right thing; all profiling was done by op_call_put_result.
2778         
2779         But rationalizing this code required breaking some of the natural boundaries
2780         that the code had; for instance the code in DFG that emits a GetById in place
2781         of both op_method_check and op_get_by_id must now know that it's the latter of
2782         those that has the value profile, while the first of those constitutes the OSR
2783         target. Hence each CodeOrigin must now have two bytecode indices - one for
2784         OSR exit and one for profiling.
2785         
2786         Finally this change required some refiddling of our optimization heuristics,
2787         because now all code blocks have "more instructions" due to the value profile
2788         slots.
2789
2790         * bytecode/CodeBlock.cpp:
2791         (JSC::CodeBlock::printGetByIdOp):
2792         (JSC::CodeBlock::dump):
2793         * bytecode/CodeBlock.h:
2794         (JSC::CodeBlock::valueProfileForBytecodeOffset):
2795         * bytecode/CodeOrigin.h:
2796         (JSC::CodeOrigin::CodeOrigin):
2797         (JSC::CodeOrigin::bytecodeIndexForValueProfile):
2798         * bytecode/Instruction.h:
2799         (JSC::Instruction::Instruction):
2800         * bytecode/Opcode.h:
2801         * bytecompiler/BytecodeGenerator.cpp:
2802         (JSC::BytecodeGenerator::emitProfiledOpcode):
2803         (JSC::BytecodeGenerator::emitResolve):
2804         (JSC::BytecodeGenerator::emitGetScopedVar):
2805         (JSC::BytecodeGenerator::emitResolveBase):
2806         (JSC::BytecodeGenerator::emitResolveBaseForPut):
2807         (JSC::BytecodeGenerator::emitResolveWithBase):
2808         (JSC::BytecodeGenerator::emitResolveWithThis):
2809         (JSC::BytecodeGenerator::emitGetById):
2810         (JSC::BytecodeGenerator::emitGetByVal):
2811         (JSC::BytecodeGenerator::emitCall):
2812         (JSC::BytecodeGenerator::emitCallVarargs):
2813         (JSC::BytecodeGenerator::emitConstruct):
2814         * bytecompiler/BytecodeGenerator.h:
2815         * dfg/DFGByteCodeParser.cpp:
2816         (JSC::DFG::ByteCodeParser::ByteCodeParser):
2817         (JSC::DFG::ByteCodeParser::currentCodeOrigin):
2818         (JSC::DFG::ByteCodeParser::addCall):
2819         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
2820         (JSC::DFG::ByteCodeParser::getPrediction):
2821         (JSC::DFG::ByteCodeParser::handleCall):
2822         (JSC::DFG::ByteCodeParser::handleInlining):
2823         (JSC::DFG::ByteCodeParser::parseBlock):
2824         (JSC::DFG::ByteCodeParser::parse):
2825         * dfg/DFGGraph.h:
2826         (JSC::DFG::Graph::valueProfileFor):
2827         * jit/JIT.h:
2828         (JSC::JIT::emitValueProfilingSite):
2829         * jit/JITCall.cpp:
2830         (JSC::JIT::emit_op_call_put_result):
2831         * jit/JITCall32_64.cpp:
2832         (JSC::JIT::emit_op_call_put_result):
2833         * jit/JITInlineMethods.h:
2834         (JSC::JIT::emitValueProfilingSite):
2835         * jit/JITOpcodes.cpp:
2836         (JSC::JIT::emit_op_resolve):
2837         (JSC::JIT::emit_op_resolve_base):
2838         (JSC::JIT::emit_op_resolve_skip):
2839         (JSC::JIT::emit_op_resolve_global):
2840         (JSC::JIT::emitSlow_op_resolve_global):
2841         (JSC::JIT::emit_op_resolve_with_base):
2842         (JSC::JIT::emit_op_resolve_with_this):
2843         (JSC::JIT::emitSlow_op_resolve_global_dynamic):
2844         * jit/JITOpcodes32_64.cpp:
2845         (JSC::JIT::emit_op_resolve):
2846         (JSC::JIT::emit_op_resolve_base):
2847         (JSC::JIT::emit_op_resolve_skip):
2848         (JSC::JIT::emit_op_resolve_global):
2849         (JSC::JIT::emitSlow_op_resolve_global):
2850         (JSC::JIT::emit_op_resolve_with_base):
2851         (JSC::JIT::emit_op_resolve_with_this):
2852         * jit/JITPropertyAccess.cpp:
2853         (JSC::JIT::emit_op_get_by_val):
2854         (JSC::JIT::emitSlow_op_get_by_val):
2855         (JSC::JIT::emit_op_method_check):
2856         (JSC::JIT::emitSlow_op_method_check):
2857         (JSC::JIT::emit_op_get_by_id):
2858         (JSC::JIT::emitSlow_op_get_by_id):
2859         (JSC::JIT::emit_op_get_scoped_var):
2860         (JSC::JIT::emit_op_get_global_var):
2861         * jit/JITPropertyAccess32_64.cpp:
2862         (JSC::JIT::emit_op_method_check):
2863         (JSC::JIT::emitSlow_op_method_check):
2864         (JSC::JIT::emit_op_get_by_val):
2865         (JSC::JIT::emitSlow_op_get_by_val):
2866         (JSC::JIT::emit_op_get_by_id):
2867         (JSC::JIT::emitSlow_op_get_by_id):
2868         (JSC::JIT::emit_op_get_scoped_var):
2869         (JSC::JIT::emit_op_get_global_var):
2870         * jit/JITStubCall.h:
2871         (JSC::JITStubCall::callWithValueProfiling):
2872         * runtime/Options.cpp:
2873         (JSC::Options::initializeOptions):
2874
2875 2012-01-20  ChangSeok Oh  <shivamidow@gmail.com>
2876
2877         undefined reference to symbol eina_module_free
2878         https://bugs.webkit.org/show_bug.cgi?id=76681
2879
2880         Reviewed by Martin Robinson.
2881
2882         eina_module_free has been used without including eina libraries after r104936.
2883
2884         * wtf/PlatformEfl.cmake: Add EINA_LIBRARIES.
2885
2886 2012-01-19  Tony Chang  <tony@chromium.org>
2887
2888         [chromium] Remove an obsolete comment about features.gypi
2889         https://bugs.webkit.org/show_bug.cgi?id=76643
2890
2891         There can be only one features.gypi.
2892
2893         Reviewed by James Robinson.
2894
2895         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2896
2897 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
2898
2899         Implicit creation of a regular expression should eagerly check for syntax errors
2900         https://bugs.webkit.org/show_bug.cgi?id=76642
2901
2902         Reviewed by Oliver Hunt.
2903         
2904         This is a correctness fix and a slight optimization.
2905
2906         * runtime/StringPrototype.cpp:
2907         (JSC::stringProtoFuncMatch):
2908         (JSC::stringProtoFuncSearch): Check for syntax errors because that's the
2909         correct behavior.
2910
2911         * runtime/RegExp.cpp:
2912         (JSC::RegExp::match): ASSERT that we aren't a syntax error. (One line
2913         of code change, many lines of indentation change.)
2914
2915         Since we have no clients that try to match a RegExp that is a syntax error,
2916         let's optimize out the check.
2917
2918 2012-01-19  Mark Hahnenberg  <mhahnenberg@apple.com>
2919
2920         Implement a new allocator for backing stores
2921         https://bugs.webkit.org/show_bug.cgi?id=75181
2922
2923         Reviewed by Filip Pizlo.
2924
2925         We want to move away from using fastMalloc for the backing stores for 
2926         some of our objects (e.g. JSArray, JSObject, JSString, etc).  These backing 
2927         stores have a nice property in that they only have a single owner (i.e. a 
2928         single pointer to them at any one time).  One way that we can take advantage 
2929         of this property is to implement a simple bump allocator/copying collector, 
2930         which will run alongside our normal mark/sweep collector, that only needs to 
2931         update the single owner pointer rather than having to redirect an arbitrary 
2932         number of pointers in from-space to to-space.
2933
2934         This plan can give us a number of benefits. We can beat fastMalloc in terms 
2935         of both performance and memory usage, we can track how much memory we're using 
2936         far more accurately than our rough estimation now through the use of 
2937         reportExtraMemoryCost, and we can allocate arbitrary size objects (as opposed 
2938         to being limited to size classes like we have been historically). This is also 
2939         another step toward moving away from lazy destruction, which will improve our memory footprint.
2940
2941         We start by creating said allocator and moving the ArrayStorage for JSArray 
2942         to use it rather than fastMalloc.
2943
2944         The design of the collector is as follows:
2945         Allocation:
2946         -The collector allocates 64KB chunks from the OS to use for object allocation.
2947         -Each chunk contains an offset, a flag indicating if the block has been pinned, 
2948          and a payload, along with next and prev pointers so that they can be put in DoublyLinkedLists.
2949         -Any allocation greater than 64KB gets its own separate oversize block, which 
2950          is managed separately from the rest.
2951         -If the allocator receives a request for more than the remaining amount in the 
2952          current block, it grabs a fresh block.
2953         -Grabbing a fresh block means grabbing one off of the global free list (which is now 
2954          shared between the mark/sweep allocator and the bump allocator) if there is one. 
2955          If there isn't a new one we do one of two things: allocate a new block from the OS 
2956          if we're not ready for a GC yet, or run a GC and then try again. If we still don't 
2957          have enough space after the GC, we allocate a new block from the OS.
2958
2959         Garbage collection:
2960         -At the start of garbage collection during conservative stack scanning, if we encounter 
2961          what appears to be a pointer to a bump-allocated block of memory, we pin that block so 
2962          that it will not be copied for this round of collection.
2963         -We also pin any oversize blocks that we encounter, which effectively doubles as a 
2964          "mark bit" for that block. Any oversize blocks that aren't pinned at the end of copying 
2965          are given back to the OS.
2966         -Marking threads are now also responsible for copying bump-allocated objects to newSpace
2967         -Each marking thread has a private 64KB block into which it copies bump-allocated objects that it encounters.
2968         -When that block fills up, the marking thread gives it back to the allocator and requests a new one.
2969         -When all marking has concluded, each thread gives back its copy block, even if it isn't full.
2970         -At the conclusion of copying (which is done by the end of the marking phase), we un-pin 
2971          any pinned blocks and give any blocks left in from-space to the global free list.
2972
2973         * CMakeLists.txt:
2974         * GNUmakefile.list.am:
2975         * JavaScriptCore.gypi:
2976         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2977         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2978         * JavaScriptCore.xcodeproj/project.pbxproj:
2979         * Target.pri:
2980         * heap/AllocationSpace.cpp:
2981         (JSC::AllocationSpace::allocateSlowCase):
2982         (JSC::AllocationSpace::allocateBlock):
2983         (JSC::AllocationSpace::freeBlocks):
2984         * heap/AllocationSpace.h:
2985         (JSC::AllocationSpace::waterMark):
2986         * heap/BumpBlock.h: Added.
2987         (JSC::BumpBlock::BumpBlock):
2988         * heap/BumpSpace.cpp: Added.
2989         (JSC::BumpSpace::tryAllocateSlowCase):
2990         * heap/BumpSpace.h: Added.
2991         (JSC::BumpSpace::isInCopyPhase):
2992         (JSC::BumpSpace::totalMemoryAllocated):
2993         (JSC::BumpSpace::totalMemoryUtilized):
2994         * heap/BumpSpaceInlineMethods.h: Added.
2995         (JSC::BumpSpace::BumpSpace):
2996         (JSC::BumpSpace::init):
2997         (JSC::BumpSpace::contains):
2998         (JSC::BumpSpace::pin):
2999         (JSC::BumpSpace::startedCopying):
3000         (JSC::BumpSpace::doneCopying):
3001         (JSC::BumpSpace::doneFillingBlock):
3002         (JSC::BumpSpace::recycleBlock):
3003         (JSC::BumpSpace::getFreshBlock):
3004         (JSC::BumpSpace::borrowBlock):
3005         (JSC::BumpSpace::addNewBlock):
3006         (JSC::BumpSpace::allocateNewBlock):
3007         (JSC::BumpSpace::fitsInBlock):
3008         (JSC::BumpSpace::fitsInCurrentBlock):
3009         (JSC::BumpSpace::tryAllocate):
3010         (JSC::BumpSpace::tryAllocateOversize):
3011         (JSC::BumpSpace::allocateFromBlock):
3012         (JSC::BumpSpace::tryReallocate):
3013         (JSC::BumpSpace::tryReallocateOversize):
3014         (JSC::BumpSpace::isOversize):
3015         (JSC::BumpSpace::isPinned):
3016         (JSC::BumpSpace::oversizeBlockFor):
3017         (JSC::BumpSpace::blockFor):
3018         * heap/ConservativeRoots.cpp:
3019         (JSC::ConservativeRoots::ConservativeRoots):
3020         (JSC::ConservativeRoots::genericAddPointer):
3021         (JSC::ConservativeRoots::add):
3022         * heap/ConservativeRoots.h:
3023         * heap/Heap.cpp:
3024         (JSC::Heap::Heap):
3025         (JSC::Heap::blockFreeingThreadMain):
3026         (JSC::Heap::reportExtraMemoryCostSlowCase):
3027         (JSC::Heap::getConservativeRegisterRoots):
3028         (JSC::Heap::markRoots):
3029         (JSC::Heap::collect):
3030         (JSC::Heap::releaseFreeBlocks):
3031         * heap/Heap.h:
3032         (JSC::Heap::waterMark):
3033         (JSC::Heap::highWaterMark):
3034         (JSC::Heap::setHighWaterMark):
3035         (JSC::Heap::tryAllocateStorage):
3036         (JSC::Heap::tryReallocateStorage):
3037         * heap/HeapBlock.h: Added.
3038         (JSC::HeapBlock::HeapBlock):
3039         * heap/MarkStack.cpp:
3040         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
3041         (JSC::SlotVisitor::drain):
3042         (JSC::SlotVisitor::drainFromShared):
3043         (JSC::SlotVisitor::startCopying):
3044         (JSC::SlotVisitor::allocateNewSpace):
3045         (JSC::SlotVisitor::copy):
3046         (JSC::SlotVisitor::copyAndAppend):
3047         (JSC::SlotVisitor::doneCopying):
3048         * heap/MarkStack.h:
3049         * heap/MarkedBlock.cpp:
3050         (JSC::MarkedBlock::recycle):
3051         (JSC::MarkedBlock::MarkedBlock):
3052         * heap/MarkedBlock.h:
3053         * heap/MarkedSpace.cpp:
3054         (JSC::MarkedSpace::MarkedSpace):
3055         * heap/MarkedSpace.h:
3056         (JSC::MarkedSpace::allocate):
3057         (JSC::MarkedSpace::forEachBlock):
3058         (JSC::MarkedSpace::SizeClass::resetAllocator):
3059         * heap/SlotVisitor.h:
3060         (JSC::SlotVisitor::SlotVisitor):
3061         * heap/TinyBloomFilter.h:
3062         (JSC::TinyBloomFilter::reset):
3063         * runtime/JSArray.cpp:
3064         (JSC::JSArray::JSArray):
3065         (JSC::JSArray::finishCreation):
3066         (JSC::JSArray::tryFinishCreationUninitialized):
3067         (JSC::JSArray::~JSArray):
3068         (JSC::JSArray::enterSparseMode):
3069         (JSC::JSArray::defineOwnNumericProperty):
3070         (JSC::JSArray::setLengthWritable):
3071         (JSC::JSArray::getOwnPropertySlotByIndex):
3072         (JSC::JSArray::getOwnPropertyDescriptor):
3073         (JSC::JSArray::putByIndexBeyondVectorLength):
3074         (JSC::JSArray::deletePropertyByIndex):
3075         (JSC::JSArray::getOwnPropertyNames):
3076         (JSC::JSArray::increaseVectorLength):
3077         (JSC::JSArray::unshiftCountSlowCase):
3078         (JSC::JSArray::setLength):
3079         (JSC::JSArray::pop):
3080         (JSC::JSArray::unshiftCount):
3081         (JSC::JSArray::visitChildren):
3082         (JSC::JSArray::sortNumeric):
3083         (JSC::JSArray::sort):
3084         (JSC::JSArray::compactForSorting):
3085         (JSC::JSArray::subclassData):
3086         (JSC::JSArray::setSubclassData):
3087         (JSC::JSArray::checkConsistency):
3088         * runtime/JSArray.h:
3089         (JSC::JSArray::inSparseMode):
3090         (JSC::JSArray::isLengthWritable):
3091         * wtf/CheckedBoolean.h: Added.
3092         (CheckedBoolean::CheckedBoolean):
3093         (CheckedBoolean::~CheckedBoolean):
3094         (CheckedBoolean::operator bool):
3095         * wtf/DoublyLinkedList.h:
3096         (WTF::::push):
3097         * wtf/StdLibExtras.h:
3098         (WTF::isPointerAligned):
3099
3100 2012-01-19  Joi Sigurdsson  <joi@chromium.org>
3101
3102         Enable use of precompiled headers in Chromium port on Windows.
3103
3104         Bug 76381 - Use precompiled headers in Chromium port on Windows
3105         https://bugs.webkit.org/show_bug.cgi?id=76381
3106
3107         Reviewed by Tony Chang.
3108
3109         * JavaScriptCore.gyp/JavaScriptCore.gyp: Include WinPrecompile.gypi.
3110
3111 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
3112
3113         Cross-platform processor core counter fix
3114         https://bugs.webkit.org/show_bug.cgi?id=76540
3115
3116         Reviewed by Zoltan Herczeg.
3117
3118         I attached "OS(FREEBSD)" to "#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)"
3119         and I removed the OS checking macros from ParallelJobsGeneric.cpp because
3120         the NumberOfCores.cpp contains them for counting CPU cores.
3121         The processor core counter patch located at
3122         https://bugs.webkit.org/show_bug.cgi?id=76530
3123
3124         * wtf/NumberOfCores.cpp:
3125         * wtf/ParallelJobsGeneric.cpp:
3126
3127 2012-01-18  Csaba Osztrogonác  <ossy@webkit.org>
3128
3129         Cross-platform processor core counter
3130         https://bugs.webkit.org/show_bug.cgi?id=76530
3131
3132         Unreviewed cross-MinGW buildfix after r105270.
3133
3134         * wtf/NumberOfCores.cpp: Use windows.h instead of Windows.h.
3135
3136 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
3137
3138         Cross-platform processor core counter
3139         https://bugs.webkit.org/show_bug.cgi?id=76530
3140
3141         Reviewed by Zoltan Herczeg.
3142
3143         Two files have been created that include the processor core counter function.
3144         It used to be in ParallelJobsGeneric.h/cpp before.
3145
3146         * GNUmakefile.list.am:
3147         * JavaScriptCore.gypi:
3148         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3149         * JavaScriptCore.xcodeproj/project.pbxproj:
3150         * runtime/Options.cpp:
3151         (JSC::Options::initializeOptions):
3152         * wtf/CMakeLists.txt:
3153         * wtf/NumberOfCores.cpp: Added.
3154         (WTF::numberOfProcessorCores):
3155         * wtf/NumberOfCores.h: Added.
3156         * wtf/ParallelJobsGeneric.cpp:
3157         (WTF::ParallelEnvironment::ParallelEnvironment):
3158         * wtf/ParallelJobsGeneric.h:
3159
3160 2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>
3161
3162         [Qt] Consolidate layout test crash logging
3163         https://bugs.webkit.org/show_bug.cgi?id=75088
3164
3165         Reviewed by Simon Hausmann.
3166
3167         Move backtrace generating logic into WTFReportBacktrace
3168         and add a way to deinstall signal handlers if we know
3169         that we have already printed the backtrace.
3170
3171         * JavaScriptCore.exp:
3172         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3173         * wtf/Assertions.cpp:
3174         (WTFLogLocker::WTFReportBacktrace):
3175         (WTFLogLocker::WTFSetCrashHook):
3176         (WTFLogLocker::WTFInvokeCrashHook):
3177         * wtf/Assertions.h:
3178
3179 2012-01-17  Geoffrey Garen  <ggaren@apple.com>
3180
3181         Factored out some code into a helper function.
3182         
3183         I think this might help getting rid of omit-frame-pointer.
3184
3185         Reviewed by Sam Weinig.
3186         
3187         No benchmark change.
3188
3189         * runtime/StringPrototype.cpp:
3190         (JSC::removeUsingRegExpSearch): Moved to here...
3191         (JSC::replaceUsingRegExpSearch): ...from here.
3192
3193 2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
3194
3195         Uint8ClampedArray support
3196         https://bugs.webkit.org/show_bug.cgi?id=74455
3197
3198         Reviewed by Filip Pizlo.
3199
3200         * GNUmakefile.list.am:
3201         * JavaScriptCore.xcodeproj/project.pbxproj:
3202         * bytecode/PredictedType.cpp:
3203         (JSC::predictionToString):
3204         (JSC::predictionFromClassInfo):
3205         * bytecode/PredictedType.h:
3206         (JSC::isUint8ClampedArrayPrediction):
3207         (JSC::isActionableMutableArrayPrediction):
3208         * dfg/DFGAbstractState.cpp:
3209         (JSC::DFG::AbstractState::initialize):
3210         (JSC::DFG::AbstractState::execute):
3211         * dfg/DFGNode.h:
3212         (JSC::DFG::Node::shouldSpeculateUint8ClampedArray):
3213         * dfg/DFGPropagator.cpp:
3214         (JSC::DFG::Propagator::propagateNodePredictions):
3215         (JSC::DFG::Propagator::fixupNode):
3216         (JSC::DFG::Propagator::performNodeCSE):
3217         * dfg/DFGSpeculativeJIT.cpp:
3218         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
3219         (JSC::DFG::clampDoubleToByte):
3220         (JSC::DFG::compileClampIntegerToByte):
3221         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
3222         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
3223         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
3224         * dfg/DFGSpeculativeJIT.h:
3225         * dfg/DFGSpeculativeJIT32_64.cpp:
3226         (JSC::DFG::SpeculativeJIT::compile):
3227         * dfg/DFGSpeculativeJIT64.cpp:
3228         (JSC::DFG::SpeculativeJIT::compile):
3229         * runtime/JSCell.h:
3230         * runtime/JSGlobalData.h:
3231         * wtf/Forward.h:
3232         * wtf/Uint8Array.h:
3233         * wtf/Uint8ClampedArray.h: Added.
3234         (WTF::Uint8ClampedArray::set):
3235         (WTF::Uint8ClampedArray::create):
3236         (WTF::Uint8ClampedArray::Uint8ClampedArray):
3237         (WTF::Uint8ClampedArray::subarray):
3238
3239 2012-01-17  Sam Weinig  <sam@webkit.org>
3240
3241         Add helper macro for forward declaring objective-c classes
3242         https://bugs.webkit.org/show_bug.cgi?id=76485
3243
3244         Reviewed by Anders Carlsson.
3245
3246         * wtf/Compiler.h:
3247         Add OBJC_CLASS macro which helps reduce code when forward declaring an
3248         objective-c class in a header which can be included from both Objective-C
3249         and non-Objective-C files.
3250
3251 2012-01-17  Filip Pizlo  <fpizlo@apple.com>
3252
3253         DFG should be able to do JS and custom getter caching
3254         https://bugs.webkit.org/show_bug.cgi?id=76361
3255
3256         Reviewed by Csaba Osztrogonác.
3257         
3258         Fix for 32-bit.
3259
3260         * dfg/DFGRepatch.cpp:
3261         (JSC::DFG::tryBuildGetByIDList):
3262         * dfg/DFGSpeculativeJIT32_64.cpp:
3263         (JSC::DFG::SpeculativeJIT::compile):
3264
3265 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
3266
3267         DFG should be able to do JS and custom getter caching
3268         https://bugs.webkit.org/show_bug.cgi?id=76361
3269         <rdar://problem/10698060>
3270
3271         Reviewed by Geoff Garen.
3272         
3273         Added the ability to cache JS getter calls and custom getter calls in the DFG.
3274         Most of this is pretty mundane, since the old JIT supported this functionality
3275         as well. But a couple interesting things had to happen:
3276         
3277         - There are now two variants of GetById: GetById, which works as before, and
3278           GetByIdFlush, which flushes registers prior to doing the GetById. Only
3279           GetByIdFlush can be used for caching getters. We detect which GetById style
3280           to use by looking at the inline caches of the old JIT.
3281         
3282         - Exception handling for getter calls planted in stubs uses a separate lookup
3283           handler routine, which uses the CodeOrigin stored in the StructureStubInfo.
3284           
3285         This is a 40% speed-up in the Dromaeo DOM Traversal average. It removes all of
3286         the DFG regressions we saw in Dromaeo. This is neutral on SunSpider, V8, and
3287         Kraken.
3288
3289         * bytecode/StructureStubInfo.h:
3290         * dfg/DFGAbstractState.cpp:
3291         (JSC::DFG::AbstractState::execute):
3292         * dfg/DFGAssemblyHelpers.h:
3293         (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
3294         * dfg/DFGByteCodeParser.cpp:
3295         (JSC::DFG::ByteCodeParser::willNeedFlush):
3296         (JSC::DFG::ByteCodeParser::parseBlock):
3297         * dfg/DFGCCallHelpers.h:
3298         (JSC::DFG::CCallHelpers::setupResults):
3299         * dfg/DFGJITCompiler.cpp:
3300         (JSC::DFG::JITCompiler::link):
3301         * dfg/DFGJITCompiler.h:
3302         (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
3303         (JSC::DFG::JITCompiler::addExceptionCheck):
3304         * dfg/DFGNode.h:
3305         (JSC::DFG::Node::hasIdentifier):
3306         (JSC::DFG::Node::hasHeapPrediction):
3307         * dfg/DFGOperations.cpp:
3308         * dfg/DFGOperations.h:
3309         * dfg/DFGPropagator.cpp:
3310         (JSC::DFG::Propagator::propagateNodePredictions):
3311         * dfg/DFGRepatch.cpp:
3312         (JSC::DFG::tryCacheGetByID):
3313         (JSC::DFG::tryBuildGetByIDList):
3314         * dfg/DFGSpeculativeJIT.h:
3315         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
3316         * dfg/DFGSpeculativeJIT32_64.cpp:
3317         (JSC::DFG::SpeculativeJIT::cachedGetById):
3318         (JSC::DFG::SpeculativeJIT::compile):
3319         * dfg/DFGSpeculativeJIT64.cpp:
3320         (JSC::DFG::SpeculativeJIT::cachedGetById):
3321         (JSC::DFG::SpeculativeJIT::compile):
3322
3323 2012-01-16  Jon Lee  <jonlee@apple.com>
3324
3325         Build fix for r105086.
3326
3327         * Configurations/FeatureDefines.xcconfig:
3328         * wtf/Platform.h:
3329
3330 2012-01-16  Jon Lee  <jonlee@apple.com>
3331
3332         Remove HTML notifications support on Mac
3333         https://bugs.webkit.org/show_bug.cgi?id=76401
3334         <rdar://problem/10589881>
3335
3336         Reviewed by Sam Weinig.
3337
3338         * wtf/Platform.h: Define ENABLE_HTML_NOTIFICATIONS macro.
3339
3340 2012-01-16  Zeno Albisser  <zeno@webkit.org>
3341
3342         [Qt] Fix QT_VERSION related warnings when building on Mac OS X
3343         https://bugs.webkit.org/show_bug.cgi?id=76340
3344
3345         This bug was caused by r104826.
3346         As already mentioned for https://bugs.webkit.org/show_bug.cgi?id=57239
3347         we should not use "using namespace WebCore" in header files,
3348         because it might cause ambiguous references.
3349         This patch reverts the changes from r104826 and r104981
3350         and removes the "using namespace WebCore" statement from
3351         two header files.
3352
3353         Reviewed by Tor Arne Vestbø.
3354
3355         * wtf/Platform.h:
3356
3357 2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>
3358
3359         Unreviewed. Fix make distcheck.
3360
3361         * GNUmakefile.list.am: Fix typo.
3362
3363 2012-01-16  Pavel Heimlich  <tropikhajma@gmail.com>
3364
3365         Solaris Studio supports alignment macros too
3366         https://bugs.webkit.org/show_bug.cgi?id=75453
3367
3368         Reviewed by Hajime Morita.
3369
3370         * wtf/Alignment.h:
3371
3372 2012-01-16  Yuqiang Xian  <yuqiang.xian@intel.com>
3373
3374         Build fix on 32bit if verbose debug is enabled in DFG
3375         https://bugs.webkit.org/show_bug.cgi?id=76351
3376
3377         Reviewed by Hajime Morita.
3378
3379         Mostly change "%lu" to "%zu" to print a "size_t" variable.
3380
3381         * dfg/DFGAbstractState.cpp:
3382         (JSC::DFG::AbstractState::endBasicBlock):
3383         * dfg/DFGByteCodeParser.cpp:
3384         (JSC::DFG::ByteCodeParser::handleCall):
3385         (JSC::DFG::ByteCodeParser::handleInlining):
3386         (JSC::DFG::ByteCodeParser::parseBlock):
3387         (JSC::DFG::ByteCodeParser::parseCodeBlock):
3388         * dfg/DFGGraph.cpp:
3389         (JSC::DFG::Graph::predictArgumentTypes):
3390         * dfg/DFGJITCompiler.cpp:
3391         (JSC::DFG::JITCompiler::link):
3392         * dfg/DFGOSREntry.cpp:
3393         (JSC::DFG::prepareOSREntry):
3394
3395 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
3396
3397         The C calling convention logic in DFG::SpeculativeJIT should be available even
3398         when not generating code for the DFG speculative path
3399         https://bugs.webkit.org/show_bug.cgi?id=76355
3400
3401         Reviewed by Dan Bernstein.
3402         
3403         Moved all of the logic for placing C call arguments into the right place (stack
3404         or registers) into a new class, DFG::CCallHelpers.  This class inherits from
3405         AssemblyHelpers, another DFG grab-bag of helper functions.  I could have moved
3406         this code into AssemblyHelpers, but decided against it, because I wanted to
3407         limit the number of methods each class in the JIT has.  Hence now we have a
3408         slightly odd organization of JIT classes in DFG: MacroAssembler (basic instruction
3409         emission) <= AssemblyHelpers (some additional JS smarts) <= CCallHelpers
3410         (understands calls to C functions) <= JITCompiler (can compile a graph to machine
3411         code).  Each of these except for JITCompiler can be reused for stub compilation.
3412         
3413         * GNUmakefile.list.am:
3414         * JavaScriptCore.xcodeproj/project.pbxproj:
3415         * dfg/DFGCCallHelpers.h: Added.
3416         (JSC::DFG::CCallHelpers::CCallHelpers):
3417         (JSC::DFG::CCallHelpers::resetCallArguments):
3418         (JSC::DFG::CCallHelpers::addCallArgument):
3419         (JSC::DFG::CCallHelpers::setupArguments):
3420         (JSC::DFG::CCallHelpers::setupArgumentsExecState):
3421         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
3422         (JSC::DFG::CCallHelpers::setupTwoStubArgs):
3423         (JSC::DFG::CCallHelpers::setupStubArguments):
3424         * dfg/DFGJITCompiler.h:
3425         (JSC::DFG::JITCompiler::JITCompiler):
3426         * dfg/DFGSpeculativeJIT.h:
3427         (JSC::DFG::SpeculativeJIT::callOperation):
3428
3429 2012-01-15  Pablo Flouret  <pablof@motorola.com>