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