Unreviewed, rolling out r241784.
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog-2012-10-02
1 2012-10-02  Filip Pizlo  <fpizlo@apple.com>
2
3         REGRESSION(r128400): ASSERT (crash in release) @ app.asana.com
4         https://bugs.webkit.org/show_bug.cgi?id=98175
5
6         Reviewed by Oliver Hunt.
7
8         It's bad karma to create a new structure while stealing another structure's property table
9         while leaving the m_offset unset. Eventually someone will then steal your property table, and
10         then you won't know how many properties you have anymore.
11
12         * runtime/Structure.cpp:
13         (JSC::Structure::nonPropertyTransition):
14
15 2012-10-02  Michael Saboff  <msaboff@apple.com>
16
17         Comment additions after r130109 
18
19         Rubber stamped by Geoffrey Garen.
20
21         Updated comments to how array storage works.
22
23         * runtime/ArrayStorage.h:
24         * runtime/JSArray.cpp:
25
26 2012-10-01  Mark Hahnenberg  <mhahnenberg@apple.com>
27
28         Block freeing thread should sleep indefinitely when there's no work to do
29         https://bugs.webkit.org/show_bug.cgi?id=98084
30
31         Reviewed by Geoffrey Garen.
32
33         Currently the block freeing thread wakes up once a second to check if there are any blocks 
34         for it to release back to the OS. This is wasteful. We should change it to sleep when it 
35         realizes there are no more blocks to free. Any thread that returns a block to the BlockAllocator 
36         should then notify the block freeing thread that there is more work to do now.
37
38         * heap/BlockAllocator.cpp:
39         (JSC::BlockAllocator::BlockAllocator):
40         (JSC::BlockAllocator::blockFreeingThreadMain):
41         * heap/BlockAllocator.h:
42         (BlockAllocator):
43         (JSC::BlockAllocator::deallocate):
44
45 2012-10-01  Michael Saboff  <msaboff@apple.com>
46
47         JSArray::unshiftCountSlowCase needs to clear array slots when adding space to end of array
48         https://bugs.webkit.org/show_bug.cgi?id=98101
49
50         Reviewed by Filip Pizlo.
51
52         Cleared new array entries when adding to end due to shifting contents to lower memory.  Also
53         checnaged the order of moving array contents and metadata in the shift left case to avoid
54         clobbering the metadata with array contents.  Optimized the to only make a memmove if the
55         count is non-zero.
56
57         * runtime/JSArray.cpp:
58         (JSC::JSArray::unshiftCountSlowCase):
59         (JSC::JSArray::unshiftCount):
60
61 2012-10-01  Filip Pizlo  <fpizlo@apple.com>
62
63         Address a FIXME in JSArray::sort
64         https://bugs.webkit.org/show_bug.cgi?id=98080
65         <rdar://problem/12407844>
66
67         Reviewed by Oliver Hunt.
68
69         Get rid of fast sorting of sparse maps. I don't know that it's broken but I do know that we don't
70         have coverage for it. Then also address the FIXME in JSArray::sort regarding side-effecting
71         compare functions.
72
73         * runtime/ArrayPrototype.cpp:
74         (JSC::arrayProtoFuncSort):
75         * runtime/JSArray.cpp:
76         (JSC::JSArray::sortNumeric):
77         (JSC::JSArray::sort):
78         (JSC::JSArray::compactForSorting):
79         * runtime/JSArray.h:
80         (JSArray):
81         * runtime/JSObject.h:
82         (JSC::JSObject::hasSparseMap):
83         (JSObject):
84
85 2012-10-01  Jonathan Liu  <net147@gmail.com>
86
87         Remove unused sys/mman.h include
88         https://bugs.webkit.org/show_bug.cgi?id=97995
89
90         Reviewed by Kentaro Hara.
91
92         The sys/mman.h is not used and removing it improves portability as not
93         all systems have sys/mman.h.
94
95         * jit/ExecutableAllocatorFixedVMPool.cpp:
96
97 2012-09-28  Filip Pizlo  <fpizlo@apple.com>
98
99         ASSERTION in m_graph[tailNodeIndex].op() == Flush || m_graph[tailNodeIndex].op() == SetLocal on plus.google.com
100         https://bugs.webkit.org/show_bug.cgi?id=97656
101
102         Reviewed by Mark Hahnenberg.
103
104         There were two bugs here:
105         
106         1) In case of multiple GetLocals to the same captured variable, the bytecode parser would linke the first,
107            rather than the last, of the GetLocals into the vars-at-tail table.
108         
109         2) The constant folding phase was asserting that any GetLocal it eliminates must be linked into the
110            vars-at-tail table, when for captured variables only the last of those should be.
111
112         * dfg/DFGByteCodeParser.cpp:
113         (JSC::DFG::ByteCodeParser::getLocal):
114         * dfg/DFGConstantFoldingPhase.cpp:
115         (JSC::DFG::ConstantFoldingPhase::foldConstants):
116
117 2012-09-28  Filip Pizlo  <fpizlo@apple.com>
118
119         DFGStructureHoistingPhase SetLocal assumes StructureTransitionWatchpoint has a structure set
120         https://bugs.webkit.org/show_bug.cgi?id=97810
121
122         Reviewed by Mark Hahnenberg.
123
124         No tests because this can't happen in ToT: the structure check hoisting phase runs before any
125         CFA or folding, so the only StructureTransitionWatchpoints it will see are the ones inserted
126         by the parser. But the parser will only insert StructureTransitinWatchpoints on constants, which
127         will not be subject to SetLocals.
128         
129         Still, it would be good to fix this in case things changed.
130
131         * dfg/DFGStructureCheckHoistingPhase.cpp:
132         (JSC::DFG::StructureCheckHoistingPhase::run):
133
134 2012-09-27  Mark Lam  <mark.lam@apple.com>
135
136         Put initializeHostCallReturnValue() behind #if ENABLE(JIT).
137         Fixes non JIT builds.
138         https://bugs.webkit.org/show_bug.cgi?id=97838.
139
140         Reviewed by John Sullivan.
141
142         * runtime/JSGlobalData.cpp:
143         (JSC::JSGlobalData::JSGlobalData):
144
145 2012-09-27  Mark Lam  <mark.lam@apple.com>
146
147         Fixed CallFrameClosure::resetCallFrame() to use the valid
148         range of argument index values.
149         https://bugs.webkit.org/show_bug.cgi?id=97836.
150
151         Reviewed by Gavin Barraclough.
152
153         * interpreter/CallFrame.h:
154         (ExecState):
155         * interpreter/CallFrameClosure.h:
156         (JSC::CallFrameClosure::resetCallFrame):
157
158 2012-09-27  Patrick Gansterer  <paroga@webkit.org>
159
160         Fix usage of COMPILER() macros
161         https://bugs.webkit.org/show_bug.cgi?id=97642
162
163         Reviewed by Geoffrey Garen.
164
165         Add COMPILER(GCC) around compiler specific code and remove it from generic code.
166         This allows us to implement the DFG code for other compilers to in a next step.
167
168         * dfg/DFGOperations.cpp:
169         * jit/HostCallReturnValue.h:
170
171 2012-09-27  Andreas Kling  <kling@webkit.org>
172
173         3.20MB below FunctionParameters::create() on Membuster3.
174         <http://webkit.org/b/97730>
175
176         Reviewed by Anders Carlsson.
177
178         Figure out the exact space needed for parameter identifiers and use reserveInitialCapacity().
179         Reduces memory consumption on Membuster3 by ~1.60 MB.
180
181         * parser/Nodes.cpp:
182         (JSC::FunctionParameters::FunctionParameters):
183
184 2012-09-27  Csaba Osztrogonác  <ossy@webkit.org>, Tor Arne Vestbø  <vestbo@webkit.org>
185
186         [Qt] Enable the LLInt on Linux
187         https://bugs.webkit.org/show_bug.cgi?id=95749
188
189         Reviewed by Simon Hausmann.
190
191         * DerivedSources.pri:
192         * JavaScriptCore.pro:
193         * LLIntOffsetsExtractor.pro: Added.
194         * Target.pri:
195
196 2012-09-27  Patrick Gansterer  <paroga@webkit.org>
197
198         [CMake] Fix build with static JavaScriptCore library
199
200         * shell/CMakeLists.txt: Define STATICALLY_LINKED_WITH_JavaScriptCore if
201                                 JavaScriptCore_LIBRARY_TYPE is set to STATIC.
202
203 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
204
205         Proxy the global this in JSC
206         https://bugs.webkit.org/show_bug.cgi?id=97734
207
208         Reviewed by Filip Pizlo.
209
210         Eeep – fix a bug - was leaving the global this proxy's structure's globalObject as 0,
211         and setting the proxy's prototype as the global object, rather than its prototype.
212
213         * jsc.cpp:
214         (GlobalObject::create):
215         * runtime/JSProxy.h:
216         (JSC::JSProxy::createStructure):
217
218 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
219
220         Speculative Windows build fix.
221
222         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
223
224 2012-09-26  Filip Pizlo  <fpizlo@apple.com>
225
226         Unreviewed, 32-bit build fix.
227
228         * llint/LowLevelInterpreter32_64.asm:
229
230 2012-09-26  Filip Pizlo  <fpizlo@apple.com>
231
232         jneq_ptr shouldn't have a pointer
233         https://bugs.webkit.org/show_bug.cgi?id=97739
234
235         Reviewed by Oliver Hunt.
236
237         Slamming pointers directly into bytecode is sometimes cool, but in this case it's
238         unwieldy and confusing. Switched the instruction to use an enum instead. This has
239         zero effect on code gen behavior in the JITs. In the LLInt, there is now more
240         indirection, but that doesn't affect benchmarks.
241
242         * CMakeLists.txt:
243         * GNUmakefile.list.am:
244         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
245         * JavaScriptCore.xcodeproj/project.pbxproj:
246         * Target.pri:
247         * bytecode/Instruction.h:
248         (JSC::Instruction::Instruction):
249         (Instruction):
250         * bytecode/SpecialPointer.cpp: Added.
251         (JSC):
252         (JSC::actualPointerFor):
253         * bytecode/SpecialPointer.h: Added.
254         (JSC):
255         (JSC::pointerIsFunction):
256         (JSC::pointerIsCell):
257         * bytecompiler/BytecodeGenerator.cpp:
258         (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
259         (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
260         * dfg/DFGByteCodeParser.cpp:
261         (JSC::DFG::ByteCodeParser::parseBlock):
262         * jit/JITOpcodes.cpp:
263         (JSC::JIT::emit_op_jneq_ptr):
264         * jit/JITOpcodes32_64.cpp:
265         (JSC::JIT::emit_op_jneq_ptr):
266         * llint/LowLevelInterpreter32_64.asm:
267         * llint/LowLevelInterpreter64.asm:
268         * runtime/JSGlobalObject.cpp:
269         (JSC::JSGlobalObject::reset):
270         (JSC):
271         * runtime/JSGlobalObject.h:
272         (JSGlobalObject):
273         (JSC::JSGlobalObject::actualPointerFor):
274
275 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
276
277         REGRESSION (r129456): http/tests/security/xss-eval.html is failing on JSC platforms
278         https://bugs.webkit.org/show_bug.cgi?id=97529
279
280         Reviewed by Filip Pizlo.
281
282         A recent patch changed JSC's EvalError behaviour; bring this more into line with other browsers.
283
284         JSC currently throws an EvalError if you try to call eval with a this object that doesn't
285         match the given eval function. This does not match other browsers, which generally just
286         ignore the this value that was passed, and eval the string in the eval function's environment.
287
288         * runtime/JSGlobalObjectFunctions.cpp:
289         (JSC::globalFuncEval):
290             - Remove EvalError, ignore passed this value.
291
292 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
293
294         Proxy the global this in JSC
295         https://bugs.webkit.org/show_bug.cgi?id=97734
296
297         Reviewed by Oliver Hunt.
298
299         Having jsc diverge from WebCore here is not beneficial; it potentially masks bugs and/or performance
300         problems from command line testing.
301
302         * jsc.cpp:
303         (GlobalObject::create):
304             - Create a this value proxy for the global object.
305         * runtime/JSGlobalObject.h:
306         (JSGlobalObject):
307             - Make setGlobalThis protected.
308         * runtime/JSProxy.h:
309         (JSC::JSProxy::create):
310         (JSC::JSProxy::target):
311         (JSC::JSProxy::finishCreation):
312         (JSProxy):
313             - Allow proxy target to be a JSObject, add target to create method.
314
315 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
316
317         Speculative Windows build fix.
318
319         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
320
321 2012-09-26  Filip Pizlo  <fpizlo@apple.com>
322
323         JSObject::ensureArrayStorage() ignores the possibility that extensions have been prevented
324         https://bugs.webkit.org/show_bug.cgi?id=97719
325
326         Reviewed by Gavin Barraclough.
327
328         * runtime/JSObject.cpp:
329         (JSC::JSObject::ensureArrayStorageSlow):
330         (JSC):
331         * runtime/JSObject.h:
332         (JSC::JSObject::ensureArrayStorage):
333         (JSObject):
334
335 2012-09-26  Gavin Barraclough  <barraclough@apple.com>
336
337         Generalize JSGlobalThis as JSProxy
338         https://bugs.webkit.org/show_bug.cgi?id=97716
339
340         Reviewed by Oliver Hunt.
341
342         Generalize JSGlobalThis as JSProxy and move proxying functionality up from the window shell into JSProxy.
343
344         * CMakeLists.txt:
345         * GNUmakefile.list.am:
346         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
347         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
348         * JavaScriptCore.xcodeproj/project.pbxproj:
349         * Target.pri:
350         * runtime/JSGlobalObject.cpp:
351         (JSC::JSGlobalObject::toThisObject):
352             - Hoist toThisObject from WebCore.
353         (JSC):
354         * runtime/JSGlobalObject.h:
355             - removed include.
356         (JSC::JSGlobalObject::finishCreation):
357             - JSGlobalThis -> JSObject
358         (JSGlobalObject):
359             - Hoist toThisObject from WebCore.
360         * runtime/JSGlobalThis.cpp: Removed.
361         * runtime/JSGlobalThis.h: Removed.
362         * runtime/JSObject.cpp:
363             - removed include.
364         * runtime/JSObject.h:
365         (JSObject):
366         (JSC::JSObject::isProxy):
367             - isGlobalThis -> isProxy
368             - GlobalThisType -> ProxyType
369         * runtime/JSProxy.cpp: Copied from Source/JavaScriptCore/runtime/JSGlobalThis.cpp.
370         (JSC):
371         (JSC::JSProxy::visitChildren):
372         (JSC::JSProxy::setTarget):
373         (JSC::JSProxy::className):
374         (JSC::JSProxy::getOwnPropertySlot):
375         (JSC::JSProxy::getOwnPropertySlotByIndex):
376         (JSC::JSProxy::getOwnPropertyDescriptor):
377         (JSC::JSProxy::put):
378         (JSC::JSProxy::putByIndex):
379         (JSC::JSProxy::putDirectVirtual):
380         (JSC::JSProxy::defineOwnProperty):
381         (JSC::JSProxy::deleteProperty):
382         (JSC::JSProxy::deletePropertyByIndex):
383         (JSC::JSProxy::getPropertyNames):
384         (JSC::JSProxy::getOwnPropertyNames):
385             - Class cretaed from JSGlobalThis, JSDOMWindowShell.
386         * runtime/JSProxy.h: Copied from Source/JavaScriptCore/runtime/JSGlobalThis.h.
387         (JSC::JSProxy::create):
388         (JSC::JSProxy::createStructure):
389         (JSProxy):
390         (JSC::JSProxy::target):
391         (JSC::JSProxy::JSProxy):
392             - Class cretaed from JSGlobalThis, JSDOMWindowShell.
393         * runtime/JSType.h:
394             - GlobalThisType -> ProxyType
395
396 2012-09-26  Michael Saboff  <msaboff@apple.com>
397
398         Add ability for JSArray::unshiftCount to unshift in middle of an array
399         https://bugs.webkit.org/show_bug.cgi?id=97691
400
401         Reviewed by Filip Pizlo.
402
403         Changed JSArray::unshiftCount and unshiftCountSlowCase to handle unshifting from the middle of an
404         array.  Depending on where the unshift point is, either the front part of the array will be moved
405         "left" or the back part will be moved right.  Given that unshiftCount only works on contiguous
406         arrays it is safe to use memmove for the moves.
407
408         This change is worth 25% performance improvement on pdfjs.  It doesn't seem to have any impact on
409         any other benchmarks.
410
411         * runtime/ArrayPrototype.cpp:
412         (JSC::unshift):
413         * runtime/JSArray.cpp:
414         (JSC::JSArray::unshiftCountSlowCase):
415         (JSC::JSArray::unshiftCount):
416         * runtime/JSArray.h:
417         (JSArray):
418
419 2012-09-26  Sheriff Bot  <webkit.review.bot@gmail.com>
420
421         Unreviewed, rolling out r129592.
422         http://trac.webkit.org/changeset/129592
423         https://bugs.webkit.org/show_bug.cgi?id=97670
424
425         Failures in Chromium security tests (Requested by schenney on
426         #webkit).
427
428         * runtime/JSGlobalObjectFunctions.cpp:
429         (JSC::globalFuncEval):
430
431 2012-09-25  Gavin Barraclough  <barraclough@apple.com>
432
433         REGRESSION (r129456): http/tests/security/xss-eval.html is failing on JSC platforms
434         https://bugs.webkit.org/show_bug.cgi?id=97529
435
436         Reviewed by Filip Pizlo.
437
438         A recent patch changed JSC's EvalError behaviour; bring this more into line with other browsers.
439
440         JSC currently throws an EvalError if you try to call eval with a this object that doesn't
441         match the given eval function. This does not match other browsers, which generally just
442         ignore the this value that was passed, and eval the string in the eval function's environment.
443
444         * runtime/JSGlobalObjectFunctions.cpp:
445         (JSC::globalFuncEval):
446             - Remove EvalError, ignore passed this value.
447
448 2012-09-25  Filip Pizlo  <fpizlo@apple.com>
449
450         DFG ArrayPush, ArrayPop don't handle clobbering or having a bad time correctly
451         https://bugs.webkit.org/show_bug.cgi?id=97535
452
453         Reviewed by Oliver Hunt.
454
455         * dfg/DFGAbstractState.cpp:
456         (JSC::DFG::AbstractState::execute):
457         * dfg/DFGByteCodeParser.cpp:
458         (JSC::DFG::ByteCodeParser::handleIntrinsic):
459         * dfg/DFGStructureCheckHoistingPhase.cpp:
460         (JSC::DFG::StructureCheckHoistingPhase::run):
461
462 2012-09-25  Geoffrey Garen  <ggaren@apple.com>
463
464         JSC should dump object size inference statistics
465         https://bugs.webkit.org/show_bug.cgi?id=97618
466
467         Reviewed by Filip Pizlo.
468
469         Added an option to dump object size inference statistics.
470
471         To see statistics on live objects:
472
473             jsc --showHeapStatistics=1
474
475         To see cumulative statistics on all objects ever allocated:
476
477             jsc --showHeapStatistics=1 --objectsAreImmortal=1
478
479             (This is useful for showing GC churn caused by over-allocation.)
480
481         To support this second mode, I refactored Zombies to separate out their
482         immortality feature so I could reuse it.
483
484         * heap/Heap.cpp:
485         (JSC::MarkObject): Helper for making things immortal. We have to checked
486         for being zapped because blocks start out in this state.
487
488         (JSC::StorageStatistics): Gather statistics by walking the heap. Ignore
489         arrays and hash tables for now because they're not our focus. (We'll
490         remove these exceptions in future.)
491
492         (JSC::Heap::collect): Moved zombify to the end so it wouldn't interfere
493         with statistics gathering.
494
495         (JSC::Heap::showStatistics):
496         (JSC::Heap::markAllObjects): Factored out helper, so statistics could
497         take advantage of immortal objects.
498
499         (Zombify): Don't mark immortal objects -- that's another class's job now.
500
501         (JSC::Zombify::operator()):
502         (JSC::Heap::zombifyDeadObjects): Take advantage of forEachDeadCell instead
503         of rolling our own.
504
505         * heap/Heap.h:
506         (Heap):
507         * heap/MarkedSpace.h:
508         (MarkedSpace):
509         (JSC::MarkedSpace::forEachDeadCell): Added, so clients don't have to do
510         the iteration logic themselves.
511
512         * runtime/Options.cpp:
513         (JSC::Options::initialize):
514         * runtime/Options.h: New options, listed above. Make sure to initialize
515         based on environment variable first, so we can override with specific settings.
516
517 2012-09-25  Filip Pizlo  <fpizlo@apple.com>
518
519         We shouldn't use the optimized versions of shift/unshift if the user is doing crazy things to the array
520         https://bugs.webkit.org/show_bug.cgi?id=97603
521         <rdar://problem/12370864>
522
523         Reviewed by Gavin Barraclough.
524
525         You changed the length behind our backs? No optimizations for you then!
526
527         * runtime/ArrayPrototype.cpp:
528         (JSC::shift):
529         (JSC::unshift):
530         * runtime/JSArray.cpp:
531         (JSC::JSArray::shiftCount):
532
533 2012-09-25  Filip Pizlo  <fpizlo@apple.com>
534
535         JSC bindings appear to sometimes ignore the possibility of arrays being in sparse mode
536         https://bugs.webkit.org/show_bug.cgi?id=95610
537
538         Reviewed by Oliver Hunt.
539
540         Add better support for quickly accessing the indexed storage from bindings.
541
542         * runtime/JSObject.h:
543         (JSC::JSObject::tryGetIndexQuickly):
544         (JSObject):
545         (JSC::JSObject::getDirectIndex):
546         (JSC::JSObject::getIndex):
547
548 2012-09-25  Filip Pizlo  <fpizlo@apple.com>
549
550         Structure check hoisting phase doesn't know about the side-effecting nature of Arrayify
551         https://bugs.webkit.org/show_bug.cgi?id=97537
552
553         Reviewed by Mark Hahnenberg.
554
555         No tests because if we use Arrayify then we also use PutByVal(BlankToXYZ), and the latter is
556         already known to be side-effecting. So this bug shouldn't have had any symptoms, as far as I
557         can tell.
558
559         * dfg/DFGStructureCheckHoistingPhase.cpp:
560         (JSC::DFG::StructureCheckHoistingPhase::run):
561
562 2012-09-25  Gavin Barraclough  <barraclough@apple.com>
563
564         Regression: put beyond vector length prefers prototype setters to sparse properties
565         https://bugs.webkit.org/show_bug.cgi?id=97593
566
567         Reviewed by Geoff Garen & Filip Pizlo.
568
569         * runtime/JSObject.cpp:
570         (JSC::JSObject::putByIndexBeyondVectorLength):
571             - Check for self properties in the sparse map - if present, don't examine the protochain.
572
573 2012-09-24  Gavin Barraclough  <barraclough@apple.com>
574
575         https://bugs.webkit.org/show_bug.cgi?id=97530
576         Regression, freeze applied to numeric properties of non-array objects
577
578         Reviewed by Filip Pizlo.
579
580         Object.freeze has a fast implementation in JSObject, but this hasn't been updated to take into account numeric properties in butterflies.
581         For now, just fall back to the generic implementation if the object has numeric properties.
582
583         * runtime/ObjectConstructor.cpp:
584         (JSC::objectConstructorFreeze):
585             - fallback if the object has a non-zero indexed property vector length.
586
587 2012-09-24  Gavin Barraclough  <barraclough@apple.com>
588
589         Bug in numeric accessors on global environment
590         https://bugs.webkit.org/show_bug.cgi?id=97526
591
592         Reviewed by Geoff Garen.
593
594         I've hit this assert in test262 in browser, but haven't yet worked out how to repro in a test case :-/
595         The sparsemap is failing to map back from the global object to the window shell.
596         A test case would need to resolve a numeric property name against the global environment.
597
598         (JSC::SparseArrayEntry::get):
599         (JSC::SparseArrayEntry::put):
600             - Add missing toThisObject calls.
601
602 2012-09-24  Filip Pizlo  <fpizlo@apple.com>
603
604         SerializedScriptValue isn't aware of indexed storage, but should be
605         https://bugs.webkit.org/show_bug.cgi?id=97515
606         <rdar://problem/12361874>
607
608         Reviewed by Sam Weinig.
609
610         Export a method that WebCore now uses.
611
612         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
613         * runtime/JSObject.h:
614         (JSObject):
615
616 2012-09-24  Gavin Barraclough  <barraclough@apple.com>
617
618         Remove JSObject::unwrappedGlobalObject(), JSObject::unwrappedObject()
619         https://bugs.webkit.org/show_bug.cgi?id=97519
620
621         Reviewed by Geoff Garen.
622
623         unwrappedGlobalObject() was only needed because globalObject() doesn't always return a helpful result -
624         specifically for WebCore's window shell the structure's globalObject is set to null. We can fix this by
625         simply keeping the structure up to date as the window navigates, obviating the need for this function.
626
627         The only other use of unwrappedObject() came from globalFuncEval(), and this can be trivially removed
628         by flipping the way we perform this globalObject check (which we may also be able to remove!) - instead
629         of getting the globalObject from the provided this value & comparing to the expected globalObject, we
630         can get the this value from the expected globalObject, and compare to that provided.
631
632         * runtime/JSGlobalObject.cpp:
633             - Call globalObject() instead of unwrappedGlobalObject().
634         * runtime/JSGlobalObjectFunctions.cpp:
635         (JSC::globalFuncEval):
636             - Changed to compare this object values, instead of globalObjects -
637               this means we only need to be able to map globalObject -> this,
638               and not vice versa.
639         * runtime/JSObject.cpp:
640         (JSC::JSObject::allowsAccessFrom):
641         (JSC::JSObject::createInheritorID):
642             - Call globalObject() instead of unwrappedGlobalObject().
643         * runtime/JSObject.h:
644         (JSObject):
645             - Removed unwrappedGlobalObject(), unwrappedObject().
646
647 2012-09-24  Mark Lam  <mark.lam@apple.com>
648
649         Deleting the classic interpreter and cleaning up some build options.
650         https://bugs.webkit.org/show_bug.cgi?id=96969.
651
652         Reviewed by Geoffrey Garen.
653
654         * bytecode/CodeBlock.cpp:
655         (JSC::CodeBlock::dump):
656         (JSC::CodeBlock::finalizeUnconditionally):
657         (JSC::CodeBlock::stronglyVisitStrongReferences):
658         (JSC):
659         * bytecode/Instruction.h:
660         (JSC::Instruction::Instruction):
661         * interpreter/AbstractPC.cpp:
662         (JSC::AbstractPC::AbstractPC):
663         * interpreter/AbstractPC.h:
664         (AbstractPC):
665         * interpreter/CallFrame.h:
666         (ExecState):
667         * interpreter/Interpreter.cpp:
668         (JSC):
669         (JSC::Interpreter::Interpreter):
670         (JSC::Interpreter::~Interpreter):
671         (JSC::Interpreter::initialize):
672         (JSC::Interpreter::isOpcode):
673         (JSC::Interpreter::unwindCallFrame):
674         (JSC::getLineNumberForCallFrame):
675         (JSC::getCallerInfo):
676         (JSC::getSourceURLFromCallFrame):
677         (JSC::Interpreter::execute):
678         (JSC::Interpreter::executeCall):
679         (JSC::Interpreter::executeConstruct):
680         (JSC::Interpreter::retrieveArgumentsFromVMCode):
681         (JSC::Interpreter::retrieveCallerFromVMCode):
682         (JSC::Interpreter::retrieveLastCaller):
683         * interpreter/Interpreter.h:
684         (JSC::Interpreter::getOpcodeID):
685         (Interpreter):
686         * jit/ExecutableAllocatorFixedVMPool.cpp:
687         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
688         * offlineasm/asm.rb:
689         * offlineasm/offsets.rb:
690         * runtime/Executable.cpp:
691         (JSC::EvalExecutable::compileInternal):
692         (JSC::ProgramExecutable::compileInternal):
693         (JSC::FunctionExecutable::compileForCallInternal):
694         (JSC::FunctionExecutable::compileForConstructInternal):
695         * runtime/Executable.h:
696         (JSC::NativeExecutable::create):
697         (NativeExecutable):
698         (JSC::NativeExecutable::finishCreation):
699         * runtime/JSGlobalData.cpp:
700         (JSC):
701         (JSC::JSGlobalData::JSGlobalData):
702         (JSC::JSGlobalData::getHostFunction):
703         * runtime/JSGlobalData.h:
704         (JSGlobalData):
705         (JSC::JSGlobalData::canUseJIT):
706         (JSC::JSGlobalData::canUseRegExpJIT):
707         * runtime/Options.cpp:
708         (JSC::Options::initialize):
709
710 2012-09-24  Filip Pizlo  <fpizlo@apple.com>
711
712         Nested try/finally should not confuse the finally unpopper in BytecodeGenerator::emitComplexJumpScopes
713         https://bugs.webkit.org/show_bug.cgi?id=97508
714         <rdar://problem/12361132>
715
716         Reviewed by Sam Weinig.
717
718         We're reusing some vector for multiple iterations of a loop, but we were forgetting to clear its
719         contents from one iteration to the next. Hence if you did multiple iterations of finally unpopping
720         (like in a nested try/finally and a jump out of both of them) then you'd get a corrupted try
721         context stack afterwards.
722
723         * bytecompiler/BytecodeGenerator.cpp:
724         (JSC::BytecodeGenerator::emitComplexJumpScopes):
725
726 2012-09-24  Filip Pizlo  <fpizlo@apple.com>
727
728         ValueToInt32 bool case does bad things to registers
729         https://bugs.webkit.org/show_bug.cgi?id=97505
730         <rdar://problem/12356331>
731
732         Reviewed by Mark Hahnenberg.
733
734         * dfg/DFGSpeculativeJIT.cpp:
735         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
736
737 2012-09-24  Mark Lam  <mark.lam@apple.com>
738
739         Add cloopDo instruction for debugging the llint C++ backend.
740         https://bugs.webkit.org/show_bug.cgi?id=97502.
741
742         Reviewed by Geoffrey Garen.
743
744         * offlineasm/cloop.rb:
745         * offlineasm/instructions.rb:
746         * offlineasm/parser.rb:
747
748 2012-09-24  Filip Pizlo  <fpizlo@apple.com>
749
750         JSArray::putByIndex asserts with readonly property on prototype
751         https://bugs.webkit.org/show_bug.cgi?id=97435
752         <rdar://problem/12357084>
753
754         Reviewed by Geoffrey Garen.
755
756         Boy, there were some problems:
757         
758         - putDirectIndex() should know that it can set the index quickly even if it's a hole and we're
759           in SlowPut mode, since that's the whole point of PutDirect.
760         
761         - We should have a fast path for putByIndex().
762         
763         - The LiteralParser should not use push(), since that may throw if we're having a bad time.
764
765         * interpreter/Interpreter.cpp:
766         (JSC::eval):
767         * runtime/JSObject.h:
768         (JSC::JSObject::putByIndexInline):
769         (JSObject):
770         (JSC::JSObject::putDirectIndex):
771         * runtime/LiteralParser.cpp:
772         (JSC::::parse):
773
774 2012-09-24  Mark Lam  <mark.lam@apple.com>
775
776         Added a missing "if VALUE_PROFILER" around an access to ArrayProfile record.
777         https://bugs.webkit.org/show_bug.cgi?id=97496.
778
779         Reviewed by Filip Pizlo.
780
781         * llint/LowLevelInterpreter32_64.asm:
782         * llint/LowLevelInterpreter64.asm:
783
784 2012-09-24  Geoffrey Garen  <ggaren@apple.com>
785
786         Inlined activation tear-off in the DFG
787         https://bugs.webkit.org/show_bug.cgi?id=97487
788
789         Reviewed by Filip Pizlo.
790
791         * dfg/DFGOperations.cpp:
792         * dfg/DFGOperations.h: Activation tear-off is always inlined now, so I
793         removed its out-of-line implementation.
794
795         * dfg/DFGSpeculativeJIT32_64.cpp:
796         (JSC::DFG::SpeculativeJIT::compile):
797         * dfg/DFGSpeculativeJIT64.cpp:
798         (JSC::DFG::SpeculativeJIT::compile): Inlined the variable copy and update
799         of JSVariableObject::m_registers. This usually turns into < 10 instructions,
800         which is close to pure win as compared to the operation function call.
801
802         * runtime/JSActivation.h:
803         (JSActivation):
804         (JSC::JSActivation::registersOffset):
805         (JSC::JSActivation::tearOff):
806         (JSC::JSActivation::isTornOff):
807         (JSC):
808         (JSC::JSActivation::storageOffset):
809         (JSC::JSActivation::storage): Tiny bit of refactoring so the JIT can
810         share the pointer math helper functions we use internally.
811
812 2012-09-24  Balazs Kilvady  <kilvadyb@homejinni.com>
813
814         MIPS: store8 functions added to MacroAssembler.
815
816         MIPS store8 functions
817         https://bugs.webkit.org/show_bug.cgi?id=97243
818
819         Reviewed by Oliver Hunt.
820
821         Add MIPS store8 functions.
822
823         * assembler/MIPSAssembler.h:
824         (JSC::MIPSAssembler::lhu): New function.
825         (MIPSAssembler):
826         (JSC::MIPSAssembler::sb): New function.
827         (JSC::MIPSAssembler::sh): New function.
828         * assembler/MacroAssemblerMIPS.h:
829         (JSC::MacroAssemblerMIPS::store8): New function.
830         (MacroAssemblerMIPS):
831         (JSC::MacroAssemblerMIPS::store16): New function.
832
833 2012-09-23  Geoffrey Garen  <ggaren@apple.com>
834
835         PutScopedVar should not be marked as clobbering the world
836         https://bugs.webkit.org/show_bug.cgi?id=97416
837
838         Reviewed by Filip Pizlo.
839
840         No performance change.
841
842         PutScopedVar doesn't have arbitrary side-effects, so it shouldn't be marked
843         as such.
844
845         * dfg/DFGNodeType.h:
846         (DFG):
847
848 2012-09-23  Geoffrey Garen  <ggaren@apple.com>
849
850         I accidentally the whole 32-bit :(.
851
852         Unbreak the DFG in 32-bit with the 32-bit path I forgot in my last patch.
853
854         * dfg/DFGSpeculativeJIT32_64.cpp:
855         (JSC::DFG::SpeculativeJIT::compile):
856
857 2012-09-23  Byungwoo Lee  <bw80.lee@gmail.com>
858
859         Fix build warnings : -Wunused-parameter, -Wparentheses, -Wuninitialized.
860         https://bugs.webkit.org/show_bug.cgi?id=97306
861
862         Reviewed by Benjamin Poulain.
863
864         Fix build warning about -Wunused-parameter on MachineStackMarker.cpp,
865         LLIntSlowPaths.cpp, DatePrototype.cpp, Options.cpp by using
866         UNUSED_PARAM() macro or remove parameter name.
867
868         * heap/MachineStackMarker.cpp:
869         (JSC::pthreadSignalHandlerSuspendResume):
870         * llint/LLIntSlowPaths.cpp:
871         (JSC::LLInt::entryOSR):
872         * runtime/DatePrototype.cpp:
873         (JSC::formatLocaleDate):
874         * runtime/Options.cpp:
875         (JSC::computeNumberOfGCMarkers):
876
877 2012-09-23  Gavin Barraclough  <barraclough@apple.com>
878
879         Sorting a non-array creates propreties (spec-violation)
880         https://bugs.webkit.org/show_bug.cgi?id=25477
881
882         Reviewed by Oliver Hunt.
883
884         We're just calling get() to get properties, which is converting missing properties to
885         undefined. Hole values should be retained, and moved to the end of the array.
886
887         * runtime/ArrayPrototype.cpp:
888         (JSC::getOrHole):
889             - Helper function, returns JSValue() instead of undefined for missing properties.
890         (JSC::arrayProtoFuncSort):
891             - Implemented per 15.4.4.11, see comments above.
892
893 2012-09-23  Geoffrey Garen  <ggaren@apple.com>
894
895         CSE for access to closure variables (get_/put_scoped_var)
896         https://bugs.webkit.org/show_bug.cgi?id=97414
897
898         Reviewed by Oliver Hunt.
899
900         I separated loading a scope from loading its storage pointer, so we can
901         CSE the storage pointer load. Then, I copied the global var CSE and adjusted
902         it for closure vars.
903
904         * dfg/DFGAbstractState.cpp:
905         (JSC::DFG::AbstractState::execute): Renamed GetScopeChain => GetScope to
906         reflect renames from a few weeks ago.
907
908         Added a case for the storage pointer load, similar to object storage pointer load.
909
910         * dfg/DFGByteCodeParser.cpp:
911         (JSC::DFG::ByteCodeParser::parseBlock): Added an independent node for
912         the storage pointer.
913
914         * dfg/DFGCSEPhase.cpp:
915         (JSC::DFG::CSEPhase::scopedVarLoadElimination):
916         (CSEPhase):
917         (JSC::DFG::CSEPhase::scopedVarStoreElimination):
918         (JSC::DFG::CSEPhase::getScopeLoadElimination):
919         (JSC::DFG::CSEPhase::getScopeRegistersLoadElimination):
920         (JSC::DFG::CSEPhase::setLocalStoreElimination):
921         (JSC::DFG::CSEPhase::performNodeCSE): Copied globalVarLoad/StoreElimination
922         and adapted the same logic to closure vars.
923
924         * dfg/DFGNode.h:
925         (JSC::DFG::Node::hasScopeChainDepth):
926         (JSC::DFG::Node::scope):
927         (Node):
928         * dfg/DFGNodeType.h:
929         (DFG): GetScopedVar and GetGlobalVar are no longer MustGenerate. I'm not
930         sure why they ever were. But these are simple load operations so, if they're
931         unused, they're truly dead.
932
933         * dfg/DFGPredictionPropagationPhase.cpp:
934         (JSC::DFG::PredictionPropagationPhase::propagate):
935         * dfg/DFGSpeculativeJIT32_64.cpp:
936         (JSC::DFG::SpeculativeJIT::compile):
937         * dfg/DFGSpeculativeJIT64.cpp:
938         (JSC::DFG::SpeculativeJIT::compile): Updated for renames and split-out
939         node for getting the storage pointer.
940
941 2012-09-21  Geoffrey Garen  <ggaren@apple.com>
942
943         Unreviewed, rolled out a line I committed by accident.
944
945         * interpreter/Interpreter.cpp:
946         (JSC::Interpreter::execute):
947
948 2012-09-21  Geoffrey Garen  <ggaren@apple.com>
949
950         Optimized closures that capture arguments
951         https://bugs.webkit.org/show_bug.cgi?id=97358
952
953         Reviewed by Oliver Hunt.
954
955         Previously, the activation object was responsible for capturing all
956         arguments in a way that was convenient for the arguments object. Now,
957         we move all captured variables into a contiguous region in the stack,
958         allocate an activation for exactly that size, and make the arguments
959         object responsible for knowing all the places to which arguments could
960         have moved.
961
962         This seems like the right tradeoff because
963
964             (a) Closures are common and long-lived, so we want them to be small.
965
966             (b) Our primary strategy for optimizing the arguments object is to make
967             it go away. If you're allocating arguments objects, you're already having
968             a bad time.
969
970             (c) It's common to use either the arguments object or named argument
971             closure, but not both.
972
973         * bytecode/CodeBlock.cpp:
974         (JSC::CodeBlock::dump):
975         (JSC::CodeBlock::CodeBlock):
976         * bytecode/CodeBlock.h:
977         (JSC::CodeBlock::argumentsRegister):
978         (JSC::CodeBlock::activationRegister):
979         (JSC::CodeBlock::isCaptured):
980         (JSC::CodeBlock::argumentIndexAfterCapture): m_numCapturedVars is gone
981         now -- we have an explicit range instead.
982
983         * bytecompiler/BytecodeGenerator.cpp:
984         (JSC::BytecodeGenerator::BytecodeGenerator): Move captured arguments
985         into the captured region of local variables for space efficiency. Record
986         precise data about where they moved for the sake of the arguments object.
987
988         Some of this data was previously wrong, but it didn't cause any problems
989         because the arguments weren't actually moving.
990
991         * dfg/DFGByteCodeParser.cpp:
992         (JSC::DFG::ByteCodeParser::flushArgumentsAndCapturedVariables): Don't
993         assume that captured vars are in any particular location -- always ask
994         the CodeBlock. This is better encapsulation.
995
996         (JSC::DFG::ByteCodeParser::parseCodeBlock):
997         * dfg/DFGSpeculativeJIT32_64.cpp:
998         (JSC::DFG::SpeculativeJIT::compile):
999         * dfg/DFGSpeculativeJIT64.cpp:
1000         (JSC::DFG::SpeculativeJIT::compile): I rename things sometimes.
1001
1002         * runtime/Arguments.cpp:
1003         (JSC::Arguments::tearOff): Account for a particularly nasty edge case.
1004
1005         (JSC::Arguments::didTearOffActivation): Don't allocate our slow arguments
1006         data on tear-off. We need to allocate it eagerly instead, since we need
1007         to know about displaced, captured arguments during access before tear-off.
1008
1009         * runtime/Arguments.h:
1010         (JSC::Arguments::allocateSlowArguments):
1011         (JSC::Arguments::argument): Tell our slow arguments array where all arguments
1012         are, even if they are not captured. This simplifies some things, so we don't
1013         have to account explicitly for the full matrix of (not torn off, torn off)
1014         * (captured, not captured).
1015
1016         (JSC::Arguments::finishCreation): Allocate our slow arguments array eagerly
1017         because we need to know about displaced, captured arguments during access
1018         before tear-off.
1019
1020         * runtime/Executable.cpp:
1021         (JSC::FunctionExecutable::FunctionExecutable):
1022         (JSC::FunctionExecutable::compileForCallInternal):
1023         (JSC::FunctionExecutable::compileForConstructInternal):
1024         * runtime/Executable.h:
1025         (JSC::FunctionExecutable::parameterCount):
1026         (FunctionExecutable):
1027         * runtime/JSActivation.cpp:
1028         (JSC::JSActivation::visitChildren):
1029         * runtime/JSActivation.h:
1030         (JSActivation):
1031         (JSC::JSActivation::create):
1032         (JSC::JSActivation::JSActivation):
1033         (JSC::JSActivation::registerOffset):
1034         (JSC::JSActivation::tearOff):
1035         (JSC::JSActivation::allocationSize):
1036         (JSC::JSActivation::isValid): This is really the point of the patch. All
1037         the pointer math in Activations basically boils away, since we always
1038         copy a contiguous region of captured variables now.
1039
1040         * runtime/SymbolTable.h:
1041         (JSC::SlowArgument::SlowArgument):
1042         (SlowArgument):
1043         (SharedSymbolTable):
1044         (JSC::SharedSymbolTable::captureCount):
1045         (JSC::SharedSymbolTable::SharedSymbolTable): AllOfTheThings capture mode
1046         is gone now -- that's the point of the patch. indexIfCaptured gets renamed
1047         to index because we always have an index, even if not captured. (The only
1048         time when the index is meaningless is when we're Deleted.)
1049
1050 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1051
1052         Eeeep - broke early boyer in bug#97382
1053         https://bugs.webkit.org/show_bug.cgi?id=97383
1054
1055         Rubber stamped by Sam Weinig.
1056
1057         missed a child3 -> child2!
1058
1059         * dfg/DFGSpeculativeJIT.cpp:
1060         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
1061
1062 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1063
1064         Unreviewed windows build fix.
1065
1066         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1067
1068 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1069
1070         Pedantic test in Mozilla's JavaScript test suite fails. function-001.js function-001-n.js
1071         https://bugs.webkit.org/show_bug.cgi?id=27219
1072
1073         Reviewed by Sam Weinig.
1074
1075         These tests are just wrong.
1076         See ECMA 262 A.5, FunctionDelcaration does not require a semicolon.
1077
1078         * tests/mozilla/expected.html:
1079         * tests/mozilla/js1_2/function/function-001-n.js:
1080         * tests/mozilla/js1_3/Script/function-001-n.js:
1081         * tests/mozilla/js1_3/regress/function-001-n.js:
1082
1083 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1084
1085         Remove redundant argument to op_instanceof
1086         https://bugs.webkit.org/show_bug.cgi?id=97382
1087
1088         Reviewed by Geoff Garen.
1089
1090         No longer needed after my last change.
1091
1092         * bytecode/CodeBlock.cpp:
1093         (JSC::CodeBlock::dump):
1094         * bytecode/Opcode.h:
1095         (JSC):
1096         (JSC::padOpcodeName):
1097         * bytecompiler/BytecodeGenerator.cpp:
1098         (JSC::BytecodeGenerator::emitInstanceOf):
1099         * bytecompiler/BytecodeGenerator.h:
1100         (BytecodeGenerator):
1101         * bytecompiler/NodesCodegen.cpp:
1102         (JSC::InstanceOfNode::emitBytecode):
1103         * dfg/DFGAbstractState.cpp:
1104         (JSC::DFG::AbstractState::execute):
1105         * dfg/DFGByteCodeParser.cpp:
1106         (JSC::DFG::ByteCodeParser::parseBlock):
1107         * dfg/DFGSpeculativeJIT.cpp:
1108         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
1109         * interpreter/Interpreter.cpp:
1110         (JSC::Interpreter::privateExecute):
1111         * jit/JITOpcodes.cpp:
1112         (JSC::JIT::emit_op_instanceof):
1113         (JSC::JIT::emitSlow_op_instanceof):
1114         * jit/JITOpcodes32_64.cpp:
1115         (JSC::JIT::emit_op_instanceof):
1116         (JSC::JIT::emitSlow_op_instanceof):
1117         * jit/JITStubs.cpp:
1118         (JSC::DEFINE_STUB_FUNCTION):
1119         * llint/LLIntSlowPaths.cpp:
1120         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1121         * llint/LowLevelInterpreter32_64.asm:
1122         * llint/LowLevelInterpreter64.asm:
1123
1124 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1125
1126         Unreviewed windows build fix.
1127
1128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1129
1130 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1131
1132         instanceof should not get the prototype for non-default HasInstance
1133         https://bugs.webkit.org/show_bug.cgi?id=68656
1134
1135         Reviewed by Oliver Hunt.
1136
1137         Instanceof is currently implemented as a sequance of three opcodes:
1138             check_has_instance
1139             get_by_id(prototype)
1140             op_instanceof
1141         There are three interesting types of base value that instanceof can be applied to:
1142             (A) Objects supporting default instanceof behaviour (functions, other than those created with bind)
1143             (B) Objects overriding the default instancecof behaviour with a custom one (API objects, bound functions)
1144             (C) Values that do not respond to the [[HasInstance]] trap.
1145         Currently check_has_instance handles case (C), leaving the op_instanceof opcode to handle (A) & (B). There are
1146         two problems with this apporach. Firstly, this is suboptimal for case (A), since we have to check for
1147         hasInstance support twice (once in check_has_instance, then for default behaviour in op_instanceof). Secondly,
1148         this means that in cases (B) we also perform the get_by_id, which is both suboptimal and an observable spec
1149         violation.
1150
1151         The fix here is to move handing of non-default instanceof (cases (B)) to the check_has_instance op, leaving
1152         op_instanceof to handle only cases (A).
1153
1154         * API/JSCallbackObject.h:
1155         (JSCallbackObject):
1156         * API/JSCallbackObjectFunctions.h:
1157         (JSC::::customHasInstance):
1158         * API/JSValueRef.cpp:
1159         (JSValueIsInstanceOfConstructor):
1160             - renamed hasInstance to customHasInstance
1161         * bytecode/CodeBlock.cpp:
1162         (JSC::CodeBlock::dump):
1163             - added additional parameters to check_has_instance opcode
1164         * bytecode/Opcode.h:
1165         (JSC):
1166         (JSC::padOpcodeName):
1167             - added additional parameters to check_has_instance opcode
1168         * bytecompiler/BytecodeGenerator.cpp:
1169         (JSC::BytecodeGenerator::emitCheckHasInstance):
1170             - added additional parameters to check_has_instance opcode
1171         * bytecompiler/BytecodeGenerator.h:
1172         (BytecodeGenerator):
1173             - added additional parameters to check_has_instance opcode
1174         * bytecompiler/NodesCodegen.cpp:
1175         (JSC::InstanceOfNode::emitBytecode):
1176             - added additional parameters to check_has_instance opcode
1177         * dfg/DFGByteCodeParser.cpp:
1178         (JSC::DFG::ByteCodeParser::parseBlock):
1179             - added additional parameters to check_has_instance opcode
1180         * interpreter/Interpreter.cpp:
1181         (JSC::isInvalidParamForIn):
1182         (JSC::Interpreter::privateExecute):
1183             - Add handling for non-default instanceof to op_check_has_instance
1184         * jit/JITInlineMethods.h:
1185         (JSC::JIT::emitArrayProfilingSiteForBytecodeIndex):
1186             - Fixed no-LLInt no_DFG build
1187         * jit/JITOpcodes.cpp:
1188         (JSC::JIT::emit_op_check_has_instance):
1189         (JSC::JIT::emitSlow_op_check_has_instance):
1190             - check for ImplementsDefaultHasInstance, handle additional arguments to op_check_has_instance.
1191         (JSC::JIT::emit_op_instanceof):
1192         (JSC::JIT::emitSlow_op_instanceof):
1193             - no need to check for ImplementsDefaultHasInstance.
1194         * jit/JITOpcodes32_64.cpp:
1195         (JSC::JIT::emit_op_check_has_instance):
1196         (JSC::JIT::emitSlow_op_check_has_instance):
1197             - check for ImplementsDefaultHasInstance, handle additional arguments to op_check_has_instance.
1198         (JSC::JIT::emit_op_instanceof):
1199         (JSC::JIT::emitSlow_op_instanceof):
1200             - no need to check for ImplementsDefaultHasInstance.
1201         * jit/JITStubs.cpp:
1202         (JSC::DEFINE_STUB_FUNCTION):
1203         * jit/JITStubs.h:
1204             - Add handling for non-default instanceof to op_check_has_instance
1205         * llint/LLIntSlowPaths.cpp:
1206         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1207         * llint/LowLevelInterpreter32_64.asm:
1208         * llint/LowLevelInterpreter64.asm:
1209             - move check for ImplementsDefaultHasInstance, handle additional arguments to op_check_has_instance.
1210         * runtime/ClassInfo.h:
1211         (MethodTable):
1212         (JSC):
1213             - renamed hasInstance to customHasInstance
1214         * runtime/CommonSlowPaths.h:
1215         (CommonSlowPaths):
1216             - removed opInstanceOfSlow (this was whittled down to one function call!)
1217         * runtime/JSBoundFunction.cpp:
1218         (JSC::JSBoundFunction::customHasInstance):
1219         * runtime/JSBoundFunction.h:
1220         (JSBoundFunction):
1221             - renamed hasInstance to customHasInstance, reimplemented.
1222         * runtime/JSCell.cpp:
1223         (JSC::JSCell::customHasInstance):
1224         * runtime/JSCell.h:
1225         (JSCell):
1226         * runtime/JSObject.cpp:
1227         (JSC::JSObject::hasInstance):
1228         (JSC):
1229         (JSC::JSObject::defaultHasInstance):
1230         * runtime/JSObject.h:
1231         (JSObject):
1232
1233 2012-09-21  Filip Pizlo  <fpizlo@apple.com>
1234
1235         Unreviewed, fix ARM build.
1236
1237         * assembler/MacroAssemblerARMv7.h:
1238         (JSC::MacroAssemblerARMv7::store8):
1239         (MacroAssemblerARMv7):
1240         * offlineasm/armv7.rb:
1241
1242 2012-09-21  Filip Pizlo  <fpizlo@apple.com>
1243
1244         REGRESSION (r128400): Opening Google Web Fonts page hangs or crashes
1245         https://bugs.webkit.org/show_bug.cgi?id=97328
1246
1247         Reviewed by Mark Hahnenberg.
1248
1249         It's a bad idea to emit stub code that reallocates property storage when we're in indexed
1250         storage mode. DFGRepatch.cpp knew this and had the appropriate check in one of the places,
1251         but it didn't have it in all of the places.
1252         
1253         This change also adds some more handy disassembly support, which I used to find the bug.
1254
1255         * assembler/LinkBuffer.h:
1256         (JSC):
1257         * dfg/DFGRepatch.cpp:
1258         (JSC::DFG::generateProtoChainAccessStub):
1259         (JSC::DFG::tryCacheGetByID):
1260         (JSC::DFG::tryBuildGetByIDList):
1261         (JSC::DFG::emitPutReplaceStub):
1262         (JSC::DFG::emitPutTransitionStub):
1263         (JSC::DFG::tryCachePutByID):
1264         * jit/JITStubRoutine.h:
1265         (JSC):
1266
1267 2012-09-21  Filip Pizlo  <fpizlo@apple.com>
1268
1269         DFG CSE assumes that a holy PutByVal does not interfere with GetArrayLength, when it clearly does
1270         https://bugs.webkit.org/show_bug.cgi?id=97373
1271
1272         Reviewed by Mark Hahnenberg.
1273
1274         * dfg/DFGCSEPhase.cpp:
1275         (JSC::DFG::CSEPhase::pureCSE):
1276         (JSC::DFG::CSEPhase::getArrayLengthElimination):
1277         (JSC::DFG::CSEPhase::putStructureStoreElimination):
1278         (JSC::DFG::CSEPhase::performNodeCSE):
1279         * dfg/DFGGraph.h:
1280         (Graph):
1281
1282 2012-09-21  Chris Rogers  <crogers@google.com>
1283
1284         Add Web Audio support for deprecated/legacy APIs
1285         https://bugs.webkit.org/show_bug.cgi?id=97050
1286
1287         Reviewed by Eric Carlson.
1288
1289         * Configurations/FeatureDefines.xcconfig:
1290
1291 2012-09-21  Gavin Barraclough  <barraclough@apple.com>
1292
1293         Global Math object should be configurable but isn't
1294         https://bugs.webkit.org/show_bug.cgi?id=55343
1295
1296         Reviewed by Oliver Hunt.
1297
1298         This has no performance impact.
1299
1300         * runtime/JSGlobalObject.cpp:
1301         (JSC::JSGlobalObject::reset):
1302             - Make 'Math' a regular property.
1303
1304 2012-09-21  Chao-ying Fu  <fu@mips.com>
1305
1306         Add MIPS or32 function
1307         https://bugs.webkit.org/show_bug.cgi?id=97157
1308
1309         Reviewed by Gavin Barraclough.
1310
1311         Add a missing or32 function.
1312
1313         * assembler/MacroAssemblerMIPS.h:
1314         (JSC::MacroAssemblerMIPS::or32): New function.
1315         (MacroAssemblerMIPS):
1316
1317 2012-09-20  Filip Pizlo  <fpizlo@apple.com>
1318
1319         CHECK_ARRAY_CONSISTENCY isn't being used or tested, so we should remove it
1320         https://bugs.webkit.org/show_bug.cgi?id=97260
1321
1322         Rubber stamped by Geoffrey Garen.
1323         
1324         Supporting it will become difficult as we add more indexing types. It makes more
1325         sense to kill, especially since we don't appear to use it or test it, ever.
1326
1327         * runtime/ArrayConventions.h:
1328         (JSC):
1329         * runtime/ArrayPrototype.cpp:
1330         (JSC::arrayProtoFuncSplice):
1331         * runtime/ArrayStorage.h:
1332         (JSC::ArrayStorage::copyHeaderFromDuringGC):
1333         (ArrayStorage):
1334         * runtime/FunctionPrototype.cpp:
1335         (JSC::functionProtoFuncBind):
1336         * runtime/JSArray.cpp:
1337         (JSC::createArrayButterflyInDictionaryIndexingMode):
1338         (JSC::JSArray::setLength):
1339         (JSC::JSArray::pop):
1340         (JSC::JSArray::push):
1341         (JSC::JSArray::sortNumeric):
1342         (JSC::JSArray::sort):
1343         (JSC::JSArray::compactForSorting):
1344         * runtime/JSArray.h:
1345         (JSArray):
1346         (JSC::createArrayButterfly):
1347         (JSC::JSArray::tryCreateUninitialized):
1348         (JSC::constructArray):
1349         * runtime/JSObject.cpp:
1350         (JSC::JSObject::putByIndex):
1351         (JSC::JSObject::createArrayStorage):
1352         (JSC::JSObject::deletePropertyByIndex):
1353         (JSC):
1354         * runtime/JSObject.h:
1355         (JSC::JSObject::initializeIndex):
1356         (JSObject):
1357
1358 2012-09-20  Mark Lam  <mark.lam@apple.com>
1359
1360         Fixed a missing semicolon in the C++ llint backend.
1361         https://bugs.webkit.org/show_bug.cgi?id=97252.
1362
1363         Reviewed by Geoff Garen.
1364
1365         * offlineasm/cloop.rb:
1366
1367 2012-09-20  Geoffrey Garen  <ggaren@apple.com>
1368
1369         Refactored the interpreter and JIT so they don't dictate closure layout
1370         https://bugs.webkit.org/show_bug.cgi?id=97221
1371
1372         Reviewed by Oliver Hunt.
1373
1374         Capture may change the location of an argument for space efficiency. This
1375         patch removes static assumptions about argument location from the interpreter
1376         and JIT.
1377
1378         * bytecode/CodeBlock.h:
1379         (JSC::CodeBlock::argumentIndexAfterCapture):
1380         (JSC::ExecState::argumentAfterCapture): Factored out a helper function
1381         so the compiler could share this logic.
1382
1383         * bytecompiler/NodesCodegen.cpp:
1384         (JSC::BracketAccessorNode::emitBytecode): Don't emit optimized bracket
1385         access on arguments if a parameter has been captured by name. This case is
1386         rare and, where I've seen it in the wild, the optimization mostly failed
1387         anyway due to arguments escape, so I didn't feel like writing and testing
1388         five copies of the code that would handle it in the baseline engines.
1389
1390         The DFG can still synthesize this optimization even if we don't emit the
1391         optimized bytecode for it.
1392
1393         * dfg/DFGArgumentsSimplificationPhase.cpp:
1394         (JSC::DFG::ArgumentsSimplificationPhase::run):
1395         * dfg/DFGAssemblyHelpers.h:
1396         (JSC::DFG::AssemblyHelpers::symbolTableFor):
1397         (AssemblyHelpers): Use the right helper function to account for the fact
1398         that a parameter may have been captured by name and moved.
1399
1400         * dfg/DFGByteCodeParser.cpp:
1401         (JSC::DFG::ByteCodeParser::parseBlock): ASSERT that we haven't inlined
1402         a .apply on captured arguments. Once we do start inlining such things,
1403         we'll need to do a little bit of math here to get them right.
1404
1405         * dfg/DFGSpeculativeJIT32_64.cpp:
1406         (JSC::DFG::SpeculativeJIT::compile):
1407         * dfg/DFGSpeculativeJIT64.cpp:
1408         (JSC::DFG::SpeculativeJIT::compile): Added support for bracket access on
1409         an arguments object where arguments have also been captured by name. We
1410         load the true index of the argument from a side vector. Arguments elision
1411         is very powerful in the DFG, so I wanted to keep it working, even in this
1412         rare case.
1413
1414         * interpreter/Interpreter.cpp:
1415         (JSC::loadVarargs): Use the right helper function to account for the fact
1416         that a parameter may have been captured by name and moved.
1417
1418         * jit/JITCall.cpp:
1419         (JSC::JIT::compileLoadVarargs):
1420         * jit/JITCall32_64.cpp:
1421         (JSC::JIT::compileLoadVarargs): Don't use the inline copy loop if some
1422         of our arguments have moved, since it would copy stale values. (We still
1423         optimize the actual call, and elide the arguments object.)
1424
1425 2012-09-20  Gabor Rapcsanyi  <rgabor@webkit.org>
1426
1427         [Qt] r129045 broke the ARM build
1428         https://bugs.webkit.org/show_bug.cgi?id=97195
1429
1430         Reviewed by Zoltan Herczeg.
1431
1432         Implementing missing store8 function.
1433
1434         * assembler/MacroAssemblerARM.h:
1435         (JSC::MacroAssemblerARM::store8):
1436         (MacroAssemblerARM):
1437
1438 2012-09-19  Geoffrey Garen  <ggaren@apple.com>
1439
1440         OSR exit sometimes neglects to create the arguments object
1441         https://bugs.webkit.org/show_bug.cgi?id=97162
1442
1443         Reviewed by Filip Pizlo.
1444
1445         No performance change.
1446
1447         I don't know of any case where this is a real problem in TOT, but it
1448         will become a problem if we start compiling eval, with, or catch, and/or
1449         sometimes stop doing arguments optimizations in the bytecode.
1450
1451         * dfg/DFGArgumentsSimplificationPhase.cpp:
1452         (JSC::DFG::ArgumentsSimplificationPhase::run): Account for a
1453         CreateArguments that has transformed into PhantomArguments. We used to
1454         clear our reference to the CreateArguments node, but now we hold onto it, 
1455         so we need to account for it transforming.
1456
1457         Don't replace a SetLocal(CreateArguments) with a SetLocal(JSValue())
1458         because that doesn't leave enough information behind for OSR exit to do
1459         the right thing. Instead, maintain our reference to CreateArguments, and
1460         rely on CreateArguments transforming into PhantomArguments after
1461         optimization. SetLocal(PhantomArguments) is efficient, and it's a marker
1462         for OSR exit to create the arguments object.
1463
1464         Don't ASSERT that all PhantomArguments are unreferenced because we now
1465         leave them in the graph as SetLocal(PhantomArguments), and that's harmless.
1466
1467         * dfg/DFGArgumentsSimplificationPhase.h:
1468         (NullableHashTraits):
1469         (JSC::DFG::NullableHashTraits::emptyValue): Export our special hash table
1470         for inline call frames so the OSR exit compiler can use it.
1471
1472         * dfg/DFGOSRExitCompiler32_64.cpp:
1473         (JSC::DFG::OSRExitCompiler::compileExit):
1474         * dfg/DFGOSRExitCompiler64.cpp:
1475         (JSC::DFG::OSRExitCompiler::compileExit): Don't load the 'arguments'
1476         register to decide if we need to create the arguments object. Optimization
1477         may have eliminated the initializing store to this register, in which
1478         case we'll load garbage. Instead, use the global knowledge that all call
1479         frames that optimized out 'arguments' now need to create it, and use a hash
1480         table to make sure we do so only once per call frame.
1481
1482         * dfg/DFGSpeculativeJIT64.cpp:
1483         (JSC::DFG::SpeculativeJIT::compile): SetLocal(PhantomArguments) is unique
1484         because we haven't just changed a value's format or elided a load or store;
1485         instead, we've replaced an object with JSValue(). We could try to account
1486         for this in a general way, but for now it's a special-case optimization,
1487         so we give it a specific OSR hint instead.
1488
1489 2012-09-19  Filip Pizlo  <fpizlo@apple.com>
1490
1491         REGRESSION(r128802): It made some JS tests crash
1492         https://bugs.webkit.org/show_bug.cgi?id=97001
1493
1494         Reviewed by Mark Hahnenberg.
1495
1496         * runtime/JSGlobalObject.cpp:
1497         (JSC::JSGlobalObject::visitChildren):
1498
1499 2012-09-19  Filip Pizlo  <fpizlo@apple.com>
1500
1501         DFG should not assume that a ByVal access is generic just because it was unprofiled
1502         https://bugs.webkit.org/show_bug.cgi?id=97088
1503
1504         Reviewed by Geoffrey Garen.
1505         
1506         We were not disambiguating between "Undecided" in the sense that the array profile
1507         has no useful information versus "Undecided" in the sense that the array profile
1508         knows that the access has not executed. That's an important distinction, since
1509         the former form of "Undecided" means that we should consult value profiling, while
1510         the latter means that we should force exit unless the value profiling indicates
1511         that the access must be generic (base is not cell or property is not int).
1512
1513         * dfg/DFGAbstractState.cpp:
1514         (JSC::DFG::AbstractState::execute):
1515         * dfg/DFGArrayMode.cpp:
1516         (JSC::DFG::fromObserved):
1517         (JSC::DFG::refineArrayMode):
1518         (JSC::DFG::modeAlreadyChecked):
1519         (JSC::DFG::modeToString):
1520         * dfg/DFGArrayMode.h:
1521         (JSC::DFG::canCSEStorage):
1522         (JSC::DFG::modeIsSpecific):
1523         (JSC::DFG::modeSupportsLength):
1524         (JSC::DFG::benefitsFromStructureCheck):
1525
1526 2012-09-19  Filip Pizlo  <fpizlo@apple.com>
1527
1528         DFG should not emit PutByVal hole case unless it has to
1529         https://bugs.webkit.org/show_bug.cgi?id=97080
1530
1531         Reviewed by Geoffrey Garen.
1532
1533         This causes us to generate less code for typical PutByVal's. But if profiling tells us
1534         that the hole case is being hit, we generate the same code as we would have generated
1535         before. This seems like a slight speed-up across the board.
1536
1537         * assembler/MacroAssemblerARMv7.h:
1538         (JSC::MacroAssemblerARMv7::store8):
1539         (MacroAssemblerARMv7):
1540         * assembler/MacroAssemblerX86.h:
1541         (MacroAssemblerX86):
1542         (JSC::MacroAssemblerX86::store8):
1543         * assembler/MacroAssemblerX86_64.h:
1544         (MacroAssemblerX86_64):
1545         (JSC::MacroAssemblerX86_64::store8):
1546         * assembler/X86Assembler.h:
1547         (X86Assembler):
1548         (JSC::X86Assembler::movb_i8m):
1549         * bytecode/ArrayProfile.h:
1550         (JSC::ArrayProfile::ArrayProfile):
1551         (JSC::ArrayProfile::addressOfMayStoreToHole):
1552         (JSC::ArrayProfile::mayStoreToHole):
1553         (ArrayProfile):
1554         * dfg/DFGArrayMode.cpp:
1555         (JSC::DFG::fromObserved):
1556         (JSC::DFG::modeAlreadyChecked):
1557         (JSC::DFG::modeToString):
1558         * dfg/DFGArrayMode.h:
1559         (DFG):
1560         (JSC::DFG::mayStoreToHole):
1561         * dfg/DFGSpeculativeJIT32_64.cpp:
1562         (JSC::DFG::SpeculativeJIT::compile):
1563         * dfg/DFGSpeculativeJIT64.cpp:
1564         (JSC::DFG::SpeculativeJIT::compile):
1565         * jit/JIT.h:
1566         (JIT):
1567         * jit/JITInlineMethods.h:
1568         (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase):
1569         (JSC):
1570         * jit/JITPropertyAccess.cpp:
1571         (JSC::JIT::emit_op_put_by_val):
1572         * jit/JITPropertyAccess32_64.cpp:
1573         (JSC::JIT::emit_op_put_by_val):
1574         * llint/LowLevelInterpreter32_64.asm:
1575         * llint/LowLevelInterpreter64.asm:
1576
1577 2012-09-18  Filip Pizlo  <fpizlo@apple.com>
1578
1579         DFG should not call out to C++ every time that it tries to put to an object that doesn't yet have array storage
1580         https://bugs.webkit.org/show_bug.cgi?id=96983
1581
1582         Reviewed by Oliver Hunt.
1583
1584         Introduce more polymorphism into the DFG's array mode support. Use that to
1585         introduce the notion of effectul array modes, where the check for the mode
1586         will perform actions necessary to ensure that we have the mode we want, if
1587         the object is not already in that mode. Also added profiling support for
1588         checking if an object is of a type that would not allow us to create array
1589         storage (like a typed array or a string for example).
1590         
1591         This is a ~2x speed-up on loops that transform an object that did not have
1592         indexed storage into one that does.
1593
1594         * JSCTypedArrayStubs.h:
1595         (JSC):
1596         * bytecode/ArrayProfile.cpp:
1597         (JSC::ArrayProfile::computeUpdatedPrediction):
1598         * bytecode/ArrayProfile.h:
1599         (JSC::ArrayProfile::ArrayProfile):
1600         (JSC::ArrayProfile::mayInterceptIndexedAccesses):
1601         (ArrayProfile):
1602         * dfg/DFGAbstractState.cpp:
1603         (JSC::DFG::AbstractState::execute):
1604         * dfg/DFGArrayMode.cpp:
1605         (JSC::DFG::fromObserved):
1606         (DFG):
1607         (JSC::DFG::modeAlreadyChecked):
1608         (JSC::DFG::modeToString):
1609         * dfg/DFGArrayMode.h:
1610         (DFG):
1611         (JSC::DFG::modeUsesButterfly):
1612         (JSC::DFG::isSlowPutAccess):
1613         (JSC::DFG::benefitsFromStructureCheck):
1614         (JSC::DFG::isEffectful):
1615         * dfg/DFGByteCodeParser.cpp:
1616         (JSC::DFG::ByteCodeParser::getArrayMode):
1617         (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
1618         (JSC::DFG::ByteCodeParser::parseBlock):
1619         * dfg/DFGCSEPhase.cpp:
1620         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
1621         * dfg/DFGFixupPhase.cpp:
1622         (JSC::DFG::FixupPhase::fixupNode):
1623         (JSC::DFG::FixupPhase::checkArray):
1624         * dfg/DFGGraph.h:
1625         (JSC::DFG::Graph::byValIsPure):
1626         * dfg/DFGNode.h:
1627         (JSC::DFG::Node::hasArrayMode):
1628         * dfg/DFGNodeType.h:
1629         (DFG):
1630         * dfg/DFGOperations.cpp:
1631         * dfg/DFGOperations.h:
1632         * dfg/DFGPredictionPropagationPhase.cpp:
1633         (JSC::DFG::PredictionPropagationPhase::propagate):
1634         * dfg/DFGSpeculativeJIT.cpp:
1635         (JSC::DFG::SpeculativeJIT::checkArray):
1636         (JSC::DFG::SpeculativeJIT::arrayify):
1637         (DFG):
1638         * dfg/DFGSpeculativeJIT.h:
1639         (SpeculativeJIT):
1640         * dfg/DFGSpeculativeJIT32_64.cpp:
1641         (JSC::DFG::SpeculativeJIT::compile):
1642         * dfg/DFGSpeculativeJIT64.cpp:
1643         (JSC::DFG::SpeculativeJIT::compile):
1644         * runtime/Arguments.h:
1645         (Arguments):
1646         * runtime/JSNotAnObject.h:
1647         (JSNotAnObject):
1648         * runtime/JSObject.h:
1649         (JSObject):
1650         (JSC::JSObject::ensureArrayStorage):
1651         * runtime/JSString.h:
1652         (JSC::JSString::createStructure):
1653
1654 2012-09-18  Filip Pizlo  <fpizlo@apple.com>
1655
1656         Include PhantomArguments in DFGDisassembly
1657         https://bugs.webkit.org/show_bug.cgi?id=97043
1658
1659         Reviewed by Geoffrey Garen.
1660
1661         * dfg/DFGNode.h:
1662         (JSC::DFG::Node::willHaveCodeGenOrOSR):
1663
1664 2012-09-18  Filip Pizlo  <fpizlo@apple.com>
1665
1666         REGRESSION(r128802): It made some JS tests crash
1667         https://bugs.webkit.org/show_bug.cgi?id=97001
1668
1669         Reviewed by Mark Hahnenberg.
1670
1671         IndexingHeaderInlineMethods was incorrectly assuming that if the HasArrayStorage bit is clear, then that means that indexing payload capacity is zero.
1672
1673         * runtime/IndexingHeaderInlineMethods.h:
1674         (JSC::IndexingHeader::preCapacity):
1675         (JSC::IndexingHeader::indexingPayloadSizeInBytes):
1676
1677 2012-09-18  Mark Hahnenberg  <mhahnenberg@apple.com>
1678
1679         Use WTF::HasTrivialDestructor instead of compiler-specific versions in JSC::NeedsDestructor
1680         https://bugs.webkit.org/show_bug.cgi?id=96980
1681
1682         Reviewed by Benjamin Poulain.
1683
1684         * runtime/JSCell.h:
1685         (JSC):
1686         (NeedsDestructor):
1687
1688 2012-09-18  Filip Pizlo  <fpizlo@apple.com>
1689
1690         DFGOperations doesn't use NativeCallFrameTracer in enough places
1691         https://bugs.webkit.org/show_bug.cgi?id=96987
1692
1693         Reviewed by Mark Hahnenberg.
1694
1695         Anything that can GC should use it.
1696
1697         * dfg/DFGOperations.cpp:
1698
1699 2012-09-18  Mark Lam  <mark.lam@apple.com>
1700
1701         Not reviewed. Attempt at greening the WinCairo bot. Touching
1702         LowLevelInterpreter.asm to trigger a rebuild of LLIntDesiredOffsets.
1703         https://bugs.webkit.org/show_bug.cgi?id=96992.
1704
1705         * llint/LowLevelInterpreter.asm:
1706
1707 2012-09-18  Peter Gal  <galpeter@inf.u-szeged.hu>
1708
1709         [Qt] REGRESSION(r128790): It broke the ARM build
1710         https://bugs.webkit.org/show_bug.cgi?id=96968
1711
1712         Reviewed by Filip Pizlo.
1713
1714         Implement the missing or32 method in the MacroAssemblerARM.h.
1715
1716         * assembler/MacroAssemblerARM.h:
1717         (JSC::MacroAssemblerARM::or32):
1718         (MacroAssemblerARM):
1719
1720 2012-09-18  Mark Lam  <mark.lam@apple.com>
1721
1722         Fix for WinCairo builds.
1723         https://bugs.webkit.org/show_bug.cgi?id=96992.
1724
1725         Reviewed by Filip Pizlo.
1726
1727         Adding additional vcproj build targets in LLIntDesiredOffsets.vcproj,
1728         LLIntOffsetsExtractor.vcproj, and LLIntAssembly.vcproj to match those
1729         in jsc.vcproj.
1730
1731         * JavaScriptCore.vcproj/LLIntAssembly/LLIntAssembly.vcproj:
1732         * JavaScriptCore.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcproj:
1733         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcproj:
1734         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.vsprops: Added property svn:eol-style.
1735         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.vsprops: Added property svn:eol-style.
1736         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebugAll.vsprops: Added.
1737         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebugCairoCFLite.vsprops: Added.
1738         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorProduction.vsprops: Added.
1739         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.vsprops: Added property svn:eol-style.
1740         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorReleaseCairoCFLite.vsprops: Added.
1741         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorReleasePGO.vsprops: Added.
1742
1743 2012-09-18  Filip Pizlo  <fpizlo@apple.com>
1744
1745         Unreviewed, fix sloppy English in comment.
1746
1747         * runtime/JSGlobalObject.cpp:
1748         (JSC):
1749
1750 2012-09-17  Csaba Osztrogonác  <ossy@webkit.org>
1751
1752         Unreviewed, rolling out r128826 and r128813.
1753
1754         * API/JSCallbackConstructor.cpp:
1755         (JSC):
1756         (JSC::JSCallbackConstructor::JSCallbackConstructor):
1757         * API/JSCallbackConstructor.h:
1758         (JSCallbackConstructor):
1759         * API/JSCallbackObject.cpp:
1760         (JSC):
1761         (JSC::::createStructure):
1762         * API/JSCallbackObject.h:
1763         (JSC::JSCallbackObject::create):
1764         (JSCallbackObject):
1765         * API/JSClassRef.cpp:
1766         (OpaqueJSClass::prototype):
1767         * API/JSObjectRef.cpp:
1768         (JSObjectMake):
1769         (JSObjectGetPrivate):
1770         (JSObjectSetPrivate):
1771         (JSObjectGetPrivateProperty):
1772         (JSObjectSetPrivateProperty):
1773         (JSObjectDeletePrivateProperty):
1774         * API/JSValueRef.cpp:
1775         (JSValueIsObjectOfClass):
1776         * API/JSWeakObjectMapRefPrivate.cpp:
1777         * GNUmakefile.list.am:
1778         * JSCTypedArrayStubs.h:
1779         (JSC):
1780         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1781         * JavaScriptCore.xcodeproj/project.pbxproj:
1782         * dfg/DFGSpeculativeJIT.h:
1783         (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
1784         (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
1785         * heap/Heap.cpp:
1786         (JSC::Heap::isSafeToSweepStructures):
1787         (JSC):
1788         * heap/Heap.h:
1789         (JSC::Heap::allocatorForObjectWithDestructor):
1790         (Heap):
1791         (JSC::Heap::allocateWithDestructor):
1792         (JSC::Heap::allocateStructure):
1793         (JSC):
1794         * heap/IncrementalSweeper.cpp:
1795         (JSC::IncrementalSweeper::IncrementalSweeper):
1796         (JSC::IncrementalSweeper::sweepNextBlock):
1797         (JSC::IncrementalSweeper::startSweeping):
1798         (JSC::IncrementalSweeper::willFinishSweeping):
1799         (JSC::IncrementalSweeper::structuresCanBeSwept):
1800         (JSC):
1801         * heap/IncrementalSweeper.h:
1802         (IncrementalSweeper):
1803         * heap/MarkedAllocator.cpp:
1804         (JSC::MarkedAllocator::tryAllocateHelper):
1805         (JSC::MarkedAllocator::allocateBlock):
1806         * heap/MarkedAllocator.h:
1807         (JSC::MarkedAllocator::cellsNeedDestruction):
1808         (JSC::MarkedAllocator::onlyContainsStructures):
1809         (MarkedAllocator):
1810         (JSC::MarkedAllocator::MarkedAllocator):
1811         (JSC::MarkedAllocator::init):
1812         * heap/MarkedBlock.cpp:
1813         (JSC::MarkedBlock::create):
1814         (JSC::MarkedBlock::MarkedBlock):
1815         (JSC):
1816         (JSC::MarkedBlock::specializedSweep):
1817         (JSC::MarkedBlock::sweep):
1818         (JSC::MarkedBlock::sweepHelper):
1819         * heap/MarkedBlock.h:
1820         (JSC):
1821         (MarkedBlock):
1822         (JSC::MarkedBlock::cellsNeedDestruction):
1823         (JSC::MarkedBlock::onlyContainsStructures):
1824         * heap/MarkedSpace.cpp:
1825         (JSC::MarkedSpace::MarkedSpace):
1826         (JSC::MarkedSpace::resetAllocators):
1827         (JSC::MarkedSpace::canonicalizeCellLivenessData):
1828         (JSC::MarkedSpace::isPagedOut):
1829         (JSC::MarkedSpace::freeBlock):
1830         * heap/MarkedSpace.h:
1831         (MarkedSpace):
1832         (Subspace):
1833         (JSC::MarkedSpace::allocatorFor):
1834         (JSC::MarkedSpace::destructorAllocatorFor):
1835         (JSC::MarkedSpace::allocateWithDestructor):
1836         (JSC::MarkedSpace::allocateStructure):
1837         (JSC::MarkedSpace::forEachBlock):
1838         * heap/SlotVisitor.cpp:
1839         * jit/JIT.h:
1840         * jit/JITInlineMethods.h:
1841         (JSC::JIT::emitAllocateBasicJSObject):
1842         (JSC::JIT::emitAllocateJSFinalObject):
1843         (JSC::JIT::emitAllocateJSArray):
1844         * jsc.cpp:
1845         (GlobalObject::create):
1846         * runtime/Arguments.cpp:
1847         (JSC):
1848         * runtime/Arguments.h:
1849         (Arguments):
1850         (JSC::Arguments::Arguments):
1851         * runtime/ErrorPrototype.cpp:
1852         (JSC):
1853         * runtime/Executable.h:
1854         * runtime/InternalFunction.cpp:
1855         (JSC):
1856         (JSC::InternalFunction::InternalFunction):
1857         * runtime/InternalFunction.h:
1858         (InternalFunction):
1859         * runtime/JSCell.h:
1860         (JSC):
1861         (JSC::allocateCell):
1862         * runtime/JSDestructibleObject.h: Removed.
1863         * runtime/JSGlobalObject.cpp:
1864         (JSC::JSGlobalObject::reset):
1865         (JSC):
1866         * runtime/JSGlobalObject.h:
1867         (JSGlobalObject):
1868         (JSC::JSGlobalObject::createRareDataIfNeeded):
1869         (JSC::JSGlobalObject::create):
1870         * runtime/JSGlobalThis.h:
1871         (JSGlobalThis):
1872         (JSC::JSGlobalThis::JSGlobalThis):
1873         * runtime/JSPropertyNameIterator.h:
1874         * runtime/JSScope.cpp:
1875         (JSC):
1876         * runtime/JSString.h:
1877         (JSC):
1878         * runtime/JSWrapperObject.h:
1879         (JSWrapperObject):
1880         (JSC::JSWrapperObject::JSWrapperObject):
1881         * runtime/MathObject.cpp:
1882         (JSC):
1883         * runtime/NameInstance.h:
1884         (NameInstance):
1885         * runtime/RegExp.h:
1886         * runtime/RegExpObject.cpp:
1887         (JSC):
1888         * runtime/SparseArrayValueMap.h:
1889         * runtime/Structure.h:
1890         (JSC::Structure):
1891         (JSC::JSCell::classInfo):
1892         (JSC):
1893         * runtime/StructureChain.h:
1894         * runtime/SymbolTable.h:
1895         * testRegExp.cpp:
1896         (GlobalObject::create):
1897
1898 2012-09-17  Geoffrey Garen  <ggaren@apple.com>
1899
1900         Refactored the arguments object so it doesn't dictate closure layout
1901         https://bugs.webkit.org/show_bug.cgi?id=96955
1902
1903         Reviewed by Oliver Hunt.
1904
1905         * bytecode/CodeBlock.h:
1906         (JSC::ExecState::argumentAfterCapture): Helper function for accessing an
1907         argument that has been moved for capture.
1908
1909         * bytecompiler/BytecodeGenerator.cpp:
1910         (JSC::BytecodeGenerator::BytecodeGenerator): Generate metadata for arguments
1911         that are captured. We don't move any arguments yet, but we do use this
1912         metadata to tell the arguments object if an argument is stored in the
1913         activation.
1914
1915         * dfg/DFGOperations.cpp:
1916         * dfg/DFGSpeculativeJIT.cpp:
1917         (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
1918         (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
1919         * dfg/DFGSpeculativeJIT64.cpp:
1920         (JSC::DFG::SpeculativeJIT::compile): Updated for the arguments object not
1921         malloc'ing a separate backing store, and for a rename from deletedArguments
1922         to slowArguments.
1923
1924         * interpreter/CallFrame.h:
1925         (ExecState):
1926         * interpreter/Interpreter.cpp:
1927         (JSC::Interpreter::unwindCallFrame):
1928         (JSC::Interpreter::privateExecute):
1929         * jit/JITStubs.cpp:
1930         (JSC::DEFINE_STUB_FUNCTION):
1931         * llint/LLIntSlowPaths.cpp:
1932         (JSC::LLInt::LLINT_SLOW_PATH_DECL): Updated for small interface changes.
1933
1934         * runtime/Arguments.cpp:
1935         (JSC::Arguments::visitChildren):
1936         (JSC::Arguments::copyToArguments):
1937         (JSC::Arguments::fillArgList):
1938         (JSC::Arguments::getOwnPropertySlotByIndex):
1939         (JSC::Arguments::createStrictModeCallerIfNecessary):
1940         (JSC::Arguments::createStrictModeCalleeIfNecessary):
1941         (JSC::Arguments::getOwnPropertySlot):
1942         (JSC::Arguments::getOwnPropertyDescriptor):
1943         (JSC::Arguments::getOwnPropertyNames):
1944         (JSC::Arguments::putByIndex):
1945         (JSC::Arguments::put):
1946         (JSC::Arguments::deletePropertyByIndex):
1947         (JSC::Arguments::deleteProperty):
1948         (JSC::Arguments::defineOwnProperty):
1949         (JSC::Arguments::tearOff): Moved all data inline into the object, for speed,
1950         and refactored all internal argument accesses to use helper functions, so
1951         we can change the implementation without changing lots of code.
1952
1953         (JSC::Arguments::didTearOffActivation): This function needs to account
1954         for arguments that were moved by the activation object. We do this accounting
1955         through a side vector that tells us where our arguments will be in the
1956         activation.
1957
1958         (JSC::Arguments::tearOffForInlineCallFrame):
1959         * runtime/Arguments.h:
1960         (Arguments):
1961         (JSC::Arguments::length):
1962         (JSC::Arguments::isTornOff):
1963         (JSC::Arguments::Arguments):
1964         (JSC::Arguments::allocateSlowArguments):
1965         (JSC::Arguments::tryDeleteArgument):
1966         (JSC::Arguments::trySetArgument):
1967         (JSC::Arguments::tryGetArgument):
1968         (JSC::Arguments::isDeletedArgument):
1969         (JSC::Arguments::isArgument):
1970         (JSC::Arguments::argument):
1971         (JSC::Arguments::finishCreation):
1972
1973         * runtime/JSActivation.h:
1974         (JSC::JSActivation::create):
1975         (JSActivation):
1976         (JSC::JSActivation::captureStart):
1977         (JSC::JSActivation::storageSize):
1978         (JSC::JSActivation::registerOffset):
1979         (JSC::JSActivation::isValid): The activation object is no longer responsible
1980         for copying extra arguments provided by the caller. The argumnents object
1981         does this instead. This means we can allocate and initialize an activation
1982         without worrying about the call frame's argument count.
1983
1984         * runtime/SymbolTable.h:
1985         (JSC::SlowArgument::SlowArgument):
1986         (SlowArgument):
1987         (JSC):
1988         (JSC::SharedSymbolTable::parameterCount):
1989         (SharedSymbolTable):
1990         (JSC::SharedSymbolTable::slowArguments):
1991         (JSC::SharedSymbolTable::setSlowArguments): Added data structures to back
1992         the algorithms above.
1993
1994 2012-09-17  Filip Pizlo  <fpizlo@apple.com>
1995
1996         32-bit LLInt get_by_val does vector length checks incorrectly
1997         https://bugs.webkit.org/show_bug.cgi?id=96893
1998         <rdar://problem/12311678>
1999
2000         Reviewed by Mark Hahnenberg.
2001
2002         * llint/LowLevelInterpreter32_64.asm:
2003
2004 2012-09-17  Filip Pizlo  <fpizlo@apple.com>
2005
2006         We don't have a bad enough time if an object's prototype chain crosses global objects
2007         https://bugs.webkit.org/show_bug.cgi?id=96962
2008
2009         Reviewed by Geoffrey Garen.
2010
2011         * runtime/JSGlobalObject.cpp:
2012         (JSC):
2013
2014 2012-09-17  Filip Pizlo  <fpizlo@apple.com>
2015
2016         Unreviewed, fix a broken assertion in offlineasm.
2017
2018         * offlineasm/armv7.rb:
2019         * offlineasm/backends.rb:
2020
2021 2012-09-16  Mark Hahnenberg  <mhahnenberg@apple.com>
2022
2023         Delayed structure sweep can leak structures without bound
2024         https://bugs.webkit.org/show_bug.cgi?id=96546
2025
2026         Reviewed by Gavin Barraclough.
2027
2028         This patch gets rid of the separate Structure allocator in the MarkedSpace and adds two new destructor-only
2029         allocators. We now have separate allocators for our three types of objects: those objects with no destructors,
2030         those objects with destructors and with immortal structures, and those objects with destructors that don't have 
2031         immortal structures. All of the objects of the third type (destructors without immortal structures) now 
2032         inherit from a new class named JSDestructibleObject (which in turn is a subclass of JSNonFinalObject), which stores 
2033         the ClassInfo for these classes at a fixed offset for safe retrieval during sweeping/destruction.
2034
2035         * API/JSCallbackConstructor.cpp: Use JSDestructibleObject for JSCallbackConstructor.
2036         (JSC):
2037         (JSC::JSCallbackConstructor::JSCallbackConstructor):
2038         * API/JSCallbackConstructor.h:
2039         (JSCallbackConstructor):
2040         * API/JSCallbackObject.cpp: Inherit from JSDestructibleObject for normal JSCallbackObjects and use a finalizer for 
2041         JSCallbackObject<JSGlobalObject>, since JSGlobalObject also uses a finalizer.
2042         (JSC):
2043         (JSC::::create): We need to move the create function for JSCallbackObject<JSGlobalObject> out of line so we can add 
2044         the finalizer for it. We don't want to add the finalizer is something like finishCreation in case somebody decides 
2045         to subclass this. We use this same technique for many other subclasses of JSGlobalObject.
2046         (JSC::::createStructure):
2047         * API/JSCallbackObject.h:
2048         (JSCallbackObject):
2049         (JSC):
2050         * API/JSClassRef.cpp: Change all the JSCallbackObject<JSNonFinalObject> to use JSDestructibleObject instead.
2051         (OpaqueJSClass::prototype):
2052         * API/JSObjectRef.cpp: Ditto.
2053         (JSObjectMake):
2054         (JSObjectGetPrivate):
2055         (JSObjectSetPrivate):
2056         (JSObjectGetPrivateProperty):
2057         (JSObjectSetPrivateProperty):
2058         (JSObjectDeletePrivateProperty):
2059         * API/JSValueRef.cpp: Ditto.
2060         (JSValueIsObjectOfClass):
2061         * API/JSWeakObjectMapRefPrivate.cpp: Ditto.
2062         * JSCTypedArrayStubs.h:
2063         (JSC):
2064         * JavaScriptCore.xcodeproj/project.pbxproj:
2065         * dfg/DFGSpeculativeJIT.h: Use the proper allocator type when doing inline allocation in the DFG.
2066         (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
2067         (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
2068         * heap/Heap.cpp:
2069         (JSC):
2070         * heap/Heap.h: Add accessors for the various types of allocators now. Also remove the isSafeToSweepStructures function 
2071         since it's always safe to sweep Structures now.
2072         (JSC::Heap::allocatorForObjectWithNormalDestructor): 
2073         (JSC::Heap::allocatorForObjectWithImmortalStructureDestructor):
2074         (Heap):
2075         (JSC::Heap::allocateWithNormalDestructor):
2076         (JSC):
2077         (JSC::Heap::allocateWithImmortalStructureDestructor):
2078         * heap/IncrementalSweeper.cpp: Remove all the logic to detect when it's safe to sweep Structures from the 
2079         IncrementalSweeper since it's always safe to sweep Structures now.
2080         (JSC::IncrementalSweeper::IncrementalSweeper):
2081         (JSC::IncrementalSweeper::sweepNextBlock):
2082         (JSC::IncrementalSweeper::startSweeping):
2083         (JSC::IncrementalSweeper::willFinishSweeping):
2084         (JSC):
2085         * heap/IncrementalSweeper.h:
2086         (IncrementalSweeper):
2087         * heap/MarkedAllocator.cpp: Remove the logic that was preventing us from sweeping Structures if it wasn't safe. Add 
2088         tracking of the specific destructor type of allocator. 
2089         (JSC::MarkedAllocator::tryAllocateHelper):
2090         (JSC::MarkedAllocator::allocateBlock):
2091         * heap/MarkedAllocator.h:
2092         (JSC::MarkedAllocator::destructorType):
2093         (MarkedAllocator):
2094         (JSC::MarkedAllocator::MarkedAllocator):
2095         (JSC::MarkedAllocator::init):
2096         * heap/MarkedBlock.cpp: Add all the destructor type stuff to MarkedBlocks so that we do the right thing when sweeping. 
2097         We also use the stored destructor type to determine the right thing to do in all JSCell::classInfo() calls.
2098         (JSC::MarkedBlock::create):
2099         (JSC::MarkedBlock::MarkedBlock):
2100         (JSC):
2101         (JSC::MarkedBlock::specializedSweep):
2102         (JSC::MarkedBlock::sweep):
2103         (JSC::MarkedBlock::sweepHelper):
2104         * heap/MarkedBlock.h:
2105         (JSC):
2106         (JSC::MarkedBlock::allocator):
2107         (JSC::MarkedBlock::destructorType):
2108         * heap/MarkedSpace.cpp: Add the new destructor allocators to MarkedSpace.
2109         (JSC::MarkedSpace::MarkedSpace):
2110         (JSC::MarkedSpace::resetAllocators):
2111         (JSC::MarkedSpace::canonicalizeCellLivenessData):
2112         (JSC::MarkedSpace::isPagedOut):
2113         (JSC::MarkedSpace::freeBlock):
2114         * heap/MarkedSpace.h:
2115         (MarkedSpace):
2116         (JSC::MarkedSpace::immortalStructureDestructorAllocatorFor):
2117         (JSC::MarkedSpace::normalDestructorAllocatorFor):
2118         (JSC::MarkedSpace::allocateWithImmortalStructureDestructor):
2119         (JSC::MarkedSpace::allocateWithNormalDestructor):
2120         (JSC::MarkedSpace::forEachBlock):
2121         * heap/SlotVisitor.cpp: Add include because the symbol was needed in an inlined function.
2122         * jit/JIT.h: Make sure we use the correct allocator when doing inline allocations in the baseline JIT.
2123         * jit/JITInlineMethods.h:
2124         (JSC::JIT::emitAllocateBasicJSObject):
2125         (JSC::JIT::emitAllocateJSFinalObject):
2126         (JSC::JIT::emitAllocateJSArray):
2127         * jsc.cpp: 
2128         (GlobalObject::create): Add finalizer here since JSGlobalObject needs to use a finalizer instead of inheriting from 
2129         JSDestructibleObject.
2130         * runtime/Arguments.cpp: Inherit from JSDestructibleObject.
2131         (JSC):
2132         * runtime/Arguments.h:
2133         (Arguments):
2134         (JSC::Arguments::Arguments):
2135         * runtime/ErrorPrototype.cpp: Added an assert to make sure we have a trivial destructor.
2136         (JSC):
2137         * runtime/Executable.h: Indicate that all of the Executable* classes have immortal Structures.
2138         (JSC):
2139         * runtime/InternalFunction.cpp: Inherit from JSDestructibleObject.
2140         (JSC):
2141         (JSC::InternalFunction::InternalFunction):
2142         * runtime/InternalFunction.h:
2143         (InternalFunction):
2144         * runtime/JSCell.h: Added the NEEDS_DESTRUCTOR  macro to make it easier for classes to indicate that instead of being 
2145         allocated in a destructor MarkedAllocator that they will handle their destruction themselves through the 
2146         use of a finalizer.
2147         (JSC):
2148         (HasImmortalStructure): New template to help us determine at compile-time if a particular class 
2149         should be allocated in the immortal structure MarkedAllocator. The default value is false. In order 
2150         to be allocated in the immortal structure allocator, classes must specialize this template. Also added 
2151         a macro to make it easier for classes to specialize the template.
2152         (JSC::allocateCell): Use the appropriate allocator depending on the destructor type.
2153         * runtime/JSDestructibleObject.h: Added. New class that stores the ClassInfo of any subclass so that it can be 
2154         accessed safely when the object is being destroyed.
2155         (JSC):
2156         (JSDestructibleObject):
2157         (JSC::JSDestructibleObject::classInfo):
2158         (JSC::JSDestructibleObject::JSDestructibleObject):
2159         (JSC::JSCell::classInfo): Checks the current MarkedBlock to see where it should get the ClassInfo from so that it's always safe.
2160         * runtime/JSGlobalObject.cpp: JSGlobalObject now uses a finalizer instead of a destructor so that it can avoid forcing all 
2161         of its relatives in the inheritance hierarchy (e.g. JSScope) to use destructors as well.
2162         (JSC::JSGlobalObject::reset):
2163         * runtime/JSGlobalObject.h:
2164         (JSGlobalObject):
2165         (JSC::JSGlobalObject::createRareDataIfNeeded): Since we always create a finalizer now, we don't have to worry about adding one 
2166         for the m_rareData field when it's created.
2167         (JSC::JSGlobalObject::create):
2168         (JSC):
2169         * runtime/JSGlobalThis.h: Inherit from JSDestructibleObject.
2170         (JSGlobalThis):
2171         (JSC::JSGlobalThis::JSGlobalThis):
2172         * runtime/JSPropertyNameIterator.h: Has an immortal Structure.
2173         (JSC):
2174         * runtime/JSScope.cpp:
2175         (JSC):
2176         * runtime/JSString.h: Has an immortal Structure.
2177         (JSC):
2178         * runtime/JSWrapperObject.h: Inherit from JSDestructibleObject.
2179         (JSWrapperObject):
2180         (JSC::JSWrapperObject::JSWrapperObject):
2181         * runtime/MathObject.cpp: Cleaning up some of the inheritance stuff.
2182         (JSC):
2183         * runtime/NameInstance.h: Inherit from JSDestructibleObject.
2184         (NameInstance):
2185         * runtime/RegExp.h: Has immortal Structure.
2186         (JSC):
2187         * runtime/RegExpObject.cpp: Inheritance cleanup.
2188         (JSC):
2189         * runtime/SparseArrayValueMap.h: Has immortal Structure.
2190         (JSC):
2191         * runtime/Structure.h: Has immortal Structure.
2192         (JSC):
2193         * runtime/StructureChain.h: Ditto.
2194         (JSC):
2195         * runtime/SymbolTable.h: Ditto.
2196         (SharedSymbolTable):
2197         (JSC):
2198
2199 2012-09-17  Filip Pizlo  <fpizlo@apple.com>
2200
2201         If a prototype has indexed setters and its instances have indexed storage, then all put_by_val's should have a bad time
2202         https://bugs.webkit.org/show_bug.cgi?id=96596
2203
2204         Reviewed by Gavin Barraclough.
2205
2206         Added comprehensive support for accessors and read-only indexed properties on the
2207         prototype chain. This is done without any performance regression on benchmarks that
2208         we're aware of, by having the entire VM's strategy with respect to arrays tilted
2209         heavily in favor of:
2210         
2211         - The prototype chain of JSArrays never having any accessors or read-only indexed
2212           properties. If that changes, you're going to have a bad time.
2213         
2214         - Prototypes of non-JSArray objects either having no indexed accessors or read-only
2215           indexed properties, or, having those indexed accessor thingies inserted before
2216           any instance object (i.e. object with that prototype as its prototype) is created.
2217           If you add indexed accessors or read-only indexed properties to an object that is
2218           already used as a prototype, you're going to have a bad time.
2219         
2220         See below for the exact definition of having a bad time.
2221         
2222         Put another way, "fair" uses of indexed accessors and read-only indexed properties
2223         are:
2224         
2225         - Put indexed accessors and read-only indexed properties on an object that is never
2226           used as a prototype. This will slow down accesses to that object, but will not
2227           have any effect on any other object.
2228         
2229         - Put those indexed accessor thingies on an object before it is used as a prototype
2230           and then start instantiating objects that claim that object as their prototype.
2231           This will slightly slow down indexed stores to the instance objects, and greatly
2232           slow down all indexed accesses to the prototype, but will have no other effect.
2233         
2234         In short, "fair" uses only affect the object itself and any instance objects. But
2235         if you start using indexed accessors in more eclectic ways, you're going to have
2236         a bad time.
2237         
2238         Specifically, if an object that may be used as a prototype has an indexed accessor
2239         added, the VM performs a whole-heap scan to find all objects that belong to the
2240         same global object as the prototype you modified. If any of those objects has
2241         indexed storage, their indexed storage is put into slow-put mode, just as if their
2242         prototype chain had indexed accessors. This will happen even for objects that do
2243         not currently have indexed accessors in their prototype chain. As well, all JSArray
2244         allocations are caused to create arrays with slow-put storage, and all future
2245         allocations of indexed storage for non-JSArray objects are also flipped to slow-put
2246         mode. Note there are two aspects to having a bad time: (i) the whole-heap scan and
2247         (ii) the poisoning of all indexed storage in the entire global object. (i) is
2248         necessary for correctness. If we detect that an object that may be used as a
2249         prototype has had an indexed accessor or indexed read-only property inserted into
2250         it, then we need to ensure that henceforth all instances of that object inspect
2251         the prototype chain whenever an indexed hole is stored to. But by default, indexed
2252         stores do no such checking because doing so would be unnecessarily slow. So, we must
2253         find all instances of the affected object and flip them into a different array
2254         storage mode that omits all hole optimizations. Since prototypes never keep a list
2255         of instance objects, the only way to find those objects is a whole-heap scan. But
2256         (i) alone would be a potential disaster, if a program frequently allocated an
2257         object without indexed accessors, then allocated a bunch of objects that used that
2258         one as their prototype, and then added indexed accessors to the prototype. So, to
2259         prevent massive heap scan storms in such awkward programs, having a bad time also
2260         implies (ii): henceforth *all* objects belonging to that global object will use
2261         slow put indexed storage, so that we don't ever have to scan the heap again. Note
2262         that here we are using the global object as just an approximation of a program
2263         module; it may be worth investigating in the future if other approximations can be
2264         used instead.
2265
2266         * bytecode/ArrayProfile.h:
2267         (JSC):
2268         (JSC::arrayModeFromStructure):
2269         * dfg/DFGAbstractState.cpp:
2270         (JSC::DFG::AbstractState::execute):
2271         * dfg/DFGArrayMode.cpp:
2272         (JSC::DFG::fromObserved):
2273         (JSC::DFG::modeAlreadyChecked):
2274         (JSC::DFG::modeToString):
2275         * dfg/DFGArrayMode.h:
2276         (DFG):
2277         (JSC::DFG::isSlowPutAccess):
2278         * dfg/DFGSpeculativeJIT.cpp:
2279         (JSC::DFG::SpeculativeJIT::checkArray):
2280         * dfg/DFGSpeculativeJIT32_64.cpp:
2281         (JSC::DFG::SpeculativeJIT::compile):
2282         * dfg/DFGSpeculativeJIT64.cpp:
2283         (JSC::DFG::SpeculativeJIT::compile):
2284         * jit/JIT.h:
2285         * jit/JITInlineMethods.h:
2286         (JSC::JIT::emitAllocateJSArray):
2287         * jit/JITOpcodes.cpp:
2288         (JSC::JIT::emit_op_new_array):
2289         * runtime/ArrayPrototype.cpp:
2290         (JSC::ArrayPrototype::finishCreation):
2291         (JSC::arrayProtoFuncSort):
2292         * runtime/IndexingType.h:
2293         (JSC):
2294         (JSC::hasIndexedProperties):
2295         (JSC::hasIndexingHeader):
2296         (JSC::hasArrayStorage):
2297         (JSC::shouldUseSlowPut):
2298         * runtime/JSArray.cpp:
2299         (JSC::JSArray::pop):
2300         (JSC::JSArray::push):
2301         (JSC::JSArray::fillArgList):
2302         (JSC::JSArray::copyToArguments):
2303         * runtime/JSArray.h:
2304         (JSC::JSArray::createStructure):
2305         * runtime/JSGlobalObject.cpp:
2306         (JSC::JSGlobalObject::JSGlobalObject):
2307         (JSC::JSGlobalObject::reset):
2308         (JSC):
2309         (JSC::JSGlobalObject::haveABadTime):
2310         * runtime/JSGlobalObject.h:
2311         (JSGlobalObject):
2312         (JSC::JSGlobalObject::addressOfArrayStructure):
2313         (JSC::JSGlobalObject::havingABadTimeWatchpoint):
2314         (JSC::JSGlobalObject::isHavingABadTime):
2315         * runtime/JSObject.cpp:
2316         (JSC::JSObject::visitButterfly):
2317         (JSC::JSObject::getOwnPropertySlotByIndex):
2318         (JSC::JSObject::put):
2319         (JSC::JSObject::putByIndex):
2320         (JSC::JSObject::enterDictionaryIndexingMode):
2321         (JSC::JSObject::notifyPresenceOfIndexedAccessors):
2322         (JSC):
2323         (JSC::JSObject::createArrayStorage):
2324         (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode):
2325         (JSC::JSObject::switchToSlowPutArrayStorage):
2326         (JSC::JSObject::setPrototype):
2327         (JSC::JSObject::resetInheritorID):
2328         (JSC::JSObject::inheritorID):
2329         (JSC::JSObject::allowsAccessFrom):
2330         (JSC::JSObject::deletePropertyByIndex):
2331         (JSC::JSObject::getOwnPropertyNames):
2332         (JSC::JSObject::unwrappedGlobalObject):
2333         (JSC::JSObject::notifyUsedAsPrototype):
2334         (JSC::JSObject::createInheritorID):
2335         (JSC::JSObject::defineOwnIndexedProperty):
2336         (JSC::JSObject::attemptToInterceptPutByIndexOnHoleForPrototype):
2337         (JSC::JSObject::attemptToInterceptPutByIndexOnHole):
2338         (JSC::JSObject::putByIndexBeyondVectorLength):
2339         (JSC::JSObject::putDirectIndexBeyondVectorLength):
2340         (JSC::JSObject::getNewVectorLength):
2341         (JSC::JSObject::getOwnPropertyDescriptor):
2342         * runtime/JSObject.h:
2343         (JSC::JSObject::mayBeUsedAsPrototype):
2344         (JSObject):
2345         (JSC::JSObject::mayInterceptIndexedAccesses):
2346         (JSC::JSObject::getArrayLength):
2347         (JSC::JSObject::getVectorLength):
2348         (JSC::JSObject::canGetIndexQuickly):
2349         (JSC::JSObject::getIndexQuickly):
2350         (JSC::JSObject::canSetIndexQuickly):
2351         (JSC::JSObject::setIndexQuickly):
2352         (JSC::JSObject::initializeIndex):
2353         (JSC::JSObject::completeInitialization):
2354         (JSC::JSObject::inSparseIndexingMode):
2355         (JSC::JSObject::arrayStorage):
2356         (JSC::JSObject::arrayStorageOrNull):
2357         (JSC::JSObject::ensureArrayStorage):
2358         (JSC):
2359         (JSC::JSValue::putByIndex):
2360         * runtime/JSValue.cpp:
2361         (JSC::JSValue::putToPrimitive):
2362         (JSC::JSValue::putToPrimitiveByIndex):
2363         (JSC):
2364         * runtime/JSValue.h:
2365         (JSValue):
2366         * runtime/ObjectPrototype.cpp:
2367         (JSC::ObjectPrototype::finishCreation):
2368         * runtime/SparseArrayValueMap.cpp:
2369         (JSC::SparseArrayValueMap::putEntry):
2370         (JSC::SparseArrayEntry::put):
2371         (JSC):
2372         * runtime/SparseArrayValueMap.h:
2373         (JSC):
2374         (SparseArrayEntry):
2375         * runtime/Structure.cpp:
2376         (JSC::Structure::anyObjectInChainMayInterceptIndexedAccesses):
2377         (JSC):
2378         (JSC::Structure::suggestedIndexingTransition):
2379         * runtime/Structure.h:
2380         (Structure):
2381         (JSC::Structure::mayInterceptIndexedAccesses):
2382         * runtime/StructureTransitionTable.h:
2383         (JSC::newIndexingType):
2384
2385 2012-09-17  Filip Pizlo  <fpizlo@apple.com>
2386
2387         Array profiling has convergence issues
2388         https://bugs.webkit.org/show_bug.cgi?id=96891
2389
2390         Reviewed by Gavin Barraclough.
2391
2392         Now each array profiling site merges in the indexing type it observed into
2393         the m_observedArrayModes bitset. The ArrayProfile also uses this to detect
2394         cases where the structure must have gone polymorphic (if the bitset is
2395         polymorphic then the structure must be). This achieves something like the
2396         best of both worlds: on the one hand, we get a probabilistic structure that
2397         we can use to optimize the monomorphic structure case, but on the other hand,
2398         we get an accurate view of the set of types that were encountered.
2399
2400         * assembler/MacroAssemblerARMv7.h:
2401         (JSC::MacroAssemblerARMv7::or32):
2402         (MacroAssemblerARMv7):
2403         * assembler/MacroAssemblerX86.h:
2404         (JSC::MacroAssemblerX86::or32):
2405         (MacroAssemblerX86):
2406         * assembler/MacroAssemblerX86_64.h:
2407         (JSC::MacroAssemblerX86_64::or32):
2408         (MacroAssemblerX86_64):
2409         * assembler/X86Assembler.h:
2410         (X86Assembler):
2411         (JSC::X86Assembler::orl_rm):
2412         * bytecode/ArrayProfile.cpp:
2413         (JSC::ArrayProfile::computeUpdatedPrediction):
2414         * bytecode/ArrayProfile.h:
2415         (JSC::ArrayProfile::addressOfArrayModes):
2416         (JSC::ArrayProfile::structureIsPolymorphic):
2417         * jit/JIT.h:
2418         (JIT):
2419         * jit/JITInlineMethods.h:
2420         (JSC):
2421         (JSC::JIT::emitArrayProfilingSite):
2422         * jit/JITPropertyAccess.cpp:
2423         (JSC::JIT::emit_op_get_by_val):
2424         (JSC::JIT::emit_op_put_by_val):
2425         (JSC::JIT::privateCompilePatchGetArrayLength):
2426         * jit/JITPropertyAccess32_64.cpp:
2427         (JSC::JIT::emit_op_get_by_val):
2428         (JSC::JIT::emit_op_put_by_val):
2429         (JSC::JIT::privateCompilePatchGetArrayLength):
2430         * llint/LowLevelInterpreter.asm:
2431         * llint/LowLevelInterpreter32_64.asm:
2432         * llint/LowLevelInterpreter64.asm:
2433
2434 2012-09-17  Mark Lam  <mark.lam@apple.com>
2435
2436         Not reviewed. Added svn:eol-style native to unbreak some build bots.
2437         https://bugs.webkit.org/show_bug.cgi?id=96175.
2438
2439         * JavaScriptCore.vcproj/LLIntAssembly/LLIntAssembly.vcproj: Added property svn:eol-style.
2440         * JavaScriptCore.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcproj: Added property svn:eol-style.
2441         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcproj: Added property svn:eol-style.
2442
2443 2012-09-16  Mark Lam  <mark.lam@apple.com>
2444
2445         Added MSVC project changes to enable building the llint.
2446         https://bugs.webkit.org/show_bug.cgi?id=96175.
2447
2448         Reviewed by Geoff Garen.
2449
2450         This only adds the ability to build the llint, but currently, only the
2451         C++ backend is supported. By default, the Windows port will remain
2452         running with the baseline JIT.  The llint will not be enabled.
2453
2454         * JavaScriptCore.vcproj/JavaScriptCore.sln:
2455         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2456         * JavaScriptCore.vcproj/LLIntAssembly: Added.
2457         * JavaScriptCore.vcproj/LLIntAssembly/LLIntAssembly.make: Added.
2458         * JavaScriptCore.vcproj/LLIntAssembly/LLIntAssembly.vcproj: Added.
2459         * JavaScriptCore.vcproj/LLIntAssembly/build-LLIntAssembly.sh: Added.
2460         * JavaScriptCore.vcproj/LLIntDesiredOffsets: Added.
2461         * JavaScriptCore.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.make: Added.
2462         * JavaScriptCore.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcproj: Added.
2463         * JavaScriptCore.vcproj/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh: Added.
2464         * JavaScriptCore.vcproj/LLIntOffsetsExtractor: Added.
2465         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcproj: Added.
2466         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.vsprops: Added.
2467         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.vsprops: Added.
2468         * JavaScriptCore.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.vsprops: Added.
2469
2470 2012-09-16  Filip Pizlo  <fpizlo@apple.com>
2471
2472         JSObject.cpp and JSArray.cpp have inconsistent tests for the invalid array index case
2473         https://bugs.webkit.org/show_bug.cgi?id=96878
2474
2475         Reviewed by Sam Weinig.
2476
2477         Removed the uses of UNLIKELY() because I don't believe they are buying us anything,
2478         since we're already on the slow path. Also found other places where we're testing for
2479         the invalid array index case using unusual predicates rather than just using
2480         MAX_ARRAY_INDEX. With this change, I believe that all of our tests for invalid
2481         array indices (i.e. indices that should be treated as non-indexed properties)
2482         uniformly use MAX_ARRAY_INDEX and PropertyName::NotAnIndex.
2483
2484         * runtime/JSArray.cpp:
2485         (JSC::JSArray::push):
2486         * runtime/JSObject.cpp:
2487         (JSC::JSObject::putByIndex):
2488         (JSC::JSObject::defineOwnIndexedProperty):
2489
2490 2012-09-15  Filip Pizlo  <fpizlo@apple.com>
2491
2492         Following the Butterfly refactoring, the comment for lastArraySize was not updated
2493         https://bugs.webkit.org/show_bug.cgi?id=96877
2494
2495         Reviewed by Sam Weinig.
2496
2497         * runtime/JSObject.cpp:
2498         (JSC):
2499
2500 2012-09-15  Mark Lam  <mark.lam@apple.com>
2501
2502         Fixed JSLock to use the platform abstraction for Mutex instead of
2503         depending on pthreads.
2504         https://bugs.webkit.org/show_bug.cgi?id=96858.
2505
2506         Reviewed by Filip Pizlo.
2507
2508         This fixes a synchronization problem on the Windows port and makes
2509         it more reliable when running the layout tests.
2510
2511         * runtime/InitializeThreading.cpp:
2512         (JSC::initializeThreadingOnce):
2513         * runtime/JSLock.cpp:
2514         (JSC):
2515         (JSC::GlobalJSLock::GlobalJSLock):
2516         (JSC::GlobalJSLock::~GlobalJSLock):
2517         (JSC::GlobalJSLock::initialize):
2518         * runtime/JSLock.h:
2519         (GlobalJSLock):
2520         (JSLock):
2521
2522 2012-09-15  Filip Pizlo  <fpizlo@apple.com>
2523
2524         Structure check hoisting fails to consider the possibility of conflicting checks on the source of the first assignment to the hoisted variable
2525         https://bugs.webkit.org/show_bug.cgi?id=96872
2526
2527         Reviewed by Oliver Hunt.
2528
2529         This does a few related things:
2530         
2531         - It turns off the use of ForceOSRExit for sure-to-fail CheckStructures, because
2532           I noticed that this would sometimes happen for a ForwardCheckStructure. The
2533           problem is that ForceOSRExit exits backwards, not forwards. Since the code that
2534           led to those ForceOSRExit's being inserted was written out of paranoia rather
2535           than need, I removed it. Specifically, I removed the m_isValid = false code
2536           for CheckStructure/StructureTransitionWatchpoint in AbstractState.
2537         
2538         - If a structure check causes a structure set to go empty, we don't want a
2539           PutStructure to revive the set. It should instead be smart enough to realize 
2540           that an empty set implies that the code can't execute. This was the only "bug"
2541           that the use of m_isValid = false was preventing.
2542         
2543         - Finally, the main change: structure check hoisting looks at the source of the
2544           SetLocals on structure-check-hoistable variables and ensures that the source
2545           is not checked with a conflicting structure. This is O(n^2) but it does not
2546           show up at all in performance tests.
2547         
2548         The first two parts of this change were auxiliary bugs that were revealed by
2549         the structure check hoister doing bad things.
2550
2551         * dfg/DFGAbstractState.cpp:
2552         (JSC::DFG::AbstractState::initialize):
2553         (JSC::DFG::AbstractState::execute):
2554         * dfg/DFGStructureCheckHoistingPhase.cpp:
2555         (JSC::DFG::StructureCheckHoistingPhase::run):
2556
2557 2012-09-14  Filip Pizlo  <fpizlo@apple.com>
2558
2559         All of the things in SparseArrayValueMap should be out-of-line
2560         https://bugs.webkit.org/show_bug.cgi?id=96854
2561
2562         Reviewed by Andy Estes.
2563
2564         Those inline methods were buying us nothing.
2565
2566         * GNUmakefile.list.am:
2567         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2568         * JavaScriptCore.xcodeproj/project.pbxproj:
2569         * runtime/JSArray.cpp:
2570         * runtime/JSGlobalData.cpp:
2571         * runtime/JSObject.cpp:
2572         * runtime/RegExpMatchesArray.cpp:
2573         * runtime/SparseArrayValueMap.cpp:
2574         (JSC::SparseArrayValueMap::SparseArrayValueMap):
2575         (JSC):
2576         (JSC::SparseArrayValueMap::~SparseArrayValueMap):
2577         (JSC::SparseArrayValueMap::finishCreation):
2578         (JSC::SparseArrayValueMap::create):
2579         (JSC::SparseArrayValueMap::destroy):
2580         (JSC::SparseArrayValueMap::createStructure):
2581         (JSC::SparseArrayValueMap::add):
2582         (JSC::SparseArrayValueMap::putEntry):
2583         (JSC::SparseArrayValueMap::putDirect):
2584         (JSC::SparseArrayEntry::get):
2585         (JSC::SparseArrayEntry::getNonSparseMode):
2586         (JSC::SparseArrayValueMap::visitChildren):
2587         * runtime/SparseArrayValueMapInlineMethods.h: Removed.
2588
2589 2012-09-14  Mike West  <mkwst@chromium.org>
2590
2591         JSC should throw a more descriptive exception when blocking 'eval' via CSP.
2592         https://bugs.webkit.org/show_bug.cgi?id=94331
2593
2594         Reviewed by Geoffrey Garen.
2595
2596         Unless explicitly whitelisted, the 'script-src' Content Security Policy
2597         directive blocks 'eval' and 'eval'-like constructs such as
2598         'new Function()'. When 'eval' is encountered in code, an 'EvalError' is
2599         thrown, but the associated message is poor: "Eval is disabled" doesn't
2600         give developers enough information about why their code isn't behaving
2601         as expected.
2602
2603         This patch adds an 'errorMessage' parameter to the JavaScriptCore method
2604         used to disable 'eval'; ContentSecurityPolicy has the opportunity to
2605         pass in a more detailed and descriptive error that contains more context
2606         for the developer.
2607
2608         * runtime/Executable.cpp:
2609         (JSC::EvalExecutable::compileInternal):
2610             Drop the hard-coded "Eval is disabled" error message in favor of
2611             reading the error message off the global object.
2612         * runtime/FunctionConstructor.cpp:
2613         (JSC::FunctionConstructor::getCallData):
2614             Drop the hard-coded "Function constructor is disabled" error message
2615             in favor of reading the error message off the global object.
2616         * runtime/JSGlobalObject.h:
2617         (JSGlobalObject):
2618         (JSC::JSGlobalObject::evalEnabled):
2619             Making this accessor method const.
2620         (JSC::JSGlobalObject::evalDisabledErrorMessage):
2621             Accessor for the error message set via 'setEvalDisabled'.
2622         (JSC::JSGlobalObject::setEvalEnabled):
2623             Adding an 'errorMessage' parameter which is stored on the global
2624             object, and used when exceptions are thrown.
2625
2626 2012-09-14  Filip Pizlo  <fpizlo@apple.com>
2627
2628         bbc homepage crashes immediately
2629         https://bugs.webkit.org/show_bug.cgi?id=96812
2630         <rdar://problem/12081386>
2631
2632         Reviewed by Oliver Hunt.
2633
2634         If you use the old storage pointer to write to space you thought was newly allocated,
2635         you're going to have a bad time.
2636
2637         * runtime/JSArray.cpp:
2638         (JSC::JSArray::unshiftCount):
2639
2640 2012-09-14  Adam Barth  <abarth@webkit.org>
2641
2642         Remove webkitPostMessage
2643         https://bugs.webkit.org/show_bug.cgi?id=96577
2644
2645         Reviewed by Ojan Vafai.
2646
2647         Add ENABLE_LEGACY_VENDOR_PREFIXES flag.
2648
2649         * Configurations/FeatureDefines.xcconfig:
2650
2651 2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
2652
2653         [Qt] Make force_static_libs_as_shared work on Mac OS
2654
2655         We had to move a few LIBS += around that were in the wrong place,
2656         and not caught when everything was just linked into the final
2657         QtWebKit library.
2658
2659         Reviewed by Simon Hausmann.
2660
2661         * jsc.pro: No need for AppKit, we get it from WTF.pri
2662
2663 2012-09-14  Kevin Funk  <kevin.funk@kdab.com>
2664
2665         Fix interpreter build
2666         https://bugs.webkit.org/show_bug.cgi?id=96617
2667
2668         Reviewed by Simon Hausmann.
2669
2670         Make compile.
2671
2672         * interpreter/Interpreter.cpp:
2673
2674 2012-09-14  Parth Patel  <parpatel@rim.com>
2675
2676         [BlackBerry] Switching from Slogger to Slogger2 requires changes in CMakeList of 
2677         webkit in order to include libraries of slog2
2678         https://bugs.webkit.org/show_bug.cgi?id=96391
2679
2680         Reviewed by Yong Li.
2681
2682         Changes in Cmake files of JavaScriptCore of webkit to include slog2 libs in build 
2683         files of webkit in response to switching from Slogger to Slogger2.
2684
2685         * shell/PlatformBlackBerry.cmake:
2686
2687 2012-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>
2688
2689         Remove the Zapped BlockState
2690         https://bugs.webkit.org/show_bug.cgi?id=96708
2691
2692         Reviewed by Geoffrey Garen.
2693
2694         The Zapped block state is rather confusing. It indicates that a block is in one of two different states that we 
2695         can't tell the difference between:
2696
2697         1) I have run all destructors of things that are zapped, and I have not allocated any more objects. This block 
2698            is ready for reclaiming if you so choose.
2699         2) I have run all the destructors of things that are zapped, but I have allocated more stuff since then, so it 
2700            is not safe to reclaim this block.
2701
2702         This state adds a lot of complexity to our state transition model for MarkedBlocks. We should get rid of it. 
2703         We can replace this state by making sure mark bits represent all of the liveness information we need when running 
2704         our conservative stack scan. Instead of zapping the free list when canonicalizing cell liveness data prior to 
2705         a conservative scan, we can instead mark all objects in the block except for those in the free list. This should 
2706         incur no performance penalty since we're doing it on a very small O(1) number of blocks at the beginning of the collection. 
2707
2708         For the time being we still need to use zapping to determine whether we have run an object's destructor or not.
2709
2710         * heap/MarkedAllocator.cpp:
2711         (JSC::MarkedAllocator::tryAllocateHelper): Renaming stuff.
2712         * heap/MarkedAllocator.h: Renamed zapFreeList to canonicalizeCellLivenessData to match.
2713         (MarkedAllocator):
2714         (JSC::MarkedAllocator::canonicalizeCellLivenessData): Same as old zapFreeList, but just call canonicalize instead.
2715         * heap/MarkedBlock.cpp:
2716         (JSC::MarkedBlock::specializedSweep): Remove the check for Zapped block stuff. Also change the block state to Marked 
2717         instead of Zapped if we're not producing a FreeList since that's the only other state that really makes any sense.
2718         (JSC::MarkedBlock::sweepHelper): Remove Zapped related code.
2719         (SetAllMarksFunctor): Functor to set all the mark bits in the block since there's not a simple function to call on 
2720         the Bitmap itself.
2721         (JSC::SetAllMarksFunctor::operator()):
2722         (JSC):
2723         (JSC::MarkedBlock::canonicalizeCellLivenessData): Remove all the stuff for Zapped. For FreeListed, set all the mark bits
2724         and then clear the ones for the objects in the FreeList. This ensures that only the things that were in the FreeList 
2725         are considered to be dead by the conservative scan, just like if we were to have zapped the FreeList like before. 
2726         * heap/MarkedBlock.h:
2727         (MarkedBlock):
2728         (JSC::MarkedBlock::clearMarked): Add function to clear individual mark bits, since we need that functionality now.
2729         (JSC):
2730         (JSC::MarkedBlock::isLive): Remove code for Zapped stuff. Marked handles all interesting cases now.
2731         (JSC::MarkedBlock::forEachCell): Add new iterator function that iterates over all cells in the block, regardless of 
2732         whether they're live or a dead.
2733         * heap/MarkedSpace.cpp:
2734         (JSC::MarkedSpace::canonicalizeCellLivenessData): Change to call the renamed canonicalize function. 
2735
2736 2012-09-13  Kevin Funk  <kevin.funk@kdab.com>
2737
2738         Make compile with both OS(WINCE) and PLATFORM(QT) support
2739         https://bugs.webkit.org/show_bug.cgi?id=95536
2740
2741         Reviewed by Simon Hausmann.
2742
2743         Do not link against advapi32 on wince
2744
2745         * jsc.pro:
2746
2747 2012-09-13  Geoffrey Garen  <ggaren@apple.com>
2748
2749         Refactored the DFG to make fewer assumptions about variable capture
2750         https://bugs.webkit.org/show_bug.cgi?id=96680
2751
2752         Reviewed by Gavin Barraclough.
2753
2754         A variable capture optimization patch I'm working on broke DFG
2755         correctness and the arguments simplification optimization phase, so I've
2756         refactored both to make fewer assumptions about variable capture.
2757
2758         * bytecode/CodeBlock.h:
2759         (JSC::CodeBlock::isCaptured): This is the new One True Way to find out
2760         if a variable was captured. This gives us a single point of maintenance
2761         as we chagne capture behavior.
2762
2763         * dfg/DFGAbstractState.cpp:
2764         (JSC::DFG::AbstractState::clobberCapturedVars): Don't assume that captured
2765         variables have any particular location. Instead, ask the One True Function.
2766
2767         * dfg/DFGArgumentsSimplificationPhase.cpp:
2768         (JSC::DFG::ArgumentsSimplificationPhase::run):
2769         (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
2770         (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize): Mechanical
2771         changes to separate being captured from being 'arguments'. What used
2772         to be
2773                 if (captured)
2774                         if (arguments)
2775                                 x
2776                         y
2777         is now
2778                 if (arguments)
2779                         x
2780                         y
2781                 else if (captured)
2782                         y
2783
2784         * dfg/DFGByteCodeParser.cpp:
2785         (JSC::DFG::ByteCodeParser::getLocal):
2786         (JSC::DFG::ByteCodeParser::setLocal):
2787         (JSC::DFG::ByteCodeParser::getArgument):
2788         (JSC::DFG::ByteCodeParser::setArgument):
2789         (JSC::DFG::ByteCodeParser::flushDirect):
2790         (JSC::DFG::ByteCodeParser::parseBlock):
2791         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
2792         * dfg/DFGSpeculativeJIT.cpp:
2793         (JSC::DFG::SpeculativeJIT::compile): Use the One True Function.
2794
2795 2012-09-13  Benjamin Poulain  <bpoulain@apple.com>
2796
2797         Improve the SourceProvider hierarchy
2798         https://bugs.webkit.org/show_bug.cgi?id=95635
2799
2800         Reviewed by Geoffrey Garen.
2801
2802         SourceProvider was designed to have subclasses magically handling the data without
2803         decoding all of it. The virtual methods length() and getRange() were based
2804         on these assumptions.
2805
2806         In practice, the magic was in our head, there is no implementation that takes
2807         advantage of that.
2808
2809         SourceProvider is modified to adopt WebCore's ScriptSourceProvider::source() and base
2810         everything on it.
2811         The code using SourceProvider is also simplified.
2812
2813         * interpreter/Interpreter.cpp:
2814         (JSC::appendSourceToError): Keep a reference to the string instead of querying it for
2815         each time it is used.
2816         * parser/Lexer.cpp:
2817         (JSC::::setCode):
2818         (JSC::::sourceCode):
2819         * parser/Parser.h:
2820         (JSC::parse):
2821         * parser/SourceCode.h:
2822         (JSC::SourceCode::SourceCode):
2823         (JSC::SourceCode::subExpression):
2824         * parser/SourceProvider.h:
2825         (SourceProvider):
2826         (JSC::SourceProvider::getRange):
2827
2828 2012-09-13  Filip Pizlo  <fpizlo@apple.com>
2829
2830         DFG: Dead GetButterfly's shouldn't be subject to CSE
2831         https://bugs.webkit.org/show_bug.cgi?id=96707
2832         <rdar://problem/12296311>
2833
2834         Reviewed by Oliver Hunt.
2835         
2836         There were a number of cases of this that creeped into the CSE: it would
2837         match something even though it was dead.
2838
2839         * dfg/DFGCSEPhase.cpp:
2840         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
2841         (JSC::DFG::CSEPhase::checkArrayElimination):
2842         (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
2843         (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
2844         (JSC::DFG::CSEPhase::getLocalLoadElimination):
2845
2846 2012-09-13  Oliver Hunt  <oliver@apple.com>
2847
2848         Make global const initialisation explicit in the bytecode
2849         https://bugs.webkit.org/show_bug.cgi?id=96711
2850
2851         Reviewed by Gavin Barraclough.
2852
2853         Added op_init_global_const to make initialisation of global const
2854         fields explicit.  This will help us keep correct semantics in the
2855         upcoming variable resolution refactoring.
2856
2857         * bytecode/CodeBlock.cpp:
2858         (JSC::CodeBlock::dump):
2859         * bytecode/Opcode.h:
2860         (JSC):
2861         (JSC::padOpcodeName):
2862         * bytecompiler/BytecodeGenerator.cpp:
2863         (JSC::BytecodeGenerator::emitInitGlobalConst):
2864         (JSC):
2865         * bytecompiler/BytecodeGenerator.h:
2866         (BytecodeGenerator):
2867         * bytecompiler/NodesCodegen.cpp:
2868         (JSC::ConstDeclNode::emitCodeSingle):
2869         * dfg/DFGByteCodeParser.cpp:
2870         (JSC::DFG::ByteCodeParser::parseBlock):
2871         * dfg/DFGCapabilities.h:
2872         (JSC::DFG::canCompileOpcode):
2873         * interpreter/Interpreter.cpp:
2874         (JSC::Interpreter::privateExecute):
2875         * jit/JIT.cpp:
2876         (JSC::JIT::privateCompileMainPass):
2877         (JSC::JIT::privateCompileSlowCases):
2878         * llint/LowLevelInterpreter32_64.asm:
2879         * llint/LowLevelInterpreter64.asm:
2880
2881 2012-09-13  Mark Hahnenberg  <mhahnenberg@apple.com>
2882
2883         Rename forEachCell to forEachLiveCell
2884         https://bugs.webkit.org/show_bug.cgi?id=96685
2885
2886         Reviewed by Oliver Hunt.
2887
2888         forEachCell actually only iterates over live cells. We should rename it to 
2889         reflect what it actually does. This is also helpful because we want to add a new 
2890         forEachCell that actually does iterate each and every cell in a MarkedBlock 
2891         regardless of whether or not it is live.
2892
2893         * debugger/Debugger.cpp:
2894         (JSC::Debugger::recompileAllJSFunctions):
2895         * heap/Heap.cpp:
2896         (JSC::Heap::globalObjectCount):
2897         (JSC::Heap::objectTypeCounts):
2898         * heap/MarkedBlock.h:
2899         (MarkedBlock):
2900         (JSC::MarkedBlock::forEachLiveCell):
2901         * heap/MarkedSpace.h:
2902         (MarkedSpace):
2903         (JSC::MarkedSpace::forEachLiveCell):
2904         * runtime/JSGlobalData.cpp:
2905         (JSC::JSGlobalData::releaseExecutableMemory):
2906
2907 2012-09-13  Filip Pizlo  <fpizlo@apple.com>
2908
2909         [Qt][Win] REGRESSION(r128400): It broke the build
2910         https://bugs.webkit.org/show_bug.cgi?id=96617
2911
2912         Reviewed by Simon Hausmann.
2913
2914         Changed "JSC::Array" to "JSC::ArrayClass" because it's not used often enough
2915         for the brevity to be beneficial, and because "Array" causes too much namespace
2916         pollution.
2917
2918         * runtime/IndexingType.h:
2919         (JSC):
2920         * runtime/JSArray.cpp:
2921         (JSC::JSArray::pop):
2922         (JSC::JSArray::push):
2923         (JSC::JSArray::sortNumeric):
2924         (JSC::JSArray::sort):
2925         (JSC::JSArray::fillArgList):
2926         (JSC::JSArray::copyToArguments):
2927         (JSC::JSArray::compactForSorting):
2928         * runtime/JSObject.cpp:
2929         (JSC::JSObject::getOwnPropertySlotByIndex):
2930         (JSC::JSObject::putByIndex):
2931         (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode):
2932         (JSC::JSObject::deletePropertyByIndex):
2933         (JSC::JSObject::getOwnPropertyNames):
2934         (JSC::JSObject::putByIndexBeyondVectorLength):
2935         (JSC::JSObject::putDirectIndexBeyondVectorLength):
2936         (JSC::JSObject::getNewVectorLength):
2937         (JSC::JSObject::getOwnPropertyDescriptor):
2938         * runtime/JSObject.h:
2939         (JSC::JSObject::getArrayLength):
2940         (JSC::JSObject::getVectorLength):
2941         (JSC::JSObject::canGetIndexQuickly):
2942         (JSC::JSObject::canSetIndexQuickly):
2943         (JSC::JSObject::inSparseIndexingMode):
2944         (JSC::JSObject::ensureArrayStorage):
2945
2946 2012-09-13  Filip Pizlo  <fpizlo@apple.com>
2947
2948         Testing whether indexing type is ArrayWithArrayStorage should not compare against ArrayWithArrayStorage
2949         https://bugs.webkit.org/show_bug.cgi?id=96611
2950
2951         Reviewed by Gavin Barraclough.
2952
2953         * dfg/DFGRepatch.cpp:
2954         (JSC::DFG::tryCacheGetByID):
2955         * dfg/DFGSpeculativeJIT.cpp:
2956         (JSC::DFG::SpeculativeJIT::checkArray):
2957         * jit/JITPropertyAccess.cpp:
2958         (JSC::JIT::privateCompilePatchGetArrayLength):
2959         * jit/JITPropertyAccess32_64.cpp:
2960         (JSC::JIT::privateCompilePatchGetArrayLength):
2961         * llint/LowLevelInterpreter32_64.asm:
2962         * llint/LowLevelInterpreter64.asm:
2963
2964 2012-09-09  Filip Pizlo  <fpizlo@apple.com>
2965
2966         JSC should have property butterflies
2967         https://bugs.webkit.org/show_bug.cgi?id=91933
2968
2969         Reviewed by Geoffrey Garen.
2970
2971         This changes the JSC object model. Previously, all objects had fast lookup for
2972         named properties. Integer indexed properties were only fast if you used a
2973         JSArray. With this change, all objects have fast indexed properties. This is
2974         accomplished without any space overhead by using a bidirectional object layout,
2975         aka butterflies. Each JSObject has a m_butterfly pointer where previously it
2976         had a m_outOfLineStorage pointer. To the left of the location pointed to by
2977         m_butterfly, we place all named out-of-line properties. To the right, we place
2978         all indexed properties along with indexing meta-data. Though, some indexing
2979         meta-data is placed in the 8-byte word immediately left of the pointed-to
2980         location; this is in anticipation of the indexing meta-data being small enough
2981         in the common case that m_butterfly always points to the first indexed
2982         property.
2983         
2984         This is performance neutral, except on tests that use indexed properties on
2985         plain objects, where the speed-up is in excess of an order of magnitude.
2986         
2987         One notable aspect of what this change brings is that it allows indexing
2988         storage to morph over time. Currently this is only used to allow all non-array
2989         objects to start out without any indexed storage. But it could be used for
2990         some kinds of array type inference in the future.
2991
2992         * API/JSCallbackObject.h:
2993         (JSCallbackObject):
2994         * API/JSCallbackObjectFunctions.h:
2995         (JSC::::getOwnPropertySlotByIndex):
2996         (JSC):
2997         (JSC::::getOwnNonIndexPropertyNames):
2998         * API/JSObjectRef.cpp:
2999         * CMakeLists.txt:
3000         * GNUmakefile.list.am:
3001         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3002         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3003         * JavaScriptCore.xcodeproj/project.pbxproj:
3004         * Target.pri:
3005         * bytecode/ArrayProfile.h:
3006         (JSC):
3007         (JSC::arrayModeFromStructure):
3008         * bytecompiler/BytecodeGenerator.cpp:
3009         (JSC::BytecodeGenerator::emitDirectPutById):
3010         * dfg/DFGAbstractState.cpp:
3011         (JSC::DFG::AbstractState::execute):
3012         * dfg/DFGAdjacencyList.h:
3013         (JSC::DFG::AdjacencyList::AdjacencyList):
3014         (AdjacencyList):
3015         * dfg/DFGArrayMode.cpp:
3016         (JSC::DFG::fromObserved):
3017         (JSC::DFG::modeAlreadyChecked):
3018         (JSC::DFG::modeToString):
3019         * dfg/DFGArrayMode.h:
3020         (DFG):
3021         (JSC::DFG::modeUsesButterfly):
3022         (JSC::DFG::modeIsJSArray):
3023         (JSC::DFG::isInBoundsAccess):
3024         (JSC::DFG::modeSupportsLength):
3025         * dfg/DFGByteCodeParser.cpp:
3026         (JSC::DFG::ByteCodeParser::handleGetByOffset):
3027         (JSC::DFG::ByteCodeParser::parseBlock):
3028         * dfg/DFGCSEPhase.cpp:
3029         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
3030         (JSC::DFG::CSEPhase::performNodeCSE):
3031         * dfg/DFGFixupPhase.cpp:
3032         (JSC::DFG::FixupPhase::fixupNode):
3033         (JSC::DFG::FixupPhase::addNode):
3034         (FixupPhase):
3035         (JSC::DFG::FixupPhase::checkArray):
3036         * dfg/DFGGraph.h:
3037         (JSC::DFG::Graph::byValIsPure):
3038         * dfg/DFGNode.h:
3039         (JSC::DFG::Node::Node):
3040         (Node):
3041         * dfg/DFGNodeType.h:
3042         (DFG):
3043         * dfg/DFGOperations.cpp:
3044         (JSC::DFG::putByVal):
3045         * dfg/DFGOperations.h:
3046         * dfg/DFGPredictionPropagationPhase.cpp:
3047         (JSC::DFG::PredictionPropagationPhase::propagate):
3048         * dfg/DFGRepatch.cpp:
3049         (JSC::DFG::generateProtoChainAccessStub):
3050         (JSC::DFG::tryCacheGetByID):
3051         (JSC::DFG::tryBuildGetByIDList):
3052         (JSC::DFG::emitPutReplaceStub):
3053         (JSC::DFG::emitPutTransitionStub):
3054         (JSC::DFG::tryBuildPutByIdList):
3055         * dfg/DFGSpeculativeJIT.cpp:
3056         (JSC::DFG::SpeculativeJIT::checkArray):
3057         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
3058         (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
3059         (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
3060         (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
3061         * dfg/DFGSpeculativeJIT.h:
3062         (JSC::DFG::SpeculativeJIT::callOperation):
3063         (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
3064         * dfg/DFGSpeculativeJIT32_64.cpp:
3065         (JSC::DFG::SpeculativeJIT::cachedGetById):
3066         (JSC::DFG::SpeculativeJIT::cachedPutById):
3067         (JSC::DFG::SpeculativeJIT::compile):
3068         * dfg/DFGSpeculativeJIT64.cpp:
3069         (JSC::DFG::SpeculativeJIT::cachedGetById):
3070         (JSC::DFG::SpeculativeJIT::cachedPutById):
3071         (JSC::DFG::SpeculativeJIT::compile):
3072         * dfg/DFGStructureCheckHoistingPhase.cpp:
3073         (JSC::DFG::StructureCheckHoistingPhase::run):
3074         * heap/CopiedSpace.h:
3075         (CopiedSpace):
3076         * jit/JIT.h:
3077         * jit/JITInlineMethods.h:
3078         (JSC::JIT::emitAllocateBasicJSObject):
3079         (JSC::JIT::emitAllocateBasicStorage):
3080         (JSC::JIT::emitAllocateJSArray):
3081         * jit/JITOpcodes.cpp:
3082         (JSC::JIT::emit_op_new_array):
3083         (JSC::JIT::emitSlow_op_new_array):
3084         * jit/JITPropertyAccess.cpp:
3085         (JSC::JIT::emit_op_get_by_val):
3086         (JSC::JIT::compileGetDirectOffset):
3087         (JSC::JIT::emit_op_put_by_val):
3088         (JSC::JIT::compileGetByIdHotPath):
3089         (JSC::JIT::emit_op_put_by_id):
3090         (JSC::JIT::compilePutDirectOffset):
3091         (JSC::JIT::privateCompilePatchGetArrayLength):
3092         * jit/JITPropertyAccess32_64.cpp:
3093         (JSC::JIT::emit_op_get_by_val):
3094         (JSC::JIT::emit_op_put_by_val):
3095         (JSC::JIT::compileGetByIdHotPath):
3096         (JSC::JIT::emit_op_put_by_id):
3097         (JSC::JIT::compilePutDirectOffset):
3098         (JSC::JIT::compileGetDirectOffset):
3099         (JSC::JIT::privateCompilePatchGetArrayLength):
3100         * jit/JITStubs.cpp:
3101         (JSC::DEFINE_STUB_FUNCTION):
3102         * jsc.cpp:
3103         * llint/LLIntSlowPaths.cpp:
3104         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3105         * llint/LowLevelInterpreter.asm:
3106         * llint/LowLevelInterpreter32_64.asm:
3107         * llint/LowLevelInterpreter64.asm:
3108         * runtime/Arguments.cpp:
3109         (JSC::Arguments::deletePropertyByIndex):
3110         (JSC::Arguments::defineOwnProperty):
3111         * runtime/ArrayConstructor.cpp:
3112         * runtime/ArrayConventions.h: Added.
3113         (JSC):
3114         (JSC::isDenseEnoughForVector):
3115         (JSC::indexingHeaderForArray):
3116         (JSC::baseIndexingHeaderForArray):
3117         * runtime/ArrayPrototype.cpp:
3118         (JSC::ArrayPrototype::create):
3119         (JSC):
3120         (JSC::ArrayPrototype::ArrayPrototype):
3121         (JSC::arrayProtoFuncToString):
3122         (JSC::arrayProtoFuncJoin):
3123         (JSC::arrayProtoFuncSort):
3124         (JSC::arrayProtoFuncFilter):
3125         (JSC::arrayProtoFuncMap):
3126         (JSC::arrayProtoFuncEvery):
3127         (JSC::arrayProtoFuncForEach):
3128         (JSC::arrayProtoFuncSome):
3129         (JSC::arrayProtoFuncReduce):
3130         (JSC::arrayProtoFuncReduceRight):
3131         * runtime/ArrayPrototype.h:
3132         (ArrayPrototype):
3133         (JSC::ArrayPrototype::createStructure):
3134         * runtime/ArrayStorage.h: Added.
3135         (JSC):
3136         (ArrayStorage):
3137         (JSC::ArrayStorage::ArrayStorage):
3138         (JSC::ArrayStorage::from):
3139         (JSC::ArrayStorage::butterfly):
3140         (JSC::ArrayStorage::indexingHeader):
3141         (JSC::ArrayStorage::length):
3142         (JSC::ArrayStorage::setLength):
3143         (JSC::ArrayStorage::vectorLength):
3144         (JSC::ArrayStorage::setVectorLength):
3145         (JSC::ArrayStorage::copyHeaderFromDuringGC):
3146         (JSC::ArrayStorage::inSparseMode):
3147         (JSC::ArrayStorage::lengthOffset):
3148         (JSC::ArrayStorage::vectorLengthOffset):
3149         (JSC::ArrayStorage::numValuesInVectorOffset):
3150         (JSC::ArrayStorage::vectorOffset):
3151         (JSC::ArrayStorage::indexBiasOffset):
3152         (JSC::ArrayStorage::sparseMapOffset):
3153         (JSC::ArrayStorage::sizeFor):
3154         * runtime/Butterfly.h: Added.
3155         (JSC):
3156         (Butterfly):
3157         (JSC::Butterfly::Butterfly):
3158         (JSC::Butterfly::totalSize):
3159         (JSC::Butterfly::fromBase):
3160         (JSC::Butterfly::offsetOfIndexingHeader):
3161         (JSC::Butterfly::offsetOfPublicLength):
3162         (JSC::Butterfly::offsetOfVectorLength):
3163         (JSC::Butterfly::indexingHeader):
3164         (JSC::Butterfly::propertyStorage):
3165         (JSC::Butterfly::indexingPayload):
3166         (JSC::Butterfly::arrayStorage):
3167         (JSC::Butterfly::offsetOfPropertyStorage):
3168         (JSC::Butterfly::indexOfPropertyStorage):
3169         (JSC::Butterfly::base):
3170         * runtime/ButterflyInlineMethods.h: Added.
3171         (JSC):
3172         (JSC::Butterfly::createUninitialized):
3173         (JSC::Butterfly::create):
3174         (JSC::Butterfly::createUninitializedDuringCollection):
3175         (JSC::Butterfly::base):
3176         (JSC::Butterfly::growPropertyStorage):
3177         (JSC::Butterfly::growArrayRight):
3178         (JSC::Butterfly::resizeArray):
3179         (JSC::Butterfly::unshift):
3180         (JSC::Butterfly::shift):
3181         * runtime/ClassInfo.h:
3182         (MethodTable):
3183         (JSC):
3184         * runtime/IndexingHeader.h: Added.
3185         (JSC):
3186         (IndexingHeader):
3187         (JSC::IndexingHeader::offsetOfIndexingHeader):
3188         (JSC::IndexingHeader::offsetOfPublicLength):
3189         (JSC::IndexingHeader::offsetOfVectorLength):
3190         (JSC::IndexingHeader::IndexingHeader):
3191         (JSC::IndexingHeader::vectorLength):
3192         (JSC::IndexingHeader::setVectorLength):
3193         (JSC::IndexingHeader::publicLength):
3194         (JSC::IndexingHeader::setPublicLength):
3195         (JSC::IndexingHeader::from):
3196         (JSC::IndexingHeader::fromEndOf):
3197         (JSC::IndexingHeader::propertyStorage):
3198         (JSC::IndexingHeader::arrayStorage):
3199         (JSC::IndexingHeader::butterfly):
3200         * runtime/IndexingHeaderInlineMethods.h: Added.
3201         (JSC):
3202         (JSC::IndexingHeader::preCapacity):
3203         (JSC::IndexingHeader::indexingPayloadSizeInBytes):
3204         * runtime/IndexingType.h: Added.
3205         (JSC):
3206         (JSC::hasIndexingHeader):
3207         * runtime/JSActivation.cpp:
3208         (JSC::JSActivation::JSActivation):
3209         (JSC::JSActivation::visitChildren):
3210         (JSC::JSActivation::getOwnNonIndexPropertyNames):
3211         * runtime/JSActivation.h:
3212         (JSActivation):
3213         (JSC::JSActivation::tearOff):
3214         * runtime/JSArray.cpp:
3215         (JSC):
3216         (JSC::createArrayButterflyInDictionaryIndexingMode):
3217         (JSC::JSArray::setLengthWritable):
3218         (JSC::JSArray::defineOwnProperty):
3219         (JSC::JSArray::getOwnPropertySlot):
3220         (JSC::JSArray::getOwnPropertyDescriptor):
3221         (JSC::JSArray::put):
3222         (JSC::JSArray::deleteProperty):
3223         (JSC::JSArray::getOwnNonIndexPropertyNames):
3224         (JSC::JSArray::unshiftCountSlowCase):
3225         (JSC::JSArray::setLength):
3226         (JSC::JSArray::pop):
3227         (JSC::JSArray::push):
3228         (JSC::JSArray::shiftCount):
3229         (JSC::JSArray::unshiftCount):
3230         (JSC::JSArray::sortNumeric):
3231         (JSC::JSArray::sort):
3232         (JSC::JSArray::fillArgList):
3233         (JSC::JSArray::copyToArguments):
3234         (JSC::JSArray::compactForSorting):
3235         * runtime/JSArray.h:
3236         (JSC):
3237         (JSArray):
3238         (JSC::JSArray::JSArray):
3239         (JSC::JSArray::length):
3240         (JSC::JSArray::createStructure):
3241         (JSC::JSArray::isLengthWritable):
3242         (JSC::createArrayButterfly):
3243         (JSC::JSArray::create):
3244         (JSC::JSArray::tryCreateUninitialized):
3245         * runtime/JSBoundFunction.cpp:
3246         (JSC::boundFunctionCall):
3247         (JSC::boundFunctionConstruct):
3248         (JSC::JSBoundFunction::finishCreation):
3249         * runtime/JSCell.cpp:
3250         (JSC::JSCell::getOwnNonIndexPropertyNames):
3251         (JSC):
3252         * runtime/JSCell.h:
3253         (JSCell):
3254         * runtime/JSFunction.cpp:
3255         (JSC::JSFunction::getOwnPropertySlot):
3256         (JSC::JSFunction::getOwnPropertyDescriptor):
3257         (JSC::JSFunction::getOwnNonIndexPropertyNames):
3258         (JSC::JSFunction::defineOwnProperty):
3259         * runtime/JSFunction.h:
3260         (JSFunction):
3261         * runtime/JSGlobalData.cpp:
3262         (JSC::JSGlobalData::JSGlobalData):
3263         * runtime/JSGlobalData.h:
3264         (JSGlobalData):
3265         * runtime/JSGlobalObject.cpp:
3266         (JSC::JSGlobalObject::reset):
3267         * runtime/JSONObject.cpp:
3268         (JSC::Stringifier::Holder::appendNextProperty):
3269         (JSC::Walker::walk):