Unreviewed, rolling out r144074.
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>
2
3         Unreviewed, rolling out r144074.
4         http://trac.webkit.org/changeset/144074
5         https://bugs.webkit.org/show_bug.cgi?id=110897
6
7         Causing 20+ crashes on Mac (Requested by bradee-oh on
8         #webkit).
9
10         * CMakeLists.txt:
11         * GNUmakefile.list.am:
12         * JavaScriptCore.gypi:
13         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
14         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
15         * JavaScriptCore.xcodeproj/project.pbxproj:
16         * Target.pri:
17         * runtime/JSGlobalData.cpp:
18         (JSC::JSGlobalData::JSGlobalData):
19         * runtime/JSGlobalData.h:
20         (JSGlobalData):
21         * runtime/PropertyMapHashTable.h:
22         (PropertyTable):
23         (JSC::PropertyTable::PropertyTable):
24         (JSC):
25         (JSC::PropertyTable::~PropertyTable):
26         (JSC::PropertyTable::copy):
27         * runtime/PropertyTable.cpp: Removed.
28         * runtime/Structure.cpp:
29         (JSC::Structure::materializePropertyMap):
30         (JSC::Structure::addPropertyTransition):
31         (JSC::Structure::changePrototypeTransition):
32         (JSC::Structure::despecifyFunctionTransition):
33         (JSC::Structure::attributeChangeTransition):
34         (JSC::Structure::toDictionaryTransition):
35         (JSC::Structure::preventExtensionsTransition):
36         (JSC::Structure::nonPropertyTransition):
37         (JSC::Structure::copyPropertyTable):
38         (JSC::Structure::copyPropertyTableForPinning):
39         (JSC::Structure::putSpecificValue):
40         (JSC::Structure::createPropertyMap):
41         (JSC::Structure::visitChildren):
42         * runtime/Structure.h:
43         (JSC):
44         (JSC::Structure::putWillGrowOutOfLineStorage):
45         (JSC::Structure::checkOffsetConsistency):
46         (Structure):
47         * runtime/StructureInlines.h:
48
49 2013-02-26  Roger Fong  <roger_fong@apple.com>
50
51         Unreviewed. AppleWin VS2010 build fix.
52
53         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
54
55 2013-02-26  Jer Noble  <jer.noble@apple.com>
56
57         Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.
58
59         * Configurations/FeatureDefines.xcconfig:
60
61 2013-02-26  Michael Saboff  <msaboff@apple.com>
62
63         Potential crash in YARR JIT generated code when building 64 bit
64         https://bugs.webkit.org/show_bug.cgi?id=110893
65
66         Reviewed by Gavin Barraclough.
67
68         The ABI doesn't define the behavior for the upper bits of a value that takes less than 64 bits.
69         Therefore, we zero extend both the count and length registers to assure that these unsigned values
70         don't have garbage upper bits.
71
72         * yarr/YarrJIT.cpp:
73         (JSC::Yarr::YarrGenerator::generateEnter):
74
75 2013-02-26  Andreas Kling  <akling@apple.com>
76
77         Unused Structure property tables waste 14MB on Membuster.
78         <http://webkit.org/b/110854>
79         <rdar://problem/13292104>
80
81         Reviewed by Filip Pizlo.
82
83         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
84         14 MB progression on Membuster3.
85
86         * CMakeLists.txt:
87         * GNUmakefile.list.am:
88         * JavaScriptCore.gypi:
89         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
90         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
91         * JavaScriptCore.xcodeproj/project.pbxproj:
92         * Target.pri:
93
94             Added PropertyTable.cpp.
95
96         * runtime/PropertyTable.cpp: Added.
97         (JSC::PropertyTable::create):
98         (JSC::PropertyTable::clone):
99         (JSC::PropertyTable::PropertyTable):
100         (JSC::PropertyTable::destroy):
101         (JSC::PropertyTable::~PropertyTable):
102         (JSC::PropertyTable::visitChildren):
103
104             Moved marking of property table values here from Structure::visitChildren().
105
106         * runtime/StructureInlines.h:
107         (JSC::Structure::putWillGrowOutOfLineStorage):
108         (JSC::Structure::checkOffsetConsistency):
109
110             Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
111
112         * runtime/Structure.cpp:
113         (JSC::Structure::visitChildren):
114
115             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
116
117         (JSC::Structure::materializePropertyMap):
118         (JSC::Structure::addPropertyTransition):
119         (JSC::Structure::changePrototypeTransition):
120         (JSC::Structure::despecifyFunctionTransition):
121         (JSC::Structure::attributeChangeTransition):
122         (JSC::Structure::toDictionaryTransition):
123         (JSC::Structure::preventExtensionsTransition):
124         (JSC::Structure::nonPropertyTransition):
125         (JSC::Structure::copyPropertyTable):
126         (JSC::Structure::copyPropertyTableForPinning):
127         (JSC::Structure::putSpecificValue):
128         (JSC::Structure::createPropertyMap):
129         * runtime/Structure.h:
130         (Structure):
131         * runtime/JSGlobalData.cpp:
132         (JSC::JSGlobalData::JSGlobalData):
133         * runtime/JSGlobalData.h:
134         (JSGlobalData):
135         * runtime/PropertyMapHashTable.h:
136         (PropertyTable):
137         (JSC::PropertyTable::createStructure):
138         (JSC::PropertyTable::copy):
139
140 2013-02-26  Andreas Kling  <akling@apple.com>
141
142         Unreviewed, rolling out r144054.
143         http://trac.webkit.org/changeset/144054
144         https://bugs.webkit.org/show_bug.cgi?id=110854
145
146         broke builds
147
148         * CMakeLists.txt:
149         * GNUmakefile.list.am:
150         * JavaScriptCore.gypi:
151         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
152         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
153         * JavaScriptCore.xcodeproj/project.pbxproj:
154         * Target.pri:
155         * runtime/JSGlobalData.cpp:
156         (JSC::JSGlobalData::JSGlobalData):
157         * runtime/JSGlobalData.h:
158         (JSGlobalData):
159         * runtime/PropertyMapHashTable.h:
160         (PropertyTable):
161         (JSC::PropertyTable::PropertyTable):
162         (JSC):
163         (JSC::PropertyTable::~PropertyTable):
164         (JSC::PropertyTable::copy):
165         * runtime/PropertyTable.cpp: Removed.
166         * runtime/Structure.cpp:
167         (JSC::Structure::materializePropertyMap):
168         (JSC::Structure::addPropertyTransition):
169         (JSC::Structure::changePrototypeTransition):
170         (JSC::Structure::despecifyFunctionTransition):
171         (JSC::Structure::attributeChangeTransition):
172         (JSC::Structure::toDictionaryTransition):
173         (JSC::Structure::preventExtensionsTransition):
174         (JSC::Structure::nonPropertyTransition):
175         (JSC::Structure::copyPropertyTable):
176         (JSC::Structure::copyPropertyTableForPinning):
177         (JSC::Structure::putSpecificValue):
178         (JSC::Structure::createPropertyMap):
179         (JSC::Structure::visitChildren):
180         * runtime/Structure.h:
181         (JSC):
182         (JSC::Structure::putWillGrowOutOfLineStorage):
183         (JSC::Structure::checkOffsetConsistency):
184         (Structure):
185         * runtime/StructureInlines.h:
186
187 2013-02-26  Andreas Kling  <akling@apple.com>
188
189         Unused Structure property tables waste 14MB on Membuster.
190         <http://webkit.org/b/110854>
191         <rdar://problem/13292104>
192
193         Reviewed by Filip Pizlo.
194
195         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
196         14 MB progression on Membuster3.
197
198         * CMakeLists.txt:
199         * GNUmakefile.list.am:
200         * JavaScriptCore.gypi:
201         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
202         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
203         * JavaScriptCore.xcodeproj/project.pbxproj:
204         * Target.pri:
205
206             Added PropertyTable.cpp.
207
208         * runtime/PropertyTable.cpp: Added.
209         (JSC::PropertyTable::create):
210         (JSC::PropertyTable::clone):
211         (JSC::PropertyTable::PropertyTable):
212         (JSC::PropertyTable::destroy):
213         (JSC::PropertyTable::~PropertyTable):
214         (JSC::PropertyTable::visitChildren):
215
216             Moved marking of property table values here from Structure::visitChildren().
217
218         * runtime/StructureInlines.h:
219         (JSC::Structure::putWillGrowOutOfLineStorage):
220         (JSC::Structure::checkOffsetConsistency):
221
222             Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
223
224         * runtime/Structure.cpp:
225         (JSC::Structure::visitChildren):
226
227             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
228
229         (JSC::Structure::materializePropertyMap):
230         (JSC::Structure::addPropertyTransition):
231         (JSC::Structure::changePrototypeTransition):
232         (JSC::Structure::despecifyFunctionTransition):
233         (JSC::Structure::attributeChangeTransition):
234         (JSC::Structure::toDictionaryTransition):
235         (JSC::Structure::preventExtensionsTransition):
236         (JSC::Structure::nonPropertyTransition):
237         (JSC::Structure::copyPropertyTable):
238         (JSC::Structure::copyPropertyTableForPinning):
239         (JSC::Structure::putSpecificValue):
240         (JSC::Structure::createPropertyMap):
241         * runtime/Structure.h:
242         (Structure):
243         * runtime/JSGlobalData.cpp:
244         (JSC::JSGlobalData::JSGlobalData):
245         * runtime/JSGlobalData.h:
246         (JSGlobalData):
247         * runtime/PropertyMapHashTable.h:
248         (PropertyTable):
249         (JSC::PropertyTable::createStructure):
250         (JSC::PropertyTable::copy):
251
252 2013-02-26  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>
253
254         Implement JIT on Windows 64 bits
255         https://bugs.webkit.org/show_bug.cgi?id=107965
256
257         Reviewed by Simon Hausmann.
258
259         1. MSVC doesn't support inline assembly for 64 bits, implements the trampoline in a separate ASM file.
260
261         2. Windows 64 bits has a different calling convention than other OSes following the AMD64 ABI.
262         Differences that we have to handle here:
263         - Registers passed parameters are RCX, RDX, R8 and R9 instead of RDI, RSI, RDX, RCX, R8 and R9
264         - RDI and RSI must be preserved by callee
265         - Only return values <= 8 bytes can be returned by register (RDX can't be used to return a second word)
266         - There is no red-zone after RIP on the stack, but instead 4 reserved words before it
267
268         * Target.pri:
269         * jit/JITStubs.cpp:
270         * jit/JITStubs.h:
271         (JSC):
272         (JITStackFrame):
273         (JSC::JITStackFrame::returnAddressSlot):
274         * jit/JITStubsMSVC64.asm: Added.
275         * jit/JSInterfaceJIT.h:
276         (JSInterfaceJIT):
277         * jit/ThunkGenerators.cpp:
278         (JSC::nativeForGenerator):
279         * yarr/YarrJIT.cpp:
280         (YarrGenerator):
281         (JSC::Yarr::YarrGenerator::generateEnter):
282         (JSC::Yarr::YarrGenerator::generateReturn):
283
284 2013-02-26  Oliver Hunt  <oliver@apple.com>
285
286         Kill another analyzer warning in javascriptcore
287         https://bugs.webkit.org/show_bug.cgi?id=110802
288
289         Reviewed by Benjamin Poulain.
290
291         Add null checks.
292         
293         * profiler/LegacyProfiler.cpp:
294         (JSC::LegacyProfiler::startProfiling):
295         (JSC::LegacyProfiler::stopProfiling):
296
297 2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>
298
299         Unreviewed, rolling out r144004.
300         http://trac.webkit.org/changeset/144004
301         https://bugs.webkit.org/show_bug.cgi?id=110858
302
303         This iOS change is outdated (Requested by notbenjamin on
304         #webkit).
305
306         * bytecompiler/BytecodeGenerator.cpp:
307         (JSC::BytecodeGenerator::BytecodeGenerator):
308         * bytecompiler/BytecodeGenerator.h:
309         (JSC::BytecodeGenerator::emitNode):
310         (JSC::BytecodeGenerator::emitNodeInConditionContext):
311         (BytecodeGenerator):
312         * parser/Parser.cpp:
313         (JSC::::Parser):
314         * parser/Parser.h:
315         (JSC::Parser::canRecurse):
316         (Parser):
317
318 2013-02-25  Filip Pizlo  <fpizlo@apple.com>
319
320         REGRESSION(r143654): some jquery test asserts on 32 bit debug build
321         https://bugs.webkit.org/show_bug.cgi?id=110756
322
323         Reviewed by Geoffrey Garen.
324         
325         TypeOf does speculations manually, so it should mark its JSValueOperand as doing ManualOperandSpeculation.
326
327         * dfg/DFGSpeculativeJIT32_64.cpp:
328         (JSC::DFG::SpeculativeJIT::compile):
329
330 2013-02-25  Benjamin Poulain  <bpoulain@apple.com>
331
332         [JSC] Upstream iOS Stack bound checking
333         https://bugs.webkit.org/show_bug.cgi?id=110813
334
335         Reviewed by Filip Pizlo.
336
337         On iOS, the StackBounds cannot be cached because the stack
338         can be in one of two threads (the web thread or the UI thread).
339
340         We simply always consider the current stack bound when testing
341         stack boundaries.
342
343         * bytecompiler/BytecodeGenerator.cpp:
344         (JSC::BytecodeGenerator::BytecodeGenerator):
345         * bytecompiler/BytecodeGenerator.h:
346         (JSC::BytecodeGenerator::emitNode):
347         (JSC::BytecodeGenerator::emitNodeInConditionContext):
348         (BytecodeGenerator):
349         * parser/Parser.cpp:
350         (JSC::::Parser):
351         * parser/Parser.h:
352         (JSC::Parser::canRecurse):
353         (Parser):
354
355 2013-02-25  Michael Saboff  <msaboff@apple.com>
356
357         For JSVALUE32_64, maxOffsetRelativeToPatchedStorage() doesn't compute the maximum negative offset
358         https://bugs.webkit.org/show_bug.cgi?id=110828
359
360         Reviewed by Oliver Hunt.
361
362         * runtime/JSObject.h:
363         (JSC::maxOffsetRelativeToPatchedStorage): Only add the OBJECT_OFFSETOF(tag) for positive offsets.
364         That way this function will return the offset farthest from 0 needed to access either the payload
365         or tag.
366
367 2013-02-25  Jeffrey Pfau  <jpfau@apple.com>
368
369         Optionally partition cache to prevent using cache for tracking
370         https://bugs.webkit.org/show_bug.cgi?id=110269
371
372         Reviewed by Maciej Stachowiak.
373
374         * Configurations/FeatureDefines.xcconfig: Add defines for cache partitioning and public suffix list usage
375
376 2013-02-25  Roger Fong  <roger_fong@apple.com>
377
378         Unreviewed. VS2010 solution build fix.
379
380         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
381
382 2013-02-24  Filip Pizlo  <fpizlo@apple.com>
383
384         DFG::Edge should have more bits for UseKind, and DFG::Allocator should be simpler
385         https://bugs.webkit.org/show_bug.cgi?id=110722
386
387         Reviewed by Oliver Hunt.
388         
389         This rolls out the DFG::Allocator part of http://trac.webkit.org/changeset/143654,
390         and changes Edge to have more room for UseKinds and possibly other things.
391         
392         This is performance-neutral on both 32-bit and 64-bit. It reduces the size of
393         DFG::Node on 64-bit (by virtue of getting rid of the 16-byte alignment of Node)
394         and increases it slightly on 32-bit (by 4 bytes total - 16-byte alignment led to
395         80 bytes, but the base size of Node plus the 12 bytes of new m_encodedWords in
396         Edge gets 84 bytes). But, it will mean that we don't have to increase Node by
397         another 16 bytes if we ever want to add more UseKinds or other things to Edge.
398
399         * dfg/DFGAllocator.h:
400         (DFG):
401         (Allocator):
402         (JSC::DFG::Allocator::Region::headerSize):
403         (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
404         (JSC::DFG::Allocator::Region::data):
405         (JSC::DFG::Allocator::Region::isInThisRegion):
406         (JSC::DFG::::Allocator):
407         (JSC::DFG::::~Allocator):
408         (JSC::DFG::::allocate):
409         (JSC::DFG::::free):
410         (JSC::DFG::::freeAll):
411         (JSC::DFG::::reset):
412         (JSC::DFG::::indexOf):
413         (JSC::DFG::::allocatorOf):
414         (JSC::DFG::::bumpAllocate):
415         (JSC::DFG::::freeListAllocate):
416         (JSC::DFG::::allocateSlow):
417         (JSC::DFG::::freeRegionsStartingAt):
418         (JSC::DFG::::startBumpingIn):
419         * dfg/DFGEdge.h:
420         (JSC::DFG::Edge::Edge):
421         (Edge):
422         (JSC::DFG::Edge::node):
423         (JSC::DFG::Edge::setNode):
424         (JSC::DFG::Edge::useKindUnchecked):
425         (JSC::DFG::Edge::setUseKind):
426         (JSC::DFG::Edge::operator==):
427         (JSC::DFG::Edge::operator!=):
428         (JSC::DFG::Edge::makeWord):
429         * dfg/DFGNodeAllocator.h:
430         (DFG):
431
432 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
433
434         The DFG special case checks for isCreatedThisArgument are fragile
435         https://bugs.webkit.org/show_bug.cgi?id=110535
436
437         Reviewed by Oliver Hunt.
438         
439         There may be many situations in which we want to force a variable to never be
440         unboxed. Capturing is one such case, and the created this argument is another.
441         Previously all code that dealt with this issue had to query both scenarios.
442         
443         Now DFG::VariableAccessData knows these things. You just have to ask
444         VariableAccessData for whether a variable should be unboxed. Anyone wishing to
445         force a variable to never be unboxed just tells VariableAccessData.
446
447         * dfg/DFGAbstractState.cpp:
448         (JSC::DFG::AbstractState::initialize):
449         * dfg/DFGByteCodeParser.cpp:
450         (JSC::DFG::ByteCodeParser::parseBlock):
451         (DFG):
452         * dfg/DFGCFGSimplificationPhase.cpp:
453         (CFGSimplificationPhase):
454         * dfg/DFGFixupPhase.cpp:
455         (JSC::DFG::FixupPhase::fixupNode):
456         * dfg/DFGGraph.h:
457         (Graph):
458         * dfg/DFGPredictionPropagationPhase.cpp:
459         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
460         * dfg/DFGSpeculativeJIT.cpp:
461         (JSC::DFG::SpeculativeJIT::compile):
462         * dfg/DFGSpeculativeJIT32_64.cpp:
463         (JSC::DFG::SpeculativeJIT::compile):
464         * dfg/DFGSpeculativeJIT64.cpp:
465         (JSC::DFG::SpeculativeJIT::compile):
466         * dfg/DFGUnificationPhase.cpp:
467         (JSC::DFG::UnificationPhase::run):
468         * dfg/DFGVariableAccessData.h:
469         (JSC::DFG::VariableAccessData::VariableAccessData):
470         (JSC::DFG::VariableAccessData::mergeIsCaptured):
471         (JSC::DFG::VariableAccessData::mergeShouldNeverUnbox):
472         (VariableAccessData):
473         (JSC::DFG::VariableAccessData::shouldNeverUnbox):
474         (JSC::DFG::VariableAccessData::shouldUnboxIfPossible):
475         (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
476         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
477
478 2013-02-25  Geoffrey Garen  <ggaren@apple.com>
479
480         Do one lookup per code cache insertion instead of two
481         https://bugs.webkit.org/show_bug.cgi?id=110674
482
483         Reviewed by Sam Weinig.
484
485         Deployed the idiomatic "add null value" trick to avoid a second hash
486         lookup when inserting an item.
487
488         * runtime/CodeCache.cpp:
489         (JSC::CodeCacheMap::pruneSlowCase): Factored this into a helper function
490         to improve clarity and get some code off the hot path.
491
492         (JSC::CodeCache::getCodeBlock):
493         (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Use the add() API
494         to avoid two hash lookups. Be sure to remove items if parsing fails,
495         otherwise we'll leave nulls in the table. (I'm guessing that caching parse
496         errors is not a win.)
497
498         * runtime/CodeCache.h:
499         (JSC::SourceCodeValue::SourceCodeValue):
500         (CodeCacheMap):
501         (JSC::CodeCacheMap::add): Combined find() and set() into add().
502
503         (JSC::CodeCacheMap::remove):
504         (JSC::CodeCacheMap::age):
505         (JSC::CodeCacheMap::prune): Refactored to support above changes.
506
507 2013-02-25  Carlos Garcia Campos  <cgarcia@igalia.com>
508
509         [BlackBerry][ARM] Fix cast-align warnings in JavaScriptCore
510         https://bugs.webkit.org/show_bug.cgi?id=110738
511
512         Reviewed by Rob Buis.
513
514         Use reinterpret_cast_ptr instead of reinterpret_cast for
515         pointers.
516
517         * dfg/DFGOperations.cpp:
518         * heap/CopiedBlock.h:
519         (JSC::CopiedBlock::zeroFillWilderness):
520         * heap/WeakBlock.h:
521         (JSC::WeakBlock::asWeakImpl):
522         (JSC::WeakBlock::asFreeCell):
523         (JSC::WeakBlock::weakImpls):
524         * heap/WeakImpl.h:
525         (JSC::WeakImpl::asWeakImpl):
526         * interpreter/JSStack.cpp:
527         (JSC::JSStack::disableErrorStackReserve):
528         * interpreter/JSStack.h:
529         (JSC::JSStack::reservationEnd):
530         * runtime/ArrayStorage.h:
531         (JSC::ArrayStorage::from):
532         * runtime/Butterfly.h:
533         (JSC::Butterfly::indexingPayload):
534         * runtime/IndexingHeader.h:
535         (JSC::IndexingHeader::propertyStorage):
536         * runtime/JSActivation.h:
537         (JSC::JSActivation::tearOff):
538         (JSC::JSActivation::isTornOff):
539         (JSC::JSActivation::storage):
540
541 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
542
543         DFG::SpeculativeJIT::speculateNumber() should just use SpeculateDoubleOperand instead of doing its own thing
544         https://bugs.webkit.org/show_bug.cgi?id=110659
545
546         Reviewed by Oliver Hunt and Mark Hahnenberg.
547         
548         This simplifies the code, and also has the effect that if speculateNumber() is called
549         prior to someone actually using the number in a double context, then the number will
550         already be up-converted to double and ready to go.
551
552         Previously if this ever came up, the subsequent use would have to again branch to see
553         if the value is tagged as int or tagged as double.
554
555         On the other hand, if you ever did speculateNumber() and then used the value as a
556         JSValue, this will be a slow down now.
557
558         I suspect that the former (speculateNumber() and then use as number) is more likely
559         than the latter (speculateNumber() and then use as JSValue).
560
561         * dfg/DFGSpeculativeJIT.cpp:
562         (JSC::DFG::SpeculativeJIT::speculateNumber):
563
564 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
565
566         DFG FixupPhase should have one common hook for knowing if a node is ever being speculated a certain way
567         https://bugs.webkit.org/show_bug.cgi?id=110650
568
569         Reviewed by Mark Hahnenberg.
570         
571         Changes almost all calls to edge.setUseKind(kind) to be
572         setUseKindAndUnboxIfProfitable<kind>(edge). This will allow us to use the latter
573         as a hook for deciding which locals to unbox (webkit.org/b/110433).
574
575         * dfg/DFGFixupPhase.cpp:
576         (JSC::DFG::FixupPhase::fixupNode):
577         (FixupPhase):
578         (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
579         (JSC::DFG::FixupPhase::fixIntEdge):
580         (JSC::DFG::FixupPhase::fixDoubleEdge):
581         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
582
583 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
584
585         REGRESSION(r143654): some fast/js test crashes on 32 bit build
586         https://bugs.webkit.org/show_bug.cgi?id=110590
587
588         Reviewed by Mark Hahnenberg.
589         
590         In compileValueToInt32, the refactoring in r143654 undid one of the fixes from
591         r143314 due to a merge goof.
592         
593         In speculateNumber, we were simply forgetting to indicate that we need a
594         ManualOperandSpeculation on a JSValueOperand. ManualOperandSpeculation should
595         be passed whenever you will be performing the type checks yourself rather than
596         using the operand class to do it for you.
597
598         * dfg/DFGSpeculativeJIT.cpp:
599         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
600         (JSC::DFG::SpeculativeJIT::speculateNumber):
601
602 2013-02-22  Geoffrey Garen  <ggaren@apple.com>
603
604         Not reviewed.
605
606         Fix the 32-bit build by using the right data type in more places.
607
608         * runtime/CodeCache.h:
609         (CodeCacheMap):
610
611 2013-02-22  Geoffrey Garen  <ggaren@apple.com>
612
613         Not reviewed.
614
615         Fix the 32-bit build by using the right data type.
616
617         * runtime/CodeCache.h:
618         (JSC::CodeCacheMap::find):
619
620 2013-02-21  Geoffrey Garen  <ggaren@apple.com>
621
622         Code cache size should adapt to workload
623         https://bugs.webkit.org/show_bug.cgi?id=110560
624
625         Reviewed by Antti Koivisto.
626
627         (*) 5% PLT arithmetic mean speedup
628         (*) 10% PLT geometric mean speedup
629         (*) 3.4X microbenchmark speedup
630         (*) Reduces initial cache capacity by 16X
631
632         * runtime/CodeCache.cpp:
633         (JSC::CodeCache::CodeCache): Updated for interface change.
634
635         * runtime/CodeCache.h:
636         (JSC::SourceCodeValue::SourceCodeValue):
637         (SourceCodeValue): Turned the cache value into a struct so it can track its age.
638
639         (CodeCacheMap):
640         (JSC::CodeCacheMap::CodeCacheMap):
641         (JSC::CodeCacheMap::find):
642         (JSC::CodeCacheMap::set):
643         (JSC::CodeCacheMap::clear):
644         (JSC::CodeCacheMap::pruneIfNeeded):
645         (CodeCache): Grow and shrink in response to usage.
646
647 2013-02-21  Jessie Berlin  <jberlin@apple.com>
648
649         Fix a typo that broke the 32 bit build.
650
651         * dfg/DFGSpeculativeJIT32_64.cpp:
652         (JSC::DFG::SpeculativeJIT::compile):
653
654 2013-02-21  Michael Saboff  <msaboff@apple.com>
655
656         25-30% regression in V8 RayTrace test in 32 bit builds with JIT disabled
657         https://bugs.webkit.org/show_bug.cgi?id=110539
658
659         Reviewed by Filip Pizlo.
660
661         Change the scale used to lookup pointers in JSGlobalObject::m_specialPointers to be 4 bytes for
662         the 32 bit version of the interpreter.
663
664         * llint/LowLevelInterpreter32_64.asm:
665
666 2013-02-21  Roger Fong  <roger_fong@apple.com>
667
668         Unreviewed. Add executable property to cmd file.
669         Required for executable files to maintain their executable permissions over svn.
670
671         * JavaScriptCore.vcxproj/copy-files.cmd: Added property svn:executable.
672
673 2013-02-21  Filip Pizlo  <fpizlo@apple.com>
674
675         Object allocation profiling will refuse to create objects with more than JSFinalObject::maxInlineCapacity() inline slots, but JSFunction::allocationProfile() asserts that the number of inline slots is always what it asked for
676         https://bugs.webkit.org/show_bug.cgi?id=110519
677         <rdar://problem/13218566>
678
679         Reviewed by Geoffrey Garen.
680         
681         * runtime/JSFunction.h:
682         (JSC::JSFunction::allocationProfile):
683
684 2013-02-21  Roger Fong  <roger_fong@apple.com>
685
686         Unreviewed. Build fix for VS2010 WebKit solution.
687
688         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
689
690 2013-02-20  Filip Pizlo  <fpizlo@apple.com>
691
692         DFG should not change its mind about what type speculations a node does, by encoding the checks in the NodeType, UseKind, and ArrayMode
693         https://bugs.webkit.org/show_bug.cgi?id=109371
694
695         Reviewed by Oliver Hunt.
696         
697         FixupPhase now locks in the speculations that each node will do. The DFG then
698         remembers those speculations, and doesn't change its mind about them even if the
699         graph is transformed - for example if a node's child is repointed to a different
700         node as part of CSE, CFG simplification, or folding. Each node ensures that it
701         executes the speculations promised by its edges. This is true even for Phantom
702         nodes.
703         
704         This still leaves some craziness on the table for future work, like the
705         elimination of speculating SetLocal's due to CFG simplification
706         (webkit.org/b/109388) and elimination of nodes via DCE (webkit.org/b/109389).
707         
708         In all, this allows for a huge simplification of the DFG. Instead of having to
709         execute the right speculation heuristic each time you want to decide what a node
710         does (for example Node::shouldSpeculateInteger(child1, child2) &&
711         node->canSpeculateInteger()), you just ask for the use kinds of its children
712         (typically node->binaryUseKind() == Int32Use). Because the use kinds are
713         discrete, you can often just switch over them. This makes many parts of the code
714         more clear than they were before.
715         
716         Having UseKinds describe the speculations being performed also makes it far
717         easier to perform analyses that need to know what speculations are done. This is
718         so far only used to simplify large parts of the CFA.
719         
720         To have a larger vocabulary of UseKinds, this also changes the node allocator to
721         be able to round up Node sizes to the nearest multiple of 16.
722         
723         This appears to be neutral on benchmarks, except for some goofy speed-ups, like
724         8% on Octane/box2d.
725
726         * CMakeLists.txt:
727         * GNUmakefile.list.am:
728         * JavaScriptCore.xcodeproj/project.pbxproj:
729         * Target.pri:
730         * dfg/DFGAbstractState.cpp:
731         (JSC::DFG::AbstractState::startExecuting):
732         (DFG):
733         (JSC::DFG::AbstractState::executeEdges):
734         (JSC::DFG::AbstractState::verifyEdge):
735         (JSC::DFG::AbstractState::verifyEdges):
736         (JSC::DFG::AbstractState::executeEffects):
737         (JSC::DFG::AbstractState::execute):
738         * dfg/DFGAbstractState.h:
739         (AbstractState):
740         (JSC::DFG::AbstractState::filterEdgeByUse):
741         (JSC::DFG::AbstractState::filterByType):
742         * dfg/DFGAbstractValue.h:
743         (JSC::DFG::AbstractValue::filter):
744         * dfg/DFGAdjacencyList.h:
745         (JSC::DFG::AdjacencyList::AdjacencyList):
746         (JSC::DFG::AdjacencyList::child):
747         (JSC::DFG::AdjacencyList::setChild):
748         (JSC::DFG::AdjacencyList::reset):
749         (JSC::DFG::AdjacencyList::firstChild):
750         (JSC::DFG::AdjacencyList::setFirstChild):
751         (JSC::DFG::AdjacencyList::numChildren):
752         (JSC::DFG::AdjacencyList::setNumChildren):
753         (AdjacencyList):
754         * dfg/DFGAllocator.h:
755         (DFG):
756         (Allocator):
757         (JSC::DFG::Allocator::cellSize):
758         (JSC::DFG::Allocator::Region::headerSize):
759         (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
760         (JSC::DFG::Allocator::Region::payloadSize):
761         (JSC::DFG::Allocator::Region::payloadBegin):
762         (JSC::DFG::Allocator::Region::payloadEnd):
763         (JSC::DFG::Allocator::Region::isInThisRegion):
764         (JSC::DFG::::Allocator):
765         (JSC::DFG::::~Allocator):
766         (JSC::DFG::::allocate):
767         (JSC::DFG::::free):
768         (JSC::DFG::::freeAll):
769         (JSC::DFG::::reset):
770         (JSC::DFG::::indexOf):
771         (JSC::DFG::::allocatorOf):
772         (JSC::DFG::::bumpAllocate):
773         (JSC::DFG::::freeListAllocate):
774         (JSC::DFG::::allocateSlow):
775         (JSC::DFG::::freeRegionsStartingAt):
776         (JSC::DFG::::startBumpingIn):
777         * dfg/DFGByteCodeParser.cpp:
778         (JSC::DFG::ByteCodeParser::addToGraph):
779         (JSC::DFG::ByteCodeParser::handleMinMax):
780         * dfg/DFGCSEPhase.cpp:
781         (JSC::DFG::CSEPhase::setLocalStoreElimination):
782         (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
783         (JSC::DFG::CSEPhase::setReplacement):
784         (JSC::DFG::CSEPhase::performNodeCSE):
785         * dfg/DFGCommon.h:
786         (DFG):
787         * dfg/DFGConstantFoldingPhase.cpp:
788         (JSC::DFG::ConstantFoldingPhase::foldConstants):
789         (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
790         * dfg/DFGDriver.cpp:
791         (JSC::DFG::compile):
792         * dfg/DFGEdge.cpp:
793         (JSC::DFG::Edge::dump):
794         * dfg/DFGEdge.h:
795         (JSC::DFG::Edge::useKindUnchecked):
796         (JSC::DFG::Edge::useKind):
797         (JSC::DFG::Edge::shift):
798         * dfg/DFGFixupPhase.cpp:
799         (JSC::DFG::FixupPhase::run):
800         (JSC::DFG::FixupPhase::fixupNode):
801         (JSC::DFG::FixupPhase::checkArray):
802         (JSC::DFG::FixupPhase::blessArrayOperation):
803         (JSC::DFG::FixupPhase::fixIntEdge):
804         (JSC::DFG::FixupPhase::fixDoubleEdge):
805         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
806         (FixupPhase):
807         (JSC::DFG::FixupPhase::truncateConstantToInt32):
808         (JSC::DFG::FixupPhase::truncateConstantsIfNecessary):
809         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
810         * dfg/DFGGraph.cpp:
811         (DFG):
812         (JSC::DFG::Graph::refChildren):
813         (JSC::DFG::Graph::derefChildren):
814         * dfg/DFGGraph.h:
815         (JSC::DFG::Graph::ref):
816         (JSC::DFG::Graph::deref):
817         (JSC::DFG::Graph::performSubstitution):
818         (JSC::DFG::Graph::isPredictedNumerical):
819         (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
820         (DFG):
821         * dfg/DFGNode.h:
822         (JSC::DFG::Node::Node):
823         (JSC::DFG::Node::convertToGetByOffset):
824         (JSC::DFG::Node::convertToPutByOffset):
825         (JSC::DFG::Node::willHaveCodeGenOrOSR):
826         (JSC::DFG::Node::child1):
827         (JSC::DFG::Node::child2):
828         (JSC::DFG::Node::child3):
829         (JSC::DFG::Node::binaryUseKind):
830         (Node):
831         (JSC::DFG::Node::isBinaryUseKind):
832         * dfg/DFGNodeAllocator.h:
833         (DFG):
834         * dfg/DFGNodeFlags.cpp:
835         (JSC::DFG::nodeFlagsAsString):
836         * dfg/DFGNodeType.h:
837         (DFG):
838         * dfg/DFGPredictionPropagationPhase.cpp:
839         (JSC::DFG::PredictionPropagationPhase::propagate):
840         * dfg/DFGSpeculativeJIT.cpp:
841         (JSC::DFG::SpeculativeJIT::speculationCheck):
842         (DFG):
843         (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
844         (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
845         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
846         (JSC::DFG::SpeculativeJIT::typeCheck):
847         (JSC::DFG::SpeculativeJIT::forwardTypeCheck):
848         (JSC::DFG::SpeculativeJIT::fillStorage):
849         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
850         (JSC::DFG::SpeculativeJIT::compile):
851         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
852         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
853         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
854         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
855         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
856         (JSC::DFG::SpeculativeJIT::compileAdd):
857         (JSC::DFG::SpeculativeJIT::compileArithSub):
858         (JSC::DFG::SpeculativeJIT::compileArithNegate):
859         (JSC::DFG::SpeculativeJIT::compileArithMul):
860         (JSC::DFG::SpeculativeJIT::compileArithMod):
861         (JSC::DFG::SpeculativeJIT::compare):
862         (JSC::DFG::SpeculativeJIT::compileStrictEq):
863         (JSC::DFG::SpeculativeJIT::speculateInt32):
864         (JSC::DFG::SpeculativeJIT::speculateNumber):
865         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
866         (JSC::DFG::SpeculativeJIT::speculateBoolean):
867         (JSC::DFG::SpeculativeJIT::speculateCell):
868         (JSC::DFG::SpeculativeJIT::speculateObject):
869         (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
870         (JSC::DFG::SpeculativeJIT::speculateString):
871         (JSC::DFG::SpeculativeJIT::speculateNotCell):
872         (JSC::DFG::SpeculativeJIT::speculateOther):
873         (JSC::DFG::SpeculativeJIT::speculate):
874         * dfg/DFGSpeculativeJIT.h:
875         (SpeculativeJIT):
876         (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
877         (JSC::DFG::SpeculativeJIT::needsTypeCheck):
878         (JSC::DFG::IntegerOperand::IntegerOperand):
879         (JSC::DFG::IntegerOperand::edge):
880         (IntegerOperand):
881         (JSC::DFG::IntegerOperand::node):
882         (JSC::DFG::IntegerOperand::gpr):
883         (JSC::DFG::IntegerOperand::use):
884         (JSC::DFG::JSValueOperand::JSValueOperand):
885         (JSValueOperand):
886         (JSC::DFG::JSValueOperand::edge):
887         (JSC::DFG::JSValueOperand::node):
888         (JSC::DFG::JSValueOperand::gpr):
889         (JSC::DFG::JSValueOperand::fill):
890         (JSC::DFG::JSValueOperand::use):
891         (JSC::DFG::StorageOperand::StorageOperand):
892         (JSC::DFG::StorageOperand::edge):
893         (StorageOperand):
894         (JSC::DFG::StorageOperand::node):
895         (JSC::DFG::StorageOperand::gpr):
896         (JSC::DFG::StorageOperand::use):
897         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
898         (SpeculateIntegerOperand):
899         (JSC::DFG::SpeculateIntegerOperand::edge):
900         (JSC::DFG::SpeculateIntegerOperand::node):
901         (JSC::DFG::SpeculateIntegerOperand::gpr):
902         (JSC::DFG::SpeculateIntegerOperand::use):
903         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
904         (SpeculateStrictInt32Operand):
905         (JSC::DFG::SpeculateStrictInt32Operand::edge):
906         (JSC::DFG::SpeculateStrictInt32Operand::node):
907         (JSC::DFG::SpeculateStrictInt32Operand::gpr):
908         (JSC::DFG::SpeculateStrictInt32Operand::use):
909         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
910         (SpeculateDoubleOperand):
911         (JSC::DFG::SpeculateDoubleOperand::edge):
912         (JSC::DFG::SpeculateDoubleOperand::node):
913         (JSC::DFG::SpeculateDoubleOperand::fpr):
914         (JSC::DFG::SpeculateDoubleOperand::use):
915         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
916         (SpeculateCellOperand):
917         (JSC::DFG::SpeculateCellOperand::edge):
918         (JSC::DFG::SpeculateCellOperand::node):
919         (JSC::DFG::SpeculateCellOperand::gpr):
920         (JSC::DFG::SpeculateCellOperand::use):
921         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
922         (JSC::DFG::SpeculateBooleanOperand::edge):
923         (SpeculateBooleanOperand):
924         (JSC::DFG::SpeculateBooleanOperand::node):
925         (JSC::DFG::SpeculateBooleanOperand::gpr):
926         (JSC::DFG::SpeculateBooleanOperand::use):
927         (DFG):
928         * dfg/DFGSpeculativeJIT32_64.cpp:
929         (JSC::DFG::SpeculativeJIT::fillInteger):
930         (JSC::DFG::SpeculativeJIT::fillJSValue):
931         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
932         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
933         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
934         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
935         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
936         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
937         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
938         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
939         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
940         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
941         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
942         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
943         (JSC::DFG::SpeculativeJIT::emitBranch):
944         (JSC::DFG::SpeculativeJIT::compile):
945         * dfg/DFGSpeculativeJIT64.cpp:
946         (JSC::DFG::SpeculativeJIT::fillInteger):
947         (JSC::DFG::SpeculativeJIT::fillJSValue):
948         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
949         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
950         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
951         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
952         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
953         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
954         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
955         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
956         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
957         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
958         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
959         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
960         (JSC::DFG::SpeculativeJIT::emitBranch):
961         (JSC::DFG::SpeculativeJIT::compile):
962         * dfg/DFGStructureCheckHoistingPhase.cpp:
963         (JSC::DFG::StructureCheckHoistingPhase::run):
964         * dfg/DFGUseKind.cpp: Added.
965         (WTF):
966         (WTF::printInternal):
967         * dfg/DFGUseKind.h: Added.
968         (DFG):
969         (JSC::DFG::typeFilterFor):
970         (JSC::DFG::isNumerical):
971         (WTF):
972         * dfg/DFGValidate.cpp:
973         (JSC::DFG::Validate::reportValidationContext):
974
975 2013-02-20  Mark Hahnenberg  <mhahnenberg@apple.com>
976
977         Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
978         https://bugs.webkit.org/show_bug.cgi?id=106059
979
980         Reviewed by Geoffrey Garen.
981         
982         * API/JSBase.h: Renamed enable flag for API.
983         * API/JSBlockAdaptor.h: Using new flag.
984         * API/JSBlockAdaptor.mm: Ditto.
985         * API/JSContext.h: Add convenience C API conversion function for JSGlobalContextRef.
986         * API/JSContext.mm: 
987         (-[JSContext JSGlobalContextRef]): Implementation of C API convenience function.
988         (-[JSContext initWithVirtualMachine:]): We don't use the m_apiData field any more.
989         (-[JSContext initWithGlobalContextRef:]): init method for allocating new JSContexts given a JSGlobalContextRef.
990         (-[JSContext dealloc]): No more m_apiData.
991         (-[JSContext wrapperForObjCObject:]): Renamed wrapperForObject. 
992         (-[JSContext wrapperForJSObject:]): Fetches or allocates the JSValue for the specified JSValueRef in this JSContext.
993         (+[JSContext contextWithGlobalContextRef:]): Helper function to grab the lightweight JSContext wrapper for a given
994         JSGlobalContextRef from the global wrapper cache or allocate a new one if there isn't already one.
995         * API/JSContextInternal.h: New flag, new method declaration for initWithGlobalContextRef.
996         * API/JSExport.h: New flag.
997         * API/JSValue.h: New flag and new C API convenience method.
998         * API/JSValue.mm:
999         (-[JSValue JSValueRef]): Implementation of the C API convenience method.
1000         (objectToValueWithoutCopy):
1001         (+[JSValue valueWithValue:inContext:]): We now ask the JSContext for an Objective-C JSValue wrapper, which it can cache
1002         in its internal JSWrapperMap.
1003         * API/JSValueInternal.h:
1004         * API/JSVirtualMachine.h:
1005         * API/JSVirtualMachine.mm: Added global cache that maps JSContextGroupRef -> JSVirtualMachine lightweight wrappers.
1006         (wrapperCacheLock):
1007         (initWrapperCache):
1008         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
1009         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
1010         (-[JSVirtualMachine init]):
1011         (-[JSVirtualMachine initWithContextGroupRef:]):
1012         (-[JSVirtualMachine dealloc]):
1013         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
1014         (-[JSVirtualMachine contextForGlobalContextRef:]):
1015         (-[JSVirtualMachine addContext:forGlobalContextRef:]):
1016         * API/JSVirtualMachineInternal.h:
1017         * API/JSWrapperMap.h:
1018         * API/JSWrapperMap.mm:
1019         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We use the JSObjectSetPrototype C API call because 
1020         setting the __proto__ property causes all sorts of bad things to happen behind the scenes, which can cause crashes based on 
1021         when it gets called.
1022         (-[JSWrapperMap initWithContext:]):
1023         (-[JSWrapperMap jsWrapperForObject:]):
1024         (-[JSWrapperMap objcWrapperForJSValueRef:]):
1025         * API/JavaScriptCore.h:
1026         * API/ObjCCallbackFunction.h:
1027         * API/ObjCCallbackFunction.mm:
1028         (ObjCCallbackFunction::ObjCCallbackFunction): We never actually should have retained the target in the case that we had a 
1029         block as a callback. Blocks are initially allocated on the stack and are only moved to the heap if we call their copy method.
1030         Retaining the block on the stack was a bad idea because if that stack frame ever went away and we called the block later, 
1031         we'd crash and burn.
1032         (ObjCCallbackFunction::setContext): We need a new setter for when the weak reference to a JSContext inside an ObjCCallbackFunction
1033         disappears, we can allocate a new one in its place.
1034         (ObjCCallbackFunction):
1035         (objCCallbackFunctionCallAsFunction): Reset the callback's context if it's ever destroyed.
1036         (objCCallbackFunctionForInvocation): Again, don't set the __proto__ property because it uses black magic that can cause us to crash
1037         depending on when this is called.
1038         (objCCallbackFunctionForBlock): Here is where we copy the block to the heap when we're first creating the callback object for it.
1039         * API/tests/testapi.c:
1040         (main):
1041         * API/tests/testapi.mm: We're going to get rid of the automatic block conversion, since that is causing leaks. I changed it 
1042         here in this test just so that it wouldn't mask any other potential leaks. Also modified some of the tests since JSContexts are 
1043         just lightweight wrappers now, we're not guaranteed to get the same pointer back from the call to [JSValue context] as the one 
1044         that the value was created in.
1045         (-[TestObject callback:]):
1046         * JavaScriptCore.xcodeproj/project.pbxproj:
1047         * runtime/JSGlobalData.cpp:
1048         (JSC::JSGlobalData::JSGlobalData): No more m_apiData.
1049         * runtime/JSGlobalData.h: Ditto.
1050         * runtime/JSGlobalObject.cpp:
1051         (JSC::JSGlobalObject::JSGlobalObject): Ditto.
1052         * runtime/JSGlobalObject.h:
1053
1054 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
1055
1056         DFG::SpeculativeJIT::compileInt32ToDouble() has an unnecessary case for constant operands
1057         https://bugs.webkit.org/show_bug.cgi?id=110309
1058
1059         Reviewed by Sam Weinig.
1060         
1061         It used to be necessary, back when we didn't have constant folding. Now we have
1062         constant folding. So we don't need it.
1063
1064         * dfg/DFGSpeculativeJIT.cpp:
1065         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
1066
1067 2013-02-20  Filip Pizlo  <fpizlo@apple.com>
1068
1069         DFG inlines Resolves that it doesn't know how to handle correctly
1070         https://bugs.webkit.org/show_bug.cgi?id=110405
1071
1072         Reviewed by Geoffrey Garen.
1073         
1074         Don't try to be clever: if there's a failing resolve, we can't inline it, period.
1075
1076         * dfg/DFGCapabilities.h:
1077         (JSC::DFG::canInlineResolveOperations):
1078         (JSC::DFG::canInlineOpcode):
1079
1080 2013-02-20  Roger Fong  <roger_fong@apple.com>
1081
1082         Get VS2010 Solution B&I ready.
1083         <rdar://problem/1322988>
1084
1085         Rubberstamped by Timothy Horton.        
1086         
1087         Add Production configuration. 
1088         Add a JavaScriptCore submit solution with a DebugSuffix configuration. 
1089         Modify JavaScriptCore.make as necessary.
1090         
1091         * JavaScriptCore.vcxproj/JavaScriptCore.make: Added.
1092         * JavaScriptCore.vcxproj/JavaScriptCore.sln: Removed.
1093         * JavaScriptCore.vcxproj/JavaScriptCore.submit.sln: Copied from Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.sln.
1094         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1095         * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
1096         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
1097         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
1098         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
1099         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPreBuild.cmd:
1100         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorProduction.props: Added.
1101         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props:
1102         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj:
1103         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj.filters:
1104         * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedProduction.props: Added.
1105         * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedRelease.props:
1106         * JavaScriptCore.vcxproj/JavaScriptCoreProduction.props: Added.
1107         * JavaScriptCore.vcxproj/JavaScriptCoreRelease.props:
1108         * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
1109         * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
1110         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
1111         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props:
1112         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props:
1113         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorProduction.props: Added.
1114         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.props:
1115         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj:
1116         * JavaScriptCore.vcxproj/jsc/jscCommon.props:
1117         * JavaScriptCore.vcxproj/jsc/jscProduction.props: Added.
1118         * JavaScriptCore.vcxproj/jsc/jscRelease.props:
1119         * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj:
1120         * JavaScriptCore.vcxproj/testRegExp/testRegExpCommon.props:
1121         * JavaScriptCore.vcxproj/testRegExp/testRegExpProduction.props: Added.
1122         * JavaScriptCore.vcxproj/testRegExp/testRegExpRelease.props:
1123         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj:
1124         * JavaScriptCore.vcxproj/testapi/testapiCommon.props:
1125         * JavaScriptCore.vcxproj/testapi/testapiProduction.props: Added.
1126         * JavaScriptCore.vcxproj/testapi/testapiRelease.props:
1127
1128 2013-02-19  Jer Noble  <jer.noble@apple.com>
1129
1130         EME: Enable both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 until clients transition to the new API.
1131         https://bugs.webkit.org/show_bug.cgi?id=110284
1132
1133         Reviewed by Eric Carlson.
1134
1135         Re-enable the ENCRYPTED_MEDIA flag.
1136
1137         * Configurations/FeatureDefines.xcconfig:
1138
1139 2013-02-20  Dirk Schulze  <krit@webkit.org>
1140
1141         Enable CANVAS_PATH flag
1142         https://bugs.webkit.org/show_bug.cgi?id=108508
1143
1144         Reviewed by Simon Fraser.
1145
1146         Enable CANVAS_PATH flag on trunk.
1147
1148         Existing tests cover the feature.
1149
1150         * Configurations/FeatureDefines.xcconfig:
1151
1152 2013-02-19  Mark Rowe  <mrowe@apple.com>
1153
1154         Unreviewed, uninteresting change to test a theory about bad dependency handling.
1155
1156         * API/JSStringRefCF.cpp:
1157         (JSStringCreateWithCFString): Remove an unnecessary else clause.
1158
1159 2013-02-19  Oliver Hunt  <oliver@apple.com>
1160
1161         Silence some analyzer warnings
1162         https://bugs.webkit.org/show_bug.cgi?id=110281
1163
1164         Reviewed by Mark Hahnenberg.
1165
1166         The static analyzer believes that callerCodeBlock can be null,
1167         based on other code performing null tests.  This should not
1168         ever be the case, but we'll add RELEASE_ASSERTs to make it
1169         obvious if we're ever wrong.
1170
1171         * interpreter/Interpreter.cpp:
1172         (JSC::getCallerInfo):
1173
1174 2013-02-19  Oliver Hunt  <oliver@apple.com>
1175
1176         Don't force everything to be blinded in debug builds
1177         https://bugs.webkit.org/show_bug.cgi?id=110279
1178
1179         Reviewed by Mark Hahnenberg.
1180
1181         Switch to an explicit flag for indicating that we want
1182         every constant to be blinded.
1183
1184         * assembler/MacroAssembler.h:
1185         (JSC::MacroAssembler::shouldBlind):
1186
1187 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
1188
1189         Fix indentation of Opcode.h
1190
1191         Rubber stamped by Mark Hahnenberg.
1192
1193         * bytecode/Opcode.h:
1194
1195 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
1196
1197         Moved PolymorphicAccessStructureList into its own file.
1198
1199         Rubber stamped by Mark Hahnenberg.
1200
1201         * GNUmakefile.list.am:
1202         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1203         * JavaScriptCore.xcodeproj/project.pbxproj:
1204         * bytecode/Instruction.h:
1205         (JSC):
1206         * bytecode/PolymorphicAccessStructureList.h: Added.
1207         (JSC):
1208         (PolymorphicAccessStructureList):
1209         (PolymorphicStubInfo):
1210         (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo):
1211         (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
1212         (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
1213         (JSC::PolymorphicAccessStructureList::visitWeak):
1214         * bytecode/StructureStubInfo.h:
1215
1216 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
1217
1218         Fix indentation of Instruction.h
1219
1220         Rubber stamped by Mark Hahnenberg.
1221
1222         * bytecode/Instruction.h:
1223
1224 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
1225
1226         Unreviewed, rolling in r143348.
1227         http://trac.webkit.org/changeset/143348
1228         https://bugs.webkit.org/show_bug.cgi?id=110242
1229
1230         The bug was that isEmptyValue() was returning true for the deleted value.
1231         Fixed this and simplified things further by delegating to m_sourceCode
1232         for both isNull() and isHashTableDeletedValue(), so they can't be out of
1233         sync.
1234
1235         * runtime/CodeCache.cpp:
1236         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
1237         * runtime/CodeCache.h:
1238         (JSC::SourceCodeKey::SourceCodeKey):
1239         (JSC::SourceCodeKey::isHashTableDeletedValue):
1240         (JSC::SourceCodeKey::hash):
1241         (JSC::SourceCodeKey::length):
1242         (JSC::SourceCodeKey::isNull):
1243         (JSC::SourceCodeKey::operator==):
1244         (SourceCodeKey):
1245
1246 2013-02-15  Martin Robinson  <mrobinson@igalia.com>
1247
1248         [GTK] Improve gyp build JavaScriptCore code generation
1249         https://bugs.webkit.org/show_bug.cgi?id=109969
1250
1251         Reviewed by Dirk Pranke.
1252
1253         Switch away from using DerivedSources.make when building JavaScriptCore generated
1254         sources. This bring a couple advantages, such as building the sources in parallel,
1255         but requires us to list the generated sources more than once.
1256
1257         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Add rules for generating JavaScriptCore sources.
1258         * JavaScriptCore.gyp/generate-derived-sources.sh: Added.
1259         * JavaScriptCore.gyp/redirect-stdout.sh: Added.
1260
1261 2013-02-19  Sheriff Bot  <webkit.review.bot@gmail.com>
1262
1263         Unreviewed, rolling out r143348.
1264         http://trac.webkit.org/changeset/143348
1265         https://bugs.webkit.org/show_bug.cgi?id=110242
1266
1267         "Caused a deleted value sentinel crash on the layout tests"
1268         (Requested by ggaren on #webkit).
1269
1270         * runtime/CodeCache.cpp:
1271         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
1272         * runtime/CodeCache.h:
1273         (JSC::SourceCodeKey::SourceCodeKey):
1274         (JSC::SourceCodeKey::isHashTableDeletedValue):
1275         (JSC::SourceCodeKey::hash):
1276         (JSC::SourceCodeKey::length):
1277         (JSC::SourceCodeKey::isNull):
1278         (JSC::SourceCodeKey::operator==):
1279         (SourceCodeKey):
1280
1281 2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>
1282
1283         HeapBlock::destroy should issue warning if result is unused
1284         https://bugs.webkit.org/show_bug.cgi?id=110233
1285
1286         Reviewed by Oliver Hunt.
1287
1288         To enforce the fact that we need to return blocks to the BlockAllocator after calling destroy, 
1289         we should add WARN_UNUSED_RETURN to HeapBlock::destroy and any other destroy functions in its subclasses.
1290
1291         * heap/HeapBlock.h:
1292
1293 2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>
1294
1295         WeakSet::removeAllocator leaks WeakBlocks
1296         https://bugs.webkit.org/show_bug.cgi?id=110228
1297
1298         Reviewed by Geoffrey Garen.
1299
1300         We need to return the WeakBlock to the BlockAllocator after the call to WeakBlock::destroy.
1301
1302         * heap/WeakSet.cpp:
1303         (JSC::WeakSet::removeAllocator):
1304
1305 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
1306
1307         Save space on keys in the CodeCache
1308         https://bugs.webkit.org/show_bug.cgi?id=110179
1309
1310         Reviewed by Oliver Hunt.
1311
1312         Share the SourceProvider's string instead of making our own copy. This
1313         chops off 16MB - 32MB from the CodeCache's memory footprint when full.
1314         (It's 16MB when the strings are LChar, and 32MB when they're UChar.)
1315
1316         * runtime/CodeCache.cpp:
1317         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
1318         * runtime/CodeCache.h: Removed a defunct enum value.
1319
1320         (JSC::SourceCodeKey::SourceCodeKey):
1321         (JSC::SourceCodeKey::isHashTableDeletedValue):
1322         (SourceCodeKey):
1323         (JSC::SourceCodeKey::hash):
1324         (JSC::SourceCodeKey::length):
1325         (JSC::SourceCodeKey::isNull):
1326         (JSC::SourceCodeKey::string):
1327         (JSC::SourceCodeKey::operator==): Store a SourceCode instead of a String
1328         so we can share our string with our SourceProvider. Cache our hash so
1329         we don't have to re-decode our string just to re-hash the table.
1330
1331 2013-02-19  Zoltan Herczeg  <zherczeg@webkit.org>
1332
1333         revertBranchPtrWithPatch is incorrect on ARM traditional
1334         https://bugs.webkit.org/show_bug.cgi?id=110201
1335
1336         Reviewed by Oliver Hunt.
1337
1338         Revert two instructions back to their original value.
1339
1340         * assembler/ARMAssembler.h:
1341         (JSC::ARMAssembler::revertBranchPtrWithPatch):
1342         (ARMAssembler):
1343         * assembler/MacroAssemblerARM.h:
1344         (JSC::MacroAssemblerARM::branchPtrWithPatch):
1345         (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch):
1346
1347 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
1348
1349         REGRESSION(r143241): It made 27 layout tests crash on 32 bit platforms
1350         https://bugs.webkit.org/show_bug.cgi?id=110184
1351
1352         Reviewed by Zoltan Herczeg.
1353         
1354         32-bit backend was making all sorts of crazy assumptions, which happened to mostly
1355         not break things prior to http://trac.webkit.org/changeset/143241. This brings the
1356         32-bit backend's type speculation fully into compliance with what the 64-bit
1357         backend does.
1358
1359         * dfg/DFGSpeculativeJIT.cpp:
1360         (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
1361         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1362         * dfg/DFGSpeculativeJIT32_64.cpp:
1363         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1364         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1365         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1366         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
1367
1368 2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>
1369
1370         Unreviewed build fix for Apple Windows. Second stage.
1371         Add missed export statement.
1372
1373         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
1374
1375 2013-02-18  Roger Fong  <roger_fong@apple.com>
1376
1377         Unreviewed Windows build fix.
1378
1379         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
1380         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
1381
1382 2013-02-18  Darin Adler  <darin@apple.com>
1383
1384         Remove unneeded explicit function template arguments.
1385         https://bugs.webkit.org/show_bug.cgi?id=110043
1386
1387         Reviewed by Ryosuke Niwa.
1388
1389         * runtime/Identifier.cpp:
1390         (JSC::IdentifierASCIIStringTranslator::hash): Let the compiler deduce the type
1391         when calling computeHashAndMaskTop8Bits.
1392         (JSC::IdentifierLCharFromUCharTranslator::hash): Ditto.
1393         * runtime/Identifier.h:
1394         (JSC::IdentifierCharBufferTranslator::hash): Ditto.
1395 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
1396
1397         Shrank the SourceProvider cache
1398         https://bugs.webkit.org/show_bug.cgi?id=110158
1399
1400         Reviewed by Oliver Hunt.
1401
1402         CodeCache is now our primary source cache, so a long-lived SourceProvider
1403         cache is a waste. I measured this as a 10MB Membuster win; with more
1404         precise instrumentation, Andreas estimated it as up to 30MB.
1405
1406         I didn't eliminate the SourceProvider cache because it's still useful
1407         in speeding up uncached parsing of scripts with large nested functions
1408         (i.e., all scripts).
1409
1410         * heap/Heap.cpp:
1411         (JSC::Heap::collect): Discard all source provider caches after GC. This
1412         is a convenient place to do so because it's reasonably soon after initial
1413         parsing without being immediate.
1414
1415         * parser/Parser.cpp:
1416         (JSC::::Parser): Updated for interface change: The heap now owns the
1417         source provider cache, since most SourceProviders are not expected to
1418         have one by default, and the heap is responsible for throwing them away.
1419
1420         (JSC::::parseInner): No need to update statistics on cache size, since
1421         we're going to throw it away no matter what.
1422
1423         (JSC::::parseFunctionInfo): Reduced the minimum function size to 16. This
1424         is a 27% win on a new parsing micro-benchmark I've added. Now that the
1425         cache is temporary, we don't have to worry so much about its memory
1426         footprint.
1427
1428         * parser/Parser.h:
1429         (Parser): Updated for interface changes.
1430
1431         * parser/SourceProvider.cpp:
1432         (JSC::SourceProvider::SourceProvider):
1433         (JSC::SourceProvider::~SourceProvider):
1434         * parser/SourceProvider.h:
1435         (JSC):
1436         (SourceProvider): SourceProvider doesn't own its cache anymore because
1437         the cache is temporary.
1438
1439         * parser/SourceProviderCache.cpp:
1440         (JSC::SourceProviderCache::clear):
1441         (JSC::SourceProviderCache::add):
1442         * parser/SourceProviderCache.h:
1443         (JSC::SourceProviderCache::SourceProviderCache):
1444         (SourceProviderCache):
1445         * parser/SourceProviderCacheItem.h:
1446         (SourceProviderCacheItem): No need to update statistics on cache size,
1447         since we're going to throw it away no matter what.
1448
1449         * runtime/JSGlobalData.cpp:
1450         (JSC::JSGlobalData::addSourceProviderCache):
1451         (JSC):
1452         (JSC::JSGlobalData::clearSourceProviderCaches):
1453         * runtime/JSGlobalData.h:
1454         (JSC):
1455         (JSGlobalData): Moved the cache here so it's easier to throw away.
1456
1457 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1458
1459         DFG backend Branch handling has duplicate code and dead code
1460         https://bugs.webkit.org/show_bug.cgi?id=110162
1461
1462         Reviewed by Mark Hahnenberg.
1463         
1464         Streamline the code, and make the 64 backend's optimizations make more sense
1465         (i.e. not be dead code).
1466
1467         * dfg/DFGSpeculativeJIT32_64.cpp:
1468         (JSC::DFG::SpeculativeJIT::compile):
1469         * dfg/DFGSpeculativeJIT64.cpp:
1470         (JSC::DFG::SpeculativeJIT::emitBranch):
1471         (JSC::DFG::SpeculativeJIT::compile):
1472
1473 2013-02-18  Brent Fulgham  <bfulgham@webkit.org>
1474
1475         [Windows] Unreviewed VS2010 build correction after r143273.
1476
1477         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing source
1478         file SourceProvider.cpp.
1479         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
1480         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Add missing exports.
1481
1482 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1483
1484         Structure::flattenDictionaryStructure should compute max offset in a manner that soundly handles the case where the property list becomes empty
1485         https://bugs.webkit.org/show_bug.cgi?id=110155
1486         <rdar://problem/13233773>
1487
1488         Reviewed by Mark Rowe.
1489         
1490         This was a rookie mistake.  It was doing:
1491         
1492         for (blah) {
1493             m_offset = foo // foo's monotonically increase in the loop
1494         }
1495         
1496         as a way of computing max offset for all of the properties.  Except what if the loop doesn't
1497         execute because there are no properties?  Well, then, you're going to have a bogus m_offset.
1498         
1499         The solution is to initialize m_offset at the top of the loop.
1500
1501         * runtime/Structure.cpp:
1502         (JSC::Structure::flattenDictionaryStructure):
1503
1504 2013-02-18  Balazs Kilvady  <kilvadyb@homejinni.com>
1505
1506         MIPS DFG implementation.
1507         https://bugs.webkit.org/show_bug.cgi?id=101328
1508
1509         Reviewed by Oliver Hunt.
1510
1511         DFG implementation for MIPS.
1512
1513         * assembler/MIPSAssembler.h:
1514         (JSC::MIPSAssembler::MIPSAssembler):
1515         (JSC::MIPSAssembler::sllv):
1516         (JSC::MIPSAssembler::movd):
1517         (MIPSAssembler):
1518         (JSC::MIPSAssembler::negd):
1519         (JSC::MIPSAssembler::labelForWatchpoint):
1520         (JSC::MIPSAssembler::label):
1521         (JSC::MIPSAssembler::vmov):
1522         (JSC::MIPSAssembler::linkDirectJump):
1523         (JSC::MIPSAssembler::maxJumpReplacementSize):
1524         (JSC::MIPSAssembler::revertJumpToMove):
1525         (JSC::MIPSAssembler::replaceWithJump):
1526         * assembler/MacroAssembler.h:
1527         (MacroAssembler):
1528         (JSC::MacroAssembler::poke):
1529         * assembler/MacroAssemblerMIPS.h:
1530         (JSC::MacroAssemblerMIPS::add32):
1531         (MacroAssemblerMIPS):
1532         (JSC::MacroAssemblerMIPS::and32):
1533         (JSC::MacroAssemblerMIPS::lshift32):
1534         (JSC::MacroAssemblerMIPS::mul32):
1535         (JSC::MacroAssemblerMIPS::or32):
1536         (JSC::MacroAssemblerMIPS::rshift32):
1537         (JSC::MacroAssemblerMIPS::urshift32):
1538         (JSC::MacroAssemblerMIPS::sub32):
1539         (JSC::MacroAssemblerMIPS::xor32):
1540         (JSC::MacroAssemblerMIPS::store32):
1541         (JSC::MacroAssemblerMIPS::jump):
1542         (JSC::MacroAssemblerMIPS::branchAdd32):
1543         (JSC::MacroAssemblerMIPS::branchMul32):
1544         (JSC::MacroAssemblerMIPS::branchSub32):
1545         (JSC::MacroAssemblerMIPS::branchNeg32):
1546         (JSC::MacroAssemblerMIPS::call):
1547         (JSC::MacroAssemblerMIPS::loadDouble):
1548         (JSC::MacroAssemblerMIPS::moveDouble):
1549         (JSC::MacroAssemblerMIPS::swapDouble):
1550         (JSC::MacroAssemblerMIPS::subDouble):
1551         (JSC::MacroAssemblerMIPS::mulDouble):
1552         (JSC::MacroAssemblerMIPS::divDouble):
1553         (JSC::MacroAssemblerMIPS::negateDouble):
1554         (JSC::MacroAssemblerMIPS::branchEqual):
1555         (JSC::MacroAssemblerMIPS::branchNotEqual):
1556         (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
1557         (JSC::MacroAssemblerMIPS::branchTruncateDoubleToUint32):
1558         (JSC::MacroAssemblerMIPS::truncateDoubleToInt32):
1559         (JSC::MacroAssemblerMIPS::truncateDoubleToUint32):
1560         (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
1561         (JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):
1562         (JSC::MacroAssemblerMIPS::invert):
1563         (JSC::MacroAssemblerMIPS::replaceWithJump):
1564         (JSC::MacroAssemblerMIPS::maxJumpReplacementSize):
1565         * dfg/DFGAssemblyHelpers.h:
1566         (AssemblyHelpers):
1567         (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
1568         (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
1569         (JSC::DFG::AssemblyHelpers::debugCall):
1570         * dfg/DFGCCallHelpers.h:
1571         (CCallHelpers):
1572         (JSC::DFG::CCallHelpers::setupArguments):
1573         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
1574         * dfg/DFGFPRInfo.h:
1575         (DFG):
1576         (FPRInfo):
1577         (JSC::DFG::FPRInfo::toRegister):
1578         (JSC::DFG::FPRInfo::toIndex):
1579         (JSC::DFG::FPRInfo::debugName):
1580         * dfg/DFGGPRInfo.h:
1581         (DFG):
1582         (GPRInfo):
1583         (JSC::DFG::GPRInfo::toRegister):
1584         (JSC::DFG::GPRInfo::toIndex):
1585         (JSC::DFG::GPRInfo::debugName):
1586         * dfg/DFGSpeculativeJIT.h:
1587         (SpeculativeJIT):
1588         * jit/JSInterfaceJIT.h:
1589         (JSInterfaceJIT):
1590         * runtime/JSGlobalData.h:
1591         (JSC::ScratchBuffer::allocationSize):
1592         (ScratchBuffer):
1593
1594 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1595
1596         DFG::SpeculativeJIT::isKnownXYZ methods should use CFA rather than other things
1597         https://bugs.webkit.org/show_bug.cgi?id=110092
1598
1599         Reviewed by Geoffrey Garen.
1600         
1601         These methods were previously using GenerationInfo and other things to try to
1602         gain information that the CFA could give away for free, if you asked kindly
1603         enough.
1604         
1605         Also fixed CallLinkStatus's dump() method since it was making an invalid
1606         assertion: we most certainly can have a status where the structure is non-null
1607         and the executable is null, like if we're dealing with an InternalFunction.
1608         
1609         Also removed calls to isKnownNotXYZ from fillSpeculateABC methods in 32_64. I
1610         don't know why that was there. But it was causing asserts if the value was
1611         empty - i.e. we had already exited unconditionally but we didn't know it. I
1612         could have fixed this by introducing another form of isKnownNotXYZ which was
1613         tolerant of empty values, but I didn't feel like fixing code that I knew to be
1614         unnecessary. (More deeply, isKnownNotCell, for example, really asks: "do you
1615         know that this value can never be a cell?" while some of the previous uses
1616         wanted to ask: "do you know that this is a value that is not a cell?". The
1617         former is "true" if the value is a contradiction [i.e. BOTTOM], while the
1618         latter is "false" for contradictions, since contradictions are not values.)
1619
1620         * bytecode/CallLinkStatus.cpp:
1621         (JSC::CallLinkStatus::dump):
1622         * bytecode/CallLinkStatus.h:
1623         (JSC::CallLinkStatus::CallLinkStatus):
1624         * dfg/DFGSpeculativeJIT.cpp:
1625         (DFG):
1626         * dfg/DFGSpeculativeJIT.h:
1627         (JSC::DFG::SpeculativeJIT::isKnownInteger):
1628         (JSC::DFG::SpeculativeJIT::isKnownCell):
1629         (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
1630         (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
1631         (JSC::DFG::SpeculativeJIT::isKnownNotCell):
1632         * dfg/DFGSpeculativeJIT32_64.cpp:
1633         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1634         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1635         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1636         * dfg/DFGStructureAbstractValue.h:
1637         (JSC::DFG::StructureAbstractValue::dump):
1638
1639 2013-02-17  Filip Pizlo  <fpizlo@apple.com>
1640
1641         Get rid of DFG::DoubleOperand and simplify ValueToInt32
1642         https://bugs.webkit.org/show_bug.cgi?id=110072
1643
1644         Reviewed by Geoffrey Garen.
1645         
1646         ValueToInt32 had a side-effecting path, which was not OSR-friendly: an OSR after
1647         the side-effect would lead to the side-effect re-executing. I got rid of that path
1648         and replaced it with an optimization for the case where the input is speculated
1649         number-or-other. This makes idioms like null|0 and true|0 work as expected, and
1650         get optimized appropriately.
1651         
1652         Also got rid of DoubleOperand. Replaced all remaining uses of it with
1653         SpeculateDoubleOperand. Because the latter asserts that the Edge is a DoubleUse
1654         edge and the remaining uses of DoubleOperand are all for untyped uses, I worked
1655         around the assertion by setting the UseKind to DoubleUse by force. This is sound,
1656         since all existing assertions for DoubleUse are actually asserting that we're not
1657         converting a value to double unexpectedly. But all of these calls to
1658         SpeculateDoubleOperand are when the operand is already known to be represented as
1659         double, so there is no conversion.
1660         
1661         This is neutral on benchmarks, except stanford-crypto-ccm, which speeds up a
1662         little. Mostly, this is intended to delete a bunch of code. DoubleOperand was
1663         equivalent to the replace-edge-with-DoubleUse trick that I'm using now, except it
1664         involved a _lot_ more code.
1665
1666         * dfg/DFGAbstractState.cpp:
1667         (JSC::DFG::AbstractState::execute):
1668         * dfg/DFGCSEPhase.cpp:
1669         (JSC::DFG::CSEPhase::performNodeCSE):
1670         * dfg/DFGFixupPhase.cpp:
1671         (JSC::DFG::FixupPhase::fixupNode):
1672         * dfg/DFGNodeType.h:
1673         (DFG):
1674         * dfg/DFGSpeculativeJIT.cpp:
1675         (DFG):
1676         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1677         * dfg/DFGSpeculativeJIT.h:
1678         (SpeculativeJIT):
1679         (DFG):
1680         (FPRTemporary):
1681         * dfg/DFGSpeculativeJIT32_64.cpp:
1682         (DFG):
1683         (JSC::DFG::SpeculativeJIT::compile):
1684         * dfg/DFGSpeculativeJIT64.cpp:
1685         (DFG):
1686
1687 2013-02-18  Ádám Kallai  <kadam@inf.u-szeged.hu>
1688
1689         [Qt] Mountain Lion buildfix after r143147.
1690
1691         Reviewed by Csaba Osztrogonác.
1692
1693         * runtime/DateConstructor.cpp:
1694
1695 2013-02-18  Zan Dobersek  <zdobersek@igalia.com>
1696
1697         Stop placing std::isfinite and std::signbit inside the global scope
1698         https://bugs.webkit.org/show_bug.cgi?id=109817
1699
1700         Reviewed by Darin Adler.
1701
1702         Prefix calls to the isfinite and signbit methods with std:: as the two
1703         methods are no longer being imported into the global scope.
1704
1705         * assembler/MacroAssembler.h:
1706         (JSC::MacroAssembler::shouldBlindDouble):
1707         * offlineasm/cloop.rb:
1708         * runtime/BigInteger.h:
1709         (JSC::BigInteger::BigInteger):
1710         * runtime/DateConstructor.cpp:
1711         (JSC::constructDate):
1712         * runtime/DatePrototype.cpp:
1713         (JSC::fillStructuresUsingTimeArgs):
1714         (JSC::fillStructuresUsingDateArgs):
1715         (JSC::dateProtoFuncToISOString):
1716         (JSC::dateProtoFuncSetYear):
1717         * runtime/JSCJSValueInlines.h:
1718         (JSC::JSValue::JSValue):
1719         * runtime/JSGlobalObjectFunctions.cpp:
1720         (JSC::globalFuncIsFinite):
1721         * runtime/JSONObject.cpp:
1722         (JSC::Stringifier::appendStringifiedValue):
1723         * runtime/MathObject.cpp:
1724         (JSC::mathProtoFuncMax): Also include an opportunistic style fix.
1725         (JSC::mathProtoFuncMin): Ditto.
1726         * runtime/NumberPrototype.cpp:
1727         (JSC::toStringWithRadix):
1728         (JSC::numberProtoFuncToExponential):
1729         (JSC::numberProtoFuncToFixed):
1730         (JSC::numberProtoFuncToPrecision):
1731         (JSC::numberProtoFuncToString):
1732         * runtime/Uint16WithFraction.h:
1733         (JSC::Uint16WithFraction::Uint16WithFraction):
1734
1735 2013-02-18  Ádám Kallai  <kadam@inf.u-szeged.hu>
1736
1737         [Qt] Mountain Lion buildfix after r143147.
1738
1739         Reviewed by Csaba Osztrogonác.
1740
1741         * runtime/DateInstance.cpp:
1742
1743 2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>
1744
1745         Unreviewed speculative build fix for Apple Win bots.
1746
1747         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
1748
1749 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1750
1751         Fix indentation of StructureStubInfo.h
1752
1753         Rubber stamped by Mark Hahnenberg.
1754
1755         * bytecode/StructureStubInfo.h:
1756
1757 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1758
1759         Fix indentation of JSGlobalObject.h and JSGlobalObjectFunctions.h
1760
1761         Rubber stamped by Mark Hahnenberg.
1762
1763         * runtime/JSGlobalObject.h:
1764         * runtime/JSGlobalObjectFunctions.h:
1765
1766 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1767
1768         Fix indention of Operations.h
1769
1770         Rubber stamped by Mark Hahnenberg.
1771
1772         * runtime/Operations.h:
1773
1774 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1775
1776         Remove DFG::SpeculativeJIT::isKnownNumeric(), since it's not called from anywhere.
1777
1778         Rubber stamped by Andy Estes.
1779
1780         * dfg/DFGSpeculativeJIT.cpp:
1781         (DFG):
1782         * dfg/DFGSpeculativeJIT.h:
1783         (SpeculativeJIT):
1784
1785 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1786
1787         Remove DFG::SpeculativeJIT::isStrictInt32(), since it's not called from anywhere.
1788
1789         Rubber stampted by Andy Estes.
1790
1791         * dfg/DFGSpeculativeJIT.cpp:
1792         (DFG):
1793         * dfg/DFGSpeculativeJIT.h:
1794         (SpeculativeJIT):
1795
1796 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
1797
1798         Remove dead code for ValueToNumber from the DFG.
1799
1800         Rubber stamped by Andy Estes.
1801         
1802         We killed ValueToNumber at some point, but forgot to kill all of the backend support
1803         for it.
1804
1805         * dfg/DFGByteCodeParser.cpp:
1806         (JSC::DFG::ByteCodeParser::handleMinMax):
1807         * dfg/DFGOperations.cpp:
1808         * dfg/DFGOperations.h:
1809         * dfg/DFGSpeculativeJIT.h:
1810         (SpeculativeJIT):
1811         * dfg/DFGSpeculativeJIT32_64.cpp:
1812         * dfg/DFGSpeculativeJIT64.cpp:
1813
1814 2013-02-17  Csaba Osztrogonác  <ossy@webkit.org>
1815
1816         Unreviewed buildfix for JSVALUE32_64 builds after r143147.
1817
1818         * jit/JIT.h:
1819
1820 2013-02-17  Filip Pizlo  <fpizlo@apple.com>
1821
1822         Move all Structure out-of-line inline methods to StructureInlines.h
1823         https://bugs.webkit.org/show_bug.cgi?id=110024
1824
1825         Rubber stamped by Mark Hahnenberg and Sam Weinig.
1826         
1827         This was supposed to be easy.
1828         
1829         But, initially, there was a Structure inline method in CodeBlock.h, and moving that
1830         into StructureInlines.h meant that Operations.h included CodeBlock.h. This would
1831         cause WebCore build failures, because CodeBlock.h transitively included the JSC
1832         parser (via many, many paths), and the JSC parser defines tokens using enumeration
1833         elements that CSSGrammar.cpp (generated by bison) would #define. For example,
1834         bison would give CSSGrammar.cpp a #define FUNCTION 123, and would do so before
1835         including anything interesting. The JSC parser would have an enum that included
1836         FUNCTION as an element. Hence the JSC parser included into CSSGrammar.cpp would have
1837         a token element called FUNCTION declared in an enumeration, but FUNCTION was
1838         #define'd to 123, leading to a parser error.
1839         
1840         Wow.
1841         
1842         So I removed all transitive include paths from CodeBlock.h to the JSC Parser. I
1843         believe I was able to do so without out-of-lining anything interesting or performance
1844         critical. This is probably a purely good thing to have done: it will be nice to be
1845         able to make changes to the parser without having to compile the universe.
1846         
1847         Of course, doing this caused a bunch of other things to not compile, since a bunch of
1848         headers relied on things being implicitly included for them when they transitively
1849         included the parser. I fixed a lot of that.
1850         
1851         Finally, I ended up removing the method that depended on CodeBlock.h from
1852         StructureInlines.h, and putting it in Structure.cpp. That might seem like all of this
1853         was a waste of time, except that I suspect it was a worthwhile forcing function for
1854         cleaning up a bunch of cruft.
1855         
1856         * API/JSCallbackFunction.cpp:
1857         * CMakeLists.txt:
1858         * GNUmakefile.list.am:
1859         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1860         * JavaScriptCore.xcodeproj/project.pbxproj:
1861         * Target.pri:
1862         * bytecode/CodeBlock.h:
1863         (JSC):
1864         * bytecode/EvalCodeCache.h:
1865         * bytecode/SamplingTool.h:
1866         * bytecode/UnlinkedCodeBlock.cpp:
1867         (JSC::UnlinkedFunctionExecutable::parameterCount):
1868         (JSC):
1869         * bytecode/UnlinkedCodeBlock.h:
1870         (UnlinkedFunctionExecutable):
1871         * bytecompiler/BytecodeGenerator.h:
1872         * bytecompiler/Label.h:
1873         (JSC):
1874         * dfg/DFGByteCodeParser.cpp:
1875         * dfg/DFGByteCodeParser.h:
1876         * dfg/DFGFPRInfo.h:
1877         * dfg/DFGRegisterBank.h:
1878         * heap/HandleStack.cpp:
1879         * jit/JITWriteBarrier.h:
1880         * parser/Nodes.h:
1881         (JSC):
1882         * parser/Parser.h:
1883         * parser/ParserError.h: Added.
1884         (JSC):
1885         (JSC::ParserError::ParserError):
1886         (ParserError):
1887         (JSC::ParserError::toErrorObject):
1888         * parser/ParserModes.h:
1889         * parser/SourceProvider.cpp: Added.
1890         (JSC):
1891         (JSC::SourceProvider::SourceProvider):
1892         (JSC::SourceProvider::~SourceProvider):
1893         * parser/SourceProvider.h:
1894         (JSC):
1895         (SourceProvider):
1896         * runtime/ArrayPrototype.cpp:
1897         * runtime/DatePrototype.cpp:
1898         * runtime/Executable.h:
1899         * runtime/JSGlobalObject.cpp:
1900         * runtime/JSGlobalObject.h:
1901         (JSC):
1902         * runtime/Operations.h:
1903         * runtime/Structure.cpp:
1904         (JSC::Structure::prototypeForLookup):
1905         (JSC):
1906         * runtime/Structure.h:
1907         (JSC):
1908         * runtime/StructureInlines.h: Added.
1909         (JSC):
1910         (JSC::Structure::create):
1911         (JSC::Structure::createStructure):
1912         (JSC::Structure::get):
1913         (JSC::Structure::masqueradesAsUndefined):
1914         (JSC::SlotVisitor::internalAppend):
1915         (JSC::Structure::transitivelyTransitionedFrom):
1916         (JSC::Structure::setEnumerationCache):
1917         (JSC::Structure::enumerationCache):
1918         (JSC::Structure::prototypeForLookup):
1919         (JSC::Structure::prototypeChain):
1920         (JSC::Structure::isValid):
1921         * runtime/StructureRareData.cpp:
1922
1923 2013-02-17  Roger Fong  <roger_fong@apple.com>
1924
1925         Unreviewed. Windows build fix.
1926
1927         * runtime/CodeCache.h:
1928         (CodeCacheMap):
1929
1930 2013-02-16  Geoffrey Garen  <ggaren@apple.com>
1931
1932         Code cache should be explicit about what it caches
1933         https://bugs.webkit.org/show_bug.cgi?id=110039
1934
1935         Reviewed by Oliver Hunt.
1936
1937         This patch makes the code cache more explicit in two ways:
1938
1939         (1) The cache caches top-level scripts. Any sub-functions executed as a
1940         part of a script are cached with it and evicted with it.
1941
1942         This simplifies things by eliminating out-of-band sub-function tracking,
1943         and fixes pathological cases where functions for live scripts would be
1944         evicted in favor of functions for dead scripts, and/or high probability
1945         functions executed early in script lifetime would be evicted in favor of
1946         low probability functions executed late in script lifetime, due to LRU.
1947
1948         Statistical data from general browsing and PLT confirms that caching
1949         functions independently of scripts is not profitable.
1950
1951         (2) The cache tracks script size, not script count.
1952
1953         This reduces the worst-case cache size by a factor of infinity.
1954
1955         Script size is a reasonable first-order estimate of in-memory footprint 
1956         for a cached script because there are no syntactic constructs that have
1957         super-linear memory footprint.
1958
1959         * bytecode/UnlinkedCodeBlock.cpp:
1960         (JSC::generateFunctionCodeBlock): Moved this function out of the cache
1961         because it does not consult the cache, and is not managed by it.
1962
1963         (JSC::UnlinkedFunctionExecutable::visitChildren): Visit our code blocks
1964         because they are strong references now, rather than weak, a la (1).
1965
1966         (JSC::UnlinkedFunctionExecutable::codeBlockFor): Updated for interface changes.
1967
1968         * bytecode/UnlinkedCodeBlock.h:
1969         (UnlinkedFunctionExecutable):
1970         (UnlinkedFunctionCodeBlock): Strong now, not weak, a la (1).
1971
1972         * runtime/CodeCache.cpp:
1973         (JSC::CodeCache::CodeCache):
1974         * runtime/CodeCache.h:
1975         (JSC::SourceCodeKey::length):
1976         (SourceCodeKey):
1977         (CodeCacheMap):
1978         (JSC::CodeCacheMap::CodeCacheMap):
1979         (JSC::CodeCacheMap::find):
1980         (JSC::CodeCacheMap::set):
1981         (JSC::CodeCacheMap::clear):
1982         (CodeCache):
1983         (JSC::CodeCache::clear): Removed individual function tracking, due to (1).
1984         Added explicit character counting, for (2).
1985
1986         You might think 16000000 characters is a lot. It is. But this patch
1987         didn't establish that limit -- it just took the existing limit and
1988         made it more visible. I intend to reduce the size of the cache in a
1989         future patch.
1990
1991 2013-02-16  Filip Pizlo  <fpizlo@apple.com>
1992
1993         Remove support for bytecode comments, since it doesn't build, and hasn't been used in a while.
1994         https://bugs.webkit.org/show_bug.cgi?id=110035
1995
1996         Rubber stamped by Andreas Kling.
1997         
1998         There are other ways of achieving the same effect, like adding print statements to the bytecode generator.
1999         The fact that this feature doesn't build and nobody noticed implies that it's probably not a popular
2000         feature. As well, the amount of wiring that was required for it was quite big considering its relatively
2001         modest utility.
2002
2003         * GNUmakefile.list.am:
2004         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2005         * JavaScriptCore.xcodeproj/project.pbxproj:
2006         * bytecode/CodeBlock.cpp:
2007         (JSC):
2008         (JSC::CodeBlock::dumpBytecode):
2009         (JSC::CodeBlock::CodeBlock):
2010         * bytecode/CodeBlock.h:
2011         (CodeBlock):
2012         * bytecode/Comment.h: Removed.
2013         * bytecompiler/BytecodeGenerator.cpp:
2014         (JSC::BytecodeGenerator::BytecodeGenerator):
2015         (JSC::BytecodeGenerator::emitOpcode):
2016         (JSC):
2017         * bytecompiler/BytecodeGenerator.h:
2018         (BytecodeGenerator):
2019         (JSC::BytecodeGenerator::symbolTable):
2020
2021 2013-02-16  Brent Fulgham  <bfulgham@webkit.org>
2022
2023         [Windows] Unreviewed Visual Studio 2010 build fix after r143117
2024
2025         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props: Reference new path to property sheets.
2026         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
2027         Build correction after new operator == added.
2028
2029 2013-02-16  Filip Pizlo  <fpizlo@apple.com>
2030
2031         Fix indentation of Structure.h
2032
2033         Rubber stamped by Mark Hahnenberg.
2034
2035         * runtime/Structure.h:
2036
2037 2013-02-16  Christophe Dumez  <ch.dumez@sisa.samsung.com>
2038
2039         Unreviewed build fix.
2040
2041         Export symbol for new CString operator== operator to fix Windows build.
2042
2043         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
2044
2045 2013-02-15  Filip Pizlo  <fpizlo@apple.com>
2046
2047         Structure should be more methodical about the relationship between m_offset and m_propertyTable
2048         https://bugs.webkit.org/show_bug.cgi?id=109978
2049
2050         Reviewed by Mark Hahnenberg.
2051         
2052         Allegedly, the previous relationship was that either m_propertyTable or m_offset
2053         would be set, and if m_propertyTable was not set you could rebuild it.  In reality,
2054         we would sometimes "reset" both: some transitions wouldn't set m_offset, and other
2055         transitions would clear the previous structure's m_propertyTable.  So, in a
2056         structure transition chain of A->B->C you could have:
2057
2058         A transitions to B: B doesn't copy m_offset but does copy m_propertyTable, because
2059             that seemed like a good idea at the time (this was a common idiom in the code).
2060         B transitions to C: C steals B's m_propertyTable, leaving B with neither a
2061             m_propertyTable nor a m_offset.
2062
2063         Then we would ask for the size of the property storage of B and get the answer
2064         "none".  That's not good.
2065
2066         Now, there is a new relationship, which, hopefully, should fix things: m_offset is
2067         always set and always refers to the maximum offset ever used by the property table.
2068         From this, you can infer both the inline and out-of-line property size, and
2069         capacity.  This is accomplished by having PropertyTable::add() take a
2070         PropertyOffset reference, which must be Structure::m_offset.  It will update this
2071         offset.  As well, all transitions now copy m_offset.  And we frequently assert
2072         (using RELEASE_ASSERT) that the m_offset matches what m_propertyTable would tell
2073         you.  Hence if you ever modify the m_propertyTable, you'll also update the offset.
2074         If you ever copy the property table, you'll also copy the offset.  Life should be
2075         good, I think.
2076
2077         * runtime/PropertyMapHashTable.h:
2078         (JSC::PropertyTable::add):
2079         * runtime/Structure.cpp:
2080         (JSC::Structure::materializePropertyMap):
2081         (JSC::Structure::addPropertyTransition):
2082         (JSC::Structure::removePropertyTransition):
2083         (JSC::Structure::changePrototypeTransition):
2084         (JSC::Structure::despecifyFunctionTransition):
2085         (JSC::Structure::attributeChangeTransition):
2086         (JSC::Structure::toDictionaryTransition):
2087         (JSC::Structure::sealTransition):
2088         (JSC::Structure::freezeTransition):
2089         (JSC::Structure::preventExtensionsTransition):
2090         (JSC::Structure::nonPropertyTransition):
2091         (JSC::Structure::flattenDictionaryStructure):
2092         (JSC::Structure::checkConsistency):
2093         (JSC::Structure::putSpecificValue):
2094         (JSC::Structure::createPropertyMap):
2095         (JSC::PropertyTable::checkConsistency):
2096         * runtime/Structure.h:
2097         (JSC):
2098         (JSC::Structure::putWillGrowOutOfLineStorage):
2099         (JSC::Structure::outOfLineCapacity):
2100         (JSC::Structure::outOfLineSize):
2101         (JSC::Structure::isEmpty):
2102         (JSC::Structure::materializePropertyMapIfNecessary):
2103         (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
2104         (Structure):
2105         (JSC::Structure::checkOffsetConsistency):
2106
2107 2013-02-15  Martin Robinson  <mrobinson@igalia.com>
2108
2109         [GTK] Spread the gyp build files throughout the tree
2110         https://bugs.webkit.org/show_bug.cgi?id=109960
2111
2112         Reviewed by Dirk Pranke.
2113
2114         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Renamed from Source/WebKit/gtk/gyp/JavaScriptCore.gyp.
2115         * JavaScriptCore.gyp/generate-derived-sources.sh: Renamed from Source/WebKit/gtk/gyp/generate-derived-sources.sh.
2116
2117 2013-02-15  Filip Pizlo  <fpizlo@apple.com>
2118
2119         DFG SpeculativeJIT64 should be more precise about when it's dealing with a cell (even though it probably doesn't matter)
2120         https://bugs.webkit.org/show_bug.cgi?id=109625
2121
2122         Reviewed by Mark Hahnenberg.
2123
2124         * dfg/DFGSpeculativeJIT64.cpp:
2125         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2126         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2127         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2128         (JSC::DFG::SpeculativeJIT::compile):
2129
2130 2013-02-15  Geoffrey Garen  <ggaren@apple.com>
2131
2132         Merged the global function cache into the source code cache
2133         https://bugs.webkit.org/show_bug.cgi?id=108660
2134
2135         Reviewed by Sam Weinig.
2136
2137         Responding to review comments by Darin Adler.
2138
2139         * runtime/CodeCache.h:
2140         (JSC::SourceCodeKey::SourceCodeKey): Don't initialize m_name and m_flags
2141         in the hash table deleted value because they're meaningless.
2142
2143 2013-02-14  Filip Pizlo  <fpizlo@apple.com>
2144
2145         DFG AbstractState should filter operands to NewArray more precisely
2146         https://bugs.webkit.org/show_bug.cgi?id=109900
2147
2148         Reviewed by Mark Hahnenberg.
2149         
2150         NewArray for primitive indexing types speculates that the inputs are the appropriate
2151         primitives. Now, the CFA filters the abstract state accordingly, as well.
2152
2153         * dfg/DFGAbstractState.cpp:
2154         (JSC::DFG::AbstractState::execute):
2155
2156 2013-02-15  Andreas Kling  <akling@apple.com>
2157
2158         Yarr: Use OwnPtr to make pattern/disjunction/character-class ownership clearer.
2159         <http://webkit.org/b/109218>
2160
2161         Reviewed by Benjamin Poulain.
2162
2163         - Let classes that manage lifetime of other objects hold on to them with OwnPtr instead of raw pointers.
2164         - Placed some strategic Vector::shrinkToFit(), ::reserveInitialCapacity() and ::swap().
2165
2166         668 kB progression on Membuster3.
2167
2168         * yarr/YarrInterpreter.cpp:
2169         (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
2170         (JSC::Yarr::ByteCompiler::emitDisjunction):
2171         (ByteCompiler):
2172         * yarr/YarrInterpreter.h:
2173         (JSC::Yarr::BytecodePattern::BytecodePattern):
2174         (BytecodePattern):
2175         * yarr/YarrJIT.cpp:
2176         (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
2177         (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
2178         (JSC::Yarr::YarrGenerator::opCompileBody):
2179         * yarr/YarrPattern.cpp:
2180         (JSC::Yarr::CharacterClassConstructor::charClass):
2181         (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
2182         (JSC::Yarr::YarrPatternConstructor::reset):
2183         (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
2184         (JSC::Yarr::YarrPatternConstructor::atomCharacterClassEnd):
2185         (JSC::Yarr::YarrPatternConstructor::copyDisjunction):
2186         (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
2187         (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
2188         (JSC::Yarr::YarrPatternConstructor::optimizeBOL):
2189         (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
2190         (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
2191         * yarr/YarrPattern.h:
2192         (JSC::Yarr::PatternDisjunction::addNewAlternative):
2193         (PatternDisjunction):
2194         (YarrPattern):
2195         (JSC::Yarr::YarrPattern::reset):
2196         (JSC::Yarr::YarrPattern::newlineCharacterClass):
2197         (JSC::Yarr::YarrPattern::digitsCharacterClass):
2198         (JSC::Yarr::YarrPattern::spacesCharacterClass):
2199         (JSC::Yarr::YarrPattern::wordcharCharacterClass):
2200         (JSC::Yarr::YarrPattern::nondigitsCharacterClass):
2201         (JSC::Yarr::YarrPattern::nonspacesCharacterClass):
2202         (JSC::Yarr::YarrPattern::nonwordcharCharacterClass):
2203
2204 2013-02-14  Geoffrey Garen  <ggaren@apple.com>
2205
2206         Merged the global function cache into the source code cache
2207         https://bugs.webkit.org/show_bug.cgi?id=108660
2208
2209         Reviewed by Sam Weinig.
2210
2211         This has a few benefits:
2212
2213             (*) Saves a few kB by removing a second cache data structure.
2214
2215             (*) Reduces the worst case memory usage of the cache by 1.75X. (Heavy
2216             use of 'new Function' and other techniques could cause us to fill
2217             both root caches, and they didn't trade off against each other.)
2218
2219             (*) Paves the way for future improvements based on a non-trivial
2220             cache key (for example, shrinkable pointer to the key string, and
2221             more precise cache size accounting).
2222
2223         Also cleaned up the cache implementation and simplified it a bit.
2224
2225         * heap/Handle.h:
2226         (HandleBase):
2227         * heap/Strong.h:
2228         (Strong): Build!
2229
2230         * runtime/CodeCache.cpp:
2231         (JSC):
2232         (JSC::CodeCache::getCodeBlock):
2233         (JSC::CodeCache::generateFunctionCodeBlock):
2234         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
2235         (JSC::CodeCache::usedFunctionCode): Updated for three interface changes:
2236
2237             (*) SourceCodeKey is a class, not a pair.
2238
2239             (*) Table values are abstract pointers, since they can be executables
2240             or code blocks. (In a future patch, I'd like to change this so we
2241             always store only code blocks. But that's too much for one patch.)
2242
2243             (*) The cache function is named "set" because it always overwrites
2244             unconditionally.
2245
2246         * runtime/CodeCache.h:
2247         (CacheMap):
2248         (JSC::CacheMap::find):
2249         (JSC::CacheMap::set):
2250         (JSC::CacheMap::clear): Added support for specifying hash traits, so we
2251         can use a SourceCodeKey.
2252
2253         Removed side table and random number generator to save space and reduce
2254         complexity. Hash tables are already random, so we don't need another source
2255         of randomness.
2256
2257         (SourceCodeKey):
2258         (JSC::SourceCodeKey::SourceCodeKey):
2259         (JSC::SourceCodeKey::isHashTableDeletedValue):
2260         (JSC::SourceCodeKey::hash):
2261         (JSC::SourceCodeKey::isNull):
2262         (JSC::SourceCodeKey::operator==):
2263         (JSC::SourceCodeKeyHash::hash):
2264         (JSC::SourceCodeKeyHash::equal):
2265         (SourceCodeKeyHash):
2266         (SourceCodeKeyHashTraits):
2267         (JSC::SourceCodeKeyHashTraits::isEmptyValue): A SourceCodeKey is just a
2268         fancy triplet: source code string; function name (or null, for non-functions);
2269         and flags. Flags and function name distinguish between functions and programs
2270         with identical code, so they can live in the same cache.
2271
2272         I chose to use the source code string as the primary hashing reference
2273         because it's likely to be unique. We can use profiling to choose another
2274         technique in future, if collisions between functions and programs prove
2275         to be hot. I suspect they won't.
2276
2277         (JSC::CodeCache::clear):
2278         (CodeCache): Removed the second cache.
2279
2280         * heap/Handle.h:
2281         (HandleBase):
2282         * heap/Strong.h:
2283         (Strong):
2284         * runtime/CodeCache.cpp:
2285         (JSC):
2286         (JSC::CodeCache::getCodeBlock):
2287         (JSC::CodeCache::generateFunctionCodeBlock):
2288         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
2289         (JSC::CodeCache::usedFunctionCode):
2290         * runtime/CodeCache.h:
2291         (JSC):
2292         (CacheMap):
2293         (JSC::CacheMap::find):
2294         (JSC::CacheMap::set):
2295         (JSC::CacheMap::clear):
2296         (SourceCodeKey):
2297         (JSC::SourceCodeKey::SourceCodeKey):
2298         (JSC::SourceCodeKey::isHashTableDeletedValue):
2299         (JSC::SourceCodeKey::hash):
2300         (JSC::SourceCodeKey::isNull):
2301         (JSC::SourceCodeKey::operator==):
2302         (JSC::SourceCodeKeyHash::hash):
2303         (JSC::SourceCodeKeyHash::equal):
2304         (SourceCodeKeyHash):
2305         (SourceCodeKeyHashTraits):
2306         (JSC::SourceCodeKeyHashTraits::isEmptyValue):
2307         (JSC::CodeCache::clear):
2308         (CodeCache):
2309
2310 2013-02-14  Tony Chang  <tony@chromium.org>
2311
2312         Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
2313         https://bugs.webkit.org/show_bug.cgi?id=96934
2314
2315         * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
2316         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
2317         * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added property svn:eol-style.
2318         * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: Added property svn:eol-style.
2319         * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: Added property svn:eol-style.
2320         * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: Added property svn:eol-style.
2321         * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: Added property svn:eol-style.
2322         * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: Added property svn:eol-style.
2323         * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: Added property svn:eol-style.
2324         * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: Added property svn:eol-style.
2325
2326 2013-02-14  Tony Chang  <tony@chromium.org>
2327
2328         Unreviewed, set svn:eol-style CRLF for .sln files.
2329
2330         * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
2331         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
2332
2333 2013-02-14  David Kilzer  <ddkilzer@apple.com>
2334
2335         [Mac] Clean up WARNING_CFLAGS
2336         <http://webkit.org/b/109747>
2337         <rdar://problem/13208373>
2338
2339         Reviewed by Mark Rowe.
2340
2341         * Configurations/Base.xcconfig: Use
2342         GCC_WARN_64_TO_32_BIT_CONVERSION to enable and disable
2343         -Wshorten-64-to-32 rather than WARNING_CFLAGS.
2344
2345         * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
2346         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
2347
2348 2013-02-13  Anders Carlsson  <andersca@apple.com>
2349
2350         Better build fix.
2351
2352         * API/tests/testapi.c:
2353         (assertEqualsAsNumber):
2354         (main):
2355
2356 2013-02-13  Roger Fong  <roger_fong@apple.com>
2357
2358         Unreviewed. Build fix.
2359
2360         * API/tests/testapi.c:
2361         (assertEqualsAsNumber):
2362         (main):
2363
2364 2013-02-13  Oliver Hunt  <oliver@apple.com>
2365
2366         Yet another build fix
2367
2368         * bytecode/CodeBlock.cpp:
2369         (JSC::CodeBlock::CodeBlock):
2370
2371 2013-02-13  Zan Dobersek  <zdobersek@igalia.com>
2372
2373         The 'global isinf/isnan' compiler quirk required when using clang with libstdc++
2374         https://bugs.webkit.org/show_bug.cgi?id=109325
2375
2376         Reviewed by Anders Carlsson.
2377
2378         Prefix calls to the isinf and isnan methods with std::, declaring we want to use the
2379         two methods as they're provided by the C++ standard library being used.
2380
2381         * API/JSValueRef.cpp:
2382         (JSValueMakeNumber):
2383         * JSCTypedArrayStubs.h:
2384         (JSC):
2385         * bytecompiler/BytecodeGenerator.cpp:
2386         (JSC::BytecodeGenerator::emitLoad):
2387         * dfg/DFGByteCodeParser.cpp:
2388         (JSC::DFG::ByteCodeParser::constantNaN):
2389         * offlineasm/cloop.rb:
2390         * runtime/DateConstructor.cpp:
2391         (JSC::dateUTC): Also include an opportunistic style fix.
2392         * runtime/DateInstance.cpp:
2393         (JSC::DateInstance::calculateGregorianDateTime):
2394         (JSC::DateInstance::calculateGregorianDateTimeUTC):
2395         * runtime/DatePrototype.cpp:
2396         (JSC::dateProtoFuncGetMilliSeconds):
2397         (JSC::dateProtoFuncGetUTCMilliseconds):
2398         (JSC::setNewValueFromTimeArgs):
2399         (JSC::setNewValueFromDateArgs):
2400         (JSC::dateProtoFuncSetYear):
2401         * runtime/JSCJSValue.cpp:
2402         (JSC::JSValue::toInteger):
2403         * runtime/JSDateMath.cpp:
2404         (JSC::getUTCOffset):
2405         (JSC::parseDateFromNullTerminatedCharacters):
2406         (JSC::parseDate):
2407         * runtime/JSGlobalObjectFunctions.cpp:
2408         (JSC::globalFuncIsNaN):
2409         * runtime/MathObject.cpp:
2410         (JSC::mathProtoFuncMax):
2411         (JSC::mathProtoFuncMin):
2412         (JSC::mathProtoFuncPow):
2413         * runtime/PropertyDescriptor.cpp:
2414         (JSC::sameValue):
2415
2416 2013-02-13  Filip Pizlo  <fpizlo@apple.com>
2417
2418         Change another use of (SpecCell & ~SpecString) to SpecObject.
2419
2420         Reviewed by Mark Hahnenberg.
2421
2422         * dfg/DFGAbstractState.cpp:
2423         (JSC::DFG::AbstractState::execute):
2424
2425 2013-02-13  Filip Pizlo  <fpizlo@apple.com>
2426
2427         ForwardInt32ToDouble is not in DFG::MinifiedNode's list of relevant node types
2428         https://bugs.webkit.org/show_bug.cgi?id=109726
2429
2430         Reviewed by Mark Hahnenberg.
2431         
2432         If you add it to the list of relevant node types, you also need to make sure
2433         it's listed as either hasChild or one of the other kinds. Otherwise you get
2434         an assertion. This is causing test failures in run-javascriptcore-tests.
2435
2436         * dfg/DFGMinifiedNode.h:
2437         (JSC::DFG::MinifiedNode::hasChild):
2438
2439 2013-02-13  Oliver Hunt  <oliver@apple.com>
2440
2441         Build fix.
2442
2443         Rearranged the code somewhat to reduce the number of
2444         DFG related ifdefs.
2445
2446         * bytecode/CodeBlock.cpp:
2447         (JSC::CodeBlock::CodeBlock):
2448
2449 2013-02-13  Filip Pizlo  <fpizlo@apple.com>
2450
2451         ForwardInt32ToDouble is not in DFG::MinifiedNode's list of relevant node types
2452         https://bugs.webkit.org/show_bug.cgi?id=109726
2453
2454         Reviewed by Gavin Barraclough.
2455         
2456         This is asymptomatic because ForwardInt32ToDouble is only used in SetLocals, in
2457         which case the value is already stored to the stack.  Still, we should fix this.
2458
2459         * dfg/DFGMinifiedNode.h:
2460         (JSC::DFG::belongsInMinifiedGraph):
2461
2462 2013-02-12  Filip Pizlo  <fpizlo@apple.com>
2463
2464         DFG LogicalNot/Branch peephole removal and inversion ignores the possibility of things exiting
2465         https://bugs.webkit.org/show_bug.cgi?id=109489
2466
2467         Reviewed by Mark Hahnenberg.
2468         
2469         If things can exit between the LogicalNot and the Branch then don't peephole.
2470
2471         * dfg/DFGFixupPhase.cpp:
2472         (JSC::DFG::FixupPhase::fixupNode):
2473
2474 2013-02-13  Oliver Hunt  <oliver@apple.com>
2475
2476         Remove unnecessary indirection to non-local variable access operations
2477         https://bugs.webkit.org/show_bug.cgi?id=109724
2478
2479         Reviewed by Filip Pizlo.
2480
2481         Linked bytecode now stores a direct pointer to the resolve operation
2482         vectors, so the interpreter no longer needs a bunch of indirection to
2483         to perform non-local lookup.
2484
2485         * bytecode/CodeBlock.cpp:
2486         (JSC::CodeBlock::CodeBlock):
2487         * bytecode/CodeBlock.h:
2488         (CodeBlock):
2489         * bytecode/Instruction.h:
2490         * dfg/DFGByteCodeParser.cpp:
2491         (ByteCodeParser):
2492         (InlineStackEntry):
2493         (JSC::DFG::ByteCodeParser::parseResolveOperations):
2494         (JSC::DFG::ByteCodeParser::parseBlock):
2495         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
2496         * dfg/DFGCapabilities.h:
2497         (JSC::DFG::canInlineOpcode):
2498         * dfg/DFGGraph.h:
2499         (ResolveGlobalData):
2500         (ResolveOperationData):
2501         (PutToBaseOperationData):
2502         * dfg/DFGSpeculativeJIT.h:
2503         * dfg/DFGSpeculativeJIT32_64.cpp:
2504         (JSC::DFG::SpeculativeJIT::compile):
2505         * dfg/DFGSpeculativeJIT64.cpp:
2506         (JSC::DFG::SpeculativeJIT::compile):
2507         * jit/JITOpcodes.cpp:
2508         (JSC::JIT::emit_op_put_to_base):
2509         (JSC::JIT::emit_op_resolve):
2510         (JSC::JIT::emitSlow_op_resolve):
2511         (JSC::JIT::emit_op_resolve_base):
2512         (JSC::JIT::emitSlow_op_resolve_base):
2513         (JSC::JIT::emit_op_resolve_with_base):
2514         (JSC::JIT::emitSlow_op_resolve_with_base):
2515         (JSC::JIT::emit_op_resolve_with_this):
2516         (JSC::JIT::emitSlow_op_resolve_with_this):
2517         (JSC::JIT::emitSlow_op_put_to_base):
2518         * jit/JITOpcodes32_64.cpp:
2519         (JSC::JIT::emit_op_put_to_base):
2520         * llint/LLIntSlowPaths.cpp:
2521         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2522         * llint/LowLevelInterpreter.asm:
2523
2524 2013-02-13  Zoltan Herczeg  <zherczeg@webkit.org>
2525
2526         replaceWithJump should not decrease the offset by 1 on ARM traditional.
2527         https://bugs.webkit.org/show_bug.cgi?id=109689
2528
2529         Reviewed by Oliver Hunt.
2530
2531         * assembler/ARMAssembler.h:
2532         (JSC::ARMAssembler::replaceWithJump):
2533
2534 2013-02-12  Joseph Pecoraro  <pecoraro@apple.com>
2535
2536         [iOS] Enable PAGE_VISIBILITY_API
2537         https://bugs.webkit.org/show_bug.cgi?id=109399
2538
2539         Reviewed by David Kilzer.
2540
2541         * Configurations/FeatureDefines.xcconfig:
2542
2543 2013-02-12  Filip Pizlo  <fpizlo@apple.com>
2544
2545         Renamed SpecObjectMask to SpecObject.
2546
2547         Rubber stamped by Mark Hahnenberg.
2548         
2549         "SpecObjectMask" is a weird name considering that a bunch of the other speculated
2550         types are also masks, but don't have "Mask" in the name.
2551
2552         * bytecode/SpeculatedType.h:
2553         (JSC):
2554         (JSC::isObjectSpeculation):
2555         (JSC::isObjectOrOtherSpeculation):
2556         * dfg/DFGAbstractState.cpp:
2557         (JSC::DFG::AbstractState::execute):
2558         * dfg/DFGPredictionPropagationPhase.cpp:
2559         (JSC::DFG::PredictionPropagationPhase::propagate):
2560         * dfg/DFGSpeculativeJIT.cpp:
2561         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
2562         * dfg/DFGSpeculativeJIT32_64.cpp:
2563         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2564         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2565         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2566         * dfg/DFGSpeculativeJIT64.cpp:
2567         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2568         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2569         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2570
2571 2013-02-12  Filip Pizlo  <fpizlo@apple.com>
2572
2573         DFG CFA doesn't filter precisely enough for CompareStrictEq
2574         https://bugs.webkit.org/show_bug.cgi?id=109618
2575
2576         Reviewed by Mark Hahnenberg.
2577         
2578         The backend speculates object for this case, but the CFA was filtering on
2579         (SpecCell & ~SpecString) | SpecOther.
2580
2581         * dfg/DFGAbstractState.cpp:
2582         (JSC::DFG::AbstractState::execute):
2583
2584 2013-02-12  Martin Robinson  <mrobinson@igalia.com>
2585
2586         Fix the gyp build of JavaScriptCore.
2587
2588         * JavaScriptCore.gypi: Added some missing DFG files to the source list.
2589
2590 2013-02-12  Sheriff Bot  <webkit.review.bot@gmail.com>
2591
2592         Unreviewed, rolling out r142387.
2593         http://trac.webkit.org/changeset/142387
2594         https://bugs.webkit.org/show_bug.cgi?id=109601
2595
2596         caused all layout and jscore tests on windows to fail
2597         (Requested by kling on #webkit).
2598
2599         * bytecode/UnlinkedCodeBlock.cpp:
2600         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2601         * bytecode/UnlinkedCodeBlock.h:
2602         (UnlinkedCodeBlock):
2603
2604 2013-02-11  Filip Pizlo  <fpizlo@apple.com>
2605
2606         DFG CompareEq optimization should be retuned
2607         https://bugs.webkit.org/show_bug.cgi?id=109545
2608
2609         Reviewed by Mark Hahnenberg.
2610         
2611         - Made the object-to-object equality case work again by hoisting the if statement
2612           for it. Previously, object-to-object equality would be compiled as
2613           object-to-object-or-other.
2614         
2615         - Added AbstractState guards for most of the type checks that the object equality
2616           code uses.
2617         
2618         Looks like a hint of a speed-up on all of the things.
2619
2620         * dfg/DFGAbstractState.cpp:
2621         (JSC::DFG::AbstractState::execute):
2622         * dfg/DFGSpeculativeJIT.cpp:
2623         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
2624         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2625         (JSC::DFG::SpeculativeJIT::compare):
2626         * dfg/DFGSpeculativeJIT32_64.cpp:
2627         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2628         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2629         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2630         * dfg/DFGSpeculativeJIT64.cpp:
2631         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2632         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2633         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2634
2635 2013-02-12  Gabor Rapcsanyi  <rgabor@webkit.org>
2636
2637         JSC asserting with long parameter list functions in debug mode on ARM traditional
2638         https://bugs.webkit.org/show_bug.cgi?id=109565
2639
2640         Reviewed by Zoltan Herczeg.
2641
2642         Increase the value of sequenceGetByIdSlowCaseInstructionSpace to 80.
2643
2644         * jit/JIT.h:
2645
2646 2013-02-11  Oliver Hunt  <oliver@apple.com>
2647
2648         Make JSC API more NULL tolerant
2649         https://bugs.webkit.org/show_bug.cgi?id=109515
2650
2651         Reviewed by Mark Hahnenberg.
2652
2653         We do so much marshalling for the C API these days anyway that a single null
2654         check isn't a performance issue.  Yet the existing "null is unsafe" behaviour
2655         leads to crashes in embedding applications whenever there's an untested code
2656         path, so it seems having defined behaviour is superior.
2657
2658         * API/APICast.h:
2659         (toJS):
2660         (toJSForGC):
2661         * API/JSObjectRef.cpp:
2662         (JSObjectIsFunction):
2663         (JSObjectCallAsFunction):
2664         (JSObjectIsConstructor):
2665         (JSObjectCallAsConstructor):
2666         * API/tests/testapi.c:
2667         (main):
2668
2669 2013-02-11  Filip Pizlo  <fpizlo@apple.com>
2670
2671         Unreviewed, adding a FIXME to remind ourselves of a bug.
2672         https://bugs.webkit.org/show_bug.cgi?id=109487
2673
2674         * dfg/DFGSpeculativeJIT.cpp:
2675         (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
2676
2677 2013-02-11  Filip Pizlo  <fpizlo@apple.com>
2678
2679         Strange bug in DFG OSR in JSC
2680         https://bugs.webkit.org/show_bug.cgi?id=109491
2681
2682         Reviewed by Mark Hahnenberg.
2683         
2684         Int32ToDouble was being injected after a side-effecting operation and before a SetLocal. Anytime we
2685         inject something just before a SetLocal we should be aware that the previous operation may have been
2686         a side-effect associated with the current code origin. Hence, we should use a forward exit.
2687         Int32ToDouble does not do forward exits by default.
2688         
2689         This patch adds a forward-exiting form of Int32ToDouble, for use in SetLocal Int32ToDouble injections.
2690         Changed the CSE and other things to treat these nodes identically, but for the exit strategy to be
2691         distinct (Int32ToDouble -> backward, ForwardInt32ToDouble -> forward). The use of the NodeType for
2692         signaling exit direction is not "great" but it's what we use in other places already (like
2693         ForwardCheckStructure).
2694
2695         * dfg/DFGAbstractState.cpp:
2696         (JSC::DFG::AbstractState::execute):
2697         * dfg/DFGCSEPhase.cpp:
2698         (JSC::DFG::CSEPhase::int32ToDoubleCSE):
2699         (CSEPhase):
2700         (JSC::DFG::CSEPhase::performNodeCSE):
2701         * dfg/DFGCommon.h:
2702         * dfg/DFGFixupPhase.cpp:
2703         (JSC::DFG::FixupPhase::fixupNode):
2704         (JSC::DFG::FixupPhase::fixDoubleEdge):
2705         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
2706         * dfg/DFGNode.h:
2707         (JSC::DFG::Node::willHaveCodeGenOrOSR):
2708         * dfg/DFGNodeType.h:
2709         (DFG):
2710         * dfg/DFGPredictionPropagationPhase.cpp:
2711         (JSC::DFG::PredictionPropagationPhase::propagate):
2712         * dfg/DFGSpeculativeJIT.cpp:
2713         (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
2714         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2715         * dfg/DFGSpeculativeJIT.h:
2716         * dfg/DFGSpeculativeJIT32_64.cpp:
2717         (JSC::DFG::SpeculativeJIT::compile):
2718         * dfg/DFGSpeculativeJIT64.cpp:
2719         (JSC::DFG::SpeculativeJIT::compile):
2720         * dfg/DFGVariableEventStream.cpp:
2721         (JSC::DFG::VariableEventStream::reconstruct):
2722
2723 2013-02-11  Filip Pizlo  <fpizlo@apple.com>
2724
2725         NonStringCell and Object are practically the same thing for the purpose of speculation
2726         https://bugs.webkit.org/show_bug.cgi?id=109492
2727
2728         Reviewed by Mark Hahnenberg.
2729         
2730         Removed isNonStringCellSpeculation, and made all callers use isObjectSpeculation.
2731         
2732         Changed isNonStringCellOrOtherSpeculation to be isObjectOrOtherSpeculation.
2733         
2734         I believe this is correct because even weird object types like JSNotAnObject end up
2735         being "objects" from the standpoint of our typesystem. Anyway, the assumption that
2736         "is cell but not a string" equates to "object" is an assumption that is already made
2737         in other places in the system so there's little value in being paranoid about it.
2738
2739         * bytecode/SpeculatedType.h:
2740         (JSC::isObjectSpeculation):
2741         (JSC::isObjectOrOtherSpeculation):
2742         * dfg/DFGAbstractState.cpp:
2743         (JSC::DFG::AbstractState::execute):
2744         * dfg/DFGNode.h:
2745         (Node):
2746         (JSC::DFG::Node::shouldSpeculateObjectOrOther):
2747         * dfg/DFGSpeculativeJIT.cpp:
2748         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2749         (JSC::DFG::SpeculativeJIT::compare):
2750         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2751         * dfg/DFGSpeculativeJIT.h:
2752         (SpeculativeJIT):
2753         * dfg/DFGSpeculativeJIT32_64.cpp:
2754         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2755         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2756         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2757         (JSC::DFG::SpeculativeJIT::emitBranch):
2758         (JSC::DFG::SpeculativeJIT::compile):
2759         * dfg/DFGSpeculativeJIT64.cpp:
2760         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2761         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2762         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2763         (JSC::DFG::SpeculativeJIT::emitBranch):
2764         (JSC::DFG::SpeculativeJIT::compile):
2765
2766 2013-02-10  Filip Pizlo  <fpizlo@apple.com>
2767
2768         DFG CompareEq(a, null) and CompareStrictEq(a, const) are unsound with respect to constant folding
2769         https://bugs.webkit.org/show_bug.cgi?id=109387
2770
2771         Reviewed by Oliver Hunt and Mark Hahnenberg.
2772         
2773         Lock in the decision to use a non-speculative constant comparison as early as possible
2774         and don't let the CFA change it by folding constants. This might be a performance
2775         penalty on some really weird code (FWIW, I haven't seen this on benchmarks), but on
2776         the other hand it completely side-steps the unsoundness that the bug speaks of.
2777         
2778         Rolling back in after adding 32-bit path.
2779
2780         * dfg/DFGAbstractState.cpp:
2781         (JSC::DFG::AbstractState::execute):
2782         * dfg/DFGByteCodeParser.cpp:
2783         (JSC::DFG::ByteCodeParser::isConstantForCompareStrictEq):
2784         (ByteCodeParser):
2785         (JSC::DFG::ByteCodeParser::parseBlock):
2786         * dfg/DFGCSEPhase.cpp:
2787         (JSC::DFG::CSEPhase::performNodeCSE):
2788         * dfg/DFGNodeType.h:
2789         (DFG):
2790         * dfg/DFGPredictionPropagationPhase.cpp:
2791         (JSC::DFG::PredictionPropagationPhase::propagate):
2792         * dfg/DFGSpeculativeJIT.cpp:
2793         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2794         * dfg/DFGSpeculativeJIT32_64.cpp:
2795         (JSC::DFG::SpeculativeJIT::compile):
2796         * dfg/DFGSpeculativeJIT64.cpp:
2797         (JSC::DFG::SpeculativeJIT::compile):
2798
2799 2013-02-10  Filip Pizlo  <fpizlo@apple.com>
2800
2801         DFG TypeOf implementation should have its backend code aligned to what the CFA does
2802         https://bugs.webkit.org/show_bug.cgi?id=109385
2803
2804         Reviewed by Sam Weinig.
2805         
2806         The problem was that if we ended up trying to constant fold, but didn't succeed
2807         because of prediction mismatches, then we would also fail to do filtration.
2808         
2809         Rearranged the control flow in the CFA to fix that.
2810         
2811         As far as I know, this is asymptomatic - it's sort of OK for the CFA to prove less
2812         things, which is what the bug was.
2813
2814         * dfg/DFGAbstractState.cpp:
2815         (JSC::DFG::AbstractState::execute):
2816
2817 2013-02-11  Sheriff Bot  <webkit.review.bot@gmail.com>
2818
2819         Unreviewed, rolling out r142491.
2820         http://trac.webkit.org/changeset/142491
2821         https://bugs.webkit.org/show_bug.cgi?id=109470
2822
2823         broke the 32 bit build (Requested by jessieberlin on #webkit).
2824
2825         * dfg/DFGAbstractState.cpp:
2826         (JSC::DFG::AbstractState::execute):
2827         * dfg/DFGByteCodeParser.cpp:
2828         (JSC::DFG::ByteCodeParser::parseBlock):
2829         * dfg/DFGCSEPhase.cpp:
2830         (JSC::DFG::CSEPhase::performNodeCSE):
2831         * dfg/DFGNodeType.h:
2832         (DFG):
2833         * dfg/DFGPredictionPropagationPhase.cpp:
2834         (JSC::DFG::PredictionPropagationPhase::propagate):
2835         * dfg/DFGSpeculativeJIT.cpp:
2836         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2837         * dfg/DFGSpeculativeJIT64.cpp:
2838         (JSC::DFG::SpeculativeJIT::compile):
2839
2840 2013-02-10  Filip Pizlo  <fpizlo@apple.com>
2841
2842         DFG CompareEq(a, null) and CompareStrictEq(a, const) are unsound with respect to constant folding
2843         https://bugs.webkit.org/show_bug.cgi?id=109387
2844
2845         Reviewed by Oliver Hunt.
2846         
2847         Lock in the decision to use a non-speculative constant comparison as early as possible
2848         and don't let the CFA change it by folding constants. This might be a performance
2849         penalty on some really weird code (FWIW, I haven't seen this on benchmarks), but on
2850         the other hand it completely side-steps the unsoundness that the bug speaks of.
2851
2852         * dfg/DFGAbstractState.cpp:
2853         (JSC::DFG::AbstractState::execute):
2854         * dfg/DFGByteCodeParser.cpp:
2855         (JSC::DFG::ByteCodeParser::isConstantForCompareStrictEq):
2856         (ByteCodeParser):
2857         (JSC::DFG::ByteCodeParser::parseBlock):
2858         * dfg/DFGCSEPhase.cpp:
2859         (JSC::DFG::CSEPhase::performNodeCSE):
2860         * dfg/DFGNodeType.h:
2861         (DFG):
2862         * dfg/DFGPredictionPropagationPhase.cpp:
2863         (JSC::DFG::PredictionPropagationPhase::propagate):
2864         * dfg/DFGSpeculativeJIT.cpp:
2865         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2866         * dfg/DFGSpeculativeJIT64.cpp:
2867         (JSC::DFG::SpeculativeJIT::compile):
2868
2869 2013-02-11  Csaba Osztrogonác  <ossy@webkit.org>
2870
2871         Unreviewed fix after r13954 for !ENABLE(JIT) builds.
2872
2873         * llint/LowLevelInterpreter.cpp:
2874
2875 2013-02-11  Gabor Rapcsanyi  <rgabor@webkit.org>
2876
2877         JSC build failing with verbose debug mode
2878         https://bugs.webkit.org/show_bug.cgi?id=109441
2879
2880         Reviewed by Darin Adler.
2881
2882         Fixing some verbose messages which caused build errors.
2883
2884         * dfg/DFGAbstractState.cpp:
2885         (JSC::DFG::AbstractState::mergeToSuccessors):
2886         * dfg/DFGCFAPhase.cpp:
2887         (JSC::DFG::CFAPhase::performBlockCFA):
2888         * dfg/DFGCSEPhase.cpp:
2889         (JSC::DFG::CSEPhase::setReplacement):
2890         (JSC::DFG::CSEPhase::eliminate):
2891         * dfg/DFGPredictionInjectionPhase.cpp:
2892         (JSC::DFG::PredictionInjectionPhase::run):
2893
2894 2013-02-10  Martin Robinson  <mrobinson@igalia.com>
2895
2896         Fix the GTK+ gyp build
2897
2898         * JavaScriptCore.gypi: Update the source list to accurately
2899         reflect what's in the repository and remove the offsets extractor
2900         from the list of JavaScriptCore files. It's only used to build
2901         the extractor binary.
2902
2903 2013-02-09  Andreas Kling  <akling@apple.com>
2904
2905         Shrink-wrap UnlinkedCodeBlock members.
2906         <http://webkit.org/b/109368>
2907
2908         Reviewed by Oliver Hunt.
2909
2910         Rearrange the members of UnlinkedCodeBlock to avoid unnecessary padding on 64-bit.
2911         Knocks ~600 KB off of the Membuster3 peak.
2912
2913         * bytecode/UnlinkedCodeBlock.cpp:
2914         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2915         * bytecode/UnlinkedCodeBlock.h:
2916         (UnlinkedCodeBlock):
2917
2918 2013-02-08  Filip Pizlo  <fpizlo@apple.com>
2919
2920         DFG should allow phases to break Phi's and then have one phase to rebuild them
2921         https://bugs.webkit.org/show_bug.cgi?id=108414
2922
2923         Reviewed by Mark Hahnenberg.
2924         
2925         Introduces two new DFG forms: LoadStore and ThreadedCPS. These are described in
2926         detail in DFGCommon.h.
2927         
2928         Consequently, DFG phases no longer have to worry about preserving data flow
2929         links between basic blocks. It is generally always safe to request that the
2930         graph be dethreaded (Graph::dethread), which brings it into LoadStore form, where
2931         the data flow is implicit. In this form, only liveness-at-head needs to be
2932         preserved.
2933         
2934         All of the machinery for "threading" the graph to introduce data flow between
2935         blocks is now moved out of the bytecode parser and into the CPSRethreadingPhase.
2936         All phases that previously did this maintenance themselves now just rely on
2937         being able to dethread the graph. The one exception is the structure check
2938         hoising phase, which operates over a threaded graph and preserves it, for the
2939         sake of performance.
2940         
2941         Also moved two other things into their own phases: unification (previously found
2942         in the parser) and prediction injection (previously found in various places).
2943
2944         * CMakeLists.txt:
2945         * GNUmakefile.list.am:
2946         * JavaScriptCore.xcodeproj/project.pbxproj:
2947         * Target.pri:
2948         * bytecode/Operands.h:
2949         (Operands):
2950         (JSC::Operands::sizeFor):
2951         (JSC::Operands::atFor):
2952         * dfg/DFGAbstractState.cpp:
2953         (JSC::DFG::AbstractState::execute):
2954         (JSC::DFG::AbstractState::mergeStateAtTail):
2955         * dfg/DFGAllocator.h:
2956         (JSC::DFG::::allocateSlow):
2957         * dfg/DFGArgumentsSimplificationPhase.cpp:
2958         (JSC::DFG::ArgumentsSimplificationPhase::run):
2959         * dfg/DFGBasicBlockInlines.h:
2960         (DFG):
2961         * dfg/DFGByteCodeParser.cpp:
2962         (JSC::DFG::ByteCodeParser::getLocal):
2963         (JSC::DFG::ByteCodeParser::getArgument):
2964         (JSC::DFG::ByteCodeParser::flushDirect):
2965         (JSC::DFG::ByteCodeParser::parseBlock):
2966         (DFG):
2967         (JSC::DFG::ByteCodeParser::parse):
2968         * dfg/DFGCFGSimplificationPhase.cpp:
2969         (JSC::DFG::CFGSimplificationPhase::run):
2970         (JSC::DFG::CFGSimplificationPhase::killUnreachable):
2971         (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
2972         (CFGSimplificationPhase):
2973         (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
2974         (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
2975         * dfg/DFGCPSRethreadingPhase.cpp: Added.
2976         (DFG):
2977         (CPSRethreadingPhase):
2978         (JSC::DFG::CPSRethreadingPhase::CPSRethreadingPhase):
2979         (JSC::DFG::CPSRethreadingPhase::run):
2980         (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
2981         (JSC::DFG::CPSRethreadingPhase::clearVariablesAtHeadAndTail):
2982         (JSC::DFG::CPSRethreadingPhase::addPhiSilently):
2983         (JSC::DFG::CPSRethreadingPhase::addPhi):
2984         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
2985         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocal):
2986         (JSC::DFG::CPSRethreadingPhase::canonicalizeSetLocal):
2987         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
2988         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocal):
2989         (JSC::DFG::CPSRethreadingPhase::canonicalizeSetArgument):
2990         (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
2991         (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlocks):
2992         (JSC::DFG::CPSRethreadingPhase::propagatePhis):
2993         (JSC::DFG::CPSRethreadingPhase::PhiStackEntry::PhiStackEntry):
2994         (PhiStackEntry):
2995         (JSC::DFG::CPSRethreadingPhase::phiStackFor):
2996         (JSC::DFG::performCPSRethreading):
2997         * dfg/DFGCPSRethreadingPhase.h: Added.
2998         (DFG):
2999         * dfg/DFGCSEPhase.cpp:
3000         (CSEPhase):
3001         (JSC::DFG::CSEPhase::performNodeCSE):
3002         * dfg/DFGCommon.cpp:
3003         (WTF):
3004         (WTF::printInternal):
3005         * dfg/DFGCommon.h:
3006         (JSC::DFG::logCompilationChanges):
3007         (DFG):
3008         (WTF):
3009         * dfg/DFGConstantFoldingPhase.cpp:
3010         (JSC::DFG::ConstantFoldingPhase::foldConstants):
3011         * dfg/DFGDriver.cpp:
3012         (JSC::DFG::compile):
3013         * dfg/DFGGraph.cpp:
3014         (JSC::DFG::Graph::Graph):
3015         (JSC::DFG::Graph::dump):
3016         (JSC::DFG::Graph::dethread):
3017         (JSC::DFG::Graph::collectGarbage):
3018         * dfg/DFGGraph.h:
3019         (JSC::DFG::Graph::performSubstitution):
3020         (Graph):
3021         (JSC::DFG::Graph::performSubstitutionForEdge):
3022         (JSC::DFG::Graph::convertToConstant):
3023         * dfg/DFGNode.h:
3024         (JSC::DFG::Node::convertToPhantomLocal):
3025         (Node):
3026         (JSC::DFG::Node::convertToGetLocal):
3027         (JSC::DFG::Node::hasVariableAccessData):
3028         * dfg/DFGNodeType.h:
3029         (DFG):
3030         * dfg/DFGPhase.cpp:
3031         (JSC::DFG::Phase::beginPhase):
3032         * dfg/DFGPhase.h:
3033         (JSC::DFG::runAndLog):
3034         * dfg/DFGPredictionInjectionPhase.cpp: Added.
3035         (DFG):
3036         (PredictionInjectionPhase):
3037         (JSC::DFG::PredictionInjectionPhase::PredictionInjectionPhase):
3038         (JSC::DFG::PredictionInjectionPhase::run):
3039         (JSC::DFG::performPredictionInjection):
3040         * dfg/DFGPredictionInjectionPhase.h: Added.
3041         (DFG):
3042         * dfg/DFGPredictionPropagationPhase.cpp:
3043         (JSC::DFG::PredictionPropagationPhase::run):
3044         (JSC::DFG::PredictionPropagationPhase::propagate):
3045         * dfg/DFGSpeculativeJIT32_64.cpp:
3046         (JSC::DFG::SpeculativeJIT::compile):
3047         * dfg/DFGSpeculativeJIT64.cpp:
3048         (JSC::DFG::SpeculativeJIT::compile):
3049         * dfg/DFGStructureCheckHoistingPhase.cpp:
3050         (JSC::DFG::StructureCheckHoistingPhase::run):
3051         * dfg/DFGUnificationPhase.cpp: Added.
3052         (DFG):
3053         (UnificationPhase):
3054         (JSC::DFG::UnificationPhase::UnificationPhase):
3055         (JSC::DFG::UnificationPhase::run):
3056         (JSC::DFG::performUnification):
3057         * dfg/DFGUnificationPhase.h: Added.
3058         (DFG):
3059         * dfg/DFGValidate.cpp:
3060         (JSC::DFG::Validate::validate):
3061         (JSC::DFG::Validate::dumpGraphIfAppropriate):
3062         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3063         (JSC::DFG::VirtualRegisterAllocationPhase::run):
3064         * llint/LLIntSlowPaths.cpp:
3065         (JSC::LLInt::setUpCall):
3066         * runtime/JSCJSValue.cpp:
3067         (JSC::JSValue::dump):
3068         * runtime/JSString.h:
3069         (JSString):
3070         * runtime/Options.h:
3071         (JSC):
3072
3073 2013-02-08  Jer Noble  <jer.noble@apple.com>
3074
3075         Bring WebKit up to speed with latest Encrypted Media spec.
3076         https://bugs.webkit.org/show_bug.cgi?id=97037
3077
3078         Reviewed by Eric Carlson.
3079
3080         Define the ENABLE_ENCRYPTED_MEDIA_V2 setting.
3081
3082         * Configurations/FeatureDefines.xcconfig:
3083
3084 2013-02-08  Gavin Barraclough  <barraclough@apple.com>
3085
3086         Objective-C API for JavaScriptCore
3087         https://bugs.webkit.org/show_bug.cgi?id=105889
3088
3089         Reviewed by Joseph Pecoraro
3090
3091         Following up on review comments, mostly typos.
3092
3093         * API/JSBlockAdaptor.h:
3094         * API/JSBlockAdaptor.mm:
3095         (-[JSBlockAdaptor blockFromValue:inContext:withException:]):
3096         * API/JSContext.h:
3097         * API/JSExport.h:
3098         * API/JSValue.h:
3099         * API/JSValue.mm:
3100         * API/JSWrapperMap.mm:
3101         (selectorToPropertyName):
3102         (-[JSWrapperMap classInfoForClass:]):
3103         (-[JSWrapperMap wrapperForObject:]):
3104
3105 2013-02-08  Martin Robinson  <mrobinson@igalia.com>
3106
3107         [GTK] Add an experimental gyp build
3108         https://bugs.webkit.org/show_bug.cgi?id=109003
3109
3110         Reviewed by Gustavo Noronha Silva.
3111
3112         * JavaScriptCore.gypi: Update the list of source files to include those
3113         necessary for the GTK+ build.
3114
3115 2013-02-08  Andreas Kling  <akling@apple.com>
3116
3117         JSC: Lower minimum PropertyTable size.
3118         <http://webkit.org/b/109247>
3119
3120         Reviewed by Darin Adler.
3121
3122         Lower the minimum table size for PropertyTable from 16 to 8.
3123         3.32 MB progression on Membuster3 (a ~13% reduction in memory used by PropertyTables.)
3124
3125         * runtime/PropertyMapHashTable.h:
3126         (PropertyTable):
3127         (JSC::PropertyTable::sizeForCapacity):
3128
3129 2013-02-07  Roger Fong  <roger_fong@apple.com>
3130
3131         Unreviewed. More VS2010 WebKit solution touchups.
3132         Make JavaScriptCoreExports.def.in be treated as a custom build file so that changes to it cause the exports to be rebuilt.
3133
3134         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
3135         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.filters:
3136         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3137
3138 2013-02-07  Mark Hahnenberg  <mhahnenberg@apple.com>
3139
3140         Objective-C API: testapi.mm should use ARC
3141         https://bugs.webkit.org/show_bug.cgi?id=107838
3142
3143         Reviewed by Mark Rowe.
3144
3145         Removing the changes to the Xcode project file and moving the equivalent flags into 
3146         the ToolExecutable xcconfig file.
3147
3148         * Configurations/ToolExecutable.xcconfig:
3149         * JavaScriptCore.xcodeproj/project.pbxproj:
3150
3151 2013-02-07  Brent Fulgham  <bfulgham@webkit.org>
3152
3153         [Windows] Unreviewed Visual Studio 2010 build fixes after r142179.
3154
3155         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Correct changed symbols
3156         * JavaScriptCore.vcxproj/JavaScriptCoreExports.def: Removed autogenerated file.
3157
3158 2013-02-05  Filip Pizlo  <fpizlo@apple.com>
3159
3160         DFG::ByteCodeParser should do surgical constant folding to reduce load on the optimization fixpoint
3161         https://bugs.webkit.org/show_bug.cgi?id=109000
3162
3163         Reviewed by Oliver Hunt.
3164         
3165         Previously our source parser's ASTBuilder did some surgical constant folding, but it
3166         didn't cover some cases.  It was particularly incapable of doing constant folding for
3167         cases where we do some minimal loop peeling in the bytecode generator - since it
3168         didn't "see" those constants prior to the peeling.  Example:
3169
3170         for (var i = 0; i < 4; ++i)
3171             things;
3172
3173         This will get peeled just a bit by the bytecode generator, so that the "i < 4" is
3174         duplicated both at the top of the loop and the bottom.  This means that we have a
3175         constant comparison: "0 < 4", which the bytecode generator emits without any further
3176         thought.
3177
3178         The DFG optimization fixpoint of course folds this and simplifies the CFG 
3179         accordingly, but this incurs a compile-time cost.  The purpose of this change is to
3180         do some surgical constant folding in the DFG's bytecode parser, so that such
3181         constructs reduce load on the CFG simplifier and the optimization fixpoint.  The goal
3182         is not to cover all cases, since the DFG CFA and CFG simplifier have a powerful
3183         sparse conditional constant propagation that we can always fall back on. Instead the
3184         goal is to cover enough cases that for common small functions we don't have to
3185         perform such transformations, thereby reducing compile times.
3186         
3187         This also refactors m_inlineStackEntry->m_inlineCallFrame to be a handy method call
3188         and also adds the notion of a TriState-based JSValue::pureToBoolean(). Both of these
3189         things are used by the folder.
3190         
3191         As well, care has been taken to make sure that the bytecode parser only does folding
3192         that is statically provable, and that doesn't arise out of speculation. This means
3193         we cannot fold on data flow that crosses inlining boundaries. On the other hand, the
3194         folding that the bytecode parser uses doesn't require phantoming anything. Such is
3195         the trade-off: for anything that we do need phantoming, we defer it to the
3196         optimization fixpoint.
3197         
3198         Slight SunSpider speed-up.
3199
3200         * dfg/DFGByteCodeParser.cpp:
3201         (JSC::DFG::ByteCodeParser::get):
3202         (JSC::DFG::ByteCodeParser::getLocal):
3203         (JSC::DFG::ByteCodeParser::setLocal):
3204         (JSC::DFG::ByteCodeParser::flushDirect):
3205         (JSC::DFG::ByteCodeParser::flushArgumentsAndCapturedVariables):
3206         (JSC::DFG::ByteCodeParser::toInt32):
3207         (ByteCodeParser):
3208         (JSC::DFG::ByteCodeParser::inlineCallFrame):
3209         (JSC::DFG::ByteCodeParser::currentCodeOrigin):
3210         (JSC::DFG::ByteCodeParser::canFold):
3211         (JSC::DFG::ByteCodeParser::handleInlining):
3212         (JSC::DFG::ByteCodeParser::getScope):
3213         (JSC::DFG::ByteCodeParser::parseResolveOperations):
3214         (JSC::DFG::ByteCodeParser::parseBlock):
3215         (JSC::DFG::ByteCodeParser::parseCodeBlock):
3216         * dfg/DFGNode.h:
3217         (JSC::DFG::Node::isStronglyProvedConstantIn):
3218         (Node):
3219         * runtime/JSCJSValue.h:
3220         * runtime/JSCJSValueInlines.h:
3221         (JSC::JSValue::pureToBoolean):
3222         (JSC):
3223
3224 2013-02-07  Zoltan Herczeg  <zherczeg@webkit.org>
3225
3226         Invalid code is generated for storing constants with baseindex addressing modes on ARM traditional.
3227         https://bugs.webkit.org/show_bug.cgi?id=109050
3228
3229         Reviewed by Oliver Hunt.
3230
3231         The S! scratch register is reused, but it should contain the constant value.
3232
3233         * assembler/ARMAssembler.cpp:
3234         (JSC::ARMAssembler::baseIndexTransfer32):
3235         (JSC::ARMAssembler::baseIndexTransfer16):
3236
3237 2013-02-07  Andras Becsi  <andras.becsi@digia.com>
3238
3239         [Qt] Use GNU ar's thin archive format for intermediate static libs
3240         https://bugs.webkit.org/show_bug.cgi?id=109052
3241
3242         Reviewed by Jocelyn Turcotte.
3243
3244         Adjust project files that used activeBuildConfig()
3245         to use targetSubDir().
3246
3247         * JavaScriptCore.pri:
3248         * LLIntOffsetsExtractor.pro:
3249         * Target.pri:
3250
3251 2013-02-06  Roger Fong  <roger_fong@apple.com>
3252
3253         Unreviewed. Touchups to VS2010 WebKit solution.
3254         Fix an export generator script, modify some property sheets, add resouce file.
3255
3256         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorDebug.props:
3257         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
3258         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props:
3259         * JavaScriptCore.vcxproj/resource.h: Added.
3260
3261 2013-02-06  Ilya Tikhonovsky  <loislo@chromium.org>
3262
3263         Web Inspector: Native Memory Instrumentation: assign class name to the heap graph node automatically
3264         https://bugs.webkit.org/show_bug.cgi?id=107262
3265
3266         Reviewed by Yury Semikhatsky.
3267
3268         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3269
3270 2013-02-06  Mike West  <mkwst@chromium.org>
3271
3272         Add an ENABLE_NOSNIFF feature flag.
3273         https://bugs.webkit.org/show_bug.cgi?id=109029
3274
3275         Reviewed by Jochen Eisinger.
3276
3277         This new flag will control the behavior of 'X-Content-Type-Options: nosniff'
3278         when processing script and other resource types.
3279
3280         * Configurations/FeatureDefines.xcconfig:
3281
3282 2013-02-05  Mark Hahnenberg  <mhahnenberg@apple.com>
3283
3284         put_to_base should emit a Phantom for "value" across the ForceOSRExit
3285         https://bugs.webkit.org/show_bug.cgi?id=108998
3286
3287         Reviewed by Oliver Hunt.
3288
3289         Otherwise, the OSR exit compiler could clobber it, which would lead to badness.
3290
3291         * bytecode/CodeBlock.cpp:
3292         (JSC::CodeBlock::tallyFrequentExitSites): Build fixes for when DFG debug logging is enabled.
3293         * dfg/DFGByteCodeParser.cpp:
3294         (JSC::DFG::ByteCodeParser::parseBlock): Added extra Phantoms for the "value" field where needed.
3295         * dfg/DFGSpeculativeJIT.cpp:
3296         (JSC::DFG::SpeculativeJIT::compile): Ditto.
3297
3298 2013-02-05  Michael Saboff  <msaboff@apple.com>
3299
3300         Crash at JSC::call when loading www.gap.com with JSVALUE32_64 Enabled
3301         https://bugs.webkit.org/show_bug.cgi?id=108991
3302
3303         Reviewed by Oliver Hunt.
3304
3305         Changed the restoration from calleeGPR to nonArgGPR0 because the restoration of the return location
3306         may step on calleeGPR is it happen to be nonArgGPR2.
3307
3308         * dfg/DFGRepatch.cpp:
3309         (JSC::DFG::dfgLinkClosureCall):
3310
3311 2013-02-05  Roger Fong  <roger_fong@apple.com>
3312
3313         Add a JavaScriptCore Export Generator project.
3314         https://bugs.webkit.org/show_bug.cgi?id=108971.
3315
3316         Reviewed by Brent Fulgham.
3317
3318         * JavaScriptCore.vcxproj/JavaScriptCore.sln:
3319         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
3320         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
3321         * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
3322         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator: Added.
3323         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj: Added.
3324         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.filters: Added.
3325         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.user: Added.
3326         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorBuildCmd.cmd: Added.
3327         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props: Added.
3328         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorDebug.props: Added.
3329         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd: Added.
3330         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPreBuild.cmd: Added.
3331         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props: Added.
3332         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Added.
3333
3334 2013-02-04  Filip Pizlo  <fpizlo@apple.com>
3335
3336         DFG should have a precise view of jump targets
3337         https://bugs.webkit.org/show_bug.cgi?id=108868
3338
3339         Reviewed by Oliver Hunt.
3340         
3341         Previously, the DFG relied entirely on the CodeBlock's jump targets list for
3342         determining when to break basic blocks. This worked great, except sometimes it
3343         would be too conservative since the CodeBlock just says where the bytecode
3344         generator inserted labels.
3345         
3346         This change keeps the old jump target list in CodeBlock since it is still
3347         valuable to the baseline JIT, but switches the DFG to use its own jump target
3348         calculator. This ought to reduce pressure on the DFG simplifier, which would
3349         previously do a lot of work to try to merge redundantly created basic blocks.
3350         It appears to be a 1% progression on SunSpider.
3351
3352         * CMakeLists.txt:
3353         * GNUmakefile.list.am:
3354         * JavaScriptCore.xcodeproj/project.pbxproj:
3355         * Target.pri:
3356         * bytecode/PreciseJumpTargets.cpp: Added.
3357         (JSC):
3358         (JSC::addSimpleSwitchTargets):
3359         (JSC::computePreciseJumpTargets):
3360         * bytecode/PreciseJumpTargets.h: Added.
3361         (JSC):
3362         * dfg/DFGByteCodeParser.cpp:
3363         (JSC::DFG::ByteCodeParser::parseCodeBlock):
3364
3365 2013-02-01  Roger Fong  <roger_fong@apple.com>
3366
3367         Make ConfigurationBuildDir include directories precede WebKitLibraries in JSC.
3368         https://bugs.webkit.org/show_bug.cgi?id=108693.
3369
3370         Rubberstamped by Timothy Horton.
3371
3372         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
3373
3374 2013-02-04  Mark Hahnenberg  <mhahnenberg@apple.com>
3375
3376         Structure::m_outOfLineCapacity is unnecessary
3377         https://bugs.webkit.org/show_bug.cgi?id=108206
3378
3379         Reviewed by Darin Adler.
3380
3381         Simplifying the utility functions that we use since we don't need a 
3382         bunch of fancy templates for this one specific call site.
3383
3384         * runtime/Structure.h:
3385         (JSC::Structure::outOfLineCapacity):
3386
3387 2013-02-05  Mark Hahnenberg  <mhahnenberg@apple.com>
3388
3389         Objective-C API: testapi.mm should use ARC
3390         https://bugs.webkit.org/show_bug.cgi?id=107838
3391
3392         Reviewed by Oliver Hunt.
3393
3394         In ToT testapi.mm uses the Obj-C garbage collector, which hides a lot of our object lifetime bugs.
3395         We should enable ARC, since that is what most of our clients will be using. We use Xcode project 
3396         settings to make sure we don't try to compile ARC on 32-bit.
3397
3398         * API/tests/testapi.mm:
3399         (+[TestObject testObject]):
3400         (testObjectiveCAPI):
3401         * JavaScriptCore.xcodeproj/project.pbxproj:
3402
3403 2013-02-05  Brent Fulgham  <bfulgham@webkit.org>
3404
3405         [Windows] Unreviewed VS2010 Build Correction after r141651
3406
3407         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing
3408         StructureRareData.h and StructureRareData.cpp files.
3409         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.