2008-10-08 Maciej Stachowiak <mjs@apple.com>
[WebKit.git] / JavaScriptCore / ChangeLog
1 2008-10-08  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by Oliver Hunt.
4
5         Re-landing the following fix with the crashing bug in it fixed (r37405):
6         
7         - optimize away multiplication by constant 1.0
8         
9         2.3% speedup on v8 RayTrace benchmark
10
11         Apparently it's not uncommon for JavaScript code to multiply by
12         constant 1.0 in the mistaken belief that this converts integer to
13         floating point and that there is any operational difference.
14
15         * VM/CTI.cpp:
16         (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
17         case where parameter is already number.
18         (JSC::CTI::privateCompileSlowCases): ditto
19         * VM/Machine.cpp:
20         (JSC::Machine::privateExecute): ditto
21         * kjs/grammar.y:
22         (makeMultNode): Transform as follows:
23         +FOO * BAR ==> FOO * BAR
24         FOO * +BAR ==> FOO * BAR
25         FOO * 1 ==> +FOO
26         1 * FOO ==> +FOO
27         (makeDivNode): Transform as follows:
28         +FOO / BAR ==> FOO / BAR
29         FOO / +BAR ==> FOO / BAR
30         (makeSubNode): Transform as follows:
31         +FOO - BAR ==> FOO - BAR
32         FOO - +BAR ==> FOO - BAR
33         * kjs/nodes.h:
34         (JSC::ExpressionNode::stripUnaryPlus): Helper for above
35         grammar.y changes
36         (JSC::UnaryPlusNode::stripUnaryPlus): ditto
37
38 2008-10-08  Maciej Stachowiak  <mjs@apple.com>
39
40         Reviewed by Oliver Hunt.
41         
42         - correctly handle appending -0 to a string, it should stringify as just 0
43
44         * kjs/ustring.cpp:
45         (JSC::concatenate):
46
47 2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
48
49         Reviewed by Simon.
50
51         Fix WebKit compilation with VC2008SP1
52
53         Apply the TR1 workaround for JavaScriptCore, too.
54
55         * JavaScriptCore.pro:
56
57 2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
58
59         Reviewed by Simon.
60
61         Fix compilation errors on VS2008 64Bit
62
63         * kjs/collector.cpp:
64         (JSC::currentThreadStackBase):
65
66 2008-10-08  André Pönitz  <apoenitz@trolltech.com>
67
68         Reviewed by Simon.
69
70         Fix compilation with Qt namespaces.
71
72         * wtf/Threading.h:
73
74 2008-10-07  Sam Weinig  <sam@webkit.org>
75
76         Roll out r37405.
77
78 2008-10-07  Oliver Hunt  <oliver@apple.com>
79
80         Reviewed by Cameron Zwarich.
81
82         Switch CTI runtime calls to the fastcall calling convention
83
84         Basically this means that we get to store the argument for CTI
85         calls in the ECX register, which saves a register->memory write
86         and subsequent memory->register read.
87         
88         This is a 1.7% progression in SunSpider and 2.4% on commandline
89         v8 tests on Windows
90
91         * VM/CTI.cpp:
92         (JSC::):
93         (JSC::CTI::privateCompilePutByIdTransition):
94         (JSC::CTI::privateCompilePatchGetArrayLength):
95         * VM/CTI.h:
96         * VM/Machine.h:
97         * masm/X86Assembler.h:
98         (JSC::X86Assembler::emitRestoreArgumentReference):
99         (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
100           We need this to correctly reload ecx from inside certain property access
101           trampolines.
102         * wtf/Platform.h:
103
104 2008-10-07  Maciej Stachowiak  <mjs@apple.com>
105
106         Reviewed by Mark Rowe.
107         
108         - optimize away multiplication by constant 1.0
109         
110         2.3% speedup on v8 RayTrace benchmark
111
112         Apparently it's not uncommon for JavaScript code to multiply by
113         constant 1.0 in the mistaken belief that this converts integer to
114         floating point and that there is any operational difference.
115         
116         * VM/CTI.cpp:
117         (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
118         case where parameter is already number.
119         (JSC::CTI::privateCompileSlowCases): ditto
120         * VM/Machine.cpp:
121         (JSC::Machine::privateExecute): ditto
122         * kjs/grammar.y:
123         (makeMultNode): Transform as follows:
124         +FOO * BAR ==> FOO * BAR
125         FOO * +BAR ==> FOO * BAR
126         FOO * 1 ==> +FOO
127         1 * FOO ==> +FOO
128         (makeDivNode): Transform as follows:
129         +FOO / BAR ==> FOO / BAR
130         FOO / +BAR ==> FOO / BAR
131         (makeSubNode): Transform as follows:
132         +FOO - BAR ==> FOO - BAR
133         FOO - +BAR ==> FOO - BAR
134         * kjs/nodes.h:
135         (JSC::ExpressionNode::stripUnaryPlus): Helper for above
136         grammar.y changes
137         (JSC::UnaryPlusNode::stripUnaryPlus): ditto
138
139 2008-10-07  Maciej Stachowiak  <mjs@apple.com>
140
141         Reviewed by Oliver Hunt.
142         
143         - make constant folding code more consistent
144         
145         Added a makeSubNode to match add, mult and div; use the makeFooNode functions always,
146         instead of allocating nodes directly in other places in the grammar.
147
148         * kjs/grammar.y:
149
150 2008-10-07  Sam Weinig  <sam@webkit.org>
151
152         Reviewed by Cameron Zwarich.
153
154         Move hasGetterSetterProperties flag from PropertyMap to StructureID.
155
156         * kjs/JSObject.cpp:
157         (JSC::JSObject::put):
158         (JSC::JSObject::defineGetter):
159         (JSC::JSObject::defineSetter):
160         * kjs/JSObject.h:
161         (JSC::JSObject::hasGetterSetterProperties):
162         (JSC::JSObject::getOwnPropertySlotForWrite):
163         (JSC::JSObject::getOwnPropertySlot):
164         * kjs/PropertyMap.h:
165         * kjs/StructureID.cpp:
166         (JSC::StructureID::StructureID):
167         (JSC::StructureID::addPropertyTransition):
168         (JSC::StructureID::toDictionaryTransition):
169         (JSC::StructureID::changePrototypeTransition):
170         (JSC::StructureID::getterSetterTransition):
171         * kjs/StructureID.h:
172         (JSC::StructureID::hasGetterSetterProperties):
173         (JSC::StructureID::setHasGetterSetterProperties):
174
175 2008-10-07  Sam Weinig  <sam@webkit.org>
176
177         Reviewed by Cameron Zwarich.
178
179         Roll r37370 back in with bug fixes.
180
181         - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets
182           and has nothing to do with the internal deletedSentinel count anymore.
183
184 2008-10-07  Gavin Barraclough  <barraclough@apple.com>
185
186         Reviewed by Oliver Hunt.
187
188         Move callframe initialization into JIT code, again.
189         
190         As a part of the restructuring the second result from functions is now
191         returned in edx, allowing the new value of 'r' to be returned via a
192         register, and stored to the stack from JIT code, too.
193
194         4.5% progression on v8-tests. (3% in their harness)
195
196         * VM/CTI.cpp:
197         (JSC::):
198         (JSC::CTI::emitCall):
199         (JSC::CTI::compileOpCall):
200         (JSC::CTI::privateCompileMainPass):
201         (JSC::CTI::privateCompileSlowCases):
202         (JSC::CTI::privateCompile):
203         * VM/CTI.h:
204         (JSC::CallRecord::CallRecord):
205         * VM/Machine.cpp:
206         (JSC::Machine::cti_op_call_JSFunction):
207         (JSC::Machine::cti_op_construct_JSConstruct):
208         (JSC::Machine::cti_op_resolve_func):
209         (JSC::Machine::cti_op_post_inc):
210         (JSC::Machine::cti_op_resolve_with_base):
211         (JSC::Machine::cti_op_post_dec):
212         * VM/Machine.h:
213         * kjs/JSFunction.h:
214         * kjs/ScopeChain.h:
215
216 2008-10-07  Mark Rowe  <mrowe@apple.com>
217
218         Fix typo in method name.
219
220         * wrec/WREC.cpp:
221         * wrec/WREC.h:
222
223 2008-10-07  Cameron Zwarich  <zwarich@apple.com>
224
225         Rubber-stamped by Mark Rowe.
226
227         Roll out r37370.
228
229 2008-10-06  Sam Weinig  <sam@webkit.org>
230
231         Reviewed by Cameron Zwarich.
232
233         Fix for https://bugs.webkit.org/show_bug.cgi?id=21415
234         Improve the division between PropertyStorageArray and PropertyMap
235
236         - Rework ProperyMap to store offsets in the value so that they don't
237           change when rehashing.  This allows us not to have to keep the 
238           PropertyStorageArray in sync and thus not have to pass it in.
239         - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove
240           now also return offsets.
241         - A Vector of deleted offsets is now needed since the storage is out of
242           band.
243
244         1% win on SunSpider.  Wash on V8 suite.
245
246         * JavaScriptCore.exp:
247         * VM/CTI.cpp:
248         (JSC::transitionWillNeedStorageRealloc):
249         * VM/Machine.cpp:
250         (JSC::Machine::privateExecute):
251         Transition logic can be greatly simplified by the fact that
252         the storage capacity is always known, and is correct for the
253         inline case.
254         * kjs/JSObject.cpp:
255         (JSC::JSObject::put): Rename getOffset -> get.
256         (JSC::JSObject::deleteProperty): Ditto.
257         (JSC::JSObject::getPropertyAttributes): Ditto.
258         (JSC::JSObject::removeDirect): Use returned offset to
259         clear the value in the PropertyNameArray.
260         (JSC::JSObject::allocatePropertyStorage): Add assert.
261         * kjs/JSObject.h:
262         (JSC::JSObject::getDirect): Rename getOffset -> get
263         (JSC::JSObject::getDirectLocation): Rename getOffset -> get
264         (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether
265         or not to resize.  Also, since put now returns an offset (and thus 
266         addPropertyTransition does also) setting of the PropertyStorageArray is
267         now done here.
268         (JSC::JSObject::transitionTo):
269         * kjs/PropertyMap.cpp:
270         (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer 
271         passed in.
272         (JSC::PropertyMap::operator=): Copy the delete offsets vector.
273         (JSC::PropertyMap::put): Instead of setting the PropertyNameArray
274         explicitly, return the offset where the value should go.
275         (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray
276         explicitly, return the offset where the value should be removed.
277         (JSC::PropertyMap::get): Switch to using the stored offset, instead
278         of the implicit one.
279         (JSC::PropertyMap::insert):
280         (JSC::PropertyMap::expand): This is never called when m_table is null,
281         so remove that branch and add it as an assertion.
282         (JSC::PropertyMap::createTable): Consistency checks no longer take
283         a PropertyNameArray.
284         (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray
285         now that it is completely out of band.
286         * kjs/PropertyMap.h:
287         (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray.
288         (JSC::PropertyMap::get): Switch to using the stored offset, instead
289         of the implicit one.
290         * kjs/StructureID.cpp:
291         (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to 
292         JSObject::inlineStorageCapacity.
293         (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as
294         described below.
295         (JSC::StructureID::addPropertyTransition): Copy the storage capacity.
296         (JSC::StructureID::toDictionaryTransition): Ditto.
297         (JSC::StructureID::changePrototypeTransition): Ditto.
298         (JSC::StructureID::getterSetterTransition): Ditto.
299         * kjs/StructureID.h:
300         (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity
301         which is the current capacity for the JSObjects PropertyStorageArray.
302         It starts at the JSObject::inlineStorageCapacity (currently 2), then
303         when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity
304         (currently 16), and after that doubles each time.
305
306 2008-10-06  Cameron Zwarich  <zwarich@apple.com>
307
308         Reviewed by Oliver Hunt.
309
310         Bug 21396: Remove the OptionalCalleeActivation call frame slot
311         <https://bugs.webkit.org/show_bug.cgi?id=21396>
312
313         Remove the OptionalCalleeActivation call frame slot. We have to be
314         careful to store the activation object in a register, because objects
315         in the scope chain do not get marked.
316
317         This is a 0.3% speedup on both SunSpider and the V8 benchmark.
318
319         * VM/CTI.cpp:
320         (JSC::CTI::privateCompileMainPass):
321         * VM/CodeBlock.cpp:
322         (JSC::CodeBlock::dump):
323         * VM/CodeGenerator.cpp:
324         (JSC::CodeGenerator::CodeGenerator):
325         (JSC::CodeGenerator::emitReturn):
326         * VM/CodeGenerator.h:
327         * VM/Machine.cpp:
328         (JSC::Machine::dumpRegisters):
329         (JSC::Machine::unwindCallFrame):
330         (JSC::Machine::privateExecute):
331         (JSC::Machine::cti_op_call_JSFunction):
332         (JSC::Machine::cti_op_push_activation):
333         (JSC::Machine::cti_op_tear_off_activation):
334         (JSC::Machine::cti_op_construct_JSConstruct):
335         * VM/Machine.h:
336         (JSC::Machine::initializeCallFrame):
337         * VM/RegisterFile.h:
338         (JSC::RegisterFile::):
339
340 2008-10-06  Tony Chang  <tony@chromium.org>
341
342         Reviewed by Alexey Proskuryakov.
343
344         Chromium doesn't use pthreads on windows, so make its use conditional.
345         
346         Also convert a WORD to a DWORD to avoid a compiler warning.  This
347         matches the other methods around it.
348
349         * wtf/ThreadingWin.cpp:
350         (WTF::wtfThreadEntryPoint):
351         (WTF::ThreadCondition::broadcast):
352
353 2008-10-06  Mark Mentovai  <mark@moxienet.com>
354
355         Reviewed by Tim Hatcher.
356
357         Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be
358         disabled on the Mac.
359
360         https://bugs.webkit.org/show_bug.cgi?id=21333
361
362         * wtf/Platform.h:
363
364 2008-10-06  Steve Falkenburg  <sfalken@apple.com>
365
366         https://bugs.webkit.org/show_bug.cgi?id=21416
367         Pass 0 for size to VirtualAlloc, as documented by MSDN.
368         Identified by Application Verifier.
369         
370         Reviewed by Darin Adler.
371
372         * kjs/collector.cpp:
373         (KJS::freeBlock):
374
375 2008-10-06  Kevin McCullough  <kmccullough@apple.com>
376
377         Reviewed by Tim Hatcheri and Oliver Hunt.
378
379         https://bugs.webkit.org/show_bug.cgi?id=21412
380         Bug 21412: Refactor user initiated profile count to be more stable
381         - Export UString::from for use with creating the profile title.
382
383         * JavaScriptCore.exp:
384
385 2008-10-06  Maciej Stachowiak  <mjs@apple.com>
386
387         Not reviewed. Build fix.
388         
389         - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these
390
391         * API/JSValueRef.cpp:
392         (JSValueToBoolean):
393         * ChangeLog:
394         * JavaScriptCore.exp:
395         * VM/CodeBlock.cpp:
396         (JSC::CodeBlock::dump):
397         * VM/Machine.cpp:
398         (JSC::Machine::privateExecute):
399         (JSC::Machine::cti_op_loop_if_true):
400         (JSC::Machine::cti_op_not):
401         (JSC::Machine::cti_op_jtrue):
402         * kjs/ArrayPrototype.cpp:
403         (JSC::arrayProtoFuncFilter):
404         (JSC::arrayProtoFuncEvery):
405         (JSC::arrayProtoFuncSome):
406         * kjs/BooleanConstructor.cpp:
407         (JSC::constructBoolean):
408         (JSC::callBooleanConstructor):
409         * kjs/GetterSetter.h:
410         * kjs/JSCell.h:
411         (JSC::JSValue::toBoolean):
412         * kjs/JSNumberCell.cpp:
413         (JSC::JSNumberCell::toBoolean):
414         * kjs/JSNumberCell.h:
415         * kjs/JSObject.cpp:
416         (JSC::JSObject::toBoolean):
417         * kjs/JSObject.h:
418         * kjs/JSString.cpp:
419         (JSC::JSString::toBoolean):
420         * kjs/JSString.h:
421         * kjs/JSValue.h:
422         * kjs/RegExpConstructor.cpp:
423         (JSC::setRegExpConstructorMultiline):
424         * kjs/RegExpObject.cpp:
425         (JSC::RegExpObject::match):
426         * kjs/RegExpPrototype.cpp:
427         (JSC::regExpProtoFuncToString):
428
429 2008-10-06  Maciej Stachowiak  <mjs@apple.com>
430
431         Reviewed by Sam Weinig.
432         
433         - optimize op_jtrue, op_loop_if_true and op_not in various ways
434         https://bugs.webkit.org/show_bug.cgi?id=21404
435         
436         1) Make JSValue::toBoolean nonvirtual and completely inline by
437         making use of the StructureID type field.
438         
439         2) Make JSValue::toBoolean not take an ExecState; doesn't need it.
440         
441         3) Make op_not, op_loop_if_true and op_jtrue not read the
442         ExecState (toBoolean doesn't need it any more) and not check
443         exceptions (toBoolean can't throw).
444
445         * API/JSValueRef.cpp:
446         (JSValueToBoolean):
447         * JavaScriptCore.exp:
448         * VM/CodeBlock.cpp:
449         (JSC::CodeBlock::dump):
450         * VM/Machine.cpp:
451         (JSC::Machine::privateExecute):
452         (JSC::Machine::cti_op_loop_if_true):
453         (JSC::Machine::cti_op_not):
454         (JSC::Machine::cti_op_jtrue):
455         * kjs/ArrayPrototype.cpp:
456         (JSC::arrayProtoFuncFilter):
457         (JSC::arrayProtoFuncEvery):
458         (JSC::arrayProtoFuncSome):
459         * kjs/BooleanConstructor.cpp:
460         (JSC::constructBoolean):
461         (JSC::callBooleanConstructor):
462         * kjs/GetterSetter.h:
463         * kjs/JSCell.h:
464         (JSC::JSValue::toBoolean):
465         * kjs/JSNumberCell.cpp:
466         * kjs/JSNumberCell.h:
467         (JSC::JSNumberCell::toBoolean):
468         * kjs/JSObject.cpp:
469         * kjs/JSObject.h:
470         (JSC::JSObject::toBoolean):
471         (JSC::JSCell::toBoolean):
472         * kjs/JSString.cpp:
473         * kjs/JSString.h:
474         (JSC::JSString::toBoolean):
475         * kjs/JSValue.h:
476         * kjs/RegExpConstructor.cpp:
477         (JSC::setRegExpConstructorMultiline):
478         * kjs/RegExpObject.cpp:
479         (JSC::RegExpObject::match):
480         * kjs/RegExpPrototype.cpp:
481         (JSC::regExpProtoFuncToString):
482
483 2008-10-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
484
485         Reviewed by Simon.
486
487         Build fix for MinGW.
488
489         * JavaScriptCore.pri:
490         * kjs/DateMath.cpp:
491         (JSC::highResUpTime):
492
493 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
494
495         Reviewed by Oliver Hunt.
496
497         Remove ScopeNode::containsClosures() now that it is unused.
498
499         * kjs/nodes.h:
500         (JSC::ScopeNode::containsClosures):
501
502 2008-10-05  Maciej Stachowiak  <mjs@apple.com>
503
504         Reviewed by Cameron Zwarich.
505         
506         - fix releas-only test failures caused by the fix to bug 21375
507
508         * VM/Machine.cpp:
509         (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
510         it now matters more to have a still-valid ExecState, since dynamicGlobalObject
511         will make use of the ExecState's scope chain.
512         * VM/Machine.h:
513
514 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
515
516         Reviewed by Oliver Hunt.
517
518         Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
519         <https://bugs.webkit.org/show_bug.cgi?id=21364>
520
521         Use information from the parser to detect whether an activation is
522         needed or 'arguments' is used, and emit explicit instructions to tear
523         them off before op_ret. This allows a branch to be removed from op_ret
524         and simplifies some other code. This does cause a small change in the
525         behaviour of 'f.arguments'; it is no longer live when 'arguments' is not
526         mentioned in the lexical scope of the function.
527
528         It should now be easy to remove the OptionaCalleeActivation slot in the
529         call frame, but this will be done in a later patch.
530
531         * VM/CTI.cpp:
532         (JSC::CTI::privateCompileMainPass):
533         * VM/CodeBlock.cpp:
534         (JSC::CodeBlock::dump):
535         * VM/CodeGenerator.cpp:
536         (JSC::CodeGenerator::emitReturn):
537         * VM/CodeGenerator.h:
538         * VM/Machine.cpp:
539         (JSC::Machine::unwindCallFrame):
540         (JSC::Machine::privateExecute):
541         (JSC::Machine::retrieveArguments):
542         (JSC::Machine::cti_op_create_arguments):
543         (JSC::Machine::cti_op_tear_off_activation):
544         (JSC::Machine::cti_op_tear_off_arguments):
545         * VM/Machine.h:
546         * VM/Opcode.h:
547         * kjs/Arguments.cpp:
548         (JSC::Arguments::mark):
549         * kjs/Arguments.h:
550         (JSC::Arguments::isTornOff):
551         (JSC::Arguments::Arguments):
552         (JSC::Arguments::copyRegisters):
553         (JSC::JSActivation::copyRegisters):
554         * kjs/JSActivation.cpp:
555         (JSC::JSActivation::argumentsGetter):
556         * kjs/JSActivation.h:
557
558 2008-10-05  Maciej Stachowiak  <mjs@apple.com>
559
560         Reviewed by Oliver Hunt.
561         
562         - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out"
563         https://bugs.webkit.org/show_bug.cgi?id=21375
564         
565         The problem is that dynamicGlobalObject had become O(N) in number
566         of call frames, but unwinding the stack for an exception called it
567         for every call frame, resulting in O(N^2) behavior for an
568         exception thrown from inside deep recursion.
569
570         Instead of doing it that way, stash the dynamic global object in JSGlobalData.
571         
572         * JavaScriptCore.exp:
573         * VM/Machine.cpp:
574         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily
575         store and later restore a dynamicGlobalObject in JSGlobalData.
576         (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
577         (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope.
578         For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval,
579         only if none is currently set.
580         * VM/Machine.h:
581         * kjs/ExecState.h:
582         * kjs/JSGlobalData.cpp:
583         (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0.
584         * kjs/JSGlobalData.h:
585         * kjs/JSGlobalObject.h:
586         (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining.
587         Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData
588         for the one stashed there.
589
590 2008-10-05  Sam Weinig  <sam@webkit.org>
591
592         Reviewed by Maciej Stachowiak.
593
594         Avoid an extra lookup when transitioning to an existing StructureID
595         by caching the offset of property that caused the transition.
596
597         1% win on V8 suite.  Wash on SunSpider.
598
599         * kjs/PropertyMap.cpp:
600         (JSC::PropertyMap::put):
601         * kjs/PropertyMap.h:
602         * kjs/StructureID.cpp:
603         (JSC::StructureID::StructureID):
604         (JSC::StructureID::addPropertyTransition):
605         * kjs/StructureID.h:
606         (JSC::StructureID::setCachedTransistionOffset):
607         (JSC::StructureID::cachedTransistionOffset):
608
609 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
610
611         Reviewed by Maciej Stachowiak.
612
613         Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
614         <https://bugs.webkit.org/show_bug.cgi?id=21364>
615
616         This patch does not yet remove the branch, but it does a bit of refactoring
617         so that a CodeGenerator now knows whether the associated CodeBlock will need
618         a full scope before doing any code generation. This makes it possible to emit
619         explicit tear-off instructions before every op_ret.
620
621         * VM/CodeBlock.h:
622         (JSC::CodeBlock::CodeBlock):
623         * VM/CodeGenerator.cpp:
624         (JSC::CodeGenerator::generate):
625         (JSC::CodeGenerator::CodeGenerator):
626         (JSC::CodeGenerator::emitPushScope):
627         (JSC::CodeGenerator::emitPushNewScope):
628         * kjs/nodes.h:
629         (JSC::ScopeNode::needsActivation):
630
631 2008-10-05  Gavin Barraclough  <barraclough@apple.com>
632
633         Reviewed by Cameron Zwarich.
634
635         Fix for bug #21387 - using SamplingTool with CTI.
636
637         (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state.
638         (2) Fix an incusion order problem due to ExecState changes.
639         (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data.
640
641         * VM/CTI.h:
642         (JSC::CTI::execute):
643         * VM/SamplingTool.h:
644         (JSC::SamplingTool::privateExecuteReturned):
645         * kjs/Shell.cpp:
646
647 2008-10-04  Mark Rowe  <mrowe@apple.com>
648
649         Reviewed by Tim Hatcher.
650
651         Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible.
652
653         * JavaScriptCore.xcodeproj/project.pbxproj:
654
655 2008-10-04  Sam Weinig  <sam@webkit.org>
656
657         Reviewed by Oliver Hunt.
658
659         Fix https://bugs.webkit.org/show_bug.cgi?id=21320
660         leaks of PropertyNameArrayData seen on buildbot
661
662         - Fix RefPtr cycle by making PropertyNameArrayData's pointer back
663           to the StructureID a weak pointer.
664
665         * kjs/PropertyNameArray.h:
666         (JSC::PropertyNameArrayData::setCachedStructureID):
667         (JSC::PropertyNameArrayData::cachedStructureID):
668         * kjs/StructureID.cpp:
669         (JSC::StructureID::getEnumerablePropertyNames):
670         (JSC::StructureID::clearEnumerationCache):
671         (JSC::StructureID::~StructureID):
672
673 2008-10-04  Darin Adler  <darin@apple.com>
674
675         Reviewed by Cameron Zwarich.
676
677         - https://bugs.webkit.org/show_bug.cgi?id=21295
678           Bug 21295: Replace ExecState with a call frame Register pointer
679
680         10% faster on Richards; other v8 benchmarks faster too.
681         A wash on SunSpider.
682
683         This does the minimum necessary to get the speedup. Next step in
684         cleaning this up is to replace ExecState with a CallFrame class,
685         and be more judicious about when to pass a call frame and when
686         to pass a global data pointer, global object pointer, or perhaps
687         something else entirely.
688
689         * VM/CTI.cpp: Remove the debug-only check of the exception in
690         ctiVMThrowTrampoline -- already checked in the code the trampoline
691         jumps to, so not all that useful. Removed the exec argument from
692         ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed.
693         (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame.
694         (JSC::CTI::privateCompileMainPass): Removed code in catch to extract
695         the exception from ExecState::m_exception; instead, the code that
696         jumps into catch will make sure the exception is already in eax.
697         * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the
698         non-helpful "volatile". Temporarily left ARG_exec in as a synonym
699         for ARG_r; I'll change that on a future cleanup pass when introducing
700         more use of the CallFrame type.
701         (JSC::CTI::execute): Removed the ExecState* argument.
702
703         * VM/ExceptionHelpers.cpp:
704         (JSC::InterruptedExecutionError::InterruptedExecutionError): Take
705         JSGlobalData* instead of ExecState*.
706         (JSC::createInterruptedExecutionException): Ditto.
707         * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include.
708
709         * VM/Machine.cpp:
710         (JSC::slideRegisterWindowForCall): Removed the exec and
711         exceptionValue arguments. Changed to return 0 when there's a stack
712         overflow rather than using a separate exception argument to cut
713         down on memory accesses in the calling convention.
714         (JSC::Machine::unwindCallFrame): Removed the exec argument when
715         constructing a DebuggerCallFrame. Also removed code to set
716         ExecState::m_callFrame.
717         (JSC::Machine::throwException): Removed the exec argument when
718         construction a DebuggerCallFrame.
719         (JSC::Machine::execute): Updated to use the register instead of
720         ExecState and also removed various uses of ExecState.
721         (JSC::Machine::debug):
722         (JSC::Machine::privateExecute): Put globalData into a local
723         variable so it can be used throughout the interpreter. Changed
724         the VM_CHECK_EXCEPTION to get the exception in globalData instead
725         of through ExecState.
726         (JSC::Machine::retrieveLastCaller): Turn exec into a registers
727         pointer by calling registers() instead of by getting m_callFrame.
728         (JSC::Machine::callFrame): Ditto.
729         Tweaked exception macros. Made new versions for when you know
730         you have an exception. Get at global exception with ARG_globalData.
731         Got rid of the need to pass in the return value type.
732         (JSC::Machine::cti_op_add): Update to use new version of exception
733         macros.
734         (JSC::Machine::cti_op_pre_inc): Ditto.
735         (JSC::Machine::cti_timeout_check): Ditto.
736         (JSC::Machine::cti_op_instanceof): Ditto.
737         (JSC::Machine::cti_op_new_func): Ditto.
738         (JSC::Machine::cti_op_call_JSFunction): Optimized by using the
739         ARG values directly instead of through local variables -- this gets
740         rid of code that just shuffles things around in the stack frame.
741         Also get rid of ExecState and update for the new way exceptions are
742         handled in slideRegisterWindowForCall.
743         (JSC::Machine::cti_vm_compile): Update to make exec out of r since
744         they are both the same thing now.
745         (JSC::Machine::cti_op_call_NotJSFunction): Ditto.
746         (JSC::Machine::cti_op_init_arguments): Ditto.
747         (JSC::Machine::cti_op_resolve): Ditto.
748         (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
749         (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto.
750         (JSC::Machine::cti_op_resolve_func): Ditto.
751         (JSC::Machine::cti_op_put_by_val): Ditto.
752         (JSC::Machine::cti_op_put_by_val_array): Ditto.
753         (JSC::Machine::cti_op_resolve_skip): Ditto.
754         (JSC::Machine::cti_op_resolve_global): Ditto.
755         (JSC::Machine::cti_op_post_inc): Ditto.
756         (JSC::Machine::cti_op_resolve_with_base): Ditto.
757         (JSC::Machine::cti_op_post_dec): Ditto.
758         (JSC::Machine::cti_op_call_eval): Ditto.
759         (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return
760         the exception value as the return value so it can be used by
761         op_catch.
762         (JSC::Machine::cti_op_push_scope): Ditto.
763         (JSC::Machine::cti_op_in): Ditto.
764         (JSC::Machine::cti_op_del_by_val): Ditto.
765         (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return
766         the exception value as the return value so it can be used by
767         op_catch.
768
769         * kjs/DebuggerCallFrame.cpp:
770         (JSC::DebuggerCallFrame::functionName): Pass globalData.
771         (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a
772         new ExecState.
773         * kjs/DebuggerCallFrame.h: Removed ExecState argument from
774         constructor.
775
776         * kjs/ExecState.h: Eliminated all data members and made ExecState
777         inherit privately from Register instead. Also added a typedef to
778         the future name for this class, which is CallFrame. It's just a
779         Register* that knows it's a pointer at a call frame. The new class
780         can't be constructed or copied. Changed all functions to use
781         the this pointer instead of m_callFrame. Changed exception-related
782         functions to access an exception in JSGlobalData. Removed functions
783         used by CTI to pass the return address to the throw machinery --
784         this is now done directly with a global in the global data.
785
786         * kjs/FunctionPrototype.cpp:
787         (JSC::functionProtoFuncToString): Pass globalData instead of exec.
788
789         * kjs/InternalFunction.cpp:
790         (JSC::InternalFunction::name): Take globalData instead of exec.
791         * kjs/InternalFunction.h: Ditto.
792
793         * kjs/JSGlobalData.cpp: Initialize the new exception global to 0.
794         * kjs/JSGlobalData.h: Declare two new globals. One for the current
795         exception and another for the return address used by CTI to
796         implement the throw operation.
797
798         * kjs/JSGlobalObject.cpp:
799         (JSC::JSGlobalObject::init): Removed code to set up globalExec,
800         which is now the same thing as globalCallFrame.
801         (JSC::JSGlobalObject::reset): Get globalExec from our globalExec
802         function so we don't have to repeat the logic twice.
803         (JSC::JSGlobalObject::mark): Removed code to mark the exception;
804         the exception is now stored in JSGlobalData and marked there.
805         (JSC::JSGlobalObject::globalExec): Return a pointer to the end
806         of the global call frame.
807         * kjs/JSGlobalObject.h: Removed the globalExec data member.
808
809         * kjs/JSObject.cpp:
810         (JSC::JSObject::putDirectFunction): Pass globalData instead of exec.
811
812         * kjs/collector.cpp:
813         (JSC::Heap::collect): Mark the global exception.
814
815         * profiler/ProfileGenerator.cpp:
816         (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData
817         instead of exec to createCallIdentifier.
818
819         * profiler/Profiler.cpp:
820         (JSC::Profiler::willExecute): Pass globalData instead of exec to
821         createCallIdentifier.
822         (JSC::Profiler::didExecute): Ditto.
823         (JSC::Profiler::createCallIdentifier): Take globalData instead of
824         exec.
825         (JSC::createCallIdentifierFromFunctionImp): Ditto.
826         * profiler/Profiler.h: Change interface to take a JSGlobalData
827         instead of an ExecState.
828
829 2008-10-04  Cameron Zwarich  <zwarich@apple.com>
830
831         Reviewed by Darin Adler.
832
833         Bug 21369: Add opcode documentation for all undocumented opcodes
834         <https://bugs.webkit.org/show_bug.cgi?id=21369>
835
836         This patch adds opcode documentation for all undocumented opcodes, and
837         it also renames op_init_arguments to op_create_arguments.
838
839         * VM/CTI.cpp:
840         (JSC::CTI::privateCompileMainPass):
841         * VM/CodeBlock.cpp:
842         (JSC::CodeBlock::dump):
843         * VM/CodeGenerator.cpp:
844         (JSC::CodeGenerator::CodeGenerator):
845         * VM/Machine.cpp:
846         (JSC::Machine::privateExecute):
847         (JSC::Machine::cti_op_create_arguments):
848         * VM/Machine.h:
849         * VM/Opcode.h:
850
851 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
852
853         Reviewed by Cameron Zwarich.
854         
855         - "this" object in methods called on primitives should be wrapper object
856         https://bugs.webkit.org/show_bug.cgi?id=21362
857
858         I changed things so that functions which use "this" do a fast
859         version of toThisObject conversion if needed. Currently we miss
860         the conversion entirely, at least for primitive types. Using
861         TypeInfo and the primitive check, I made the fast case bail out
862         pretty fast.
863         
864         This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks).
865      
866         Also renamed some opcodes for clarity:
867         
868         init ==> enter
869         init_activation ==> enter_with_activation
870         
871         * VM/CTI.cpp:
872         (JSC::CTI::privateCompileMainPass):
873         (JSC::CTI::privateCompileSlowCases):
874         * VM/CodeBlock.cpp:
875         (JSC::CodeBlock::dump):
876         * VM/CodeGenerator.cpp:
877         (JSC::CodeGenerator::generate):
878         (JSC::CodeGenerator::CodeGenerator):
879         * VM/Machine.cpp:
880         (JSC::Machine::privateExecute):
881         (JSC::Machine::cti_op_convert_this):
882         * VM/Machine.h:
883         * VM/Opcode.h:
884         * kjs/JSActivation.cpp:
885         (JSC::JSActivation::JSActivation):
886         * kjs/JSActivation.h:
887         (JSC::JSActivation::createStructureID):
888         * kjs/JSCell.h:
889         (JSC::JSValue::needsThisConversion):
890         * kjs/JSGlobalData.cpp:
891         (JSC::JSGlobalData::JSGlobalData):
892         * kjs/JSGlobalData.h:
893         * kjs/JSNumberCell.h:
894         (JSC::JSNumberCell::createStructureID):
895         * kjs/JSStaticScopeObject.h:
896         (JSC::JSStaticScopeObject::JSStaticScopeObject):
897         (JSC::JSStaticScopeObject::createStructureID):
898         * kjs/JSString.h:
899         (JSC::JSString::createStructureID):
900         * kjs/JSValue.h:
901         * kjs/TypeInfo.h:
902         (JSC::TypeInfo::needsThisConversion):
903         * kjs/nodes.h:
904         (JSC::ScopeNode::usesThis):
905
906 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
907
908         Reviewed by Maciej Stachowiak.
909
910         Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release
911         <https://bugs.webkit.org/show_bug.cgi?id=21356>
912
913         The RegisterFile decreases in size (measured in terms of numbers of
914         Registers) as the size of a Register increases. This causes
915
916             js1_5/Regress/regress-159334.js
917
918         to fail in 64-bit debug builds. This fix makes the RegisterFile on all
919         platforms the same size that it is in 32-bit Release builds.
920
921         * VM/RegisterFile.h:
922         (JSC::RegisterFile::RegisterFile):
923
924 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
925
926         Reviewed by Cameron Zwarich.
927         
928         - Some code cleanup to how we handle code features.
929         
930         1) Rename FeatureInfo typedef to CodeFeatures.
931         2) Rename NodeFeatureInfo template to NodeInfo.
932         3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools.
933         4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning
934         of ClosureFeature.
935         5) Make setUsersArguments() not take an argument since it only goes one way.
936
937         * JavaScriptCore.exp:
938         * VM/CodeBlock.h:
939         (JSC::CodeBlock::CodeBlock):
940         * kjs/NodeInfo.h:
941         * kjs/Parser.cpp:
942         (JSC::Parser::didFinishParsing):
943         * kjs/Parser.h:
944         (JSC::Parser::parse):
945         * kjs/grammar.y:
946         * kjs/nodes.cpp:
947         (JSC::ScopeNode::ScopeNode):
948         (JSC::ProgramNode::ProgramNode):
949         (JSC::ProgramNode::create):
950         (JSC::EvalNode::EvalNode):
951         (JSC::EvalNode::create):
952         (JSC::FunctionBodyNode::FunctionBodyNode):
953         (JSC::FunctionBodyNode::create):
954         * kjs/nodes.h:
955         (JSC::ScopeNode::usesEval):
956         (JSC::ScopeNode::containsClosures):
957         (JSC::ScopeNode::usesArguments):
958         (JSC::ScopeNode::setUsesArguments):
959
960 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
961
962         Reviewed by Maciej Stachowiak.
963
964         Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
965         <https://bugs.webkit.org/show_bug.cgi?id=21343>
966
967         A fix was landed for this issue in r37253, and the ChangeLog assumes
968         that it is a compiler bug, but it turns out that it is a subtle issue
969         with mixing signed and unsigned 32-bit values in a 64-bit environment.
970         In order to properly fix this bug, we should convert our signed offsets
971         into the register file to use ptrdiff_t.
972
973         This may not be the only instance of this issue, but I will land this
974         fix first and look for more later.
975
976         * VM/Machine.cpp:
977         (JSC::Machine::getArgumentsData):
978         * VM/Machine.h:
979         * kjs/Arguments.cpp:
980         (JSC::Arguments::getOwnPropertySlot):
981         * kjs/Arguments.h:
982         (JSC::Arguments::init):
983
984 2008-10-03  Darin Adler  <darin@apple.com>
985
986         * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline.
987
988         * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added
989         declarations of JSGlobalData overloads of jsNumberCell.
990
991 2008-10-03  Darin Adler  <darin@apple.com>
992
993         - try to fix Windows build
994
995         * kjs/ScopeChain.h: Add forward declaration of JSGlobalData.
996
997 2008-10-03  Darin Adler  <darin@apple.com>
998
999         Reviewed by Geoff Garen.
1000
1001         - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
1002           Turn ExecState into a call frame pointer.
1003
1004         Remove m_globalObject and m_globalData from ExecState.
1005
1006         SunSpider says this is a wash (slightly faster but not statistically
1007         significant); which is good enough since it's a preparation step and
1008         not supposed to be a spedup.
1009
1010         * API/JSCallbackFunction.cpp:
1011         (JSC::JSCallbackFunction::JSCallbackFunction):
1012         * kjs/ArrayConstructor.cpp:
1013         (JSC::ArrayConstructor::ArrayConstructor):
1014         * kjs/BooleanConstructor.cpp:
1015         (JSC::BooleanConstructor::BooleanConstructor):
1016         * kjs/DateConstructor.cpp:
1017         (JSC::DateConstructor::DateConstructor):
1018         * kjs/ErrorConstructor.cpp:
1019         (JSC::ErrorConstructor::ErrorConstructor):
1020         * kjs/FunctionPrototype.cpp:
1021         (JSC::FunctionPrototype::FunctionPrototype):
1022         * kjs/JSFunction.cpp:
1023         (JSC::JSFunction::JSFunction):
1024         * kjs/NativeErrorConstructor.cpp:
1025         (JSC::NativeErrorConstructor::NativeErrorConstructor):
1026         * kjs/NumberConstructor.cpp:
1027         (JSC::NumberConstructor::NumberConstructor):
1028         * kjs/ObjectConstructor.cpp:
1029         (JSC::ObjectConstructor::ObjectConstructor):
1030         * kjs/PrototypeFunction.cpp:
1031         (JSC::PrototypeFunction::PrototypeFunction):
1032         * kjs/RegExpConstructor.cpp:
1033         (JSC::RegExpConstructor::RegExpConstructor):
1034         * kjs/StringConstructor.cpp:
1035         (JSC::StringConstructor::StringConstructor):
1036         Pass JSGlobalData* instead of ExecState* to the InternalFunction
1037         constructor.
1038
1039         * API/OpaqueJSString.cpp: Added now-needed include.
1040
1041         * JavaScriptCore.exp: Updated.
1042
1043         * VM/CTI.cpp:
1044         (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData
1045         instead of ARGS_exec.
1046
1047         * VM/CTI.h: Added a new argument to the CTI, the global data pointer.
1048         While it's possible to get to the global data pointer using the
1049         ExecState pointer, it's slow enough that it's better to just keep
1050         it around in the CTI arguments.
1051
1052         * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h.
1053
1054         * VM/Machine.cpp:
1055         (JSC::Machine::execute): Pass fewer arguments when constructing
1056         ExecState, and pass the global data pointer when invoking CTI.
1057         (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global
1058         object, which is in the scope chain of the first call frame.
1059         (JSC::Machine::cti_op_add): Use globalData instead of exec when
1060         possible, to keep fast cases fast, since it's now more expensive to
1061         get to it through the exec pointer.
1062         (JSC::Machine::cti_timeout_check): Ditto.
1063         (JSC::Machine::cti_op_put_by_id_second): Ditto.
1064         (JSC::Machine::cti_op_get_by_id_second): Ditto.
1065         (JSC::Machine::cti_op_mul): Ditto.
1066         (JSC::Machine::cti_vm_compile): Ditto.
1067         (JSC::Machine::cti_op_get_by_val): Ditto.
1068         (JSC::Machine::cti_op_sub): Ditto.
1069         (JSC::Machine::cti_op_put_by_val): Ditto.
1070         (JSC::Machine::cti_op_put_by_val_array): Ditto.
1071         (JSC::Machine::cti_op_negate): Ditto.
1072         (JSC::Machine::cti_op_div): Ditto.
1073         (JSC::Machine::cti_op_pre_dec): Ditto.
1074         (JSC::Machine::cti_op_post_inc): Ditto.
1075         (JSC::Machine::cti_op_lshift): Ditto.
1076         (JSC::Machine::cti_op_bitand): Ditto.
1077         (JSC::Machine::cti_op_rshift): Ditto.
1078         (JSC::Machine::cti_op_bitnot): Ditto.
1079         (JSC::Machine::cti_op_mod): Ditto.
1080         (JSC::Machine::cti_op_post_dec): Ditto.
1081         (JSC::Machine::cti_op_urshift): Ditto.
1082         (JSC::Machine::cti_op_bitxor): Ditto.
1083         (JSC::Machine::cti_op_bitor): Ditto.
1084         (JSC::Machine::cti_op_call_eval): Ditto.
1085         (JSC::Machine::cti_op_throw): Ditto.
1086         (JSC::Machine::cti_op_is_string): Ditto.
1087         (JSC::Machine::cti_op_debug): Ditto.
1088         (JSC::Machine::cti_vm_throw): Ditto.
1089
1090         * VM/Machine.h: Added firstCallFrame.
1091
1092         * kjs/DebuggerCallFrame.cpp:
1093         (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when
1094         constructing ExecState.
1095
1096         * kjs/ExecState.cpp: Deleted contents. Later we'll remove the
1097         file altogether.
1098
1099         * kjs/ExecState.h: Removed m_globalObject and m_globalData.
1100         Moved CodeType into another header.
1101         (JSC::ExecState::ExecState): Take only a single argument, a
1102         call frame pointer.
1103         (JSC::ExecState::dynamicGlobalObject): Get the object from
1104         the first call frame since it's no longer stored.
1105         (JSC::ExecState::globalData): Get the global data from the
1106         scope chain, since we no longer store a pointer to it here.
1107         (JSC::ExecState::identifierTable): Ditto.
1108         (JSC::ExecState::propertyNames): Ditto.
1109         (JSC::ExecState::emptyList): Ditto.
1110         (JSC::ExecState::lexer): Ditto.
1111         (JSC::ExecState::parser): Ditto.
1112         (JSC::ExecState::machine): Ditto.
1113         (JSC::ExecState::arrayTable): Ditto.
1114         (JSC::ExecState::dateTable): Ditto.
1115         (JSC::ExecState::mathTable): Ditto.
1116         (JSC::ExecState::numberTable): Ditto.
1117         (JSC::ExecState::regExpTable): Ditto.
1118         (JSC::ExecState::regExpConstructorTable): Ditto.
1119         (JSC::ExecState::stringTable): Ditto.
1120         (JSC::ExecState::heap): Ditto.
1121
1122         * kjs/FunctionConstructor.cpp:
1123         (JSC::FunctionConstructor::FunctionConstructor): Pass
1124         JSGlobalData* instead of ExecState* to the InternalFunction
1125         constructor.
1126         (JSC::constructFunction): Pass the global data pointer when
1127         constructing a new scope chain.
1128
1129         * kjs/InternalFunction.cpp:
1130         (JSC::InternalFunction::InternalFunction): Take a JSGlobalData*
1131         instead of an ExecState*. Later we can change more places to
1132         work this way -- it's more efficient to take the type you need
1133         since the caller might already have it.
1134         * kjs/InternalFunction.h: Ditto.
1135
1136         * kjs/JSCell.h:
1137         (JSC::JSCell::operator new): Added an overload that takes a
1138         JSGlobalData* so you can construct without an ExecState*.
1139
1140         * kjs/JSGlobalObject.cpp:
1141         (JSC::JSGlobalObject::init): Moved creation of the global scope
1142         chain in here, since it now requires a pointer to the global data.
1143         Moved the initialization of the call frame in here since it requires
1144         the global scope chain node. Removed the extra argument to ExecState
1145         when creating the global ExecState*.
1146         * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain
1147         and the call frame from the JSGlobalObjectData constructor. Added
1148         a thisValue argument to the init function.
1149
1150         * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take
1151         JSGlobalData* rather than ExecState*.
1152         * kjs/JSNumberCell.h:
1153         (JSC::JSNumberCell::operator new): Added a version that takes
1154         JSGlobalData*.
1155         (JSC::JSNumberCell::JSNumberCell): Ditto.
1156         (JSC::jsNumber): Ditto.
1157         * kjs/JSString.cpp:
1158         (JSC::jsString): Ditto.
1159         (JSC::jsSubstring): Ditto.
1160         (JSC::jsOwnedString): Ditto.
1161         * kjs/JSString.h:
1162         (JSC::JSString::JSString): Changed to take JSGlobalData*.
1163         (JSC::jsEmptyString): Added a version that takes JSGlobalData*.
1164         (JSC::jsSingleCharacterString): Ditto.
1165         (JSC::jsSingleCharacterSubstring): Ditto.
1166         (JSC::jsNontrivialString): Ditto.
1167         (JSC::JSString::getIndex): Ditto.
1168         (JSC::jsString): Ditto.
1169         (JSC::jsSubstring): Ditto.
1170         (JSC::jsOwnedString): Ditto.
1171
1172         * kjs/ScopeChain.h: Added a globalData pointer to each node.
1173         (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData
1174         pointer.
1175         (JSC::ScopeChainNode::push): Set the global data pointer in the
1176         new node.
1177         (JSC::ScopeChain::ScopeChain): Take a globalData argument.
1178
1179         * kjs/SmallStrings.cpp:
1180         (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of
1181         ExecState*.
1182         (JSC::SmallStrings::createSingleCharacterString): Ditto.
1183         * kjs/SmallStrings.h:
1184         (JSC::SmallStrings::emptyString): Ditto.
1185         (JSC::SmallStrings::singleCharacterString): Ditto.
1186
1187 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
1188
1189         Reviewed by Geoff Garen.
1190
1191         Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
1192         <https://bugs.webkit.org/show_bug.cgi?id=21343>
1193
1194         Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and
1195         llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression
1196         on SunSpider in 32-bit, although that might be entirely random.
1197
1198         * kjs/Arguments.cpp:
1199         (JSC::Arguments::getOwnPropertySlot):
1200
1201 2008-10-03  Darin Adler  <darin@apple.com>
1202
1203         Rubber stamped by Alexey Proskuryakov.
1204
1205         * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change
1206         this tool to use public JavaScriptCore API instead.
1207
1208 2008-10-03  Darin Adler  <darin@apple.com>
1209
1210         Suggested by Alexey Proskuryakov.
1211
1212         * kjs/JSGlobalData.cpp:
1213         (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because
1214         it's too late to ref the JSGlobalData object once it's already being
1215         destroyed. In practice this is not a problem because WebCore's JSGlobalData
1216         is never destroyed and JSGlobalContextRelease takes care of calling
1217         heap.destroy() in advance.
1218
1219 2008-10-02  Oliver Hunt  <oliver@apple.com>
1220
1221         Reviewed by Maciej Stachowiak.
1222
1223         Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows.
1224
1225         5.6% win on SunSpider on windows.
1226
1227         * VM/CTI.cpp:
1228         (JSC::isSSE2Present):
1229         (JSC::CTI::compileBinaryArithOp):
1230         (JSC::CTI::compileBinaryArithOpSlowCase):
1231
1232 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
1233
1234         Rubber stamped by Cameron Zwarich.
1235         
1236         - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer
1237
1238         * kjs/grammar.y:
1239
1240 2008-10-02  Darin Adler  <darin@apple.com>
1241
1242         Reviewed by Geoff Garen.
1243
1244         - https://bugs.webkit.org/show_bug.cgi?id=21321
1245           Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData
1246
1247         1.019x as fast on SunSpider.
1248
1249         * API/JSBase.cpp:
1250         (JSEvaluateScript): Use heap. instead of heap-> to work with the heap.
1251         (JSCheckScriptSyntax): Ditto.
1252         (JSGarbageCollect): Ditto.
1253         (JSReportExtraMemoryCost): Ditto.
1254         * API/JSContextRef.cpp:
1255         (JSGlobalContextRetain): Ditto.
1256         (JSGlobalContextRelease): Destroy the heap with the destroy function instead
1257         of the delete operator.
1258         (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap.
1259         * API/JSObjectRef.cpp:
1260         (JSObjectMake): Use heap. instead of heap-> to work with the heap.
1261         (JSObjectMakeFunctionWithCallback): Ditto.
1262         (JSObjectMakeConstructor): Ditto.
1263         (JSObjectMakeFunction): Ditto.
1264         (JSObjectMakeArray): Ditto.
1265         (JSObjectMakeDate): Ditto.
1266         (JSObjectMakeError): Ditto.
1267         (JSObjectMakeRegExp): Ditto.
1268         (JSObjectHasProperty): Ditto.
1269         (JSObjectGetProperty): Ditto.
1270         (JSObjectSetProperty): Ditto.
1271         (JSObjectGetPropertyAtIndex): Ditto.
1272         (JSObjectSetPropertyAtIndex): Ditto.
1273         (JSObjectDeleteProperty): Ditto.
1274         (JSObjectCallAsFunction): Ditto.
1275         (JSObjectCallAsConstructor): Ditto.
1276         (JSObjectCopyPropertyNames): Ditto.
1277         (JSPropertyNameAccumulatorAddName): Ditto.
1278         * API/JSValueRef.cpp:
1279         (JSValueIsEqual): Ditto.
1280         (JSValueIsInstanceOfConstructor): Ditto.
1281         (JSValueMakeNumber): Ditto.
1282         (JSValueMakeString): Ditto.
1283         (JSValueToNumber): Ditto.
1284         (JSValueToStringCopy): Ditto.
1285         (JSValueToObject): Ditto.
1286         (JSValueProtect): Ditto.
1287         (JSValueUnprotect): Ditto.
1288
1289         * kjs/ExecState.h:
1290         (JSC::ExecState::heap): Update to use the & operator.
1291
1292         * kjs/JSGlobalData.cpp:
1293         (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member
1294         instead of calling new to make a heap.
1295         (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy
1296         function instead of the delete operator.
1297         * kjs/JSGlobalData.h: Change from Heap* to a Heap.
1298         * kjs/JSGlobalObject.cpp:
1299         (JSC::JSGlobalObject::mark): Use the & operator here.
1300         (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work
1301         with the heap.
1302
1303 2008-10-02  Cameron Zwarich  <zwarich@apple.com>
1304
1305         Reviewed by Geoff Garen.
1306
1307         Bug 21317: Replace RegisterFile size and capacity information with Register pointers
1308         <https://bugs.webkit.org/show_bug.cgi?id=21317>
1309
1310         This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on
1311         the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider.
1312
1313         * VM/Machine.cpp:
1314         (JSC::slideRegisterWindowForCall):
1315         (JSC::Machine::callEval):
1316         (JSC::Machine::execute):
1317         (JSC::Machine::privateExecute):
1318         (JSC::Machine::cti_op_call_JSFunction):
1319         (JSC::Machine::cti_op_construct_JSConstruct):
1320         * VM/RegisterFile.cpp:
1321         (JSC::RegisterFile::~RegisterFile):
1322         * VM/RegisterFile.h:
1323         (JSC::RegisterFile::RegisterFile):
1324         (JSC::RegisterFile::start):
1325         (JSC::RegisterFile::end):
1326         (JSC::RegisterFile::size):
1327         (JSC::RegisterFile::shrink):
1328         (JSC::RegisterFile::grow):
1329         (JSC::RegisterFile::lastGlobal):
1330         (JSC::RegisterFile::markGlobals):
1331         (JSC::RegisterFile::markCallFrames):
1332         * kjs/JSGlobalObject.cpp:
1333         (JSC::JSGlobalObject::copyGlobalsTo):
1334
1335 2008-10-02  Cameron Zwarich  <zwarich@apple.com>
1336
1337         Rubber-stamped by Darin Adler.
1338
1339         Change bitwise operations introduced in r37166 to boolean operations. We
1340         only use bitwise operations over boolean operations for increasing
1341         performance in extremely hot code, but that does not apply to anything
1342         in the parser.
1343
1344         * kjs/grammar.y:
1345
1346 2008-10-02  Gavin Barraclough  <barraclough@apple.com>
1347
1348         Reviewed by Darin Adler.
1349
1350         Fix for bug #21232 - should reset m_isPendingDash on flush,
1351         and should allow '\-' as beginning or end of a range (though
1352         not to specifiy a range itself).
1353
1354         * ChangeLog:
1355         * wrec/CharacterClassConstructor.cpp:
1356         (JSC::CharacterClassConstructor::put):
1357         (JSC::CharacterClassConstructor::flush):
1358         * wrec/CharacterClassConstructor.h:
1359         (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen):
1360         * wrec/WREC.cpp:
1361         (JSC::WRECGenerator::generateDisjunction):
1362         (JSC::WRECParser::parseCharacterClass):
1363         (JSC::WRECParser::parseDisjunction):
1364         * wrec/WREC.h:
1365
1366 2008-10-02  Darin Adler  <darin@apple.com>
1367
1368         Reviewed by Sam Weinig.
1369
1370         - remove the "static" from declarations in a header file, since we
1371           don't want them to have internal linkage
1372
1373         * VM/Machine.h: Remove the static keyword from the constant and the
1374         three inline functions that Geoff just moved here.
1375
1376 2008-10-02  Geoffrey Garen  <ggaren@apple.com>
1377
1378         Reviewed by Sam Weinig.
1379         
1380         Fixed https://bugs.webkit.org/show_bug.cgi?id=21283.
1381         Profiler Crashes When Started
1382
1383         * VM/Machine.cpp:
1384         * VM/Machine.h:
1385         (JSC::makeHostCallFramePointer):
1386         (JSC::isHostCallFrame):
1387         (JSC::stripHostCallFrameBit): Moved some things to the header so
1388         JSGlobalObject could use them.
1389
1390         * kjs/JSGlobalObject.h:
1391         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the
1392         new makeHostCallFramePointer API, since 0 no longer indicates a host
1393         call frame.
1394
1395 2008-10-02  Alexey Proskuryakov  <ap@webkit.org>
1396
1397         Reviewed by Darin Adler.
1398
1399         https://bugs.webkit.org/show_bug.cgi?id=21304
1400         Stop using a static wrapper map for WebCore JS bindings
1401
1402         * kjs/JSGlobalData.cpp:
1403         (JSC::JSGlobalData::JSGlobalData):
1404         (JSC::JSGlobalData::~JSGlobalData):
1405         (JSC::JSGlobalData::ClientData::~ClientData):
1406         * kjs/JSGlobalData.h:
1407         Added a client data member to JSGlobalData. WebCore will use it to store bindings-related
1408         global data.
1409
1410         * JavaScriptCore.exp: Export virtual ClientData destructor.
1411
1412 2008-10-02  Geoffrey Garen  <ggaren@apple.com>
1413
1414         Not reviewed.
1415         
1416         Try to fix Qt build.
1417
1418         * kjs/Error.h:
1419
1420 2008-10-01  Geoffrey Garen  <ggaren@apple.com>
1421
1422         Reviewed by Darin Adler and Cameron Zwarich.
1423
1424         Preliminary step toward dynamic recompilation: Standardized and
1425         simplified the parsing interface.
1426         
1427         The main goal in this patch is to make it easy to ask for a duplicate
1428         compilation, and get back a duplicate result -- same source URL, same
1429         debugger / profiler ID, same toString behavior, etc.
1430         
1431         The basic unit of compilation and evaluation is now SourceCode, which
1432         encompasses a SourceProvider, a range in that provider, and a starting
1433         line number.
1434
1435         A SourceProvider now encompasses a source URL, and *is* a source ID,
1436         since a pointer is a unique identifier.
1437
1438         * API/JSBase.cpp:
1439         (JSEvaluateScript):
1440         (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since
1441         other APIs are no longer supported.
1442         
1443         * VM/CodeBlock.h:
1444         (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since
1445         other APIs are no longer supported.
1446         (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed
1447         by our caller -- this is a better bottleneck.
1448
1449         * VM/CodeGenerator.cpp:
1450         (JSC::CodeGenerator::CodeGenerator): Updated for the fact that
1451         FunctionBodyNode's parameters are no longer a WTF::Vector.
1452
1453         * kjs/Arguments.cpp:
1454         (JSC::Arguments::Arguments): ditto
1455
1456         * kjs/DebuggerCallFrame.cpp:
1457         (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser,
1458         since other APIs are no longer supported.
1459
1460         * kjs/FunctionConstructor.cpp:
1461         (JSC::constructFunction): Provide a SourceCode to the Parser, since
1462         other APIs are no longer supported. Adopt FunctionBodyNode's new
1463         "finishParsing" API.
1464
1465         * kjs/JSFunction.cpp:
1466         (JSC::JSFunction::lengthGetter):
1467         (JSC::JSFunction::getParameterName): Updated for the fact that
1468         FunctionBodyNode's parameters are no longer a wtf::Vector.
1469
1470         * kjs/JSFunction.h: Nixed some cruft.
1471
1472         * kjs/JSGlobalObjectFunctions.cpp:
1473         (JSC::globalFuncEval): Provide a SourceCode to the Parser, since
1474         other APIs are no longer supported. 
1475
1476         * kjs/Parser.cpp:
1477         (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch
1478         of broken out parameters. Stop tracking sourceId as an integer, since we
1479         use the SourceProvider pointer for this now. Don't clamp the
1480         startingLineNumber, since SourceCode does that now.
1481
1482         * kjs/Parser.h:
1483         (JSC::Parser::parse): Standardized the parsing interface to require a
1484         SourceCode.
1485
1486         * kjs/Shell.cpp:
1487         (functionRun):
1488         (functionLoad):
1489         (prettyPrintScript):
1490         (runWithScripts):
1491         (runInteractive): Provide a SourceCode to the Interpreter, since
1492         other APIs are no longer supported.
1493
1494         * kjs/SourceProvider.h:
1495         (JSC::SourceProvider::SourceProvider):
1496         (JSC::SourceProvider::url):
1497         (JSC::SourceProvider::asId):
1498         (JSC::UStringSourceProvider::create):
1499         (JSC::UStringSourceProvider::UStringSourceProvider): Added new
1500         responsibilities described above.
1501
1502         * kjs/SourceRange.h:
1503         (JSC::SourceCode::SourceCode):
1504         (JSC::SourceCode::toString):
1505         (JSC::SourceCode::provider):
1506         (JSC::SourceCode::firstLine):
1507         (JSC::SourceCode::data):
1508         (JSC::SourceCode::length): Added new responsibilities described above.
1509         Renamed SourceRange to SourceCode, based on review feedback. Added
1510         a makeSource function for convenience.
1511
1512         * kjs/debugger.h: Provide a SourceCode to the client, since other APIs
1513         are no longer supported.
1514
1515         * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode.
1516
1517         * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision
1518         on 64bit platforms.
1519
1520         * kjs/interpreter.cpp:
1521         (JSC::Interpreter::checkSyntax):
1522         (JSC::Interpreter::evaluate):
1523         * kjs/interpreter.h: Require a SourceCode instead of broken out arguments.
1524
1525         * kjs/lexer.cpp:
1526         (JSC::Lexer::setCode):
1527         * kjs/lexer.h:
1528         (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number
1529         into a SourceCode. Fixed a bug where the Lexer would accidentally keep
1530         alive the last SourceProvider forever.
1531
1532         * kjs/nodes.cpp:
1533         (JSC::ScopeNode::ScopeNode):
1534         (JSC::ProgramNode::ProgramNode):
1535         (JSC::ProgramNode::create):
1536         (JSC::EvalNode::EvalNode):
1537         (JSC::EvalNode::generateCode):
1538         (JSC::EvalNode::create):
1539         (JSC::FunctionBodyNode::FunctionBodyNode):
1540         (JSC::FunctionBodyNode::finishParsing):
1541         (JSC::FunctionBodyNode::create):
1542         (JSC::FunctionBodyNode::generateCode):
1543         (JSC::ProgramNode::generateCode):
1544         (JSC::FunctionBodyNode::paramString):
1545         * kjs/nodes.h:
1546         (JSC::ScopeNode::):
1547         (JSC::ScopeNode::sourceId):
1548         (JSC::FunctionBodyNode::):
1549         (JSC::FunctionBodyNode::parameterCount):
1550         (JSC::FuncExprNode::):
1551         (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since
1552         SourceCode is now responsible for tracking URL, ID, etc. Streamlined
1553         some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to
1554         help make clear what you need to do in order to finish parsing a
1555         FunctionBodyNode.
1556
1557         * wtf/Vector.h:
1558         (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called
1559         when buffer is not 0, since FunctionBodyNode is more than happy
1560         to get back a 0 buffer, and other functions like RefPtr::release() allow
1561         for 0, too.
1562
1563 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
1564
1565         Reviewed by Maciej Stachowiak.
1566
1567         Bug 21289: REGRESSION (r37160): Inspector crashes on load
1568         <https://bugs.webkit.org/show_bug.cgi?id=21289>
1569
1570         The code in Arguments::mark() in r37160 was wrong. It marks indices in
1571         d->registers, but that makes no sense (they are local variables, not
1572         arguments). It should mark those indices in d->registerArray instead.
1573
1574         This patch also changes Arguments::copyRegisters() to use d->numParameters
1575         instead of recomputing it.
1576
1577         * kjs/Arguments.cpp:
1578         (JSC::Arguments::mark):
1579         * kjs/Arguments.h:
1580         (JSC::Arguments::copyRegisters):
1581
1582 2008-09-30  Darin Adler  <darin@apple.com>
1583
1584         Reviewed by Eric Seidel.
1585
1586         - https://bugs.webkit.org/show_bug.cgi?id=21214
1587           work on getting rid of ExecState
1588
1589         Eliminate some unneeded uses of dynamicGlobalObject.
1590
1591         * API/JSClassRef.cpp:
1592         (OpaqueJSClass::contextData): Changed to use a map in the global data instead
1593         of on the global object. Also fixed to use only a single hash table lookup.
1594
1595         * API/JSObjectRef.cpp:
1596         (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject
1597         to get the object prototype.
1598
1599         * kjs/ArrayPrototype.cpp:
1600         (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather
1601         than in the global object.
1602         (JSC::arrayProtoFuncToLocaleString): Ditto.
1603         (JSC::arrayProtoFuncJoin): Ditto.
1604
1605         * kjs/JSGlobalData.cpp:
1606         (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since
1607         it's no longer a pointer.
1608         (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but
1609         we don't need to delete the map since it's no longer a pointer.
1610
1611         * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map.
1612         Also added arrayVisitedElements.
1613
1614         * kjs/JSGlobalObject.h: Removed arrayVisitedElements.
1615
1616         * kjs/Shell.cpp:
1617         (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject.
1618         (functionLoad): Ditto.
1619
1620 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
1621
1622         Not reviewed.
1623
1624         Speculative Windows build fix.
1625
1626         * kjs/grammar.y:
1627
1628 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
1629
1630         Reviewed by Darin Adler.
1631
1632         Bug 21123: using "arguments" in a function should not force creation of an activation object
1633         <https://bugs.webkit.org/show_bug.cgi?id=21123>
1634
1635         Make the 'arguments' object not require a JSActivation. We store the
1636         'arguments' object in the OptionalCalleeArguments call frame slot. We
1637         need to be able to get the original 'arguments' object to tear it off
1638         when returning from a function, but 'arguments' may be assigned to in a
1639         number of ways.
1640
1641         Therefore, we use the OptionalCalleeArguments slot when we want to get
1642         the original activation or we know that 'arguments' was not assigned a
1643         different value. When 'arguments' may have been assigned a new value,
1644         we use a new local variable that is initialized with 'arguments'. Since
1645         a function parameter named 'arguments' may overwrite the value of
1646         'arguments', we also need to be careful to look up 'arguments' in the
1647         symbol table, so we get the parameter named 'arguments' instead of the
1648         local variable that we have added for holding the 'arguments' object.
1649
1650         This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider
1651         harness, and a 20.7% win using the V8 harness. This amounts to a 6.5%
1652         total speedup on the V8 benchmark suite using the V8 harness.
1653
1654         * VM/CTI.cpp:
1655         (JSC::CTI::privateCompileMainPass):
1656         * VM/CodeBlock.h:
1657         * VM/CodeGenerator.cpp:
1658         (JSC::CodeGenerator::CodeGenerator):
1659         * VM/Machine.cpp:
1660         (JSC::Machine::unwindCallFrame):
1661         (JSC::Machine::privateExecute):
1662         (JSC::Machine::retrieveArguments):
1663         (JSC::Machine::cti_op_init_arguments):
1664         (JSC::Machine::cti_op_ret_activation_arguments):
1665         * VM/Machine.h:
1666         * VM/RegisterFile.h:
1667         (JSC::RegisterFile::):
1668         * kjs/Arguments.cpp:
1669         (JSC::Arguments::mark):
1670         (JSC::Arguments::fillArgList):
1671         (JSC::Arguments::getOwnPropertySlot):
1672         (JSC::Arguments::put):
1673         * kjs/Arguments.h:
1674         (JSC::Arguments::setRegisters):
1675         (JSC::Arguments::init):
1676         (JSC::Arguments::Arguments):
1677         (JSC::Arguments::copyRegisters):
1678         (JSC::JSActivation::copyRegisters):
1679         * kjs/JSActivation.cpp:
1680         (JSC::JSActivation::argumentsGetter):
1681         * kjs/JSActivation.h:
1682         (JSC::JSActivation::JSActivationData::JSActivationData):
1683         * kjs/grammar.y:
1684         * kjs/nodes.h:
1685         (JSC::ScopeNode::setUsesArguments):
1686         * masm/X86Assembler.h:
1687         (JSC::X86Assembler::):
1688         (JSC::X86Assembler::orl_mr):
1689
1690 2008-10-01  Kevin McCullough  <kmccullough@apple.com>
1691
1692         Rubberstamped by Geoff Garen.
1693
1694         Remove BreakpointCheckStatement because it's not used anymore.
1695         No effect on sunspider or the jsc tests.
1696
1697         * kjs/nodes.cpp:
1698         * kjs/nodes.h:
1699
1700 2008-09-30  Oliver Hunt  <oliver@apple.com>
1701
1702         Reviewed by Geoff Garen.
1703
1704         Improve performance of CTI on windows.
1705
1706         Currently on platforms where the compiler doesn't allow us to safely
1707         index relative to the address of a parameter we need to actually
1708         provide a pointer to CTI runtime call arguments.  This patch improves
1709         performance in this case by making the CTI logic for restoring this
1710         parameter much less conservative by only resetting it before we actually
1711         make a call, rather than between each and every SF bytecode we generate
1712         code for.
1713
1714         This results in a 3.6% progression on the v8 benchmark when compiled with MSVC.
1715
1716         * VM/CTI.cpp:
1717         (JSC::CTI::emitCall):
1718         (JSC::CTI::compileOpCall):
1719         (JSC::CTI::privateCompileMainPass):
1720         (JSC::CTI::privateCompileSlowCases):
1721         (JSC::CTI::privateCompilePutByIdTransition):
1722         * VM/CTI.h:
1723         * masm/X86Assembler.h:
1724         * wtf/Platform.h:
1725
1726 2008-09-30  Maciej Stachowiak  <mjs@apple.com>
1727
1728         Reviewed by Oliver Hunt.
1729
1730         - track uses of "this", "with" and "catch" in the parser
1731         
1732         Knowing this up front will be useful for future optimizations.
1733         
1734         Perf and correctness remain the same.
1735         
1736         * kjs/NodeInfo.h:
1737         * kjs/grammar.y:
1738
1739 2008-09-30  Sam Weinig  <sam@webkit.org>
1740
1741         Reviewed by Mark Rowe.
1742
1743         Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError,
1744         and JSObjectMakeRegExp
1745
1746         * API/JSObjectRef.h:
1747
1748 2008-09-30  Darin Adler  <darin@apple.com>
1749
1750         Reviewed by Geoff Garen.
1751
1752         - https://bugs.webkit.org/show_bug.cgi?id=21214
1753           work on getting rid of ExecState
1754
1755         Replaced the m_prev field of ExecState with a bit in the
1756         call frame pointer to indicate "host" call frames.
1757
1758         * VM/Machine.cpp:
1759         (JSC::makeHostCallFramePointer): Added. Sets low bit.
1760         (JSC::isHostCallFrame): Added. Checks low bit.
1761         (JSC::stripHostCallFrameBit): Added. Clears low bit.
1762         (JSC::Machine::unwindCallFrame): Replaced null check that was
1763         formerly used to detect host call frames with an isHostCallFrame check.
1764         (JSC::Machine::execute): Pass in a host call frame pointer rather than
1765         always passing 0 when starting execution from the host. This allows us
1766         to follow the entire call frame pointer chain when desired, or to stop
1767         at the host calls when that's desired.
1768         (JSC::Machine::privateExecute): Replaced null check that was
1769         formerly used to detect host call frames with an isHostCallFrame check.
1770         (JSC::Machine::retrieveCaller): Ditto.
1771         (JSC::Machine::retrieveLastCaller): Ditto.
1772         (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers
1773         and replaced it with code that uses the caller pointer and uses the
1774         stripHostCallFrameBit function.
1775
1776         * kjs/ExecState.cpp: Removed m_prev.
1777         * kjs/ExecState.h: Ditto.
1778
1779 2008-09-30  Cameron Zwarich  <zwarich@apple.com>
1780
1781         Reviewed by Geoff Garen.
1782
1783         Move all detection of 'arguments' in a lexical scope to the parser, in
1784         preparation for fixing
1785
1786         Bug 21123: using "arguments" in a function should not force creation of an activation object
1787         <https://bugs.webkit.org/show_bug.cgi?id=21123>
1788
1789         * VM/CodeGenerator.cpp:
1790         (JSC::CodeGenerator::CodeGenerator):
1791         * kjs/NodeInfo.h:
1792         * kjs/grammar.y:
1793
1794 2008-09-30  Geoffrey Garen  <ggaren@apple.com>
1795
1796         Not reviewed.
1797
1798         * kjs/Shell.cpp:
1799         (runWithScripts): Fixed indentation.
1800
1801 2008-09-30  Mark Rowe  <mrowe@apple.com>
1802
1803         Rubber-stamped by Sam Weinig.
1804
1805         Build fix.  Move InternalFunction::classInfo implementation into the .cpp
1806         file to prevent the vtable for InternalFunction being generated as a weak symbol.
1807         Has no effect on SunSpider.
1808
1809         * kjs/InternalFunction.cpp:
1810         (JSC::InternalFunction::classInfo):
1811         * kjs/InternalFunction.h:
1812
1813 2008-09-29  Maciej Stachowiak  <mjs@apple.com>
1814
1815         Reviewed by Darin Adler.
1816         
1817         - optimize appending a number to a string
1818         https://bugs.webkit.org/show_bug.cgi?id=21203
1819         
1820         It's pretty common in real-world code (and on some of the v8
1821         benchmarks) to append a number to a string, so I made this one of
1822         the fast cases, and also added support to UString to do it
1823         directly without allocating a temporary UString.
1824         
1825         ~1% speedup on v8 benchmark.
1826
1827         * VM/Machine.cpp:
1828         (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise
1829         the change is a regression.
1830         (JSC::jsAdd): Handle number + string special case.
1831         (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to
1832         avoid exception check in the str + str, num + num and str + num cases.
1833         * kjs/ustring.cpp:
1834         (JSC::expandedSize): Make this a non-member function, since it needs to be 
1835         called in non-member functions but not outside this file.
1836         (JSC::expandCapacity): Ditto.
1837         (JSC::UString::expandCapacity): Call the non-member version. 
1838         (JSC::createRep): Helper to make a rep from a char*.
1839         (JSC::UString::UString): Use above helper.
1840         (JSC::concatenate): Guts of concatenating constructor for cases where first
1841         item is a UString::Rep, and second is a UChar* and length, or a char*.
1842         (JSC::UString::append): Implement for cases where first item is a UString::Rep,
1843         and second is an int or double. Sadly duplicates logic of UString::from(int)
1844         and UString::from(double).
1845         * kjs/ustring.h:
1846
1847 2008-09-29  Darin Adler  <darin@apple.com>
1848
1849         Reviewed by Sam Weinig.
1850
1851         - https://bugs.webkit.org/show_bug.cgi?id=21214
1852           work on getting rid of ExecState
1853
1854         * JavaScriptCore.exp: Updated since JSGlobalObject::init
1855         no longer takes a parameter.
1856
1857         * VM/Machine.cpp:
1858         (JSC::Machine::execute): Removed m_registerFile argument
1859         for ExecState constructors.
1860
1861         * kjs/DebuggerCallFrame.cpp:
1862         (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue
1863         argument for ExecState constructor.
1864
1865         * kjs/ExecState.cpp:
1866         (JSC::ExecState::ExecState): Removed globalThisValue and
1867         registerFile arguments to constructors.
1868
1869         * kjs/ExecState.h: Removed m_globalThisValue and
1870         m_registerFile data members.
1871
1872         * kjs/JSGlobalObject.cpp:
1873         (JSC::JSGlobalObject::init): Removed globalThisValue
1874         argument for ExecState constructor.
1875
1876         * kjs/JSGlobalObject.h:
1877         (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter
1878         for the init function.
1879
1880 2008-09-29  Geoffrey Garen  <ggaren@apple.com>
1881
1882         Rubber-stamped by Cameron Zwarich.
1883         
1884         Fixed https://bugs.webkit.org/show_bug.cgi?id=21225
1885         Machine::retrieveLastCaller should check for a NULL codeBlock
1886         
1887         In order to crash, you would need to call retrieveCaller in a situation
1888         where you had two host call frames in a row in the register file. I
1889         don't know how to make that happen, or if it's even possible, so I don't
1890         have a test case -- but better safe than sorry!
1891
1892         * VM/Machine.cpp:
1893         (JSC::Machine::retrieveLastCaller):
1894
1895 2008-09-29  Geoffrey Garen  <ggaren@apple.com>
1896
1897         Reviewed by Cameron Zwarich.
1898         
1899         Store the callee ScopeChain, not the caller ScopeChain, in the call frame
1900         header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and
1901         access the callee ScopeChain through the call frame header instead.
1902
1903         Profit: call + return are simpler, because they don't have to update the
1904         "scopeChain" local variable, or ExecState::m_scopeChain.
1905         
1906         Because CTI keeps "r" in a register, reading the callee ScopeChain relative
1907         to "r" can be very fast, in any cases we care to optimize.
1908
1909         0% speedup on empty function call benchmark. (5.5% speedup in bytecode.)
1910         0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.)
1911         2% speedup on SunSpider --v8.
1912         2% speedup on v8 benchmark.
1913
1914         * VM/CTI.cpp: Changed scope chain access to read the scope chain from
1915         the call frame header. Sped up op_ret by changing it not to fuss with
1916         the "scopeChain" local variable or ExecState::m_scopeChain.
1917
1918         * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode*
1919         argument, since that's stored in the call frame header now.
1920
1921         * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper
1922         functions that read from the call frame header. Updated functions operating
1923         on ExecState::m_callFrame to account for / take advantage of the fact that
1924         Exec:m_callFrame is now never NULL.
1925         
1926         Fixed a bug in op_construct, where it would use the caller's default
1927         object prototype, rather than the callee's, when constructing a new object.
1928
1929         * VM/Machine.h: Made some helper functions available. Removed
1930         ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode*
1931         is now stored in the call frame header.
1932
1933         * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since
1934         that's what it is now.
1935
1936         * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature.
1937
1938         * kjs/ExecState.cpp:
1939         * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused
1940         isGlobalObject function.
1941
1942         * kjs/JSGlobalObject.cpp:
1943         * kjs/JSGlobalObject.h: Gave the global object a fake call frame in
1944         which to store the global scope chain, since our code now assumes that
1945         it can always read the scope chain out of the ExecState's call frame.
1946
1947 2008-09-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1948
1949         Reviewed by Sam Weinig.
1950
1951         Remove the isActivationObject() virtual method on JSObject and use
1952         StructureID information instead. This should be slightly faster, but
1953         isActivationObject() is only used in assertions and unwinding the stack
1954         for exceptions.
1955
1956         * VM/Machine.cpp:
1957         (JSC::depth):
1958         (JSC::Machine::unwindCallFrame):
1959         (JSC::Machine::privateExecute):
1960         (JSC::Machine::cti_op_ret_activation):
1961         * kjs/JSActivation.cpp:
1962         * kjs/JSActivation.h:
1963         * kjs/JSObject.h:
1964
1965 2008-09-29  Peter Gal  <galpeter@inf.u-szeged.hu>
1966
1967         Reviewed and tweaked by Darin Adler.
1968
1969         Fix build for non-all-in-one platforms.
1970
1971         * kjs/StringPrototype.cpp: Added missing ASCIICType.h include.
1972
1973 2008-09-29  Bradley T. Hughes  <bradley.hughes@nokia.com>
1974
1975         Reviewed by Simon Hausmann.
1976
1977         Fix compilation with icpc
1978
1979         * wtf/HashSet.h:
1980         (WTF::::find):
1981         (WTF::::contains):
1982
1983 2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>
1984
1985         Reviewed by Simon Hausmann.
1986
1987         Changed copyright from Trolltech ASA to Nokia.
1988         
1989         Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
1990         
1991
1992         * wtf/qt/MainThreadQt.cpp:
1993
1994 2008-09-29  Simon Hausmann  <hausmann@webkit.org>
1995
1996         Reviewed by Lars Knoll.
1997
1998         Don't accidentially install libJavaScriptCore.a for the build inside
1999         Qt.
2000
2001         * JavaScriptCore.pro:
2002
2003 2008-09-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2004
2005         Reviewed by Maciej Stachowiak.
2006
2007         Bug 21200: Allow direct access to 'arguments' without using op_resolve
2008         <https://bugs.webkit.org/show_bug.cgi?id=21200>
2009
2010         Allow fast access to the 'arguments' object by adding an extra slot to
2011         the callframe to store it.
2012
2013         This is a 3.0% speedup on the V8 Raytrace benchmark.
2014
2015         * JavaScriptCore.exp:
2016         * VM/CTI.cpp:
2017         (JSC::CTI::privateCompileMainPass):
2018         * VM/CodeBlock.cpp:
2019         (JSC::CodeBlock::dump):
2020         * VM/CodeGenerator.cpp:
2021         (JSC::CodeGenerator::CodeGenerator):
2022         (JSC::CodeGenerator::registerFor):
2023         * VM/CodeGenerator.h:
2024         (JSC::CodeGenerator::registerFor):
2025         * VM/Machine.cpp:
2026         (JSC::Machine::initializeCallFrame):
2027         (JSC::Machine::dumpRegisters):
2028         (JSC::Machine::privateExecute):
2029         (JSC::Machine::retrieveArguments):
2030         (JSC::Machine::cti_op_call_JSFunction):
2031         (JSC::Machine::cti_op_create_arguments):
2032         (JSC::Machine::cti_op_construct_JSConstruct):
2033         * VM/Machine.h:
2034         * VM/Opcode.h:
2035         * VM/RegisterFile.h:
2036         (JSC::RegisterFile::):
2037         * kjs/JSActivation.cpp:
2038         (JSC::JSActivation::mark):
2039         (JSC::JSActivation::argumentsGetter):
2040         * kjs/JSActivation.h:
2041         (JSC::JSActivation::JSActivationData::JSActivationData):
2042         * kjs/NodeInfo.h:
2043         * kjs/Parser.cpp:
2044         (JSC::Parser::didFinishParsing):
2045         * kjs/Parser.h:
2046         (JSC::Parser::parse):
2047         * kjs/grammar.y:
2048         * kjs/nodes.cpp:
2049         (JSC::ScopeNode::ScopeNode):
2050         (JSC::ProgramNode::ProgramNode):
2051         (JSC::ProgramNode::create):
2052         (JSC::EvalNode::EvalNode):
2053         (JSC::EvalNode::create):
2054         (JSC::FunctionBodyNode::FunctionBodyNode):
2055         (JSC::FunctionBodyNode::create):
2056         * kjs/nodes.h:
2057         (JSC::ScopeNode::usesArguments):
2058
2059 2008-09-28  Mark Rowe  <mrowe@apple.com>
2060
2061         Reviewed by Sam Weinig.
2062
2063         Add an ASCII fast-path to toLowerCase and toUpperCase.
2064
2065         The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty
2066         to the less common non-ASCII case.
2067
2068         This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical
2069         to the non-locale variants of the functions.  toLocaleLowerCase and toLocaleUpperCase now use the non-locale
2070         variants of the functions directly.
2071
2072         * kjs/StringPrototype.cpp:
2073         (JSC::stringProtoFuncToLowerCase):
2074         (JSC::stringProtoFuncToUpperCase):
2075
2076 2008-09-28  Mark Rowe  <mrowe@apple.com>
2077
2078         Reviewed by Cameron Zwarich.
2079
2080         Speed up parseInt and parseFloat.
2081
2082         Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front
2083         and use that instead.  This is a 7% win on a parseInt/parseFloat micro-benchmark.
2084
2085         * kjs/JSGlobalObjectFunctions.cpp:
2086         (JSC::parseInt):
2087         (JSC::parseFloat):
2088
2089 2008-09-28  Simon Hausmann  <hausmann@webkit.org>
2090
2091         Reviewed by David Hyatt.
2092
2093         In Qt's initializeThreading re-use an existing thread identifier for the main
2094         thread if it exists.
2095
2096         currentThread() implicitly creates new identifiers and it could be that
2097         it is called before initializeThreading().
2098
2099         * wtf/ThreadingQt.cpp:
2100         (WTF::initializeThreading):
2101
2102 2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>
2103
2104         Added Machine::retrieveCaller to the export list.
2105
2106         Reviewed by Kevin McCullough and Tim Hatcher.
2107
2108         * JavaScriptCore.exp: Added Machine::retrieveCaller.
2109
2110 2008-09-27  Anders Carlsson  <andersca@apple.com>
2111
2112         Fix build.
2113
2114         * VM/CTI.cpp:
2115         (JSC::):
2116
2117 2008-09-27  Geoffrey Garen  <ggaren@apple.com>
2118
2119         Reviewed by Cameron Zwarich.
2120         
2121         https://bugs.webkit.org/show_bug.cgi?id=21175
2122
2123         Store the callee CodeBlock, not the caller CodeBlock, in the call frame
2124         header. Nix the "codeBlock" local variable, and access the callee
2125         CodeBlock through the call frame header instead.
2126         
2127         Profit: call + return are simpler, because they don't have to update the
2128         "codeBlock" local variable.
2129         
2130         Because CTI keeps "r" in a register, reading the callee CodeBlock relative
2131         to "r" can be very fast, in any cases we care to optimize. Presently,
2132         no such cases seem important.
2133         
2134         Also, stop writing "dst" to the call frame header. CTI doesn't use it.
2135         
2136         21.6% speedup on empty function call benchmark.
2137         3.8% speedup on SunSpider --v8.
2138         2.1% speedup on v8 benchmark.
2139         0.7% speedup on SunSpider (6% speedup on controlflow-recursive).
2140         
2141         Small regression in bytecode, because currently every op_ret reads the
2142         callee CodeBlock to check needsFullScopeChain, and bytecode does not
2143         keep "r" in a register. On-balance, this is probably OK, since CTI is
2144         our high-performance execution model. Also, this should go away once
2145         we make needsFullScopeChain statically determinable at parse time.
2146
2147         * VM/CTI.cpp:
2148         (JSC::CTI::compileOpCall): The speedup!
2149         (JSC::CTI::privateCompileSlowCases): ditto
2150
2151         * VM/CTI.h:
2152         (JSC::): Fixed up magic trampoline constants to account for the nixed
2153         "codeBlock" argument.
2154         (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock"
2155         argument, since codeBlock is now stored in the call frame header.
2156         
2157         * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use
2158         a NULL CallerRegisters in the call frame header to signal a built-in
2159         caller, since CodeBlock is now never NULL.
2160
2161         * VM/Machine.h: Made some stand-alone functions Machine member functions
2162         so they could call the private codeBlock() accessor in the Register
2163         class, of which Machine is a friend. Renamed "CallerCodeBlock" to
2164         "CodeBlock", since it's no longer the caller's CodeBlock.
2165
2166         * VM/RegisterFile.h: Marked some methods const to accommodate a 
2167         const RegisterFile* being passed around in Machine.cpp.
2168
2169 2008-09-26  Jan Michael Alonzo  <jmalonzo@webkit.org>
2170
2171         Gtk build fix. Not reviewed.
2172
2173         Narrow-down the target of the JavaScriptCore .lut.h generator so
2174         it won't try to create the WebCore .lut.hs.
2175
2176         * GNUmakefile.am:
2177
2178 2008-09-26  Matt Lilek  <webkit@mattlilek.com>
2179
2180         Reviewed by Tim Hatcher.
2181
2182         Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.
2183
2184         * Configurations/JavaScriptCore.xcconfig:
2185
2186 2008-09-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2187
2188         Rubber-stamped by Anders Carlson.
2189
2190         Change the name 'sc' to 'scopeChainNode' in a few places.
2191
2192         * kjs/nodes.cpp:
2193         (JSC::EvalNode::generateCode):
2194         (JSC::FunctionBodyNode::generateCode):
2195         (JSC::ProgramNode::generateCode):
2196
2197 2008-09-26  Sam Weinig  <sam@webkit.org>
2198
2199         Reviewed by Darin Adler.
2200
2201         Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
2202         Speedup static property get/put
2203
2204         Convert getting/setting static property values to use static functions
2205         instead of storing an integer and switching in getValueProperty/putValueProperty.
2206
2207         * kjs/JSObject.cpp:
2208         (JSC::JSObject::deleteProperty):
2209         (JSC::JSObject::getPropertyAttributes):
2210         * kjs/MathObject.cpp:
2211         (JSC::MathObject::getOwnPropertySlot):
2212         * kjs/NumberConstructor.cpp:
2213         (JSC::numberConstructorNaNValue):
2214         (JSC::numberConstructorNegInfinity):
2215         (JSC::numberConstructorPosInfinity):
2216         (JSC::numberConstructorMaxValue):
2217         (JSC::numberConstructorMinValue):
2218         * kjs/PropertySlot.h:
2219         (JSC::PropertySlot::):
2220         * kjs/RegExpConstructor.cpp:
2221         (JSC::regExpConstructorDollar1):
2222         (JSC::regExpConstructorDollar2):
2223         (JSC::regExpConstructorDollar3):
2224         (JSC::regExpConstructorDollar4):
2225         (JSC::regExpConstructorDollar5):
2226         (JSC::regExpConstructorDollar6):
2227         (JSC::regExpConstructorDollar7):
2228         (JSC::regExpConstructorDollar8):
2229         (JSC::regExpConstructorDollar9):
2230         (JSC::regExpConstructorInput):
2231         (JSC::regExpConstructorMultiline):
2232         (JSC::regExpConstructorLastMatch):
2233         (JSC::regExpConstructorLastParen):
2234         (JSC::regExpConstructorLeftContext):
2235         (JSC::regExpConstructorRightContext):
2236         (JSC::setRegExpConstructorInput):
2237         (JSC::setRegExpConstructorMultiline):
2238         (JSC::RegExpConstructor::setInput):
2239         (JSC::RegExpConstructor::setMultiline):
2240         (JSC::RegExpConstructor::multiline):
2241         * kjs/RegExpConstructor.h:
2242         * kjs/RegExpObject.cpp:
2243         (JSC::regExpObjectGlobal):
2244         (JSC::regExpObjectIgnoreCase):
2245         (JSC::regExpObjectMultiline):
2246         (JSC::regExpObjectSource):
2247         (JSC::regExpObjectLastIndex):
2248         (JSC::setRegExpObjectLastIndex):
2249         * kjs/RegExpObject.h:
2250         (JSC::RegExpObject::setLastIndex):
2251         (JSC::RegExpObject::lastIndex):
2252         (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
2253         * kjs/StructureID.cpp:
2254         (JSC::StructureID::getEnumerablePropertyNames):
2255         * kjs/create_hash_table:
2256         * kjs/lexer.cpp:
2257         (JSC::Lexer::lex):
2258         * kjs/lookup.cpp:
2259         (JSC::HashTable::createTable):
2260         (JSC::HashTable::deleteTable):
2261         (JSC::setUpStaticFunctionSlot):
2262         * kjs/lookup.h:
2263         (JSC::HashEntry::initialize):
2264         (JSC::HashEntry::setKey):
2265         (JSC::HashEntry::key):
2266         (JSC::HashEntry::attributes):
2267         (JSC::HashEntry::function):
2268         (JSC::HashEntry::functionLength):
2269         (JSC::HashEntry::propertyGetter):
2270         (JSC::HashEntry::propertyPutter):
2271         (JSC::HashEntry::lexerValue):
2272         (JSC::HashEntry::):
2273         (JSC::HashTable::entry):
2274         (JSC::getStaticPropertySlot):
2275         (JSC::getStaticValueSlot):
2276         (JSC::lookupPut):
2277
2278 2008-09-26  Gavin Barraclough  <barraclough@apple.com>
2279
2280         Reviewed by Maciej Stachowiak & Oliver Hunt.
2281
2282         Add support for reusing temporary JSNumberCells.  This change is based on the observation
2283         that if the result of certain operations is a JSNumberCell and is consumed by a subsequent
2284         operation that would produce a JSNumberCell, we can reuse the object rather than allocating
2285         a fresh one.  E.g. given the expression ((a * b) * c), we can statically determine that
2286         (a * b) will have a numeric result (or else it will have thrown an exception), so the result
2287         will either be a JSNumberCell or a JSImmediate.
2288
2289         This patch changes three areas of JSC:
2290             * The AST now tracks type information about the result of each node.
2291             * This information is consumed in bytecode compilation, and certain bytecode operations
2292               now carry the statically determined type information about their operands.
2293             * CTI uses the information in a number of fashions:
2294                 * Where an operand to certain arithmetic operations is reusable, it will plant code
2295                   to try to perform the operation in JIT code & reuse the cell, where appropriate.
2296                 * Where it can be statically determined that an operand can only be numeric (typically
2297                   the result of another arithmetic operation) the code will not redundantly check that
2298                   the JSCell is a JSNumberCell.
2299                 * Where either of the operands to an add are non-numeric do not plant an optimized
2300                   arithmetic code path, just call straight out to the C function.
2301
2302         +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody),
2303         +1% v8-tests (improvements in raytrace & crypto)
2304
2305         * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells.
2306         * VM/CTI.h:
2307         * kjs/JSNumberCell.h:
2308         * masm/X86Assembler.h:
2309
2310         * VM/CodeBlock.cpp: Add type information to specific bytecodes.
2311         * VM/CodeGenerator.cpp:
2312         * VM/CodeGenerator.h:
2313         * VM/Machine.cpp:
2314
2315         * kjs/nodes.cpp: Track static type information for nodes.
2316         * kjs/nodes.h:
2317         * kjs/ResultDescriptor.h: (Added)
2318         * JavaScriptCore.xcodeproj/project.pbxproj:
2319
2320 2008-09-26  Yichao Yin  <yichao.yin@torchmobile.com.cn>
2321
2322         Reviewed by George Staikos, Maciej Stachowiak.
2323
2324         Add utility functions needed for upcoming WML code.
2325
2326         * wtf/ASCIICType.h:
2327         (WTF::isASCIIPrintable):
2328
2329 2008-09-26  Geoffrey Garen  <ggaren@apple.com>
2330
2331         Reviewed by Darin Adler.
2332         
2333         Reverted the part of r36614 that used static data because static data
2334         is not thread-safe.
2335
2336 2008-09-26  Geoffrey Garen  <ggaren@apple.com>
2337
2338         Reviewed by Maciej Stachowiak.
2339         
2340         Removed dynamic check for whether the callee needs an activation object.
2341         Replaced with callee code to create the activation object.
2342
2343         0.5% speedup on SunSpider.
2344         No change on v8 benchmark. (Might be a speedup, but it's in range of the
2345         variance.)
2346
2347         0.7% speedup on v8 benchmark in bytecode.
2348         1.3% speedup on empty call benchmark in bytecode.
2349
2350         * VM/CTI.cpp:
2351         (JSC::CTI::privateCompileMainPass): Added support for op_init_activation,
2352         the new opcode that specifies that the callee's initialization should
2353         create an activation object.
2354         (JSC::CTI::privateCompile): Removed previous code that did a similar
2355         thing in an ad-hoc way.
2356
2357         * VM/CodeBlock.cpp:
2358         (JSC::CodeBlock::dump): Added a case for dumping op_init_activation.
2359
2360         * VM/CodeGenerator.cpp:
2361         (JSC::CodeGenerator::generate): Added fixup code to change op_init to
2362         op_init_activation if necessary. (With a better parser, we would know
2363         which to use from the beginning.)
2364
2365         * VM/Instruction.h:
2366         (JSC::Instruction::Instruction):
2367         (WTF::): Faster traits for the instruction vector. An earlier version
2368         of this patch relied on inserting at the beginning of the vector, and
2369         depended on this change for speed.
2370
2371         * VM/Machine.cpp:
2372         (JSC::Machine::execute): Removed clients of setScopeChain, the old
2373         abstraction for dynamically checking for whether an activation object
2374         needed to be created.
2375         (JSC::Machine::privateExecute): ditto
2376
2377         (JSC::Machine::cti_op_push_activation): Renamed this function from
2378         cti_vm_updateScopeChain, and made it faster by removing the call to 
2379         setScopeChain.
2380         * VM/Machine.h:
2381
2382         * VM/Opcode.h: Declared op_init_activation.
2383
2384 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
2385
2386         Reviewed by Maciej Stachowiak.
2387         
2388         Move most of the return code back into the callee, now that the callee
2389         doesn't have to calculate anything dynamically.
2390         
2391         11.5% speedup on empty function call benchmark.
2392         
2393         SunSpider says 0.3% faster. SunSpider --v8 says no change.
2394
2395         * VM/CTI.cpp:
2396         (JSC::CTI::compileOpCall):
2397         (JSC::CTI::privateCompileMainPass):
2398         (JSC::CTI::privateCompileSlowCases):
2399
2400 2008-09-24  Sam Weinig  <sam@webkit.org>
2401
2402         Reviewed by Maciej Stachowiak.
2403
2404         Remove staticFunctionGetter.  There is only one remaining user of
2405         staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.
2406
2407         * JavaScriptCore.exp:
2408         * kjs/lookup.cpp:
2409         * kjs/lookup.h:
2410
2411 2008-09-24  Maciej Stachowiak  <mjs@apple.com>
2412
2413         Reviewed by Oliver Hunt.
2414         
2415         - inline JIT fast case of op_neq
2416         - remove extra level of function call indirection from slow cases of eq and neq
2417         
2418         1% speedup on Richards
2419
2420         * VM/CTI.cpp:
2421         (JSC::CTI::privateCompileMainPass):
2422         (JSC::CTI::privateCompileSlowCases):
2423         * VM/Machine.cpp:
2424         (JSC::Machine::privateExecute):
2425         (JSC::Machine::cti_op_eq):
2426         (JSC::Machine::cti_op_neq):
2427         * kjs/operations.cpp:
2428         (JSC::equal):
2429         (JSC::equalSlowCase):
2430         * kjs/operations.h:
2431         (JSC::equalSlowCaseInline):
2432
2433 2008-09-24  Sam Weinig  <sam@webkit.org>
2434
2435         Reviewed by Darin Adler.
2436
2437         Fix for https://bugs.webkit.org/show_bug.cgi?id=21080
2438         <rdar://problem/6243534>
2439         Crash below Function.apply when using a runtime array as the argument list
2440
2441         Test: plugins/bindings-array-apply-crash.html
2442
2443         * kjs/FunctionPrototype.cpp:
2444         (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from 
2445         JSArray (via ClassInfo) but is not a JSArray.
2446
2447 2008-09-24  Kevin McCullough  <kmccullough@apple.com>
2448
2449         Style change.
2450
2451         * kjs/nodes.cpp:
2452         (JSC::statementListEmitCode):
2453
2454 2008-09-24  Kevin McCullough  <kmccullough@apple.com>
2455
2456         Reviewed by Geoff.
2457
2458         Bug 21031: Breakpoints in the condition of loops only breaks the first
2459         time
2460         - Now when setting breakpoints in the condition of a loop (for, while,
2461         for in, and do while) will successfully break each time throught the
2462         loop.
2463         - For 'for' loops we need a little more complicated behavior that cannot
2464         be accomplished without some more significant changes:
2465         https://bugs.webkit.org/show_bug.cgi?id=21073
2466
2467         * kjs/nodes.cpp:
2468         (JSC::statementListEmitCode): We don't want to blindly emit a debug hook
2469         at the first line of loops, instead let the loop emit the debug hooks.
2470         (JSC::DoWhileNode::emitCode):
2471         (JSC::WhileNode::emitCode):
2472         (JSC::ForNode::emitCode):
2473         (JSC::ForInNode::emitCode):
2474         * kjs/nodes.h:
2475         (JSC::StatementNode::):
2476         (JSC::DoWhileNode::):
2477         (JSC::WhileNode::):
2478         (JSC::ForInNode::):
2479
2480 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
2481
2482         Reviewed by Darin Adler.
2483         
2484         Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of
2485         the objects it retains
2486
2487         * API/tests/testapi.c: Test the new SPI a little.
2488
2489         * API/JSSPI.cpp: Add the new SPI.
2490         * API/JSSPI.h: Add the new SPI.
2491         * JavaScriptCore.exp: Add the new SPI.
2492         * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI.
2493
2494 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
2495
2496         Reviewed by Darin Adler.
2497
2498         * API/JSBase.h: Filled in some missing function names.
2499
2500 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
2501
2502         Reviewed by Cameron Zwarich.
2503         
2504         Fixed https://bugs.webkit.org/show_bug.cgi?id=21057
2505         Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html
2506
2507         * VM/CodeGenerator.h: Changed declaration order to ensure the
2508         m_lastConstant, which is a RefPtr that points into m_calleeRegisters,
2509         has its destructor called before the destructor for m_calleeRegisters.
2510
2511 2008-09-24  Darin Adler  <darin@apple.com>
2512
2513         Reviewed by Sam Weinig.
2514
2515         - https://bugs.webkit.org/show_bug.cgi?id=21047
2516           speed up ret_activation with inlining
2517
2518         About 1% on v8-raytrace.
2519
2520         * JavaScriptCore.exp: Removed JSVariableObject::setRegisters.
2521
2522         * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline.
2523         * kjs/JSActivation.h:
2524         (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize
2525         argument to setRegisters, since the object doesn't need to store the number of
2526         registers.
2527
2528         * kjs/JSGlobalObject.cpp:
2529         (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we
2530         used this on objects that weren't brand new. These days, this function is really
2531         just part of the constructor.
2532
2533         * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since
2534         JSVariableObjectData no longer needs it. Added a setRegisters override here
2535         that handles storing the size.
2536
2537         * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it
2538         no longer exists.
2539
2540         * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the
2541         header to make them inline.
2542         * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData,
2543         since it was only used for the global object.
2544         (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline.
2545         (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also
2546         removed the code to set registerArraySize and changed an if statement into
2547         an assert to save an unnnecessary branch.
2548
2549 2008-09-24  Maciej Stachowiak  <mjs@apple.com>
2550
2551         Reviewed by Oliver Hunt.
2552         
2553         - inline PropertyMap::getOffset to speed up polymorphic lookups
2554         
2555         ~1.5% speedup on v8 benchmark
2556         no effect on SunSpider
2557
2558         * JavaScriptCore.exp:
2559         * kjs/PropertyMap.cpp:
2560         * kjs/PropertyMap.h:
2561         (JSC::PropertyMap::getOffset):
2562
2563 2008-09-24  Jan Michael Alonzo  <jmalonzo@webkit.org>
2564
2565         Reviewed by Alp Toker.
2566
2567         https://bugs.webkit.org/show_bug.cgi?id=20992
2568         Build fails on GTK+ Mac OS
2569
2570         * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by
2571           Richard Hult.
2572         (WTF::initializeThreading):
2573
2574 2008-09-23  Oliver Hunt  <oliver@apple.com>
2575
2576         Reviewed by Maciej Stachowiak.
2577
2578         Bug 19968: Slow Script at www.huffingtonpost.com
2579         <https://bugs.webkit.org/show_bug.cgi?id=19968>
2580
2581         Finally found the cause of this accursed issue.  It is triggered
2582         by synchronous creation of a new global object from JS.  The new
2583         global object resets the timer state in this execution group's
2584         Machine, taking timerCheckCount to 0.  Then when JS returns the
2585         timerCheckCount is decremented making it non-zero.  The next time
2586         we execute JS we will start the timeout counter, however the non-zero
2587         timeoutCheckCount means we don't reset the timer information. This
2588         means that the timeout check is now checking the cumulative time
2589         since the creation of the global object rather than the time since
2590         JS was last entered.  At this point the slow script dialog is guaranteed
2591         to eventually be displayed incorrectly unless a page is loaded
2592         asynchronously (which will reset everything into a sane state).
2593
2594         The fix for this is rather trivial -- the JSGlobalObject constructor
2595         should not be resetting the machine timer state.
2596
2597         * VM/Machine.cpp:
2598         (JSC::Machine::Machine):
2599           Now that we can't rely on the GlobalObject initialising the timeout
2600           state, we do it in the Machine constructor.
2601
2602         * VM/Machine.h:
2603         (JSC::Machine::stopTimeoutCheck):
2604           Add assertions to guard against this happening.
2605
2606         * kjs/JSGlobalObject.cpp:
2607         (JSC::JSGlobalObject::init):
2608           Don't reset the timeout state.
2609
2610 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
2611
2612         Reviewed by Oliver Hunt.
2613         
2614         Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812>
2615         Uncaught exceptions in regex replace callbacks crash webkit
2616         
2617         This was a combination of two problems:
2618         
2619         (1) the replace function would continue execution after an exception
2620         had been thrown.
2621         
2622         (2) In some cases, the Machine would return 0 in the case of an exception,
2623         despite the fact that a few clients dereference the Machine's return
2624         value without first checking for an exception.
2625         
2626         * VM/Machine.cpp:
2627         (JSC::Machine::execute):
2628         
2629         ^ Return jsNull() instead of 0 in the case of an exception, since some
2630         clients depend on using our return value.
2631         
2632         ^ ASSERT that execution does not continue after an exception has been
2633         thrown, to help catch problems like this in the future.
2634
2635         * kjs/StringPrototype.cpp:
2636         (JSC::stringProtoFuncReplace):
2637         
2638         ^ Stop execution if an exception has been thrown.
2639
2640 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
2641
2642         Try to fix the windows build.
2643
2644         * VM/CTI.cpp:
2645         (JSC::CTI::compileOpCall):
2646         (JSC::CTI::privateCompileMainPass):
2647
2648 2008-09-23  Alp Toker  <alp@nuanti.com>
2649
2650         Build fix.
2651
2652         * VM/CTI.h:
2653
2654 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
2655
2656         Reviewed by Darin Adler.
2657
2658         * wtf/Platform.h: Removed duplicate #if.
2659
2660 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
2661
2662         Reviewed by Darin Adler.
2663         
2664         Changed the layout of the call frame from
2665         
2666         { header, parameters, locals | constants, temporaries }
2667         
2668         to
2669         
2670         { parameters, header | locals, constants, temporaries }
2671         
2672         This simplifies function entry+exit, and enables a number of future
2673         optimizations.
2674         
2675         13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on
2676         empty call benchmark for CTI.
2677         
2678         SunSpider says no change. SunSpider --v8 says 1% faster.
2679
2680         * VM/CTI.cpp:
2681         
2682         Added a bit of abstraction for calculating whether a register is a
2683         constant, since this patch changes that calculation:
2684         (JSC::CTI::isConstant):
2685         (JSC::CTI::getConstant):
2686         (JSC::CTI::emitGetArg):
2687         (JSC::CTI::emitGetPutArg):
2688         (JSC::CTI::getConstantImmediateNumericArg):
2689
2690         Updated for changes to callframe header location:
2691         (JSC::CTI::emitPutToCallFrameHeader):
2692         (JSC::CTI::emitGetFromCallFrameHeader):
2693         (JSC::CTI::printOpcodeOperandTypes):
2694         
2695         Renamed to spite Oliver:
2696         (JSC::CTI::emitInitRegister):
2697         
2698         Added an abstraction for emitting a call through a register, so that
2699         calls through registers generate exception info, too:
2700         (JSC::CTI::emitCall):
2701
2702         Updated to match the new callframe header layout, and to support calls
2703         through registers, which have no destination address:
2704         (JSC::CTI::compileOpCall):
2705         (JSC::CTI::privateCompileMainPass):
2706         (JSC::CTI::privateCompileSlowCases):
2707         (JSC::CTI::privateCompile):
2708
2709         * VM/CTI.h:
2710
2711         More of the above:
2712         (JSC::CallRecord::CallRecord):
2713
2714         * VM/CodeBlock.cpp:
2715
2716         Updated for new register layout:
2717         (JSC::registerName):
2718         (JSC::CodeBlock::dump):
2719
2720         * VM/CodeBlock.h:
2721         
2722         Updated CodeBlock to track slightly different information about the
2723         register frame, and tweaked the style of an ASSERT_NOT_REACHED.
2724         (JSC::CodeBlock::CodeBlock):
2725         (JSC::CodeBlock::getStubInfo):
2726
2727         * VM/CodeGenerator.cpp:
2728         
2729         Added some abstraction around constant register allocation, since this
2730         patch changes it, changed codegen to account for the new callframe
2731         layout, and added abstraction around register fetching code
2732         that used to assume that all local registers lived at negative indices,
2733         since vars now live at positive indices:
2734         (JSC::CodeGenerator::generate):
2735         (JSC::CodeGenerator::addVar):
2736         (JSC::CodeGenerator::addGlobalVar):
2737         (JSC::CodeGenerator::allocateConstants):
2738         (JSC::CodeGenerator::CodeGenerator):
2739         (JSC::CodeGenerator::addParameter):
2740         (JSC::CodeGenerator::registerFor):
2741         (JSC::CodeGenerator::constRegisterFor):
2742         (JSC::CodeGenerator::newRegister):
2743         (JSC::CodeGenerator::newTemporary):
2744         (JSC::CodeGenerator::highestUsedRegister):
2745         (JSC::CodeGenerator::addConstant):
2746         
2747         ASSERT that our caller referenced the registers it passed to us.
2748         Otherwise, we might overwrite them with parameters:
2749         (JSC::CodeGenerator::emitCall):
2750         (JSC::CodeGenerator::emitConstruct):
2751
2752         * VM/CodeGenerator.h:
2753         
2754         Added some abstraction for getting a RegisterID for a given index,
2755         since the rules are a little weird:
2756         (JSC::CodeGenerator::registerFor):
2757
2758         * VM/Machine.cpp:
2759
2760         Utility function to transform a machine return PC to a virtual machine
2761         return VPC, for the sake of stack unwinding, since both PCs are stored
2762         in the same location now:
2763         (JSC::vPCForPC):
2764
2765         Tweaked to account for new call frame:
2766         (JSC::Machine::initializeCallFrame):
2767         
2768         Tweaked to account for registerOffset supplied by caller:
2769         (JSC::slideRegisterWindowForCall):
2770
2771         Tweaked to account for new register layout:
2772         (JSC::scopeChainForCall):
2773         (JSC::Machine::callEval):
2774         (JSC::Machine::dumpRegisters):
2775         (JSC::Machine::unwindCallFrame):
2776         (JSC::Machine::execute):
2777
2778         Changed op_call and op_construct to implement the new calling convention:
2779         (JSC::Machine::privateExecute):
2780
2781         Tweaked to account for the new register layout:
2782         (JSC::Machine::retrieveArguments):
2783         (JSC::Machine::retrieveCaller):
2784         (JSC::Machine::retrieveLastCaller):
2785         (JSC::Machine::callFrame):
2786         (JSC::Machine::getArgumentsData):
2787
2788         Changed CTI call helpers to implement the new calling convention:
2789         (JSC::Machine::cti_op_call_JSFunction):
2790         (JSC::Machine::cti_op_call_NotJSFunction):
2791         (JSC::Machine::cti_op_ret_activation):
2792         (JSC::Machine::cti_op_ret_profiler):
2793         (JSC::Machine::cti_op_construct_JSConstruct):
2794         (JSC::Machine::cti_op_construct_NotJSConstruct):
2795         (JSC::Machine::cti_op_call_eval):
2796
2797         * VM/Machine.h:
2798
2799         * VM/Opcode.h:
2800         
2801         Renamed op_initialise_locals to op_init, because this opcode
2802         doesn't initialize all locals, and it doesn't initialize only locals.
2803         Also, to spite Oliver.
2804         
2805         * VM/RegisterFile.h:
2806         
2807         New call frame enumeration values:
2808         (JSC::RegisterFile::):
2809
2810         Simplified the calculation of whether a RegisterID is a temporary,
2811         since we can no longer assume that all positive non-constant registers
2812         are temporaries:
2813         * VM/RegisterID.h:
2814         (JSC::RegisterID::RegisterID):
2815         (JSC::RegisterID::setTemporary):
2816         (JSC::RegisterID::isTemporary):
2817
2818         Renamed firstArgumentIndex to firstParameterIndex because the assumption
2819         that this variable pertained to the actual arguments supplied by the
2820         caller caused me to write some buggy code:
2821         * kjs/Arguments.cpp:
2822         (JSC::ArgumentsData::ArgumentsData):
2823         (JSC::Arguments::Arguments):
2824         (JSC::Arguments::fillArgList):
2825         (JSC::Arguments::getOwnPropertySlot):
2826         (JSC::Arguments::put):
2827
2828         Updated for new call frame layout:
2829         * kjs/DebuggerCallFrame.cpp:
2830         (JSC::DebuggerCallFrame::functionName):
2831         (JSC::DebuggerCallFrame::type):
2832         * kjs/DebuggerCallFrame.h:
2833
2834         Changed the activation object to account for the fact that a call frame
2835         header now sits between parameters and local variables. This change
2836         requires all variable objects to do their own marking, since they
2837         now use their register storage differently:
2838         * kjs/JSActivation.cpp:
2839         (JSC::JSActivation::mark):
2840         (JSC::JSActivation::copyRegisters):
2841         (JSC::JSActivation::createArgumentsObject):
2842         * kjs/JSActivation.h:
2843
2844         Updated global object to use the new interfaces required by the change
2845         to JSActivation above:
2846         * kjs/JSGlobalObject.cpp:
2847         (JSC::JSGlobalObject::reset):
2848         (JSC::JSGlobalObject::mark):
2849         (JSC::JSGlobalObject::copyGlobalsFrom):
2850         (JSC::JSGlobalObject::copyGlobalsTo):
2851         * kjs/JSGlobalObject.h:
2852         (JSC::JSGlobalObject::addStaticGlobals):
2853
2854         Updated static scope object to use the new interfaces required by the 
2855         change to JSActivation above:
2856         * kjs/JSStaticScopeObject.cpp:
2857         (JSC::JSStaticScopeObject::mark):
2858         (JSC::JSStaticScopeObject::~JSStaticScopeObject):
2859         * kjs/JSStaticScopeObject.h:
2860         (JSC::JSStaticScopeObject::JSStaticScopeObject):
2861         (JSC::JSStaticScopeObject::d):
2862
2863         Updated variable object to use the new interfaces required by the 
2864         change to JSActivation above:
2865         * kjs/JSVariableObject.cpp:
2866         (JSC::JSVariableObject::copyRegisterArray):
2867         (JSC::JSVariableObject::setRegisters):
2868         * kjs/JSVariableObject.h:
2869
2870         Changed the bit twiddling in symbol table not to assume that all indices
2871         are negative, since they can be positive now:
2872         * kjs/SymbolTable.h:
2873         (JSC::SymbolTableEntry::SymbolTableEntry):
2874         (JSC::SymbolTableEntry::isNull):
2875         (JSC::SymbolTableEntry::getIndex):
2876         (JSC::SymbolTableEntry::getAttributes):
2877         (JSC::SymbolTableEntry::setAttributes):
2878         (JSC::SymbolTableEntry::isReadOnly):
2879         (JSC::SymbolTableEntry::pack):
2880         (JSC::SymbolTableEntry::isValidIndex):
2881
2882         Changed call and construct nodes to ref their functions and/or bases,
2883         so that emitCall/emitConstruct doesn't overwrite them with parameters.
2884         Also, updated for rename to registerFor:
2885         * kjs/nodes.cpp:
2886         (JSC::ResolveNode::emitCode):
2887         (JSC::NewExprNode::emitCode):
2888         (JSC::EvalFunctionCallNode::emitCode):
2889         (JSC::FunctionCallValueNode::emitCode):
2890         (JSC::FunctionCallResolveNode::emitCode):
2891         (JSC::FunctionCallBracketNode::emitCode):
2892         (JSC::FunctionCallDotNode::emitCode):
2893         (JSC::PostfixResolveNode::emitCode):
2894         (JSC::DeleteResolveNode::emitCode):
2895         (JSC::TypeOfResolveNode::emitCode):
2896         (JSC::PrefixResolveNode::emitCode):
2897         (JSC::ReadModifyResolveNode::emitCode):
2898         (JSC::AssignResolveNode::emitCode):
2899         (JSC::ConstDeclNode::emitCodeSingle):
2900         (JSC::ForInNode::emitCode):
2901
2902         Added abstraction for getting exception info out of a call through a
2903         register:
2904         * masm/X86Assembler.h:
2905         (JSC::X86Assembler::emitCall):
2906         
2907         Removed duplicate #if:
2908         * wtf/Platform.h:
2909
2910 2008-09-23  Kevin McCullough  <kmccullough@apple.com>
2911
2912         Reviewed by Darin.
2913
2914         Bug 21030: The JS debugger breaks on the do of a do-while not the while
2915         (where the conditional statement is)
2916         https://bugs.webkit.org/show_bug.cgi?id=21030
2917         Now the statementListEmitCode detects if a do-while node is being
2918         emited and emits the debug hook on the last line instead of the first.
2919
2920         This change had no effect on sunspider.
2921
2922         * kjs/nodes.cpp:
2923         (JSC::statementListEmitCode):
2924         * kjs/nodes.h:
2925         (JSC::StatementNode::isDoWhile):
2926         (JSC::DoWhileNode::isDoWhile):
2927
2928 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
2929
2930         Reviewed by Camron Zwarich.
2931
2932         - inline the fast case of instanceof
2933         https://bugs.webkit.org/show_bug.cgi?id=20818
2934
2935         ~2% speedup on EarleyBoyer test.
2936         
2937         * VM/CTI.cpp:
2938         (JSC::CTI::privateCompileMainPass):
2939         (JSC::CTI::privateCompileSlowCases):
2940         * VM/Machine.cpp:
2941         (JSC::Machine::cti_op_instanceof):
2942
2943 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
2944
2945         Reviewed by Cameron Zwarich.
2946         
2947         - add forgotten slow case logic for !==
2948
2949         * VM/CTI.cpp:
2950         (JSC::CTI::privateCompileSlowCases):
2951
2952 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
2953
2954         Reviewed by Cameron Zwarich.
2955
2956         - inline the fast cases of !==, same as for ===
2957         
2958         2.9% speedup on EarleyBoyer benchmark
2959
2960         * VM/CTI.cpp:
2961         (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function,
2962         and parameterized so it can do the reverse version as well.
2963         (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq.
2964         * VM/CTI.h:
2965         (JSC::CTI::): Declare above stuff.
2966         * VM/Machine.cpp:
2967         (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline.
2968
2969 2008-09-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2970
2971         Reviewed by Oliver Hunt.
2972
2973         Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way
2974         <https://bugs.webkit.org/show_bug.cgi?id=20989>
2975
2976         Make special cases for the 'callee' and 'length' properties in the
2977         Arguments object.
2978
2979         This is somewhere between a 7.8% speedup and a 10% speedup on the V8
2980         Raytrace benchmark, depending on whether it is run alone or with the
2981         other V8 benchmarks.
2982
2983         * kjs/Arguments.cpp:
2984         (JSC::ArgumentsData::ArgumentsData):
2985         (JSC::Arguments::Arguments):
2986         (JSC::Arguments::mark):
2987         (JSC::Arguments::getOwnPropertySlot):
2988         (JSC::Arguments::put):
2989         (JSC::Arguments::deleteProperty):
2990
2991 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
2992
2993         Reviewed by Darin.
2994
2995         - speed up instanceof some more
2996         https://bugs.webkit.org/show_bug.cgi?id=20818
2997         
2998         ~2% speedup on EarleyBoyer
2999
3000         The idea here is to record in the StructureID whether the class
3001         needs a special hasInstance or if it can use the normal logic from
3002         JSObject. 
3003         
3004         Based on this I inlined the real work directly into
3005         cti_op_instanceof and put the fastest checks up front and the
3006         error handling at the end (so it should be fairly straightforward
3007         to split off the beginning to be inlined if desired).
3008
3009         I only did this for CTI, not the bytecode interpreter.
3010         
3011         * API/JSCallbackObject.h:
3012         (JSC::JSCallbackObject::createStructureID):
3013         * ChangeLog:
3014         * VM/Machine.cpp:
3015         (JSC::Machine::cti_op_instanceof):
3016         * kjs/JSImmediate.h:
3017         (JSC::JSImmediate::isAnyImmediate):
3018         * kjs/TypeInfo.h:
3019         (JSC::TypeInfo::overridesHasInstance):
3020         (JSC::TypeInfo::flags):
3021
3022 2008-09-22  Darin Adler  <darin@apple.com>
3023
3024         Reviewed by Sam Weinig.
3025
3026         - https://bugs.webkit.org/show_bug.cgi?id=21019
3027           make FunctionBodyNode::ref/deref fast
3028
3029         Speeds up v8-raytrace by 7.2%.
3030
3031         * kjs/nodes.cpp:
3032         (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0.
3033         * kjs/nodes.h:
3034         (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use
3035         m_refCount.
3036         (JSC::FunctionBodyNode::deref): Ditto, but the deref side.
3037
3038 2008-09-22  Darin Adler  <darin@apple.com>
3039
3040         Pointed out by Sam Weinig.
3041
3042         * kjs/Arguments.cpp:
3043         (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops!
3044
3045 2008-09-22  Darin Adler  <darin@apple.com>
3046
3047         Reviewed by Cameron Zwarich.
3048
3049         - https://bugs.webkit.org/show_bug.cgi?id=20983
3050           ArgumentsData should have some room to allocate some extra arguments inline
3051
3052         Speeds up v8-raytrace by 5%.
3053
3054         * kjs/Arguments.cpp:
3055         (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer
3056         extra arguments.
3057         (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer
3058         extra arguments.
3059         (JSC::Arguments::~Arguments): Delete the buffer if necessary.
3060         (JSC::Arguments::mark): Update since extraArguments are now Register.
3061         (JSC::Arguments::fillArgList): Added special case for the only case that's
3062         actually used in the practice, when there are no parameters. There are some
3063         other special cases in there too, but that's the only one that matters.
3064         (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's
3065         no operation to get you at the JSValue* inside a Register as a "slot".
3066
3067 2008-09-22  Sam Weinig  <sam@webkit.org>
3068
3069         Reviewed by Maciej Stachowiak.
3070
3071         Patch for https://bugs.webkit.org/show_bug.cgi?id=21014
3072         Speed up for..in by using StructureID to avoid calls to hasProperty
3073
3074         Speeds up fasta by 8%.
3075
3076         * VM/JSPropertyNameIterator.cpp:
3077         (JSC::JSPropertyNameIterator::invalidate):
3078         * VM/JSPropertyNameIterator.h:
3079         (JSC::JSPropertyNameIterator::next):
3080         * kjs/PropertyNameArray.h:
3081         (JSC::PropertyNameArrayData::begin):
3082         (JSC::PropertyNameArrayData::end):
3083         (JSC::PropertyNameArrayData::setCachedStructureID):
3084         (JSC::PropertyNameArrayData::cachedStructureID):
3085         * kjs/StructureID.cpp:
3086         (JSC::StructureID::getEnumerablePropertyNames):
3087         (JSC::structureIDChainsAreEqual):
3088         * kjs/StructureID.h:
3089
3090 2008-09-22  Kelvin Sherlock  <ksherlock@gmail.com>
3091
3092         Updated and tweaked by Sam Weinig.
3093
3094         Reviewed by Geoffrey Garen.
3095
3096         Bug 20020: Proposed enhancement to JavaScriptCore API
3097         <https://bugs.webkit.org/show_bug.cgi?id=20020>
3098
3099         Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp
3100         functions to create JavaScript Array, Date, Error, and RegExp objects, respectively.
3101
3102         * API/JSObjectRef.cpp: The functions
3103         * API/JSObjectRef.h: Function prototype and documentation
3104         * JavaScriptCore.exp: Added functions to exported function list
3105         * API/tests/testapi.c: Added basic functionality tests.
3106
3107         * kjs/DateConstructor.cpp:
3108         Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args)
3109         with JSObject* constructDate(ExecState* exec, const ArgList& args).
3110         Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function
3111
3112         * kjs/DateConstructor.h:
3113         added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args)
3114
3115         * kjs/ErrorConstructor.cpp:
3116         removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args)
3117
3118         * kjs/ErrorConstructor.h:
3119         added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args)
3120
3121         * kjs/RegExpConstructor.cpp:
3122         removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args)
3123
3124         * kjs/RegExpConstructor.h:
3125         added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args)
3126
3127 2008-09-22  Matt Lilek  <webkit@mattlilek.com>
3128
3129         Not reviewed, Windows build fix.
3130
3131         * kjs/Arguments.cpp:
3132         * kjs/FunctionPrototype.cpp:
3133
3134 2008-09-22  Sam Weinig  <sam@webkit.org>
3135
3136         Reviewed by Darin Adler.
3137
3138         Patch for https://bugs.webkit.org/show_bug.cgi?id=20982
3139         Speed up the apply method of functions by special-casing array and 'arguments' objects
3140
3141         1% speedup on v8-raytrace.
3142
3143         Test: fast/js/function-apply.html
3144
3145         * kjs/Arguments.cpp:
3146         (JSC::Arguments::fillArgList):
3147         * kjs/Arguments.h:
3148         * kjs/FunctionPrototype.cpp:
3149         (JSC::functionProtoFuncApply):
3150         * kjs/JSArray.cpp:
3151         (JSC::JSArray::fillArgList):
3152         * kjs/JSArray.h:
3153
3154 2008-09-22  Darin Adler  <darin@apple.com>
3155
3156         Reviewed by Sam Weinig.
3157
3158         - https://bugs.webkit.org/show_bug.cgi?id=20993
3159           Array.push/pop need optimized cases for JSArray
3160
3161         3% or so speedup on DeltaBlue benchmark.
3162
3163         * kjs/ArrayPrototype.cpp:
3164         (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate.
3165         (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate.
3166
3167         * kjs/JSArray.cpp:
3168         (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting
3169         us into the fast code path.
3170         (JSC::JSArray::pop): Added.
3171         (JSC::JSArray::push): Added.
3172         * kjs/JSArray.h: Added push and pop.
3173
3174         * kjs/operations.cpp:
3175         (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches.
3176
3177 2008-09-22  Maciej Stachowiak  <mjs@apple.com>
3178
3179         Reviewed by Cameron Zwarich.
3180         
3181         - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag
3182
3183         Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818>
3184         
3185         2.2% speedup on EarleyBoyer benchmark.
3186
3187         * API/JSCallbackConstructor.cpp:
3188         * API/JSCallbackConstructor.h:
3189         (JSC::JSCallbackConstructor::createStructureID):
3190         * API/JSCallbackFunction.cpp:
3191         * API/JSCallbackFunction.h:
3192         (JSC::JSCallbackFunction::createStructureID):
3193         * API/JSCallbackObject.h:
3194         (JSC::JSCallbackObject::createStructureID):
3195         * API/JSCallbackObjectFunctions.h:
3196         (JSC::::hasInstance):
3197         * API/JSValueRef.cpp:
3198         (JSValueIsInstanceOfConstructor):
3199         * JavaScriptCore.exp:
3200         * VM/Machine.cpp:
3201         (JSC::Machine::privateExecute):
3202         (JSC::Machine::cti_op_instanceof):
3203         * kjs/InternalFunction.cpp:
3204         * kjs/InternalFunction.h:
3205         (JSC::InternalFunction::createStructureID):
3206         * kjs/JSObject.cpp:
3207         * kjs/JSObject.h:
3208         * kjs/TypeInfo.h:
3209         (JSC::TypeInfo::implementsHasInstance):
3210
3211 2008-09-22  Maciej Stachowiak  <mjs@apple.com>
3212
3213         Reviewed by Dave Hyatt.
3214         
3215         Based on initial work by Darin Adler.
3216         
3217         - replace masqueradesAsUndefined virtual method with a flag in TypeInfo
3218         - use this to JIT inline code for eq_null and neq_null
3219         https://bugs.webkit.org/show_bug.cgi?id=20823
3220
3221         0.5% speedup on SunSpider
3222         ~4% speedup on Richards benchmark
3223         
3224         * VM/CTI.cpp:
3225         (JSC::CTI::privateCompileMainPass):
3226         * VM/Machine.cpp:
3227         (JSC::jsTypeStringForValue):
3228         (JSC::jsIsObjectType):
3229         (JSC::Machine::privateExecute):
3230         (JSC::Machine::cti_op_is_undefined):
3231         * VM/Machine.h:
3232         * kjs/JSCell.h:
3233         * kjs/JSValue.h:
3234         * kjs/StringObjectThatMasqueradesAsUndefined.h:
3235         (JSC::StringObjectThatMasqueradesAsUndefined::create):
3236         (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID):
3237         * kjs/StructureID.h:
3238         (JSC::StructureID::mutableTypeInfo):
3239         * kjs/TypeInfo.h:
3240         (JSC::TypeInfo::TypeInfo):
3241         (JSC::TypeInfo::masqueradesAsUndefined):
3242         * kjs/operations.cpp:
3243         (JSC::equal):
3244         * masm/X86Assembler.h:
3245         (JSC::X86Assembler::):
3246         (JSC::X86Assembler::setne_r):
3247         (JSC::X86Assembler::setnz_r):
3248         (JSC::X86Assembler::testl_i32m):
3249
3250 2008-09-22  Tor Arne Vestbø  <tavestbo@trolltech.com>
3251
3252         Reviewed by Simon.
3253
3254         Initialize QCoreApplication in kjs binary/Shell.cpp
3255         
3256         This allows us to use QCoreApplication::instance() to
3257         get the main thread in ThreadingQt.cpp
3258
3259         * kjs/Shell.cpp:
3260         (main):
3261         * wtf/ThreadingQt.cpp:
3262         (WTF::initializeThreading):
3263
3264 2008-09-21  Darin Adler  <darin@apple.com>
3265
3266         - blind attempt to fix non-all-in-one builds
3267
3268         * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h.
3269
3270 2008-09-21  Darin Adler  <darin@apple.com>
3271
3272         - fix debug build
3273
3274         * kjs/StructureID.cpp:
3275         (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type.
3276         (JSC::StructureID::createCachedPrototypeChain): Ditto.
3277
3278 2008-09-21  Maciej Stachowiak  <mjs@apple.com>
3279
3280         Reviewed by Darin Adler.
3281         
3282         - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID
3283         https://bugs.webkit.org/show_bug.cgi?id=20981
3284
3285         * JavaScriptCore.exp:
3286         * JavaScriptCore.xcodeproj/project.pbxproj:
3287         * VM/CTI.cpp:
3288         (JSC::CTI::privateCompileMainPass):
3289         (JSC::CTI::privateCompilePutByIdTransition):
3290         * VM/Machine.cpp:
3291         (JSC::jsIsObjectType):
3292         (JSC::Machine::Machine):
3293         * kjs/AllInOneFile.cpp:
3294         * kjs/JSCell.h:
3295         (JSC::JSCell::isObject):
3296         (JSC::JSCell::isString):
3297         * kjs/JSGlobalData.cpp:
3298         (JSC::JSGlobalData::JSGlobalData):
3299         * kjs/JSGlobalObject.cpp:
3300         (JSC::JSGlobalObject::reset):
3301         * kjs/JSGlobalObject.h:
3302         (JSC::StructureID::prototypeForLookup):
3303         * kjs/JSNumberCell.h:
3304         (JSC::JSNumberCell::createStructureID):
3305         * kjs/JSObject.cpp:
3306         (JSC::JSObject::createInheritorID):
3307         * kjs/JSObject.h:
3308         (JSC::JSObject::createStructureID):
3309         * kjs/JSString.h:
3310         (JSC::JSString::createStructureID):
3311         * kjs/NativeErrorConstructor.cpp:
3312         (JSC::NativeErrorConstructor::NativeErrorConstructor):
3313         * kjs/RegExpConstructor.cpp:
3314         * kjs/RegExpMatchesArray.h: Added.
3315         (JSC::RegExpMatchesArray::getOwnPropertySlot):
3316         (JSC::RegExpMatchesArray::put):
3317         (JSC::RegExpMatchesArray::deleteProperty):
3318         (JSC::RegExpMatchesArray::getPropertyNames):
3319         * kjs/StructureID.cpp:
3320         (JSC::StructureID::StructureID):
3321         (JSC::StructureID::addPropertyTransition):
3322         (JSC::StructureID::toDictionaryTransition):
3323         (JSC::StructureID::changePrototypeTransition):
3324         (JSC::StructureID::getterSetterTransition):
3325         * kjs/StructureID.h:
3326         (JSC::StructureID::create):
3327         (JSC::StructureID::typeInfo):
3328         * kjs/TypeInfo.h: Added.
3329         (JSC::TypeInfo::TypeInfo):
3330         (JSC::TypeInfo::type):
3331
3332 2008-09-21  Darin Adler  <darin@apple.com>
3333
3334         Reviewed by Cameron Zwarich.
3335
3336         - fix crash logging into Gmail due to recent Arguments change
3337
3338         * kjs/Arguments.cpp:
3339         (JSC::Arguments::Arguments): Fix window where mark() function could
3340         see d->extraArguments with uninitialized contents.
3341         (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two
3342         cases: 1) Inside the constructor before it's initialized.
3343         2) numArguments <= numParameters.
3344
3345 2008-09-21  Darin Adler  <darin@apple.com>
3346
3347         - fix loose end from the "duplicate constant values" patch
3348
3349         * VM/CodeGenerator.cpp:
3350         (JSC::CodeGenerator::emitLoad): Add a special case for values the
3351         hash table can't handle.
3352
3353 2008-09-21  Mark Rowe  <mrowe@apple.com>
3354
3355         Fix the non-AllInOneFile build.
3356
3357         * kjs/Arguments.cpp: Add missing #include.
3358
3359 2008-09-21  Darin Adler  <darin@apple.com>
3360
3361         Reviewed by Cameron Zwarich and Mark Rowe.
3362
3363         - fix test failure caused by my recent IndexToNameMap patch
3364
3365         * kjs/Arguments.cpp:
3366         (JSC::Arguments::deleteProperty): Added the accidentally-omitted
3367         check of the boolean result from toArrayIndex.
3368
3369 2008-09-21  Darin Adler  <darin@apple.com>
3370
3371         Reviewed by Maciej Stachowiak.
3372
3373         - https://bugs.webkit.org/show_bug.cgi?id=20975
3374           inline immediate-number case of ==
3375
3376         * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to
3377         emitJumpSlowCaseIfNotImmNum, since the old name was incorrect.
3378
3379         * VM/CTI.cpp: Updated for new name.
3380         (JSC::CTI::privateCompileMainPass): Added op_eq.
3381         (JSC::CTI::privateCompileSlowCases): Added op_eq.
3382
3383         * VM/Machine.cpp:
3384         (JSC::Machine::cti_op_eq): Removed fast case, since it's now
3385         compiled.
3386
3387 2008-09-21  Peter Gal  <galpter@inf.u-szeged.hu>
3388
3389         Reviewed by Tim Hatcher and Eric Seidel.
3390
3391         Fix the QT/Linux JavaScriptCore segmentation fault.
3392         https://bugs.webkit.org/show_bug.cgi?id=20914
3393
3394         * wtf/ThreadingQt.cpp:
3395         (WTF::initializeThreading): Use currentThread() if
3396         platform is not a MAC (like in pre 36541 revisions)
3397
3398 2008-09-21  Darin Adler  <darin@apple.com>
3399
3400         Reviewed by Sam Weinig.
3401
3402         * kjs/debugger.h: Removed some unneeded includes and declarations.
3403
3404 2008-09-21  Darin Adler  <darin@apple.com>
3405
3406         Reviewed by Sam Weinig.
3407
3408         - https://bugs.webkit.org/show_bug.cgi?id=20972
3409           speed up Arguments further by eliminating the IndexToNameMap
3410
3411         No change on SunSpider. 1.29x as fast on V8 Raytrace.
3412
3413         * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the
3414         indexToNameMap and hadDeletes data members. Changed extraArguments into
3415         an OwnArrayPtr and added deletedArguments, another OwnArrayPtr.
3416         Replaced numExtraArguments with numParameters, since that's what's
3417         used more directly in hot code paths.
3418         (JSC::Arguments::Arguments): Pass in argument count instead of ArgList.
3419         Initialize ArgumentsData the new way.
3420         (JSC::Arguments::mark): Updated.
3421         (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so
3422         we don't have to convert integers to identifiers just to get an argument.
3423         Integrated the deleted case with the fast case.
3424         (JSC::Arguments::put): Ditto.
3425         (JSC::Arguments::deleteProperty): Ditto.
3426
3427         * kjs/Arguments.h: Minimized includes. Made everything private. Added
3428         overloads for the integral property name case. Eliminated mappedIndexSetter.
3429         Moved ArgumentsData into the .cpp file.
3430
3431         * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion.
3432         * kjs/IndexToNameMap.h: Ditto.
3433
3434         * kjs/JSActivation.cpp:
3435         (JSC::JSActivation::createArgumentsObject): Elminated ArgList.
3436
3437         * GNUmakefile.am:
3438         * JavaScriptCore.pri:
3439         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3440         * JavaScriptCore.xcodeproj/project.pbxproj:
3441         * JavaScriptCoreSources.bkl:
3442         * kjs/AllInOneFile.cpp:
3443         Removed IndexToNameMap.
3444
3445 2008-09-21  Darin Adler  <darin@apple.com>
3446
3447         * VM/CodeGenerator.cpp:
3448         (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly
3449         clearer style.
3450
3451 2008-09-21  Judit Jasz  <jasy@inf.u-szeged.hu>
3452
3453         Reviewed and tweaked by Darin Adler.
3454
3455         - https://bugs.webkit.org/show_bug.cgi?id=20645
3456           Elminate duplicate constant values in CodeBlocks.
3457
3458         Seems to be a wash on SunSpider.
3459
3460         * VM/CodeGenerator.cpp:
3461         (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee
3462         we emit the same JSValue* for identical numbers and strings.
3463         * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&.
3464         Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap.
3465         * kjs/nodes.cpp:
3466         (JSC::StringNode::emitCode): Call the new emitLoad and let it do the
3467         JSString creation.
3468
3469 2008-09-21  Paul Pedriana  <webkit@pedriana.com>
3470
3471         Reviewed and tweaked by Darin Adler.
3472
3473         - https://bugs.webkit.org/show_bug.cgi?id=16925
3474           Fixed lack of Vector buffer alignment for both GCC and MSVC.
3475           Since there's no portable way to do this, for now we don't support
3476           other compilers.
3477
3478         * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer.
3479         Use AlignedBuffer insteadof an array of char in VectorBuffer.
3480
3481 2008-09-21  Gabor Loki  <loki@inf.u-szeged.hu>
3482
3483         Reviewed by Darin Adler.
3484
3485         - https://bugs.webkit.org/show_bug.cgi?id=19408
3486           Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators.
3487
3488         1.008x as fast on SunSpider.
3489
3490         * kjs/grammar.y:
3491         (makeNegateNode): Fold if expression is a number > 0.
3492         (makeBitwiseNotNode): Fold if expression is a number.
3493         (makeMultNode): Fold if expressions are both numbers.
3494         (makeDivNode): Fold if expressions are both numbers.
3495         (makeAddNode): Fold if expressions are both numbers.
3496         (makeLeftShiftNode): Fold if expressions are both numbers.
3497         (makeRightShiftNode): Fold if expressions are both numbers.
3498
3499 2008-09-21  Maciej Stachowiak  <mjs@apple.com>
3500
3501         Reviewed by Oliver.
3502         
3503         - speed up === operator by generating inline machine code for the fast paths
3504         https://bugs.webkit.org/show_bug.cgi?id=20820
3505
3506         * VM/CTI.cpp:
3507         (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber):
3508         (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers):
3509         (JSC::CTI::emitJumpSlowCaseIfNotImmediates):
3510         (JSC::CTI::emitTagAsBoolImmediate):
3511         (JSC::CTI::privateCompileMainPass):
3512         (JSC::CTI::privateCompileSlowCases):
3513         * VM/CTI.h:
3514         * VM/Machine.cpp:
3515         (JSC::Machine::cti_op_stricteq):
3516         * masm/X86Assembler.h:
3517         (JSC::X86Assembler::):
3518         (JSC::X86Assembler::sete_r):
3519         (JSC::X86Assembler::setz_r):
3520         (JSC::X86Assembler::movzbl_rr):
3521         (JSC::X86Assembler::emitUnlinkedJnz):
3522
3523 2008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3524
3525         Reviewed by Maciej Stachowiak.
3526
3527         Free memory allocated for extra arguments in the destructor of the
3528         Arguments object.
3529
3530         * kjs/Arguments.cpp:
3531         (JSC::Arguments::~Arguments):
3532         * kjs/Arguments.h:
3533
3534 2008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3535
3536         Reviewed by Maciej Stachowiak.
3537
3538         Bug 20815: 'arguments' object creation is non-optimal
3539         <https://bugs.webkit.org/show_bug.cgi?id=20815>
3540
3541         Fix our inefficient way of creating the arguments object by only
3542         creating named properties for each of the arguments after a use of the
3543         'delete' statement. This patch also speeds up access to the 'arguments'
3544         object slightly, but it still does not use the array fast path for
3545         indexed access that exists for many opcodes.
3546
3547         This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5%
3548         improvement on the Earley-Boyer benchmark, which gives a 4% improvement
3549         overall.
3550
3551         * kjs/Arguments.cpp:
3552         (JSC::Arguments::Arguments):
3553         (JSC::Arguments::mark):
3554         (JSC::Arguments::getOwnPropertySlot):
3555         (JSC::Arguments::put):
3556         (JSC::Arguments::deleteProperty):
3557         * kjs/Arguments.h:
3558         (JSC::Arguments::ArgumentsData::ArgumentsData):
3559         * kjs/IndexToNameMap.h:
3560         (JSC::IndexToNameMap::size):
3561         * kjs/JSActivation.cpp:
3562         (JSC::JSActivation::createArgumentsObject):
3563         * kjs/JSActivation.h:
3564         (JSC::JSActivation::uncheckedSymbolTableGet):
3565         (JSC::JSActivation::uncheckedSymbolTableGetValue):
3566         (JSC::JSActivation::uncheckedSymbolTablePut):
3567         * kjs/JSFunction.h:
3568         (JSC::JSFunction::numParameters):
3569
3570 2008-09-20  Darin Adler  <darin@apple.com>
3571
3572         Reviewed by Mark Rowe.
3573
3574         - fix crash seen on buildbot
3575
3576         * kjs/JSGlobalObject.cpp:
3577         (JSC::JSGlobalObject::ma