[JSC] x86: Use inc and dec when possible
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-08-15  Benjamin Poulain  <benjamin@webkit.org>
2
3         [JSC] x86: Use inc and dec when possible
4         https://bugs.webkit.org/show_bug.cgi?id=119831
5
6         Reviewed by Geoffrey Garen.
7
8         When incrementing or decrementing by an immediate of 1, use the insctructions
9         inc and dec instead of add and sub.
10         The instructions have good timing and their encoding is smaller.
11
12         * assembler/MacroAssemblerX86Common.h:
13         (JSC::MacroAssemblerX86_64::add32):
14         (JSC::MacroAssemblerX86_64::sub32):
15         * assembler/MacroAssemblerX86_64.h:
16         (JSC::MacroAssemblerX86_64::add64):
17         (JSC::MacroAssemblerX86_64::sub64):
18         * assembler/X86Assembler.h:
19         (JSC::X86Assembler::dec_r):
20         (JSC::X86Assembler::decq_r):
21         (JSC::X86Assembler::inc_r):
22         (JSC::X86Assembler::incq_r):
23
24 2013-08-15  Filip Pizlo  <fpizlo@apple.com>
25
26         Sometimes, the DFG uses a GetById for typed array length accesses despite profiling data that indicates that it's a typed array length access
27         https://bugs.webkit.org/show_bug.cgi?id=119874
28
29         Reviewed by Oliver Hunt and Mark Hahnenberg.
30         
31         It was a confusion between heuristics in DFG::ArrayMode that are assuming that
32         you'll use ForceExit if array profiles are empty, the JIT creating empty profiles
33         sometimes for typed array length accesses, and the FixupPhase assuming that a
34         ForceExit ArrayMode means that it should continue using a generic GetById.
35
36         This fixes the confusion.
37
38         * dfg/DFGFixupPhase.cpp:
39         (JSC::DFG::FixupPhase::fixupNode):
40
41 2013-08-15  Mark Lam  <mark.lam@apple.com>
42
43         Fix crash when performing activation tearoff.
44         https://bugs.webkit.org/show_bug.cgi?id=119848
45
46         Reviewed by Oliver Hunt.
47
48         The activation tearoff crash was due to a bug in the baseline JIT.
49         If we have a scenario where the a baseline JIT frame calls a LLINT
50         frame, an exception may be thrown while in the LLINT.
51
52         Interpreter::throwException() which handles the exception will unwind
53         all frames until it finds a catcher or sees a host frame. When we
54         return from the LLINT to the baseline JIT code, the baseline JIT code
55         errorneously sets topCallFrame to the value in its call frame register,
56         and starts unwinding the stack frames that have already been unwound.
57
58         The fix is:
59         1. Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException.
60            This is a more accurate description of what this runtime function
61            is supposed to do i.e. it handles the exception which include doing
62            nothing (if there are no more frames to unwind).
63         2. Fix up topCallFrame values so that the HostCallFrameFlag is never
64            set on it.
65         3. Reloading the call frame register from topCallFrame when we're
66            returning from a callee and detect exception handling in progress.
67
68         * interpreter/Interpreter.cpp:
69         (JSC::Interpreter::unwindCallFrame):
70         - Ensure that topCallFrame is not set with the HostCallFrameFlag.
71         (JSC::Interpreter::getStackTrace):
72         * interpreter/Interpreter.h:
73         (JSC::TopCallFrameSetter::TopCallFrameSetter):
74         (JSC::TopCallFrameSetter::~TopCallFrameSetter):
75         (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
76         - Ensure that topCallFrame is not set with the HostCallFrameFlag.
77         * jit/JIT.h:
78         * jit/JITExceptions.cpp:
79         (JSC::uncaughtExceptionHandler):
80         - Convenience function to get the handler for uncaught exceptions.
81         * jit/JITExceptions.h:
82         * jit/JITInlines.h:
83         (JSC::JIT::reloadCallFrameFromTopCallFrame):
84         * jit/JITOpcodes32_64.cpp:
85         (JSC::JIT::privateCompileCTINativeCall):
86         - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException.
87         * jit/JITStubs.cpp:
88         (JSC::throwExceptionFromOpCall):
89         - Ensure that topCallFrame is not set with the HostCallFrameFlag.
90         (JSC::cti_vm_handle_exception):
91         - Check for the case when there are no more frames to unwind.
92         * jit/JITStubs.h:
93         * jit/JITStubsARM.h:
94         * jit/JITStubsARMv7.h:
95         * jit/JITStubsMIPS.h:
96         * jit/JITStubsSH4.h:
97         * jit/JITStubsX86.h:
98         * jit/JITStubsX86_64.h:
99         - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException.
100         * jit/SlowPathCall.h:
101         (JSC::JITSlowPathCall::call):
102         - reload cfr from topcallFrame when handling an exception.
103         - Rename ctiVMThrowTrampolineSlowpath to ctiVMHandleException.
104         * jit/ThunkGenerators.cpp:
105         (JSC::nativeForGenerator):
106         * llint/LowLevelInterpreter32_64.asm:
107         * llint/LowLevelInterpreter64.asm:
108         - reload cfr from topcallFrame when handling an exception.
109         * runtime/VM.cpp:
110         (JSC::VM::VM):
111         - Ensure that topCallFrame is not set with the HostCallFrameFlag.
112
113 2013-08-15  Filip Pizlo  <fpizlo@apple.com>
114
115         Remove some code duplication.
116         
117         Rubber stamped by Mark Hahnenberg.
118
119         * runtime/JSDataViewPrototype.cpp:
120         (JSC::getData):
121         (JSC::setData):
122
123 2013-08-15  Julien Brianceau  <jbrianceau@nds.com>
124
125         [DFG] isDouble() and isNumerical() should return true with KnownNumberUse UseKind.
126         https://bugs.webkit.org/show_bug.cgi?id=119794
127
128         Reviewed by Filip Pizlo.
129
130         This patch fixes ASSERTs failures in debug builds for sh4 and mips architecture.
131
132         * dfg/DFGUseKind.h:
133         (JSC::DFG::isNumerical):
134         (JSC::DFG::isDouble):
135
136 2013-08-15  Filip Pizlo  <fpizlo@apple.com>
137
138         http://trac.webkit.org/changeset/154120 accidentally changed DFGCapabilities to read the resolve type from operand 4, not 3; it should be 3.
139
140         Rubber stamped by Oliver Hunt.
141         
142         This was causing some test crashes for me.
143
144         * dfg/DFGCapabilities.cpp:
145         (JSC::DFG::capabilityLevel):
146
147 2013-08-15  Brent Fulgham  <bfulgham@apple.com>
148
149         [Windows] Clear up improper export declaration.
150
151         * runtime/ArrayBufferView.h:
152
153 2013-08-15  Filip Pizlo  <fpizlo@apple.com>
154
155         Unreviewed, remove some unnecessary periods from exceptions.
156
157         * runtime/JSDataViewPrototype.cpp:
158         (JSC::getData):
159         (JSC::setData):
160
161 2013-08-15  Filip Pizlo  <fpizlo@apple.com>
162
163         Unreviewed, fix 32-bit build.
164
165         * dfg/DFGSpeculativeJIT32_64.cpp:
166         (JSC::DFG::SpeculativeJIT::compile):
167
168 2013-08-14  Filip Pizlo  <fpizlo@apple.com>
169
170         Typed arrays should be rewritten
171         https://bugs.webkit.org/show_bug.cgi?id=119064
172
173         Reviewed by Oliver Hunt.
174         
175         Typed arrays were previously deficient in several major ways:
176         
177         - They were defined separately in WebCore and in the jsc shell. The two
178           implementations were different, and the jsc shell one was basically wrong.
179           The WebCore one was quite awful, also.
180         
181         - Typed arrays were not visible to the JIT except through some weird hooks.
182           For example, the JIT could not ask "what is the Structure that this typed
183           array would have if I just allocated it from this global object". Also,
184           it was difficult to wire any of the typed array intrinsics, because most
185           of the functionality wasn't visible anywhere in JSC.
186         
187         - Typed array allocation was brain-dead. Allocating a typed array involved
188           two JS objects, two GC weak handles, and three malloc allocations.
189         
190         - Neutering. It involved keeping tabs on all native views but not the view
191           wrappers, even though the native views can autoneuter just by asking the
192           buffer if it was neutered anytime you touch them; while the JS view
193           wrappers are the ones that you really want to reach out to.
194         
195         - Common case-ing. Most typed arrays have one buffer and one view, and
196           usually nobody touches the buffer. Yet we created all of that stuff
197           anyway, using data structures optimized for the case where you had a lot
198           of views.
199         
200         - Semantic goofs. Typed arrays should, in the future, behave like ES
201           features rather than DOM features, for example when it comes to exceptions.
202           Firefox already does this and I agree with them.
203         
204         This patch cleanses our codebase of these sins:
205         
206         - Typed arrays are almost entirely defined in JSC. Only the lifecycle
207           management of native references to buffers is left to WebCore.
208         
209         - Allocating a typed array requires either two GC allocations (a cell and a
210           copied storage vector) or one GC allocation, a malloc allocation, and a
211           weak handle (a cell and a malloc'd storage vector, plus a finalizer for the
212           latter). The latter is only used for oversize arrays. Remember that before
213           it was 7 allocations no matter what.
214         
215         - Typed arrays require just 4 words of overhead: Structure*, Butterfly*,
216           mode/length, void* vector. Before it was a lot more than that - remember,
217           there were five additional objects that did absolutely nothing for anybody.
218         
219         - Native views aren't tracked by the buffer, or by the wrappers. They are
220           transient. In the future we'll probably switch to not even having them be
221           malloc'd.
222         
223         - Native array buffers have an efficient way of tracking all of their JS view
224           wrappers, both for neutering, and for lifecycle management. The GC
225           special-cases native array buffers. This saves a bunch of grief; for example
226           it means that a JS view wrapper can refer to its buffer via the butterfly,
227           which would be dead by the time we went to finalize.
228         
229         - Typed array semantics now match Firefox, which also happens to be where the
230           standards are going. The discussion on webkit-dev seemed to confirm that
231           Chrome is also heading in this direction. This includes making
232           Uint8ClampedArray not a subtype of Uint8Array, and getting rid of
233           ArrayBufferView as a JS-visible construct.
234         
235         This is up to a 10x speed-up on programs that allocate a lot of typed arrays.
236         It's a 1% speed-up on Octane. It also opens up a bunch of possibilities for
237         further typed array optimizations in the JSC JITs, including inlining typed
238         array allocation, inlining more of the accessors, reducing the cost of type
239         checks, etc.
240         
241         An additional property of this patch is that typed arrays are mostly
242         implemented using templates. This deduplicates a bunch of code, but does mean
243         that we need some hacks for exporting s_info's of template classes. See
244         JSGenericTypedArrayView.h and JSTypedArrays.cpp. Those hacks are fairly
245         low-impact compared to code duplication.
246         
247         Automake work courtesy of Zan Dobersek <zdobersek@igalia.com>.
248
249         * CMakeLists.txt:
250         * DerivedSources.make:
251         * GNUmakefile.list.am:
252         * JSCTypedArrayStubs.h: Removed.
253         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
254         * JavaScriptCore.xcodeproj/project.pbxproj:
255         * Target.pri:
256         * bytecode/ByValInfo.h:
257         (JSC::hasOptimizableIndexingForClassInfo):
258         (JSC::jitArrayModeForClassInfo):
259         (JSC::typedArrayTypeForJITArrayMode):
260         * bytecode/SpeculatedType.cpp:
261         (JSC::speculationFromClassInfo):
262         * dfg/DFGArrayMode.cpp:
263         (JSC::DFG::toTypedArrayType):
264         * dfg/DFGArrayMode.h:
265         (JSC::DFG::ArrayMode::typedArrayType):
266         * dfg/DFGSpeculativeJIT.cpp:
267         (JSC::DFG::SpeculativeJIT::checkArray):
268         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
269         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
270         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
271         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
272         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
273         (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
274         * dfg/DFGSpeculativeJIT.h:
275         * dfg/DFGSpeculativeJIT32_64.cpp:
276         (JSC::DFG::SpeculativeJIT::compile):
277         * dfg/DFGSpeculativeJIT64.cpp:
278         (JSC::DFG::SpeculativeJIT::compile):
279         * heap/CopyToken.h:
280         * heap/DeferGC.h:
281         (JSC::DeferGCForAWhile::DeferGCForAWhile):
282         (JSC::DeferGCForAWhile::~DeferGCForAWhile):
283         * heap/GCIncomingRefCounted.h: Added.
284         (JSC::GCIncomingRefCounted::GCIncomingRefCounted):
285         (JSC::GCIncomingRefCounted::~GCIncomingRefCounted):
286         (JSC::GCIncomingRefCounted::numberOfIncomingReferences):
287         (JSC::GCIncomingRefCounted::incomingReferenceAt):
288         (JSC::GCIncomingRefCounted::singletonFlag):
289         (JSC::GCIncomingRefCounted::hasVectorOfCells):
290         (JSC::GCIncomingRefCounted::hasAnyIncoming):
291         (JSC::GCIncomingRefCounted::hasSingleton):
292         (JSC::GCIncomingRefCounted::singleton):
293         (JSC::GCIncomingRefCounted::vectorOfCells):
294         * heap/GCIncomingRefCountedInlines.h: Added.
295         (JSC::::addIncomingReference):
296         (JSC::::filterIncomingReferences):
297         * heap/GCIncomingRefCountedSet.h: Added.
298         (JSC::GCIncomingRefCountedSet::size):
299         * heap/GCIncomingRefCountedSetInlines.h: Added.
300         (JSC::::GCIncomingRefCountedSet):
301         (JSC::::~GCIncomingRefCountedSet):
302         (JSC::::addReference):
303         (JSC::::sweep):
304         (JSC::::removeAll):
305         (JSC::::removeDead):
306         * heap/Heap.cpp:
307         (JSC::Heap::addReference):
308         (JSC::Heap::extraSize):
309         (JSC::Heap::size):
310         (JSC::Heap::capacity):
311         (JSC::Heap::collect):
312         (JSC::Heap::decrementDeferralDepth):
313         (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
314         * heap/Heap.h:
315         * interpreter/CallFrame.h:
316         (JSC::ExecState::dataViewTable):
317         * jit/JIT.h:
318         * jit/JITPropertyAccess.cpp:
319         (JSC::JIT::privateCompileGetByVal):
320         (JSC::JIT::privateCompilePutByVal):
321         (JSC::JIT::emitIntTypedArrayGetByVal):
322         (JSC::JIT::emitFloatTypedArrayGetByVal):
323         (JSC::JIT::emitIntTypedArrayPutByVal):
324         (JSC::JIT::emitFloatTypedArrayPutByVal):
325         * jsc.cpp:
326         (GlobalObject::finishCreation):
327         * runtime/ArrayBuffer.cpp:
328         (JSC::ArrayBuffer::transfer):
329         * runtime/ArrayBuffer.h:
330         (JSC::ArrayBuffer::createAdopted):
331         (JSC::ArrayBuffer::ArrayBuffer):
332         (JSC::ArrayBuffer::gcSizeEstimateInBytes):
333         (JSC::ArrayBuffer::pin):
334         (JSC::ArrayBuffer::unpin):
335         (JSC::ArrayBufferContents::tryAllocate):
336         * runtime/ArrayBufferView.cpp:
337         (JSC::ArrayBufferView::ArrayBufferView):
338         (JSC::ArrayBufferView::~ArrayBufferView):
339         (JSC::ArrayBufferView::setNeuterable):
340         * runtime/ArrayBufferView.h:
341         (JSC::ArrayBufferView::isNeutered):
342         (JSC::ArrayBufferView::buffer):
343         (JSC::ArrayBufferView::baseAddress):
344         (JSC::ArrayBufferView::byteOffset):
345         (JSC::ArrayBufferView::verifySubRange):
346         (JSC::ArrayBufferView::clampOffsetAndNumElements):
347         (JSC::ArrayBufferView::calculateOffsetAndLength):
348         * runtime/ClassInfo.h:
349         * runtime/CommonIdentifiers.h:
350         * runtime/DataView.cpp: Added.
351         (JSC::DataView::DataView):
352         (JSC::DataView::create):
353         (JSC::DataView::wrap):
354         * runtime/DataView.h: Added.
355         (JSC::DataView::byteLength):
356         (JSC::DataView::getType):
357         (JSC::DataView::get):
358         (JSC::DataView::set):
359         * runtime/Float32Array.h:
360         * runtime/Float64Array.h:
361         * runtime/GenericTypedArrayView.h: Added.
362         (JSC::GenericTypedArrayView::data):
363         (JSC::GenericTypedArrayView::set):
364         (JSC::GenericTypedArrayView::setRange):
365         (JSC::GenericTypedArrayView::zeroRange):
366         (JSC::GenericTypedArrayView::zeroFill):
367         (JSC::GenericTypedArrayView::length):
368         (JSC::GenericTypedArrayView::byteLength):
369         (JSC::GenericTypedArrayView::item):
370         (JSC::GenericTypedArrayView::checkInboundData):
371         (JSC::GenericTypedArrayView::getType):
372         * runtime/GenericTypedArrayViewInlines.h: Added.
373         (JSC::::GenericTypedArrayView):
374         (JSC::::create):
375         (JSC::::createUninitialized):
376         (JSC::::subarray):
377         (JSC::::wrap):
378         * runtime/IndexingHeader.h:
379         (JSC::IndexingHeader::arrayBuffer):
380         (JSC::IndexingHeader::setArrayBuffer):
381         * runtime/Int16Array.h:
382         * runtime/Int32Array.h:
383         * runtime/Int8Array.h:
384         * runtime/JSArrayBuffer.cpp: Added.
385         (JSC::JSArrayBuffer::JSArrayBuffer):
386         (JSC::JSArrayBuffer::finishCreation):
387         (JSC::JSArrayBuffer::create):
388         (JSC::JSArrayBuffer::createStructure):
389         (JSC::JSArrayBuffer::getOwnPropertySlot):
390         (JSC::JSArrayBuffer::getOwnPropertyDescriptor):
391         (JSC::JSArrayBuffer::put):
392         (JSC::JSArrayBuffer::defineOwnProperty):
393         (JSC::JSArrayBuffer::deleteProperty):
394         (JSC::JSArrayBuffer::getOwnNonIndexPropertyNames):
395         * runtime/JSArrayBuffer.h: Added.
396         (JSC::JSArrayBuffer::impl):
397         (JSC::toArrayBuffer):
398         * runtime/JSArrayBufferConstructor.cpp: Added.
399         (JSC::JSArrayBufferConstructor::JSArrayBufferConstructor):
400         (JSC::JSArrayBufferConstructor::finishCreation):
401         (JSC::JSArrayBufferConstructor::create):
402         (JSC::JSArrayBufferConstructor::createStructure):
403         (JSC::constructArrayBuffer):
404         (JSC::JSArrayBufferConstructor::getConstructData):
405         (JSC::JSArrayBufferConstructor::getCallData):
406         * runtime/JSArrayBufferConstructor.h: Added.
407         * runtime/JSArrayBufferPrototype.cpp: Added.
408         (JSC::arrayBufferProtoFuncSlice):
409         (JSC::JSArrayBufferPrototype::JSArrayBufferPrototype):
410         (JSC::JSArrayBufferPrototype::finishCreation):
411         (JSC::JSArrayBufferPrototype::create):
412         (JSC::JSArrayBufferPrototype::createStructure):
413         * runtime/JSArrayBufferPrototype.h: Added.
414         * runtime/JSArrayBufferView.cpp: Added.
415         (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
416         (JSC::JSArrayBufferView::JSArrayBufferView):
417         (JSC::JSArrayBufferView::finishCreation):
418         (JSC::JSArrayBufferView::getOwnPropertySlot):
419         (JSC::JSArrayBufferView::getOwnPropertyDescriptor):
420         (JSC::JSArrayBufferView::put):
421         (JSC::JSArrayBufferView::defineOwnProperty):
422         (JSC::JSArrayBufferView::deleteProperty):
423         (JSC::JSArrayBufferView::getOwnNonIndexPropertyNames):
424         (JSC::JSArrayBufferView::finalize):
425         * runtime/JSArrayBufferView.h: Added.
426         (JSC::JSArrayBufferView::sizeOf):
427         (JSC::JSArrayBufferView::ConstructionContext::operator!):
428         (JSC::JSArrayBufferView::ConstructionContext::structure):
429         (JSC::JSArrayBufferView::ConstructionContext::vector):
430         (JSC::JSArrayBufferView::ConstructionContext::length):
431         (JSC::JSArrayBufferView::ConstructionContext::mode):
432         (JSC::JSArrayBufferView::ConstructionContext::butterfly):
433         (JSC::JSArrayBufferView::mode):
434         (JSC::JSArrayBufferView::vector):
435         (JSC::JSArrayBufferView::length):
436         (JSC::JSArrayBufferView::offsetOfVector):
437         (JSC::JSArrayBufferView::offsetOfLength):
438         (JSC::JSArrayBufferView::offsetOfMode):
439         * runtime/JSArrayBufferViewInlines.h: Added.
440         (JSC::JSArrayBufferView::slowDownAndWasteMemoryIfNecessary):
441         (JSC::JSArrayBufferView::buffer):
442         (JSC::JSArrayBufferView::impl):
443         (JSC::JSArrayBufferView::neuter):
444         (JSC::JSArrayBufferView::byteOffset):
445         * runtime/JSCell.cpp:
446         (JSC::JSCell::slowDownAndWasteMemory):
447         (JSC::JSCell::getTypedArrayImpl):
448         * runtime/JSCell.h:
449         * runtime/JSDataView.cpp: Added.
450         (JSC::JSDataView::JSDataView):
451         (JSC::JSDataView::create):
452         (JSC::JSDataView::createUninitialized):
453         (JSC::JSDataView::set):
454         (JSC::JSDataView::typedImpl):
455         (JSC::JSDataView::getOwnPropertySlot):
456         (JSC::JSDataView::getOwnPropertyDescriptor):
457         (JSC::JSDataView::slowDownAndWasteMemory):
458         (JSC::JSDataView::getTypedArrayImpl):
459         (JSC::JSDataView::createStructure):
460         * runtime/JSDataView.h: Added.
461         * runtime/JSDataViewPrototype.cpp: Added.
462         (JSC::JSDataViewPrototype::JSDataViewPrototype):
463         (JSC::JSDataViewPrototype::create):
464         (JSC::JSDataViewPrototype::createStructure):
465         (JSC::JSDataViewPrototype::getOwnPropertySlot):
466         (JSC::JSDataViewPrototype::getOwnPropertyDescriptor):
467         (JSC::getData):
468         (JSC::setData):
469         (JSC::dataViewProtoFuncGetInt8):
470         (JSC::dataViewProtoFuncGetInt16):
471         (JSC::dataViewProtoFuncGetInt32):
472         (JSC::dataViewProtoFuncGetUint8):
473         (JSC::dataViewProtoFuncGetUint16):
474         (JSC::dataViewProtoFuncGetUint32):
475         (JSC::dataViewProtoFuncGetFloat32):
476         (JSC::dataViewProtoFuncGetFloat64):
477         (JSC::dataViewProtoFuncSetInt8):
478         (JSC::dataViewProtoFuncSetInt16):
479         (JSC::dataViewProtoFuncSetInt32):
480         (JSC::dataViewProtoFuncSetUint8):
481         (JSC::dataViewProtoFuncSetUint16):
482         (JSC::dataViewProtoFuncSetUint32):
483         (JSC::dataViewProtoFuncSetFloat32):
484         (JSC::dataViewProtoFuncSetFloat64):
485         * runtime/JSDataViewPrototype.h: Added.
486         * runtime/JSFloat32Array.h: Added.
487         * runtime/JSFloat64Array.h: Added.
488         * runtime/JSGenericTypedArrayView.h: Added.
489         (JSC::JSGenericTypedArrayView::byteLength):
490         (JSC::JSGenericTypedArrayView::byteSize):
491         (JSC::JSGenericTypedArrayView::typedVector):
492         (JSC::JSGenericTypedArrayView::canGetIndexQuickly):
493         (JSC::JSGenericTypedArrayView::canSetIndexQuickly):
494         (JSC::JSGenericTypedArrayView::getIndexQuicklyAsNativeValue):
495         (JSC::JSGenericTypedArrayView::getIndexQuicklyAsDouble):
496         (JSC::JSGenericTypedArrayView::getIndexQuickly):
497         (JSC::JSGenericTypedArrayView::setIndexQuicklyToNativeValue):
498         (JSC::JSGenericTypedArrayView::setIndexQuicklyToDouble):
499         (JSC::JSGenericTypedArrayView::setIndexQuickly):
500         (JSC::JSGenericTypedArrayView::canAccessRangeQuickly):
501         (JSC::JSGenericTypedArrayView::typedImpl):
502         (JSC::JSGenericTypedArrayView::createStructure):
503         (JSC::JSGenericTypedArrayView::info):
504         (JSC::toNativeTypedView):
505         * runtime/JSGenericTypedArrayViewConstructor.h: Added.
506         * runtime/JSGenericTypedArrayViewConstructorInlines.h: Added.
507         (JSC::::JSGenericTypedArrayViewConstructor):
508         (JSC::::finishCreation):
509         (JSC::::create):
510         (JSC::::createStructure):
511         (JSC::constructGenericTypedArrayView):
512         (JSC::::getConstructData):
513         (JSC::::getCallData):
514         * runtime/JSGenericTypedArrayViewInlines.h: Added.
515         (JSC::::JSGenericTypedArrayView):
516         (JSC::::create):
517         (JSC::::createUninitialized):
518         (JSC::::validateRange):
519         (JSC::::setWithSpecificType):
520         (JSC::::set):
521         (JSC::::getOwnPropertySlot):
522         (JSC::::getOwnPropertyDescriptor):
523         (JSC::::put):
524         (JSC::::defineOwnProperty):
525         (JSC::::deleteProperty):
526         (JSC::::getOwnPropertySlotByIndex):
527         (JSC::::putByIndex):
528         (JSC::::deletePropertyByIndex):
529         (JSC::::getOwnNonIndexPropertyNames):
530         (JSC::::getOwnPropertyNames):
531         (JSC::::visitChildren):
532         (JSC::::copyBackingStore):
533         (JSC::::slowDownAndWasteMemory):
534         (JSC::::getTypedArrayImpl):
535         * runtime/JSGenericTypedArrayViewPrototype.h: Added.
536         * runtime/JSGenericTypedArrayViewPrototypeInlines.h: Added.
537         (JSC::genericTypedArrayViewProtoFuncSet):
538         (JSC::genericTypedArrayViewProtoFuncSubarray):
539         (JSC::::JSGenericTypedArrayViewPrototype):
540         (JSC::::finishCreation):
541         (JSC::::create):
542         (JSC::::createStructure):
543         * runtime/JSGlobalObject.cpp:
544         (JSC::JSGlobalObject::reset):
545         (JSC::JSGlobalObject::visitChildren):
546         * runtime/JSGlobalObject.h:
547         (JSC::JSGlobalObject::arrayBufferPrototype):
548         (JSC::JSGlobalObject::arrayBufferStructure):
549         (JSC::JSGlobalObject::typedArrayStructure):
550         * runtime/JSInt16Array.h: Added.
551         * runtime/JSInt32Array.h: Added.
552         * runtime/JSInt8Array.h: Added.
553         * runtime/JSTypedArrayConstructors.cpp: Added.
554         * runtime/JSTypedArrayConstructors.h: Added.
555         * runtime/JSTypedArrayPrototypes.cpp: Added.
556         * runtime/JSTypedArrayPrototypes.h: Added.
557         * runtime/JSTypedArrays.cpp: Added.
558         * runtime/JSTypedArrays.h: Added.
559         * runtime/JSUint16Array.h: Added.
560         * runtime/JSUint32Array.h: Added.
561         * runtime/JSUint8Array.h: Added.
562         * runtime/JSUint8ClampedArray.h: Added.
563         * runtime/Operations.h:
564         * runtime/Options.h:
565         * runtime/SimpleTypedArrayController.cpp: Added.
566         (JSC::SimpleTypedArrayController::SimpleTypedArrayController):
567         (JSC::SimpleTypedArrayController::~SimpleTypedArrayController):
568         (JSC::SimpleTypedArrayController::toJS):
569         * runtime/SimpleTypedArrayController.h: Added.
570         * runtime/Structure.h:
571         (JSC::Structure::couldHaveIndexingHeader):
572         * runtime/StructureInlines.h:
573         (JSC::Structure::hasIndexingHeader):
574         * runtime/TypedArrayAdaptors.h: Added.
575         (JSC::IntegralTypedArrayAdaptor::toNative):
576         (JSC::IntegralTypedArrayAdaptor::toJSValue):
577         (JSC::IntegralTypedArrayAdaptor::toDouble):
578         (JSC::FloatTypedArrayAdaptor::toNative):
579         (JSC::FloatTypedArrayAdaptor::toJSValue):
580         (JSC::FloatTypedArrayAdaptor::toDouble):
581         (JSC::Uint8ClampedAdaptor::toNative):
582         (JSC::Uint8ClampedAdaptor::toJSValue):
583         (JSC::Uint8ClampedAdaptor::toDouble):
584         (JSC::Uint8ClampedAdaptor::clamp):
585         * runtime/TypedArrayController.cpp: Added.
586         (JSC::TypedArrayController::TypedArrayController):
587         (JSC::TypedArrayController::~TypedArrayController):
588         * runtime/TypedArrayController.h: Added.
589         * runtime/TypedArrayDescriptor.h: Removed.
590         * runtime/TypedArrayInlines.h: Added.
591         * runtime/TypedArrayType.cpp: Added.
592         (JSC::classInfoForType):
593         (WTF::printInternal):
594         * runtime/TypedArrayType.h: Added.
595         (JSC::toIndex):
596         (JSC::isTypedView):
597         (JSC::elementSize):
598         (JSC::isInt):
599         (JSC::isFloat):
600         (JSC::isSigned):
601         (JSC::isClamped):
602         * runtime/TypedArrays.h: Added.
603         * runtime/Uint16Array.h:
604         * runtime/Uint32Array.h:
605         * runtime/Uint8Array.h:
606         * runtime/Uint8ClampedArray.h:
607         * runtime/VM.cpp:
608         (JSC::VM::VM):
609         (JSC::VM::~VM):
610         * runtime/VM.h:
611
612 2013-08-15  Oliver Hunt  <oliver@apple.com>
613
614         <https://webkit.org/b/119830> Assigning to a readonly global results in DFG byte code parse failure
615
616         Reviewed by Filip Pizlo.
617
618         Make sure dfgCapabilities doesn't report a Dynamic put as
619         being compilable when we don't actually support it.  
620
621         * bytecode/CodeBlock.cpp:
622         (JSC::CodeBlock::dumpBytecode):
623         * dfg/DFGCapabilities.cpp:
624         (JSC::DFG::capabilityLevel):
625
626 2013-08-15  Brent Fulgham  <bfulgham@apple.com>
627
628         [Windows] Incorrect DLL Linkage for JSC ArrayBuffer and ArrayBufferView
629         https://bugs.webkit.org/show_bug.cgi?id=119847
630
631         Reviewed by Oliver Hunt.
632
633         * runtime/ArrayBuffer.h: Switch from WTF_EXPORT_PRIVATE to JS_EXPORT_PRIVATE
634         * runtime/ArrayBufferView.h: Ditto.
635
636 2013-08-15  Gavin Barraclough  <barraclough@apple.com>
637
638         https://bugs.webkit.org/show_bug.cgi?id=119843
639         PropertySlot::setValue is ambiguous
640
641         Reviewed by Geoff Garen.
642
643         There are three different versions of PropertySlot::setValue, one for cacheable properties, and two that are used interchangeably and inconsistently.
644         The problematic variants are the ones that just take a value, and one that takes a value and also the object containing the property.
645         Unify on always providing the object, and remove the version that just takes a value.
646         This always works except for JSString, where we optimize out the object (logically we should be instantiating a temporary StringObject on every property access).
647         Provide a version of setValue that takes a JSString as the owner of the property.
648         We won't store this, but it makes it clear that this interface should only be used from JSString.
649
650         * API/JSCallbackObjectFunctions.h:
651         (JSC::::getOwnPropertySlot):
652         * JSCTypedArrayStubs.h:
653         * runtime/Arguments.cpp:
654         (JSC::Arguments::getOwnPropertySlotByIndex):
655         (JSC::Arguments::getOwnPropertySlot):
656         * runtime/JSActivation.cpp:
657         (JSC::JSActivation::symbolTableGet):
658         (JSC::JSActivation::getOwnPropertySlot):
659         * runtime/JSArray.cpp:
660         (JSC::JSArray::getOwnPropertySlot):
661         * runtime/JSObject.cpp:
662         (JSC::JSObject::getOwnPropertySlotByIndex):
663         * runtime/JSString.h:
664         (JSC::JSString::getStringPropertySlot):
665         * runtime/JSSymbolTableObject.h:
666         (JSC::symbolTableGet):
667         * runtime/SparseArrayValueMap.cpp:
668         (JSC::SparseArrayEntry::get):
669             - Pass object containing property to PropertySlot::setValue
670         * runtime/PropertySlot.h:
671         (JSC::PropertySlot::setValue):
672             - Logically, the base of a string property access is a temporary StringObject, but we optimize that away.
673         (JSC::PropertySlot::setUndefined):
674             - removed setValue(JSValue), added setValue(JSString*, JSValue)
675
676 2013-08-15  Oliver Hunt  <oliver@apple.com>
677
678         Remove bogus assertion.
679
680         RS=Filip Pizlo
681
682         * dfg/DFGAbstractInterpreterInlines.h:
683         (JSC::DFG::::executeEffects):
684
685 2013-08-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>
686
687         REGRESSION(r148790) Made 7 tests fail on x86 32bit
688         https://bugs.webkit.org/show_bug.cgi?id=114913
689
690         Reviewed by Filip Pizlo.
691
692         The X87 register was not freed before some calls. Instead
693         of inserting resetX87Registers to the last call sites,
694         the two X87 registers are now freed in every call.
695
696         * llint/LowLevelInterpreter32_64.asm:
697         * llint/LowLevelInterpreter64.asm:
698         * offlineasm/instructions.rb:
699         * offlineasm/x86.rb:
700
701 2013-08-14  Michael Saboff  <msaboff@apple.com>
702
703         Fixed jit on Win64.
704         https://bugs.webkit.org/show_bug.cgi?id=119601
705
706         Reviewed by Oliver Hunt.
707
708         * jit/JITStubsMSVC64.asm: Added ctiVMThrowTrampolineSlowpath implementation.
709         * jit/JSInterfaceJIT.h: Added thirdArgumentRegister.
710         * jit/SlowPathCall.h:
711         (JSC::JITSlowPathCall::call): Added correct calling convention for Win64.
712
713 2013-08-14  Alex Christensen  <achristensen@apple.com>
714
715         Compile fix for Win64 with jit disabled.
716         https://bugs.webkit.org/show_bug.cgi?id=119804
717
718         Reviewed by Michael Saboff.
719
720         * offlineasm/cloop.rb: Added std:: before isnan.
721
722 2013-08-14  Julien Brianceau  <jbrianceau@nds.com>
723
724         DFG_JIT implementation for sh4 architecture.
725         https://bugs.webkit.org/show_bug.cgi?id=119737
726
727         Reviewed by Oliver Hunt.
728
729         * assembler/MacroAssemblerSH4.h:
730         (JSC::MacroAssemblerSH4::invert):
731         (JSC::MacroAssemblerSH4::add32):
732         (JSC::MacroAssemblerSH4::and32):
733         (JSC::MacroAssemblerSH4::lshift32):
734         (JSC::MacroAssemblerSH4::mul32):
735         (JSC::MacroAssemblerSH4::or32):
736         (JSC::MacroAssemblerSH4::rshift32):
737         (JSC::MacroAssemblerSH4::sub32):
738         (JSC::MacroAssemblerSH4::xor32):
739         (JSC::MacroAssemblerSH4::store32):
740         (JSC::MacroAssemblerSH4::swapDouble):
741         (JSC::MacroAssemblerSH4::storeDouble):
742         (JSC::MacroAssemblerSH4::subDouble):
743         (JSC::MacroAssemblerSH4::mulDouble):
744         (JSC::MacroAssemblerSH4::divDouble):
745         (JSC::MacroAssemblerSH4::negateDouble):
746         (JSC::MacroAssemblerSH4::zeroExtend32ToPtr):
747         (JSC::MacroAssemblerSH4::branchTruncateDoubleToUint32):
748         (JSC::MacroAssemblerSH4::truncateDoubleToUint32):
749         (JSC::MacroAssemblerSH4::swap):
750         (JSC::MacroAssemblerSH4::jump):
751         (JSC::MacroAssemblerSH4::branchNeg32):
752         (JSC::MacroAssemblerSH4::branchAdd32):
753         (JSC::MacroAssemblerSH4::branchMul32):
754         (JSC::MacroAssemblerSH4::urshift32):
755         * assembler/SH4Assembler.h:
756         (JSC::SH4Assembler::SH4Assembler):
757         (JSC::SH4Assembler::labelForWatchpoint):
758         (JSC::SH4Assembler::label):
759         (JSC::SH4Assembler::debugOffset):
760         * dfg/DFGAssemblyHelpers.h:
761         (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
762         (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
763         (JSC::DFG::AssemblyHelpers::debugCall):
764         * dfg/DFGCCallHelpers.h:
765         (JSC::DFG::CCallHelpers::setupArguments):
766         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
767         * dfg/DFGFPRInfo.h:
768         (JSC::DFG::FPRInfo::toRegister):
769         (JSC::DFG::FPRInfo::toIndex):
770         (JSC::DFG::FPRInfo::debugName):
771         * dfg/DFGGPRInfo.h:
772         (JSC::DFG::GPRInfo::toRegister):
773         (JSC::DFG::GPRInfo::toIndex):
774         (JSC::DFG::GPRInfo::debugName):
775         * dfg/DFGOperations.cpp:
776         * dfg/DFGSpeculativeJIT.h:
777         (JSC::DFG::SpeculativeJIT::callOperation):
778         * jit/JITStubs.h:
779         * jit/JITStubsSH4.h:
780
781 2013-08-13  Filip Pizlo  <fpizlo@apple.com>
782
783         Unreviewed, fix build.
784
785         * API/JSValue.mm:
786         (isDate):
787         (isArray):
788         * API/JSWrapperMap.mm:
789         (tryUnwrapObjcObject):
790         * API/ObjCCallbackFunction.mm:
791         (tryUnwrapBlock):
792
793 2013-08-13  Filip Pizlo  <fpizlo@apple.com>
794
795         Foo::s_info should be Foo::info(), so that you can change how the s_info is actually linked
796         https://bugs.webkit.org/show_bug.cgi?id=119770
797
798         Reviewed by Mark Hahnenberg.
799
800         * API/JSCallbackConstructor.cpp:
801         (JSC::JSCallbackConstructor::finishCreation):
802         * API/JSCallbackConstructor.h:
803         (JSC::JSCallbackConstructor::createStructure):
804         * API/JSCallbackFunction.cpp:
805         (JSC::JSCallbackFunction::finishCreation):
806         * API/JSCallbackFunction.h:
807         (JSC::JSCallbackFunction::createStructure):
808         * API/JSCallbackObject.cpp:
809         (JSC::::createStructure):
810         * API/JSCallbackObject.h:
811         (JSC::JSCallbackObject::visitChildren):
812         * API/JSCallbackObjectFunctions.h:
813         (JSC::::asCallbackObject):
814         (JSC::::finishCreation):
815         * API/JSObjectRef.cpp:
816         (JSObjectGetPrivate):
817         (JSObjectSetPrivate):
818         (JSObjectGetPrivateProperty):
819         (JSObjectSetPrivateProperty):
820         (JSObjectDeletePrivateProperty):
821         * API/JSValueRef.cpp:
822         (JSValueIsObjectOfClass):
823         * API/JSWeakObjectMapRefPrivate.cpp:
824         * API/ObjCCallbackFunction.h:
825         (JSC::ObjCCallbackFunction::createStructure):
826         * JSCTypedArrayStubs.h:
827         * bytecode/CallLinkStatus.cpp:
828         (JSC::CallLinkStatus::CallLinkStatus):
829         (JSC::CallLinkStatus::function):
830         (JSC::CallLinkStatus::internalFunction):
831         * bytecode/CodeBlock.h:
832         (JSC::baselineCodeBlockForInlineCallFrame):
833         * bytecode/SpeculatedType.cpp:
834         (JSC::speculationFromClassInfo):
835         * bytecode/UnlinkedCodeBlock.cpp:
836         (JSC::UnlinkedFunctionExecutable::visitChildren):
837         (JSC::UnlinkedCodeBlock::visitChildren):
838         (JSC::UnlinkedProgramCodeBlock::visitChildren):
839         * bytecode/UnlinkedCodeBlock.h:
840         (JSC::UnlinkedFunctionExecutable::createStructure):
841         (JSC::UnlinkedProgramCodeBlock::createStructure):
842         (JSC::UnlinkedEvalCodeBlock::createStructure):
843         (JSC::UnlinkedFunctionCodeBlock::createStructure):
844         * debugger/Debugger.cpp:
845         * debugger/DebuggerActivation.cpp:
846         (JSC::DebuggerActivation::visitChildren):
847         * debugger/DebuggerActivation.h:
848         (JSC::DebuggerActivation::createStructure):
849         * debugger/DebuggerCallFrame.cpp:
850         (JSC::DebuggerCallFrame::functionName):
851         * dfg/DFGAbstractInterpreterInlines.h:
852         (JSC::DFG::::executeEffects):
853         * dfg/DFGByteCodeParser.cpp:
854         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
855         (JSC::DFG::ByteCodeParser::parseBlock):
856         * dfg/DFGFixupPhase.cpp:
857         (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
858         (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
859         * dfg/DFGGraph.cpp:
860         (JSC::DFG::Graph::dump):
861         * dfg/DFGGraph.h:
862         (JSC::DFG::Graph::isInternalFunctionConstant):
863         * dfg/DFGOperations.cpp:
864         * dfg/DFGSpeculativeJIT.cpp:
865         (JSC::DFG::SpeculativeJIT::checkArray):
866         (JSC::DFG::SpeculativeJIT::compileNewStringObject):
867         * dfg/DFGThunks.cpp:
868         (JSC::DFG::virtualForThunkGenerator):
869         * interpreter/Interpreter.cpp:
870         (JSC::loadVarargs):
871         * jsc.cpp:
872         (GlobalObject::createStructure):
873         * profiler/LegacyProfiler.cpp:
874         (JSC::LegacyProfiler::createCallIdentifier):
875         * runtime/Arguments.cpp:
876         (JSC::Arguments::visitChildren):
877         * runtime/Arguments.h:
878         (JSC::Arguments::createStructure):
879         (JSC::asArguments):
880         (JSC::Arguments::finishCreation):
881         * runtime/ArrayConstructor.cpp:
882         (JSC::arrayConstructorIsArray):
883         * runtime/ArrayConstructor.h:
884         (JSC::ArrayConstructor::createStructure):
885         * runtime/ArrayPrototype.cpp:
886         (JSC::ArrayPrototype::finishCreation):
887         (JSC::arrayProtoFuncConcat):
888         (JSC::attemptFastSort):
889         * runtime/ArrayPrototype.h:
890         (JSC::ArrayPrototype::createStructure):
891         * runtime/BooleanConstructor.h:
892         (JSC::BooleanConstructor::createStructure):
893         * runtime/BooleanObject.cpp:
894         (JSC::BooleanObject::finishCreation):
895         * runtime/BooleanObject.h:
896         (JSC::BooleanObject::createStructure):
897         (JSC::asBooleanObject):
898         * runtime/BooleanPrototype.cpp:
899         (JSC::BooleanPrototype::finishCreation):
900         (JSC::booleanProtoFuncToString):
901         (JSC::booleanProtoFuncValueOf):
902         * runtime/BooleanPrototype.h:
903         (JSC::BooleanPrototype::createStructure):
904         * runtime/DateConstructor.cpp:
905         (JSC::constructDate):
906         * runtime/DateConstructor.h:
907         (JSC::DateConstructor::createStructure):
908         * runtime/DateInstance.cpp:
909         (JSC::DateInstance::finishCreation):
910         * runtime/DateInstance.h:
911         (JSC::DateInstance::createStructure):
912         (JSC::asDateInstance):
913         * runtime/DatePrototype.cpp:
914         (JSC::formateDateInstance):
915         (JSC::DatePrototype::finishCreation):
916         (JSC::dateProtoFuncToISOString):
917         (JSC::dateProtoFuncToLocaleString):
918         (JSC::dateProtoFuncToLocaleDateString):
919         (JSC::dateProtoFuncToLocaleTimeString):
920         (JSC::dateProtoFuncGetTime):
921         (JSC::dateProtoFuncGetFullYear):
922         (JSC::dateProtoFuncGetUTCFullYear):
923         (JSC::dateProtoFuncGetMonth):
924         (JSC::dateProtoFuncGetUTCMonth):
925         (JSC::dateProtoFuncGetDate):
926         (JSC::dateProtoFuncGetUTCDate):
927         (JSC::dateProtoFuncGetDay):
928         (JSC::dateProtoFuncGetUTCDay):
929         (JSC::dateProtoFuncGetHours):
930         (JSC::dateProtoFuncGetUTCHours):
931         (JSC::dateProtoFuncGetMinutes):
932         (JSC::dateProtoFuncGetUTCMinutes):
933         (JSC::dateProtoFuncGetSeconds):
934         (JSC::dateProtoFuncGetUTCSeconds):
935         (JSC::dateProtoFuncGetMilliSeconds):
936         (JSC::dateProtoFuncGetUTCMilliseconds):
937         (JSC::dateProtoFuncGetTimezoneOffset):
938         (JSC::dateProtoFuncSetTime):
939         (JSC::setNewValueFromTimeArgs):
940         (JSC::setNewValueFromDateArgs):
941         (JSC::dateProtoFuncSetYear):
942         (JSC::dateProtoFuncGetYear):
943         * runtime/DatePrototype.h:
944         (JSC::DatePrototype::createStructure):
945         * runtime/Error.h:
946         (JSC::StrictModeTypeErrorFunction::createStructure):
947         * runtime/ErrorConstructor.h:
948         (JSC::ErrorConstructor::createStructure):
949         * runtime/ErrorInstance.cpp:
950         (JSC::ErrorInstance::finishCreation):
951         * runtime/ErrorInstance.h:
952         (JSC::ErrorInstance::createStructure):
953         * runtime/ErrorPrototype.cpp:
954         (JSC::ErrorPrototype::finishCreation):
955         * runtime/ErrorPrototype.h:
956         (JSC::ErrorPrototype::createStructure):
957         * runtime/ExceptionHelpers.cpp:
958         (JSC::isTerminatedExecutionException):
959         * runtime/ExceptionHelpers.h:
960         (JSC::TerminatedExecutionError::createStructure):
961         * runtime/Executable.cpp:
962         (JSC::EvalExecutable::visitChildren):
963         (JSC::ProgramExecutable::visitChildren):
964         (JSC::FunctionExecutable::visitChildren):
965         (JSC::ExecutableBase::hashFor):
966         * runtime/Executable.h:
967         (JSC::ExecutableBase::createStructure):
968         (JSC::NativeExecutable::createStructure):
969         (JSC::EvalExecutable::createStructure):
970         (JSC::ProgramExecutable::createStructure):
971         (JSC::FunctionExecutable::compileFor):
972         (JSC::FunctionExecutable::compileOptimizedFor):
973         (JSC::FunctionExecutable::createStructure):
974         * runtime/FunctionConstructor.h:
975         (JSC::FunctionConstructor::createStructure):
976         * runtime/FunctionPrototype.cpp:
977         (JSC::functionProtoFuncToString):
978         (JSC::functionProtoFuncApply):
979         (JSC::functionProtoFuncBind):
980         * runtime/FunctionPrototype.h:
981         (JSC::FunctionPrototype::createStructure):
982         * runtime/GetterSetter.cpp:
983         (JSC::GetterSetter::visitChildren):
984         * runtime/GetterSetter.h:
985         (JSC::GetterSetter::createStructure):
986         * runtime/InternalFunction.cpp:
987         (JSC::InternalFunction::finishCreation):
988         * runtime/InternalFunction.h:
989         (JSC::InternalFunction::createStructure):
990         (JSC::asInternalFunction):
991         * runtime/JSAPIValueWrapper.h:
992         (JSC::JSAPIValueWrapper::createStructure):
993         * runtime/JSActivation.cpp:
994         (JSC::JSActivation::visitChildren):
995         (JSC::JSActivation::argumentsGetter):
996         * runtime/JSActivation.h:
997         (JSC::JSActivation::createStructure):
998         (JSC::asActivation):
999         * runtime/JSArray.h:
1000         (JSC::JSArray::createStructure):
1001         (JSC::asArray):
1002         (JSC::isJSArray):
1003         * runtime/JSBoundFunction.cpp:
1004         (JSC::JSBoundFunction::finishCreation):
1005         (JSC::JSBoundFunction::visitChildren):
1006         * runtime/JSBoundFunction.h:
1007         (JSC::JSBoundFunction::createStructure):
1008         * runtime/JSCJSValue.cpp:
1009         (JSC::JSValue::dumpInContext):
1010         * runtime/JSCJSValueInlines.h:
1011         (JSC::JSValue::isFunction):
1012         * runtime/JSCell.h:
1013         (JSC::jsCast):
1014         (JSC::jsDynamicCast):
1015         * runtime/JSCellInlines.h:
1016         (JSC::allocateCell):
1017         * runtime/JSFunction.cpp:
1018         (JSC::JSFunction::finishCreation):
1019         (JSC::JSFunction::visitChildren):
1020         (JSC::skipOverBoundFunctions):
1021         (JSC::JSFunction::callerGetter):
1022         * runtime/JSFunction.h:
1023         (JSC::JSFunction::createStructure):
1024         * runtime/JSGlobalObject.cpp:
1025         (JSC::JSGlobalObject::visitChildren):
1026         (JSC::slowValidateCell):
1027         * runtime/JSGlobalObject.h:
1028         (JSC::JSGlobalObject::createStructure):
1029         * runtime/JSNameScope.cpp:
1030         (JSC::JSNameScope::visitChildren):
1031         * runtime/JSNameScope.h:
1032         (JSC::JSNameScope::createStructure):
1033         * runtime/JSNotAnObject.h:
1034         (JSC::JSNotAnObject::createStructure):
1035         * runtime/JSONObject.cpp:
1036         (JSC::JSONObject::finishCreation):
1037         (JSC::unwrapBoxedPrimitive):
1038         (JSC::Stringifier::Stringifier):
1039         (JSC::Stringifier::appendStringifiedValue):
1040         (JSC::Stringifier::Holder::Holder):
1041         (JSC::Walker::walk):
1042         (JSC::JSONProtoFuncStringify):
1043         * runtime/JSONObject.h:
1044         (JSC::JSONObject::createStructure):
1045         * runtime/JSObject.cpp:
1046         (JSC::getCallableObjectSlow):
1047         (JSC::JSObject::visitChildren):
1048         (JSC::JSObject::copyBackingStore):
1049         (JSC::JSFinalObject::visitChildren):
1050         (JSC::JSObject::ensureInt32Slow):
1051         (JSC::JSObject::ensureDoubleSlow):
1052         (JSC::JSObject::ensureContiguousSlow):
1053         (JSC::JSObject::ensureArrayStorageSlow):
1054         * runtime/JSObject.h:
1055         (JSC::JSObject::finishCreation):
1056         (JSC::JSObject::createStructure):
1057         (JSC::JSNonFinalObject::createStructure):
1058         (JSC::JSFinalObject::createStructure):
1059         (JSC::isJSFinalObject):
1060         * runtime/JSPropertyNameIterator.cpp:
1061         (JSC::JSPropertyNameIterator::visitChildren):
1062         * runtime/JSPropertyNameIterator.h:
1063         (JSC::JSPropertyNameIterator::createStructure):
1064         * runtime/JSProxy.cpp:
1065         (JSC::JSProxy::visitChildren):
1066         * runtime/JSProxy.h:
1067         (JSC::JSProxy::createStructure):
1068         * runtime/JSScope.cpp:
1069         (JSC::JSScope::visitChildren):
1070         * runtime/JSSegmentedVariableObject.cpp:
1071         (JSC::JSSegmentedVariableObject::visitChildren):
1072         * runtime/JSString.h:
1073         (JSC::JSString::createStructure):
1074         (JSC::isJSString):
1075         * runtime/JSSymbolTableObject.cpp:
1076         (JSC::JSSymbolTableObject::visitChildren):
1077         * runtime/JSVariableObject.h:
1078         * runtime/JSWithScope.cpp:
1079         (JSC::JSWithScope::visitChildren):
1080         * runtime/JSWithScope.h:
1081         (JSC::JSWithScope::createStructure):
1082         * runtime/JSWrapperObject.cpp:
1083         (JSC::JSWrapperObject::visitChildren):
1084         * runtime/JSWrapperObject.h:
1085         (JSC::JSWrapperObject::createStructure):
1086         * runtime/MathObject.cpp:
1087         (JSC::MathObject::finishCreation):
1088         * runtime/MathObject.h:
1089         (JSC::MathObject::createStructure):
1090         * runtime/NameConstructor.h:
1091         (JSC::NameConstructor::createStructure):
1092         * runtime/NameInstance.h:
1093         (JSC::NameInstance::createStructure):
1094         (JSC::NameInstance::finishCreation):
1095         * runtime/NamePrototype.cpp:
1096         (JSC::NamePrototype::finishCreation):
1097         (JSC::privateNameProtoFuncToString):
1098         * runtime/NamePrototype.h:
1099         (JSC::NamePrototype::createStructure):
1100         * runtime/NativeErrorConstructor.cpp:
1101         (JSC::NativeErrorConstructor::visitChildren):
1102         * runtime/NativeErrorConstructor.h:
1103         (JSC::NativeErrorConstructor::createStructure):
1104         (JSC::NativeErrorConstructor::finishCreation):
1105         * runtime/NumberConstructor.cpp:
1106         (JSC::NumberConstructor::finishCreation):
1107         * runtime/NumberConstructor.h:
1108         (JSC::NumberConstructor::createStructure):
1109         * runtime/NumberObject.cpp:
1110         (JSC::NumberObject::finishCreation):
1111         * runtime/NumberObject.h:
1112         (JSC::NumberObject::createStructure):
1113         * runtime/NumberPrototype.cpp:
1114         (JSC::NumberPrototype::finishCreation):
1115         * runtime/NumberPrototype.h:
1116         (JSC::NumberPrototype::createStructure):
1117         * runtime/ObjectConstructor.h:
1118         (JSC::ObjectConstructor::createStructure):
1119         * runtime/ObjectPrototype.cpp:
1120         (JSC::ObjectPrototype::finishCreation):
1121         * runtime/ObjectPrototype.h:
1122         (JSC::ObjectPrototype::createStructure):
1123         * runtime/PropertyMapHashTable.h:
1124         (JSC::PropertyTable::createStructure):
1125         * runtime/PropertyTable.cpp:
1126         (JSC::PropertyTable::visitChildren):
1127         * runtime/RegExp.h:
1128         (JSC::RegExp::createStructure):
1129         * runtime/RegExpConstructor.cpp:
1130         (JSC::RegExpConstructor::finishCreation):
1131         (JSC::RegExpConstructor::visitChildren):
1132         (JSC::constructRegExp):
1133         * runtime/RegExpConstructor.h:
1134         (JSC::RegExpConstructor::createStructure):
1135         (JSC::asRegExpConstructor):
1136         * runtime/RegExpMatchesArray.cpp:
1137         (JSC::RegExpMatchesArray::visitChildren):
1138         * runtime/RegExpMatchesArray.h:
1139         (JSC::RegExpMatchesArray::createStructure):
1140         * runtime/RegExpObject.cpp:
1141         (JSC::RegExpObject::finishCreation):
1142         (JSC::RegExpObject::visitChildren):
1143         * runtime/RegExpObject.h:
1144         (JSC::RegExpObject::createStructure):
1145         (JSC::asRegExpObject):
1146         * runtime/RegExpPrototype.cpp:
1147         (JSC::regExpProtoFuncTest):
1148         (JSC::regExpProtoFuncExec):
1149         (JSC::regExpProtoFuncCompile):
1150         (JSC::regExpProtoFuncToString):
1151         * runtime/RegExpPrototype.h:
1152         (JSC::RegExpPrototype::createStructure):
1153         * runtime/SparseArrayValueMap.cpp:
1154         (JSC::SparseArrayValueMap::createStructure):
1155         * runtime/SparseArrayValueMap.h:
1156         * runtime/StrictEvalActivation.h:
1157         (JSC::StrictEvalActivation::createStructure):
1158         * runtime/StringConstructor.h:
1159         (JSC::StringConstructor::createStructure):
1160         * runtime/StringObject.cpp:
1161         (JSC::StringObject::finishCreation):
1162         * runtime/StringObject.h:
1163         (JSC::StringObject::createStructure):
1164         (JSC::asStringObject):
1165         * runtime/StringPrototype.cpp:
1166         (JSC::StringPrototype::finishCreation):
1167         (JSC::stringProtoFuncReplace):
1168         (JSC::stringProtoFuncToString):
1169         (JSC::stringProtoFuncMatch):
1170         (JSC::stringProtoFuncSearch):
1171         (JSC::stringProtoFuncSplit):
1172         * runtime/StringPrototype.h:
1173         (JSC::StringPrototype::createStructure):
1174         * runtime/Structure.cpp:
1175         (JSC::Structure::Structure):
1176         (JSC::Structure::materializePropertyMap):
1177         (JSC::Structure::get):
1178         (JSC::Structure::visitChildren):
1179         * runtime/Structure.h:
1180         (JSC::Structure::typeInfo):
1181         (JSC::Structure::previousID):
1182         (JSC::Structure::outOfLineSize):
1183         (JSC::Structure::totalStorageCapacity):
1184         (JSC::Structure::materializePropertyMapIfNecessary):
1185         (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
1186         * runtime/StructureChain.cpp:
1187         (JSC::StructureChain::visitChildren):
1188         * runtime/StructureChain.h:
1189         (JSC::StructureChain::createStructure):
1190         * runtime/StructureInlines.h:
1191         (JSC::Structure::get):
1192         * runtime/StructureRareData.cpp:
1193         (JSC::StructureRareData::createStructure):
1194         (JSC::StructureRareData::visitChildren):
1195         * runtime/StructureRareData.h:
1196         * runtime/SymbolTable.h:
1197         (JSC::SharedSymbolTable::createStructure):
1198         * runtime/VM.cpp:
1199         (JSC::VM::VM):
1200         (JSC::StackPreservingRecompiler::operator()):
1201         (JSC::VM::releaseExecutableMemory):
1202         * runtime/WriteBarrier.h:
1203         (JSC::validateCell):
1204         * testRegExp.cpp:
1205         (GlobalObject::createStructure):
1206
1207 2013-08-13  Arunprasad Rajkumar  <arurajku@cisco.com>
1208
1209         [WTF] [JSC] Replace currentTime() with monotonicallyIncreasingTime() in all possible places
1210         https://bugs.webkit.org/show_bug.cgi?id=119762
1211
1212         Reviewed by Geoffrey Garen.
1213
1214         * heap/Heap.cpp:
1215         (JSC::Heap::Heap):
1216         (JSC::Heap::markRoots):
1217         (JSC::Heap::collect):
1218         * jsc.cpp:
1219         (StopWatch::start):
1220         (StopWatch::stop):
1221         * testRegExp.cpp:
1222         (StopWatch::start):
1223         (StopWatch::stop):
1224
1225 2013-08-13  Julien Brianceau  <jbrianceau@nds.com>
1226
1227         [sh4] Prepare LLINT for DFG_JIT implementation.
1228         https://bugs.webkit.org/show_bug.cgi?id=119755
1229
1230         Reviewed by Oliver Hunt.
1231
1232         * LLIntOffsetsExtractor.pro: Add sh4.rb dependency.
1233         * offlineasm/sh4.rb:
1234             - Handle storeb opcode.
1235             - Make relative jumps when possible using braf opcode.
1236             - Update bmulio implementation to be consistent with baseline JIT.
1237             - Remove useless code from leap opcode.
1238             - Fix incorrect comment.
1239
1240 2013-08-13  Julien Brianceau  <jbrianceau@nds.com>
1241
1242         [sh4] Prepare baseline JIT for DFG_JIT implementation.
1243         https://bugs.webkit.org/show_bug.cgi?id=119758
1244
1245         Reviewed by Oliver Hunt.
1246
1247         * assembler/MacroAssemblerSH4.h:
1248             - Introduce a loadEffectiveAddress function to avoid code duplication.
1249             - Add ASSERTs and clean code.
1250         * assembler/SH4Assembler.h:
1251             - Prepare DFG_JIT implementation.
1252             - Add ASSERTs.
1253         * jit/JITStubs.cpp:
1254             - Add SH4 specific call for assertions.
1255         * jit/JITStubs.h:
1256             - Cosmetic change.
1257         * jit/JITStubsSH4.h:
1258             - Use constants to be more flexible with sh4 JIT stack frame.
1259         * jit/JSInterfaceJIT.h:
1260             - Cosmetic change.
1261
1262 2013-08-13  Oliver Hunt  <oliver@apple.com>
1263
1264         Harden executeConstruct against incorrect return types from host functions
1265         https://bugs.webkit.org/show_bug.cgi?id=119757
1266
1267         Reviewed by Mark Hahnenberg.
1268
1269         Add logic to guard against bogus return types.  There doesn't seem to be any
1270         class in webkit that does this wrong, but the typed array stubs in debug JSC
1271         do exhibit this bad behaviour.
1272
1273         * interpreter/Interpreter.cpp:
1274         (JSC::Interpreter::executeConstruct):
1275
1276 2013-08-13  Allan Sandfeld Jensen  <allan.jensen@digia.com>
1277
1278         [Qt] Fix C++11 build with gcc 4.4 and 4.5
1279         https://bugs.webkit.org/show_bug.cgi?id=119736
1280
1281         Reviewed by Anders Carlsson.
1282
1283         Don't force C++11 mode off anymore.
1284
1285         * Target.pri:
1286
1287 2013-08-12  Oliver Hunt  <oliver@apple.com>
1288
1289         Remove CodeBlock's notion of adding identifiers entirely
1290         https://bugs.webkit.org/show_bug.cgi?id=119708
1291
1292         Reviewed by Geoffrey Garen.
1293
1294         Remove addAdditionalIdentifier entirely, including the bogus assertion.
1295         Move the addition of identifiers to DFGPlan::reallyAdd
1296
1297         * bytecode/CodeBlock.h:
1298         * dfg/DFGDesiredIdentifiers.cpp:
1299         (JSC::DFG::DesiredIdentifiers::reallyAdd):
1300         * dfg/DFGDesiredIdentifiers.h:
1301         * dfg/DFGPlan.cpp:
1302         (JSC::DFG::Plan::reallyAdd):
1303         (JSC::DFG::Plan::finalize):
1304         * dfg/DFGPlan.h:
1305
1306 2013-08-12  Oliver Hunt  <oliver@apple.com>
1307
1308         Build fix
1309
1310         * runtime/JSCell.h:
1311
1312 2013-08-12  Oliver Hunt  <oliver@apple.com>
1313
1314         Move additionalIdentifiers into DFGCommonData as only the optimising JITs use them
1315         https://bugs.webkit.org/show_bug.cgi?id=119705
1316
1317         Reviewed by Geoffrey Garen.
1318
1319         Relatively trivial refactoring
1320
1321         * bytecode/CodeBlock.h:
1322         (JSC::CodeBlock::numberOfAdditionalIdentifiers):
1323         (JSC::CodeBlock::addAdditionalIdentifier):
1324         (JSC::CodeBlock::identifier):
1325         (JSC::CodeBlock::numberOfIdentifiers):
1326         * dfg/DFGCommonData.h:
1327
1328 2013-08-12  Oliver Hunt  <oliver@apple.com>
1329
1330         Stop making unnecessary copy of CodeBlock Identifier Vector
1331         https://bugs.webkit.org/show_bug.cgi?id=119702
1332
1333         Reviewed by Michael Saboff.
1334
1335         Make CodeBlock simply use a separate Vector for additional Identifiers
1336         and use the UnlinkedCodeBlock for the initial set of identifiers.
1337
1338         * bytecode/CodeBlock.cpp:
1339         (JSC::CodeBlock::printGetByIdOp):
1340         (JSC::dumpStructure):
1341         (JSC::dumpChain):
1342         (JSC::CodeBlock::printGetByIdCacheStatus):
1343         (JSC::CodeBlock::printPutByIdOp):
1344         (JSC::CodeBlock::dumpBytecode):
1345         (JSC::CodeBlock::CodeBlock):
1346         (JSC::CodeBlock::shrinkToFit):
1347         * bytecode/CodeBlock.h:
1348         (JSC::CodeBlock::numberOfIdentifiers):
1349         (JSC::CodeBlock::numberOfAdditionalIdentifiers):
1350         (JSC::CodeBlock::addAdditionalIdentifier):
1351         (JSC::CodeBlock::identifier):
1352         * dfg/DFGDesiredIdentifiers.cpp:
1353         (JSC::DFG::DesiredIdentifiers::reallyAdd):
1354         * jit/JIT.h:
1355         * jit/JITOpcodes.cpp:
1356         (JSC::JIT::emitSlow_op_get_arguments_length):
1357         * jit/JITPropertyAccess.cpp:
1358         (JSC::JIT::emit_op_get_by_id):
1359         (JSC::JIT::compileGetByIdHotPath):
1360         (JSC::JIT::emitSlow_op_get_by_id):
1361         (JSC::JIT::compileGetByIdSlowCase):
1362         (JSC::JIT::emitSlow_op_put_by_id):
1363         * jit/JITPropertyAccess32_64.cpp:
1364         (JSC::JIT::emit_op_get_by_id):
1365         (JSC::JIT::compileGetByIdHotPath):
1366         (JSC::JIT::compileGetByIdSlowCase):
1367         * jit/JITStubs.cpp:
1368         (JSC::DEFINE_STUB_FUNCTION):
1369         * llint/LLIntSlowPaths.cpp:
1370         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1371
1372 2013-08-08  Mark Lam  <mark.lam@apple.com>
1373
1374         Restoring use of StackIterator instead of Interpreter::getStacktrace().
1375         https://bugs.webkit.org/show_bug.cgi?id=119575.
1376
1377         Reviewed by Oliver Hunt.
1378
1379         * interpreter/Interpreter.h:
1380         - Made getStackTrace() private.
1381         * interpreter/StackIterator.cpp:
1382         (JSC::StackIterator::StackIterator):
1383         (JSC::StackIterator::numberOfFrames):
1384         - Computes the number of frames by iterating through the whole stack
1385           from the starting frame. The iterator will save its current frame
1386           position before counting the frames, and then restoring it after
1387           the counting.
1388         (JSC::StackIterator::gotoFrameAtIndex):
1389         (JSC::StackIterator::gotoNextFrame):
1390         (JSC::StackIterator::resetIterator):
1391         - Points the iterator to the starting frame.
1392         * interpreter/StackIteratorPrivate.h:
1393
1394 2013-08-08  Mark Lam  <mark.lam@apple.com>
1395
1396         Moved ErrorConstructor and NativeErrorConstructor helper functions into
1397         the Interpreter class.
1398         https://bugs.webkit.org/show_bug.cgi?id=119576.
1399
1400         Reviewed by Oliver Hunt.
1401
1402         This change is needed to prepare for making Interpreter::getStackTrace()
1403         private. It does not change the behavior of the code, only the lexical
1404         scoping.
1405
1406         * interpreter/Interpreter.h:
1407         - Added helper functions for ErrorConstructor and NativeErrorConstructor.
1408         * runtime/ErrorConstructor.cpp:
1409         (JSC::Interpreter::constructWithErrorConstructor):
1410         (JSC::ErrorConstructor::getConstructData):
1411         (JSC::Interpreter::callErrorConstructor):
1412         (JSC::ErrorConstructor::getCallData):
1413         - Don't want ErrorConstructor to call Interpreter::getStackTrace()
1414           directly. So, we moved the helper functions into the Interpreter
1415           class.
1416         * runtime/NativeErrorConstructor.cpp:
1417         (JSC::Interpreter::constructWithNativeErrorConstructor):
1418         (JSC::NativeErrorConstructor::getConstructData):
1419         (JSC::Interpreter::callNativeErrorConstructor):
1420         (JSC::NativeErrorConstructor::getCallData):
1421         - Don't want NativeErrorConstructor to call Interpreter::getStackTrace()
1422           directly. So, we moved the helper functions into the Interpreter
1423           class.
1424
1425 2013-08-07  Mark Hahnenberg  <mhahnenberg@apple.com>
1426
1427         32-bit code gen for TypeOf doesn't properly update the AbstractInterpreter state
1428         https://bugs.webkit.org/show_bug.cgi?id=119555
1429
1430         Reviewed by Geoffrey Garen.
1431
1432         It uses a speculationCheck where it should be using a DFG_TYPE_CHECK like the 64-bit backend does.
1433         This was causing crashes on maps.google.com in 32-bit debug builds.
1434
1435         * dfg/DFGSpeculativeJIT32_64.cpp:
1436         (JSC::DFG::SpeculativeJIT::compile):
1437
1438 2013-08-06  Michael Saboff  <msaboff@apple.com>
1439
1440         REGRESSION(FTL merge): Assertion fail on 32 bit with enabled DFG JIT
1441         https://bugs.webkit.org/show_bug.cgi?id=119405
1442
1443         Reviewed by Geoffrey Garen.
1444
1445         * dfg/DFGSpeculativeJIT.cpp:
1446         (JSC::DFG::SpeculativeJIT::compileGetByValOnString): For X86 32 bit, construct an indexed address
1447         ourselves to save a register and then load from it.
1448
1449 2013-08-06  Filip Pizlo  <fpizlo@apple.com>
1450
1451         DFG FixupPhase should insert Int32ToDouble nodes for number uses in NewArray, and SpeculativeJIT 64-bit should not try to coerce integer constants to double constants
1452         https://bugs.webkit.org/show_bug.cgi?id=119528
1453
1454         Reviewed by Geoffrey Garen.
1455
1456         Either of the two fixes would solve the crash I saw. Basically, for best performance, we want the DFG register allocator to track double uses and non-double
1457         uses of a node separately, and we accomplish this by inserting Int32ToDouble nodes in the FixupPhase. But even if FixupPhase fails to do this, we still want
1458         the DFG register allocator to do the right thing: if it encounters a double use of an integer, it should perform a conversion and preserve the original
1459         format of the value (namely, that it was an integer). For constants, the best format to preserve is None, so that future integer uses rematerialize the int
1460         from scratch. This only affects the 64-bit backend; the 32-bit backend was already doing the right thing.
1461
1462         This also fixes some more debug dumping code, and adds some stronger assertions for integer arrays.
1463
1464         * bytecode/CodeBlock.cpp:
1465         (JSC::CodeBlock::finalizeUnconditionally):
1466         * dfg/DFGDriver.cpp:
1467         (JSC::DFG::compile):
1468         * dfg/DFGFixupPhase.cpp:
1469         (JSC::DFG::FixupPhase::fixupNode):
1470         * dfg/DFGGraph.cpp:
1471         (JSC::DFG::Graph::dump):
1472         * dfg/DFGSpeculativeJIT64.cpp:
1473         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
1474         * runtime/JSObject.h:
1475         (JSC::JSObject::getIndexQuickly):
1476         (JSC::JSObject::tryGetIndexQuickly):
1477
1478 2013-08-08  Stephanie Lewis  <slewis@apple.com>
1479
1480         <rdar://problem/14680524> REGRESSION(153806): Crash @ yahoo.com when WebKit is built with a .order file
1481
1482         Unreviewed.
1483
1484         Ensure llint symbols are in source order.
1485
1486         * JavaScriptCore.order:
1487
1488 2013-08-06  Mark Lam  <mark.lam@apple.com>
1489
1490         Assertion failure in emitExpressionInfo when reloading with Web Inspector open.
1491         https://bugs.webkit.org/show_bug.cgi?id=119532.
1492
1493         Reviewed by Oliver Hunt.
1494
1495         * parser/Parser.cpp:
1496         (JSC::::Parser):
1497         - Just need to initialize the Parser's JSTokenLocation's initial line and
1498           startOffset as well during Parser construction.
1499
1500 2013-08-06  Stephanie Lewis  <slewis@apple.com>
1501
1502         Update Order Files for Safari
1503         <rdar://problem/14517392>
1504
1505         Unreviewed.
1506
1507         * JavaScriptCore.order:
1508
1509 2013-08-04  Sam Weinig  <sam@webkit.org>
1510
1511         Remove support for HTML5 MicroData
1512         https://bugs.webkit.org/show_bug.cgi?id=119480
1513
1514         Reviewed by Anders Carlsson.
1515
1516         * Configurations/FeatureDefines.xcconfig:
1517
1518 2013-08-05  Oliver Hunt  <oliver@apple.com>
1519
1520         Delay Arguments creation in strict mode
1521         https://bugs.webkit.org/show_bug.cgi?id=119505
1522
1523         Reviewed by Geoffrey Garen.
1524
1525         Make use of the write tracking performed by the parser to
1526         allow us to know if we're modifying the parameters to a function.
1527         Then use that information to make strict mode function opt out
1528         of eager arguments creation.
1529
1530         * bytecompiler/BytecodeGenerator.cpp:
1531         (JSC::BytecodeGenerator::BytecodeGenerator):
1532         (JSC::BytecodeGenerator::createArgumentsIfNecessary):
1533         (JSC::BytecodeGenerator::emitReturn):
1534         * bytecompiler/BytecodeGenerator.h:
1535         (JSC::BytecodeGenerator::shouldTearOffArgumentsEagerly):
1536         * parser/Nodes.h:
1537         (JSC::ScopeNode::modifiesParameter):
1538         * parser/Parser.cpp:
1539         (JSC::::parseInner):
1540         * parser/Parser.h:
1541         (JSC::Scope::declareParameter):
1542         (JSC::Scope::getCapturedVariables):
1543         (JSC::Parser::declareWrite):
1544         * parser/ParserModes.h:
1545
1546 2013-08-06  Patrick Gansterer  <paroga@webkit.org>
1547
1548         Remove useless code from COMPILER(RVCT) JITStubs
1549         https://bugs.webkit.org/show_bug.cgi?id=119521
1550
1551         Reviewed by Geoffrey Garen.
1552
1553         * jit/JITStubsARMv7.h:
1554         (JSC::ctiVMThrowTrampoline): "ldr r6, [sp, #PRESERVED_R6_OFFSET]" was called twice.
1555         (JSC::ctiOpThrowNotCaught): Ditto.
1556
1557 2013-07-23  David Farler  <dfarler@apple.com>
1558
1559         Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
1560         https://bugs.webkit.org/show_bug.cgi?id=117762
1561
1562         Reviewed by Mark Rowe.
1563
1564         * Configurations/DebugRelease.xcconfig:
1565         Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
1566         * Configurations/JavaScriptCore.xcconfig:
1567         Add ASAN_OTHER_LDFLAGS.
1568         * Configurations/ToolExecutable.xcconfig:
1569         Don't use ASAN for build tools.
1570
1571 2013-08-06  Patrick Gansterer  <paroga@webkit.org>
1572
1573         Build fix for ARM MSVC after r153222 and r153648.
1574
1575         * jit/JITStubsARM.h: Added ctiVMThrowTrampolineSlowpath.
1576
1577 2013-08-06  Patrick Gansterer  <paroga@webkit.org>
1578
1579         Build fix for ARM MSVC after r150109.
1580
1581         Read the stub template from a header files instead of the JITStubs.cpp.
1582
1583         * CMakeLists.txt:
1584         * DerivedSources.pri:
1585         * create_jit_stubs:
1586
1587 2013-08-05  Oliver Hunt  <oliver@apple.com>
1588
1589         Move TypedArray implementation into JSC
1590         https://bugs.webkit.org/show_bug.cgi?id=119489
1591
1592         Reviewed by Filip Pizlo.
1593
1594         Move TypedArray implementation into JSC in advance of re-implementation
1595
1596         * GNUmakefile.list.am:
1597         * JSCTypedArrayStubs.h:
1598         * JavaScriptCore.xcodeproj/project.pbxproj:
1599         * runtime/ArrayBuffer.cpp: Renamed from Source/WTF/wtf/ArrayBuffer.cpp.
1600         (JSC::ArrayBuffer::transfer):
1601         (JSC::ArrayBuffer::addView):
1602         (JSC::ArrayBuffer::removeView):
1603         * runtime/ArrayBuffer.h: Renamed from Source/WTF/wtf/ArrayBuffer.h.
1604         (JSC::ArrayBufferContents::ArrayBufferContents):
1605         (JSC::ArrayBufferContents::data):
1606         (JSC::ArrayBufferContents::sizeInBytes):
1607         (JSC::ArrayBufferContents::transfer):
1608         (JSC::ArrayBufferContents::copyTo):
1609         (JSC::ArrayBuffer::isNeutered):
1610         (JSC::ArrayBuffer::~ArrayBuffer):
1611         (JSC::ArrayBuffer::clampValue):
1612         (JSC::ArrayBuffer::create):
1613         (JSC::ArrayBuffer::createUninitialized):
1614         (JSC::ArrayBuffer::ArrayBuffer):
1615         (JSC::ArrayBuffer::data):
1616         (JSC::ArrayBuffer::byteLength):
1617         (JSC::ArrayBuffer::slice):
1618         (JSC::ArrayBuffer::sliceImpl):
1619         (JSC::ArrayBuffer::clampIndex):
1620         (JSC::ArrayBufferContents::tryAllocate):
1621         (JSC::ArrayBufferContents::~ArrayBufferContents):
1622         * runtime/ArrayBufferView.cpp: Renamed from Source/WTF/wtf/ArrayBufferView.cpp.
1623         (JSC::ArrayBufferView::ArrayBufferView):
1624         (JSC::ArrayBufferView::~ArrayBufferView):
1625         (JSC::ArrayBufferView::neuter):
1626         * runtime/ArrayBufferView.h: Renamed from Source/WTF/wtf/ArrayBufferView.h.
1627         (JSC::ArrayBufferView::buffer):
1628         (JSC::ArrayBufferView::baseAddress):
1629         (JSC::ArrayBufferView::byteOffset):
1630         (JSC::ArrayBufferView::setNeuterable):
1631         (JSC::ArrayBufferView::isNeuterable):
1632         (JSC::ArrayBufferView::verifySubRange):
1633         (JSC::ArrayBufferView::clampOffsetAndNumElements):
1634         (JSC::ArrayBufferView::setImpl):
1635         (JSC::ArrayBufferView::setRangeImpl):
1636         (JSC::ArrayBufferView::zeroRangeImpl):
1637         (JSC::ArrayBufferView::calculateOffsetAndLength):
1638         * runtime/Float32Array.h: Renamed from Source/WTF/wtf/Float32Array.h.
1639         (JSC::Float32Array::set):
1640         (JSC::Float32Array::getType):
1641         (JSC::Float32Array::create):
1642         (JSC::Float32Array::createUninitialized):
1643         (JSC::Float32Array::Float32Array):
1644         (JSC::Float32Array::subarray):
1645         * runtime/Float64Array.h: Renamed from Source/WTF/wtf/Float64Array.h.
1646         (JSC::Float64Array::set):
1647         (JSC::Float64Array::getType):
1648         (JSC::Float64Array::create):
1649         (JSC::Float64Array::createUninitialized):
1650         (JSC::Float64Array::Float64Array):
1651         (JSC::Float64Array::subarray):
1652         * runtime/Int16Array.h: Renamed from Source/WTF/wtf/Int16Array.h.
1653         (JSC::Int16Array::getType):
1654         (JSC::Int16Array::create):
1655         (JSC::Int16Array::createUninitialized):
1656         (JSC::Int16Array::Int16Array):
1657         (JSC::Int16Array::subarray):
1658         * runtime/Int32Array.h: Renamed from Source/WTF/wtf/Int32Array.h.
1659         (JSC::Int32Array::getType):
1660         (JSC::Int32Array::create):
1661         (JSC::Int32Array::createUninitialized):
1662         (JSC::Int32Array::Int32Array):
1663         (JSC::Int32Array::subarray):
1664         * runtime/Int8Array.h: Renamed from Source/WTF/wtf/Int8Array.h.
1665         (JSC::Int8Array::getType):
1666         (JSC::Int8Array::create):
1667         (JSC::Int8Array::createUninitialized):
1668         (JSC::Int8Array::Int8Array):
1669         (JSC::Int8Array::subarray):
1670         * runtime/IntegralTypedArrayBase.h: Renamed from Source/WTF/wtf/IntegralTypedArrayBase.h.
1671         (JSC::IntegralTypedArrayBase::set):
1672         (JSC::IntegralTypedArrayBase::IntegralTypedArrayBase):
1673         * runtime/TypedArrayBase.h: Renamed from Source/WTF/wtf/TypedArrayBase.h.
1674         (JSC::TypedArrayBase::data):
1675         (JSC::TypedArrayBase::set):
1676         (JSC::TypedArrayBase::setRange):
1677         (JSC::TypedArrayBase::zeroRange):
1678         (JSC::TypedArrayBase::length):
1679         (JSC::TypedArrayBase::byteLength):
1680         (JSC::TypedArrayBase::item):
1681         (JSC::TypedArrayBase::checkInboundData):
1682         (JSC::TypedArrayBase::TypedArrayBase):
1683         (JSC::TypedArrayBase::create):
1684         (JSC::TypedArrayBase::createUninitialized):
1685         (JSC::TypedArrayBase::subarrayImpl):
1686         (JSC::TypedArrayBase::neuter):
1687         * runtime/Uint16Array.h: Renamed from Source/WTF/wtf/Uint16Array.h.
1688         (JSC::Uint16Array::getType):
1689         (JSC::Uint16Array::create):
1690         (JSC::Uint16Array::createUninitialized):
1691         (JSC::Uint16Array::Uint16Array):
1692         (JSC::Uint16Array::subarray):
1693         * runtime/Uint32Array.h: Renamed from Source/WTF/wtf/Uint32Array.h.
1694         (JSC::Uint32Array::getType):
1695         (JSC::Uint32Array::create):
1696         (JSC::Uint32Array::createUninitialized):
1697         (JSC::Uint32Array::Uint32Array):
1698         (JSC::Uint32Array::subarray):
1699         * runtime/Uint8Array.h: Renamed from Source/WTF/wtf/Uint8Array.h.
1700         (JSC::Uint8Array::getType):
1701         (JSC::Uint8Array::create):
1702         (JSC::Uint8Array::createUninitialized):
1703         (JSC::Uint8Array::Uint8Array):
1704         (JSC::Uint8Array::subarray):
1705         * runtime/Uint8ClampedArray.h: Renamed from Source/WTF/wtf/Uint8ClampedArray.h.
1706         (JSC::Uint8ClampedArray::getType):
1707         (JSC::Uint8ClampedArray::create):
1708         (JSC::Uint8ClampedArray::createUninitialized):
1709         (JSC::Uint8ClampedArray::zeroFill):
1710         (JSC::Uint8ClampedArray::set):
1711         (JSC::Uint8ClampedArray::Uint8ClampedArray):
1712         (JSC::Uint8ClampedArray::subarray):
1713         * runtime/VM.h:
1714
1715 2013-08-03  Filip Pizlo  <fpizlo@apple.com>
1716
1717         Copied space should be able to handle more than one copied backing store per JSCell
1718         https://bugs.webkit.org/show_bug.cgi?id=119471
1719
1720         Reviewed by Mark Hahnenberg.
1721         
1722         This allows a cell to call copyLater() multiple times for multiple different
1723         backing stores, and then have copyBackingStore() called exactly once for each
1724         of those. A token tells it which backing store to copy. All backing stores
1725         must be named using the CopyToken, an enumeration which currently cannot
1726         exceed eight entries.
1727         
1728         When copyBackingStore() is called, it's up to the callee to (a) use the token
1729         to decide what to copy and (b) call its base class's copyBackingStore() in
1730         case the base class had something that needed copying. The only exception is
1731         that JSCell never asks anything to be copied, and so if your base is JSCell
1732         then you don't have to do anything.
1733
1734         * GNUmakefile.list.am:
1735         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1736         * JavaScriptCore.xcodeproj/project.pbxproj:
1737         * heap/CopiedBlock.h:
1738         * heap/CopiedBlockInlines.h:
1739         (JSC::CopiedBlock::reportLiveBytes):
1740         * heap/CopyToken.h: Added.
1741         * heap/CopyVisitor.cpp:
1742         (JSC::CopyVisitor::copyFromShared):
1743         * heap/CopyVisitor.h:
1744         * heap/CopyVisitorInlines.h:
1745         (JSC::CopyVisitor::visitItem):
1746         * heap/CopyWorkList.h:
1747         (JSC::CopyWorklistItem::CopyWorklistItem):
1748         (JSC::CopyWorklistItem::cell):
1749         (JSC::CopyWorklistItem::token):
1750         (JSC::CopyWorkListSegment::get):
1751         (JSC::CopyWorkListSegment::append):
1752         (JSC::CopyWorkListSegment::data):
1753         (JSC::CopyWorkListIterator::get):
1754         (JSC::CopyWorkListIterator::operator*):
1755         (JSC::CopyWorkListIterator::operator->):
1756         (JSC::CopyWorkList::append):
1757         * heap/SlotVisitor.h:
1758         * heap/SlotVisitorInlines.h:
1759         (JSC::SlotVisitor::copyLater):
1760         * runtime/ClassInfo.h:
1761         * runtime/JSCell.cpp:
1762         (JSC::JSCell::copyBackingStore):
1763         * runtime/JSCell.h:
1764         * runtime/JSObject.cpp:
1765         (JSC::JSObject::visitButterfly):
1766         (JSC::JSObject::copyBackingStore):
1767         * runtime/JSObject.h:
1768
1769 2013-08-05  Zan Dobersek  <zdobersek@igalia.com>
1770
1771         [Automake] Define ENABLE_JIT through the Autoconf header
1772         https://bugs.webkit.org/show_bug.cgi?id=119445
1773
1774         Reviewed by Martin Robinson.
1775
1776         * GNUmakefile.am: Remove JSC_CPPFLAGS from the cpp flags for the JSC library.
1777
1778 2013-08-03  Filip Pizlo  <fpizlo@apple.com>
1779
1780         hasIndexingHeader() ought really to be a property of an object and its structure, not just its structure
1781         https://bugs.webkit.org/show_bug.cgi?id=119470
1782
1783         Reviewed by Oliver Hunt.
1784         
1785         Structure can still tell you if the object "could" (in the conservative sense)
1786         have an indexing header; that's used by the compiler.
1787         
1788         Most of the time if you want to know if there's an indexing header, you ask the
1789         JSObject.
1790         
1791         In some cases, the JSObject wants to know if it would have an indexing header if
1792         it had a different structure; then it uses Structure::hasIndexingHeader(JSCell*).
1793
1794         * dfg/DFGRepatch.cpp:
1795         (JSC::DFG::tryCachePutByID):
1796         (JSC::DFG::tryBuildPutByIdList):
1797         * dfg/DFGSpeculativeJIT.cpp:
1798         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
1799         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
1800         * runtime/ButterflyInlines.h:
1801         (JSC::Butterfly::create):
1802         (JSC::Butterfly::growPropertyStorage):
1803         (JSC::Butterfly::growArrayRight):
1804         (JSC::Butterfly::resizeArray):
1805         * runtime/JSObject.cpp:
1806         (JSC::JSObject::copyButterfly):
1807         (JSC::JSObject::visitButterfly):
1808         * runtime/JSObject.h:
1809         (JSC::JSObject::hasIndexingHeader):
1810         (JSC::JSObject::setButterfly):
1811         * runtime/Structure.h:
1812         (JSC::Structure::couldHaveIndexingHeader):
1813         (JSC::Structure::hasIndexingHeader):
1814
1815 2013-08-02  Chris Curtis  <chris_curtis@apple.com>
1816
1817         Give the error object's stack property accessor attributes.
1818         https://bugs.webkit.org/show_bug.cgi?id=119404
1819
1820         Reviewed by Geoffrey Garen.
1821         
1822         Changed the attributes of error object's stack property to allow developers to write
1823         and delete the stack property. This will match the functionality of Chrome. Firefox  
1824         allows developers to write the error's stack, but not delete it. 
1825
1826         * interpreter/Interpreter.cpp:
1827         (JSC::Interpreter::addStackTraceIfNecessary):
1828         * runtime/ErrorInstance.cpp:
1829         (JSC::ErrorInstance::finishCreation):
1830
1831 2013-08-02  Oliver Hunt  <oliver@apple.com>
1832
1833         Incorrect type speculation reported by ToPrimitive
1834         https://bugs.webkit.org/show_bug.cgi?id=119458
1835
1836         Reviewed by Mark Hahnenberg.
1837
1838         Make sure that we report the correct type possibilities for the output
1839         from ToPrimitive
1840
1841         * dfg/DFGAbstractInterpreterInlines.h:
1842         (JSC::DFG::::executeEffects):
1843
1844 2013-08-02  Gavin Barraclough  <barraclough@apple.com>
1845
1846         Remove no-arguments constructor to PropertySlot
1847         https://bugs.webkit.org/show_bug.cgi?id=119460
1848
1849         Reviewed by Geoff Garen.
1850
1851         This constructor was unsafe if getValue is subsequently called,
1852         and the property is a getter. Simplest to just remove it.
1853
1854         * runtime/Arguments.cpp:
1855         (JSC::Arguments::defineOwnProperty):
1856         * runtime/JSActivation.cpp:
1857         (JSC::JSActivation::getOwnPropertyDescriptor):
1858         * runtime/JSFunction.cpp:
1859         (JSC::JSFunction::getOwnPropertyDescriptor):
1860         (JSC::JSFunction::getOwnNonIndexPropertyNames):
1861         (JSC::JSFunction::put):
1862         (JSC::JSFunction::defineOwnProperty):
1863         * runtime/JSGlobalObject.cpp:
1864         (JSC::JSGlobalObject::defineOwnProperty):
1865         * runtime/JSGlobalObject.h:
1866         (JSC::JSGlobalObject::hasOwnPropertyForWrite):
1867         * runtime/JSNameScope.cpp:
1868         (JSC::JSNameScope::put):
1869         * runtime/JSONObject.cpp:
1870         (JSC::Stringifier::Holder::appendNextProperty):
1871         (JSC::Walker::walk):
1872         * runtime/JSObject.cpp:
1873         (JSC::JSObject::hasProperty):
1874         (JSC::JSObject::hasOwnProperty):
1875         (JSC::JSObject::reifyStaticFunctionsForDelete):
1876         * runtime/Lookup.h:
1877         (JSC::getStaticPropertyDescriptor):
1878         (JSC::getStaticFunctionDescriptor):
1879         (JSC::getStaticValueDescriptor):
1880         * runtime/ObjectConstructor.cpp:
1881         (JSC::defineProperties):
1882         * runtime/PropertySlot.h:
1883
1884 2013-08-02  Mark Hahnenberg  <mhahnenberg@apple.com>
1885
1886         DFG validation can cause assertion failures due to dumping
1887         https://bugs.webkit.org/show_bug.cgi?id=119456
1888
1889         Reviewed by Geoffrey Garen.
1890
1891         * bytecode/CodeBlock.cpp:
1892         (JSC::CodeBlock::hasHash):
1893         (JSC::CodeBlock::isSafeToComputeHash):
1894         (JSC::CodeBlock::hash):
1895         (JSC::CodeBlock::dumpAssumingJITType):
1896         * bytecode/CodeBlock.h:
1897
1898 2013-08-02  Chris Curtis  <chris_curtis@apple.com>
1899
1900         Have vm's exceptionStack match java's vm's exceptionStack.
1901         https://bugs.webkit.org/show_bug.cgi?id=119362
1902
1903         Reviewed by Geoffrey Garen.
1904         
1905         The error object's stack is only updated if it does not exist yet. This matches 
1906         the functionality of other browsers, and Java VMs. 
1907
1908         * interpreter/Interpreter.cpp:
1909         (JSC::Interpreter::addStackTraceIfNecessary):
1910         (JSC::Interpreter::throwException):
1911         * runtime/VM.cpp:
1912         (JSC::VM::clearExceptionStack):
1913         * runtime/VM.h:
1914         (JSC::VM::lastExceptionStack):
1915
1916 2013-08-02  Julien Brianceau  <jbrianceau@nds.com>
1917
1918         REGRESSION(FTL): Fix mips implementation of ctiVMThrowTrampolineSlowpath.
1919         https://bugs.webkit.org/show_bug.cgi?id=119447
1920
1921         Reviewed by Geoffrey Garen.
1922
1923         Fix .cpload, update call frame and do not restore registers from JIT stack frame in
1924         mips implementation of ctiVMThrowTrampolineSlowpath. This change is similar to
1925         r153583 (sh4) and r153648 (ARM).
1926
1927         * jit/JITStubsMIPS.h:
1928
1929 2013-08-01  Filip Pizlo  <fpizlo@apple.com>
1930
1931         hasIndexingHeader should be a property of the Structure, not just the IndexingType
1932         https://bugs.webkit.org/show_bug.cgi?id=119422
1933
1934         Reviewed by Oliver Hunt.
1935         
1936         This simplifies some code and also allows Structure to claim that an object
1937         has an indexing header even if it doesn't have indexed properties.
1938         
1939         I also changed some calls to use hasIndexedProperties() since in some cases,
1940         that's what we actually meant. Currently the two are synonyms.
1941
1942         * dfg/DFGRepatch.cpp:
1943         (JSC::DFG::tryCachePutByID):
1944         (JSC::DFG::tryBuildPutByIdList):
1945         * dfg/DFGSpeculativeJIT.cpp:
1946         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
1947         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
1948         * runtime/ButterflyInlines.h:
1949         (JSC::Butterfly::create):
1950         (JSC::Butterfly::growPropertyStorage):
1951         (JSC::Butterfly::growArrayRight):
1952         (JSC::Butterfly::resizeArray):
1953         * runtime/IndexingType.h:
1954         * runtime/JSObject.cpp:
1955         (JSC::JSObject::copyButterfly):
1956         (JSC::JSObject::visitButterfly):
1957         (JSC::JSObject::setPrototype):
1958         * runtime/JSObject.h:
1959         (JSC::JSObject::setButterfly):
1960         * runtime/JSPropertyNameIterator.cpp:
1961         (JSC::JSPropertyNameIterator::create):
1962         * runtime/Structure.h:
1963         (JSC::Structure::hasIndexingHeader):
1964
1965 2013-08-02  Julien Brianceau  <jbrianceau@nds.com>
1966
1967         REGRESSION: ARM still crashes after change set r153612.
1968         https://bugs.webkit.org/show_bug.cgi?id=119433
1969
1970         Reviewed by Michael Saboff.
1971
1972         Update call frame and do not restore registers from JIT stack frame in ARM and ARMv7
1973         implementations of ctiVMThrowTrampolineSlowpath. This change is similar to r153583
1974         for sh4 architecture.
1975
1976         * jit/JITStubsARM.h:
1977         * jit/JITStubsARMv7.h:
1978
1979 2013-08-02  Michael Saboff  <msaboff@apple.com>
1980
1981         REGRESSION(r153612): It made jsc and layout tests crash
1982         https://bugs.webkit.org/show_bug.cgi?id=119440
1983
1984         Reviewed by Csaba Osztrogonác.
1985
1986         Made the changes if changeset r153612 only apply to 32 bit builds.
1987
1988         * jit/JITExceptions.cpp:
1989         * jit/JITExceptions.h:
1990         * jit/JITStubs.cpp:
1991         (JSC::cti_vm_throw_slowpath):
1992         * jit/JITStubs.h:
1993
1994 2013-08-02  Patrick Gansterer  <paroga@webkit.org>
1995
1996         Add JSCTestRunnerUtils to the list of forwarding headers to fix build.
1997
1998         * CMakeLists.txt:
1999
2000 2013-08-01  Ruth Fong  <ruth_fong@apple.com>
2001
2002         [Forms: color] <input type='color'> popover color well implementation
2003         <rdar://problem/14411008> and https://bugs.webkit.org/show_bug.cgi?id=119356
2004
2005         Reviewed by Benjamin Poulain.
2006
2007         * Configurations/FeatureDefines.xcconfig: Added and enabled INPUT_TYPE_COLOR_POPOVER.
2008
2009 2013-08-01  Oliver Hunt  <oliver@apple.com>
2010
2011         DFG is not enforcing correct ordering of ToString conversion in MakeRope
2012         https://bugs.webkit.org/show_bug.cgi?id=119408
2013
2014         Reviewed by Filip Pizlo.
2015
2016         Construct ToString and Phantom nodes in advance of MakeRope
2017         nodes to ensure that ordering is ensured, and correct values
2018         will be reified on OSR exit.
2019
2020         * dfg/DFGByteCodeParser.cpp:
2021         (JSC::DFG::ByteCodeParser::parseBlock):
2022
2023 2013-08-01  Michael Saboff  <msaboff@apple.com>
2024
2025         REGRESSION: Crash beneath cti_vm_throw_slowpath due to invalid CallFrame pointer
2026         https://bugs.webkit.org/show_bug.cgi?id=119140
2027
2028         Reviewed by Filip Pizlo.
2029
2030         Ensure that ExceptionHandler is returned by functions in two registers by encoding the value as a 64 bit int.
2031
2032         * jit/JITExceptions.cpp:
2033         (JSC::encode):
2034         * jit/JITExceptions.h:
2035         * jit/JITStubs.cpp:
2036         (JSC::cti_vm_throw_slowpath):
2037         * jit/JITStubs.h:
2038
2039 2013-08-01  Julien Brianceau  <jbrianceau@nds.com>
2040
2041         REGRESSION(FTL): Fix sh4 implementation of ctiVMThrowTrampolineSlowpath.
2042         https://bugs.webkit.org/show_bug.cgi?id=119391
2043
2044         Reviewed by Csaba Osztrogonác.
2045
2046         * jit/JITStubsSH4.h: Fix ctiVMThrowTrampolineSlowpath implementation:
2047             - Call frame is in r14 register.
2048             - Do not restore registers from JIT stack frame here.
2049
2050 2013-07-31  Gavin Barraclough  <barraclough@apple.com>
2051
2052         More cleanup in PropertySlot
2053         https://bugs.webkit.org/show_bug.cgi?id=119359
2054
2055         Reviewed by Geoff Garen.
2056
2057         m_slotBase is overloaded to store the (receiver) thisValue and the object that contains the property,
2058         This is confusing, and means that slotBase cannot be typed correctly (can only be a JSObject).
2059
2060         * dfg/DFGRepatch.cpp:
2061         (JSC::DFG::tryCacheGetByID):
2062         (JSC::DFG::tryBuildGetByIDList):
2063             - No need to ASSERT slotBase is an object.
2064         * jit/JITStubs.cpp:
2065         (JSC::tryCacheGetByID):
2066         (JSC::DEFINE_STUB_FUNCTION):
2067             - No need to ASSERT slotBase is an object.
2068         * runtime/JSObject.cpp:
2069         (JSC::JSObject::getOwnPropertySlotByIndex):
2070         (JSC::JSObject::fillGetterPropertySlot):
2071             - Pass an object through to setGetterSlot.
2072         * runtime/JSObject.h:
2073         (JSC::PropertySlot::getValue):
2074             - Moved from PropertySlot (need to know anout JSObject).
2075         * runtime/PropertySlot.cpp:
2076         (JSC::PropertySlot::functionGetter):
2077             - update per member name changes
2078         * runtime/PropertySlot.h:
2079         (JSC::PropertySlot::PropertySlot):
2080             - Argument to constructor set to 'thisValue'.
2081         (JSC::PropertySlot::slotBase):
2082             - This returns a JSObject*.
2083         (JSC::PropertySlot::setValue):
2084         (JSC::PropertySlot::setCustom):
2085         (JSC::PropertySlot::setCacheableCustom):
2086         (JSC::PropertySlot::setCustomIndex):
2087         (JSC::PropertySlot::setGetterSlot):
2088         (JSC::PropertySlot::setCacheableGetterSlot):
2089             - slotBase is a JSObject*, make setGetterSlot set slotBase for consistency.
2090         * runtime/SparseArrayValueMap.cpp:
2091         (JSC::SparseArrayEntry::get):
2092             - Pass an object through to setGetterSlot.
2093         * runtime/SparseArrayValueMap.h:
2094             - Pass an object through to setGetterSlot.
2095
2096 2013-07-31  Yi Shen  <max.hong.shen@gmail.com>
2097
2098         Reduce JSC API static value setter/getter overhead.
2099         https://bugs.webkit.org/show_bug.cgi?id=119277
2100
2101         Reviewed by Geoffrey Garen.
2102
2103         Add property name to the static value entry, so that OpaqueJSString::create() doesn't
2104         need to get called every time when set or get the static value.
2105
2106         * API/JSCallbackObjectFunctions.h:
2107         (JSC::::put):
2108         (JSC::::putByIndex):
2109         (JSC::::getStaticValue):
2110         * API/JSClassRef.cpp:
2111         (OpaqueJSClassContextData::OpaqueJSClassContextData):
2112         * API/JSClassRef.h:
2113         (StaticValueEntry::StaticValueEntry):
2114
2115 2013-07-31  Kwang Yul Seo  <skyul@company100.net>
2116
2117         Use emptyString instead of String("")
2118         https://bugs.webkit.org/show_bug.cgi?id=119335
2119
2120         Reviewed by Darin Adler.
2121
2122         Use emptyString() instead of String("") because it is better style and
2123         faster. This is a followup to r116908, removing all occurrences of
2124         String("") from WebKit.
2125
2126         * runtime/RegExpConstructor.cpp:
2127         (JSC::constructRegExp):
2128         * runtime/RegExpPrototype.cpp:
2129         (JSC::regExpProtoFuncCompile):
2130         * runtime/StringPrototype.cpp:
2131         (JSC::stringProtoFuncMatch):
2132         (JSC::stringProtoFuncSearch):
2133
2134 2013-07-31  Ruth Fong  <ruth_fong@apple.com>
2135
2136         <input type=color> Mac UI behaviour
2137         <rdar://problem/10269922> and https://bugs.webkit.org/show_bug.cgi?id=61276
2138
2139         Reviewed by Brady Eidson.
2140
2141         * Configurations/FeatureDefines.xcconfig: Enabled INPUT_TYPE_COLOR.
2142
2143 2013-07-31  Mark Hahnenberg  <mhahnenberg@apple.com>
2144
2145         DFG doesn't account for inlining of functions with switch statements that haven't been executed by the baseline JIT
2146         https://bugs.webkit.org/show_bug.cgi?id=119349
2147
2148         Reviewed by Geoffrey Garen.
2149
2150         Prior to this patch, the baseline JIT was responsible for resizing the ctiOffsets Vector for 
2151         SimpleJumpTables to be equal to the size of the branchOffsets Vector. The DFG implicitly relied
2152         on code it compiled with any switch statements to have been run in the baseline JIT first. 
2153         However, if the DFG chooses to inline a function that has never been compiled by the baseline 
2154         JIT then this resizing never happens and we crash at link time in the DFG.
2155
2156         We can fix this by also doing the resize in the DFG to catch this case.
2157
2158         * dfg/DFGJITCompiler.cpp:
2159         (JSC::DFG::JITCompiler::link):
2160
2161 2013-07-31  Gavin Barraclough  <barraclough@apple.com>
2162
2163         Speculative Windows build fix.
2164
2165         Reviewed by NOBODY
2166
2167         * runtime/JSString.cpp:
2168         (JSC::JSRopeString::getIndexSlowCase):
2169         * runtime/JSString.h:
2170
2171 2013-07-30  Gavin Barraclough  <barraclough@apple.com>
2172
2173         Some cleanup in JSValue::get
2174         https://bugs.webkit.org/show_bug.cgi?id=119343
2175
2176         Reviewed by Geoff Garen.
2177
2178         JSValue::get is implemented to:
2179             1) Check if the value is a cell – if not, synthesize a prototype to search,
2180             2) call getOwnPropertySlot on the cell,
2181             3) if this returns false, cast to JSObject to get the prototype, and walk the prototype chain.
2182         By all rights this should crash when passed a string and accessing a property that does not exist, because
2183         the string is a cell, getOwnPropertySlot should return false, and the cast to JSObject should be unsafe.
2184         To work around this, JSString::getOwnPropertySlot actually implements 'get' functionality - searching the
2185         prototype chain, and faking out a return value of undefined if no property is found.
2186
2187         This is a huge hazard, since fixing JSString::getOwnPropertySlot or calling getOwnPropertySlot on cells
2188         from elsewhere would introduce bugs. Fortunately it is only ever called in this one place.
2189
2190         The fix here is to move getOwnPropertySlot onto JSObjecte and end this madness - cells don't have property
2191         slots anyway.
2192
2193         Interesting changes are in JSCJSValueInlines.h, JSString.cpp - the rest is pretty much all JSCell -> JSObject.
2194
2195 2013-07-31  Michael Saboff  <msaboff@apple.com>
2196
2197         [Win] JavaScript crash.
2198         https://bugs.webkit.org/show_bug.cgi?id=119339
2199
2200         Reviewed by Mark Hahnenberg.
2201
2202         * jit/JITStubsX86.h: Implement ctiVMThrowTrampoline and
2203         ctiVMThrowTrampolineSlowpath the same way as the gcc x86 version does.
2204
2205 2013-07-30  Mark Hahnenberg  <mhahnenberg@apple.com>
2206
2207         GetByVal on Arguments does the wrong size load when checking the Arguments object length
2208         https://bugs.webkit.org/show_bug.cgi?id=119281
2209
2210         Reviewed by Geoffrey Garen.
2211
2212         This leads to out of bounds accesses and subsequent crashes.
2213
2214         * dfg/DFGSpeculativeJIT.cpp:
2215         (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
2216         * dfg/DFGSpeculativeJIT64.cpp:
2217         (JSC::DFG::SpeculativeJIT::compile):
2218
2219 2013-07-30  Oliver Hunt  <oliver@apple.com>
2220
2221         Add an assertion to SpeculateCellOperand
2222         https://bugs.webkit.org/show_bug.cgi?id=119276
2223
2224         Reviewed by Michael Saboff.
2225
2226         More assertions are better
2227
2228         * dfg/DFGSpeculativeJIT64.cpp:
2229         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2230         (JSC::DFG::SpeculativeJIT::compile):
2231
2232 2013-07-30  Mark Lam  <mark.lam@apple.com>
2233
2234         Fix problems with divot and lineStart mismatches.
2235         https://bugs.webkit.org/show_bug.cgi?id=118662.
2236
2237         Reviewed by Oliver Hunt.
2238
2239         r152494 added the recording of lineStart values for divot positions.
2240         This is needed for the computation of column numbers. Similarly, it also
2241         added the recording of line numbers for the divot positions. One problem
2242         with the approach taken was that the line and lineStart values were
2243         recorded independently, and hence were not always guaranteed to be
2244         sampled at the same place that the divot position is recorded. This
2245         resulted in potential mismatches that cause some assertions to fail.
2246
2247         The solution is to introduce a JSTextPosition abstraction that records
2248         the divot position, line, and lineStart as a single quantity. Wherever
2249         we record the divot position as an unsigned int previously, we now record
2250         its JSTextPosition which captures all 3 values in one go. This ensures
2251         that the captured line and lineStart will always match the captured divot
2252         position.
2253
2254         * bytecompiler/BytecodeGenerator.cpp:
2255         (JSC::BytecodeGenerator::emitCall):
2256         (JSC::BytecodeGenerator::emitCallEval):
2257         (JSC::BytecodeGenerator::emitCallVarargs):
2258         (JSC::BytecodeGenerator::emitConstruct):
2259         (JSC::BytecodeGenerator::emitDebugHook):
2260         - Use JSTextPosition instead of passing line and lineStart explicitly.
2261         * bytecompiler/BytecodeGenerator.h:
2262         (JSC::BytecodeGenerator::emitExpressionInfo):
2263         - Use JSTextPosition instead of passing line and lineStart explicitly.
2264         * bytecompiler/NodesCodegen.cpp:
2265         (JSC::ThrowableExpressionData::emitThrowReferenceError):
2266         (JSC::ResolveNode::emitBytecode):
2267         (JSC::BracketAccessorNode::emitBytecode):
2268         (JSC::DotAccessorNode::emitBytecode):
2269         (JSC::NewExprNode::emitBytecode):
2270         (JSC::EvalFunctionCallNode::emitBytecode):
2271         (JSC::FunctionCallValueNode::emitBytecode):
2272         (JSC::FunctionCallResolveNode::emitBytecode):
2273         (JSC::FunctionCallBracketNode::emitBytecode):
2274         (JSC::FunctionCallDotNode::emitBytecode):
2275         (JSC::CallFunctionCallDotNode::emitBytecode):
2276         (JSC::ApplyFunctionCallDotNode::emitBytecode):
2277         (JSC::PostfixNode::emitResolve):
2278         (JSC::PostfixNode::emitBracket):
2279         (JSC::PostfixNode::emitDot):
2280         (JSC::DeleteResolveNode::emitBytecode):
2281         (JSC::DeleteBracketNode::emitBytecode):
2282         (JSC::DeleteDotNode::emitBytecode):
2283         (JSC::PrefixNode::emitResolve):
2284         (JSC::PrefixNode::emitBracket):
2285         (JSC::PrefixNode::emitDot):
2286         (JSC::UnaryOpNode::emitBytecode):
2287         (JSC::BinaryOpNode::emitStrcat):
2288         (JSC::BinaryOpNode::emitBytecode):
2289         (JSC::ThrowableBinaryOpNode::emitBytecode):
2290         (JSC::InstanceOfNode::emitBytecode):
2291         (JSC::emitReadModifyAssignment):
2292         (JSC::ReadModifyResolveNode::emitBytecode):
2293         (JSC::AssignResolveNode::emitBytecode):
2294         (JSC::AssignDotNode::emitBytecode):
2295         (JSC::ReadModifyDotNode::emitBytecode):
2296         (JSC::AssignBracketNode::emitBytecode):
2297         (JSC::ReadModifyBracketNode::emitBytecode):
2298         (JSC::ForInNode::emitBytecode):
2299         (JSC::WithNode::emitBytecode):
2300         (JSC::ThrowNode::emitBytecode):
2301         - Use JSTextPosition instead of passing line and lineStart explicitly.
2302         * parser/ASTBuilder.h:
2303         - Replaced ASTBuilder::PositionInfo with JSTextPosition.
2304         (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo):
2305         (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo):
2306         (JSC::ASTBuilder::createResolve):
2307         (JSC::ASTBuilder::createBracketAccess):
2308         (JSC::ASTBuilder::createDotAccess):
2309         (JSC::ASTBuilder::createRegExp):
2310         (JSC::ASTBuilder::createNewExpr):
2311         (JSC::ASTBuilder::createAssignResolve):
2312         (JSC::ASTBuilder::createExprStatement):
2313         (JSC::ASTBuilder::createForInLoop):
2314         (JSC::ASTBuilder::createReturnStatement):
2315         (JSC::ASTBuilder::createBreakStatement):
2316         (JSC::ASTBuilder::createContinueStatement):
2317         (JSC::ASTBuilder::createLabelStatement):
2318         (JSC::ASTBuilder::createWithStatement):
2319         (JSC::ASTBuilder::createThrowStatement):
2320         (JSC::ASTBuilder::appendBinaryExpressionInfo):
2321         (JSC::ASTBuilder::appendUnaryToken):
2322         (JSC::ASTBuilder::unaryTokenStackLastStart):
2323         (JSC::ASTBuilder::assignmentStackAppend):
2324         (JSC::ASTBuilder::createAssignment):
2325         (JSC::ASTBuilder::setExceptionLocation):
2326         (JSC::ASTBuilder::makeDeleteNode):
2327         (JSC::ASTBuilder::makeFunctionCallNode):
2328         (JSC::ASTBuilder::makeBinaryNode):
2329         (JSC::ASTBuilder::makeAssignNode):
2330         (JSC::ASTBuilder::makePrefixNode):
2331         (JSC::ASTBuilder::makePostfixNode):
2332         - Use JSTextPosition instead of passing line and lineStart explicitly.
2333         * parser/Lexer.cpp:
2334         (JSC::::lex):
2335         - Added support for capturing the appropriate JSTextPositions instead
2336           of just the character offset.
2337         * parser/Lexer.h:
2338         (JSC::Lexer::currentPosition):
2339         (JSC::::lexExpectIdentifier):
2340         - Added support for capturing the appropriate JSTextPositions instead
2341           of just the character offset.
2342         * parser/NodeConstructors.h:
2343         (JSC::Node::Node):
2344         (JSC::ResolveNode::ResolveNode):
2345         (JSC::EvalFunctionCallNode::EvalFunctionCallNode):
2346         (JSC::FunctionCallValueNode::FunctionCallValueNode):
2347         (JSC::FunctionCallResolveNode::FunctionCallResolveNode):
2348         (JSC::FunctionCallBracketNode::FunctionCallBracketNode):
2349         (JSC::FunctionCallDotNode::FunctionCallDotNode):
2350         (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode):
2351         (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode):
2352         (JSC::PostfixNode::PostfixNode):
2353         (JSC::DeleteResolveNode::DeleteResolveNode):
2354         (JSC::DeleteBracketNode::DeleteBracketNode):
2355         (JSC::DeleteDotNode::DeleteDotNode):
2356         (JSC::PrefixNode::PrefixNode):
2357         (JSC::ReadModifyResolveNode::ReadModifyResolveNode):
2358         (JSC::ReadModifyBracketNode::ReadModifyBracketNode):
2359         (JSC::AssignBracketNode::AssignBracketNode):
2360         (JSC::AssignDotNode::AssignDotNode):
2361         (JSC::ReadModifyDotNode::ReadModifyDotNode):
2362         (JSC::AssignErrorNode::AssignErrorNode):
2363         (JSC::WithNode::WithNode):
2364         (JSC::ForInNode::ForInNode):
2365         - Use JSTextPosition instead of passing line and lineStart explicitly.
2366         * parser/Nodes.cpp:
2367         (JSC::StatementNode::setLoc):
2368         - Use JSTextPosition instead of passing line and lineStart explicitly.
2369         * parser/Nodes.h:
2370         (JSC::Node::lineNo):
2371         (JSC::Node::startOffset):
2372         (JSC::Node::lineStartOffset):
2373         (JSC::Node::position):
2374         (JSC::ThrowableExpressionData::ThrowableExpressionData):
2375         (JSC::ThrowableExpressionData::setExceptionSourceCode):
2376         (JSC::ThrowableExpressionData::divot):
2377         (JSC::ThrowableExpressionData::divotStart):
2378         (JSC::ThrowableExpressionData::divotEnd):
2379         (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData):
2380         (JSC::ThrowableSubExpressionData::setSubexpressionInfo):
2381         (JSC::ThrowableSubExpressionData::subexpressionDivot):
2382         (JSC::ThrowableSubExpressionData::subexpressionStart):
2383         (JSC::ThrowableSubExpressionData::subexpressionEnd):
2384         (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
2385         (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
2386         (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot):
2387         (JSC::ThrowablePrefixedSubExpressionData::subexpressionStart):
2388         (JSC::ThrowablePrefixedSubExpressionData::subexpressionEnd):
2389         - Use JSTextPosition instead of passing line and lineStart explicitly.
2390         * parser/Parser.cpp:
2391         (JSC::::Parser):
2392         (JSC::::parseInner):
2393         - Use JSTextPosition instead of passing line and lineStart explicitly.
2394         (JSC::::didFinishParsing):
2395         - Remove setting of m_lastLine value. We always pass in the value from
2396           m_lastLine anyway. So, this assignment is effectively a nop.
2397         (JSC::::parseVarDeclaration):
2398         (JSC::::parseVarDeclarationList):
2399         (JSC::::parseForStatement):
2400         (JSC::::parseBreakStatement):
2401         (JSC::::parseContinueStatement):
2402         (JSC::::parseReturnStatement):
2403         (JSC::::parseThrowStatement):
2404         (JSC::::parseWithStatement):
2405         (JSC::::parseTryStatement):
2406         (JSC::::parseBlockStatement):
2407         (JSC::::parseFunctionDeclaration):
2408         (JSC::LabelInfo::LabelInfo):
2409         (JSC::::parseExpressionOrLabelStatement):
2410         (JSC::::parseExpressionStatement):
2411         (JSC::::parseAssignmentExpression):
2412         (JSC::::parseBinaryExpression):
2413         (JSC::::parseProperty):
2414         (JSC::::parsePrimaryExpression):
2415         (JSC::::parseMemberExpression):
2416         (JSC::::parseUnaryExpression):
2417         - Use JSTextPosition instead of passing line and lineStart explicitly.
2418         * parser/Parser.h:
2419         (JSC::Parser::next):
2420         (JSC::Parser::nextExpectIdentifier):
2421         (JSC::Parser::getToken):
2422         (JSC::Parser::tokenStartPosition):
2423         (JSC::Parser::tokenEndPosition):
2424         (JSC::Parser::lastTokenEndPosition):
2425         (JSC::::parse):
2426         - Use JSTextPosition instead of passing line and lineStart explicitly.
2427         * parser/ParserTokens.h:
2428         (JSC::JSTextPosition::JSTextPosition):
2429         (JSC::JSTextPosition::operator+):
2430         (JSC::JSTextPosition::operator-):
2431         (JSC::JSTextPosition::operator int):
2432         - Added JSTextPosition.
2433         * parser/SyntaxChecker.h:
2434         (JSC::SyntaxChecker::makeFunctionCallNode):
2435         (JSC::SyntaxChecker::makeAssignNode):
2436         (JSC::SyntaxChecker::makePrefixNode):
2437         (JSC::SyntaxChecker::makePostfixNode):
2438         (JSC::SyntaxChecker::makeDeleteNode):
2439         (JSC::SyntaxChecker::createResolve):
2440         (JSC::SyntaxChecker::createBracketAccess):
2441         (JSC::SyntaxChecker::createDotAccess):
2442         (JSC::SyntaxChecker::createRegExp):
2443         (JSC::SyntaxChecker::createNewExpr):
2444         (JSC::SyntaxChecker::createAssignResolve):
2445         (JSC::SyntaxChecker::createForInLoop):
2446         (JSC::SyntaxChecker::createReturnStatement):
2447         (JSC::SyntaxChecker::createBreakStatement):
2448         (JSC::SyntaxChecker::createContinueStatement):
2449         (JSC::SyntaxChecker::createWithStatement):
2450         (JSC::SyntaxChecker::createLabelStatement):
2451         (JSC::SyntaxChecker::createThrowStatement):
2452         (JSC::SyntaxChecker::appendBinaryExpressionInfo):
2453         (JSC::SyntaxChecker::operatorStackPop):
2454         - Use JSTextPosition instead of passing line and lineStart explicitly.
2455
2456 2013-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>
2457
2458         Unreviewed. Fix make distcheck.
2459
2460         * GNUmakefile.list.am: Add missing files to compilation.
2461         * bytecode/CodeBlock.cpp: Add a ENABLE(FTL_JIT) #if block to
2462         include FTL header files not included in the compilation.
2463         * dfg/DFGDriver.cpp: Ditto.
2464         * dfg/DFGPlan.cpp: Ditto.
2465
2466 2013-07-29  Chris Curtis  <chris_curtis@apple.com>
2467
2468         Eager stack trace for error objects.
2469         https://bugs.webkit.org/show_bug.cgi?id=118918
2470
2471         Reviewed by Geoffrey Garen.
2472         
2473         Chrome and Firefox give error objects the stack property and we wanted to match
2474         that functionality. This allows developers to see the stack without throwing an object.
2475
2476         * runtime/ErrorInstance.cpp:
2477         (JSC::ErrorInstance::finishCreation):
2478          For error objects that are not thrown as an exception, we pass the stackTrace in 
2479          as a parameter. This allows the error object to have the stack property.
2480         
2481         * interpreter/Interpreter.cpp:
2482         (JSC::stackTraceAsString):
2483         Helper function used to eliminate duplicate code.
2484
2485         (JSC::Interpreter::addStackTraceIfNecessary):
2486         When an error object is created by the user the vm->exceptionStack is not set.
2487         If the user throws this error object later the stack that is in the error object 
2488         may not be the correct stack for the throw, so when we set the vm->exception stack,
2489         the stack property on the error object is set as well.
2490         
2491         * runtime/ErrorConstructor.cpp:
2492         (JSC::constructWithErrorConstructor):
2493         (JSC::callErrorConstructor):
2494         * runtime/NativeErrorConstructor.cpp:
2495         (JSC::constructWithNativeErrorConstructor):
2496         (JSC::callNativeErrorConstructor):
2497         These functions indicate that the user created an error object. For all error objects 
2498         that the user explicitly creates, the topCallFrame is at a new frame created to 
2499         handle the user's call. In this case though, the error object needs the caller's 
2500         frame to create the stack trace correctly.
2501         
2502         * interpreter/Interpreter.h:
2503         * runtime/ErrorInstance.h:
2504         (JSC::ErrorInstance::create):
2505
2506 2013-07-29  Gavin Barraclough  <barraclough@apple.com>
2507
2508         Some cleanup in PropertySlot
2509         https://bugs.webkit.org/show_bug.cgi?id=119189
2510
2511         Reviewed by Geoff Garen.
2512
2513         PropertySlot represents a property in one of four states - value, getter, custom, or custom-index.
2514         The state is currently tracked redundantly by two mechanisms - the custom getter function (m_getValue)
2515         is set to a special value to indicate the type (other than custom), and the type is also tracked by
2516         an enum - but only if cacheable. Cacheability can typically be determined by the value of m_offset
2517         (this is invalidOffset if not cacheable).
2518
2519             * Internally, always track the type of the property using an enum value, PropertyType.
2520             * Use m_offset to indicate cacheable.
2521             * Keep the external interface (CachedPropertyType) unchanged.
2522             * Better pack data into the m_data union.
2523
2524         Performance neutral.
2525
2526         * dfg/DFGRepatch.cpp:
2527         (JSC::DFG::tryCacheGetByID):
2528         (JSC::DFG::tryBuildGetByIDList):
2529             - cachedPropertyType() -> isCacheable*()
2530         * jit/JITPropertyAccess.cpp:
2531         (JSC::JIT::privateCompileGetByIdProto):
2532         (JSC::JIT::privateCompileGetByIdSelfList):
2533         (JSC::JIT::privateCompileGetByIdProtoList):
2534         (JSC::JIT::privateCompileGetByIdChainList):
2535         (JSC::JIT::privateCompileGetByIdChain):
2536             - cachedPropertyType() -> isCacheable*()
2537         * jit/JITPropertyAccess32_64.cpp:
2538         (JSC::JIT::privateCompileGetByIdProto):
2539         (JSC::JIT::privateCompileGetByIdSelfList):
2540         (JSC::JIT::privateCompileGetByIdProtoList):
2541         (JSC::JIT::privateCompileGetByIdChainList):
2542         (JSC::JIT::privateCompileGetByIdChain):
2543             - cachedPropertyType() -> isCacheable*()
2544         * jit/JITStubs.cpp:
2545         (JSC::tryCacheGetByID):
2546             - cachedPropertyType() -> isCacheable*()
2547         * llint/LLIntSlowPaths.cpp:
2548         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2549             - cachedPropertyType() -> isCacheable*()
2550         * runtime/PropertySlot.cpp:
2551         (JSC::PropertySlot::functionGetter):
2552             - refactoring described above.
2553         * runtime/PropertySlot.h:
2554         (JSC::PropertySlot::PropertySlot):
2555         (JSC::PropertySlot::getValue):
2556         (JSC::PropertySlot::isCacheable):
2557         (JSC::PropertySlot::isCacheableValue):
2558         (JSC::PropertySlot::isCacheableGetter):
2559         (JSC::PropertySlot::isCacheableCustom):
2560         (JSC::PropertySlot::cachedOffset):
2561         (JSC::PropertySlot::customGetter):
2562         (JSC::PropertySlot::setValue):
2563         (JSC::PropertySlot::setCustom):
2564         (JSC::PropertySlot::setCacheableCustom):
2565         (JSC::PropertySlot::setCustomIndex):
2566         (JSC::PropertySlot::setGetterSlot):
2567         (JSC::PropertySlot::setCacheableGetterSlot):
2568         (JSC::PropertySlot::setUndefined):
2569         (JSC::PropertySlot::slotBase):
2570         (JSC::PropertySlot::setBase):
2571             - refactoring described above.
2572
2573 2013-07-28  Oliver Hunt  <oliver@apple.com>
2574
2575         REGRESSION: Crash when opening Facebook.com
2576         https://bugs.webkit.org/show_bug.cgi?id=119155
2577
2578         Reviewed by Andreas Kling.
2579
2580         Scope nodes are always objects, so we should be using SpecObjectOther
2581         rather than SpecCellOther.  Marking Scopes as CellOther leads to a
2582         contradiction in the CFA, resulting in bogus codegen.
2583
2584         * dfg/DFGAbstractInterpreterInlines.h:
2585         (JSC::DFG::::executeEffects):
2586         * dfg/DFGPredictionPropagationPhase.cpp:
2587         (JSC::DFG::PredictionPropagationPhase::propagate):
2588
2589 2013-07-26  Oliver Hunt  <oliver@apple.com>
2590
2591         REGRESSION(FTL?): Crashes in plugin tests
2592         https://bugs.webkit.org/show_bug.cgi?id=119141
2593
2594         Reviewed by Michael Saboff.
2595
2596         Re-export getStackTrace
2597
2598         * interpreter/Interpreter.h:
2599
2600 2013-07-26  Filip Pizlo  <fpizlo@apple.com>
2601
2602         REGRESSION: Crash when opening a message on Gmail
2603         https://bugs.webkit.org/show_bug.cgi?id=119105
2604
2605         Reviewed by Oliver Hunt and Mark Hahnenberg.
2606         
2607         - GetById patching in the DFG needs to be more disciplined about how it derives the
2608           slow path.
2609         
2610         - Fix some dumping code thread safety issues.
2611
2612         * bytecode/CallLinkStatus.cpp:
2613         (JSC::CallLinkStatus::dump):
2614         * bytecode/CodeBlock.cpp:
2615         (JSC::CodeBlock::dumpBytecode):
2616         * dfg/DFGRepatch.cpp:
2617         (JSC::DFG::getPolymorphicStructureList):
2618         (JSC::DFG::tryBuildGetByIDList):
2619
2620 2013-07-26  Balazs Kilvady  <kilvadyb@homejinni.com>
2621
2622         [mips] Fix LLINT build for mips backend
2623         https://bugs.webkit.org/show_bug.cgi?id=119152
2624
2625         Reviewed by Oliver Hunt.
2626
2627         * offlineasm/mips.rb:
2628
2629 2013-07-19  Mark Hahnenberg  <mhahnenberg@apple.com>
2630
2631         Setting a large numeric property on an object causes it to allocate a huge backing store
2632         https://bugs.webkit.org/show_bug.cgi?id=118914
2633
2634         Reviewed by Geoffrey Garen.
2635
2636         There are two distinct actions that we're trying to optimize for:
2637
2638         new Array(100000);
2639
2640         and:
2641
2642         a = [];
2643         a[100000] = 42;
2644         
2645         In the first case, the programmer has indicated that they expect this Array to be very big, 
2646         so they should get a contiguous array up until some threshold, above which we perform density 
2647         calculations to see if it is indeed dense enough to warrant being contiguous.
2648         
2649         In the second case, the programmer hasn't indicated anything about the size of the Array, so 
2650         we should be more conservative and assume it should be sparse until we've proven otherwise.
2651         
2652         Currently both of those cases are handled by MIN_SPARSE_ARRAY_INDEX. We should distinguish 
2653         between them for the purposes of not over-allocating large backing stores like we see on 
2654         http://www.peekanalytics.com/burgerjoints/
2655         
2656         The way that we'll do this is to keep the MIN_SPARSE_ARRAY_INDEX for the first case, and 
2657         introduce a new heuristic for the second case. If we are putting to an index above a certain 
2658         threshold (say, 1000) and it is beyond the length of the array, then we will use a sparse 
2659         map instead. So for example, in the second case above the empty array has a blank indexing 
2660         type and a length of 0. We put-by-val to an index > 1000 and > a.length, so we'll use a sparse map.
2661
2662         This fix is ~800x speedup on the accompanying regression test :-o
2663
2664         * runtime/ArrayConventions.h:
2665         (JSC::indexIsSufficientlyBeyondLengthForSparseMap):
2666         * runtime/JSObject.cpp:
2667         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
2668         (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
2669         (JSC::JSObject::putByIndexBeyondVectorLength):
2670         (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
2671
2672 2013-07-26  Julien Brianceau  <jbrianceau@nds.com>
2673
2674         REGRESSION(FTL): Fix lots of crashes in sh4 baseline JIT.
2675         https://bugs.webkit.org/show_bug.cgi?id=119148
2676
2677         Reviewed by Csaba Osztrogonác.
2678
2679         * jit/JSInterfaceJIT.h: "secondArgumentRegister" is wrong for sh4.
2680         * llint/LowLevelInterpreter32_64.asm: "move t0, a0" is missing
2681         in nativeCallTrampoline for sh4. Reuse MIPS implementation to avoid
2682         code duplication.
2683
2684 2013-07-26  Julien Brianceau  <jbrianceau@nds.com>
2685
2686         REGRESSION(FTL): Crash in sh4 baseline JIT.
2687         https://bugs.webkit.org/show_bug.cgi?id=119138
2688
2689         Reviewed by Csaba Osztrogonác.
2690
2691         This crash is due to incomplete report of r150146 and r148474.
2692
2693         * jit/JITStubsSH4.h:
2694
2695 2013-07-26  Zan Dobersek  <zdobersek@igalia.com>
2696
2697         Unreviewed.
2698
2699         * Target.pri: Adding missing DFG files to the Qt build.
2700
2701 2013-07-25  Csaba Osztrogonác  <ossy@webkit.org>
2702
2703         GTK and Qt buildfix after the intrusive win buildfix r153360.
2704
2705         * GNUmakefile.list.am:
2706         * Target.pri:
2707
2708 2013-07-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
2709
2710         Unreviewed, fix build break after r153360.
2711
2712         * CMakeLists.txt: Add CommonSlowPathsExceptions.cpp.
2713
2714 2013-07-25  Roger Fong  <roger_fong@apple.com>
2715
2716         Unreviewed build fix, AppleWin port.
2717
2718         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2719         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
2720         * JavaScriptCore.vcxproj/copy-files.cmd:
2721
2722 2013-07-25  Roger Fong  <roger_fong@apple.com>
2723
2724         Unreviewed. Followup to r153360.
2725
2726         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2727         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
2728
2729 2013-07-25  Michael Saboff  <msaboff@apple.com>
2730
2731         [Windows] Speculative build fix.
2732
2733         Moved interpreterThrowInCaller() out of LLintExceptions.cpp into new CommonSlowPathsExceptions.cpp
2734         that is always compiled.  Made LLInt::returnToThrow() conditional on LLINT being enabled.
2735
2736         * JavaScriptCore.xcodeproj/project.pbxproj:
2737         * llint/LLIntExceptions.cpp:
2738         * llint/LLIntExceptions.h:
2739         * llint/LLIntSlowPaths.cpp:
2740         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2741         * runtime/CommonSlowPaths.cpp:
2742         (JSC::SLOW_PATH_DECL):
2743         * runtime/CommonSlowPathsExceptions.cpp: Added.
2744         (JSC::CommonSlowPaths::interpreterThrowInCaller):
2745         * runtime/CommonSlowPathsExceptions.h: Added.
2746
2747 2013-07-25  Brent Fulgham  <bfulgham@apple.com>
2748
2749         [Windows] Unreviewed build fix.
2750
2751         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing IntendedStructureChange.h,.cpp and
2752         parser/SourceCode.h,.cpp.
2753         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
2754
2755 2013-07-25  Anders Carlsson  <andersca@apple.com>
2756
2757         ASSERT(m_vm->apiLock().currentThreadIsHoldingLock()); fails for Safari on current ToT
2758         https://bugs.webkit.org/show_bug.cgi?id=119108
2759
2760         Reviewed by Mark Hahnenberg.
2761
2762         Add a currentThreadIsHoldingAPILock() function to VM that checks if the current thread is the exclusive API thread.
2763
2764         * heap/CopiedSpace.cpp:
2765         (JSC::CopiedSpace::tryAllocateSlowCase):
2766         * heap/Heap.cpp:
2767         (JSC::Heap::protect):
2768         (JSC::Heap::unprotect):
2769         (JSC::Heap::collect):
2770         * heap/MarkedAllocator.cpp:
2771         (JSC::MarkedAllocator::allocateSlowCase):
2772         * runtime/JSGlobalObject.cpp:
2773         (JSC::JSGlobalObject::init):
2774         * runtime/VM.h:
2775         (JSC::VM::currentThreadIsHoldingAPILock):
2776
2777 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
2778
2779         REGRESSION(FTL): Most layout tests crashes
2780         https://bugs.webkit.org/show_bug.cgi?id=119089
2781
2782         Reviewed by Oliver Hunt.
2783
2784         * runtime/ExecutionHarness.h:
2785         (JSC::prepareForExecution): Move prepareForExecutionImpl call into its own statement. This prevents the GCC-compiled
2786         code to create the PassOwnPtr<JSC::JITCode> (intended as a parameter to the installOptimizedCode call) from the jitCode
2787         RefPtr<JSC::JITCode> parameter before the latter was actually given a proper value through the prepareForExecutionImpl call.
2788         Currently it's created beforehand and therefor holds a null pointer before it's anchored as the JIT code in
2789         JSC::CodeBlock::setJITCode, which later indirectly causes assertions in JSC::CodeBlock::jitCompile.
2790         (JSC::prepareFunctionForExecution): Ditto for prepareFunctionForExecutionImpl.
2791
2792 2013-07-25  Brent Fulgham  <bfulgham@apple.com>
2793
2794         [Windows] Unreviewed build fix.
2795
2796         * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props: Add missing 'ftl'
2797         include path.
2798
2799 2013-07-25  Brent Fulgham  <bfulgham@apple.com>
2800
2801         [Windows] Unreviewed build fix.
2802
2803         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add some missing files:
2804         runtime/VM.h,.cpp; Remove deleted JSGlobalData.h,.cpp.
2805         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
2806
2807 2013-07-25  Oliver Hunt  <oliver@apple.com>
2808
2809         Make all jit & non-jit combos build cleanly
2810         https://bugs.webkit.org/show_bug.cgi?id=119102
2811
2812         Reviewed by Anders Carlsson.
2813
2814         * bytecode/CodeBlock.cpp:
2815         (JSC::CodeBlock::counterValueForOptimizeSoon):
2816         * bytecode/CodeBlock.h:
2817         (JSC::CodeBlock::optimizeAfterWarmUp):
2818         (JSC::CodeBlock::numberOfDFGCompiles):
2819
2820 2013-07-25  Oliver Hunt  <oliver@apple.com>
2821
2822         32 bit portion of load validation logic
2823         https://bugs.webkit.org/show_bug.cgi?id=118878
2824
2825         Reviewed by NOBODY (Build fix).
2826
2827         * dfg/DFGSpeculativeJIT32_64.cpp:
2828         (JSC::DFG::SpeculativeJIT::compile):
2829
2830 2013-07-25  Oliver Hunt  <oliver@apple.com>
2831
2832         More 32bit build fixes
2833
2834         - Apparnetly some compilers don't track the fastcall directive everywhere we expect
2835
2836         * API/APICallbackFunction.h:
2837         (JSC::APICallbackFunction::call):
2838         * bytecode/CodeBlock.cpp:
2839         * runtime/Structure.cpp:
2840
2841 2013-07-25  Yi Shen  <max.hong.shen@gmail.com>
2842
2843         Optimize the thread locks for API Shims
2844         https://bugs.webkit.org/show_bug.cgi?id=118573
2845
2846         Reviewed by Geoffrey Garen.
2847
2848         Remove the thread lock from API Shims if the VM has an exclusive thread (e.g. the VM 
2849         only used by WebCore's main thread).
2850
2851         * API/APIShims.h:
2852         (JSC::APIEntryShim::APIEntryShim):
2853         (JSC::APICallbackShim::APICallbackShim):
2854         * runtime/JSLock.cpp:
2855         (JSC::JSLockHolder::JSLockHolder):
2856         (JSC::JSLockHolder::init):
2857         (JSC::JSLockHolder::~JSLockHolder):
2858         (JSC::JSLock::DropAllLocks::DropAllLocks):
2859         (JSC::JSLock::DropAllLocks::~DropAllLocks):
2860         * runtime/VM.cpp:
2861         (JSC::VM::VM):
2862         * runtime/VM.h:
2863
2864 2013-07-25  Christophe Dumez  <ch.dumez@sisa.samsung.com>
2865
2866         Unreviewed build fix after r153218.
2867
2868         Broke the EFL port build with gcc 4.7.
2869
2870         * interpreter/StackIterator.cpp:
2871         (JSC::printif):
2872
2873 2013-07-25  Julien Brianceau  <jbrianceau@nds.com>
2874
2875         Build fix: add missing #include.
2876         https://bugs.webkit.org/show_bug.cgi?id=119087
2877
2878         Reviewed by Allan Sandfeld Jensen.
2879
2880         * bytecode/ArrayProfile.cpp:
2881
2882 2013-07-25  Ryuan Choi  <ryuan.choi@samsung.com>
2883
2884         Unreviewed, build fix on the EFL port.
2885
2886         * CMakeLists.txt: Added JSCTestRunnerUtils.cpp.
2887
2888 2013-07-25  Julien Brianceau  <jbrianceau@nds.com>
2889
2890         [sh4] Add missing store8(TrustedImm32, void*) implementation in baseline JIT.
2891         https://bugs.webkit.org/show_bug.cgi?id=119083
2892
2893         Reviewed by Allan Sandfeld Jensen.
2894
2895         * assembler/MacroAssemblerSH4.h:
2896         (JSC::MacroAssemblerSH4::store8):
2897
2898 2013-07-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>
2899
2900         [Qt] Fix test build after FTL upstream
2901
2902         Unreviewed build fix.
2903
2904         * Target.pri:
2905
2906 2013-07-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>
2907
2908         [Qt] Build fix after FTL.
2909
2910         Un Reviewed build fix.
2911
2912         * Target.pri:
2913         * interpreter/StackIterator.cpp:
2914         (JSC::StackIterator::Frame::print):
2915
2916 2013-07-25  Gabor Rapcsanyi  <rgabor@webkit.org>
2917
2918         Unreviewed build fix after FTL upstream.
2919
2920         * dfg/DFGWorklist.cpp:
2921         (JSC::DFG::Worklist::~Worklist):
2922
2923 2013-07-25  Ryuan Choi  <ryuan.choi@samsung.com>
2924
2925         Unreviewed, build fix on the EFL port.
2926
2927         * CMakeLists.txt:
2928         Added SourceCode.cpp and removed BlackBerry file.
2929         * jit/JITCode.h:
2930         (JSC::JITCode::nextTierJIT):
2931         Fixed to build break because of -Werror=return-type
2932         * parser/Lexer.cpp: Includes JSFunctionInlines.h
2933         * runtime/JSScope.h:
2934         (JSC::makeType):
2935         Fixed to build break because of -Werror=return-type
2936
2937 2013-07-25  Ádám Kallai  <kadam@inf.u-szeged.hu>
2938
2939         Unreviewed build fixing after FTL upstream.
2940
2941         * runtime/Executable.cpp:
2942         (JSC::FunctionExecutable::produceCodeBlockFor):
2943
2944 2013-07-25  Julien Brianceau  <jbrianceau@nds.com>
2945
2946         Add missing implementation of bxxxnz in sh4 LLINT.
2947         https://bugs.webkit.org/show_bug.cgi?id=119079
2948
2949         Reviewed by Allan Sandfeld Jensen.
2950
2951         * offlineasm/sh4.rb:
2952
2953 2013-07-25  Gabor Rapcsanyi  <rgabor@webkit.org>
2954
2955         Unreviewed, build fix on the Qt port.
2956
2957         * Target.pri: Add additional build files for the FTL.
2958
2959 2013-07-25  Ádám Kallai  <kadam@inf.u-szeged.hu>
2960
2961         Unreviewed buildfix after FTL upstream..
2962
2963         * interpreter/StackIterator.cpp:
2964         (JSC::StackIterator::Frame::codeType):
2965         (JSC::StackIterator::Frame::functionName):
2966         (JSC::StackIterator::Frame::sourceURL):
2967         (JSC::StackIterator::Frame::logicalFrame):
2968
2969 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
2970
2971         Unreviewed.
2972
2973         * heap/CopyVisitor.cpp: Include CopiedSpaceInlines header so the CopiedSpace::recycleEvacuatedBlock
2974         method is not left undefined, causing build failures on (at least) the GTK port.
2975
2976 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
2977
2978         Unreviewed, further build fixing on the GTK port.
2979
2980         * GNUmakefile.list.am: Add CompilationResult source files to the build.
2981
2982 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
2983
2984         Unreviewed GTK build fixing.
2985
2986         * GNUmakefile.am: Make the shared libjsc library depend on any changes to the build target list.
2987         * GNUmakefile.list.am: Add additional build targets for files that were introduced by the FTL branch merge.
2988
2989 2013-07-25  Csaba Osztrogonác  <ossy@webkit.org>
2990
2991         Buildfix after this error:
2992         error: 'pathName' may be used uninitialized in this function [-Werror=uninitialized]
2993
2994         * dfg/DFGPlan.cpp:
2995         (JSC::DFG::Plan::compileInThread):
2996
2997 2013-07-25  Csaba Osztrogonác  <ossy@webkit.org>
2998
2999         One more buildfix after FTL upstream.
3000
3001         Return a dummy value after RELEASE_ASSERT_NOT_REACHED() to make GCC happy.
3002
3003         * dfg/DFGLazyJSValue.cpp:
3004         (JSC::DFG::LazyJSValue::getValue):
3005         (JSC::DFG::LazyJSValue::strictEqual):
3006
3007 2013-07-25  Julien Brianceau  <jbrianceau@nds.com>
3008
3009         Fix "Unhandled opcode localAnnotation" build error in sh4 and mips LLINT.
3010         https://bugs.webkit.org/show_bug.cgi?id=119076
3011
3012         Reviewed by Allan Sandfeld Jensen.
3013
3014         * offlineasm/mips.rb:
3015         * offlineasm/sh4.rb:
3016
3017 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
3018
3019         Unreviewed GTK build fix.
3020
3021         * GNUmakefile.list.am: Adding JSCTestRunnerUtils files to the build.
3022
3023 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
3024
3025         Unreviewed. Further build fixing for the GTK port. Adding the forwarding header
3026         for JSCTestRunnerUtils.h as required by the DumpRenderTree compilation.
3027
3028         * ForwardingHeaders/JavaScriptCore/JSCTestRunnerUtils.h: Added.
3029
3030 2013-07-25  Zan Dobersek  <zdobersek@igalia.com>
3031
3032         Unreviewed. Fixing the GTK build after the FTL merging by updating the build targets list.
3033
3034         * GNUmakefile.am:
3035         * GNUmakefile.list.am:
3036
3037 2013-07-25  Ádám Kallai  <kadam@inf.u-szeged.hu>
3038
3039         Unreviewed buildfix after FTL upstream.
3040
3041         * runtime/JSScope.h:
3042         (JSC::needsVarInjectionChecks):
3043
3044 2013-07-25  Csaba Osztrogonác  <ossy@webkit.org>
3045
3046         One more fix after FTL upstream.
3047
3048         * Target.pri:
3049         * bytecode/CodeBlock.h:
3050         * bytecode/GetByIdStatus.h:
3051         (JSC::GetByIdStatus::GetByIdStatus):
3052
3053 2013-07-24  Csaba Osztrogonác  <ossy@webkit.org>
3054
3055         Unreviewed buildfix after FTL upstream.
3056
3057         Add ftl directory as include path.
3058
3059         * CMakeLists.txt:
3060         * JavaScriptCore.pri:
3061
3062 2013-07-24  Csaba Osztrogonác  <ossy@webkit.org>
3063
3064         Unreviewed buildfix after FTL upstream for non C++11 builds.
3065
3066         * interpreter/CallFrame.h:
3067         * interpreter/StackIteratorPrivate.h:
3068         (JSC::StackIterator::end):
3069
3070 2013-07-24  Oliver Hunt  <oliver@apple.com>
3071
3072         Endeavour to fix CMakelist builds
3073
3074         * CMakeLists.txt:
3075
3076 2013-07-24  Filip Pizlo  <fpizlo@apple.com>
3077
3078         fourthTier: DFG IR dumps should be easier to read
3079         https://bugs.webkit.org/show_bug.cgi?id=119050
3080
3081         Reviewed by Mark Hahnenberg.
3082         
3083         Added a DumpContext that includes support for printing an endnote
3084         that describes all structures in full, while the main flow of the
3085         dump just uses made-up names for the structures. This is helpful
3086         since Structure::dump() may print a lot. The stuff it prints is
3087         useful, but if it's all inline with the surrounding thing you're        
3088         dumping (often, a node in the DFG), then you get a ridiculously
3089         long print-out. All classes that dump structures (including
3090         Structure itself) now have dumpInContext() methods that use
3091         inContext() for dumping anything that might transitively print a
3092         structure. If Structure::dumpInContext() is called with a NULL
3093         context, it just uses dump() like before. Hence you don't have to
3094         know anything about DumpContext unless you want to.
3095         
3096         inContext(*structure, context) dumps something like %B4:Array,
3097         and the endnote will have something like:
3098         
3099             %B4:Array    = 0x10e91a180:[Array, {Edge:100, Normal:101, Line:102, NumPx:103, LastPx:104}, ArrayWithContiguous, Proto:0x10e99ffe0]
3100         
3101         where B4 is the inferred name that StringHashDumpContext came up
3102         with.
3103         
3104         Also shortened a bunch of other dumps, removing information that
3105         isn't so important.
3106         
3107         * JavaScriptCore.xcodeproj/project.pbxproj:
3108         * bytecode/ArrayProfile.cpp:
3109         (JSC::dumpArrayModes):
3110         * bytecode/CodeBlockHash.cpp:
3111         (JSC):
3112         (JSC::CodeBlockHash::CodeBlockHash):
3113         (JSC::CodeBlockHash::dump):
3114         * bytecode/CodeOrigin.cpp:
3115         (JSC::CodeOrigin::dumpInContext):
3116         (JSC):
3117         (JSC::InlineCallFrame::dumpInContext):
3118         (JSC::InlineCallFrame::dump):
3119         * bytecode/CodeOrigin.h:
3120         (CodeOrigin):
3121         (InlineCallFrame):
3122         * bytecode/Operands.h:
3123         (JSC::OperandValueTraits::isEmptyForDump):
3124         (Operands):
3125         (JSC::Operands::dump):
3126         (JSC):
3127         * bytecode/OperandsInlines.h: Added.
3128         (JSC):
3129         (JSC::::dumpInContext):
3130         * bytecode/StructureSet.h:
3131         (JSC::StructureSet::dumpInContext):
3132         (JSC::StructureSet::dump):
3133         (StructureSet):
3134         * dfg/DFGAbstractValue.cpp:
3135         (JSC::DFG::AbstractValue::dump):
3136         (DFG):
3137         (JSC::DFG::AbstractValue::dumpInContext):
3138         * dfg/DFGAbstractValue.h:
3139         (JSC::DFG::AbstractValue::operator!):
3140         (AbstractValue):
3141         * dfg/DFGCFAPhase.cpp:
3142         (JSC::DFG::CFAPhase::performBlockCFA):
3143         * dfg/DFGCommon.cpp:
3144         * dfg/DFGCommon.h:
3145         (JSC::DFG::NodePointerTraits::isEmptyForDump):
3146         * dfg/DFGDisassembler.cpp:
3147         (JSC::DFG::Disassembler::createDumpList):
3148         * dfg/DFGDisassembler.h:
3149         (Disassembler):
3150         * dfg/DFGFlushFormat.h:
3151         (WTF::inContext):
3152         (WTF):
3153         * dfg/DFGFlushLivenessAnalysisPhase.cpp:
3154         * dfg/DFGGraph.cpp:
3155         (JSC::DFG::Graph::dumpCodeOrigin):
3156         (JSC::DFG::Graph::dump):
3157         (JSC::DFG::Graph::dumpBlockHeader):
3158         * dfg/DFGGraph.h:
3159         (Graph):
3160         * dfg/DFGLazyJSValue.cpp:
3161         (JSC::DFG::LazyJSValue::dumpInContext):
3162         (JSC::DFG::LazyJSValue::dump):
3163         (DFG):
3164         * dfg/DFGLazyJSValue.h:
3165         (LazyJSValue):
3166         * dfg/DFGNode.h:
3167         (JSC::DFG::nodeMapDump):
3168         (WTF::inContext):
3169         (WTF):
3170         * dfg/DFGOSRExitCompiler32_64.cpp:
3171         (JSC::DFG::OSRExitCompiler::compileExit):
3172         * dfg/DFGOSRExitCompiler64.cpp:
3173         (JSC::DFG::OSRExitCompiler::compileExit):
3174         * dfg/DFGStructureAbstractValue.h:
3175         (JSC::DFG::StructureAbstractValue::dumpInContext):
3176         (JSC::DFG::StructureAbstractValue::dump):
3177         (StructureAbstractValue):
3178         * ftl/FTLExitValue.cpp:
3179         (JSC::FTL::ExitValue::dumpInContext):
3180         (JSC::FTL::ExitValue::dump):
3181         (FTL):
3182         * ftl/FTLExitValue.h:
3183         (ExitValue):
3184         * ftl/FTLLowerDFGToLLVM.cpp:
3185         * ftl/FTLValueSource.cpp:
3186         (JSC::FTL::ValueSource::dumpInContext):
3187         (FTL):
3188         * ftl/FTLValueSource.h:
3189         (ValueSource):
3190         * runtime/DumpContext.cpp: Added.
3191         (JSC):
3192         (JSC::DumpContext::DumpContext):
3193         (JSC::DumpContext::~DumpContext):
3194         (JSC::DumpContext::isEmpty):
3195         (JSC::DumpContext::dump):
3196         * runtime/DumpContext.h: Added.
3197         (JSC):
3198         (DumpContext):
3199         * runtime/JSCJSValue.cpp:
3200         (JSC::JSValue::dump):
3201         (JSC):
3202         (JSC::JSValue::dumpInContext):
3203         * runtime/JSCJSValue.h:
3204         (JSC):
3205         (JSValue):
3206         * runtime/Structure.cpp:
3207         (JSC::Structure::dumpInContext):
3208         (JSC):
3209         (JSC::Structure::dumpBrief):
3210         (JSC::Structure::dumpContextHeader):
3211         * runtime/Structure.h:
3212         (JSC):
3213         (Structure):
3214
3215 2013-07-22  Filip Pizlo  <fpizlo@apple.com>
3216
3217         fourthTier: DFG should do a high-level LICM before going to FTL
3218         https://bugs.webkit.org/show_bug.cgi?id=118749
3219
3220         Reviewed by Oliver Hunt.
3221         
3222         Implements LICM hoisting for nodes that never write anything and never read
3223         things that are clobbered by the loop. There are some other preconditions for
3224         hoisting, see DFGLICMPhase.cpp.
3225
3226         Also did a few fixes:
3227         
3228         - ClobberSet::add was failing to switch Super entries to Direct entries in
3229           some cases.
3230         
3231         - DFGClobberize.cpp needed to #include "Operations.h".
3232         
3233         - DCEPhase needs to process the graph in reverse DFS order, when we're in SSA.
3234         
3235         - AbstractInterpreter can now execute a Node without knowing its indexInBlock.
3236           Knowing the indexInBlock is an optional optimization that all other clients
3237           of AI still opt into, but LICM doesn't.
3238         
3239         This makes the FTL a 2.19x speed-up on imaging-gaussian-blur.
3240
3241         * JavaScriptCore.xcodeproj/project.pbxproj:
3242         * dfg/DFGAbstractInterpreter.h:
3243         (AbstractInterpreter):
3244         * dfg/DFGAbstractInterpreterInlines.h:
3245         (JSC::DFG::::executeEffects):
3246         (JSC::DFG::::execute):
3247         (DFG):
3248         (JSC::DFG::::clobberWorld):
3249         (JSC::DFG::::clobberStructures):
3250         * dfg/DFGAtTailAbstractState.cpp: Added.
3251         (DFG):
3252         (JSC::DFG::AtTailAbstractState::AtTailAbstractState):
3253         (JSC::DFG::AtTailAbstractState::~AtTailAbstractState):
3254         (JSC::DFG::AtTailAbstractState::createValueForNode):
3255         (JSC::DFG::AtTailAbstractState::forNode):
3256         * dfg/DFGAtTailAbstractState.h: Added.
3257         (DFG):
3258         (AtTailAbstractState):
3259         (JSC::DFG::AtTailAbstractState::initializeTo):
3260         (JSC::DFG::AtTailAbstractState::forNode):
3261         (JSC::DFG::AtTailAbstractState::variables):
3262         (JSC::DFG::AtTailAbstractState::block):
3263         (JSC::DFG::AtTailAbstractState::isValid):
3264         (JSC::DFG::AtTailAbstractState::setDidClobber):
3265         (JSC::DFG::AtTailAbstractState::setIsValid):
3266         (JSC::DFG::AtTailAbstractState::setBranchDirection):
3267         (JSC::DFG::AtTailAbstractState::setFoundConstants):
3268         (JSC::DFG::AtTailAbstractState::haveStructures):
3269         (JSC::DFG::AtTailAbstractState::setHaveStructures):
3270         * dfg/DFGBasicBlock.h:
3271         (JSC::DFG::BasicBlock::insertBeforeLast):
3272         * dfg/DFGBasicBlockInlines.h:
3273         (DFG):
3274         * dfg/DFGClobberSet.cpp:
3275         (JSC::DFG::ClobberSet::add):
3276         (JSC::DFG::ClobberSet::addAll):
3277         * dfg/DFGClobberize.cpp:
3278         (JSC::DFG::doesWrites):
3279         * dfg/DFGClobberize.h:
3280         (DFG):
3281         * dfg/DFGDCEPhase.cpp:
3282         (JSC::DFG::DCEPhase::DCEPhase):
3283         (JSC::DFG::DCEPhase::run):
3284         (JSC::DFG::DCEPhase::fixupBlock):
3285         (DCEPhase):
3286         * dfg/DFGEdgeDominates.h: Added.
3287         (DFG):
3288         (EdgeDominates):
3289         (JSC::DFG::EdgeDominates::EdgeDominates):
3290         (JSC::DFG::EdgeDominates::operator()):
3291         (JSC::DFG::EdgeDominates::result):
3292         (JSC::DFG::edgesDominate):
3293         * dfg/DFGFixupPhase.cpp:
3294         (JSC::DFG::FixupPhase::fixupNode):
3295         (JSC::DFG::FixupPhase::checkArray):
3296         * dfg/DFGLICMPhase.cpp: Added.
3297         (LICMPhase):
3298         (JSC::DFG::LICMPhase::LICMPhase):
3299         (JSC::DFG::LICMPhase::run):
3300         (JSC::DFG::LICMPhase::attemptHoist):
3301         (DFG):
3302         (JSC::DFG::performLICM):
3303         * dfg/DFGLICMPhase.h: Added.
3304         (DFG):
3305         * dfg/DFGPlan.cpp:
3306         (JSC::DFG::Plan::compileInThreadImpl):
3307
3308 2013-07-21  Filip Pizlo  <fpizlo@apple.com>
3309
3310         fourthTier: DFG Nodes should be able to abstractly tell you what they read and what they write
3311         https://bugs.webkit.org/show_bug.cgi?id=118910
3312
3313         Reviewed by Sam Weinig.
3314         
3315         Add the notion of AbstractHeap to the DFG. This is analogous to the AbstractHeap in
3316         the FTL, except that the FTL's AbstractHeaps are used during LLVM lowering and are
3317         engineered to obey LLVM TBAA logic. The FTL's AbstractHeaps are also engineered to
3318         be inexpensive to use (they just give you a TBAA node) but expensive to create (you
3319         create them all up front). FTL AbstractHeaps also don't actually give you the
3320         ability to reason about aliasing; they are *just* a mechanism for lowering to TBAA.
3321         The DFG's AbstractHeaps are engineered to be both cheap to create and cheap to use.
3322         They also give you aliasing machinery. The DFG AbstractHeaps are represented
3323         internally by a int64_t. Many comparisons between them are just integer comaprisons.
3324         AbstractHeaps form a three-level hierarchy (World is the supertype of everything,
3325         Kind with a TOP payload is a direct subtype of World, and Kind with a non-TOP
3326         payload is the direct subtype of its corresponding TOP Kind).
3327         
3328         Add the notion of a ClobberSet. This is the set of AbstractHeaps that you had
3329         clobbered. It represents the set that results from unifying a bunch of
3330         AbstractHeaps, and is intended to quickly answer overlap questions: does the given
3331         AbstractHeap overlap any AbstractHeap in the ClobberSet? To this end, if you add an
3332         AbstractHeap to a set, it "directly" adds the heap itself, and "super" adds all of
3333         its ancestors. An AbstractHeap is said to overlap a set if any direct or super
3334         member is equal to it, or if any of its ancestors are equal to a direct member.
3335         
3336         Example #1:
3337         
3338             - I add Variables(5). I.e. Variables is the Kind and 5 is the payload. This
3339               is a subtype of Variables, which is a subtype of World.
3340             - You query Variables. I.e. Variables with a TOP payload, which is the
3341               supertype of Variables(X) for any X, and a subtype of World.
3342             
3343             The set will have Variables(5) as a direct member, and Variables and World as
3344             super members. The Variables query will immediately return true, because
3345             Variables is indeed a super member.
3346         
3347         Example #2:
3348         
3349             - I add Variables(5)
3350             - You query NamedProperties
3351             
3352             NamedProperties is not a member at all (neither direct or super). We next
3353             query World. World is a member, but it's a super member, so we return false.
3354         
3355         Example #3:
3356         
3357             - I add Variables
3358             - You query Variables(5)
3359             
3360             The set will have Variables as a direct member, and World as a super member.
3361             The Variables(5) query will not find Variables(5) in the set, but then it
3362             will query Variables. Variables is a direct member, so we return true.
3363         
3364         Example #4:
3365         
3366             - I add Variables
3367             - You query NamedProperties(5)
3368             
3369             Neither NamedProperties nor NamedProperties(5) are members. We next query
3370             World. World is a member, but it's a super member, so we return false.
3371         
3372         Overlap queries require that either the heap being queried is in the set (either
3373         direct or super), or that one of its ancestors is a direct member. Another way to
3374         think about how this works is that two heaps A and B are said to overlap if
3375         A.isSubtypeOf(B) or B.isSubtypeOf(A). This is sound since heaps form a
3376         single-inheritance heirarchy. Consider that we wanted to implement a set that holds
3377         heaps and answers the question, "is any member in the set an ancestor (i.e.
3378         supertype) of some other heap". We would have the set contain the heaps themselves,
3379         and we would satisfy the query "A.isSubtypeOfAny(set)" by walking the ancestor
3380         chain of A, and repeatedly querying its membership in the set. This is what the
3381         "direct" members of our set do. Now consider the other part, where we want to ask if
3382         any member of the set is a descendent of a heap, or "A.isSupertypeOfAny(set)". We
3383         would implement this by implementing set.add(B) as adding not just B but also all of
3384         B's ancestors; then we would answer A.isSupertypeOfAny(set) by just checking if A is
3385         in the set. With two such sets - one that answers isSubtypeOfAny() and another that
3386         answers isSupertypeOfAny() - we could answer the "do any of my heaps overlap your
3387         heap" question. ClobberSet does this, but combines the two sets into a single
3388         HashMap. The HashMap's value, "direct", means that the key is a member of both the
3389         supertype set and the subtype set; if it's false then it's only a member of one of
3390         them.
3391         
3392         Finally, this adds a functorized clobberize() method that adds the read and write
3393         clobbers of a DFG::Node to read and write functors. Common functors for adding to
3394         ClobberSets, querying overlap, and doing nothing are provided. Convenient wrappers
3395         are also provided. This allows you to say things like:
3396         
3397             ClobberSet set;
3398             addWrites(graph, node1, set);
3399             if (readsOverlap(graph, node2, set))
3400                 // We know that node1 may write to something that node2 may read from.
3401         
3402         Currently this facility is only used to improve graph dumping, but it will be
3403         instrumental in both LICM and GVN. In the future, I want to completely kill the
3404         NodeClobbersWorld and NodeMightClobber flags, and eradicate CSEPhase's hackish way
3405         of accomplishing almost exactly what AbstractHeap gives you.
3406
3407         * JavaScriptCore.xcodeproj/project.pbxproj:
3408         * dfg/DFGAbstractHeap.cpp: Added.
3409         (DFG):
3410         (JSC::DFG::AbstractHeap::Payload::dump):
3411         (JSC::DFG::AbstractHeap::dump):
3412         (WTF):
3413         (WTF::printInternal):
3414         * dfg/DFGAbstractHeap.h: Added.
3415         (DFG):
3416         (AbstractHeap):
3417         (Payload):
3418         (JSC::DFG::AbstractHeap::Payload::Payload):
3419         (JSC::DFG::AbstractHeap::Payload::top):
3420         (JSC::DFG::AbstractHeap::Payload::isTop):
3421         (JSC::DFG::AbstractHeap::Payload::value):
3422         (JSC::DFG::AbstractHeap::Payload::valueImpl):
3423         (JSC::DFG::AbstractHeap::Payload::operator==):
3424         (JSC::DFG::AbstractHeap::Payload::operator!=):
3425         (JSC::DFG::AbstractHeap::Payload::operator<):
3426         (JSC::DFG::AbstractHeap::Payload::isDisjoint):
3427         (JSC::DFG::AbstractHeap::Payload::overlaps):
3428         (JSC::DFG::AbstractHeap::AbstractHeap):
3429         (JSC::DFG::AbstractHeap::operator!):
3430         (JSC::DFG::AbstractHeap::kind):
3431         (JSC::DFG::AbstractHeap::payload):
3432         (JSC::DFG::AbstractHeap::isDisjoint):
3433         (JSC::DFG::AbstractHeap::overlaps):
3434         (JSC::DFG::AbstractHeap::supertype):
3435         (JSC::DFG::AbstractHeap::hash):
3436         (JSC::DFG::AbstractHeap::operator==):
3437         (JSC::DFG::AbstractHeap::operator!=):
3438         (JSC::DFG::AbstractHeap::operator<):
3439         (JSC::DFG::AbstractHeap::isHashTableDeletedValue):
3440         (JSC::DFG::AbstractHeap::payloadImpl):
3441         (JSC::DFG::AbstractHeap::encode):
3442         (JSC::DFG::AbstractHeapHash::hash):
3443         (JSC::DFG::AbstractHeapHash::equal):
3444         (AbstractHeapHash):
3445         (WTF):
3446         * dfg/DFGClobberSet.cpp: Added.
3447         (DFG):
3448         (JSC::DFG::ClobberSet::ClobberSet):
3449         (JSC::DFG::ClobberSet::~ClobberSet):
3450         (JSC::DFG::ClobberSet::add):
3451         (JSC::DFG::ClobberSet::addAll):
3452         (JSC::DFG::ClobberSet::contains):
3453         (JSC::DFG::ClobberSet::overlaps):
3454         (JSC::DFG::ClobberSet::clear):
3455         (JSC::DFG::ClobberSet::direct):
3456         (JSC::DFG::ClobberSet::super):
3457         (JSC::DFG::ClobberSet::dump):
3458         (JSC::DFG::ClobberSet::setOf):
3459         (JSC::DFG::addReads):
3460         (JSC::DFG::addWrites):
3461         (JSC::DFG::addReadsAndWrites):
3462         (JSC::DFG::readsOverlap):
3463         (JSC::DFG::writesOverlap):
3464         * dfg/DFGClobberSet.h: Added.
3465         (DFG):
3466         (ClobberSet):
3467         (JSC::DFG::ClobberSet::isEmpty):
3468         (ClobberSetAdd):
3469         (JSC::DFG::ClobberSetAdd::ClobberSetAdd):
3470         (JSC::DFG::ClobberSetAdd::operator()):
3471         (ClobberSetOverlaps):
3472         (JSC::DFG::ClobberSetOverlaps::ClobberSetOverlaps):
3473         (JSC::DFG::ClobberSetOverlaps::operator()):
3474         (JSC::DFG::ClobberSetOverlaps::result):
3475         * dfg/DFGClobberize.cpp: Added.
3476         (DFG):
3477         (JSC::DFG::didWrites):
3478         * dfg/DFGClobberize.h: Added.
3479         (DFG):
3480         (JSC::DFG::clobberize):
3481         (NoOpClobberize):
3482         (JSC::DFG::NoOpClobberize::NoOpClobberize):
3483         (JSC::DFG::NoOpClobberize::operator()):
3484         (CheckClobberize):
3485         (JSC::DFG::CheckClobberize::CheckClobberize):
3486         (JSC::DFG::CheckClobberize::operator()):
3487         (JSC::DFG::CheckClobberize::result):
3488         * dfg/DFGGraph.cpp:
3489         (JSC::DFG::Graph::dump):
3490
3491 2013-07-21  Filip Pizlo  <fpizlo@apple.com>
3492
3493         fourthTier: It should be easy to figure out which blocks nodes belong to
3494         https://bugs.webkit.org/show_bug.cgi?id=118957
3495
3496         Reviewed by Sam Weinig.
3497
3498         * dfg/DFGGraph.cpp:
3499         (DFG):
3500         (JSC::DFG::Graph::initializeNodeOwners):
3501         * dfg/DFGGraph.h:
3502         (Graph):
3503         * dfg/DFGNode.h:
3504
3505 2013-07-21  Filip Pizlo  <fpizlo@apple.com>
3506
3507         fourthTier: NodeExitsForward shouldn't be duplicated in NodeType
3508         https://bugs.webkit.org/show_bug.cgi?id=118956
3509
3510         Reviewed by Sam Weinig.
3511         
3512         We had two way of expressing that something exits forward: the NodeExitsForward
3513         flag and the word 'Forward' in the NodeType. That's kind of dumb. This patch
3514         makes it just be a flag.
3515
3516         * dfg/DFGAbstractInterpreterInlines.h:
3517         (JSC::DFG::::executeEffects):
3518         * dfg/DFGArgumentsSimplificationPhase.cpp:
3519         (JSC::DFG::ArgumentsSimplificationPhase::run):
3520         * dfg/DFGCSEPhase.cpp:
3521         (JSC::DFG::CSEPhase::int32ToDoubleCSE):
3522         (JSC::DFG::CSEPhase::checkStructureElimination):
3523         (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
3524         (JSC::DFG::CSEPhase::putStructureStoreElimination):
3525         (JSC::DFG::CSEPhase::checkArrayElimination):
3526         (JSC::DFG::CSEPhase::performNodeCSE):
3527         * dfg/DFGConstantFoldingPhase.cpp:
3528         (JSC::DFG::ConstantFoldingPhase::foldConstants):
3529         * dfg/DFGFixupPhase.cpp:
3530         (JSC::DFG::FixupPhase::fixupNode):
3531         (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
3532         * dfg/DFGMinifiedNode.h:
3533         (JSC::DFG::belongsInMinifiedGraph):
3534         (JSC::DFG::MinifiedNode::hasChild):
3535         * dfg/DFGNode.h:
3536         (JSC::DFG::Node::convertToStructureTransitionWatchpoint):
3537         (JSC::DFG::Node::hasStructureSet):
3538         (JSC::DFG::Node::hasStructure):
3539         (JSC::DFG::Node::hasArrayMode):
3540         (JSC::DFG::Node::willHaveCodeGenOrOSR):
3541         * dfg/DFGNodeType.h:
3542         (DFG):
3543         (JSC::DFG::needsOSRForwardRewiring):
3544         * dfg/DFGPredictionPropagationPhase.cpp:
3545         (JSC::DFG::PredictionPropagationPhase::propagate):
3546         * dfg/DFGSafeToExecute.h:
3547         (JSC::DFG::safeToExecute):
3548         * dfg/DFGSpeculativeJIT.cpp:
3549         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
3550         * dfg/DFGSpeculativeJIT32_64.cpp:
3551         (JSC::DFG::SpeculativeJIT::compile):
3552         * dfg/DFGSpeculativeJIT64.cpp:
3553         (JSC::DFG::SpeculativeJIT::compile):
3554         * dfg/DFGTypeCheckHoistingPhase.cpp:
3555         (JSC::DFG::TypeCheckHoistingPhase::run):
3556         (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
3557         (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
3558         * dfg/DFGVariableEventStream.cpp:
3559         (JSC::DFG::VariableEventStream::reconstruct):
3560         * ftl/FTLCapabilities.cpp:
3561         (JSC::FTL::canCompile):
3562         * ftl/FTLLowerDFGToLLVM.cpp:
3563         (JSC::FTL::LowerDFGToLLVM::compileNode):
3564         (JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
3565
3566 2013-07-21  Filip Pizlo  <fpizlo@apple.com>
3567
3568         fourthTier: It should be possible for a DFG::Node to claim to exit to one CodeOrigin, but then claim that it belongs to a different CodeOrigin for all other purposes
3569         https://bugs.webkit.org/show_bug.cgi?id=118946
3570
3571         Reviewed by Geoffrey Garen.
3572         
3573         We want to decouple the exit target code origin of a node from the code origin
3574         for all other purposes. The purposes of code origins are:
3575         
3576         - Where the node will exit, if it exits. The exit target should be consistent with
3577           the surrounding nodes, in that if you just looked at the code origins of nodes in
3578           the graph, they would be consistent with the code origins in bytecode. This is
3579           necessary for live-at-bytecode analyses to work, and to preserve the original
3580           bytecode semantics when exiting.
3581         
3582         - What kind of code the node came from, for semantics thingies. For example, we
3583           might use the code origin to find the node's global object for doing an original
3584           array check. Or we might use it to determine if the code is in strict mode. Or
3585           other similar things. When we use the code origin in this way, we're basically
3586           using it as a way of describing the node's meta-data without putting it into the
3587           node directly, to save space. In the absurd extreme you could imagine nodes not
3588           even having NodeTypes or NodeFlags, and just using the CodeOrigin to determine
3589           what bytecode the node originated from. We won't do that, but you can think of
3590           this use of code origins as just a way of compressing meta-data.
3591         
3592         - What code origin we should supply profiling to, if we exit. This is closely
3593           related to the semantics thingies, in that the exit profiling is a persistent
3594           kind of semantic meta-data that survives between recompiles, and the only way to
3595           do that is to ascribe it to the original bytecode via the code origin.
3596         
3597         If we hoist a node, we need to change the exit target code origin, but we must not
3598         change the code origin for other purposes. The best way to do this is to decouple
3599         the two kinds of code origin.
3600         
3601         OSR exit data structures already do this, because they may edit the exit target
3602         code origin while keeping the code origin for profiling intact. This happens for
3603         forward exits. So, we just need to thread separation all the way back to DFG::Node.
3604         That's what this patch does.
3605
3606         * dfg/DFGNode.h:
3607         (JSC::DFG::Node::Node):
3608         (Node):
3609         * dfg/DFGOSRExit.cpp:
3610         (JSC::DFG::OSRExit::OSRExit):
3611         * dfg/DFGOSRExitBase.h:
3612         (JSC::DFG::OSRExitBase::OSRExitBase):
3613         * dfg/DFGSpeculativeJIT.cpp:
3614         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
3615         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
3616         * dfg/DFGSpeculativeJIT.h:
3617         (SpeculativeJIT):
3618         * ftl/FTLLowerDFGToLLVM.cpp:
3619         (JSC::FTL::LowerDFGToLLVM::compileNode):
3620         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
3621         (LowerDFGToLLVM):
3622         * ftl/FTLOSRExit.cpp:
3623         (JSC::FTL::OSRExit::OSRExit):
3624         * ftl/FTLOSRExit.h:
3625         (OSRExit):
3626
3627 2013-07-20  Filip Pizlo  <fpizlo@apple.com>
3628
3629         fourthTier: each DFG node that relies on other nodes to do their type checks should be able to tell you if those type checks happened
3630         https://bugs.webkit.org/show_bug.cgi?id=118866
3631
3632         Reviewed by Sam Weinig.
3633         
3634         Adds a safeToExecute() method that takes a node and an abstract state and tells you
3635         if the node will run without crashing under that state.
3636
3637         * JavaScriptCore.xcodeproj/project.pbxproj:
3638         * bytecode/CodeBlock.cpp:
3639         (JSC::CodeBlock::CodeBlock):
3640         * dfg/DFGCFAPhase.cpp:
3641         (CFAPhase):
3642         (JSC::DFG::CFAPhase::CFAPhase):
3643         (JSC::DFG::CFAPhase::run):
3644         (JSC::DFG::CFAPhase::performBlockCFA):
3645         (JSC::DFG::CFAPhase::performForwardCFA):
3646         * dfg/DFGSafeToExecute.h: Added.
3647         (DFG):
3648         (SafeToExecuteEdge):
3649         (JSC::DFG::SafeToExecuteEdge::SafeToExecuteEdge):
3650         (JSC::DFG::SafeToExecuteEdge::operator()):
3651         (JSC::DFG::SafeToExecuteEdge::result):
3652         (JSC::DFG::safeToExecute):
3653         * dfg/DFGStructureAbstractValue.h:
3654         (JSC::DFG::StructureAbstractValue::isValidOffset):
3655         (StructureAbstractValue):
3656         * runtime/Options.h:
3657         (JSC):
3658
3659 2013-07-20  Filip Pizlo  <fpizlo@apple.com>
3660
3661         fourthTier: FTL should be able to generate LLVM IR that uses an intrinsic for OSR exit
3662         https://bugs.webkit.org/show_bug.cgi?id=118948
3663
3664         Reviewed by Sam Weinig.
3665         
3666         - Add the ability to generate LLVM IR but then not use it, via --llvmAlwaysFails=true.
3667           This allows doing "what if" experiments with IR generation, even if the generated IR
3668           can't yet execute.
3669         
3670         - Add an OSR exit path that just calls an intrinsic that combines the branch and the
3671           off-ramp.
3672
3673         * JavaScriptCore.xcodeproj/project.pbxproj:
3674         * dfg/DFGPlan.cpp:
3675         (JSC::DFG::Plan::compileInThreadImpl):
3676         * ftl/FTLFail.cpp: Added.
3677         (FTL):
3678         (JSC::FTL::fail):
3679         * ftl/FTLFail.h: Added.
3680         (FTL):
3681         * ftl/FTLIntrinsicRepository.h:
3682         (FTL):
3683         * ftl/FTLLowerDFGToLLVM.cpp:
3684         (JSC::FTL::LowerDFGToLLVM::appendOSRExit):
3685         (JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
3686         * runtime/Options.h:
3687         (JSC):
3688
3689 2013-07-19  Filip Pizlo  <fpizlo@apple.com>
3690
3691         fourthTier: StringObjectUse uses structures, and CSE should know that
3692         https://bugs.webkit.org/show_bug.cgi?id=118940
3693
3694         Reviewed by Geoffrey Garen.
3695         
3696         This is asymptomatic right now, but we should fix it.
3697
3698         * JavaScriptCore.xcodeproj/project.pbxproj:
3699         * dfg/DFGCSEPhase.cpp:
3700         (JSC::DFG::CSEPhase::putStructureStoreElimination):
3701         * dfg/DFGEdgeUsesStructure.h: Added.
3702         (DFG):
3703         (EdgeUsesStructure):
3704         (JSC::DFG::EdgeUsesStructure::EdgeUsesStructure):
3705         (JSC::DFG::EdgeUsesStructure::operator()):
3706         (JSC::DFG::EdgeUsesStructure::result):
3707         (JSC::DFG::edgesUseStructure):
3708         * dfg/DFGUseKind.h:
3709         (DFG):
3710         (JSC::DFG::usesStructure):
3711
3712 2013-07-19  Filip Pizlo  <fpizlo@apple.com>
3713
3714         fourthTier: String GetByVal out-of-bounds handling is so wrong
3715         https://bugs.webkit.org/show_bug.cgi?id=118935
3716
3717         Reviewed by Geoffrey Garen.
3718         
3719         Bunch of String GetByVal out-of-bounds fixes:
3720         
3721         - Even if the string proto chain is sane, we need to watch out for negative
3722           indices. They may get values or call getters in the prototypes, since proto
3723           sanity doesn't check for negative indexed properties, as they are not
3724           technically indexed properties.
3725         
3726         - GetByVal String out-of-bounds does in fact clobberWorld(). CSE should be
3727           given this information.
3728         
3729         - GetByVal String out-of-bounds does in fact clobberWorld(). CFA should be
3730           given this information.
3731         
3732         Also fixed some other things:
3733         
3734         - If the DFG is disabled, the testRunner should pretend that we've done a
3735           bunch of DFG compiles. That's necessary to prevent the tests from timing
3736           out.
3737         
3738         - Disassembler shouldn't try to dump source code since it's not safe in the
3739           concurrent JIT.
3740
3741         * API/JSCTestRunnerUtils.cpp:
3742         (JSC::numberOfDFGCompiles):
3743         * JavaScriptCore.xcodeproj/project.pbxproj:
3744         * dfg/DFGAbstractInterpreterInlines.h:
3745         (JSC::DFG::::executeEffects):
3746         * dfg/DFGDisassembler.cpp:
3747         (JSC::DFG::Disassembler::dumpHeader):
3748         * dfg/DFGGraph.h:
3749         (JSC::DFG::Graph::byValIsPure):
3750         * dfg/DFGSaneStringGetByValSlowPathGenerator.h: Added.
3751         (DFG):
3752         (SaneStringGetByValSlowPathGenerator):
3753         (JSC::DFG::SaneStringGetByValSlowPathGenerator::SaneStringGetByValSlowPathGenerator):
3754         (JSC::DFG::SaneStringGetByValSlowPathGenerator::generateInternal):
3755         * dfg/DFGSpeculativeJIT.cpp:
3756         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
3757
3758 2013-07-19  Filip Pizlo  <fpizlo@apple.com>
3759
3760         fourthTier: Structure::isValidOffset() should be able to tell you if you're loading a valid JSValue, and not just not crashing
3761         https://bugs.webkit.org/show_bug.cgi?id=118911
3762
3763         Reviewed by Geoffrey Garen.
3764         
3765         We could also have a separate method like "willNotCrash(offset)", but that's not
3766         what isValidOffset() is intended to mean.
3767
3768         * runtime/Structure.h:
3769         (JSC::Structure::isValidOffset):
3770
3771 2013-07-19  Filip Pizlo  <fpizlo@apple.com>
3772
3773         fourthTier: Structure should be able to tell you if it's valid to load at a given offset from any object with that structure
3774         https://bugs.webkit.org/show_bug.cgi?id=118878
3775
3776         Reviewed by Oliver Hunt.
3777         
3778         - Change Structure::isValidOffset() to actually answer the question "If I attempted
3779           to load from an object of this structure, at this offset, would I commit suicide
3780           or would I get back some kind of value?"
3781         
3782         - Change StorageAccessData::offset to use a PropertyOffset. It should have been that
3783           way from the start.
3784         
3785         - Fix PutStructure so that it sets haveStructures in all of the cases that it should.
3786         
3787         - Make GetByOffset also reference the base object in addition to the butterfly.
3788         
3789         The future use of this power will be to answer questions like "If I hoisted this
3790         GetByOffset or PutByOffset to this point, would it cause crashes, or would it be
3791         fine?"
3792         
3793         I don't currently plan to use this power to perform validation, since the CSE has
3794         the power to eliminate CheckStructure's that the CFA wouldn't be smart enough to
3795         remove - both in the case of StructureSets where size >= 2 and in the case of
3796         CheckStructures that match across PutStructures. At first I tried to write a
3797         validator that was aware of this, but the validation code got way too complicated
3798         and I started having nightmares of spurious assertion bugs being filed against me.
3799         
3800         This also changes some of the code for how we hash FunctionExecutable's for debug
3801         dumps, since that code still had some thread-safety issues. Basically, the
3802         concurrent JIT needs to use the CodeBlock's precomputed hash and never call anything
3803         that could transitively try to compute the hash from the source code. The source
3804         code is a string that may be lazily computed, and that involves all manner of thread
3805         unsafe things.
3806
3807         * bytecode/CodeOrigin.cpp:
3808         (JSC::InlineCallFrame::hash):
3809         * dfg/DFGAbstractInterpreterInlines.h:
3810         (JSC::DFG::::executeEffects):
3811         * dfg/DFGByteCodeParser.cpp:
3812         (JSC::DFG::ByteCodeParser::handleGetByOffset):
3813         (JSC::DFG::ByteCodeParser::handlePutByOffset):
3814         (JSC::DFG::ByteCodeParser::parseBlock):
3815         * dfg/DFGCFAPhase.cpp:
3816         (JSC::DFG::CFAPhase::performBlockCFA):
3817         * dfg/DFGConstantFoldingPhase.cpp:
3818         (JSC::DFG::ConstantFoldingPhase::foldConstants):
3819         * dfg/DFGFixupPhase.cpp:
3820         (JSC::DFG::FixupPhase::fixupNode):
3821         * dfg/DFGGraph.h:
3822         (StorageAccessData):
3823         * dfg/DFGNode.h:
3824         (JSC::DFG::Node::convertToGetByOffset):
3825         * dfg/DFGSpeculativeJIT64.cpp:
3826         (JSC::DFG::SpeculativeJIT::compile):
3827         * ftl/FTLLowerDFGToLLVM.cpp:
3828         (JSC::FTL::LowerDFGToLLVM::compileGetByOffset):
3829         (JSC::FTL::LowerDFGToLLVM::compilePutByOffset):
3830         * runtime/FunctionExecutableDump.cpp:
3831         (JSC::FunctionExecutableDump::dump):
3832         * runtime/Structure.h:
3833         (Structure):
3834         (JSC::Structure::isValidOffset):
3835
3836 2013-07-18  Filip Pizlo  <fpizlo@apple.com>
3837
3838         fourthTier: AbstractInterpreter should explicitly ask AbstractState to create new AbstractValues for newly born nodes
3839         https://bugs.webkit.org/show_bug.cgi?id=118880
3840
3841         Reviewed by Sam Weinig.
3842         
3843         It should be possible to have an AbstractState that is backed by a HashMap. But to
3844         do this, the AbstractInterpreter should explicitly ask for new nodes to be added to
3845         the map, since otherwise the idiom of getting a reference to the AbstractValue
3846         returned by forNode() would cause really subtle memory corruption bugs.
3847
3848         * dfg/DFGAbstractInterpreterInlines.h:
3849         (JSC::DFG::::executeEffects):
3850         * dfg/DFGInPlaceAbstractState.h:
3851         (JSC::DFG::InPlaceAbstractState::createValueForNode):
3852         (InPlaceAbstractState):
3853
3854 2013-07-18  Filip Pizlo  <fpizlo@apple.com>
3855
3856         fourthTier: Decouple the way that CFA stores its state from the way it does abstract interpretation
3857         https://bugs.webkit.org/show_bug.cgi?id=118835
3858
3859         Reviewed by Oliver Hunt.
3860         
3861         This separates AbstractState into two things:
3862         
3863         - InPlaceAbstractState, which can tell you the abstract state of anything you
3864           might care about, and uses the old AbstractState's algorithms and data
3865           structures for doing so.
3866         
3867         - AbstractInterpreter<AbstractStateType>, which can execute a DFG::Node* with
3868           respect to an AbstractStateType. Currently we always use
3869           AbstractStateType = InPlaceAbstractState. But we could drop in an other
3870           class that supports basic primitives like forNode() and variables().
3871         
3872         This is important because:
3873         
3874         - We want to hoist things out of loops.
3875
3876         - We don't know what things rely on what type checks.
3877
3878         - We only want to hoist type checks out of loops if they aren't clobbered.
3879
3880         - We may want to still hoist things that depended on those type checks, if it's
3881           safe to do those things based on the CFA state at the tail of the loop
3882           pre-header.
3883
3884         - We don't want things to rely on their type checks by way of a token, because
3885           that's just weird.
3886
3887         So, we want to be able to have a special form of the CFA that can
3888         incrementally update a basic block's state-at-tail, and we want to be able to
3889         do this for multiple blocks simultaneously. This requires *not* storing the
3890         per-node state in the nodes themselves, but instead using the at-tail HashMap
3891         directly.
3892
3893         Hence we need to have a way of making the abstract interpreter (i.e.
3894         AbstractState::execute) polymorphic with respect to state representation. Put
3895         another way, we need to separate the way that abstract state is represented
3896         from the way DFG IR is abstractly interpreted.
3897
3898         * JavaScriptCore.xcodeproj/project.pbxproj:
3899         * dfg/DFGAbstractInterpreter.h: Added.
3900         (DFG):
3901         (AbstractInterpreter):
3902         (JSC::DFG::AbstractInterpreter::forNode):
3903         (JSC::DFG::AbstractInterpreter::variables):
3904         (JSC::DFG::AbstractInterpreter::needsTypeCheck):
3905         (JSC::DFG::AbstractInterpreter::filterEdgeByUse):
3906         (JSC::DFG::AbstractInterpreter::filter):
3907         (JSC::DFG::AbstractInterpreter::filterArrayModes):
3908         (JSC::DFG::AbstractInterpreter::filterByValue):
3909         (JSC::DFG::AbstractInterpreter::trySetConstant):
3910         (JSC::DFG::AbstractInterpreter::filterByType):
3911         * dfg/DFGAbstractInterpreterInlines.h: Added.
3912         (DFG):
3913         (JSC::DFG::::AbstractInterpreter):
3914         (JSC::DFG::::~AbstractInterpreter):
3915         (JSC::DFG::::booleanResult):
3916         (JSC::DFG::::startExecuting):
3917         (JSC::DFG::::executeEdges):
3918         (JSC::DFG::::verifyEdge):
3919         (JSC::DFG::::verifyEdges):
3920         (JSC::DFG::::executeEffects):
3921         (JSC::DFG::::execute):
3922         (JSC::DFG::::clobberWorld):
3923         (JSC::DFG::::clobberCapturedVars):
3924         (JSC::DFG::::clobberStructures):
3925         (JSC::DFG::::dump):
3926         (JSC::DFG::::filter):
3927         (JSC::DFG::::filterArrayModes):
3928         (JSC::DFG::::filterByValue):
3929         * dfg/DFGAbstractState.cpp: Removed.
3930         * dfg/DFGAbstractState.h: Removed.
3931         * dfg/DFGArgumentsSimplificationPhase.cpp:
3932         * dfg/DFGCFAPhase.cpp:
3933         (JSC::DFG::CFAPhase::CFAPhase):
3934         (JSC::DFG::CFAPhase::performBlockCFA):
3935         (CFAPhase):
3936         * dfg/DFGCFGSimplificationPhase.cpp:
3937         * dfg/DFGConstantFoldingPhase.cpp:
3938         (JSC::DFG::ConstantFoldingPhase::ConstantFoldingPhase):
3939         (JSC::DFG::ConstantFoldingPhase::foldConstants):
3940         (C