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