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