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