Make SegmentedVector Noncopyable
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-03-11  Oliver Hunt  <oliver@apple.com>
2
3         Make SegmentedVector Noncopyable
4         https://bugs.webkit.org/show_bug.cgi?id=112059
5
6         Reviewed by Geoffrey Garen.
7
8         Copying a SegmentedVector is very expensive, and really shouldn't
9         be necessary.  So I've taken the one place where we currently copy
10         and replaced it with a regular Vector, and replaced the address
11         dependent logic with a indexing ref instead.
12
13         * bytecompiler/BytecodeGenerator.cpp:
14         (JSC::BytecodeGenerator::newLabelScope):
15         (JSC::BytecodeGenerator::emitComplexJumpScopes):
16         * bytecompiler/BytecodeGenerator.h:
17         (BytecodeGenerator):
18         * bytecompiler/LabelScope.h:
19         (JSC):
20         (JSC::LabelScopePtr::LabelScopePtr):
21         (LabelScopePtr):
22         (JSC::LabelScopePtr::operator=):
23         (JSC::LabelScopePtr::~LabelScopePtr):
24         (JSC::LabelScopePtr::operator*):
25         (JSC::LabelScopePtr::operator->):
26         * bytecompiler/NodesCodegen.cpp:
27         (JSC::DoWhileNode::emitBytecode):
28         (JSC::WhileNode::emitBytecode):
29         (JSC::ForNode::emitBytecode):
30         (JSC::ForInNode::emitBytecode):
31         (JSC::SwitchNode::emitBytecode):
32         (JSC::LabelNode::emitBytecode):
33
34 2013-03-10  Andreas Kling  <akling@apple.com>
35
36         SpeculativeJIT should use OwnPtr<SlowPathGenerator>.
37         <http://webkit.org/b/111942>
38
39         Reviewed by Anders Carlsson.
40
41         There's no need to include DFGSlowPathGenerator.h from the header as long as the destructor is out-of-line,
42         so let's use OwnPtr instead of raw pointers + deleteAllValues().
43
44         * dfg/DFGSpeculativeJIT.cpp:
45         (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
46         (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
47         * dfg/DFGSpeculativeJIT.h:
48         (SpeculativeJIT):
49
50 2013-03-09  Sheriff Bot  <webkit.review.bot@gmail.com>
51
52         Unreviewed, rolling out r145299.
53         http://trac.webkit.org/changeset/145299
54         https://bugs.webkit.org/show_bug.cgi?id=111928
55
56         compilation failure with recent clang
57         (DFGBackwardsPropagationPhase.cpp:132:35: error: comparison of
58         constant 10 with expression of type 'bool' is always false)
59         (Requested by thorton on #webkit).
60
61         * CMakeLists.txt:
62         * GNUmakefile.list.am:
63         * JavaScriptCore.xcodeproj/project.pbxproj:
64         * Target.pri:
65         * dfg/DFGArrayMode.cpp:
66         (JSC::DFG::ArrayMode::refine):
67         * dfg/DFGBackwardsPropagationPhase.cpp: Removed.
68         * dfg/DFGBackwardsPropagationPhase.h: Removed.
69         * dfg/DFGCPSRethreadingPhase.cpp:
70         (JSC::DFG::CPSRethreadingPhase::run):
71         (CPSRethreadingPhase):
72         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
73         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
74         * dfg/DFGDriver.cpp:
75         (JSC::DFG::compile):
76         * dfg/DFGGraph.cpp:
77         (JSC::DFG::Graph::dump):
78         * dfg/DFGNodeFlags.cpp:
79         (JSC::DFG::nodeFlagsAsString):
80         (DFG):
81         * dfg/DFGNodeFlags.h:
82         (DFG):
83         * dfg/DFGPredictionPropagationPhase.cpp:
84         (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
85         (PredictionPropagationPhase):
86         (JSC::DFG::PredictionPropagationPhase::isNotZero):
87         (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant):
88         (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive):
89         (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo):
90         (JSC::DFG::PredictionPropagationPhase::propagate):
91         (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
92         * dfg/DFGUnificationPhase.cpp:
93         (JSC::DFG::UnificationPhase::run):
94         * dfg/DFGVariableAccessData.h:
95         (JSC::DFG::VariableAccessData::VariableAccessData):
96         (VariableAccessData):
97
98 2013-03-08  Filip Pizlo  <fpizlo@apple.com>
99
100         DFG overflow check elimination is too smart for its own good
101         https://bugs.webkit.org/show_bug.cgi?id=111832
102
103         Reviewed by Oliver Hunt and Gavin Barraclough.
104         
105         This improves overflow check elimination in three ways:
106         
107         1) It reduces the amount of time the compiler will spend doing it.
108         
109         2) It fixes bugs where overflow check elimination was overzealous. Precisely, for a binary operation
110            over @a and @b where both @a and @b will type check that their inputs (@a->children, @b->children)
111            are int32's and then perform a possibly-overflowing operation, we must be careful not to assume
112            that @a's non-int32 parts don't matter if at the point that @a runs we have as yet not proved that
113            @b->children are int32's and that hence @b might produce a large enough result that doubles would
114            start chopping low bits. The specific implication of this is that for a binary operation to not
115            propagate that it cares about non-int32 parts (NodeUsedAsNumber), we must prove that at least one
116            of the inputs is guaranteed to produce a result within 2^32 and that there won't be a tower of such
117            operations large enough to ultimately produce a double greater than 2^52 (roughly). We achieve the
118            latter by disabling this optimization for very large basic blocks. It's noteworthy that blocks that
119            large won't even make it into the DFG currently.
120         
121         3) It makes the overflow check elimination more precise for cases where the inputs to an Add or Sub
122            are the outputs of a bit-op. For example in (@a + (@b | 0)) | 0, we don't need to propagate
123            NodeUsedAsNumber to either @a or @b.
124         
125         This is neutral on V8v7 and a slight speed-up on compile time benchmarks.
126
127         * CMakeLists.txt:
128         * GNUmakefile.list.am:
129         * JavaScriptCore.xcodeproj/project.pbxproj:
130         * Target.pri:
131         * dfg/DFGArrayMode.cpp:
132         (JSC::DFG::ArrayMode::refine):
133         * dfg/DFGBackwardsPropagationPhase.cpp: Added.
134         (DFG):
135         (BackwardsPropagationPhase):
136         (JSC::DFG::BackwardsPropagationPhase::BackwardsPropagationPhase):
137         (JSC::DFG::BackwardsPropagationPhase::run):
138         (JSC::DFG::BackwardsPropagationPhase::isNotNegZero):
139         (JSC::DFG::BackwardsPropagationPhase::isNotZero):
140         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoForConstant):
141         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoNonRecursive):
142         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
143         (JSC::DFG::BackwardsPropagationPhase::mergeDefaultFlags):
144         (JSC::DFG::BackwardsPropagationPhase::propagate):
145         (JSC::DFG::performBackwardsPropagation):
146         * dfg/DFGBackwardsPropagationPhase.h: Added.
147         (DFG):
148         * dfg/DFGCPSRethreadingPhase.cpp:
149         (JSC::DFG::CPSRethreadingPhase::run):
150         (JSC::DFG::CPSRethreadingPhase::clearIsLoadedFrom):
151         (CPSRethreadingPhase):
152         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
153         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
154         * dfg/DFGDriver.cpp:
155         (JSC::DFG::compile):
156         * dfg/DFGGraph.cpp:
157         (JSC::DFG::Graph::dump):
158         * dfg/DFGNodeFlags.cpp:
159         (JSC::DFG::dumpNodeFlags):
160         (DFG):
161         * dfg/DFGNodeFlags.h:
162         (DFG):
163         * dfg/DFGPredictionPropagationPhase.cpp:
164         (PredictionPropagationPhase):
165         (JSC::DFG::PredictionPropagationPhase::propagate):
166         * dfg/DFGUnificationPhase.cpp:
167         (JSC::DFG::UnificationPhase::run):
168         * dfg/DFGVariableAccessData.h:
169         (JSC::DFG::VariableAccessData::VariableAccessData):
170         (JSC::DFG::VariableAccessData::mergeIsLoadedFrom):
171         (VariableAccessData):
172         (JSC::DFG::VariableAccessData::setIsLoadedFrom):
173         (JSC::DFG::VariableAccessData::isLoadedFrom):
174
175 2013-03-08  Roger Fong  <roger_fong@apple.com>
176
177         Makefile fixes.
178
179         * JavaScriptCore.vcxproj/JavaScriptCore.make:
180
181 2013-03-08  Gabor Rapcsanyi  <rgabor@webkit.org>
182
183         Cache flush problem on ARMv7 JSC
184         https://bugs.webkit.org/show_bug.cgi?id=111441
185
186         Reviewed by Zoltan Herczeg.
187
188         Not proper cache flush causing random crashes on ARMv7 Linux with V8 tests.
189         The problem is similar to https://bugs.webkit.org/show_bug.cgi?id=77712.
190         Change the cache fulsh mechanism similar to ARM traditinal and revert the
191         temporary fix.
192
193         * assembler/ARMv7Assembler.h:
194         (JSC::ARMv7Assembler::cacheFlush):
195
196 2013-03-07  Geoffrey Garen  <ggaren@apple.com>
197
198         REGRESSION (r143759): 40% JSBench regression, 20% Octane/closure regression, 40% Octane/jquery regression, 2% Octane regression
199         https://bugs.webkit.org/show_bug.cgi?id=111797
200
201         Reviewed by Oliver Hunt.
202
203         The bot's testing configuration stresses the cache's starting guess
204         of 1MB.
205
206         This patch removes any starting guess, and just uses wall clock time
207         to discover the initial working set size of an app, in code size.
208
209         * runtime/CodeCache.cpp:
210         (JSC::CodeCacheMap::pruneSlowCase): Update our timer as we go.
211
212         Also fixed a bug where pruning from 0 to 0 would hang -- that case is
213         a possibility now that we start with a capacity of 0.
214
215         * runtime/CodeCache.h:
216         (CodeCacheMap):
217         (JSC::CodeCacheMap::CodeCacheMap):
218         (JSC::CodeCacheMap::add):
219         (JSC::CodeCacheMap::prune): Don't prune if we're in the middle of
220         discovering the working set size of an app, in code size.
221
222 2013-03-07  Michael Saboff  <msaboff@apple.com>
223
224         Crash when updating predictions below JSC::arrayProtoFuncForEach on tuaw.com article
225         https://bugs.webkit.org/show_bug.cgi?id=111777
226
227         Reviewed by Filip Pizlo.
228
229         Moved register allocations to be above any generated control flow so that any
230         resulting spill would be visible to all subsequently generated code.
231
232         * dfg/DFGSpeculativeJIT32_64.cpp:
233         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
234         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
235         (JSC::DFG::SpeculativeJIT::compile):
236         * dfg/DFGSpeculativeJIT64.cpp:
237         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
238         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
239         (JSC::DFG::SpeculativeJIT::compile):
240
241 2013-03-07  Filip Pizlo  <fpizlo@apple.com>
242
243         DFG should not get corrupted IR in the case of code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way
244         https://bugs.webkit.org/show_bug.cgi?id=111783
245
246         Reviewed by Mark Hahnenberg.
247         
248         Unreachable code is not touched by CFA and so thinks that even untyped uses are checked.
249         But dead untyped uses don't need checks and hence don't need to be Phantom'd. The DCE knew
250         this in findTypeCheckRoot() but not in eliminateIrrelevantPhantomChildren(), leading to a
251         Phantom node that had another Phantom node as one of its kids.
252
253         * dfg/DFGDCEPhase.cpp:
254         (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
255
256 2013-03-07  Filip Pizlo  <fpizlo@apple.com>
257
258         The DFG fixpoint is not strictly profitable, and should be straight-lined
259         https://bugs.webkit.org/show_bug.cgi?id=111764
260
261         Reviewed by Oliver Hunt and Geoffrey Garen.
262         
263         The DFG previously ran optimizations to fixpoint because there exists a circular dependency:
264         
265         CSE depends on CFG simplification: CFG simplification merges blocks, and CSE is block-local.
266         
267         CFG simplification depends on CFA and constant folding: constant folding reveals branches on
268         constants.
269         
270         CFA depends on CSE: CSE reveals must-alias relationships by proving that two operations
271         always produce identical values.
272         
273         Arguments simplification also depends on CSE, but it ought not depend on anything else.
274         
275         Hence we get a cycle like: CFA -> folding -> CFG -> CSE -> CFA.
276         
277         Note that before we had sparse conditional CFA, we also had CFA depending on CFG. This ought
278         not be the case anymore: CFG simplification should not by itself lead to better CFA results.
279         
280         My guess is that the weakest link in this cycle is CFG -> CSE. CSE cuts both ways: if you
281         CSE too much then you increase register pressure. Hence it's not clear that you always want
282         to CSE after simplifying control flow. This leads to an order of optimization as follows:
283         
284         CSE -> arguments -> CFA -> folding -> CFG
285         
286         This is a 2.5% speed-up on SunSpider, a 4% speed-up on V8Spider, a possible 0.3% slow-down
287         on V8v7, nothing on Kraken, and 1.2% speed-up in the JSRegress geomean. I'll take a 2.5%
288         speed-up over a 0.3% V8v7 speed-up.
289
290         * dfg/DFGDriver.cpp:
291         (JSC::DFG::compile):
292
293 2013-03-07  Roger Fong  <roger_fong@apple.com>
294
295         Build fix for AppleWin VS2010.
296
297         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
298         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
299
300 2013-03-05  Mark Hahnenberg  <mhahnenberg@apple.com>
301
302         Objective-C API: Need a good way to reference event handlers without causing cycles
303         https://bugs.webkit.org/show_bug.cgi?id=111088
304
305         Reviewed by Geoffrey Garen.
306
307         JSManagedValue is like a special kind of weak value. When you create a JSManagedValue, you can
308         supply an Objective-C object as its "owner". As long as the Objective-C owner object remains
309         alive and its wrapper remains accessible to the JSC garbage collector (e.g. by being marked by 
310         the global object), the reference to the JavaScript value is strong. As soon as the Objective-C
311         owner is deallocated or its wrapper becomes inaccessible to the garbage collector, the reference
312         becomes weak.
313
314         If you do not supply an owner or you use the weakValueWithValue: convenience class method, the
315         returned JSManagedValue behaves as a normal weak reference.
316
317         This new class allows clients to maintain references to JavaScript values in the Objective-C
318         heap without creating reference cycles/leaking memory.
319
320         * API/JSAPIWrapperObject.cpp: Added.
321         (JSC):
322         (JSC::::createStructure):
323         (JSC::JSAPIWrapperObject::JSAPIWrapperObject): This is a special JSObject for the Objective-C API that knows
324         for the purposes of garbage collection/marking that it wraps an opaque Objective-C object.
325         (JSC::JSAPIWrapperObject::visitChildren): We add the pointer to the wrapped Objective-C object to the set of
326         opaque roots so that the weak handle owner for JSManagedValues can find it later.
327         * API/JSAPIWrapperObject.h: Added.
328         (JSC):
329         (JSAPIWrapperObject):
330         (JSC::JSAPIWrapperObject::wrappedObject):
331         (JSC::JSAPIWrapperObject::setWrappedObject):
332         * API/JSBase.cpp:
333         (JSSynchronousGarbageCollect):
334         * API/JSBasePrivate.h:
335         * API/JSCallbackObject.cpp:
336         (JSC):
337         * API/JSCallbackObject.h:
338         (JSC::JSCallbackObject::destroy): Moved this to the header so that we don't get link errors with JSAPIWrapperObject.
339         * API/JSContext.mm:
340         (-[JSContext initWithVirtualMachine:]): We weren't adding manually allocated/initialized JSVirtualMachine objects to 
341         the global cache of virtual machines. The init methods handle this now rather than contextWithGlobalContextRef, since 
342         not everyone is guaranteed to use the latter.
343         (-[JSContext initWithGlobalContextRef:]):
344         (+[JSContext contextWithGlobalContextRef:]):
345         * API/JSManagedValue.h: Added.
346         * API/JSManagedValue.mm: Added.
347         (JSManagedValueHandleOwner):
348         (managedValueHandleOwner):
349         (+[JSManagedValue weakValueWithValue:]):
350         (+[JSManagedValue managedValueWithValue:owner:]):
351         (-[JSManagedValue init]): We explicitly call the ARC entrypoints to initialize/get the weak owner field since we don't 
352         use ARC when building our framework.
353         (-[JSManagedValue initWithValue:]):
354         (-[JSManagedValue initWithValue:owner:]):
355         (-[JSManagedValue dealloc]):
356         (-[JSManagedValue value]):
357         (-[JSManagedValue weakOwner]):
358         (JSManagedValueHandleOwner::isReachableFromOpaqueRoots): If the Objective-C owner is still alive (i.e. loading the weak field
359         returns non-nil) and that value was added to the set of opaque roots by the wrapper for that Objective-C owner, then the the 
360         JSObject to which the JSManagedObject refers is still alive.
361         * API/JSObjectRef.cpp: We have to add explicit checks for the JSAPIWrapperObject, just like the other types of JSCallbackObjects.
362         (JSObjectGetPrivate):
363         (JSObjectSetPrivate):
364         (JSObjectGetPrivateProperty):
365         (JSObjectSetPrivateProperty):
366         (JSObjectDeletePrivateProperty):
367         * API/JSValue.mm:
368         (objectToValueWithoutCopy):
369         * API/JSValueRef.cpp:
370         (JSValueIsObjectOfClass):
371         * API/JSVirtualMachine.mm:
372         (-[JSVirtualMachine initWithContextGroupRef:]):
373         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
374         * API/JSWrapperMap.mm:
375         (wrapperFinalize):
376         (makeWrapper): This is our own internal version of JSObjectMake which creates JSAPIWrapperObjects, the Obj-C API 
377         version of JSCallbackObjects.
378         (createObjectWithCustomBrand):
379         (-[JSObjCClassInfo wrapperForObject:]):
380         (tryUnwrapObjcObject):
381         * API/JavaScriptCore.h:
382         * API/tests/testapi.mm: Added new tests for the strong and weak uses of JSManagedValue in the context of an 
383         onclick handler for an Objective-C object inserted into a JSContext.
384         (-[TextXYZ setWeakOnclick:]):
385         (-[TextXYZ setOnclick:]):
386         (-[TextXYZ weakOnclick]):
387         (-[TextXYZ onclick]):
388         (-[TextXYZ click]):
389         * CMakeLists.txt: Various build system additions.
390         * GNUmakefile.list.am:
391         * JavaScriptCore.gypi:
392         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
393         * JavaScriptCore.xcodeproj/project.pbxproj:
394         * runtime/JSGlobalObject.cpp: Added the new canonical Structure for the JSAPIWrapperObject class.
395         (JSC::JSGlobalObject::reset):
396         (JSC):
397         (JSC::JSGlobalObject::visitChildren):
398         * runtime/JSGlobalObject.h:
399         (JSGlobalObject):
400         (JSC::JSGlobalObject::objcWrapperObjectStructure):
401
402 2013-03-06  Filip Pizlo  <fpizlo@apple.com>
403
404         ConvertThis should be turned into Identity based on predictions in Fixup, rather than based on proofs in ConstantFolding
405         https://bugs.webkit.org/show_bug.cgi?id=111674
406
407         Reviewed by Oliver Hunt.
408         
409         This gets rid of the speculated forms of ConvertThis in the backend, and has Fixup
410         convert them to either Identity(Object:@child) if the child is predicted object, or
411         Phantom(Other:@child) ; WeakJSConstant(global this object) if it's predicted Other.
412         
413         The goal of this is to ensure that the optimization fixpoint doesn't create
414         Identity's, since doing so requires a rerun of CSE. So far this isn't a speed-up
415         but I'm hoping this will be a step towards reducing the need to rerun the fixpoint
416         so as to ultimately reduce compile times.
417
418         * dfg/DFGAbstractState.cpp:
419         (JSC::DFG::AbstractState::executeEffects):
420         * dfg/DFGAssemblyHelpers.h:
421         (AssemblyHelpers):
422         * dfg/DFGConstantFoldingPhase.cpp:
423         (JSC::DFG::ConstantFoldingPhase::foldConstants):
424         * dfg/DFGFixupPhase.cpp:
425         (JSC::DFG::FixupPhase::fixupNode):
426         (FixupPhase):
427         (JSC::DFG::FixupPhase::observeUseKindOnNode):
428         (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
429         * dfg/DFGGraph.h:
430         (JSC::DFG::Graph::globalThisObjectFor):
431         (Graph):
432         * dfg/DFGNode.h:
433         (Node):
434         (JSC::DFG::Node::convertToIdentity):
435         (JSC::DFG::Node::convertToWeakConstant):
436         * dfg/DFGSpeculativeJIT32_64.cpp:
437         (JSC::DFG::SpeculativeJIT::compile):
438         * dfg/DFGSpeculativeJIT64.cpp:
439         (JSC::DFG::SpeculativeJIT::compile):
440
441 2013-03-07  Peter Gal  <galpeter@inf.u-szeged.hu>
442
443         Children method in LLINT AST Not class should return [@child]
444         https://bugs.webkit.org/show_bug.cgi?id=90740
445
446         Reviewed by Filip Pizlo.
447
448         * offlineasm/ast.rb: Fixed the return value of the children method in the Not AST class.
449
450 2013-03-05  Oliver Hunt  <oliver@apple.com>
451
452         Bring back eager resolution of function scoped variables
453         https://bugs.webkit.org/show_bug.cgi?id=111497
454
455         Reviewed by Geoffrey Garen.
456
457         This reverts the get/put_scoped_var part of the great non-local
458         variable resolution refactoring.  This still leaves all the lazy
459         variable resolution logic as it's necessary for global property
460         resolution, and i don't want to make the patch bigger than it
461         already is.
462
463         * bytecode/CodeBlock.cpp:
464         (JSC::CodeBlock::dumpBytecode):
465         (JSC::CodeBlock::CodeBlock):
466         * bytecode/CodeBlock.h:
467         (CodeBlock):
468         * bytecode/Opcode.h:
469         (JSC):
470         (JSC::padOpcodeName):
471         * bytecode/UnlinkedCodeBlock.cpp:
472         (JSC::generateFunctionCodeBlock):
473         (JSC::UnlinkedFunctionExecutable::codeBlockFor):
474         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
475         * bytecode/UnlinkedCodeBlock.h:
476         (JSC):
477         (UnlinkedFunctionExecutable):
478         (UnlinkedCodeBlock):
479         (JSC::UnlinkedCodeBlock::usesGlobalObject):
480         (JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
481         (JSC::UnlinkedCodeBlock::globalObjectRegister):
482         * bytecompiler/BytecodeGenerator.cpp:
483         (JSC::ResolveResult::checkValidity):
484         (JSC::BytecodeGenerator::BytecodeGenerator):
485         (JSC::BytecodeGenerator::emitLoadGlobalObject):
486         (JSC):
487         (JSC::BytecodeGenerator::resolve):
488         (JSC::BytecodeGenerator::resolveConstDecl):
489         (JSC::BytecodeGenerator::emitResolve):
490         (JSC::BytecodeGenerator::emitResolveBase):
491         (JSC::BytecodeGenerator::emitResolveBaseForPut):
492         (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
493         (JSC::BytecodeGenerator::emitResolveWithThis):
494         (JSC::BytecodeGenerator::emitGetStaticVar):
495         (JSC::BytecodeGenerator::emitPutStaticVar):
496         * bytecompiler/BytecodeGenerator.h:
497         (JSC::ResolveResult::lexicalResolve):
498         (JSC::ResolveResult::isStatic):
499         (JSC::ResolveResult::depth):
500         (JSC::ResolveResult::index):
501         (ResolveResult):
502         (JSC::ResolveResult::ResolveResult):
503         (BytecodeGenerator):
504         * bytecompiler/NodesCodegen.cpp:
505         (JSC::ResolveNode::isPure):
506         (JSC::FunctionCallResolveNode::emitBytecode):
507         (JSC::PostfixNode::emitResolve):
508         (JSC::TypeOfResolveNode::emitBytecode):
509         (JSC::PrefixNode::emitResolve):
510         (JSC::ReadModifyResolveNode::emitBytecode):
511         (JSC::AssignResolveNode::emitBytecode):
512         (JSC::ConstDeclNode::emitCodeSingle):
513         * dfg/DFGByteCodeParser.cpp:
514         (JSC::DFG::ByteCodeParser::parseBlock):
515         * dfg/DFGCapabilities.cpp:
516         (JSC::DFG::debugFail):
517         * dfg/DFGCapabilities.h:
518         (JSC::DFG::canCompileOpcode):
519         (JSC::DFG::canInlineOpcode):
520         * jit/JIT.cpp:
521         (JSC::JIT::privateCompileMainPass):
522         * jit/JIT.h:
523         (JIT):
524         * jit/JITPropertyAccess.cpp:
525         (JSC::JIT::emit_op_get_scoped_var):
526         (JSC):
527         (JSC::JIT::emit_op_put_scoped_var):
528         * jit/JITPropertyAccess32_64.cpp:
529         (JSC::JIT::emit_op_get_scoped_var):
530         (JSC):
531         (JSC::JIT::emit_op_put_scoped_var):
532         * llint/LowLevelInterpreter32_64.asm:
533         * llint/LowLevelInterpreter64.asm:
534         * runtime/CodeCache.cpp:
535         (JSC::CodeCache::getCodeBlock):
536         (JSC::CodeCache::getProgramCodeBlock):
537         (JSC::CodeCache::getEvalCodeBlock):
538         * runtime/CodeCache.h:
539         (JSC):
540         (CodeCache):
541         * runtime/Executable.cpp:
542         (JSC::EvalExecutable::compileInternal):
543         (JSC::FunctionExecutable::produceCodeBlockFor):
544         * runtime/JSGlobalObject.cpp:
545         (JSC::JSGlobalObject::createEvalCodeBlock):
546         * runtime/JSGlobalObject.h:
547         (JSGlobalObject):
548         * runtime/Options.cpp:
549         (JSC::Options::initialize):
550
551 2013-03-06  Filip Pizlo  <fpizlo@apple.com>
552
553         Unreviewed, roll out http://trac.webkit.org/changeset/144989
554         
555         I think we want the assertion that I removed.
556
557         * dfg/DFGAbstractState.cpp:
558         (JSC::DFG::AbstractState::merge):
559         (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
560         * dfg/DFGAbstractState.h:
561         (AbstractState):
562
563 2013-03-06  Filip Pizlo  <fpizlo@apple.com>
564
565         DFG::AbstractState::merge() is still more complicated than it needs to be
566         https://bugs.webkit.org/show_bug.cgi?id=111619
567
568         Reviewed by Mark Hahnenberg.
569         
570         This method is the one place where we still do some minimal amount of liveness pruning, but the style with
571         which it is written is awkward, and it makes an assertion about variablesAtTail that will be invalidated
572         by https://bugs.webkit.org/show_bug.cgi?id=111539.
573
574         * dfg/DFGAbstractState.cpp:
575         (JSC::DFG::AbstractState::merge):
576         (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
577         * dfg/DFGAbstractState.h:
578         (AbstractState):
579
580 2013-03-06  Filip Pizlo  <fpizlo@apple.com>
581
582         DFG should not run full CSE after the optimization fixpoint, since it really just wants store elimination
583         https://bugs.webkit.org/show_bug.cgi?id=111536
584
585         Reviewed by Oliver Hunt and Mark Hahnenberg.
586         
587         The fixpoint will do aggressive load elimination and pure CSE. There's no need to do it after the fixpoint.
588         On the other hand, the fixpoint does not profit from doing store elimination (except for SetLocal/Flush).
589         Previously we had CSE do both, and had it avoid doing some store elimination during the fixpoint by querying
590         the fixpoint state. This changes CSE to be templated on mode - either NormalCSE or StoreElimination - so
591         that we explicitly put it into one of those modes depending on where we call it from. The goal is to reduce
592         time spent doing load elimination after the fixpoint, since that is just wasted cycles.
593
594         * dfg/DFGCSEPhase.cpp:
595         (JSC::DFG::CSEPhase::CSEPhase):
596         (JSC::DFG::CSEPhase::run):
597         (JSC::DFG::CSEPhase::performNodeCSE):
598         (JSC::DFG::CSEPhase::performBlockCSE):
599         (JSC::DFG::performCSE):
600         (DFG):
601         (JSC::DFG::performStoreElimination):
602         * dfg/DFGCSEPhase.h:
603         (DFG):
604         * dfg/DFGDriver.cpp:
605         (JSC::DFG::compile):
606
607 2013-03-06  Andreas Kling  <akling@apple.com>
608
609         Pack Structure members better.
610         <http://webkit.org/b/111593>
611         <rdar://problem/13359200>
612
613         Reviewed by Mark Hahnenberg.
614
615         Shrink Structure by 8 bytes (now at 104 bytes) on 64-bit by packing the members better.
616
617         * runtime/Structure.cpp:
618         (JSC::Structure::Structure):
619         * runtime/Structure.h:
620         (Structure):
621
622 2013-03-06  Andreas Kling  <akling@apple.com>
623
624         Unreviewed, fix Windows build after r144910.
625
626         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
627
628 2013-03-05  Filip Pizlo  <fpizlo@apple.com>
629
630         DFG should not check if nodes are shouldGenerate prior to DCE
631         https://bugs.webkit.org/show_bug.cgi?id=111520
632
633         Reviewed by Geoffrey Garen.
634         
635         All nodes are live before DCE. We don't need to check that they aren't, because they
636         definitely will be.
637
638         * dfg/DFGArgumentsSimplificationPhase.cpp:
639         (JSC::DFG::ArgumentsSimplificationPhase::run):
640         * dfg/DFGCFAPhase.cpp:
641         (JSC::DFG::CFAPhase::performBlockCFA):
642         * dfg/DFGCFGSimplificationPhase.cpp:
643         (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
644         * dfg/DFGCSEPhase.cpp:
645         (JSC::DFG::CSEPhase::pureCSE):
646         (JSC::DFG::CSEPhase::int32ToDoubleCSE):
647         (JSC::DFG::CSEPhase::constantCSE):
648         (JSC::DFG::CSEPhase::weakConstantCSE):
649         (JSC::DFG::CSEPhase::getCalleeLoadElimination):
650         (JSC::DFG::CSEPhase::getArrayLengthElimination):
651         (JSC::DFG::CSEPhase::globalVarLoadElimination):
652         (JSC::DFG::CSEPhase::scopedVarLoadElimination):
653         (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
654         (JSC::DFG::CSEPhase::globalVarStoreElimination):
655         (JSC::DFG::CSEPhase::scopedVarStoreElimination):
656         (JSC::DFG::CSEPhase::getByValLoadElimination):
657         (JSC::DFG::CSEPhase::checkStructureElimination):
658         (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
659         (JSC::DFG::CSEPhase::putStructureStoreElimination):
660         (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
661         (JSC::DFG::CSEPhase::putByOffsetStoreElimination):
662         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
663         (JSC::DFG::CSEPhase::checkArrayElimination):
664         (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
665         (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
666         (JSC::DFG::CSEPhase::getLocalLoadElimination):
667         (JSC::DFG::CSEPhase::setLocalStoreElimination):
668         (JSC::DFG::CSEPhase::performNodeCSE):
669         * dfg/DFGFixupPhase.cpp:
670         (JSC::DFG::FixupPhase::fixupNode):
671         (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
672         * dfg/DFGPredictionPropagationPhase.cpp:
673         (JSC::DFG::PredictionPropagationPhase::propagate):
674         * dfg/DFGStructureCheckHoistingPhase.cpp:
675         (JSC::DFG::StructureCheckHoistingPhase::run):
676
677 2013-03-06  Csaba Osztrogonác  <ossy@webkit.org>
678
679         Fix unused parameter warnings in ARM assembler
680         https://bugs.webkit.org/show_bug.cgi?id=111433
681
682         Reviewed by Kentaro Hara.
683
684         * assembler/ARMAssembler.h: Remove unreachable revertJump() after r143346.
685         * assembler/MacroAssemblerARM.h:
686         (JSC::MacroAssemblerARM::moveIntsToDouble): Remove unused scratch parameter instead of UNUSED_PARAM.
687         (JSC::MacroAssemblerARM::branchConvertDoubleToInt32): Remove unused fpTemp parameter.
688         (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): Remove unused parameters.
689
690 2013-03-06  Andreas Kling  <akling@apple.com>
691
692         Unused Structure property tables waste 14MB on Membuster.
693         <http://webkit.org/b/110854>
694         <rdar://problem/13292104>
695
696         Reviewed by Geoffrey Garen.
697
698         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
699         14 MB progression on Membuster3.
700
701         This time it should stick; I've been through all the tests with COLLECT_ON_EVERY_ALLOCATION.
702         The issue with the last version was that Structure::m_offset could be used uninitialized
703         when re-materializing a previously GC'd property table, causing some sanity checks to fail.
704
705         * CMakeLists.txt:
706         * GNUmakefile.list.am:
707         * JavaScriptCore.gypi:
708         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
709         * JavaScriptCore.xcodeproj/project.pbxproj:
710         * Target.pri:
711
712             Added PropertyTable.cpp.
713
714         * runtime/PropertyTable.cpp: Added.
715         (JSC::PropertyTable::create):
716         (JSC::PropertyTable::clone):
717         (JSC::PropertyTable::PropertyTable):
718         (JSC::PropertyTable::destroy):
719         (JSC::PropertyTable::~PropertyTable):
720         (JSC::PropertyTable::visitChildren):
721
722             Moved marking of property table values here from Structure::visitChildren().
723
724         * runtime/WriteBarrier.h:
725         (JSC::WriteBarrierBase::get):
726
727             Move m_cell to a local before using it multiple times. This avoids a multiple-access race when
728             Structure::checkOffsetConsistency() is used in assertions on the main thread while a marking thread
729             zaps the property table.
730
731         * runtime/Structure.h:
732         (JSC::Structure::materializePropertyMapIfNecessary):
733         (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
734         * runtime/StructureInlines.h:
735         (JSC::Structure::propertyTable):
736
737             Added a getter for the Structure's PropertyTable that ASSERTs GC currently isn't active.
738             Because GC can zap an unpinned property table at any time, it's not entirely safe to access it.
739             Renamed the variable itself to m_propertyTableUnsafe to force call sites into explaining themselves.
740
741         (JSC::Structure::putWillGrowOutOfLineStorage):
742         (JSC::Structure::checkOffsetConsistency):
743
744             Moved these out of Structure.h to break header dependency cycle between Structure/PropertyTable.
745
746         * runtime/Structure.cpp:
747         (JSC::Structure::visitChildren):
748
749             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
750
751         (JSC::Structure::takePropertyTableOrCloneIfPinned):
752
753             Added for setting up the property table in a new transition, this code is now shared between
754             addPropertyTransition() and nonPropertyTransition().
755
756         * runtime/JSGlobalData.h:
757         * runtime/JSGlobalData.cpp:
758         (JSC::JSGlobalData::JSGlobalData):
759
760             Add a global propertyTableStructure.
761
762         * runtime/PropertyMapHashTable.h:
763         (PropertyTable):
764         (JSC::PropertyTable::createStructure):
765         (JSC::PropertyTable::copy):
766
767             Make PropertyTable a GC object.
768
769         * runtime/Structure.cpp:
770         (JSC::Structure::dumpStatistics):
771         (JSC::Structure::materializePropertyMap):
772         (JSC::Structure::despecifyDictionaryFunction):
773         (JSC::Structure::addPropertyTransition):
774         (JSC::Structure::changePrototypeTransition):
775         (JSC::Structure::despecifyFunctionTransition):
776         (JSC::Structure::attributeChangeTransition):
777         (JSC::Structure::toDictionaryTransition):
778         (JSC::Structure::sealTransition):
779         (JSC::Structure::freezeTransition):
780         (JSC::Structure::preventExtensionsTransition):
781         (JSC::Structure::nonPropertyTransition):
782         (JSC::Structure::isSealed):
783         (JSC::Structure::isFrozen):
784         (JSC::Structure::flattenDictionaryStructure):
785         (JSC::Structure::pin):
786         (JSC::Structure::copyPropertyTable):
787         (JSC::Structure::copyPropertyTableForPinning):
788         (JSC::Structure::get):
789         (JSC::Structure::despecifyFunction):
790         (JSC::Structure::despecifyAllFunctions):
791         (JSC::Structure::putSpecificValue):
792         (JSC::Structure::remove):
793         (JSC::Structure::createPropertyMap):
794         (JSC::Structure::getPropertyNamesFromStructure):
795         (JSC::Structure::checkConsistency):
796
797 2013-03-05  Filip Pizlo  <fpizlo@apple.com>
798
799         Get rid of the invert argument to SpeculativeJIT::jumpSlowForUnwantedArrayMode
800         https://bugs.webkit.org/show_bug.cgi?id=105624
801
802         Reviewed by Oliver Hunt.
803         
804         All callers pass invert = false, which is the default value of the argument. So, get
805         rid of the argument and fold away all code that checks it.
806
807         * dfg/DFGSpeculativeJIT.cpp:
808         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
809         * dfg/DFGSpeculativeJIT.h:
810         (SpeculativeJIT):
811
812 2013-03-05  Filip Pizlo  <fpizlo@apple.com>
813
814         Unreviewed, fix an incorrect comment. The comment was a holdover from a work-in-progress version of this code.
815
816         * dfg/DFGDCEPhase.cpp:
817         (JSC::DFG::DCEPhase::run):
818
819 2013-03-04  Filip Pizlo  <fpizlo@apple.com>
820
821         DFG DCE might eliminate checks unsoundly
822         https://bugs.webkit.org/show_bug.cgi?id=109389
823
824         Reviewed by Oliver Hunt.
825         
826         This gets rid of all eager reference counting, and does all dead code elimination
827         in one phase - the DCEPhase. This phase also sets up the node reference counts,
828         which are then used not just for DCE but also register allocation and stack slot
829         allocation.
830         
831         Doing this required a number of surgical changes in places that previously relied
832         on always having liveness information. For example, the structure check hoisting
833         phase must now consult whether a VariableAccessData is profitable for unboxing to
834         make sure that it doesn't try to do hoisting on set SetLocals. The arguments
835         simplification phase employs its own light-weight liveness analysis. Both phases
836         previously just used reference counts.
837         
838         The largest change is that now, dead nodes get turned into Phantoms. Those
839         Phantoms will retain those child edges that are not proven. This ensures that any
840         type checks performed by a dead node remain even after the node is killed. On the
841         other hand, this Phantom conversion means that we need special handling for
842         SetLocal. I decided to make the four forms of SetLocal explicit:
843         
844         MovHint(@a, rK): Just indicates that node @a contains the value that would have
845              now been placed into virtual register rK. Does not actually cause @a to be
846              stored into rK. This would have previously been a dead SetLocal with @a
847              being live. MovHints are always dead.
848         
849         ZombieHint(rK): Indicates that at this point, register rK will contain a dead
850              value and OSR should put Undefined into it. This would have previously been
851              a dead SetLocal with @a being dead also. ZombieHints are always dead.
852         
853         MovHintAndCheck(@a, rK): Identical to MovHint except @a is also type checked,
854              according to whatever UseKind the edge to @a has. The type check is always a
855              forward exit. MovHintAndChecks are always live, since they are
856              NodeMustGenerate. Previously this would have been a dead SetLocal with a
857              live @a, and the check would have disappeared. This is one of the bugs that
858              this patch solves.
859         
860         SetLocal(@a, rK): This still does exactly what it does now, if the SetLocal is
861              live.
862         
863         Basically this patch makes it so that dead SetLocals eventually decay to MovHint,
864         ZombieHint, or MovHintAndCheck depending on the situation. If the child @a is
865         also dead, then you get a ZombieHint. If the child @a is live but the SetLocal
866         has a type check and @a's type hasn't been proven to have that type then you get
867         a MovHintAndCheck. Otherwise you get a MovHint.
868         
869         This is performance neutral.
870
871         * CMakeLists.txt:
872         * GNUmakefile.list.am:
873         * JavaScriptCore.xcodeproj/project.pbxproj:
874         * Target.pri:
875         * dfg/DFGAbstractState.cpp:
876         (JSC::DFG::AbstractState::executeEffects):
877         (JSC::DFG::AbstractState::mergeStateAtTail):
878         * dfg/DFGArgumentsSimplificationPhase.cpp:
879         (JSC::DFG::ArgumentsSimplificationPhase::run):
880         (ArgumentsSimplificationPhase):
881         (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
882         * dfg/DFGBasicBlock.h:
883         (BasicBlock):
884         * dfg/DFGBasicBlockInlines.h:
885         (DFG):
886         * dfg/DFGByteCodeParser.cpp:
887         (JSC::DFG::ByteCodeParser::addToGraph):
888         (JSC::DFG::ByteCodeParser::insertPhiNode):
889         (JSC::DFG::ByteCodeParser::emitFunctionChecks):
890         * dfg/DFGCFAPhase.cpp:
891         (JSC::DFG::CFAPhase::run):
892         * dfg/DFGCFGSimplificationPhase.cpp:
893         (JSC::DFG::CFGSimplificationPhase::run):
894         (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
895         * dfg/DFGCPSRethreadingPhase.cpp:
896         (JSC::DFG::CPSRethreadingPhase::run):
897         (JSC::DFG::CPSRethreadingPhase::addPhiSilently):
898         * dfg/DFGCSEPhase.cpp:
899         (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
900         (JSC::DFG::CSEPhase::setReplacement):
901         (JSC::DFG::CSEPhase::performNodeCSE):
902         * dfg/DFGCommon.cpp:
903         (WTF::printInternal):
904         (WTF):
905         * dfg/DFGCommon.h:
906         (WTF):
907         * dfg/DFGConstantFoldingPhase.cpp:
908         (JSC::DFG::ConstantFoldingPhase::foldConstants):
909         (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
910         (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
911         * dfg/DFGDCEPhase.cpp: Added.
912         (DFG):
913         (DCEPhase):
914         (JSC::DFG::DCEPhase::DCEPhase):
915         (JSC::DFG::DCEPhase::run):
916         (JSC::DFG::DCEPhase::findTypeCheckRoot):
917         (JSC::DFG::DCEPhase::countEdge):
918         (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
919         (JSC::DFG::performDCE):
920         * dfg/DFGDCEPhase.h: Added.
921         (DFG):
922         * dfg/DFGDriver.cpp:
923         (JSC::DFG::compile):
924         * dfg/DFGFixupPhase.cpp:
925         (JSC::DFG::FixupPhase::fixupNode):
926         (JSC::DFG::FixupPhase::checkArray):
927         (JSC::DFG::FixupPhase::blessArrayOperation):
928         (JSC::DFG::FixupPhase::fixIntEdge):
929         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
930         (JSC::DFG::FixupPhase::truncateConstantToInt32):
931         * dfg/DFGGraph.cpp:
932         (JSC::DFG::Graph::Graph):
933         (JSC::DFG::Graph::dump):
934         (DFG):
935         * dfg/DFGGraph.h:
936         (JSC::DFG::Graph::changeChild):
937         (JSC::DFG::Graph::changeEdge):
938         (JSC::DFG::Graph::compareAndSwap):
939         (JSC::DFG::Graph::clearAndDerefChild):
940         (JSC::DFG::Graph::performSubstitution):
941         (JSC::DFG::Graph::performSubstitutionForEdge):
942         (Graph):
943         (JSC::DFG::Graph::substitute):
944         * dfg/DFGInsertionSet.h:
945         (InsertionSet):
946         * dfg/DFGNode.h:
947         (JSC::DFG::Node::Node):
948         (JSC::DFG::Node::convertToConstant):
949         (JSC::DFG::Node::convertToGetLocalUnlinked):
950         (JSC::DFG::Node::containsMovHint):
951         (Node):
952         (JSC::DFG::Node::hasVariableAccessData):
953         (JSC::DFG::Node::willHaveCodeGenOrOSR):
954         * dfg/DFGNodeType.h:
955         (DFG):
956         * dfg/DFGPredictionPropagationPhase.cpp:
957         (JSC::DFG::PredictionPropagationPhase::propagate):
958         * dfg/DFGSpeculativeJIT.cpp:
959         (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
960         (JSC::DFG::SpeculativeJIT::compileMovHint):
961         (JSC::DFG::SpeculativeJIT::compileMovHintAndCheck):
962         (DFG):
963         (JSC::DFG::SpeculativeJIT::compileInlineStart):
964         (JSC::DFG::SpeculativeJIT::compile):
965         * dfg/DFGSpeculativeJIT.h:
966         (SpeculativeJIT):
967         * dfg/DFGSpeculativeJIT32_64.cpp:
968         (JSC::DFG::SpeculativeJIT::compile):
969         * dfg/DFGSpeculativeJIT64.cpp:
970         (JSC::DFG::SpeculativeJIT::compile):
971         * dfg/DFGStructureCheckHoistingPhase.cpp:
972         (JSC::DFG::StructureCheckHoistingPhase::run):
973         (JSC::DFG::StructureCheckHoistingPhase::shouldConsiderForHoisting):
974         (StructureCheckHoistingPhase):
975         * dfg/DFGValidate.cpp:
976         (JSC::DFG::Validate::validate):
977
978 2013-03-05  Mark Hahnenberg  <mhahnenberg@apple.com>
979
980         Objective-C API: JSValue should implement init and return nil in exceptional cases
981         https://bugs.webkit.org/show_bug.cgi?id=111487
982
983         Reviewed by Darin Adler.
984
985         * API/JSValue.mm:
986         (-[JSValue init]): We return nil here because there is no way to get the instance into a coherent state
987         without a JSContext.
988         (-[JSValue initWithValue:inContext:]): Similarly, we should also return nil here if either of the arguments is 0.
989
990 2013-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>
991
992         Unreviewed, rolling out r144708.
993         http://trac.webkit.org/changeset/144708
994         https://bugs.webkit.org/show_bug.cgi?id=111447
995
996         random assertion crashes in inspector tests on qt+mac bots
997         (Requested by kling on #webkit).
998
999         * CMakeLists.txt:
1000         * GNUmakefile.list.am:
1001         * JavaScriptCore.gypi:
1002         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1003         * JavaScriptCore.xcodeproj/project.pbxproj:
1004         * Target.pri:
1005         * runtime/JSGlobalData.cpp:
1006         (JSC::JSGlobalData::JSGlobalData):
1007         * runtime/JSGlobalData.h:
1008         (JSGlobalData):
1009         * runtime/PropertyMapHashTable.h:
1010         (PropertyTable):
1011         (JSC::PropertyTable::PropertyTable):
1012         (JSC):
1013         (JSC::PropertyTable::~PropertyTable):
1014         (JSC::PropertyTable::copy):
1015         * runtime/PropertyTable.cpp: Removed.
1016         * runtime/Structure.cpp:
1017         (JSC::Structure::dumpStatistics):
1018         (JSC::Structure::materializePropertyMap):
1019         (JSC::Structure::despecifyDictionaryFunction):
1020         (JSC::Structure::addPropertyTransition):
1021         (JSC::Structure::changePrototypeTransition):
1022         (JSC::Structure::despecifyFunctionTransition):
1023         (JSC::Structure::attributeChangeTransition):
1024         (JSC::Structure::toDictionaryTransition):
1025         (JSC::Structure::sealTransition):
1026         (JSC::Structure::freezeTransition):
1027         (JSC::Structure::preventExtensionsTransition):
1028         (JSC::Structure::nonPropertyTransition):
1029         (JSC::Structure::isSealed):
1030         (JSC::Structure::isFrozen):
1031         (JSC::Structure::flattenDictionaryStructure):
1032         (JSC::Structure::pin):
1033         (JSC::Structure::copyPropertyTable):
1034         (JSC::Structure::copyPropertyTableForPinning):
1035         (JSC::Structure::get):
1036         (JSC::Structure::despecifyFunction):
1037         (JSC::Structure::despecifyAllFunctions):
1038         (JSC::Structure::putSpecificValue):
1039         (JSC::Structure::remove):
1040         (JSC::Structure::createPropertyMap):
1041         (JSC::Structure::getPropertyNamesFromStructure):
1042         (JSC::Structure::visitChildren):
1043         (JSC::Structure::checkConsistency):
1044         * runtime/Structure.h:
1045         (JSC):
1046         (JSC::Structure::putWillGrowOutOfLineStorage):
1047         (JSC::Structure::materializePropertyMapIfNecessary):
1048         (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
1049         (JSC::Structure::checkOffsetConsistency):
1050         (Structure):
1051         * runtime/StructureInlines.h:
1052         (JSC::Structure::get):
1053         * runtime/WriteBarrier.h:
1054         (JSC::WriteBarrierBase::get):
1055
1056 2013-03-05  David Kilzer  <ddkilzer@apple.com>
1057
1058         BUILD FIX (r144698): Only enable SPEECH_SYNTHESIS for Mac
1059         <http://webkit.org/b/106742>
1060
1061         Fixes the following build failures:
1062
1063             Undefined symbols for architecture i386:
1064               "__ZTVN7WebCore25PlatformSpeechSynthesizerE", referenced from:
1065                   __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
1066               NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
1067               "__ZN7WebCore25PlatformSpeechSynthesizer19initializeVoiceListEv", referenced from:
1068                   __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
1069             ld: symbol(s) not found for architecture i386
1070
1071         * Configurations/FeatureDefines.xcconfig:
1072         - Fix definition of ENABLE_ENCRYPTED_MEDIA_V2_macosx to match
1073           other FeatureDefines.xcconfig files.
1074         - Only set ENABLE_SPEECH_SYNTHESIS for the macosx platform.
1075
1076 2013-03-04  Andreas Kling  <akling@apple.com>
1077
1078         Unused Structure property tables waste 14MB on Membuster.
1079         <http://webkit.org/b/110854>
1080         <rdar://problem/13292104>
1081
1082         Reviewed by Geoffrey Garen.
1083
1084         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
1085         14 MB progression on Membuster3.
1086
1087         * CMakeLists.txt:
1088         * GNUmakefile.list.am:
1089         * JavaScriptCore.gypi:
1090         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1091         * JavaScriptCore.xcodeproj/project.pbxproj:
1092         * Target.pri:
1093
1094             Added PropertyTable.cpp.
1095
1096         * runtime/PropertyTable.cpp: Added.
1097         (JSC::PropertyTable::create):
1098         (JSC::PropertyTable::clone):
1099         (JSC::PropertyTable::PropertyTable):
1100         (JSC::PropertyTable::destroy):
1101         (JSC::PropertyTable::~PropertyTable):
1102         (JSC::PropertyTable::visitChildren):
1103
1104             Moved marking of property table values here from Structure::visitChildren().
1105
1106         * runtime/WriteBarrier.h:
1107         (JSC::WriteBarrierBase::get):
1108
1109             Move m_cell to a local before using it multiple times. This avoids a multiple-access race when
1110             Structure::checkOffsetConsistency() is used in assertions on the main thread while a marking thread
1111             zaps the property table.
1112
1113         * runtime/Structure.h:
1114         (JSC::Structure::materializePropertyMapIfNecessary):
1115         (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
1116         * runtime/StructureInlines.h:
1117         (JSC::Structure::propertyTable):
1118
1119             Added a getter for the Structure's PropertyTable that ASSERTs GC currently isn't active.
1120             Because GC can zap an unpinned property table at any time, it's not entirely safe to access it.
1121             Renamed the variable itself to m_propertyTableUnsafe to force call sites into explaining themselves.
1122
1123         (JSC::Structure::putWillGrowOutOfLineStorage):
1124         (JSC::Structure::checkOffsetConsistency):
1125
1126             Moved these out of Structure.h to break header dependency cycle between Structure/PropertyTable.
1127
1128         * runtime/Structure.cpp:
1129         (JSC::Structure::visitChildren):
1130
1131             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
1132
1133         * runtime/JSGlobalData.h:
1134         * runtime/JSGlobalData.cpp:
1135         (JSC::JSGlobalData::JSGlobalData):
1136
1137             Add a global propertyTableStructure.
1138
1139         * runtime/PropertyMapHashTable.h:
1140         (PropertyTable):
1141         (JSC::PropertyTable::createStructure):
1142         (JSC::PropertyTable::copy):
1143
1144             Make PropertyTable a GC object.
1145
1146         * runtime/Structure.cpp:
1147         (JSC::Structure::dumpStatistics):
1148         (JSC::Structure::materializePropertyMap):
1149         (JSC::Structure::despecifyDictionaryFunction):
1150         (JSC::Structure::addPropertyTransition):
1151         (JSC::Structure::changePrototypeTransition):
1152         (JSC::Structure::despecifyFunctionTransition):
1153         (JSC::Structure::attributeChangeTransition):
1154         (JSC::Structure::toDictionaryTransition):
1155         (JSC::Structure::sealTransition):
1156         (JSC::Structure::freezeTransition):
1157         (JSC::Structure::preventExtensionsTransition):
1158         (JSC::Structure::nonPropertyTransition):
1159         (JSC::Structure::isSealed):
1160         (JSC::Structure::isFrozen):
1161         (JSC::Structure::flattenDictionaryStructure):
1162         (JSC::Structure::pin):
1163         (JSC::Structure::copyPropertyTable):
1164         (JSC::Structure::copyPropertyTableForPinning):
1165         (JSC::Structure::get):
1166         (JSC::Structure::despecifyFunction):
1167         (JSC::Structure::despecifyAllFunctions):
1168         (JSC::Structure::putSpecificValue):
1169         (JSC::Structure::remove):
1170         (JSC::Structure::createPropertyMap):
1171         (JSC::Structure::getPropertyNamesFromStructure):
1172         (JSC::Structure::checkConsistency):
1173
1174 2013-03-04  Chris Fleizach  <cfleizach@apple.com>
1175
1176         Support WebSpeech - Speech Synthesis
1177         https://bugs.webkit.org/show_bug.cgi?id=106742
1178
1179         Reviewed by Simon Fraser.
1180
1181         Enable speech synthesis for the Mac.
1182
1183         * Configurations/FeatureDefines.xcconfig:
1184
1185 2013-03-04  Mark Hahnenberg  <mhahnenberg@apple.com>
1186
1187         Remove contextInternalContext from JSContextInternal.h
1188         https://bugs.webkit.org/show_bug.cgi?id=111356
1189
1190         Reviewed by Geoffrey Garen.
1191
1192         We don't need it any more since we have globalContextRef in JSContext.
1193
1194         * API/JSContext.mm:
1195         * API/JSContextInternal.h:
1196         * API/JSValue.mm:
1197         (+[JSValue valueWithBool:inContext:]):
1198         (+[JSValue valueWithDouble:inContext:]):
1199         (+[JSValue valueWithInt32:inContext:]):
1200         (+[JSValue valueWithUInt32:inContext:]):
1201         (+[JSValue valueWithNewObjectInContext:]):
1202         (+[JSValue valueWithNewArrayInContext:]):
1203         (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]):
1204         (+[JSValue valueWithNewErrorFromMessage:inContext:]):
1205         (+[JSValue valueWithNullInContext:]):
1206         (+[JSValue valueWithUndefinedInContext:]):
1207         (-[JSValue toBool]):
1208         (-[JSValue toDouble]):
1209         (-[JSValue toNumber]):
1210         (-[JSValue toString]):
1211         (-[JSValue toDate]):
1212         (-[JSValue toArray]):
1213         (-[JSValue toDictionary]):
1214         (-[JSValue valueForProperty:]):
1215         (-[JSValue setValue:forProperty:]):
1216         (-[JSValue deleteProperty:]):
1217         (-[JSValue hasProperty:]):
1218         (-[JSValue valueAtIndex:]):
1219         (-[JSValue setValue:atIndex:]):
1220         (-[JSValue isUndefined]):
1221         (-[JSValue isNull]):
1222         (-[JSValue isBoolean]):
1223         (-[JSValue isNumber]):
1224         (-[JSValue isString]):
1225         (-[JSValue isObject]):
1226         (-[JSValue isEqualToObject:]):
1227         (-[JSValue isEqualWithTypeCoercionToObject:]):
1228         (-[JSValue isInstanceOf:]):
1229         (-[JSValue callWithArguments:]):
1230         (-[JSValue constructWithArguments:]):
1231         (-[JSValue invokeMethod:withArguments:]):
1232         (valueToObject):
1233         (objectToValueWithoutCopy):
1234         (objectToValue):
1235         (-[JSValue initWithValue:inContext:]):
1236         (-[JSValue dealloc]):
1237         (-[JSValue description]):
1238         * API/JSWrapperMap.mm:
1239         (createObjectWithCustomBrand):
1240         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]):
1241         (-[JSObjCClassInfo wrapperForObject:]):
1242         (-[JSWrapperMap jsWrapperForObject:]):
1243         * API/ObjCCallbackFunction.mm:
1244         (ObjCCallbackFunction::call):
1245         (objCCallbackFunctionForInvocation):
1246
1247 2013-03-04  Andreas Kling  <akling@apple.com>
1248
1249         Add simple vector traits for JSC::Identifier.
1250         <http://webkit.org/b/111323>
1251
1252         Reviewed by Geoffrey Garen.
1253
1254         Identifiers are really just Strings, giving them simple vector traits makes
1255         Vector move them with memcpy() instead of churning the refcounts.
1256
1257         * runtime/Identifier.h:
1258         (WTF):
1259
1260 2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>
1261
1262         Add build flag for FontLoader
1263         https://bugs.webkit.org/show_bug.cgi?id=111289
1264
1265         Reviewed by Benjamin Poulain.
1266
1267         Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).
1268
1269         * Configurations/FeatureDefines.xcconfig:
1270
1271 2013-03-03  Andreas Kling  <akling@apple.com>
1272
1273         Shrink JSC::HashTable entries.
1274         <http://webkit.org/b/111275>
1275         <rdar://problem/13333511>
1276
1277         Reviewed by Anders Carlsson.
1278
1279         Move the Intrinsic value out of the function-specific part of the union,
1280         and store it next to m_attributes. Reduces the size of HashEntry by 8 bytes.
1281
1282         990 kB progression on Membuster3. (PTUS: 797 kB)
1283
1284         * runtime/Lookup.h:
1285         (JSC::HashEntry::initialize):
1286         (JSC::HashEntry::intrinsic):
1287         (HashEntry):
1288
1289 2013-03-01  David Kilzer  <ddkilzer@apple.com>
1290
1291         BUILD FIX: testapi should link to Foundation, not CoreFoundation
1292
1293         * JavaScriptCore.xcodeproj/project.pbxproj: Change testapi to
1294         link to Foundation.framework instead of CoreFoundation.framework
1295         since it uses NS types.
1296
1297 2013-03-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1298
1299         Objective-C API: Passing JS functions to Objective-C callbacks causes JSValue to leak
1300         https://bugs.webkit.org/show_bug.cgi?id=107836
1301
1302         Reviewed by Oliver Hunt.
1303
1304         We've decided to remove support for this feature from the API because there's no way to automatically manage 
1305         the memory for clients in a satisfactory manner. Clients can still pass JS functions to Objective-C methods, 
1306         but the methods must accept plain JSValues instead of Objective-C blocks.
1307
1308         We now ignore functions that are part of a protocol that inherits from JSExport that accept blocks as arguments.
1309
1310         * API/JSBlockAdaptor.h: Removed.
1311         * API/JSBlockAdaptor.mm: Removed.
1312         * API/ObjCCallbackFunction.mm:
1313         (ArgumentTypeDelegate::typeBlock): Return nil to signal that we want to ignore this function when copying it
1314         to the object from the protocol.
1315         * API/tests/testapi.mm: Added a test to make sure that we ignore methods declared as part of a JSExport-ed protocol
1316         that have block arguments.
1317         (-[TestObject bogusCallback:]):
1318         * JavaScriptCore.gypi: Updated build files.
1319         * JavaScriptCore.xcodeproj/project.pbxproj:
1320
1321 2013-03-01  Filip Pizlo  <fpizlo@apple.com>
1322
1323         DFG Branch(LogicalNot) peephole should not try to optimize and work-around the case where LogicalNot may be otherwise live
1324         https://bugs.webkit.org/show_bug.cgi?id=111209
1325
1326         Reviewed by Oliver Hunt.
1327         
1328         Even if it is then everything will work just fine. It's not necessary to check the ref count here.
1329
1330         * dfg/DFGFixupPhase.cpp:
1331         (JSC::DFG::FixupPhase::fixupNode):
1332
1333 2013-03-01  Filip Pizlo  <fpizlo@apple.com>
1334
1335         DFG CSE phase shouldn't rely on ref count of nodes, since it doesn't have to
1336         https://bugs.webkit.org/show_bug.cgi?id=111205
1337
1338         Reviewed by Oliver Hunt.
1339         
1340         I don't understand the intuition behind setLocalStoreElimination() validating that the SetLocal's ref count
1341         is 1. I believe this is a hold-over from when setLocalStoreElimination() would match one SetLocal to another,
1342         and then try to eliminate the first SetLocal. But that's not how it works now. Now, setLocalStoreElimination()
1343         is actually Flush elimination: it eliminates any Flush that anchors a SetLocal if it proves that every path
1344         from the SetLocal to the Flush is devoid of operations that may observe the local. It doesn't actually kill
1345         the SetLocal itself: if the SetLocal is live because of other things (other Flushes or GetLocals in other
1346         basic blocks), then the SetLocal will naturally still be alive because th Flush was only keeping the SetLocal
1347         alive by one count rather than being solely responsible for its liveness.
1348
1349         * dfg/DFGCSEPhase.cpp:
1350         (JSC::DFG::CSEPhase::setLocalStoreElimination):
1351         (JSC::DFG::CSEPhase::eliminate):
1352         (JSC::DFG::CSEPhase::performNodeCSE):
1353
1354 2013-03-01  Filip Pizlo  <fpizlo@apple.com>
1355
1356         Rename MovHint to MovHintEvent so I can create a NodeType called MovHint
1357
1358         Rubber stamped by Mark Hahnenberg.
1359         
1360         This is similar to the SetLocal/SetLocalEvent naming scheme, where SetLocal is the
1361         NodeType and SetLocalEvent is the VariableEventKind.
1362
1363         * dfg/DFGVariableEvent.cpp:
1364         (JSC::DFG::VariableEvent::dump):
1365         * dfg/DFGVariableEvent.h:
1366         (JSC::DFG::VariableEvent::movHint):
1367         (JSC::DFG::VariableEvent::id):
1368         (JSC::DFG::VariableEvent::operand):
1369         (VariableEvent):
1370         * dfg/DFGVariableEventStream.cpp:
1371         (JSC::DFG::VariableEventStream::reconstruct):
1372
1373 2013-03-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>
1374
1375         [JSC] Fix sign comparison warning/error after r144340.
1376         https://bugs.webkit.org/show_bug.cgi?id=111164
1377
1378         Reviewed by Mark Hahnenberg.
1379
1380         gcc (both 4.2.1 and 4.7.2) complain about comparing signed and
1381         unsigned terms (clang accepts it just fine).
1382
1383         Work around that by casting the 1 to an uintptr_t as well.
1384
1385         * dfg/DFGEdge.h:
1386         (JSC::DFG::Edge::makeWord):
1387
1388 2013-02-28  Filip Pizlo  <fpizlo@apple.com>
1389
1390         DFG CFA should not do liveness pruning
1391         https://bugs.webkit.org/show_bug.cgi?id=111119
1392
1393         Reviewed by Mark Hahnenberg.
1394         
1395         It adds complexity and probably buys nothing.  Moreover, I'm transitioning to having
1396         liveness only available at the bitter end of compilation, so this will stop working
1397         after https://bugs.webkit.org/show_bug.cgi?id=109389 anyway.
1398
1399         * dfg/DFGAbstractState.cpp:
1400         (JSC::DFG::AbstractState::initialize):
1401         (JSC::DFG::AbstractState::mergeStateAtTail):
1402
1403 2013-02-28  Filip Pizlo  <fpizlo@apple.com>
1404
1405         Don't try to emit profiling if you don't have the DFG JIT.
1406
1407         Rubber stamped by Mark Hahnenberg.
1408
1409         * jit/JIT.h:
1410         (JSC::JIT::shouldEmitProfiling):
1411
1412 2013-02-28  Filip Pizlo  <fpizlo@apple.com>
1413
1414         DFG Phantom node should be honest about the fact that it can exit
1415         https://bugs.webkit.org/show_bug.cgi?id=111115
1416
1417         Reviewed by Mark Hahnenberg.
1418         
1419         The chances of this having cause serious issues are low, since most clients of the
1420         NodeDoesNotExit flag run after CFA and CFA updates this properly. But one possible
1421         case of badness is if the ByteCodeParser inserted a Phantom with a type check in
1422         between a LogicalNot and a Branch; then that peephole optimization in Fixup might
1423         go slightly wrong.
1424
1425         * dfg/DFGNodeType.h:
1426         (DFG):
1427
1428 2013-02-28  Mark Hahnenberg  <mhahnenberg@apple.com>
1429
1430         Add casts in DFGGPRInfo.h to suppress warnings
1431         https://bugs.webkit.org/show_bug.cgi?id=111104
1432
1433         Reviewed by Filip Pizlo.
1434
1435         With certain flags on, we get compiler warnings on ARM. We should do the proper casts to make these warnings go away.
1436
1437         * dfg/DFGGPRInfo.h:
1438         (JSC::DFG::GPRInfo::toIndex):
1439         (JSC::DFG::GPRInfo::debugName):
1440
1441 2013-02-28  Filip Pizlo  <fpizlo@apple.com>
1442
1443         It should be easy to determine if a DFG node exits forward or backward when doing type checks
1444         https://bugs.webkit.org/show_bug.cgi?id=111102
1445
1446         Reviewed by Mark Hahnenberg.
1447         
1448         This adds a NodeExitsForward flag, which tells you the exit directionality of
1449         type checks performed by the node. Even if you convert the node to a Phantom
1450         and use the Edge UseKind for type checks, you'll still get the same exit
1451         directionality that the original node would have wanted.
1452
1453         * dfg/DFGArgumentsSimplificationPhase.cpp:
1454         (JSC::DFG::ArgumentsSimplificationPhase::run):
1455         * dfg/DFGArrayifySlowPathGenerator.h:
1456         (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
1457         * dfg/DFGCFGSimplificationPhase.cpp:
1458         (JSC::DFG::CFGSimplificationPhase::run):
1459         (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
1460         * dfg/DFGCPSRethreadingPhase.cpp:
1461         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
1462         * dfg/DFGCSEPhase.cpp:
1463         (JSC::DFG::CSEPhase::setReplacement):
1464         (JSC::DFG::CSEPhase::eliminate):
1465         (JSC::DFG::CSEPhase::performNodeCSE):
1466         * dfg/DFGConstantFoldingPhase.cpp:
1467         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1468         * dfg/DFGFixupPhase.cpp:
1469         (JSC::DFG::FixupPhase::checkArray):
1470         * dfg/DFGNode.h:
1471         (Node):
1472         (JSC::DFG::Node::setOpAndDefaultNonExitFlags):
1473         (JSC::DFG::Node::convertToPhantom):
1474         * dfg/DFGNodeFlags.cpp:
1475         (JSC::DFG::nodeFlagsAsString):
1476         * dfg/DFGNodeFlags.h:
1477         (DFG):
1478         * dfg/DFGNodeType.h:
1479         (DFG):
1480         * dfg/DFGSpeculativeJIT.cpp:
1481         (JSC::DFG::SpeculativeJIT::backwardSpeculationCheck):
1482         (DFG):
1483         (JSC::DFG::SpeculativeJIT::speculationCheck):
1484         (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
1485         (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
1486         (JSC::DFG::SpeculativeJIT::backwardTypeCheck):
1487         (JSC::DFG::SpeculativeJIT::typeCheck):
1488         (JSC::DFG::SpeculativeJIT::forwardTypeCheck):
1489         (JSC::DFG::SpeculativeJIT::fillStorage):
1490         (JSC::DFG::SpeculativeJIT::compile):
1491         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
1492         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1493         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
1494         * dfg/DFGSpeculativeJIT.h:
1495         (SpeculativeJIT):
1496         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
1497         (JSC::DFG::SpeculateIntegerOperand::gpr):
1498         (SpeculateIntegerOperand):
1499         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
1500         (JSC::DFG::SpeculateDoubleOperand::fpr):
1501         (SpeculateDoubleOperand):
1502         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
1503         (JSC::DFG::SpeculateCellOperand::gpr):
1504         (SpeculateCellOperand):
1505         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
1506         (JSC::DFG::SpeculateBooleanOperand::gpr):
1507         (SpeculateBooleanOperand):
1508         * dfg/DFGSpeculativeJIT32_64.cpp:
1509         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1510         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
1511         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
1512         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1513         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1514         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
1515         (JSC::DFG::SpeculativeJIT::compile):
1516         * dfg/DFGSpeculativeJIT64.cpp:
1517         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1518         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
1519         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
1520         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1521         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1522         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
1523         (JSC::DFG::SpeculativeJIT::compile):
1524
1525 2013-02-28  Filip Pizlo  <fpizlo@apple.com>
1526
1527         CodeBlock::valueProfile() has a bogus assertion
1528         https://bugs.webkit.org/show_bug.cgi?id=111106
1529         <rdar://problem/13131427>
1530
1531         Reviewed by Mark Hahnenberg.
1532         
1533         This was just a bad assertion: m_bytecodeOffset == -1 means that the value profile is constructed but not initialized.
1534         ValueProfile constructs itself in a safe way; you can call any method you want on a constructed but not initialized
1535         ValueProfile. CodeBlock first constructs all ValueProfiles (by growing the ValueProfile vector) and then initializes
1536         their m_bytecodeOffset later. This is necessary because the initialization is linking bytecode instructions to their
1537         ValueProfiles, so at that point we don't want the ValueProfile vector to resize, which implies that we want all of
1538         them to already be constructed. A GC can happen during this phase, and the GC may want to walk all ValueProfiles.
1539         This is safe, but one of the ValueProfile getters (CodeBlock::valueProfile()) was asserting that any value profile
1540         you get has had its m_bytecodeOffset initialized. This need not be the case and nothing will go wrong if it isn't.
1541
1542         The solution is to remove the assertion, which I believe was put there to ensure that my m_valueProfiles refactoring
1543         a long time ago was sound: it used to be that a ValueProfile with m_bytecodeOffset == -1 was an argument profile; now
1544         all argument profiles are in m_argumentValueProfiles instead. I think it's safe to say that this refactoring was done
1545         soundly since it was a long time ago. So we should kill the assertion - I don't see an easy way to make the assertion
1546         sound with respect to the GC-during-CodeBlock-construction issue, and I don't believe that the assertion is buying us
1547         anything at this point.
1548
1549         * bytecode/CodeBlock.h:
1550         (JSC::CodeBlock::valueProfile):
1551
1552 2013-02-27  Filip Pizlo  <fpizlo@apple.com>
1553
1554         DFG CFA should leave behind information in Edge that says if the Edge's type check is proven to succeed
1555         https://bugs.webkit.org/show_bug.cgi?id=110840
1556
1557         Reviewed by Mark Hahnenberg.
1558         
1559         This doesn't add any observable functionality to the compiler, yet. But it does give
1560         every phase that runs after CFA the ability to know, in O(1) time, whether an edge
1561         will need to execute a type check.
1562
1563         * dfg/DFGAbstractState.h:
1564         (JSC::DFG::AbstractState::filterEdgeByUse):
1565         (JSC::DFG::AbstractState::filterByType):
1566         * dfg/DFGCommon.cpp:
1567         (WTF):
1568         (WTF::printInternal):
1569         * dfg/DFGCommon.h:
1570         (JSC::DFG::isProved):
1571         (DFG):
1572         (JSC::DFG::proofStatusForIsProved):
1573         (WTF):
1574         * dfg/DFGEdge.cpp:
1575         (JSC::DFG::Edge::dump):
1576         * dfg/DFGEdge.h:
1577         (JSC::DFG::Edge::Edge):
1578         (JSC::DFG::Edge::setNode):
1579         (JSC::DFG::Edge::useKindUnchecked):
1580         (JSC::DFG::Edge::setUseKind):
1581         (Edge):
1582         (JSC::DFG::Edge::proofStatusUnchecked):
1583         (JSC::DFG::Edge::proofStatus):
1584         (JSC::DFG::Edge::setProofStatus):
1585         (JSC::DFG::Edge::isProved):
1586         (JSC::DFG::Edge::needsCheck):
1587         (JSC::DFG::Edge::shift):
1588         (JSC::DFG::Edge::makeWord):
1589
1590 2013-02-28  Simon Hausmann  <simon.hausmann@digia.com>
1591
1592         [Qt][Mac] Fix massive parallel builds
1593
1594         Reviewed by Tor Arne Vestbø.
1595
1596         There exists a race condition that LLIntDesiredOffsets.h is written to
1597         by two parllel instances of the ruby script. This patch ensures that similar to the output file,
1598         the generated file is also prefixed according to the build configuration.
1599
1600         * LLIntOffsetsExtractor.pro:
1601
1602 2013-02-27  Sheriff Bot  <webkit.review.bot@gmail.com>
1603
1604         Unreviewed, rolling out r144168.
1605         http://trac.webkit.org/changeset/144168
1606         https://bugs.webkit.org/show_bug.cgi?id=111019
1607
1608         It broke the build and tronical is unavailable (Requested by
1609         Ossy_night on #webkit).
1610
1611         * LLIntOffsetsExtractor.pro:
1612
1613 2013-02-26  Filip Pizlo  <fpizlo@apple.com>
1614
1615         Disable some unsound DFG DCE
1616         https://bugs.webkit.org/show_bug.cgi?id=110948
1617
1618         Reviewed by Michael Saboff.
1619         
1620         DCE of bitops is not sound since the bitops might call some variant of valueOf.
1621         
1622         This used to work right because ValueToInt32 was MustGenerate. From the DFG IR
1623         standpoint it feels weird to make ValueToInt32 be MustGenerate since that node is
1624         implemented entirely as a pure conversion. If we ever gave the DFG the ability to
1625         do effectful bitops, we would most likely implement them as special nodes not
1626         related to the ValueToInt32 and bitop nodes we have now.
1627         
1628         This change is performance neutral.
1629
1630         * dfg/DFGNodeType.h:
1631         (DFG):
1632
1633 2013-02-27  Glenn Adams  <glenn@skynav.com>
1634
1635         Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
1636         https://bugs.webkit.org/show_bug.cgi?id=110944
1637
1638         Reviewed by Dean Jackson.
1639
1640         * Configurations/FeatureDefines.xcconfig:
1641
1642 2013-02-27  Julien Brianceau   <jbrianceau@nds.com>
1643
1644         Fix build when DFG_JIT is not enabled
1645         https://bugs.webkit.org/show_bug.cgi?id=110991
1646
1647         Reviewed by Csaba Osztrogonác.
1648
1649         * jit/JIT.h:
1650         (JSC::JIT::canBeOptimizedOrInlined):
1651
1652 2013-02-27  Simon Hausmann  <simon.hausmann@digia.com>
1653
1654         [Qt][Mac] Fix massive parallel builds
1655
1656         Reviewed by Tor Arne Vestbø.
1657
1658         There exists a race condition that LLIntDesiredOffsets.h is written to
1659         by two parllel instances of the ruby script. This patch ensures that similar to the output file,
1660         the generated file is also prefixed according to the build configuration.
1661
1662         * LLIntOffsetsExtractor.pro:
1663
1664 2013-02-26  Filip Pizlo  <fpizlo@apple.com>
1665
1666         DFG OSR exit doesn't know which virtual register to use for the last result register for post_inc and post_dec
1667         https://bugs.webkit.org/show_bug.cgi?id=109036
1668         <rdar://problem/13292139>
1669
1670         Reviewed by Gavin Barraclough.
1671         
1672         This was a two-fold problem:
1673         
1674         1) post_inc/dec has two results - the new value of the variable, and the old value of the variable. DFG OSR exit
1675            assumed that the "last result" used for the Baseline JIT's register allocation would be the new value. It was
1676            wrong in this assumption.
1677         
1678         2) The Baseline JIT knew to disable its last result optimization in cases where it might confuse the DFG. But it
1679            was doing this only for code blocks that could be totally optimized, but not code blocks that could only be
1680            optimized when inlined.
1681         
1682         This patch introduces a more rigorous notion of when the Baseline JIT emits profiling, when it does extra work
1683         to account for the possibility of OSR exit, and when it does extra work to account for the possibility of OSR
1684         entry. These notions are called shouldEmitProfiling(), canBeOptimizedOrInlined(), and canBeOptimized(),
1685         respectively.
1686         
1687         This is performance-neutral and fixes the reported bug. It probably fixes other bugs as well, since previously
1688         we for example weren't doing the more conservative implementation of op_mov in the Baseline JIT for code blocks
1689         that could be inlined but not optimized. So, if such a code block OSR exited at just the right point, you'd get
1690         symptoms similar to this bug.
1691
1692         * dfg/DFGCapabilities.h:
1693         (JSC::DFG::canCompileOpcode):
1694         * dfg/DFGCommon.h:
1695         * jit/JIT.cpp:
1696         (JSC::JIT::privateCompile):
1697         * jit/JIT.h:
1698         (JSC::JIT::compilePatchGetArrayLength):
1699         (JSC::JIT::canBeOptimizedOrInlined):
1700         (JIT):
1701         * jit/JITArithmetic.cpp:
1702         (JSC::JIT::emit_op_post_inc):
1703         (JSC::JIT::emit_op_post_dec):
1704         * jit/JITArithmetic32_64.cpp:
1705         (JSC::JIT::emit_op_post_inc):
1706         (JSC::JIT::emit_op_post_dec):
1707         * jit/JITCall.cpp:
1708         (JSC::JIT::emit_op_call_put_result):
1709         (JSC::JIT::compileOpCall):
1710         * jit/JITCall32_64.cpp:
1711         (JSC::JIT::compileOpCall):
1712         * jit/JITInlines.h:
1713         (JSC::JIT::emitArrayProfilingSite):
1714         (JSC::JIT::map):
1715         * jit/JITOpcodes.cpp:
1716         (JSC::JIT::emit_op_mov):
1717         * jit/JITPropertyAccess.cpp:
1718         (JSC::JIT::compileGetByIdHotPath):
1719         (JSC::JIT::privateCompilePutByIdTransition):
1720         * jit/JITPropertyAccess32_64.cpp:
1721         (JSC::JIT::compileGetByIdHotPath):
1722         (JSC::JIT::privateCompilePutByIdTransition):
1723
1724 2013-02-26  Roger Fong  <roger_fong@apple.com>
1725
1726         Unreviewed. AppleWin VS2010 build fix.
1727
1728         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
1729
1730 2013-02-25  Filip Pizlo  <fpizlo@apple.com>
1731
1732         The DFG backend's and OSR's decision to unbox a variable should be based on whether it's used in a typed context
1733         https://bugs.webkit.org/show_bug.cgi?id=110433
1734
1735         Reviewed by Oliver Hunt and Mark Hahnenberg.
1736         
1737         This introduces the equivalent of a liveness analysis, except for type checking.
1738         A variable is said to be "profitable for unboxing" (i.e. live at a type check)
1739         if there exists a type check on a GetLocal of that variable, and the type check
1740         is consistent with the variable's prediction. Variables that are not profitable
1741         for unboxing aren't unboxed. Previously they would have been.
1742         
1743         This is a slight speed-up on some things but mostly neutral.
1744
1745         * dfg/DFGArgumentPosition.h:
1746         (JSC::DFG::ArgumentPosition::ArgumentPosition):
1747         (JSC::DFG::ArgumentPosition::mergeShouldNeverUnbox):
1748         (JSC::DFG::ArgumentPosition::mergeArgumentPredictionAwareness):
1749         (JSC::DFG::ArgumentPosition::mergeArgumentUnboxingAwareness):
1750         (ArgumentPosition):
1751         (JSC::DFG::ArgumentPosition::isProfitableToUnbox):
1752         (JSC::DFG::ArgumentPosition::shouldUseDoubleFormat):
1753         * dfg/DFGCommon.h:
1754         (JSC::DFG::checkAndSet):
1755         (DFG):
1756         * dfg/DFGFixupPhase.cpp:
1757         (JSC::DFG::FixupPhase::run):
1758         (JSC::DFG::FixupPhase::fixupNode):
1759         (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
1760         (FixupPhase):
1761         (JSC::DFG::FixupPhase::alwaysUnboxSimplePrimitives):
1762         (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
1763         * dfg/DFGPredictionPropagationPhase.cpp:
1764         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
1765         * dfg/DFGSpeculativeJIT.cpp:
1766         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
1767         * dfg/DFGVariableAccessData.h:
1768         (JSC::DFG::VariableAccessData::VariableAccessData):
1769         (JSC::DFG::VariableAccessData::mergeIsCaptured):
1770         (JSC::DFG::VariableAccessData::mergeIsProfitableToUnbox):
1771         (VariableAccessData):
1772         (JSC::DFG::VariableAccessData::isProfitableToUnbox):
1773         (JSC::DFG::VariableAccessData::shouldUnboxIfPossible):
1774         (JSC::DFG::VariableAccessData::mergeStructureCheckHoistingFailed):
1775         (JSC::DFG::VariableAccessData::mergeIsArgumentsAlias):
1776         (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
1777         (JSC::DFG::VariableAccessData::mergeFlags):
1778
1779 2013-02-26  Oliver Hunt  <oliver@apple.com>
1780
1781         Fix windows build.
1782
1783         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
1784
1785 2013-02-26  Oliver Hunt  <oliver@apple.com>
1786
1787         Web Inspector: REGRESSION: [JSC] SourceProvider reuses IDs
1788         https://bugs.webkit.org/show_bug.cgi?id=99674
1789
1790         Reviewed by Gavin Barraclough.
1791
1792         Simple incrementing counter for SourceProvider IDs.  Uses a
1793         lock to incrementing the counter so we don't increment reuse
1794         counter values or reassign the ID for a given SourceProvider.
1795
1796         * parser/SourceProvider.cpp:
1797         (JSC::SourceProvider::SourceProvider):
1798         (JSC):
1799         (JSC::SourceProvider::getID):
1800         * parser/SourceProvider.h:
1801         (JSC::SourceProvider::asID):
1802         (SourceProvider):
1803
1804 2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>
1805
1806         Unreviewed, rolling out r144074.
1807         http://trac.webkit.org/changeset/144074
1808         https://bugs.webkit.org/show_bug.cgi?id=110897
1809
1810         Causing 20+ crashes on Mac (Requested by bradee-oh on
1811         #webkit).
1812
1813         * CMakeLists.txt:
1814         * GNUmakefile.list.am:
1815         * JavaScriptCore.gypi:
1816         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1817         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1818         * JavaScriptCore.xcodeproj/project.pbxproj:
1819         * Target.pri:
1820         * runtime/JSGlobalData.cpp:
1821         (JSC::JSGlobalData::JSGlobalData):
1822         * runtime/JSGlobalData.h:
1823         (JSGlobalData):
1824         * runtime/PropertyMapHashTable.h:
1825         (PropertyTable):
1826         (JSC::PropertyTable::PropertyTable):
1827         (JSC):
1828         (JSC::PropertyTable::~PropertyTable):
1829         (JSC::PropertyTable::copy):
1830         * runtime/PropertyTable.cpp: Removed.
1831         * runtime/Structure.cpp:
1832         (JSC::Structure::materializePropertyMap):
1833         (JSC::Structure::addPropertyTransition):
1834         (JSC::Structure::changePrototypeTransition):
1835         (JSC::Structure::despecifyFunctionTransition):
1836         (JSC::Structure::attributeChangeTransition):
1837         (JSC::Structure::toDictionaryTransition):
1838         (JSC::Structure::preventExtensionsTransition):
1839         (JSC::Structure::nonPropertyTransition):
1840         (JSC::Structure::copyPropertyTable):
1841         (JSC::Structure::copyPropertyTableForPinning):
1842         (JSC::Structure::putSpecificValue):
1843         (JSC::Structure::createPropertyMap):
1844         (JSC::Structure::visitChildren):
1845         * runtime/Structure.h:
1846         (JSC):
1847         (JSC::Structure::putWillGrowOutOfLineStorage):
1848         (JSC::Structure::checkOffsetConsistency):
1849         (Structure):
1850         * runtime/StructureInlines.h:
1851
1852 2013-02-26  Roger Fong  <roger_fong@apple.com>
1853
1854         Unreviewed. AppleWin VS2010 build fix.
1855
1856         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
1857
1858 2013-02-26  Jer Noble  <jer.noble@apple.com>
1859
1860         Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.
1861
1862         * Configurations/FeatureDefines.xcconfig:
1863
1864 2013-02-26  Michael Saboff  <msaboff@apple.com>
1865
1866         Potential crash in YARR JIT generated code when building 64 bit
1867         https://bugs.webkit.org/show_bug.cgi?id=110893
1868
1869         Reviewed by Gavin Barraclough.
1870
1871         The ABI doesn't define the behavior for the upper bits of a value that takes less than 64 bits.
1872         Therefore, we zero extend both the count and length registers to assure that these unsigned values
1873         don't have garbage upper bits.
1874
1875         * yarr/YarrJIT.cpp:
1876         (JSC::Yarr::YarrGenerator::generateEnter):
1877
1878 2013-02-26  Andreas Kling  <akling@apple.com>
1879
1880         Unused Structure property tables waste 14MB on Membuster.
1881         <http://webkit.org/b/110854>
1882         <rdar://problem/13292104>
1883
1884         Reviewed by Filip Pizlo.
1885
1886         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
1887         14 MB progression on Membuster3.
1888
1889         * CMakeLists.txt:
1890         * GNUmakefile.list.am:
1891         * JavaScriptCore.gypi:
1892         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1893         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1894         * JavaScriptCore.xcodeproj/project.pbxproj:
1895         * Target.pri:
1896
1897             Added PropertyTable.cpp.
1898
1899         * runtime/PropertyTable.cpp: Added.
1900         (JSC::PropertyTable::create):
1901         (JSC::PropertyTable::clone):
1902         (JSC::PropertyTable::PropertyTable):
1903         (JSC::PropertyTable::destroy):
1904         (JSC::PropertyTable::~PropertyTable):
1905         (JSC::PropertyTable::visitChildren):
1906
1907             Moved marking of property table values here from Structure::visitChildren().
1908
1909         * runtime/StructureInlines.h:
1910         (JSC::Structure::putWillGrowOutOfLineStorage):
1911         (JSC::Structure::checkOffsetConsistency):
1912
1913             Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
1914
1915         * runtime/Structure.cpp:
1916         (JSC::Structure::visitChildren):
1917
1918             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
1919
1920         (JSC::Structure::materializePropertyMap):
1921         (JSC::Structure::addPropertyTransition):
1922         (JSC::Structure::changePrototypeTransition):
1923         (JSC::Structure::despecifyFunctionTransition):
1924         (JSC::Structure::attributeChangeTransition):
1925         (JSC::Structure::toDictionaryTransition):
1926         (JSC::Structure::preventExtensionsTransition):
1927         (JSC::Structure::nonPropertyTransition):
1928         (JSC::Structure::copyPropertyTable):
1929         (JSC::Structure::copyPropertyTableForPinning):
1930         (JSC::Structure::putSpecificValue):
1931         (JSC::Structure::createPropertyMap):
1932         * runtime/Structure.h:
1933         (Structure):
1934         * runtime/JSGlobalData.cpp:
1935         (JSC::JSGlobalData::JSGlobalData):
1936         * runtime/JSGlobalData.h:
1937         (JSGlobalData):
1938         * runtime/PropertyMapHashTable.h:
1939         (PropertyTable):
1940         (JSC::PropertyTable::createStructure):
1941         (JSC::PropertyTable::copy):
1942
1943 2013-02-26  Andreas Kling  <akling@apple.com>
1944
1945         Unreviewed, rolling out r144054.
1946         http://trac.webkit.org/changeset/144054
1947         https://bugs.webkit.org/show_bug.cgi?id=110854
1948
1949         broke builds
1950
1951         * CMakeLists.txt:
1952         * GNUmakefile.list.am:
1953         * JavaScriptCore.gypi:
1954         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1955         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1956         * JavaScriptCore.xcodeproj/project.pbxproj:
1957         * Target.pri:
1958         * runtime/JSGlobalData.cpp:
1959         (JSC::JSGlobalData::JSGlobalData):
1960         * runtime/JSGlobalData.h:
1961         (JSGlobalData):
1962         * runtime/PropertyMapHashTable.h:
1963         (PropertyTable):
1964         (JSC::PropertyTable::PropertyTable):
1965         (JSC):
1966         (JSC::PropertyTable::~PropertyTable):
1967         (JSC::PropertyTable::copy):
1968         * runtime/PropertyTable.cpp: Removed.
1969         * runtime/Structure.cpp:
1970         (JSC::Structure::materializePropertyMap):
1971         (JSC::Structure::addPropertyTransition):
1972         (JSC::Structure::changePrototypeTransition):
1973         (JSC::Structure::despecifyFunctionTransition):
1974         (JSC::Structure::attributeChangeTransition):
1975         (JSC::Structure::toDictionaryTransition):
1976         (JSC::Structure::preventExtensionsTransition):
1977         (JSC::Structure::nonPropertyTransition):
1978         (JSC::Structure::copyPropertyTable):
1979         (JSC::Structure::copyPropertyTableForPinning):
1980         (JSC::Structure::putSpecificValue):
1981         (JSC::Structure::createPropertyMap):
1982         (JSC::Structure::visitChildren):
1983         * runtime/Structure.h:
1984         (JSC):
1985         (JSC::Structure::putWillGrowOutOfLineStorage):
1986         (JSC::Structure::checkOffsetConsistency):
1987         (Structure):
1988         * runtime/StructureInlines.h:
1989
1990 2013-02-26  Andreas Kling  <akling@apple.com>
1991
1992         Unused Structure property tables waste 14MB on Membuster.
1993         <http://webkit.org/b/110854>
1994         <rdar://problem/13292104>
1995
1996         Reviewed by Filip Pizlo.
1997
1998         Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
1999         14 MB progression on Membuster3.
2000
2001         * CMakeLists.txt:
2002         * GNUmakefile.list.am:
2003         * JavaScriptCore.gypi:
2004         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2005         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2006         * JavaScriptCore.xcodeproj/project.pbxproj:
2007         * Target.pri:
2008
2009             Added PropertyTable.cpp.
2010
2011         * runtime/PropertyTable.cpp: Added.
2012         (JSC::PropertyTable::create):
2013         (JSC::PropertyTable::clone):
2014         (JSC::PropertyTable::PropertyTable):
2015         (JSC::PropertyTable::destroy):
2016         (JSC::PropertyTable::~PropertyTable):
2017         (JSC::PropertyTable::visitChildren):
2018
2019             Moved marking of property table values here from Structure::visitChildren().
2020
2021         * runtime/StructureInlines.h:
2022         (JSC::Structure::putWillGrowOutOfLineStorage):
2023         (JSC::Structure::checkOffsetConsistency):
2024
2025             Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
2026
2027         * runtime/Structure.cpp:
2028         (JSC::Structure::visitChildren):
2029
2030             Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
2031
2032         (JSC::Structure::materializePropertyMap):
2033         (JSC::Structure::addPropertyTransition):
2034         (JSC::Structure::changePrototypeTransition):
2035         (JSC::Structure::despecifyFunctionTransition):
2036         (JSC::Structure::attributeChangeTransition):
2037         (JSC::Structure::toDictionaryTransition):
2038         (JSC::Structure::preventExtensionsTransition):
2039         (JSC::Structure::nonPropertyTransition):
2040         (JSC::Structure::copyPropertyTable):
2041         (JSC::Structure::copyPropertyTableForPinning):
2042         (JSC::Structure::putSpecificValue):
2043         (JSC::Structure::createPropertyMap):
2044         * runtime/Structure.h:
2045         (Structure):
2046         * runtime/JSGlobalData.cpp:
2047         (JSC::JSGlobalData::JSGlobalData):
2048         * runtime/JSGlobalData.h:
2049         (JSGlobalData):
2050         * runtime/PropertyMapHashTable.h:
2051         (PropertyTable):
2052         (JSC::PropertyTable::createStructure):
2053         (JSC::PropertyTable::copy):
2054
2055 2013-02-26  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>
2056
2057         Implement JIT on Windows 64 bits
2058         https://bugs.webkit.org/show_bug.cgi?id=107965
2059
2060         Reviewed by Simon Hausmann.
2061
2062         1. MSVC doesn't support inline assembly for 64 bits, implements the trampoline in a separate ASM file.
2063
2064         2. Windows 64 bits has a different calling convention than other OSes following the AMD64 ABI.
2065         Differences that we have to handle here:
2066         - Registers passed parameters are RCX, RDX, R8 and R9 instead of RDI, RSI, RDX, RCX, R8 and R9
2067         - RDI and RSI must be preserved by callee
2068         - Only return values <= 8 bytes can be returned by register (RDX can't be used to return a second word)
2069         - There is no red-zone after RIP on the stack, but instead 4 reserved words before it
2070
2071         * Target.pri:
2072         * jit/JITStubs.cpp:
2073         * jit/JITStubs.h:
2074         (JSC):
2075         (JITStackFrame):
2076         (JSC::JITStackFrame::returnAddressSlot):
2077         * jit/JITStubsMSVC64.asm: Added.
2078         * jit/JSInterfaceJIT.h:
2079         (JSInterfaceJIT):
2080         * jit/ThunkGenerators.cpp:
2081         (JSC::nativeForGenerator):
2082         * yarr/YarrJIT.cpp:
2083         (YarrGenerator):
2084         (JSC::Yarr::YarrGenerator::generateEnter):
2085         (JSC::Yarr::YarrGenerator::generateReturn):
2086
2087 2013-02-26  Oliver Hunt  <oliver@apple.com>
2088
2089         Kill another analyzer warning in javascriptcore
2090         https://bugs.webkit.org/show_bug.cgi?id=110802
2091
2092         Reviewed by Benjamin Poulain.
2093
2094         Add null checks.
2095         
2096         * profiler/LegacyProfiler.cpp:
2097         (JSC::LegacyProfiler::startProfiling):
2098         (JSC::LegacyProfiler::stopProfiling):
2099
2100 2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>
2101
2102         Unreviewed, rolling out r144004.
2103         http://trac.webkit.org/changeset/144004
2104         https://bugs.webkit.org/show_bug.cgi?id=110858
2105
2106         This iOS change is outdated (Requested by notbenjamin on
2107         #webkit).
2108
2109         * bytecompiler/BytecodeGenerator.cpp:
2110         (JSC::BytecodeGenerator::BytecodeGenerator):
2111         * bytecompiler/BytecodeGenerator.h:
2112         (JSC::BytecodeGenerator::emitNode):
2113         (JSC::BytecodeGenerator::emitNodeInConditionContext):
2114         (BytecodeGenerator):
2115         * parser/Parser.cpp:
2116         (JSC::::Parser):
2117         * parser/Parser.h:
2118         (JSC::Parser::canRecurse):
2119         (Parser):
2120
2121 2013-02-25  Filip Pizlo  <fpizlo@apple.com>
2122
2123         REGRESSION(r143654): some jquery test asserts on 32 bit debug build
2124         https://bugs.webkit.org/show_bug.cgi?id=110756
2125
2126         Reviewed by Geoffrey Garen.
2127         
2128         TypeOf does speculations manually, so it should mark its JSValueOperand as doing ManualOperandSpeculation.
2129
2130         * dfg/DFGSpeculativeJIT32_64.cpp:
2131         (JSC::DFG::SpeculativeJIT::compile):
2132
2133 2013-02-25  Benjamin Poulain  <bpoulain@apple.com>
2134
2135         [JSC] Upstream iOS Stack bound checking
2136         https://bugs.webkit.org/show_bug.cgi?id=110813
2137
2138         Reviewed by Filip Pizlo.
2139
2140         On iOS, the StackBounds cannot be cached because the stack
2141         can be in one of two threads (the web thread or the UI thread).
2142
2143         We simply always consider the current stack bound when testing
2144         stack boundaries.
2145
2146         * bytecompiler/BytecodeGenerator.cpp:
2147         (JSC::BytecodeGenerator::BytecodeGenerator):
2148         * bytecompiler/BytecodeGenerator.h:
2149         (JSC::BytecodeGenerator::emitNode):
2150         (JSC::BytecodeGenerator::emitNodeInConditionContext):
2151         (BytecodeGenerator):
2152         * parser/Parser.cpp:
2153         (JSC::::Parser):
2154         * parser/Parser.h:
2155         (JSC::Parser::canRecurse):
2156         (Parser):
2157
2158 2013-02-25  Michael Saboff  <msaboff@apple.com>
2159
2160         For JSVALUE32_64, maxOffsetRelativeToPatchedStorage() doesn't compute the maximum negative offset
2161         https://bugs.webkit.org/show_bug.cgi?id=110828
2162
2163         Reviewed by Oliver Hunt.
2164
2165         * runtime/JSObject.h:
2166         (JSC::maxOffsetRelativeToPatchedStorage): Only add the OBJECT_OFFSETOF(tag) for positive offsets.
2167         That way this function will return the offset farthest from 0 needed to access either the payload
2168         or tag.
2169
2170 2013-02-25  Jeffrey Pfau  <jpfau@apple.com>
2171
2172         Optionally partition cache to prevent using cache for tracking
2173         https://bugs.webkit.org/show_bug.cgi?id=110269
2174
2175         Reviewed by Maciej Stachowiak.
2176
2177         * Configurations/FeatureDefines.xcconfig: Add defines for cache partitioning and public suffix list usage
2178
2179 2013-02-25  Roger Fong  <roger_fong@apple.com>
2180
2181         Unreviewed. VS2010 solution build fix.
2182
2183         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
2184
2185 2013-02-24  Filip Pizlo  <fpizlo@apple.com>
2186
2187         DFG::Edge should have more bits for UseKind, and DFG::Allocator should be simpler
2188         https://bugs.webkit.org/show_bug.cgi?id=110722
2189
2190         Reviewed by Oliver Hunt.
2191         
2192         This rolls out the DFG::Allocator part of http://trac.webkit.org/changeset/143654,
2193         and changes Edge to have more room for UseKinds and possibly other things.
2194         
2195         This is performance-neutral on both 32-bit and 64-bit. It reduces the size of
2196         DFG::Node on 64-bit (by virtue of getting rid of the 16-byte alignment of Node)
2197         and increases it slightly on 32-bit (by 4 bytes total - 16-byte alignment led to
2198         80 bytes, but the base size of Node plus the 12 bytes of new m_encodedWords in
2199         Edge gets 84 bytes). But, it will mean that we don't have to increase Node by
2200         another 16 bytes if we ever want to add more UseKinds or other things to Edge.
2201
2202         * dfg/DFGAllocator.h:
2203         (DFG):
2204         (Allocator):
2205         (JSC::DFG::Allocator::Region::headerSize):
2206         (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
2207         (JSC::DFG::Allocator::Region::data):
2208         (JSC::DFG::Allocator::Region::isInThisRegion):
2209         (JSC::DFG::::Allocator):
2210         (JSC::DFG::::~Allocator):
2211         (JSC::DFG::::allocate):
2212         (JSC::DFG::::free):
2213         (JSC::DFG::::freeAll):
2214         (JSC::DFG::::reset):
2215         (JSC::DFG::::indexOf):
2216         (JSC::DFG::::allocatorOf):
2217         (JSC::DFG::::bumpAllocate):
2218         (JSC::DFG::::freeListAllocate):
2219         (JSC::DFG::::allocateSlow):
2220         (JSC::DFG::::freeRegionsStartingAt):
2221         (JSC::DFG::::startBumpingIn):
2222         * dfg/DFGEdge.h:
2223         (JSC::DFG::Edge::Edge):
2224         (Edge):
2225         (JSC::DFG::Edge::node):
2226         (JSC::DFG::Edge::setNode):
2227         (JSC::DFG::Edge::useKindUnchecked):
2228         (JSC::DFG::Edge::setUseKind):
2229         (JSC::DFG::Edge::operator==):
2230         (JSC::DFG::Edge::operator!=):
2231         (JSC::DFG::Edge::makeWord):
2232         * dfg/DFGNodeAllocator.h:
2233         (DFG):
2234
2235 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
2236
2237         The DFG special case checks for isCreatedThisArgument are fragile
2238         https://bugs.webkit.org/show_bug.cgi?id=110535
2239
2240         Reviewed by Oliver Hunt.
2241         
2242         There may be many situations in which we want to force a variable to never be
2243         unboxed. Capturing is one such case, and the created this argument is another.
2244         Previously all code that dealt with this issue had to query both scenarios.
2245         
2246         Now DFG::VariableAccessData knows these things. You just have to ask
2247         VariableAccessData for whether a variable should be unboxed. Anyone wishing to
2248         force a variable to never be unboxed just tells VariableAccessData.
2249
2250         * dfg/DFGAbstractState.cpp:
2251         (JSC::DFG::AbstractState::initialize):
2252         * dfg/DFGByteCodeParser.cpp:
2253         (JSC::DFG::ByteCodeParser::parseBlock):
2254         (DFG):
2255         * dfg/DFGCFGSimplificationPhase.cpp:
2256         (CFGSimplificationPhase):
2257         * dfg/DFGFixupPhase.cpp:
2258         (JSC::DFG::FixupPhase::fixupNode):
2259         * dfg/DFGGraph.h:
2260         (Graph):
2261         * dfg/DFGPredictionPropagationPhase.cpp:
2262         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
2263         * dfg/DFGSpeculativeJIT.cpp:
2264         (JSC::DFG::SpeculativeJIT::compile):
2265         * dfg/DFGSpeculativeJIT32_64.cpp:
2266         (JSC::DFG::SpeculativeJIT::compile):
2267         * dfg/DFGSpeculativeJIT64.cpp:
2268         (JSC::DFG::SpeculativeJIT::compile):
2269         * dfg/DFGUnificationPhase.cpp:
2270         (JSC::DFG::UnificationPhase::run):
2271         * dfg/DFGVariableAccessData.h:
2272         (JSC::DFG::VariableAccessData::VariableAccessData):
2273         (JSC::DFG::VariableAccessData::mergeIsCaptured):
2274         (JSC::DFG::VariableAccessData::mergeShouldNeverUnbox):
2275         (VariableAccessData):
2276         (JSC::DFG::VariableAccessData::shouldNeverUnbox):
2277         (JSC::DFG::VariableAccessData::shouldUnboxIfPossible):
2278         (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
2279         (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
2280
2281 2013-02-25  Geoffrey Garen  <ggaren@apple.com>
2282
2283         Do one lookup per code cache insertion instead of two
2284         https://bugs.webkit.org/show_bug.cgi?id=110674
2285
2286         Reviewed by Sam Weinig.
2287
2288         Deployed the idiomatic "add null value" trick to avoid a second hash
2289         lookup when inserting an item.
2290
2291         * runtime/CodeCache.cpp:
2292         (JSC::CodeCacheMap::pruneSlowCase): Factored this into a helper function
2293         to improve clarity and get some code off the hot path.
2294
2295         (JSC::CodeCache::getCodeBlock):
2296         (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Use the add() API
2297         to avoid two hash lookups. Be sure to remove items if parsing fails,
2298         otherwise we'll leave nulls in the table. (I'm guessing that caching parse
2299         errors is not a win.)
2300
2301         * runtime/CodeCache.h:
2302         (JSC::SourceCodeValue::SourceCodeValue):
2303         (CodeCacheMap):
2304         (JSC::CodeCacheMap::add): Combined find() and set() into add().
2305
2306         (JSC::CodeCacheMap::remove):
2307         (JSC::CodeCacheMap::age):
2308         (JSC::CodeCacheMap::prune): Refactored to support above changes.
2309
2310 2013-02-25  Carlos Garcia Campos  <cgarcia@igalia.com>
2311
2312         [BlackBerry][ARM] Fix cast-align warnings in JavaScriptCore
2313         https://bugs.webkit.org/show_bug.cgi?id=110738
2314
2315         Reviewed by Rob Buis.
2316
2317         Use reinterpret_cast_ptr instead of reinterpret_cast for
2318         pointers.
2319
2320         * dfg/DFGOperations.cpp:
2321         * heap/CopiedBlock.h:
2322         (JSC::CopiedBlock::zeroFillWilderness):
2323         * heap/WeakBlock.h:
2324         (JSC::WeakBlock::asWeakImpl):
2325         (JSC::WeakBlock::asFreeCell):
2326         (JSC::WeakBlock::weakImpls):
2327         * heap/WeakImpl.h:
2328         (JSC::WeakImpl::asWeakImpl):
2329         * interpreter/JSStack.cpp:
2330         (JSC::JSStack::disableErrorStackReserve):
2331         * interpreter/JSStack.h:
2332         (JSC::JSStack::reservationEnd):
2333         * runtime/ArrayStorage.h:
2334         (JSC::ArrayStorage::from):
2335         * runtime/Butterfly.h:
2336         (JSC::Butterfly::indexingPayload):
2337         * runtime/IndexingHeader.h:
2338         (JSC::IndexingHeader::propertyStorage):
2339         * runtime/JSActivation.h:
2340         (JSC::JSActivation::tearOff):
2341         (JSC::JSActivation::isTornOff):
2342         (JSC::JSActivation::storage):
2343
2344 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
2345
2346         DFG::SpeculativeJIT::speculateNumber() should just use SpeculateDoubleOperand instead of doing its own thing
2347         https://bugs.webkit.org/show_bug.cgi?id=110659
2348
2349         Reviewed by Oliver Hunt and Mark Hahnenberg.
2350         
2351         This simplifies the code, and also has the effect that if speculateNumber() is called
2352         prior to someone actually using the number in a double context, then the number will
2353         already be up-converted to double and ready to go.
2354
2355         Previously if this ever came up, the subsequent use would have to again branch to see
2356         if the value is tagged as int or tagged as double.
2357
2358         On the other hand, if you ever did speculateNumber() and then used the value as a
2359         JSValue, this will be a slow down now.
2360
2361         I suspect that the former (speculateNumber() and then use as number) is more likely
2362         than the latter (speculateNumber() and then use as JSValue).
2363
2364         * dfg/DFGSpeculativeJIT.cpp:
2365         (JSC::DFG::SpeculativeJIT::speculateNumber):
2366
2367 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
2368
2369         DFG FixupPhase should have one common hook for knowing if a node is ever being speculated a certain way
2370         https://bugs.webkit.org/show_bug.cgi?id=110650
2371
2372         Reviewed by Mark Hahnenberg.
2373         
2374         Changes almost all calls to edge.setUseKind(kind) to be
2375         setUseKindAndUnboxIfProfitable<kind>(edge). This will allow us to use the latter
2376         as a hook for deciding which locals to unbox (webkit.org/b/110433).
2377
2378         * dfg/DFGFixupPhase.cpp:
2379         (JSC::DFG::FixupPhase::fixupNode):
2380         (FixupPhase):
2381         (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
2382         (JSC::DFG::FixupPhase::fixIntEdge):
2383         (JSC::DFG::FixupPhase::fixDoubleEdge):
2384         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
2385
2386 2013-02-22  Filip Pizlo  <fpizlo@apple.com>
2387
2388         REGRESSION(r143654): some fast/js test crashes on 32 bit build
2389         https://bugs.webkit.org/show_bug.cgi?id=110590
2390
2391         Reviewed by Mark Hahnenberg.
2392         
2393         In compileValueToInt32, the refactoring in r143654 undid one of the fixes from
2394         r143314 due to a merge goof.
2395         
2396         In speculateNumber, we were simply forgetting to indicate that we need a
2397         ManualOperandSpeculation on a JSValueOperand. ManualOperandSpeculation should
2398         be passed whenever you will be performing the type checks yourself rather than
2399         using the operand class to do it for you.
2400
2401         * dfg/DFGSpeculativeJIT.cpp:
2402         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2403         (JSC::DFG::SpeculativeJIT::speculateNumber):
2404
2405 2013-02-22  Geoffrey Garen  <ggaren@apple.com>
2406
2407         Not reviewed.
2408
2409         Fix the 32-bit build by using the right data type in more places.
2410
2411         * runtime/CodeCache.h:
2412         (CodeCacheMap):
2413
2414 2013-02-22  Geoffrey Garen  <ggaren@apple.com>
2415
2416         Not reviewed.
2417
2418         Fix the 32-bit build by using the right data type.
2419
2420         * runtime/CodeCache.h:
2421         (JSC::CodeCacheMap::find):
2422
2423 2013-02-21  Geoffrey Garen  <ggaren@apple.com>
2424
2425         Code cache size should adapt to workload
2426         https://bugs.webkit.org/show_bug.cgi?id=110560
2427
2428         Reviewed by Antti Koivisto.
2429
2430         (*) 5% PLT arithmetic mean speedup
2431         (*) 10% PLT geometric mean speedup
2432         (*) 3.4X microbenchmark speedup
2433         (*) Reduces initial cache capacity by 16X
2434
2435         * runtime/CodeCache.cpp:
2436         (JSC::CodeCache::CodeCache): Updated for interface change.
2437
2438         * runtime/CodeCache.h:
2439         (JSC::SourceCodeValue::SourceCodeValue):
2440         (SourceCodeValue): Turned the cache value into a struct so it can track its age.
2441
2442         (CodeCacheMap):
2443         (JSC::CodeCacheMap::CodeCacheMap):
2444         (JSC::CodeCacheMap::find):
2445         (JSC::CodeCacheMap::set):
2446         (JSC::CodeCacheMap::clear):
2447         (JSC::CodeCacheMap::pruneIfNeeded):
2448         (CodeCache): Grow and shrink in response to usage.
2449
2450 2013-02-21  Jessie Berlin  <jberlin@apple.com>
2451
2452         Fix a typo that broke the 32 bit build.
2453
2454         * dfg/DFGSpeculativeJIT32_64.cpp:
2455         (JSC::DFG::SpeculativeJIT::compile):
2456
2457 2013-02-21  Michael Saboff  <msaboff@apple.com>
2458
2459         25-30% regression in V8 RayTrace test in 32 bit builds with JIT disabled
2460         https://bugs.webkit.org/show_bug.cgi?id=110539
2461
2462         Reviewed by Filip Pizlo.
2463
2464         Change the scale used to lookup pointers in JSGlobalObject::m_specialPointers to be 4 bytes for
2465         the 32 bit version of the interpreter.
2466
2467         * llint/LowLevelInterpreter32_64.asm:
2468
2469 2013-02-21  Roger Fong  <roger_fong@apple.com>
2470
2471         Unreviewed. Add executable property to cmd file.
2472         Required for executable files to maintain their executable permissions over svn.
2473
2474         * JavaScriptCore.vcxproj/copy-files.cmd: Added property svn:executable.
2475
2476 2013-02-21  Filip Pizlo  <fpizlo@apple.com>
2477
2478         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
2479         https://bugs.webkit.org/show_bug.cgi?id=110519
2480         <rdar://problem/13218566>
2481
2482         Reviewed by Geoffrey Garen.
2483         
2484         * runtime/JSFunction.h:
2485         (JSC::JSFunction::allocationProfile):
2486
2487 2013-02-21  Roger Fong  <roger_fong@apple.com>
2488
2489         Unreviewed. Build fix for VS2010 WebKit solution.
2490
2491         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
2492
2493 2013-02-20  Filip Pizlo  <fpizlo@apple.com>
2494
2495         DFG should not change its mind about what type speculations a node does, by encoding the checks in the NodeType, UseKind, and ArrayMode
2496         https://bugs.webkit.org/show_bug.cgi?id=109371
2497
2498         Reviewed by Oliver Hunt.
2499         
2500         FixupPhase now locks in the speculations that each node will do. The DFG then
2501         remembers those speculations, and doesn't change its mind about them even if the
2502         graph is transformed - for example if a node's child is repointed to a different
2503         node as part of CSE, CFG simplification, or folding. Each node ensures that it
2504         executes the speculations promised by its edges. This is true even for Phantom
2505         nodes.
2506         
2507         This still leaves some craziness on the table for future work, like the
2508         elimination of speculating SetLocal's due to CFG simplification
2509         (webkit.org/b/109388) and elimination of nodes via DCE (webkit.org/b/109389).
2510         
2511         In all, this allows for a huge simplification of the DFG. Instead of having to
2512         execute the right speculation heuristic each time you want to decide what a node
2513         does (for example Node::shouldSpeculateInteger(child1, child2) &&
2514         node->canSpeculateInteger()), you just ask for the use kinds of its children
2515         (typically node->binaryUseKind() == Int32Use). Because the use kinds are
2516         discrete, you can often just switch over them. This makes many parts of the code
2517         more clear than they were before.
2518         
2519         Having UseKinds describe the speculations being performed also makes it far
2520         easier to perform analyses that need to know what speculations are done. This is
2521         so far only used to simplify large parts of the CFA.
2522         
2523         To have a larger vocabulary of UseKinds, this also changes the node allocator to
2524         be able to round up Node sizes to the nearest multiple of 16.
2525         
2526         This appears to be neutral on benchmarks, except for some goofy speed-ups, like
2527         8% on Octane/box2d.
2528
2529         * CMakeLists.txt:
2530         * GNUmakefile.list.am:
2531         * JavaScriptCore.xcodeproj/project.pbxproj:
2532         * Target.pri:
2533         * dfg/DFGAbstractState.cpp:
2534         (JSC::DFG::AbstractState::startExecuting):
2535         (DFG):
2536         (JSC::DFG::AbstractState::executeEdges):
2537         (JSC::DFG::AbstractState::verifyEdge):
2538         (JSC::DFG::AbstractState::verifyEdges):
2539         (JSC::DFG::AbstractState::executeEffects):
2540         (JSC::DFG::AbstractState::execute):
2541         * dfg/DFGAbstractState.h:
2542         (AbstractState):
2543         (JSC::DFG::AbstractState::filterEdgeByUse):
2544         (JSC::DFG::AbstractState::filterByType):
2545         * dfg/DFGAbstractValue.h:
2546         (JSC::DFG::AbstractValue::filter):
2547         * dfg/DFGAdjacencyList.h:
2548         (JSC::DFG::AdjacencyList::AdjacencyList):
2549         (JSC::DFG::AdjacencyList::child):
2550         (JSC::DFG::AdjacencyList::setChild):
2551         (JSC::DFG::AdjacencyList::reset):
2552         (JSC::DFG::AdjacencyList::firstChild):
2553         (JSC::DFG::AdjacencyList::setFirstChild):
2554         (JSC::DFG::AdjacencyList::numChildren):
2555         (JSC::DFG::AdjacencyList::setNumChildren):
2556         (AdjacencyList):
2557         * dfg/DFGAllocator.h:
2558         (DFG):
2559         (Allocator):
2560         (JSC::DFG::Allocator::cellSize):
2561         (JSC::DFG::Allocator::Region::headerSize):
2562         (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
2563         (JSC::DFG::Allocator::Region::payloadSize):
2564         (JSC::DFG::Allocator::Region::payloadBegin):
2565         (JSC::DFG::Allocator::Region::payloadEnd):
2566         (JSC::DFG::Allocator::Region::isInThisRegion):
2567         (JSC::DFG::::Allocator):
2568         (JSC::DFG::::~Allocator):
2569         (JSC::DFG::::allocate):
2570         (JSC::DFG::::free):
2571         (JSC::DFG::::freeAll):
2572         (JSC::DFG::::reset):
2573         (JSC::DFG::::indexOf):
2574         (JSC::DFG::::allocatorOf):
2575         (JSC::DFG::::bumpAllocate):
2576         (JSC::DFG::::freeListAllocate):
2577         (JSC::DFG::::allocateSlow):
2578         (JSC::DFG::::freeRegionsStartingAt):
2579         (JSC::DFG::::startBumpingIn):
2580         * dfg/DFGByteCodeParser.cpp:
2581         (JSC::DFG::ByteCodeParser::addToGraph):
2582         (JSC::DFG::ByteCodeParser::handleMinMax):
2583         * dfg/DFGCSEPhase.cpp:
2584         (JSC::DFG::CSEPhase::setLocalStoreElimination):
2585         (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
2586         (JSC::DFG::CSEPhase::setReplacement):
2587         (JSC::DFG::CSEPhase::performNodeCSE):
2588         * dfg/DFGCommon.h:
2589         (DFG):
2590         * dfg/DFGConstantFoldingPhase.cpp:
2591         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2592         (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
2593         * dfg/DFGDriver.cpp:
2594         (JSC::DFG::compile):
2595         * dfg/DFGEdge.cpp:
2596         (JSC::DFG::Edge::dump):
2597         * dfg/DFGEdge.h:
2598         (JSC::DFG::Edge::useKindUnchecked):
2599         (JSC::DFG::Edge::useKind):
2600         (JSC::DFG::Edge::shift):
2601         * dfg/DFGFixupPhase.cpp:
2602         (JSC::DFG::FixupPhase::run):
2603         (JSC::DFG::FixupPhase::fixupNode):
2604         (JSC::DFG::FixupPhase::checkArray):
2605         (JSC::DFG::FixupPhase::blessArrayOperation):
2606         (JSC::DFG::FixupPhase::fixIntEdge):
2607         (JSC::DFG::FixupPhase::fixDoubleEdge):
2608         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
2609         (FixupPhase):
2610         (JSC::DFG::FixupPhase::truncateConstantToInt32):
2611         (JSC::DFG::FixupPhase::truncateConstantsIfNecessary):
2612         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
2613         * dfg/DFGGraph.cpp:
2614         (DFG):
2615         (JSC::DFG::Graph::refChildren):
2616         (JSC::DFG::Graph::derefChildren):
2617         * dfg/DFGGraph.h:
2618         (JSC::DFG::Graph::ref):
2619         (JSC::DFG::Graph::deref):
2620         (JSC::DFG::Graph::performSubstitution):
2621         (JSC::DFG::Graph::isPredictedNumerical):
2622         (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
2623         (DFG):
2624         * dfg/DFGNode.h:
2625         (JSC::DFG::Node::Node):
2626         (JSC::DFG::Node::convertToGetByOffset):
2627         (JSC::DFG::Node::convertToPutByOffset):
2628         (JSC::DFG::Node::willHaveCodeGenOrOSR):
2629         (JSC::DFG::Node::child1):
2630         (JSC::DFG::Node::child2):
2631         (JSC::DFG::Node::child3):
2632         (JSC::DFG::Node::binaryUseKind):
2633         (Node):
2634         (JSC::DFG::Node::isBinaryUseKind):
2635         * dfg/DFGNodeAllocator.h:
2636         (DFG):
2637         * dfg/DFGNodeFlags.cpp:
2638         (JSC::DFG::nodeFlagsAsString):
2639         * dfg/DFGNodeType.h:
2640         (DFG):
2641         * dfg/DFGPredictionPropagationPhase.cpp:
2642         (JSC::DFG::PredictionPropagationPhase::propagate):
2643         * dfg/DFGSpeculativeJIT.cpp:
2644         (JSC::DFG::SpeculativeJIT::speculationCheck):
2645         (DFG):
2646         (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
2647         (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
2648         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
2649         (JSC::DFG::SpeculativeJIT::typeCheck):
2650         (JSC::DFG::SpeculativeJIT::forwardTypeCheck):
2651         (JSC::DFG::SpeculativeJIT::fillStorage):
2652         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
2653         (JSC::DFG::SpeculativeJIT::compile):
2654         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
2655         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
2656         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2657         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2658         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
2659         (JSC::DFG::SpeculativeJIT::compileAdd):
2660         (JSC::DFG::SpeculativeJIT::compileArithSub):
2661         (JSC::DFG::SpeculativeJIT::compileArithNegate):
2662         (JSC::DFG::SpeculativeJIT::compileArithMul):
2663         (JSC::DFG::SpeculativeJIT::compileArithMod):
2664         (JSC::DFG::SpeculativeJIT::compare):
2665         (JSC::DFG::SpeculativeJIT::compileStrictEq):
2666         (JSC::DFG::SpeculativeJIT::speculateInt32):
2667         (JSC::DFG::SpeculativeJIT::speculateNumber):
2668         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2669         (JSC::DFG::SpeculativeJIT::speculateBoolean):
2670         (JSC::DFG::SpeculativeJIT::speculateCell):
2671         (JSC::DFG::SpeculativeJIT::speculateObject):
2672         (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
2673         (JSC::DFG::SpeculativeJIT::speculateString):
2674         (JSC::DFG::SpeculativeJIT::speculateNotCell):
2675         (JSC::DFG::SpeculativeJIT::speculateOther):
2676         (JSC::DFG::SpeculativeJIT::speculate):
2677         * dfg/DFGSpeculativeJIT.h:
2678         (SpeculativeJIT):
2679         (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
2680         (JSC::DFG::SpeculativeJIT::needsTypeCheck):
2681         (JSC::DFG::IntegerOperand::IntegerOperand):
2682         (JSC::DFG::IntegerOperand::edge):
2683         (IntegerOperand):
2684         (JSC::DFG::IntegerOperand::node):
2685         (JSC::DFG::IntegerOperand::gpr):
2686         (JSC::DFG::IntegerOperand::use):
2687         (JSC::DFG::JSValueOperand::JSValueOperand):
2688         (JSValueOperand):
2689         (JSC::DFG::JSValueOperand::edge):
2690         (JSC::DFG::JSValueOperand::node):
2691         (JSC::DFG::JSValueOperand::gpr):
2692         (JSC::DFG::JSValueOperand::fill):
2693         (JSC::DFG::JSValueOperand::use):
2694         (JSC::DFG::StorageOperand::StorageOperand):
2695         (JSC::DFG::StorageOperand::edge):
2696         (StorageOperand):
2697         (JSC::DFG::StorageOperand::node):
2698         (JSC::DFG::StorageOperand::gpr):
2699         (JSC::DFG::StorageOperand::use):
2700         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
2701         (SpeculateIntegerOperand):
2702         (JSC::DFG::SpeculateIntegerOperand::edge):
2703         (JSC::DFG::SpeculateIntegerOperand::node):
2704         (JSC::DFG::SpeculateIntegerOperand::gpr):
2705         (JSC::DFG::SpeculateIntegerOperand::use):
2706         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
2707         (SpeculateStrictInt32Operand):
2708         (JSC::DFG::SpeculateStrictInt32Operand::edge):
2709         (JSC::DFG::SpeculateStrictInt32Operand::node):
2710         (JSC::DFG::SpeculateStrictInt32Operand::gpr):
2711         (JSC::DFG::SpeculateStrictInt32Operand::use):
2712         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
2713         (SpeculateDoubleOperand):
2714         (JSC::DFG::SpeculateDoubleOperand::edge):
2715         (JSC::DFG::SpeculateDoubleOperand::node):
2716         (JSC::DFG::SpeculateDoubleOperand::fpr):
2717         (JSC::DFG::SpeculateDoubleOperand::use):
2718         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2719         (SpeculateCellOperand):
2720         (JSC::DFG::SpeculateCellOperand::edge):
2721         (JSC::DFG::SpeculateCellOperand::node):
2722         (JSC::DFG::SpeculateCellOperand::gpr):
2723         (JSC::DFG::SpeculateCellOperand::use):
2724         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
2725         (JSC::DFG::SpeculateBooleanOperand::edge):
2726         (SpeculateBooleanOperand):
2727         (JSC::DFG::SpeculateBooleanOperand::node):
2728         (JSC::DFG::SpeculateBooleanOperand::gpr):
2729         (JSC::DFG::SpeculateBooleanOperand::use):
2730         (DFG):
2731         * dfg/DFGSpeculativeJIT32_64.cpp:
2732         (JSC::DFG::SpeculativeJIT::fillInteger):
2733         (JSC::DFG::SpeculativeJIT::fillJSValue):
2734         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
2735         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
2736         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
2737         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2738         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2739         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2740         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2741         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2742         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2743         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2744         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2745         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2746         (JSC::DFG::SpeculativeJIT::emitBranch):
2747         (JSC::DFG::SpeculativeJIT::compile):
2748         * dfg/DFGSpeculativeJIT64.cpp:
2749         (JSC::DFG::SpeculativeJIT::fillInteger):
2750         (JSC::DFG::SpeculativeJIT::fillJSValue):
2751         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
2752         (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
2753         (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
2754         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
2755         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2756         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2757         (JSC::DFG::SpeculativeJIT::compileObjectEquality):
2758         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2759         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2760         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2761         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2762         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2763         (JSC::DFG::SpeculativeJIT::emitBranch):
2764         (JSC::DFG::SpeculativeJIT::compile):
2765         * dfg/DFGStructureCheckHoistingPhase.cpp:
2766         (JSC::DFG::StructureCheckHoistingPhase::run):
2767         * dfg/DFGUseKind.cpp: Added.
2768         (WTF):
2769         (WTF::printInternal):
2770         * dfg/DFGUseKind.h: Added.
2771         (DFG):
2772         (JSC::DFG::typeFilterFor):
2773         (JSC::DFG::isNumerical):
2774         (WTF):
2775         * dfg/DFGValidate.cpp:
2776         (JSC::DFG::Validate::reportValidationContext):
2777
2778 2013-02-20  Mark Hahnenberg  <mhahnenberg@apple.com>
2779
2780         Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
2781         https://bugs.webkit.org/show_bug.cgi?id=106059
2782
2783         Reviewed by Geoffrey Garen.
2784         
2785         * API/JSBase.h: Renamed enable flag for API.
2786         * API/JSBlockAdaptor.h: Using new flag.
2787         * API/JSBlockAdaptor.mm: Ditto.
2788         * API/JSContext.h: Add convenience C API conversion function for JSGlobalContextRef.
2789         * API/JSContext.mm: 
2790         (-[JSContext JSGlobalContextRef]): Implementation of C API convenience function.
2791         (-[JSContext initWithVirtualMachine:]): We don't use the m_apiData field any more.
2792         (-[JSContext initWithGlobalContextRef:]): init method for allocating new JSContexts given a JSGlobalContextRef.
2793         (-[JSContext dealloc]): No more m_apiData.
2794         (-[JSContext wrapperForObjCObject:]): Renamed wrapperForObject. 
2795         (-[JSContext wrapperForJSObject:]): Fetches or allocates the JSValue for the specified JSValueRef in this JSContext.
2796         (+[JSContext contextWithGlobalContextRef:]): Helper function to grab the lightweight JSContext wrapper for a given
2797         JSGlobalContextRef from the global wrapper cache or allocate a new one if there isn't already one.
2798         * API/JSContextInternal.h: New flag, new method declaration for initWithGlobalContextRef.
2799         * API/JSExport.h: New flag.
2800         * API/JSValue.h: New flag and new C API convenience method.
2801         * API/JSValue.mm:
2802         (-[JSValue JSValueRef]): Implementation of the C API convenience method.
2803         (objectToValueWithoutCopy):
2804         (+[JSValue valueWithValue:inContext:]): We now ask the JSContext for an Objective-C JSValue wrapper, which it can cache
2805         in its internal JSWrapperMap.
2806         * API/JSValueInternal.h:
2807         * API/JSVirtualMachine.h:
2808         * API/JSVirtualMachine.mm: Added global cache that maps JSContextGroupRef -> JSVirtualMachine lightweight wrappers.
2809         (wrapperCacheLock):
2810         (initWrapperCache):
2811         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
2812         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
2813         (-[JSVirtualMachine init]):
2814         (-[JSVirtualMachine initWithContextGroupRef:]):
2815         (-[JSVirtualMachine dealloc]):
2816         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
2817         (-[JSVirtualMachine contextForGlobalContextRef:]):
2818         (-[JSVirtualMachine addContext:forGlobalContextRef:]):
2819         * API/JSVirtualMachineInternal.h:
2820         * API/JSWrapperMap.h:
2821         * API/JSWrapperMap.mm:
2822         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We use the JSObjectSetPrototype C API call because 
2823         setting the __proto__ property causes all sorts of bad things to happen behind the scenes, which can cause crashes based on 
2824         when it gets called.
2825         (-[JSWrapperMap initWithContext:]):
2826         (-[JSWrapperMap jsWrapperForObject:]):
2827         (-[JSWrapperMap objcWrapperForJSValueRef:]):
2828         * API/JavaScriptCore.h:
2829         * API/ObjCCallbackFunction.h:
2830         * API/ObjCCallbackFunction.mm:
2831         (ObjCCallbackFunction::ObjCCallbackFunction): We never actually should have retained the target in the case that we had a 
2832         block as a callback. Blocks are initially allocated on the stack and are only moved to the heap if we call their copy method.
2833         Retaining the block on the stack was a bad idea because if that stack frame ever went away and we called the block later, 
2834         we'd crash and burn.
2835         (ObjCCallbackFunction::setContext): We need a new setter for when the weak reference to a JSContext inside an ObjCCallbackFunction
2836         disappears, we can allocate a new one in its place.
2837         (ObjCCallbackFunction):
2838         (objCCallbackFunctionCallAsFunction): Reset the callback's context if it's ever destroyed.
2839         (objCCallbackFunctionForInvocation): Again, don't set the __proto__ property because it uses black magic that can cause us to crash
2840         depending on when this is called.
2841         (objCCallbackFunctionForBlock): Here is where we copy the block to the heap when we're first creating the callback object for it.
2842         * API/tests/testapi.c:
2843         (main):
2844         * API/tests/testapi.mm: We're going to get rid of the automatic block conversion, since that is causing leaks. I changed it 
2845         here in this test just so that it wouldn't mask any other potential leaks. Also modified some of the tests since JSContexts are 
2846         just lightweight wrappers now, we're not guaranteed to get the same pointer back from the call to [JSValue context] as the one 
2847         that the value was created in.
2848         (-[TestObject callback:]):
2849         * JavaScriptCore.xcodeproj/project.pbxproj:
2850         * runtime/JSGlobalData.cpp:
2851         (JSC::JSGlobalData::JSGlobalData): No more m_apiData.
2852         * runtime/JSGlobalData.h: Ditto.
2853         * runtime/JSGlobalObject.cpp:
2854         (JSC::JSGlobalObject::JSGlobalObject): Ditto.
2855         * runtime/JSGlobalObject.h:
2856
2857 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
2858
2859         DFG::SpeculativeJIT::compileInt32ToDouble() has an unnecessary case for constant operands
2860         https://bugs.webkit.org/show_bug.cgi?id=110309
2861
2862         Reviewed by Sam Weinig.
2863         
2864         It used to be necessary, back when we didn't have constant folding. Now we have
2865         constant folding. So we don't need it.
2866
2867         * dfg/DFGSpeculativeJIT.cpp:
2868         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
2869
2870 2013-02-20  Filip Pizlo  <fpizlo@apple.com>
2871
2872         DFG inlines Resolves that it doesn't know how to handle correctly
2873         https://bugs.webkit.org/show_bug.cgi?id=110405
2874
2875         Reviewed by Geoffrey Garen.
2876         
2877         Don't try to be clever: if there's a failing resolve, we can't inline it, period.
2878
2879         * dfg/DFGCapabilities.h:
2880         (JSC::DFG::canInlineResolveOperations):
2881         (JSC::DFG::canInlineOpcode):
2882
2883 2013-02-20  Roger Fong  <roger_fong@apple.com>
2884
2885         Get VS2010 Solution B&I ready.
2886         <rdar://problem/1322988>
2887
2888         Rubberstamped by Timothy Horton.        
2889         
2890         Add Production configuration. 
2891         Add a JavaScriptCore submit solution with a DebugSuffix configuration. 
2892         Modify JavaScriptCore.make as necessary.
2893         
2894         * JavaScriptCore.vcxproj/JavaScriptCore.make: Added.
2895         * JavaScriptCore.vcxproj/JavaScriptCore.sln: Removed.
2896         * JavaScriptCore.vcxproj/JavaScriptCore.submit.sln: Copied from Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.sln.
2897         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2898         * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
2899         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
2900         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
2901         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
2902         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPreBuild.cmd:
2903         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorProduction.props: Added.
2904         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props:
2905         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj:
2906         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj.filters:
2907         * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedProduction.props: Added.
2908         * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedRelease.props:
2909         * JavaScriptCore.vcxproj/JavaScriptCoreProduction.props: Added.
2910         * JavaScriptCore.vcxproj/JavaScriptCoreRelease.props:
2911         * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
2912         * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
2913         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
2914         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props:
2915         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props:
2916         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorProduction.props: Added.
2917         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.props:
2918         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj:
2919         * JavaScriptCore.vcxproj/jsc/jscCommon.props:
2920         * JavaScriptCore.vcxproj/jsc/jscProduction.props: Added.
2921         * JavaScriptCore.vcxproj/jsc/jscRelease.props:
2922         * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj:
2923         * JavaScriptCore.vcxproj/testRegExp/testRegExpCommon.props:
2924         * JavaScriptCore.vcxproj/testRegExp/testRegExpProduction.props: Added.
2925         * JavaScriptCore.vcxproj/testRegExp/testRegExpRelease.props:
2926         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj:
2927         * JavaScriptCore.vcxproj/testapi/testapiCommon.props:
2928         * JavaScriptCore.vcxproj/testapi/testapiProduction.props: Added.
2929         * JavaScriptCore.vcxproj/testapi/testapiRelease.props:
2930
2931 2013-02-19  Jer Noble  <jer.noble@apple.com>
2932
2933         EME: Enable both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 until clients transition to the new API.
2934         https://bugs.webkit.org/show_bug.cgi?id=110284
2935
2936         Reviewed by Eric Carlson.
2937
2938         Re-enable the ENCRYPTED_MEDIA flag.
2939
2940         * Configurations/FeatureDefines.xcconfig:
2941
2942 2013-02-20  Dirk Schulze  <krit@webkit.org>
2943
2944         Enable CANVAS_PATH flag
2945         https://bugs.webkit.org/show_bug.cgi?id=108508
2946
2947         Reviewed by Simon Fraser.
2948
2949         Enable CANVAS_PATH flag on trunk.
2950
2951         Existing tests cover the feature.
2952
2953         * Configurations/FeatureDefines.xcconfig:
2954
2955 2013-02-19  Mark Rowe  <mrowe@apple.com>
2956
2957         Unreviewed, uninteresting change to test a theory about bad dependency handling.
2958
2959         * API/JSStringRefCF.cpp:
2960         (JSStringCreateWithCFString): Remove an unnecessary else clause.
2961
2962 2013-02-19  Oliver Hunt  <oliver@apple.com>
2963
2964         Silence some analyzer warnings
2965         https://bugs.webkit.org/show_bug.cgi?id=110281
2966
2967         Reviewed by Mark Hahnenberg.
2968
2969         The static analyzer believes that callerCodeBlock can be null,
2970         based on other code performing null tests.  This should not
2971         ever be the case, but we'll add RELEASE_ASSERTs to make it
2972         obvious if we're ever wrong.
2973
2974         * interpreter/Interpreter.cpp:
2975         (JSC::getCallerInfo):
2976
2977 2013-02-19  Oliver Hunt  <oliver@apple.com>
2978
2979         Don't force everything to be blinded in debug builds
2980         https://bugs.webkit.org/show_bug.cgi?id=110279
2981
2982         Reviewed by Mark Hahnenberg.
2983
2984         Switch to an explicit flag for indicating that we want
2985         every constant to be blinded.
2986
2987         * assembler/MacroAssembler.h:
2988         (JSC::MacroAssembler::shouldBlind):
2989
2990 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
2991
2992         Fix indentation of Opcode.h
2993
2994         Rubber stamped by Mark Hahnenberg.
2995
2996         * bytecode/Opcode.h:
2997
2998 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
2999
3000         Moved PolymorphicAccessStructureList into its own file.
3001
3002         Rubber stamped by Mark Hahnenberg.
3003
3004         * GNUmakefile.list.am:
3005         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3006         * JavaScriptCore.xcodeproj/project.pbxproj:
3007         * bytecode/Instruction.h:
3008         (JSC):
3009         * bytecode/PolymorphicAccessStructureList.h: Added.
3010         (JSC):
3011         (PolymorphicAccessStructureList):
3012         (PolymorphicStubInfo):
3013         (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo):
3014         (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
3015         (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
3016         (JSC::PolymorphicAccessStructureList::visitWeak):
3017         * bytecode/StructureStubInfo.h:
3018
3019 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
3020
3021         Fix indentation of Instruction.h
3022
3023         Rubber stamped by Mark Hahnenberg.
3024
3025         * bytecode/Instruction.h:
3026
3027 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
3028
3029         Unreviewed, rolling in r143348.
3030         http://trac.webkit.org/changeset/143348
3031         https://bugs.webkit.org/show_bug.cgi?id=110242
3032
3033         The bug was that isEmptyValue() was returning true for the deleted value.
3034         Fixed this and simplified things further by delegating to m_sourceCode
3035         for both isNull() and isHashTableDeletedValue(), so they can't be out of
3036         sync.
3037
3038         * runtime/CodeCache.cpp:
3039         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
3040         * runtime/CodeCache.h:
3041         (JSC::SourceCodeKey::SourceCodeKey):
3042         (JSC::SourceCodeKey::isHashTableDeletedValue):
3043         (JSC::SourceCodeKey::hash):
3044         (JSC::SourceCodeKey::length):
3045         (JSC::SourceCodeKey::isNull):
3046         (JSC::SourceCodeKey::operator==):
3047         (SourceCodeKey):
3048
3049 2013-02-15  Martin Robinson  <mrobinson@igalia.com>
3050
3051         [GTK] Improve gyp build JavaScriptCore code generation
3052         https://bugs.webkit.org/show_bug.cgi?id=109969
3053
3054         Reviewed by Dirk Pranke.
3055
3056         Switch away from using DerivedSources.make when building JavaScriptCore generated
3057         sources. This bring a couple advantages, such as building the sources in parallel,
3058         but requires us to list the generated sources more than once.
3059
3060         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Add rules for generating JavaScriptCore sources.
3061         * JavaScriptCore.gyp/generate-derived-sources.sh: Added.
3062         * JavaScriptCore.gyp/redirect-stdout.sh: Added.
3063
3064 2013-02-19  Sheriff Bot  <webkit.review.bot@gmail.com>
3065
3066         Unreviewed, rolling out r143348.
3067         http://trac.webkit.org/changeset/143348
3068         https://bugs.webkit.org/show_bug.cgi?id=110242
3069
3070         "Caused a deleted value sentinel crash on the layout tests"
3071         (Requested by ggaren on #webkit).
3072
3073         * runtime/CodeCache.cpp:
3074         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
3075         * runtime/CodeCache.h:
3076         (JSC::SourceCodeKey::SourceCodeKey):
3077         (JSC::SourceCodeKey::isHashTableDeletedValue):
3078         (JSC::SourceCodeKey::hash):
3079         (JSC::SourceCodeKey::length):
3080         (JSC::SourceCodeKey::isNull):
3081         (JSC::SourceCodeKey::operator==):
3082         (SourceCodeKey):
3083
3084 2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>
3085
3086         HeapBlock::destroy should issue warning if result is unused
3087         https://bugs.webkit.org/show_bug.cgi?id=110233
3088
3089         Reviewed by Oliver Hunt.
3090
3091         To enforce the fact that we need to return blocks to the BlockAllocator after calling destroy, 
3092         we should add WARN_UNUSED_RETURN to HeapBlock::destroy and any other destroy functions in its subclasses.
3093
3094         * heap/HeapBlock.h:
3095
3096 2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>
3097
3098         WeakSet::removeAllocator leaks WeakBlocks
3099         https://bugs.webkit.org/show_bug.cgi?id=110228
3100
3101         Reviewed by Geoffrey Garen.
3102
3103         We need to return the WeakBlock to the BlockAllocator after the call to WeakBlock::destroy.
3104
3105         * heap/WeakSet.cpp:
3106         (JSC::WeakSet::removeAllocator):
3107
3108 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
3109
3110         Save space on keys in the CodeCache
3111         https://bugs.webkit.org/show_bug.cgi?id=110179
3112
3113         Reviewed by Oliver Hunt.
3114
3115         Share the SourceProvider's string instead of making our own copy. This
3116         chops off 16MB - 32MB from the CodeCache's memory footprint when full.
3117         (It's 16MB when the strings are LChar, and 32MB when they're UChar.)
3118
3119         * runtime/CodeCache.cpp:
3120         (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
3121         * runtime/CodeCache.h: Removed a defunct enum value.
3122
3123         (JSC::SourceCodeKey::SourceCodeKey):
3124         (JSC::SourceCodeKey::isHashTableDeletedValue):
3125         (SourceCodeKey):
3126         (JSC::SourceCodeKey::hash):
3127         (JSC::SourceCodeKey::length):
3128         (JSC::SourceCodeKey::isNull):
3129         (JSC::SourceCodeKey::string):
3130         (JSC::SourceCodeKey::operator==): Store a SourceCode instead of a String
3131         so we can share our string with our SourceProvider. Cache our hash so
3132         we don't have to re-decode our string just to re-hash the table.
3133
3134 2013-02-19  Zoltan Herczeg  <zherczeg@webkit.org>
3135
3136         revertBranchPtrWithPatch is incorrect on ARM traditional
3137         https://bugs.webkit.org/show_bug.cgi?id=110201
3138
3139         Reviewed by Oliver Hunt.
3140
3141         Revert two instructions back to their original value.
3142
3143         * assembler/ARMAssembler.h:
3144         (JSC::ARMAssembler::revertBranchPtrWithPatch):
3145         (ARMAssembler):
3146         * assembler/MacroAssemblerARM.h:
3147         (JSC::MacroAssemblerARM::branchPtrWithPatch):
3148         (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch):
3149
3150 2013-02-19  Filip Pizlo  <fpizlo@apple.com>
3151
3152         REGRESSION(r143241): It made 27 layout tests crash on 32 bit platforms
3153         https://bugs.webkit.org/show_bug.cgi?id=110184
3154
3155         Reviewed by Zoltan Herczeg.
3156         
3157         32-bit backend was making all sorts of crazy assumptions, which happened to mostly
3158         not break things prior to http://trac.webkit.org/changeset/143241. This brings the
3159         32-bit backend's type speculation fully into compliance with what the 64-bit
3160         backend does.
3161
3162         * dfg/DFGSpeculativeJIT.cpp:
3163         (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
3164         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
3165         * dfg/DFGSpeculativeJIT32_64.cpp:
3166         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
3167         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
3168         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
3169         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
3170
3171 2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>
3172
3173         Unreviewed build fix for Apple Windows. Second stage.
3174         Add missed export statement.
3175
3176         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3177
3178 2013-02-18  Roger Fong  <roger_fong@apple.com>
3179
3180         Unreviewed Windows build fix.
3181
3182         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3183         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3184
3185 2013-02-18  Darin Adler  <darin@apple.com>
3186
3187         Remove unneeded explicit function template arguments.
3188         https://bugs.webkit.org/show_bug.cgi?id=110043
3189
3190         Reviewed by Ryosuke Niwa.
3191
3192         * runtime/Identifier.cpp:
3193         (JSC::IdentifierASCIIStringTranslator::hash): Let the compiler deduce the type
3194         when calling computeHashAndMaskTop8Bits.
3195         (JSC::IdentifierLCharFromUCharTranslator::hash): Ditto.
3196         * runtime/Identifier.h:
3197         (JSC::IdentifierCharBufferTranslator::hash): Ditto.
3198 2013-02-18  Geoffrey Garen  <ggaren@apple.com>
3199
3200         Shrank the SourceProvider cache
3201         https://bugs.webkit.org/show_bug.cgi?id=110158
3202
3203         Reviewed by Oliver Hunt.
3204
3205         CodeCache is now our primary source cache, so a long-lived SourceProvider
3206         cache is a waste. I measured this as a 10MB Membuster win; with more
3207         precise instrumentation, Andreas estimated it as up to 30MB.
3208
3209         I didn't eliminate the SourceProvider cache because it's still useful
3210         in speeding up uncached parsing of scripts with large nested functions
3211         (i.e., all scripts).
3212
3213         * heap/Heap.cpp:
3214         (JSC::Heap::collect): Discard all source provider caches after GC. This
3215         is a convenient place to do so because it's reasonably soon after initial
3216         parsing without being immediate.
3217
3218         * parser/Parser.cpp:
3219         (JSC::::Parser): Updated for interface change: The heap now owns the
3220         source provider cache, since most SourceProviders are not expected to
3221         have one by default, and the heap is responsible for throwing them away.
3222
3223         (JSC::::parseInner): No need to update statistics on cache size, since
3224         we're going to throw it away no matter what.
3225
3226         (JSC::::parseFunctionInfo): Reduced the minimum function size to 16. This
3227         is a 27% win on a new parsing micro-benchmark I've added. Now that the
3228         cache is temporary, we don't have to worry so much about its memory
3229         footprint.
3230
3231         * parser/Parser.h:
3232         (Parser): Updated for interface changes.
3233
3234         * parser/SourceProvider.cpp:
3235         (JSC::SourceProvider::SourceProvider):
3236         (JSC::SourceProvider::~SourceProvider):
3237         * parser/SourceProvider.h:
3238         (JSC):
3239         (SourceProvider): SourceProvider doesn't own its cache anymore because
3240         the cache is temporary.
3241
3242         * parser/SourceProviderCache.cpp:
3243         (JSC::SourceProviderCache::clear):
3244         (JSC::SourceProviderCache::add):
3245         * parser/SourceProviderCache.h:
3246         (JSC::SourceProviderCache::SourceProviderCache):
3247         (SourceProviderCache):
3248         * parser/SourceProviderCacheItem.h:
3249         (SourceProviderCacheItem): No need to update statistics on cache size,
3250         since we're going to throw it away no matter what.
3251
3252         * runtime/JSGlobalData.cpp:
3253         (JSC::JSGlobalData::addSourceProviderCache):
3254         (JSC):
3255         (JSC::JSGlobalData::clearSourceProviderCaches):
3256         * runtime/JSGlobalData.h:
3257         (JSC):
3258         (JSGlobalData): Moved the cache here so it's easier to throw away.
3259
3260 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
3261
3262         DFG backend Branch handling has duplicate code and dead code
3263         https://bugs.webkit.org/show_bug.cgi?id=110162
3264
3265         Reviewed by Mark Hahnenberg.
3266         
3267         Streamline the code, and make the 64 backend's optimizations make more sense
3268         (i.e. not be dead code).
3269
3270         * dfg/DFGSpeculativeJIT32_64.cpp:
3271         (JSC::DFG::SpeculativeJIT::compile):
3272         * dfg/DFGSpeculativeJIT64.cpp:
3273         (JSC::DFG::SpeculativeJIT::emitBranch):
3274         (JSC::DFG::SpeculativeJIT::compile):
3275
3276 2013-02-18  Brent Fulgham  <bfulgham@webkit.org>
3277
3278         [Windows] Unreviewed VS2010 build correction after r143273.
3279
3280         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing source
3281         file SourceProvider.cpp.
3282         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
3283         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Add missing exports.
3284
3285 2013-02-18  Filip Pizlo  <fpizlo@apple.com>
3286
3287         Structure::flattenDictionaryStructure should compute max offset in a manner that soundly handles the case where the property list becomes empty
3288         https://bugs.webkit.org/show_bug.cgi?id=110155
3289         <rdar://problem/13233773>
3290
3291         Reviewed by Mark Rowe.
3292         
3293         This was a rookie mistake.  It was doing:
3294         
3295         for (blah) {
3296             m_offset = foo // foo's monotonically increase in the loop
3297         }
3298         
3299         as a way of computing max offset for all of the properties.  Except what if the loop doesn't
3300         execute because there are no properties?  Well, then, you're going to have a bogus m_offset.
3301         
3302         The solution is to initialize m_offset at the top of the loop.
3303
3304         * runtime/Structure.cpp:
3305         (JSC::Structure::flattenDictionaryStructure):
3306
3307 2013-02-18  Balazs Kilvady  <kilvadyb@homejinni.com>
3308
3309         MIPS DFG implementation.
3310         https://bugs.webkit.org/show_bug.cgi?id=101328
3311
3312         Reviewed by Oliver Hunt.
3313
3314         DFG implementation for MIPS.
3315
3316         * assembler/MIPSAssembler.h:
3317         (JSC::MIPSAssembler::MIPSAssembler):
3318         (JSC::MIPSAssembler::sllv):
3319         (JSC::MIPSAssembler::movd):
3320         (MIPSAssembler):
3321         (JSC::MIPSAssembler::negd):
3322         (JSC::MIPSAssembler::labelForWatchpoint):
3323         (JSC::MIPSAssembler::label):
3324         (JSC::MIPSAssembler::vmov):
3325         (JSC::MIPSAssembler::linkDirectJump):
3326         (JSC::MIPSAssembler::maxJumpReplacementSize):
3327         (JSC::MIPSAssembler::revertJumpToMove):
3328         (JSC::MIPSAssembler::replaceWithJump):
3329         * assembler/MacroAssembler.h:
3330         (MacroAssembler):
3331         (JSC::MacroAssembler::poke):
3332         * assembler/MacroAssemblerMIPS.h:
3333         (JSC::MacroAssemblerMIPS::add32):
3334         (MacroAssemblerMIPS):
3335         (JSC::MacroAssemblerMIPS::and32):
3336         (JSC::MacroAssemblerMIPS::lshift32):
3337         (JSC::MacroAssemblerMIPS::mul32):
3338         (JSC::MacroAssemblerMIPS::or32):
3339         (JSC::MacroAssemblerMIPS::rshift32):
3340         (JSC::MacroAssemblerMIPS::urshift32):
3341         (JSC::MacroAssemblerMIPS::sub32):
3342         (JSC::MacroAssemblerMIPS::xor32):
3343         (JSC::MacroAssemblerMIPS::store32):
3344         (JSC::MacroAssemblerMIPS::jump):
3345         (JSC::MacroAssemblerMIPS::branchAdd32):
3346         (JSC::MacroAssemblerMIPS::branchMul32):
3347         (JSC::MacroAssemblerMIPS::branchSub32):
3348         (JSC::MacroAssemblerMIPS::branchNeg32):
3349         (JSC::MacroAssemblerMIPS::call):
3350         (JSC::MacroAssemblerMIPS::loadDouble):
3351         (JSC::MacroAssemblerMIPS::moveDouble):
3352         (JSC::MacroAssemblerMIPS::swapDouble):
3353         (JSC::MacroAssemblerMIPS::subDouble):
3354         (JSC::MacroAssemblerMIPS::mulDouble):
3355         (JSC::MacroAssemblerMIPS::divDouble):
3356         (JSC::MacroAssemblerMIPS::negateDouble):
3357         (JSC::MacroAssemblerMIPS::branchEqual):
3358         (JSC::MacroAssemblerMIPS::branchNotEqual):
3359         (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
3360         (JSC::MacroAssemblerMIPS::branchTruncateDoubleToUint32):
3361         (JSC::MacroAssemblerMIPS::truncateDoubleToInt32):
3362         (JSC::MacroAssemblerMIPS::truncateDoubleToUint32):
3363         (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
3364         (JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):
3365         (JSC::MacroAssemblerMIPS::invert):
3366         (JSC::MacroAssemblerMIPS::replaceWithJump):
3367         (JSC::MacroAssemblerMIPS::maxJumpReplacementSize):
3368         * dfg/DFGAssemblyHelpers.h:
3369         (AssemblyHelpers):
3370         (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
3371         (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
3372         (JSC::DFG::AssemblyHelpers::debugCall):
3373         * dfg/DFGCCallHelpers.h:
3374         (CCallHelpers):
3375         (JSC::DFG::CCallHelpers::setupArguments):
3376         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
3377         * dfg/DFGFPRInfo.h:
3378  &nb