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