12008-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
2
3        Reviewed (and updated) by Alp Toker.
4
5        https://bugs.webkit.org/show_bug.cgi?id=16620
6        [GTK] Autotools make dist and make check support
7
8        Get make dist working.
9
10        Note that not all possible configurations have been tested yet.
11
12        * GNUmakefile.am:
13
142008-08-09  Alexey Proskuryakov  <ap@webkit.org>
15
16        Reviewed by Sam Weinig.
17
18        Added same heap debug checks to more code paths.
19
20        * kjs/JSActivation.cpp:
21        (KJS::JSActivation::put):
22        (KJS::JSActivation::putWithAttributes):
23        * kjs/JSGlobalObject.cpp:
24        (KJS::JSGlobalObject::putWithAttributes):
25        * kjs/JSObject.h:
26        (KJS::JSObject::putDirect):
27        * kjs/JSVariableObject.h:
28        (KJS::JSVariableObject::symbolTablePut):
29        (KJS::JSVariableObject::symbolTablePutWithAttributes):
30
312008-08-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
32
33        Reviewed by Maciej.
34
35        Fix some style issues in the sampling tool.
36
37        * VM/SamplingTool.cpp:
38        (KJS::sleepForMicroseconds):
39        (KJS::SamplingTool::dump):
40
412008-08-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
42
43        Reviewed by Oliver.
44
45        Revision 35651, despite being a rather trivial change, introduced a
46        large regression on the regexp-dna SunSpider test. This regression
47        stemmed from an increase in the size of CodeBlock::dump(). There is
48        no reason for this method (and several related methods) to be compiled
49        in non-debug builds with the sampling tool disabled. This patch
50        conditionally compiles them, reversing the regression on SunSpider.
51
52        * JavaScriptCore.exp:
53        * VM/CodeBlock.cpp:
54        * VM/CodeBlock.h:
55        * VM/Machine.cpp:
56
572008-08-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
58
59        Reviewed by Oliver.
60
61        Bug 20330: JSCore crash loading any filehurricane media page
62        <https://bugs.webkit.org/show_bug.cgi?id=20330>
63
64        Fix a typo in the constant loading patch. Also, add a case for
65        op_unexpected_load to CodeBlock::dump().
66
67        * VM/CodeBlock.cpp:
68        (KJS::CodeBlock::dump):
69        * VM/CodeGenerator.cpp:
70        (KJS::CodeGenerator::addUnexpectedConstant):
71
722008-08-08  Matt Lilek  <webkit@mattlilek.com>
73
74        Not reviewed, build fix.
75
76        * JavaScriptCore.exp:
77
782008-08-08  Oliver Hunt  <oliver@apple.com>
79
80        Reviewed by Cameron Zwarich.
81
82        Improve performance of arithmetic operators
83
84        Added a fast (non-virtual) mechanism to determine if a non-immediate JSValue*
85        is a JSNumberCell.  We then use this to allow improved specialisation in many
86        arithmetic operators.  SunSpider reports a 2.5% progression overall, with greater
87        than 10% progressions on a number of arithmetic heavy tests.
88
89        * VM/Machine.cpp:
90        (KJS::fastIsNumber):
91        (KJS::fastToInt32):
92        (KJS::fastToUInt32):
93        (KJS::jsLess):
94        (KJS::jsLessEq):
95        (KJS::jsAdd):
96        (KJS::Machine::privateExecute):
97        * kjs/JSNumberCell.h:
98        (KJS::JSNumberCell::fastToInt32):
99        (KJS::JSNumberCell::fastToUInt32):
100        * kjs/collector.cpp:
101        (KJS::allocateBlock):
102        (KJS::Heap::heapAllocate):
103        * kjs/collector.h:
104        (KJS::Heap::fastIsNumber):
105
1062008-08-06  Adam Roben  <aroben@apple.com>
107
108        Try to fix the Windows build bots
109
110        * API/JSBase.cpp: Touch this to force JSC to rebuild and re-copy the
111        WTF headers.
112
1132008-08-06  Tor Arne Vestbø  <tavestbo@trolltech.com>
114
115        Revert change 35595.
116
117        * wtf/RetainPtr.h:
118
1192008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
120
121        Fix non-Mac build.
122
123        * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
124
1252008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
126
127        Fix non-Mac build.
128
129        * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
130
1312008-08-06  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
132
133        Reviewed by Darin. Landed by Cameron.
134
135        Bug 20272: typo in JavaScriptCore
136        <https://bugs.webkit.org/show_bug.cgi?id=20272>
137
138        Correct the documentation for op_not. (typo)
139        Fix #undef. (typo)
140
141        * VM/Machine.cpp:
142        (KJS::Machine::privateExecute):
143
1442008-08-06  Cameron Zwarich  <cwzwarich@webkit.org>
145
146        Reviewed by Maciej.
147
148        Bug 20286: Load constants all at once instead of using op_load
149        <https://bugs.webkit.org/show_bug.cgi?id=20286>
150
151        Load constants all at once into temporary registers instead of using
152        individual instances of op_load.
153
154        This is a 2.6% speedup on SunSpider.
155
156        * JavaScriptCore.exp:
157        * VM/CodeBlock.cpp:
158        (KJS::CodeBlock::dump):
159        (KJS::CodeBlock::mark):
160        * VM/CodeBlock.h:
161        * VM/CodeGenerator.cpp:
162        (KJS::CodeGenerator::CodeGenerator):
163        (KJS::CodeGenerator::newTemporary):
164        (KJS::CodeGenerator::addConstant):
165        (KJS::CodeGenerator::addUnexpectedConstant):
166        (KJS::CodeGenerator::emitLoad):
167        (KJS::CodeGenerator::emitUnexpectedLoad):
168        (KJS::CodeGenerator::emitNewError):
169        * VM/CodeGenerator.h:
170        * VM/Machine.cpp:
171        (KJS::slideRegisterWindowForCall):
172        (KJS::Machine::unwindCallFrame):
173        (KJS::Machine::throwException):
174        (KJS::Machine::execute):
175        (KJS::Machine::privateExecute):
176        * VM/Machine.h:
177        * VM/Opcode.h:
178        * VM/RegisterID.h:
179        (KJS::RegisterID::RegisterID):
180        (KJS::RegisterID::makeConstant):
181        (KJS::RegisterID::isTemporary):
182        * kjs/NodeInfo.h:
183        * kjs/Parser.cpp:
184        (KJS::Parser::didFinishParsing):
185        * kjs/Parser.h:
186        (KJS::Parser::parse):
187        * kjs/grammar.y:
188        * kjs/nodes.cpp:
189        (KJS::NullNode::emitCode):
190        (KJS::BooleanNode::emitCode):
191        (KJS::NumberNode::emitCode):
192        (KJS::StringNode::emitCode):
193        (KJS::ArrayNode::emitCode):
194        (KJS::DeleteResolveNode::emitCode):
195        (KJS::DeleteValueNode::emitCode):
196        (KJS::VoidNode::emitCode):
197        (KJS::ConstDeclNode::emitCodeSingle):
198        (KJS::ReturnNode::emitCode):
199        (KJS::ScopeNode::ScopeNode):
200        (KJS::ProgramNode::ProgramNode):
201        (KJS::ProgramNode::create):
202        (KJS::EvalNode::EvalNode):
203        (KJS::EvalNode::create):
204        (KJS::FunctionBodyNode::FunctionBodyNode):
205        (KJS::FunctionBodyNode::create):
206        (KJS::FunctionBodyNode::emitCode):
207        * kjs/nodes.h:
208        (KJS::ScopeNode::neededConstants):
209
2102008-08-05  Maciej Stachowiak  <mjs@apple.com>
211
212        Reviewed by Cameron.
213
214        - add fast path for immediates to % operator, as we have for many other math ops
215        
216        This fixes handling for a 0 divisor relative to the last patch. Only an 0.2% speedup on SunSpider but
217        still a 1.4x win on Oliver's prime test.
218        
219        * VM/Machine.cpp:
220        (KJS::Machine::privateExecute):
221
2222008-08-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
223
224        Reviewed by Darin.
225
226        Bug 20293: Crash in JavaScript codegen for eval("const a;")
227        <https://bugs.webkit.org/show_bug.cgi?id=20293>
228
229        Correctly handle constant declarations in eval code with no initializer.
230
231        * kjs/nodes.cpp:
232        (KJS::ConstDeclNode::emitCodeSingle):
233
2342008-08-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
235
236        Reviewed by Oliver.
237
238        Roll out r35555 because of correctness issues.
239
240        * VM/Machine.cpp:
241        (KJS::Machine::privateExecute):
242
2432008-08-05  Maciej Stachowiak  <mjs@apple.com>
244
245        Reviewed by Geoff.
246        
247        - add fast path for immediates to % operator, as we have for many other math ops
248        
249        0.6% speedup on SunSpider. 1.4x speedup on a prime testing torture test that Oliver whipped up.
250
251        * VM/Machine.cpp:
252        (KJS::Machine::privateExecute):
253
2542008-07-31  Oliver Hunt  <oliver@apple.com>
255
256        Reviewed by Cameron Zwarich.
257
258        Bug 19359: JavaScriptCore behaves differently from FF2/3 and IE when handling context in catch statement
259        <https://bugs.webkit.org/show_bug.cgi?id=19359>
260
261        Make our catch behave like Firefox and IE, we do this by using a StaticScopeObject
262        instead of a generic JSObject for the scope node.  We still don't make use of the
263        fact that we have a static scope inside the catch block, so the internal performance
264        of the catch block is not improved, even though technically it would be possible to
265        do so.
266
267        * VM/CodeBlock.cpp:
268        (KJS::CodeBlock::dump):
269        * VM/CodeGenerator.cpp:
270        (KJS::CodeGenerator::emitPushNewScope):
271        * VM/CodeGenerator.h:
272        * VM/Machine.cpp:
273        (KJS::createExceptionScope):
274        (KJS::Machine::privateExecute):
275        * VM/Machine.h:
276        * VM/Opcode.h:
277        * kjs/JSStaticScopeObject.cpp:
278        (KJS::JSStaticScopeObject::toThisObject):
279        (KJS::JSStaticScopeObject::put):
280        * kjs/JSStaticScopeObject.h:
281        * kjs/nodes.cpp:
282        (KJS::TryNode::emitCode):
283
2842008-08-02  Rob Gowin  <robg@gowin.net>
285
286        Reviewed by Eric Seidel.
287
288        Added JavaScriptCore/API/WebKitAvailability to list of files in
289        javascriptcore_h_api.
290
291        * GNUmakefile.am:
292
2932008-08-01  Alexey Proskuryakov  <ap@webkit.org>
294
295        Rubber-stamped by Maciej.
296
297        Remove JSGlobalData::DataInstance. It was only needed when we had per-thread JSGlobalData
298        instances.
299
300        * kjs/JSGlobalData.h:
301
3022008-07-31  Kevin Ollivier <kevino@theolliviers.com>
303
304        Second attempt at Windows/wx build fix. Instead of avoiding inclusion of windows.h,
305        use defines, etc. to avoid conflicts in each affected file. Also, change PLATFORM(WIN)
306        to PLATFORM(WIN_OS) so that other ports using Windows headers get the right impls.
307
308        * VM/SamplingTool.cpp:
309        * wtf/Threading.h:
310
3112008-07-31  Anders Carlsson  <andersca@apple.com>
312
313        Reviewed by Adam.
314
315        Fix Windows build.
316        
317        * kjs/collector.h:
318        * wtf/FastMalloc.cpp:
319
3202008-07-31  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
321
322        Reviewed by Simon.
323
324        Bug 20170: [Qt] missing namespace defines in JavaScriptCore.pro
325        <https://bugs.webkit.org/show_bug.cgi?id=20170>
326
327        * JavaScriptCore.pro: Added missing define.
328
3292008-07-31  Alexey Proskuryakov  <ap@webkit.org>
330
331        Rubber-stamped by Maciej.
332
333        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
334        call sites now).
335
336        * API/JSBase.cpp:
337        (JSEvaluateScript):
338        (JSCheckScriptSyntax):
339        (JSGarbageCollect):
340        * API/JSCallbackConstructor.cpp:
341        (KJS::constructJSCallback):
342        * API/JSCallbackFunction.cpp:
343        (KJS::JSCallbackFunction::call):
344        * API/JSCallbackObjectFunctions.h:
345        (KJS::::init):
346        (KJS::::getOwnPropertySlot):
347        (KJS::::put):
348        (KJS::::deleteProperty):
349        (KJS::::construct):
350        (KJS::::hasInstance):
351        (KJS::::call):
352        (KJS::::getPropertyNames):
353        (KJS::::toNumber):
354        (KJS::::toString):
355        (KJS::::staticValueGetter):
356        (KJS::::callbackGetter):
357        * API/JSContextRef.cpp:
358        (JSGlobalContextCreateInGroup):
359        (JSGlobalContextRetain):
360        (JSGlobalContextRelease):
361        * API/JSObjectRef.cpp:
362        (JSObjectMake):
363        (JSObjectMakeFunctionWithCallback):
364        (JSObjectMakeConstructor):
365        (JSObjectMakeFunction):
366        (JSObjectHasProperty):
367        (JSObjectGetProperty):
368        (JSObjectSetProperty):
369        (JSObjectGetPropertyAtIndex):
370        (JSObjectSetPropertyAtIndex):
371        (JSObjectDeleteProperty):
372        (JSObjectCallAsFunction):
373        (JSObjectCallAsConstructor):
374        (JSObjectCopyPropertyNames):
375        (JSPropertyNameArrayRelease):
376        (JSPropertyNameAccumulatorAddName):
377        * API/JSStringRef.cpp:
378        (JSStringRelease):
379        * API/JSValueRef.cpp:
380        (JSValueIsEqual):
381        (JSValueIsInstanceOfConstructor):
382        (JSValueMakeNumber):
383        (JSValueMakeString):
384        (JSValueToNumber):
385        (JSValueToStringCopy):
386        (JSValueToObject):
387        (JSValueProtect):
388        (JSValueUnprotect):
389        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
390        * GNUmakefile.am:
391        * JavaScriptCore.exp:
392        * JavaScriptCore.order:
393        * JavaScriptCore.pri:
394        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
395        * JavaScriptCore.xcodeproj/project.pbxproj:
396        * JavaScriptCoreSources.bkl:
397        * kjs/AllInOneFile.cpp:
398        * kjs/JSGlobalData.cpp:
399        (KJS::JSGlobalData::JSGlobalData):
400        * kjs/JSGlobalData.h:
401        * kjs/JSGlobalObject.cpp:
402        (KJS::JSGlobalObject::~JSGlobalObject):
403        (KJS::JSGlobalObject::init):
404        * kjs/JSLock.cpp: Removed.
405        * kjs/JSLock.h: Removed.
406        * kjs/Shell.cpp:
407        (functionGC):
408        (jscmain):
409        * kjs/collector.cpp:
410        (KJS::Heap::~Heap):
411        (KJS::Heap::heapAllocate):
412        (KJS::Heap::setGCProtectNeedsLocking):
413        (KJS::Heap::protect):
414        (KJS::Heap::unprotect):
415        (KJS::Heap::collect):
416        * kjs/identifier.cpp:
417        * kjs/interpreter.cpp:
418        (KJS::Interpreter::checkSyntax):
419        (KJS::Interpreter::evaluate):
420
4212008-07-31  Alexey Proskuryakov  <ap@webkit.org>
422
423        Rubber-stamped by Oliver Hunt.
424
425        Fix the Mac project to not display "test/" as part of file name for tests.
426
427        * JavaScriptCore.xcodeproj/project.pbxproj:
428
4292008-07-31  Eric Seidel  <eric@webkit.org>
430
431        Reviewed by Alexey Proskuryakov.
432        
433        Rename USE(MULTIPLE_THREADS) to ENABLE(JSC_MULTIPLE_THREADS)
434        to better match the use/enable pattern (and better describe
435        the usage of the feature in question.)
436        
437        I also fixed a couple other ENABLE_ macros to be pre-processor
438        definition override-able to match the rest of the ENABLE_ macros
439        since it seems to be our convention that build systems can set
440        ENABLE_ macros in Makefiles.
441
442        * kjs/InitializeThreading.cpp:
443        (KJS::initializeThreadingOnce):
444        * kjs/JSGlobalData.cpp:
445        (KJS::JSGlobalData::JSGlobalData):
446        (KJS::JSGlobalData::~JSGlobalData):
447        * kjs/MathObject.cpp:
448        * kjs/collector.cpp:
449        (KJS::Heap::Heap):
450        (KJS::Heap::~Heap):
451        (KJS::allocateBlock):
452        (KJS::Heap::markStackObjectsConservatively):
453        * kjs/collector.h:
454        * kjs/dtoa.cpp:
455        (KJS::pow5mult):
456        (KJS::rv_alloc):
457        (KJS::freedtoa):
458        (KJS::dtoa):
459        * wtf/FastMalloc.cpp:
460        * wtf/Platform.h:
461        * wtf/RefCountedLeakCounter.cpp:
462
4632008-07-30  Eric Seidel  <eric@webkit.org>
464
465        Reviewed by Mark Rowe.
466        
467        Try to clean up our usage of USE(MULTIPLE_THREADS) vs. USE(PTHREADS) a little.
468        It looks like JSC assumes that if MULTIPLE_THREADS is defined, then pthreads will always be available
469        I'm not sure that's always the case for gtk, certainly not for Windows.  We should eventually go back
470        and fix wtf/Threading.h to cover all these cases some day.
471
472        * kjs/JSLock.cpp:
473        * kjs/collector.h:
474        * wtf/Platform.h:
475
4762008-07-30  Eric Seidel  <eric@webkit.org>
477
478        Reviewed by Oliver.
479        
480        MSVC warns when structs are called classes or vice versa.
481        Make all the source refer to JSGlobalData as a class.
482
483        * kjs/CommonIdentifiers.h:
484        * kjs/JSGlobalData.h:
485        * kjs/Parser.h:
486        * kjs/lexer.h:
487
4882008-07-30  Alexey Proskuryakov  <ap@webkit.org>
489
490        Reviewed by Geoff Garen.
491
492        Add consistency checks to UString to document and enforce its design.
493
494        * kjs/ustring.cpp:
495        (KJS::UString::Rep::create):
496        (KJS::UString::Rep::destroy):
497        (KJS::UString::Rep::checkConsistency):
498        (KJS::UString::expandCapacity):
499        (KJS::UString::expandPreCapacity):
500        (KJS::UString::UString):
501        (KJS::UString::spliceSubstringsWithSeparators):
502        (KJS::UString::append):
503        * kjs/ustring.h:
504        (KJS::UString::Rep::checkConsistency):
505
5062008-07-30  Gavin Barraclough  <barraclough@apple.com>
507
508        Reviewed by Geoff Garen.
509
510        Fixes for Windows and non-AllInOne file build with SamplingTool, plus review fixes.
511
512        * GNUmakefile.am:              Adding SamplingTool.cpp to build.
513        * JavaScriptCore.exp:          Export hooks to init & control SamplingTool.
514        * JavaScriptCore.pri:          Adding SamplingTool.cpp to build.
515        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Adding SamplingTool.cpp to build.
516        * JavaScriptCore.xcodeproj/project.pbxproj: Adding SamplingTool.cpp to build.
517        * JavaScriptCoreSources.bkl:   Adding SamplingTool.cpp to build.
518        * VM/Machine.cpp:              MACHINE_SAMPLING_callingNativeFunction renamed MACHINE_SAMPLING_callingHostFunction
519        * VM/Machine.h:
520        * VM/Opcode.cpp:               SamplingTool moved to SamplingTool.cpp/.h, opcodeNames generated from FOR_EACH_OPCODE_ID.
521        * VM/Opcode.h:
522        * VM/SamplingTool.cpp:         Added .cpp/.h for SamplingTool.
523        * VM/SamplingTool.h:
524        * kjs/Shell.cpp:               Switched SAMPLING_TOOL_ENABLED to ENABLE_SAMPLING_TOOL.
525        * wtf/Platform.h:              Added ENABLE_SAMPLING_TOOL config option.
526        * kjs/nodes.cpp:               Header include to fix non-AllInOne builds.
527
5282008-07-30  Ariya Hidayat  <ariya.hidayat@trolltech.com>
529
530        Reviewed by Alexey Proskuryakov.
531
532        Fix compilation without multi-threading support.
533
534        * kjs/collector.cpp:
535        (KJS::Heap::Heap):
536
5372008-07-30  Anders Carlsson  <andersca@apple.com>
538        
539        Add WebKitAvailability.h forwarding header.
540        
541        * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added.
542
5432008-07-30  Anders Carlsson  <andersca@apple.com>
544
545        Fix the else.
546        
547        * API/WebKitAvailability.h:
548
5492008-07-30  Anders Carlsson  <andersca@apple.com>
550
551        * API/WebKitAvailability.h:
552        Fix Windows (and other non-Mac builds).
553        
554        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
555        Add WebKitAvailability.h to the project.
556
5572008-07-30  Anders Carlsson  <andersca@apple.com>
558
559        One step closer towards fixing the Windows build.
560        
561        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
562        Make sure to copy WebKitAvailability.h
563
5642008-07-29  Gavin Barraclough  <barraclough@apple.com>
565
566        Reviewed by Geoff Garen.
567
568        Bug 20209: Atomize constant strings
569        <https://bugs.webkit.org/show_bug.cgi?id=20209>
570
571        Prevents significant performance degradation seen when a script contains multiple
572        identical strings that are used as keys to identify properties on objects.
573
574        No performance change on SunSpider.
575
576        * kjs/nodes.cpp: Atomize constant strings.
577
5782008-07-30  Oliver Hunt  <oliver@apple.com>
579
580        Reviewed by Alexey Proskuryakov.
581
582        <rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the global object
583
584        In an attempt to remove the branch I just added to KJS::depth I
585        used the existence of a Variable Object at a point in the scope
586        chain as an indicator of function or global scope activation.
587        However this assumption results in incorrect behaviour if the
588        global object is injected into the scope chain with 'with'.
589
590        * VM/Machine.cpp:
591        (KJS::depth):
592
5932008-07-30  Alexey Proskuryakov  <ap@webkit.org>
594
595        Reviewed by Geoff Garen.
596
597        Don't call JSGarbageCollect() on a released context.
598
599        * API/testapi.c: (main):
600
6012008-07-29  Alexey Proskuryakov  <ap@webkit.org>
602
603        Reviewed by Geoff Garen.
604
605        Implement JSContextGroup APIs to make concurrent execution possible for
606        JavaScriptCore clients.
607
608        This changes the behavior of JSGlobalContextCreate(), so that it now uses a private context
609        group for each context, making JSlock implicit locking unnecessary.
610
611        * API/JSContextRef.h:
612        * API/JSContextRef.cpp:
613        (JSContextGroupCreate):
614        (JSContextGroupRetain):
615        (JSContextGroupRelease):
616        (JSGlobalContextCreate):
617        (JSGlobalContextCreateInGroup):
618        (JSGlobalContextRelease):
619        (JSContextGetGroup):
620        Added new methods. JSGlobalContextCreate() calls JSGlobalContextCreateInGroup() now.
621
622        * API/APICast.h: (toJS): (toRef): Added converters for JSContextGroupRef.
623        * API/JSBase.cpp: (JSGarbageCollect): JSGarbageCollect(0) is now a no-op, and the passed in
624        context is actually used.
625
626        * API/JSBase.h: Aded a typedef for JSContextGroupRef. Updated documentation for
627        JSGarbageCollect().
628
629        * JavaScriptCore.exp: Removed JSGlobalData::sharedInstance().
630
631        * kjs/JSGlobalData.cpp:
632        * kjs/JSGlobalData.h:
633        Removed support for JSGlobalData shared instance. JSGlobalData::isSharedInstance member
634        variable still remains, to be deleted in a followup patch.
635
636        * kjs/JSLock.cpp: (KJS::JSLock::JSLock): Disabled JSLock, to be deleted in a follow-up patch.
637        
638        * kjs/collector.cpp:
639        (KJS::Heap::markOtherThreadConservatively): Removed an assertion that referenced
640        JSGlobalData::sharedInstance.
641
642        * kjs/collector.h: Made Heap destructor public, so that JSContextRelease can use it.
643
6442008-07-29  Alexey Proskuryakov  <ap@webkit.org>
645
646        Reviewed by Geoff Garen.
647
648        Fix a leak of ThreadRegistrar objects.
649
650        As the heap is usually deleted when registered threads still exist, ThreadSpecific doesn't
651        have a chance to clean up per-thread object. Switched to native pthread calls, storing a
652        plain pointer that doesn't require cleanup.
653
654        * kjs/collector.cpp:
655        (KJS::PlatformThread::PlatformThread):
656        (KJS::Heap::Thread::Thread):
657        (KJS::Heap::Heap):
658        (KJS::Heap::~Heap):
659        (KJS::Heap::registerThread):
660        (KJS::Heap::unregisterThread):
661        * kjs/collector.h:
662
6632008-07-29  Alexey Proskuryakov  <ap@webkit.org>
664
665        Reviewed by Sam Weinig.
666
667        https://bugs.webkit.org/show_bug.cgi?id=20169
668        Memory allocated with fastMalloc is freed with delete
669
670        * VM/JSPropertyNameIterator.cpp:
671        (KJS::JSPropertyNameIterator::invalidate): Free the array properly.
672        (KJS::JSPropertyNameIterator::~JSPropertyNameIterator): Delete the array by calling
673        invalidate().
674
6752008-07-29  Mark Rowe  <mrowe@apple.com>
676
677        Attempt to fix the Qt build.
678
679        * wtf/ThreadingQt.cpp: Add the extra argument to createThread.
680
6812008-07-29  Adam Roben  <aroben@apple.com>
682
683        Change Vector::find to return an index instead of an iterator
684
685        Indices are more natural than iterators when working with Vector.
686
687        Reviewed by John Sullivan.
688
689        * wtf/Vector.h:
690        (WTF::Vector::find): Changed to iterate the Vector manually and return
691        the index of the found item, rather than an iterator. When the item
692        could not be found, we return WTF::notFound.
693
6942008-07-29  Adam Roben  <aroben@apple.com>
695
696        Windows build fix
697
698        * wtf/ThreadingWin.cpp:
699        (WTF::setThreadName): Move a misplaced assertion to here...
700        (WTF::createThread): ...from here.
701
7022008-07-29  Adam Roben  <aroben@apple.com>
703
704        Add support for setting thread names on Windows
705
706        These thread names make it much easier to identify particular threads
707        in Visual Studio's Threads panel.
708
709        WTF::createThread now takes a const char* representing the thread's
710        name. On Windows, we throw a special exception to set this string as
711        the thread's name. Other platforms do nothing with this name for now.
712
713        Reviewed by Anders Carlsson.
714
715        * JavaScriptCore.exp: Export the new version of createThread that
716        takes 3 arguments (the old one continues to be exported for backward
717        compatibility).
718        * wtf/Threading.h: Add a threadName argument to createThread.
719
720        * wtf/ThreadingGtk.cpp:
721        (WTF::createThread):
722        * wtf/ThreadingNone.cpp:
723        (WTF::createThread):
724        Updated for function signature change.
725
726        * wtf/ThreadingPthreads.cpp:
727        (WTF::createThread): Updated for function signature change. We keep
728        around the old 2-argument version of createThread for backward
729        compatibility.
730
731        * wtf/ThreadingWin.cpp:
732        (WTF::setThreadName): Added. This function's implementation came from
733        MSDN.
734        (WTF::initializeThreading): Set the name of the main thread.
735        (WTF::createThread): Call setThreadName. We keep around the old
736        2-argument version of createThread for backward compatibility.
737
7382008-07-29  Alexey Proskuryakov  <ap@webkit.org>
739
740        Reviewed by Oliver Hunt.
741
742        Store UString::Rep::isStatic bit in identifierTable pointer instead of reportedCost for
743        slightly nicer code and a 0.5% SunSpider improvement.
744
745        * API/JSClassRef.cpp:
746        (OpaqueJSClass::~OpaqueJSClass):
747        (OpaqueJSClassContextData::OpaqueJSClassContextData):
748        * API/JSStringRef.cpp:
749        (JSStringRelease):
750        * kjs/PropertyNameArray.cpp:
751        (KJS::PropertyNameArray::add):
752        * kjs/identifier.cpp:
753        (KJS::IdentifierTable::~IdentifierTable):
754        (KJS::IdentifierTable::add):
755        (KJS::Identifier::addSlowCase):
756        (KJS::Identifier::remove):
757        * kjs/identifier.h:
758        (KJS::Identifier::add):
759        * kjs/ustring.cpp:
760        (KJS::):
761        (KJS::UString::Rep::create):
762        (KJS::UString::Rep::destroy):
763        * kjs/ustring.h:
764        (KJS::UString::Rep::identifierTable):
765        (KJS::UString::Rep::setIdentifierTable):
766        (KJS::UString::Rep::isStatic):
767        (KJS::UString::Rep::setStatic):
768        (KJS::UString::cost):
769
7702008-07-28  Geoffrey Garen  <ggaren@apple.com>
771
772        Reviewed by Sam Weinig.
773
774        Renamed "ConstructTypeNative" => "ConstructTypeHost".
775        
7762008-07-26  Mark Rowe  <mrowe@apple.com>
777
778        Speculative fix for the wx build.
779
780        * JavaScriptCoreSources.bkl:  Add JSStaticScopeObject.cpp to the list of source files.
781
7822008-07-25  Oliver Hunt  <oliver@apple.com>
783
784        RS=Cameron Zwarich.
785
786        Whoops, forgot to save style correction.
787
788        * kjs/JSStaticScopeObject.h:
789
7902008-07-25  Oliver Hunt  <oliver@apple.com>
791
792        Reviewed by Cameron Zwarich.
793
794        Bug 19718: Named anonymous functions are slow accessing global variables
795        <https://bugs.webkit.org/show_bug.cgi?id=19718>
796
797        To fix this we switch over to an activation-like scope object for
798        on which we attach the function name property, and add logic to 
799        prevent cross scope assignment to read only properties.
800
801        * GNUmakefile.am:
802        * JavaScriptCore.pri:
803        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
804        * JavaScriptCore.xcodeproj/project.pbxproj:
805        * VM/CodeGenerator.cpp:
806        (KJS::CodeGenerator::findScopedProperty):
807        (KJS::CodeGenerator::emitResolve):
808        * VM/CodeGenerator.h:
809        * kjs/AllInOneFile.cpp:
810        * kjs/JSStaticScopeObject.cpp: Added.
811        (KJS::JSStaticScopeObject::putWithAttributes):
812        (KJS::JSStaticScopeObject::isDynamicScope):
813        (KJS::JSStaticScopeObject::~JSStaticScopeObject):
814        (KJS::JSStaticScopeObject::getOwnPropertySlot):
815        * kjs/JSStaticScopeObject.h: Added.
816        (KJS::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData):
817        (KJS::JSStaticScopeObject::JSStaticScopeObject):
818        * kjs/nodes.cpp:
819        (KJS::FunctionCallResolveNode::emitCode):
820        (KJS::PostfixResolveNode::emitCode):
821        (KJS::PrefixResolveNode::emitCode):
822        (KJS::ReadModifyResolveNode::emitCode):
823        (KJS::AssignResolveNode::emitCode):
824        (KJS::FuncExprNode::makeFunction):
825
8262008-07-25  kevino  <kevino@theolliviers.com>
827
828        wx build fix for Win.
829        
830        On wx/Win, including windows.h in Threading.h causes multiply-defined symbol errors
831        for libjpeg and wx, and also wx needs to include windows.h itself first for wx
832        includes to work right. So until we can find a better solution to this problem,
833        on wx, we work around the need to include windows.h here.
834
835        * wtf/Threading.h:
836
8372008-07-25  Adam Roben  <aroben@apple.com>
838
839        Windows build fix
840
841        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add API/ to the
842        include path.
843
8442008-07-25  Simon Hausmann  <hausmann@webkit.org>
845
846        Fix the build of jsc on Qt/Windows, make sure os-win32 is in the
847        include search path (added by WebKit.pri).
848
849        * kjs/jsc.pro:
850
8512008-07-25  Alexey Proskuryakov  <ap@webkit.org>
852
853        Reviewed by Simon Hausmann.
854
855        Move JavaScriptCore API tests into a subdirectory of their own to avoid header name
856        conflicts and developer confusion.
857
858        * API/JSNode.c: Removed.
859        * API/JSNode.h: Removed.
860        * API/JSNodeList.c: Removed.
861        * API/JSNodeList.h: Removed.
862        * API/Node.c: Removed.
863        * API/Node.h: Removed.
864        * API/NodeList.c: Removed.
865        * API/NodeList.h: Removed.
866        * API/minidom.c: Removed.
867        * API/minidom.html: Removed.
868        * API/minidom.js: Removed.
869        * API/testapi.c: Removed.
870        * API/testapi.js: Removed.
871        * API/tests: Added.
872        * API/tests/JSNode.c: Copied from JavaScriptCore/API/JSNode.c.
873        * API/tests/JSNode.h: Copied from JavaScriptCore/API/JSNode.h.
874        * API/tests/JSNodeList.c: Copied from JavaScriptCore/API/JSNodeList.c.
875        * API/tests/JSNodeList.h: Copied from JavaScriptCore/API/JSNodeList.h.
876        * API/tests/Node.c: Copied from JavaScriptCore/API/Node.c.
877        * API/tests/Node.h: Copied from JavaScriptCore/API/Node.h.
878        * API/tests/NodeList.c: Copied from JavaScriptCore/API/NodeList.c.
879        * API/tests/NodeList.h: Copied from JavaScriptCore/API/NodeList.h.
880        * API/tests/minidom.c: Copied from JavaScriptCore/API/minidom.c.
881        * API/tests/minidom.html: Copied from JavaScriptCore/API/minidom.html.
882        * API/tests/minidom.js: Copied from JavaScriptCore/API/minidom.js.
883        * API/tests/testapi.c: Copied from JavaScriptCore/API/testapi.c.
884        * API/tests/testapi.js: Copied from JavaScriptCore/API/testapi.js.
885        * GNUmakefile.am:
886        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
887        * JavaScriptCore.xcodeproj/project.pbxproj:
888
8892008-07-25  Simon Hausmann  <hausmann@webkit.org>
890
891        Prospective WX build fix, add JavaScriptCore/API to the include search
892        path.
893
894        * jscore.bkl:
895
8962008-07-25  Simon Hausmann  <hausmann@webkit.org>
897
898        Rubber-stamped by Lars.
899
900        Fix the build on Windows. operator new for ArgList is implemented using fastMalloc()
901        but operator delete was not implemented. Unfortunately MSVC decides to call/reference
902        the function, so a simple implementation using fastFree() fixes the build.
903
904        * kjs/ArgList.h:
905        (KJS::ArgList::operator delete):
906
9072008-07-25  Simon Hausmann  <hausmann@webkit.org>
908
909        Discussed with and rubber-stamped by Lars.
910
911        Fix the build system for the Qt port.
912
913        Recent JavaScriptCore changes require the addition of JavaScriptCore/API to the
914        include search path. With a build process that combines JavaScriptCore and
915        WebCore in one build process/Makefile the existance of
916        JavaScriptCore/API/Node.h and WebCore/dom/Node.h causes include conflicts.
917
918        This commit solves this by introducing a separate build of JavaScriptCore into
919        a static library.
920
921        As a result of the split-up a race-condition due to broken dependencies of
922        regular source files to header files of generated sources showed up very
923        frequently when doing parallel builds (which the buildbot does). This commit at
924        the same time tries to address the dependency problem by making the
925        addExtraCompiler() function also generate a pseudo extra compiler that
926        represents the header file output, so that qmake is aware of the creation of
927        the header file for dependency calculation.
928
929        At the same time I removed a lot of cruft from the pro files to ease maintenance.
930
931        * JavaScriptCore.pri:
932        * JavaScriptCore.pro: Added.
933        * kjs/jsc.pro:
934
9352008-07-24  Geoffrey Garen  <ggaren@apple.com>
936
937        Reviewed by Maciej Stachowiak.
938        
939        Fixed a strict aliasing violation, which caused hash tables with floating
940        point keys not to find items that were indeed in the tables
941        (intermittently, and only in release builds, of course).
942        
943        SunSpider reports no change.
944        
945        This bug doesn't seem to affect any existing code, but it causes obvious
946        crashes in some new code I'm working on.
947
948        * wtf/HashFunctions.h:
949        (WTF::FloatHash::hash): Use a union when punning between a float / double
950        and an unsigned (bucket of bits). With strict aliasing enabled, unions
951        are the only safe way to do this kind of type punning.
952
953        * wtf/HashTable.h: When rehashing, ASSERT that the item we just added to
954        the table is indeed in the table. In the buggy case described above, this
955        ASSERT fires.
956
9572008-07-24  Oliver Hunt  <oliver@apple.com>
958
959        Reviewed by Alexey Proskuryakov.
960
961        Bug 20142: REGRESSION(r35245): /=/ weirdness
962        <https://bugs.webkit.org/show_bug.cgi?id=20142>
963
964        When adding all the meta data needed for exception error messages
965        I accidentally clobbered the handling of regex beginning with /=.
966
967        * kjs/grammar.y:
968
9692008-07-23  Alp Toker  <alp@nuanti.com>
970
971        Build fix after r35293: Add API/ to the include path.
972
973        * GNUmakefile.am:
974
9752008-07-23  Adam Roben  <aroben@apple.com>
976
977        Windows build fixes
978
979        Build fix after r35293:
980
981        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add API/
982        to the include path.
983
984        Build fix after r35305:
985
986        * VM/Machine.cpp:
987        * VM/Machine.h:
988        * VM/Opcode.cpp:
989        * VM/Opcode.h:
990        Completely compile out all sampler-related code when
991        SAMPLING_TOOL_ENABLED is 0. The sampler code can't be compiled 1) on
992        non-AllInOne configurations due to circular header dependencies, and
993        2) on platforms that don't have a usleep() function, such as Windows.
994
9952008-07-23  Oliver Hunt  <oliver@apple.com>
996
997        Reviewed by Geoff Garen and Sam Weinig.
998
999        Improve switch performance.
1000
1001        Improve switch performance by converting to a hashmap based jump
1002        table to avoid the sequence of dispatches that would otherwise be
1003        needed.  This results in a 9-19x performance win for string switches
1004        based on ad hoc testing, and a 6x improvement for integer switch
1005        statements.  SunSpider reports a 1.2% progression.
1006
1007        * VM/CodeBlock.cpp:
1008        (KJS::CodeBlock::dump):
1009        (KJS::SimpleJumpTable::offsetForValue):
1010        * VM/CodeBlock.h:
1011        * VM/CodeGenerator.cpp:
1012        (KJS::CodeGenerator::beginSwitch):
1013        (KJS::prepareJumpTableForImmediateSwitch):
1014        (KJS::prepareJumpTableForCharacterSwitch):
1015        (KJS::prepareJumpTableForStringSwitch):
1016        (KJS::CodeGenerator::endSwitch):
1017        * VM/CodeGenerator.h:
1018        * VM/Machine.cpp:
1019        (KJS::offsetForStringSwitch):
1020        (KJS::Machine::privateExecute):
1021        * VM/Opcode.cpp:
1022        (KJS::):
1023        * VM/Opcode.h:
1024        * kjs/JSImmediate.h:
1025        * kjs/nodes.cpp:
1026        (KJS::):
1027        (KJS::processClauseList):
1028        (KJS::CaseBlockNode::tryOptimisedSwitch):
1029        (KJS::CaseBlockNode::emitCodeForBlock):
1030        * kjs/nodes.h:
1031        (KJS::SwitchInfo::):
1032
10332008-07-23  Gavin Barraclough  <barraclough@apple.com>
1034
1035        Reviewed by Geoff Garen.
1036
1037        Sampling tool to analyze cost of instruction execution and identify hot regions of JS code.
1038        Enable Switches by setting SAMPLING_TOOL_ENABLED in Opcode.h.
1039
1040        * JavaScriptCore.exp: Export symbols for Shell.cpp.
1041        * VM/Machine.cpp:     Added sampling hooks.
1042        * VM/Machine.h:       Machine contains a pointer to a sampler, when sampling.
1043        * VM/Opcode.cpp:      Tool implementation.
1044        * VM/Opcode.h:        Tool declaration.
1045        * kjs/Shell.cpp:      Initialize the sampler, if enabled.
1046        * kjs/nodes.cpp:      Added sampling hooks.
1047
10482008-07-23  Gabor Loki  <loki@inf.u-szeged.hu>
1049
1050        Bug 20097: [Qt] 20% Sunspider slow-down
1051
1052        <https://bugs.webkit.org/show_bug.cgi?id=20097>
1053
1054        Reviewed by Simon Hausmann.
1055
1056        * kjs/jsc.pro: Added missing NDEBUG define for release builds.
1057
10582008-07-23  Alexey Proskuryakov  <ap@webkit.org>
1059
1060        Reviewed by Geoff Garen.
1061
1062        JSClassRef is created context-free, but gets infatuated with the first context it sees.
1063
1064        The implicit API contract is that JSClassRef can be used with any context on any thread.
1065        This no longer worked, because UStrings in the class were turned into per-context
1066        identifiers, and the cached JSObject prototype was tied to JSGlobalData, too.
1067
1068        * API/JSClassRef.h: Made a separate struct for context-dependent parts of OpaqueJSClass.
1069        * API/JSClassRef.cpp:
1070        (OpaqueJSClass::OpaqueJSClass): Updated for renames and changed member variable order.
1071        (OpaqueJSClass::~OpaqueJSClass): Assert that string members are not identifiers.
1072        (clearReferenceToPrototype): Update for the new reference location.
1073        (OpaqueJSClassContextData::OpaqueJSClassContextData): Make a deep copy of all strings.
1074        (OpaqueJSClass::contextData): Added a function that finds the per-context part of
1075        OpaqueJSClass in JSGlobalData, or creates it if not found.
1076        (OpaqueJSClass::className): Always make a deep copy. Callers of this function do not have
1077        a way to access JSGlobalData, so a per-context copy could not be made.
1078        (OpaqueJSClass::staticValues): Updated for new data location.
1079        (OpaqueJSClass::staticFunctions): Ditto.
1080        (OpaqueJSClass::prototype): Changed to take an internal type for consistency.
1081
1082        * kjs/JSGlobalData.cpp:
1083        (KJS::JSGlobalData::JSGlobalData):
1084        (KJS::JSGlobalData::~JSGlobalData):
1085        * kjs/JSGlobalData.h:
1086        Keep a HashMap to access per-context JSClass data given a pointr to the shared part.
1087
1088        * API/JSCallbackObjectFunctions.h:
1089        (KJS::::className):
1090        (KJS::::getOwnPropertySlot):
1091        (KJS::::put):
1092        (KJS::::deleteProperty):
1093        (KJS::::getPropertyNames):
1094        (KJS::::staticValueGetter):
1095        (KJS::::staticFunctionGetter):j
1096        Use function accessors instead of accessing OpaqueJSClass members directly.
1097
1098        * API/JSContextRef.cpp: (JSGlobalContextCreate): Updated for the change in
1099        OpaqueJSClass::prototype() argument type.
1100
1101        * API/JSObjectRef.cpp:
1102        (JSObjectMake): Updated for the change in OpaqueJSClass::prototype() argument type.
1103        (JSObjectMakeConstructor): Ditto.
1104
11052008-07-23  Alexey Proskuryakov  <ap@webkit.org>
1106
1107        Build fix.
1108
1109        * kjs/ArgList.h: (KJS::ArgList::operator new): removed an extraneous "ArgList::" inside the
1110        class definition.
1111
11122008-07-22  Geoffrey Garen  <ggaren@apple.com>
1113
1114        Reviewed by Oliver Hunt and Sam Weinig.
1115
1116        Next step toward putting doubles in registers: Prepare the Register class
1117        and its clients for registers that don't contain JSValue*s.
1118        
1119        This means a few things:
1120        
1121        1. Register::jsValue() clients, including ArgList clients, must now supply
1122        an ExecState* when accessing an entry in an ArgList, in case the entry
1123        will need to create a JSValue* on the fly.
1124        
1125        2. Register clients that definitely don't want to create a JSValue* on
1126        the fly now use different APIs: getJSValue() for clients that know
1127        the register contains a JSValue*, and v() for clients who just want a
1128        void*.
1129        
1130        3. I had to change some headers around in order to resolve dependency
1131        problems created by using a Register in the ArgList header.
1132        
1133        SunSpider reports no change.
1134        
11352008-07-22  Gavin Barraclough  <barraclough@apple.com>
1136
1137        Reviewed by Alexey Proskuryakov.
1138
1139        Prevent integer overflow when reallocating storage vector for arrays.
1140
1141        Sunspider reports 1.005x as fast (no change expected).
1142
1143        * kjs/JSArray.cpp:
1144
11452008-07-21  Mark Rowe  <mrowe@apple.com>
1146
1147        Reviewed by Sam Weinig.
1148
1149        <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.
1150
1151        * Configurations/Version.xcconfig:
1152        * Info.plist:
1153
11542008-07-21  Adam Roben  <aroben@apple.com>
1155
1156        Add Vector::find
1157
1158        This is a convenience wrapper around std::find.
1159
1160        Reviewed by Anders Carlsson.
1161
1162        * wtf/Vector.h:
1163
11642008-07-19  Oliver Hunt  <oliver@apple.com>
1165
1166        Reviewed by Cameron Zwarich.
1167
1168        Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression
1169        <https://bugs.webkit.org/show_bug.cgi?id=20104>
1170
1171        To make this correct we make the dot and bracket assign nodes emit the information to indicate
1172        the failure range is the dot/bracket accessor.
1173
1174        * kjs/grammar.y:
1175
11762008-07-18  Steve Falkenburg  <sfalken@apple.com>
1177
1178        Windows build fix.
1179
1180        * kjs/JSGlobalObjectFunctions.cpp:
1181        (KJS::isStrWhiteSpace):
1182
11832008-07-18  Steve Falkenburg  <sfalken@apple.com>
1184
1185        Windows build fix.
1186
1187        * kjs/nodes.h:
1188        (KJS::ThrowableExpressionData::ThrowableExpressionData):
1189
11902008-07-18  Oliver Hunt  <oliver@apple.com>
1191
1192        Reviewed by Cameron Zwarich.
1193
1194        Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774>
1195        <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text
1196
1197        Add support for decent error messages in JavaScript.  This patch achieves this by providing
1198        ensuring the common errors and exceptions have messages that provide the text of expression
1199        that trigger the exception.  In addition it attaches a number of properties to the exception
1200        object detailing where in the source the expression came from.
1201
1202        * JavaScriptCore.exp:
1203        * VM/CodeBlock.cpp:
1204        (KJS::CodeBlock::lineNumberForVPC):
1205        (KJS::CodeBlock::expressionRangeForVPC): 
1206            Function to recover the expression range for an instruction
1207            that triggered an exception.
1208        * VM/CodeBlock.h:
1209        (KJS::ExpressionRangeInfo::):
1210        (KJS::CodeBlock::CodeBlock):
1211        * VM/CodeGenerator.cpp:
1212        (KJS::CodeGenerator::emitCall):
1213        (KJS::CodeGenerator::emitCallEval):
1214            Emit call needed to be modified so to place the expression range info internally,
1215            as the CodeGenerator emits the arguments nodes itself, rather than the various call
1216            nodes.
1217        * VM/CodeGenerator.h:
1218        (KJS::CodeGenerator::emitExpressionInfo):
1219            Record the expression range info.
1220        * VM/ExceptionHelpers.cpp:
1221        (KJS::createErrorMessage):
1222        (KJS::createInvalidParamError):
1223        (KJS::createUndefinedVariableError):
1224        (KJS::createNotAConstructorError):
1225        (KJS::createNotAFunctionError):
1226        (KJS::createNotAnObjectErrorStub):
1227        (KJS::createNotAnObjectError):
1228            Rewrite all the code for the error messages so that they make use of the newly available
1229            information.
1230        * VM/ExceptionHelpers.h:
1231        * VM/Machine.cpp:
1232        (KJS::isNotObject):  Now needs vPC and codeBlock
1233        (KJS::Machine::throwException):
1234            New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case
1235        (KJS::Machine::privateExecute):
1236        * VM/Machine.h:
1237        * kjs/DebuggerCallFrame.cpp:
1238        (KJS::DebuggerCallFrame::evaluate):
1239        * kjs/Error.cpp:
1240        (KJS::Error::create):
1241        * kjs/Error.h:
1242        * kjs/JSGlobalObjectFunctions.cpp:
1243        * kjs/JSImmediate.cpp:
1244        (KJS::JSImmediate::toObject):
1245        (KJS::JSImmediate::prototype):
1246            My changes to the JSNotAnObject constructor needed to be handled here.
1247        * kjs/JSNotAnObject.h:
1248        (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub):
1249        (KJS::JSNotAnObjectErrorStub::isNull):
1250        (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub):
1251            Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions,
1252            and potentially allow even more detailed error messages in future.
1253        * kjs/JSObject.h:
1254        * kjs/Parser.h:
1255        (KJS::Parser::parse):
1256        * kjs/SourceRange.h:
1257        * kjs/grammar.y:
1258            Large amounts of position propagation.
1259        * kjs/lexer.cpp:
1260        (KJS::Lexer::Lexer):
1261        (KJS::Lexer::shift):
1262        (KJS::Lexer::lex):
1263            The lexer needed a few changes to be able to correctly track token character positions.
1264        * kjs/lexer.h:
1265        * kjs/nodes.cpp:
1266        (KJS::ThrowableExpressionData::emitThrowError):
1267        (KJS::StatementNode::StatementNode):
1268        (KJS::ResolveNode::emitCode):
1269        (KJS::BracketAccessorNode::emitCode):
1270        (KJS::DotAccessorNode::emitCode):
1271        (KJS::NewExprNode::emitCode):
1272        (KJS::EvalFunctionCallNode::emitCode):
1273        (KJS::FunctionCallValueNode::emitCode):
1274        (KJS::FunctionCallResolveNode::emitCode):
1275        (KJS::FunctionCallBracketNode::emitCode):
1276        (KJS::FunctionCallDotNode::emitCode):
1277        (KJS::PostfixResolveNode::emitCode):
1278        (KJS::PostfixBracketNode::emitCode):
1279        (KJS::PostfixDotNode::emitCode):
1280        (KJS::DeleteResolveNode::emitCode):
1281        (KJS::DeleteBracketNode::emitCode):
1282        (KJS::DeleteDotNode::emitCode):
1283        (KJS::PrefixResolveNode::emitCode):
1284        (KJS::PrefixBracketNode::emitCode):
1285        (KJS::PrefixDotNode::emitCode):
1286        (KJS::ThrowableBinaryOpNode::emitCode):
1287        (KJS::ReadModifyResolveNode::emitCode):
1288        (KJS::AssignResolveNode::emitCode):
1289        (KJS::AssignDotNode::emitCode):
1290        (KJS::ReadModifyDotNode::emitCode):
1291        (KJS::AssignBracketNode::emitCode):
1292        (KJS::ReadModifyBracketNode::emitCode):
1293        (KJS::ForInNode::ForInNode):
1294        (KJS::ForInNode::emitCode):
1295        (KJS::WithNode::emitCode):
1296        (KJS::LabelNode::emitCode):
1297        (KJS::ThrowNode::emitCode):
1298        (KJS::ProgramNode::ProgramNode):
1299        (KJS::ProgramNode::create):
1300        (KJS::EvalNode::generateCode):
1301        (KJS::FunctionBodyNode::create):
1302        (KJS::FunctionBodyNode::generateCode):
1303        (KJS::ProgramNode::generateCode):
1304            All of these methods were handling the position information.  
1305            Constructors and create methods were modified to store the information.
1306            All the emitCall implementations listed needed to be updated to actually
1307            record the position information we have so carefully collected.
1308        * kjs/nodes.h:
1309        (KJS::ThrowableExpressionData::ThrowableExpressionData):
1310        (KJS::ThrowableExpressionData::setExceptionSourceRange):
1311        (KJS::ThrowableExpressionData::divot):
1312        (KJS::ThrowableExpressionData::startOffset):
1313        (KJS::ThrowableExpressionData::endOffset):
1314        (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData):
1315        (KJS::ThrowableSubExpressionData::setSubexpressionInfo):
1316        (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
1317        (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
1318            ThrowableExpressionData is just a uniform mechanism for storing the position
1319            information.
1320        (KJS::ResolveNode::):
1321        (KJS::PrePostResolveNode::):
1322        (KJS::ThrowableBinaryOpNode::):
1323        (KJS::WithNode::):
1324
13252008-07-18  Geoffrey Garen  <ggaren@apple.com>
1326
1327        Reviewed by Cameron Zwarich.
1328        
1329        Three renames:
1330        
1331        "CallTypeNative" => "CallTypeHost"
1332        "code" => "byteCode"
1333        "generatedCode" => "generatedByteCode"
1334
13352008-07-18  Geoffrey Garen  <ggaren@apple.com>
1336
1337        Reviewed by Oliver Hunt.
1338        
1339        Optimized <= for immediate number cases.
1340        
1341        SunSpider reports no overall change, but a 10% speedup on access-nsieve.
1342
13432008-07-18  Mark Rowe  <mrowe@apple.com>
1344
1345        Rubber-stamped by Sam Weinig.
1346
1347        Fix some casts added in a previous build fix to match the style used
1348        throughout WebKit.
1349
1350        * VM/Machine.cpp:
1351        (KJS::Machine::initializeCallFrame):
1352        * VM/Register.h:
1353        (KJS::Register::Register):
1354
13552008-07-18  Landry Breuil  <landry@openbsd.org>
1356
1357        Bug 19975: [OpenBSD] Patches to enable build of WebKit
1358
1359        <https://bugs.webkit.org/show_bug.cgi?id=19975>
1360
1361        Reviewed by David Kilzer.
1362
1363        Support for OpenBSD, mostly threading and libm tweaks.
1364
1365        * kjs/collector.cpp: #include <pthread.h>
1366        (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base
1367        * kjs/config.h: OpenBSD also provides <pthread_np.h>
1368        * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h>
1369        (isfinite), (signbit): as long as we don't have those functions provide fallback implementations
1370        * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro
1371
13722008-07-17  Geoffrey Garen  <ggaren@apple.com>
1373
1374        Reviewed by Oliver Hunt.
1375        
1376        Next step toward putting doubles in registers: Store constant pool
1377        entries as registers, not JSValue*s.
1378        
1379        SunSpider reports no change.
1380
13812008-07-17  Geoffrey Garen  <ggaren@apple.com>
1382
1383        Reviewed by John Sullivan and Oliver Hunt.
1384        
1385        A tiny bit of tidying in function call register allocation.
1386        
1387        This patch saves one register when invoking a function expression and/or
1388        a new expression that is stored in a temporary.
1389        
1390        Since it's just one register, I can't make a testcase for it.
1391
1392        * VM/CodeGenerator.cpp:
1393        (KJS::CodeGenerator::emitCall): No need to ref the function we're calling
1394        or its base. We'd like the call frame to overlap with them, if possible.
1395        op_call will read the function and its base before writing the call frame,
1396        so this is safe.
1397
1398        * kjs/nodes.cpp:
1399        (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing,
1400        for the same reasons stated above.
1401        
1402        (KJS::FunctionCallValueNode::emitCode): ditto
1403
14042008-07-17  Steve Falkenburg  <sfalken@apple.com>
1405
1406        Build fix.
1407        
1408        * kjs/InternalFunction.cpp:
1409
14102008-07-17  Sam Weinig  <sam@webkit.org>
1411
1412        Roll out r35199 as it is causing failures on the PPC build.
1413
14142008-07-17  Geoffrey Garen  <ggaren@apple.com>
1415
1416        Reviewed by David Kilzer.
1417        
1418        Fixed https://bugs.webkit.org/show_bug.cgi?id=20067
1419        Support function.name (Firefox extension)
1420        
1421        Pretty straight-forward.
1422
14232008-07-17  Geoffrey Garen  <ggaren@apple.com>
1424
1425        Reviewed by Oliver Hunt.
1426        
1427        Fixed <rdar://problem/6081636> Functions calls use more temporary
1428        registers than necessary
1429        
1430        Holding a reference to the last statement result register caused each
1431        successive statement to output its result to an even higher register.
1432        
1433        Happily, statements don't actually need to return a result register
1434        at all. I hope to make this clearer in a future cleanup patch,
1435        but this change will fix the major bug for now.
1436
1437        * kjs/nodes.cpp:
1438        (KJS::statementListEmitCode):
1439
14402008-07-17  Gavin Barraclough  <barraclough@apple.com>
1441
1442        Reviewed by Sam Weinig.
1443
1444        Merge pre&post dot nodes to simplify the parse tree.
1445        Sunspider results show 0.6% progression (no performance change expected).
1446
1447        * kjs/grammar.y:
1448        * kjs/nodes.cpp:
1449        * kjs/nodes.h:
1450        * kjs/nodes2string.cpp:
1451
14522008-07-17  Gavin Barraclough  <barraclough@apple.com>
1453
1454        Reviewed by Cameron Zwarich.
1455
1456        Merge pre&post resolve nodes to simplify the parse tree.
1457        Sunspider results show no performance change.
1458
1459        * kjs/grammar.y:
1460        * kjs/nodes.cpp:
1461        * kjs/nodes.h:
1462        * kjs/nodes2string.cpp:
1463
14642008-07-17  Gavin Barraclough  <barraclough@apple.com>
1465
1466        Reviewed by Cameron Zwarich.
1467
1468        Merge logical nodes to simplify the parse tree.
1469        Sunspider results show 0.6% progression (no performance change expected).
1470
1471        * kjs/grammar.y:
1472        * kjs/nodes.cpp:
1473        * kjs/nodes.h:
1474        * kjs/nodes2string.cpp:
1475
14762008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
1477
1478        Reviewed by Simon.
1479
1480        Fix MinGW build (broken in r35198) and simplify getLocalTime().
1481
1482        * kjs/DateMath.cpp:
1483        (KJS::getLocalTime):
1484
14852008-07-17  Gavin Barraclough  <barraclough@apple.com>
1486
1487        Reviewed by Sam Weinig.
1488
1489        Merge pre&post bracket nodes to simplify the parse tree.
1490        Sunspider results show no performance change.
1491
1492        * kjs/grammar.y:
1493        * kjs/nodes.cpp:
1494        * kjs/nodes.h:
1495        * kjs/nodes2string.cpp:
1496
14972008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
1498
1499        Reviewed by Simon.
1500
1501        Fix the 32-bit gcc builds, conversion from "long int" to Register is
1502        ambiguous. Explicitly choose the intptr_t constructor.
1503
1504        * VM/Machine.cpp:
1505        (KJS::Machine::initializeCallFrame):
1506        * VM/Register.h:
1507        (KJS::Register::Register):
1508
15092008-07-16  Mark Rowe  <mrowe@apple.com>
1510
1511        Rubber-stamped by Geoff Garen.
1512
1513        Fix JavaScript in 64-bit by using a pointer-sized integer
1514        type in the Register union.  Also includes a rename of
1515        the intType constant to IntType.
1516
1517        * VM/Machine.cpp:
1518        (KJS::Machine::initializeCallFrame):
1519        * VM/Register.h:
1520        (KJS::Register::):
1521        (KJS::Register::Register):
1522
15232008-07-17  Geoffrey Garen  <ggaren@apple.com>
1524
1525        Reviewed by Oliver Hunt.
1526        
1527        First step toward putting doubles in registers: Turned Register into a
1528        proper abstraction layer. It is no longer possible to cast a Register
1529        to a JSValue*, or a Register& to a JSValue*&, or to access the union
1530        inside a Register directly.
1531        
1532        SunSpider reports no change.
1533        
1534        In support of this change, I had to make the following mechanical changes
1535        in a lot of places:
1536        
1537        1. Clients now use explicit accessors to read data out of Registers, and
1538        implicit copy constructors to write data into registers.
1539        
1540        So, assignment that used to look like
1541        
1542            x.u.jsValue = y;
1543        
1544        now looks like
1545        
1546            x = y;
1547            
1548        And access that used to look like
1549        
1550            x = y.u.jsValue;
1551        
1552        now looks like
1553        
1554            x = y.jsValue();
1555
1556        2. I made generic flow control specific in opcodes that made their flow
1557        control generic by treating a Register& as a JSValue*&. This had the
1558        added benefit of removing some exception checking branches from immediate
1559        number code.
1560
1561        3. I beefed up PropertySlot to support storing a Register* in a property
1562        slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut
1563        use this functionality, but I expect more clients to use it in the future.
1564        
1565        4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I
1566        changed ArgList iterator clients to iterate Registers, not JSValue*'s.
1567
15682008-07-16  Ada Chan  <adachan@apple.com>
1569
1570        Fixed build.
1571
1572        * kjs/JSGlobalObject.cpp:
1573
15742008-07-16  Kevin McCullough  <kmccullough@apple.com>
1575
1576        Reviewed by Sam and Geoff.
1577
1578        <rdar://problem/5958840> Navigating to another page while profiler is
1579        attached results in slow JavaScript for all time.
1580
1581        - The UNLIKELY keeps this from being a sunspider performance regression.
1582
1583        * kjs/JSGlobalObject.cpp:
1584        (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated
1585        with this exec state.
1586
15872008-07-16  Sam Weinig  <sam@webkit.org>
1588
1589        Reviewed by Steve Falkenburg.
1590
1591        Replace adopting UString constructor in favor of explicit
1592        static adopt method.
1593
1594        * API/JSStringRefCF.cpp:
1595        (JSStringCreateWithCFString):
1596        * kjs/StringConstructor.cpp:
1597        (KJS::stringFromCharCode):
1598        * kjs/StringPrototype.cpp:
1599        (KJS::stringProtoFuncToLowerCase):
1600        (KJS::stringProtoFuncToUpperCase):
1601        (KJS::stringProtoFuncToLocaleLowerCase):
1602        (KJS::stringProtoFuncToLocaleUpperCase):
1603        * kjs/ustring.cpp:
1604        (KJS::UString::adopt):
1605        * kjs/ustring.h:
1606        (KJS::UString::UString):
1607        (KJS::UString::~UString):
1608
16092008-07-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>
1610
1611        Reviewed by Simon.
1612
1613        http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179
1614        Fix potential crash (on Qt for Windows port) when performing JavaScript date
1615        conversion.
1616
1617        * kjs/DateMath.cpp:
1618        (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e.
1619        localtime_s() instead of localtime() since the latter might crash (on Windows)
1620        given a non-sensible, e.g. NaN, argument.
1621
16222008-07-16  Alexey Proskuryakov  <ap@webkit.org>
1623
1624        Reviewed by Anders and Geoff.
1625
1626        https://bugs.webkit.org/show_bug.cgi?id=20023
1627        Failed assertion in PropertyNameArray.cpp
1628
1629        This is already tested by testapi.
1630
1631        * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier
1632        table to appease PropertyNameArray.
1633
16342008-07-16  Alexey Proskuryakov  <ap@webkit.org>
1635
1636        Reviewed by Geoff.
1637
1638        Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData
1639        objects).
1640
1641        * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData):
1642        * kjs/lookup.cpp: (KJS::HashTable::deleteTable):
1643        * kjs/lookup.h:
1644        * kjs/lexer.cpp: (KJS::Lexer::~Lexer)
1645        HashTable cannot have a destructor, because check-for-global-initializers complains about
1646        having a global constructor then.
1647
16482008-07-16  Alexey Proskuryakov  <ap@webkit.org>
1649
1650        Reviewed by Geoff.
1651
1652        Check pthread_key_create return value.
1653
1654        This check was helpful when debugging a crash in run-webkit-tests --threaded that happened
1655        because JSGlobalData objects were not deleted, and we were running out of pthread keys soon.
1656        It also looks useful for production builds.
1657
1658        * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific):
1659
16602008-07-15  Kevin McCullough  <kmccullough@apple.com>
1661
1662        Reviewed by Geoff.
1663
1664        Rename pageGroupIdentifier to profileGroup to keep mention of a
1665        pageGroup out of JavaScriptCore.
1666
1667        * kjs/JSGlobalObject.cpp:
1668        (KJS::JSGlobalObject::init):
1669        * kjs/JSGlobalObject.h:
1670        (KJS::JSGlobalObject::setProfileGroup):
1671        (KJS::JSGlobalObject::profileGroup):
1672        * profiler/ProfileGenerator.cpp:
1673        (KJS::ProfileGenerator::create):
1674        (KJS::ProfileGenerator::ProfileGenerator):
1675        * profiler/ProfileGenerator.h:
1676        (KJS::ProfileGenerator::profileGroup):
1677        * profiler/Profiler.cpp:
1678        (KJS::Profiler::startProfiling):
1679        (KJS::dispatchFunctionToProfiles):
1680        (KJS::Profiler::willExecute):
1681        (KJS::Profiler::didExecute):
1682
16832008-07-14  Mark Rowe  <mrowe@apple.com>
1684
1685        Reviewed by Sam Weinig.
1686
1687        Fix https://bugs.webkit.org/show_bug.cgi?id=20037
1688        Bug 20037: GCC 4.2 build broken due to strict aliasing violation.
1689
1690        * kjs/ustring.cpp:
1691        (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length.
1692        * kjs/ustring.h:
1693        * profiler/CallIdentifier.h:
1694        (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing.
1695
16962008-07-14  David Hyatt  <hyatt@apple.com>
1697
1698        Fix a crashing bug in ListHashSet's -- operator.  Make sure that end() can be -- by special-casing the null
1699        position.
1700
1701        Reviewed by Maciej
1702
1703        * wtf/ListHashSet.h:
1704        (WTF::ListHashSetConstIterator::operator--):
1705
17062008-07-14  David Hyatt  <hyatt@apple.com>
1707
1708        Buidl fix.  Make sure the second insertBefore method returns a value.
1709
1710        * wtf/ListHashSet.h:
1711        (WTF::::insertBefore):
1712
17132008-07-14  Adam Roben  <aroben@apple.com>
1714
1715        Windows build fix
1716
1717        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the
1718        include path.
1719
17202008-07-14  Alexey Proskuryakov  <ap@webkit.org>
1721
1722        Reviewed by Kevin McCullough.
1723
1724        Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
1725        global data.
1726
1727        * JavaScriptCore.exp:
1728        * kjs/JSGlobalData.cpp:
1729        (KJS::JSGlobalData::create):
1730        * kjs/JSGlobalData.h:
1731        Made contructor private, and added a static create() method. Made the class inherit from
1732        RefCounted.
1733
1734        * kjs/JSGlobalObject.h:
1735        (KJS::JSGlobalObject::globalData):
1736        JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common
1737        WebCore one, which are never deleted).
1738
1739        * kjs/Shell.cpp: (main): Create JSGlobalData with create() method.
1740
17412008-07-14  Simon Hausmann  <hausmann@webkit.org>
1742
1743        Fix the single-threaded build.
1744
1745        * kjs/JSLock.cpp: Removed undeclared registerThread() function.
1746        * kjs/collector.cpp:
1747        (KJS::Heap::registerThread): Added dummy implementation.
1748
17492008-07-14  Alexey Proskuryakov  <ap@webkit.org>
1750
1751        Reviewed by Geoff Garen.
1752
1753        Eliminate per-thread JavaScript global data instance support and make arbitrary
1754        global data/global object combinations possible.
1755
1756        * kjs/collector.cpp:
1757        (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members.
1758        This allows for going from any JS object to its associated global data, currently used in
1759        JSGlobalObject constructor to initialize its JSGlobalData pointer.
1760        (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously,
1761        only the shared heap could be used from multiple threads, so it was the only one that needed
1762        thread registration, but now this can happen to any heap.
1763        (KJS::Heap::unregisterThread): Ditto.
1764        (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes.
1765        (KJS::Heap::setGCProtectNeedsLocking): Ditto.
1766        (KJS::Heap::protect): Ditto.
1767        (KJS::Heap::unprotect): Ditto.
1768        (KJS::Heap::collect): Ditto.
1769        (KJS::Heap::globalObjectCount): Use global object list associated with the current heap,
1770        not the late per-thread one.
1771        (KJS::Heap::protectedGlobalObjectCount): Ditto.
1772
1773        * kjs/collector.h:
1774        (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is
1775        destroyed.
1776
1777        * kjs/JSLock.cpp:
1778        (KJS::JSLock::JSLock):
1779        * kjs/JSLock.h:
1780        (KJS::JSLock::JSLock):
1781        Don't use JSLock to implicitly register threads. I've added registerThread() calls to most
1782        places that use JSLock - we cannot guarantee absolute safety unless we always mark all
1783        threads in the process, but these implicit registration calls should cover reasonable usage
1784        scenarios, I hope.
1785
1786        * API/JSBase.cpp:
1787        (JSEvaluateScript): Explicitly register the current thread.
1788        (JSCheckScriptSyntax): Explicitly register the current thread.
1789        (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race
1790        condition for clients that pass an already released context to JSGarbageCollect - but it is
1791        unlikely to create real life problems.
1792        To maintain compatibility, the shared heap is collected if NULL is passed.
1793
1794        * API/JSContextRef.cpp:
1795        (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation.
1796        (JSGlobalContextRetain): Register the thread.
1797        (JSContextGetGlobalObject): Register the thread.
1798
1799        * API/JSObjectRef.cpp:
1800        (JSObjectMake):
1801        (JSObjectMakeFunctionWithCallback):
1802        (JSObjectMakeConstructor):
1803        (JSObjectMakeFunction):
1804        (JSObjectHasProperty):
1805        (JSObjectGetProperty):
1806        (JSObjectSetProperty):
1807        (JSObjectGetPropertyAtIndex):
1808        (JSObjectSetPropertyAtIndex):
1809        (JSObjectDeleteProperty):
1810        (JSObjectCallAsFunction):
1811        (JSObjectCallAsConstructor):
1812        (JSObjectCopyPropertyNames):
1813        (JSPropertyNameAccumulatorAddName):
1814        * API/JSValueRef.cpp:
1815        (JSValueIsEqual):
1816        (JSValueIsInstanceOfConstructor):
1817        (JSValueMakeNumber):
1818        (JSValueMakeString):
1819        (JSValueToNumber):
1820        (JSValueToStringCopy):
1821        (JSValueToObject):
1822        (JSValueProtect):
1823        (JSValueUnprotect):
1824        Register the thread.
1825
1826        * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts.
1827
1828        * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h.
1829
1830        * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have
1831        their own instances. Adapt to other changes, too.
1832
1833        * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now
1834        included by collector.h and is thus needed in other projects.
1835
1836        * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread
1837        global data, as it no longer exists.
1838
1839        * kjs/JSGlobalData.cpp:
1840        (KJS::JSGlobalData::JSGlobalData):
1841        (KJS::JSGlobalData::~JSGlobalData):
1842        * kjs/JSGlobalData.h:
1843        Removed support for per-thread instance. Made constructor and destructor public.
1844
1845        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary  JSGlobalData
1846        via the heap.
1847        (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer.
1848        * kjs/JSGlobalObject.h:
1849
1850        * kjs/Shell.cpp:
1851        (main):
1852        (jscmain):
1853        Changed to maintain a custom JSGlobalData pointer instead of a per-thread one.
1854
18552008-07-13  Ada Chan  <adachan@apple.com>
1856
1857        Windows build fix: Add wtf/RefCountedLeakCounter to the project.
1858
1859        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1860
18612008-07-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
1862
1863        Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the
1864        build scripts
1865
1866        * GNUmakefile.am:
1867        * JavaScriptCore.pri:
1868        * JavaScriptCoreSources.bkl:
1869
18702008-07-11  Stephanie Lewis  <slewis@apple.com>
1871
1872        Reviewed by Darin Adler and Oliver Hunt.
1873
1874        Refactor RefCounting Leak counting code into a common class.
1875
1876        In order to export the symbols I needed to put the debug defines inside the function names
1877        
1878        Before we had a separate channel for each Logging each Leak type.  Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel.
1879
1880        * JavaScriptCore.exp:
1881        * JavaScriptCore.xcodeproj/project.pbxproj: add new class
1882        * kjs/nodes.cpp: remove old leak counting code
1883        * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class
1884        * wtf/RefCountedLeakCounter.h: Added.
1885
18862008-07-11  David Hyatt  <hyatt@apple.com>
1887
1888        Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just
1889        at the end).
1890
1891        Reviewed by Anders
1892
1893        * wtf/ListHashSet.h:
1894        (WTF::::insertBefore):
1895        (WTF::::insertNodeBefore):
1896
18972008-07-11  Sam Weinig  <sam@webkit.org>
1898
1899        Rubber-stamped by Darin Adler.
1900
1901        Move call function to CallData.cpp and construct to ConstructData.cpp.
1902
1903        * GNUmakefile.am:
1904        * JavaScriptCore.pri:
1905        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1906        * JavaScriptCore.xcodeproj/project.pbxproj:
1907        * JavaScriptCoreSources.bkl:
1908        * kjs/AllInOneFile.cpp:
1909        * kjs/CallData.cpp: Copied from kjs/JSValue.cpp.
1910        * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp.
1911        * kjs/JSValue.cpp:
1912
19132008-07-10  Mark Rowe  <mrowe@apple.com>
1914
1915        Reviewed by Sam Weinig.
1916
1917        Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.
1918
1919        * Configurations/Base.xcconfig:
1920
19212008-07-10  Mark Rowe  <mrowe@apple.com>
1922
1923        Reviewed by Sam Weinig.
1924
1925        Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.
1926
1927        * API/WebKitAvailability.h:
1928
19292008-07-10  Kevin McCullough  <kmccullough@apple.com>
1930
1931        Reviewed by Darin.
1932
1933        -Minor cleanup. Renamed callTree() to head() and no longer use m_head
1934        directly but instead keep it private and access via a method().
1935
1936        * profiler/HeavyProfile.cpp:
1937        (KJS::HeavyProfile::HeavyProfile):
1938        (KJS::HeavyProfile::generateHeavyStructure):
1939        (KJS::HeavyProfile::addNode):
1940        * profiler/Profile.h:
1941        (KJS::Profile::head):
1942        * profiler/ProfileGenerator.cpp:
1943        (KJS::ProfileGenerator::ProfileGenerator):
1944
19452008-07-10  Alexey Proskuryakov  <ap@webkit.org>
1946
1947        Reviewed by Mark Rowe.
1948
1949        Eliminate CollectorHeapIntrospector.
1950
1951        CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output,
1952        a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by
1953        vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct
1954        way to label mapped regions is to use a VM tag.
1955
1956        So, it makes more sense to remove it completely than to make it work with multiple heaps.
1957
1958        * JavaScriptCore.exp:
1959        * JavaScriptCore.xcodeproj/project.pbxproj:
1960        * kjs/AllInOneFile.cpp:
1961        * kjs/InitializeThreading.cpp:
1962        (KJS::initializeThreading):
1963        * kjs/collector.cpp:
1964        * kjs/collector.h:
1965        * kjs/CollectorHeapIntrospector.cpp: Removed.
1966        * kjs/CollectorHeapIntrospector.h: Removed.
1967
19682008-07-09  Kevin McCullough  <kmccullough@apple.com>
1969
1970        Reviewed by Darin.
1971
1972        <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
1973        view (19228)
1974        - Implemented the time and call count portionof heavy.  Now all that we
1975        need is some UI.
1976
1977        * profiler/CallIdentifier.h: Removed an unused constructor.
1978        * profiler/HeavyProfile.cpp: 
1979        (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head
1980        node so that percentages work correctly.
1981        (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of
1982        nodes being merged.
1983        * profiler/ProfileNode.cpp: Set the intital values of time and call
1984        count when copying ProfileNodes.
1985        (KJS::ProfileNode::ProfileNode):
1986
19872008-07-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
1988
1989        Gtk build fix.
1990
1991        * GNUmakefile.am: Add HeavyProfile.cpp
1992
19932008-07-09  Mark Rowe  <mrowe@apple.com>
1994
1995        Reviewed by Geoff Garen.
1996
1997        Don't warn about deprecated functions in production builds.
1998
1999        * Configurations/Base.xcconfig:
2000        * Configurations/DebugRelease.xcconfig:
2001
20022008-07-09  Darin Adler  <darin@apple.com>
2003
2004        * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
2005
20062008-07-09  Kevin Ollivier  <kevino@theolliviers.com>
2007
2008        wx biuld fix. Add HeavyProfile.cpp to build files.
2009
2010        * JavaScriptCoreSources.bkl:
2011
20122008-07-09  Kevin McCullough  <kmccullough@apple.com>
2013
2014        - Windows build fix.
2015
2016        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2017
20182008-07-09  Kevin McCullough  <kmccullough@apple.com>
2019
2020        - Build fix.
2021
2022        * profiler/HeavyProfile.cpp:
2023        (KJS::HeavyProfile::mergeProfiles):
2024
20252008-07-09  Kevin McCullough  <kmccullough@apple.com>
2026
2027        Reviewed by Geoff and Adam.
2028
2029        <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
2030        - This is the plumbing for bottom-up, but does not include calculating
2031        time, mostly because I'm still undclear about what the end result should
2032        look like.
2033        - This, obviously, does not include the UI to expose this in the
2034        inspector yet.
2035
2036        * JavaScriptCore.xcodeproj/project.pbxproj:
2037        * profiler/CallIdentifier.h:
2038        (KJS::CallIdentifier::CallIdentifier):
2039        (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap.
2040        * profiler/HeavyProfile.cpp: Added.
2041        (KJS::HeavyProfile::HeavyProfile):
2042        (KJS::HeavyProfile::generateHeavyStructure):
2043        (KJS::HeavyProfile::addNode):
2044        (KJS::HeavyProfile::mergeProfiles):
2045        (KJS::HeavyProfile::addAncestorsAsChildren):
2046        * profiler/HeavyProfile.h: Added.
2047        (KJS::HeavyProfile::create):
2048        (KJS::HeavyProfile::heavyProfile):
2049        (KJS::HeavyProfile::treeProfile):
2050        * profiler/Profile.cpp: Removed old commented out includes.
2051        * profiler/Profile.h: The m_head is needed by the HeavyProfile so it
2052        is now protected as opposed to private.
2053        * profiler/ProfileNode.cpp:
2054        (KJS::ProfileNode::ProfileNode): Created a constructor to copy
2055        ProfileNodes.
2056        (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile
2057        children finding easier and avoid a potential crasher.
2058        * profiler/ProfileNode.h: Mostly moved things around but also added some
2059        functionality needed by HeavyProfile.
2060        (KJS::ProfileNode::create):
2061        (KJS::ProfileNode::functionName):
2062        (KJS::ProfileNode::url):
2063        (KJS::ProfileNode::lineNumber):
2064        (KJS::ProfileNode::head):
2065        (KJS::ProfileNode::setHead):
2066        (KJS::ProfileNode::setNextSibling):
2067        (KJS::ProfileNode::actualTotalTime):
2068        (KJS::ProfileNode::actualSelfTime):
2069        * profiler/TreeProfile.cpp: Implemented the ability to get a
2070        HeavyProfile.
2071        (KJS::TreeProfile::heavyProfile):
2072        * profiler/TreeProfile.h:
2073
20742008-07-08  Geoffrey Garen  <ggaren@apple.com>
2075
2076        Reviewed by Oliver Hunt.
2077        
2078        Added support for checking if an object has custom properties in its
2079        property map. WebCore uses this to optimize marking DOM wrappers.
2080
20812008-07-08  Simon Hausmann  <hausmann@webkit.org>
2082
2083        Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build.
2084
2085        * GNUmakefile.am:
2086        * JavaScriptCoreSources.bkl:
2087
20882008-07-08  Simon Hausmann  <hausmann@webkit.org>
2089
2090        Fix the Qt build, add ProfileGenerator.cpp to the build.
2091
2092        * JavaScriptCore.pri:
2093
20942008-07-07  David Kilzer  <ddkilzer@apple.com>
2095
2096        releaseFastMallocFreeMemory() should always be defined
2097
2098        Reviewed by Darin.
2099
2100        * JavaScriptCore.exp: Changed to export C++ binding for
2101        WTF::releaseFastMallocFreeMemory() instead of C binding for
2102        releaseFastMallocFreeMemory().
2103        * wtf/FastMalloc.cpp: Moved definitions of
2104        releaseFastMallocFreeMemory() to be in the WTF namespace
2105        regardless whether FORCE_SYSTEM_MALLOC is defined.
2106        * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from
2107        extern "C" binding to WTF::releaseFastMallocFreeMemory().
2108
21092008-07-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2110
2111        Reviewed by Geoff.
2112
2113        Bug 19926: URL causes crash within a minute
2114        <https://bugs.webkit.org/show_bug.cgi?id=19926>
2115
2116        Add a check that lastGlobalObject is non-null in Machine::execute()
2117        before copying its globals to the current register file.
2118
2119        In theory, it is possible to make a test case for this, but it will
2120        take a while to get it right.
2121
2122        * VM/Machine.cpp:
2123        (KJS::Machine::execute):
2124
21252008-07-07  Darin Adler  <darin@apple.com>
2126
2127        Rubber stamped by Adele.
2128
2129        * VM/Machine.cpp:
2130        (KJS::Machine::privateExecute): Fix a typo in a comment.
2131
21322008-07-07  Steve Falkenburg  <sfalken@apple.com>
2133
2134        Build fixes.
2135
2136        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2137        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
2138
21392008-07-07  Kevin McCullough  <kmccullough@apple.com>
2140
2141        Reviewed by Darin.
2142
2143        When the profiler is running it gathers information and creates a
2144        Profile.  After it finishes the Profile can be sorted and have other
2145        data refinements run over it.  Both of these were done in the same class
2146        before.  Now I split the gathering operations into a new class called
2147        ProfileGenerator.
2148
2149        * JavaScriptCore.xcodeproj/project.pbxproj:
2150        * profiler/Profile.cpp: Removed code related to the gather stage of a
2151        Profile's creation.  
2152        (KJS::Profile::create):
2153        (KJS::Profile::Profile):
2154        * profiler/Profile.h: Ditto.
2155        (KJS::Profile::title):
2156        (KJS::Profile::callTree):
2157        (KJS::Profile::setHead):
2158        * profiler/ProfileGenerator.cpp: Added. This is the class that will
2159        handle the stage of creating a Profile.  Once the Profile is finished
2160        being created, this class goes away.
2161        (KJS::ProfileGenerator::create):
2162        (KJS::ProfileGenerator::ProfileGenerator):
2163        (KJS::ProfileGenerator::title):
2164        (KJS::ProfileGenerator::willExecute):
2165        (KJS::ProfileGenerator::didExecute):
2166        (KJS::ProfileGenerator::stopProfiling):
2167        (KJS::ProfileGenerator::didFinishAllExecution):
2168        (KJS::ProfileGenerator::removeProfileStart):
2169        (KJS::ProfileGenerator::removeProfileEnd):
2170        * profiler/ProfileGenerator.h: Added.
2171        (KJS::ProfileGenerator::profile):
2172        (KJS::ProfileGenerator::originatingGlobalExec):
2173        (KJS::ProfileGenerator::pageGroupIdentifier):
2174        (KJS::ProfileGenerator::client):
2175        (KJS::ProfileGenerator::stoppedProfiling):
2176        * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead
2177        of the Profile.
2178        (KJS::Profiler::startProfiling):
2179        (KJS::Profiler::stopProfiling):
2180        (KJS::Profiler::didFinishAllExecution): It is here that the Profile is
2181        handed off to its client and the Profile Generator is no longer needed.
2182        (KJS::dispatchFunctionToProfiles):
2183        (KJS::Profiler::willExecute):
2184        (KJS::Profiler::didExecute):
2185        * profiler/Profiler.h: Cleaned up the includes and subsequently the
2186        forward declarations.  Also use the new ProfileGenerator.
2187        (KJS::ProfilerClient::~ProfilerClient):
2188        (KJS::Profiler::currentProfiles):
2189        * profiler/TreeProfile.cpp: Use Profile's new interface.
2190        (KJS::TreeProfile::create):
2191        (KJS::TreeProfile::TreeProfile):
2192        * profiler/TreeProfile.h:
2193
21942008-07-07  Sam Weinig  <sam@webkit.org>
2195
2196        Reviewed by Cameron Zwarich.
2197
2198        Third step in broad cleanup effort.
2199
2200        [ File list elided ]
2201
22022008-07-06  Sam Weinig  <sam@webkit.org>
2203
2204        Reviewed by Cameron Zwarich.
2205
2206        Second step in broad cleanup effort.
2207
2208        [ File list elided ]
2209
22102008-07-05  Sam Weinig  <sam@webkit.org>
2211
2212        Reviewed by Cameron Zwarich.
2213
2214        First step in broad cleanup effort.
2215
2216        [ File list elided ]
2217
22182008-07-05  Sam Weinig  <sam@webkit.org>
2219
2220        Rubber-stamped by Cameron Zwarich.
2221
2222        Rename list.h/cpp to ArgList.h/cpp.
2223
2224        * GNUmakefile.am:
2225        * JavaScriptCore.pri:
2226        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2227        * JavaScriptCore.xcodeproj/project.pbxproj:
2228        * JavaScriptCoreSources.bkl:
2229        * VM/Machine.h:
2230        * kjs/AllInOneFile.cpp:
2231        * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp.
2232        * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h.
2233        * kjs/IndexToNameMap.cpp:
2234        * kjs/JSGlobalData.cpp:
2235        * kjs/JSGlobalData.h:
2236        * kjs/JSObject.h:
2237        * kjs/collector.cpp:
2238        * kjs/list.cpp: Removed.
2239        * kjs/list.h: Removed.
2240
22412008-07-05  Sam Weinig  <sam@webkit.org>
2242
2243        Fix non-AllInOne builds again.
2244
2245        * kjs/BooleanPrototype.cpp:
2246        * kjs/ErrorPrototype.cpp:
2247        * kjs/FunctionPrototype.cpp:
2248        * kjs/NumberPrototype.cpp:
2249        * kjs/ObjectPrototype.cpp:
2250
22512008-07-05  Sam Weinig  <sam@webkit.org>
2252
2253        Fix build on case-sensitive build systems.
2254
2255        * kjs/IndexToNameMap.cpp:
2256
22572008-07-05  Sam Weinig  <sam@webkit.org>
2258
2259        Fix build.
2260
2261        * kjs/Arguments.cpp:
2262        * kjs/BooleanPrototype.cpp:
2263        * kjs/DateConstructor.cpp:
2264        * kjs/ErrorPrototype.cpp:
2265        * kjs/FunctionPrototype.cpp:
2266        * kjs/NumberPrototype.cpp:
2267        * kjs/ObjectPrototype.cpp:
2268        * kjs/RegExpPrototype.cpp:
2269        * kjs/StringConstructor.cpp:
2270        * kjs/lookup.cpp:
2271
22722008-07-05  Sam Weinig  <sam@webkit.org>
2273
2274        Fix non-AllInOne build.
2275
2276        * kjs/JSGlobalObject.cpp:
2277
22782008-07-05  Sam Weinig  <sam@webkit.org>
2279
2280        Rubber-stamped by Cameron Zwarich.
2281
2282        Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 
2283        the functions on the global object out of JSFunction.h/cpp.
2284
2285        * GNUmakefile.am:
2286        * JavaScriptCore.pri:
2287        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2288        * JavaScriptCore.xcodeproj/project.pbxproj:
2289        * JavaScriptCoreSources.bkl:
2290        * VM/Machine.cpp:
2291        * kjs/AllInOneFile.cpp:
2292        * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
2293        * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h.
2294        * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
2295        * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
2296        * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
2297        * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h.
2298        * kjs/JSActivation.cpp:
2299        * kjs/JSFunction.cpp:
2300        * kjs/JSFunction.h:
2301        * kjs/JSGlobalObject.cpp:
2302        * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
2303        * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h.
2304        The functions on the global object should be in JSGlobalObject.cpp, but putting them there
2305        was a 0.5% regression.
2306
2307        * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
2308        * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
2309        * kjs/Shell.cpp:
2310        * kjs/lexer.cpp:
2311        * kjs/ustring.cpp:
2312
23132008-07-04  Sam Weinig  <sam@webkit.org>
2314
2315        Really fix the mac build.
2316
2317        * JavaScriptCore.xcodeproj/project.pbxproj:
2318
23192008-07-04  Sam Weinig  <sam@webkit.org>
2320
2321        Fix mac build.
2322
2323        * JavaScriptCore.xcodeproj/project.pbxproj:
2324
23252008-07-04  Sam Weinig  <sam@webkit.org>
2326
2327        Fix non-AllInOne builds.
2328
2329        * kjs/Error.cpp:
2330        * kjs/GetterSetter.cpp:
2331        * kjs/JSImmediate.cpp:
2332        * kjs/operations.cpp:
2333
23342008-07-04  Sam Weinig  <sam@webkit.org>
2335
2336        Rubber-stamped by Dan Bernstein.
2337
2338        Split Error and GetterSetter out of JSObject.h.
2339
2340        * API/JSCallbackObjectFunctions.h:
2341        * GNUmakefile.am:
2342        * JavaScriptCore.pri:
2343        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2344        * JavaScriptCore.xcodeproj/project.pbxproj:
2345        * JavaScriptCoreSources.bkl:
2346        * kjs/AllInOneFile.cpp:
2347        * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h.
2348        * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp.
2349        * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h.
2350        * kjs/GetterSetter.cpp:
2351        * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h.
2352        * kjs/JSObject.cpp:
2353        * kjs/JSObject.h:
2354        * kjs/nodes.h:
2355
23562008-07-04  Simon Hausmann  <hausmann@webkit.org>
2357
2358        Fix the Wx build, added TreeProfile.cpp to the build.
2359
2360        * JavaScriptCoreSources.bkl:
2361
23622008-07-03  Mark Rowe  <mrowe@apple.com>
2363
2364        Reviewed by Oliver Hunt.
2365
2366        Fix output path of recently-added script phase to reference the correct file.
2367        This prevents Xcode from running the script phase unnecessarily, which caused
2368        the generated header to be recreated and lead to AllInOneFile.cpp rebuilding.
2369
2370        * JavaScriptCore.xcodeproj/project.pbxproj:
2371
23722008-07-03  Mark Rowe  <mrowe@apple.com>
2373
2374        Follow-up to the 64-bit build fix.  Use intptr_t rather than ssize_t as
2375        the latter is non-standard and does not exist on Windows.
2376
2377        * kjs/JSLock.cpp:
2378        (KJS::JSLock::lockCount):
2379        (KJS::JSLock::lock):
2380        (KJS::JSLock::unlock):
2381        (KJS::JSLock::DropAllLocks::DropAllLocks):
2382        * kjs/JSLock.h:
2383
23842008-07-02  Mark Rowe  <mrowe@apple.com>
2385
2386        Fix the 64-bit build.  pthread_getspecific works with pointer-sized values,
2387        so use ssize_t rather than int to track the lock count to avoid warnings about
2388        truncating the result of pthread_getspecific.
2389
2390        * kjs/JSLock.cpp:
2391        (KJS::JSLock::lockCount):
2392        (KJS::JSLock::lock):
2393        (KJS::JSLock::unlock):
2394        (KJS::JSLock::DropAllLocks::DropAllLocks):
2395        * kjs/JSLock.h:
2396
23972008-07-03  Geoffrey Garen  <ggaren@apple.com>
2398
2399        Reviewed by Sam Weinig.
2400        
2401        Removed checking for the array get/put fast case from the array code.
2402        Callers who want the fast case should call getIndex and/or setIndex
2403        instead. (get_by_val and put_by_val already do this.)
2404        
2405        SunSpider reports no change overall, but a 1.4% speedup on fannkuch and
2406        a 3.6% speedup on nsieve.
2407
24082008-07-03  Dan Bernstein  <mitz@apple.com>
2409
2410        - Windows build fix
2411
2412        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
2413
24142008-07-03  Dan Bernstein  <mitz@apple.com>
2415
2416        Reviewed by Anders Carlsson.
2417
2418        - Windows build fix
2419
2420        * VM/Machine.cpp:
2421        (KJS::Machine::Machine):
2422
24232008-07-03  Simon Hausmann  <hausmann@webkit.org>
2424
2425        Reviewed by Alexey Proskuryakov.
2426
2427        Fix the non-threaded build.
2428
2429        * kjs/JSGlobalData.cpp:
2430        (KJS::JSGlobalData::threadInstanceInternal):
2431
24322008-07-03  Simon Hausmann  <hausmann@webkit.org>
2433
2434        Fix the Qt build, added TreeProfile to the build.
2435
2436        * JavaScriptCore.pri:
2437
24382008-07-02  Alexey Proskuryakov  <ap@webkit.org>
2439
2440        Reviewed by Geoff.
2441
2442        Don't create unnecessary JSGlobalData instances.
2443
2444        * kjs/JSGlobalData.h:
2445        * kjs/JSGlobalData.cpp:
2446        (KJS::JSGlobalData::threadInstanceExists):
2447        (KJS::JSGlobalData::sharedInstanceExists):
2448        (KJS::JSGlobalData::threadInstance):
2449        (KJS::JSGlobalData::sharedInstance):
2450        (KJS::JSGlobalData::threadInstanceInternal):
2451        (KJS::JSGlobalData::sharedInstanceInternal):
2452        Added methods to query instance existence.
2453
2454        * kjs/InitializeThreading.cpp:
2455        (KJS::initializeThreadingOnce):
2456        Initialize thread instance static in a new way.
2457
2458        * API/JSBase.cpp:
2459        (JSGarbageCollect):
2460        * kjs/collector.cpp:
2461        (KJS::Heap::collect):
2462        Check for instance existence before accessing it.
2463
24642008-07-02  Geoffrey Garen  <ggaren@apple.com>
2465
2466        Reviewed by Cameron Zwarich.
2467        
2468        Fixed https://bugs.webkit.org/show_bug.cgi?id=19862
2469        REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts
2470        
2471        I was never able to reproduce this issue, but Cameron could, and he says
2472        that this patch fixes it.
2473        
2474        The crash seems tied to a timer or event handler callback. In such a case,
2475        the sole reference to the global object may be in the current call frame,
2476        so we can't depend on the global object to mark the call frame area in
2477        the register file.
2478        
2479        The new GC marking rule is: the global object is not responsible for
2480        marking the whole register file -- it's just responsible for the globals
2481        section it's tied to. The heap is responsible for marking the call frame area.
2482
24832008-07-02  Mark Rowe  <mrowe@apple.com>
2484
2485        Reviewed by Sam Weinig.
2486
2487        Add the ability to trace JavaScriptCore garabge collections using dtrace.
2488
2489        * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header
2490        file when building on a new enough version of Mac OS X.
2491        * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros.
2492        * kjs/Tracing.d: Declare three dtrace probes.
2493        * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available,
2494        otherwise provide versions that do nothing.
2495        * kjs/collector.cpp:
2496        (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the
2497        mark phase has completed, and when the collection is complete.
2498        * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X.
2499
25002008-07-02  Geoffrey Garen  <ggaren@apple.com>
2501
2502        Rubber stamped by Oliver Hunt.
2503        
2504        Reduced the max register file size from 8MB to 2MB.
2505
2506        We still allow about 20,000 levels of recursion.
2507
25082008-07-02  Alp Toker  <alp@nuanti.com>
2509
2510        Build fix for r34960. Add TreeProfile.cpp to build.
2511
2512        * GNUmakefile.am:
2513
25142008-07-02  Geoffrey Garen  <ggaren@apple.com>
2515
2516        Reviewed by Oliver Hunt.
2517
2518        Optimized a[n] get for cases when a is an array or a string. When a is
2519        an array, we optimize both get and put. When a is a string, we only
2520        optimize get, since you can't put to a string.
2521        
2522        SunSpider says 3.4% faster.
2523
25242008-07-02  Kevin McCullough  <kmccullough@apple.com>
2525
2526        Reviewed by Darin.
2527
2528        -Small cleanup in preparation for implementing Bottom-up.
2529
2530        * profiler/CallIdentifier.h: Rename debug function to make it clear of
2531        its output and intention to be debug only.
2532        (KJS::CallIdentifier::operator const char* ): Implement in terms of
2533        c_str.
2534        (KJS::CallIdentifier::c_str):
2535        * profiler/ProfileNode.cpp: Impelment findChild() which will be needed
2536        by the bottom-up implementation.
2537        (KJS::ProfileNode::findChild):
2538        * profiler/ProfileNode.h: Added comments to make the collections of
2539        functions more clear.
2540        (KJS::ProfileNode::operator==):
2541        (KJS::ProfileNode::c_str):
2542
25432008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2544
2545        Reviewed by Darin.
2546
2547        Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
2548        <https://bugs.webkit.org/show_bug.cgi?id=19776>
2549
2550        Perform the sign check for the exponent on the actual exponent value,
2551        which is 1 less than the value of decimalPoint, instead of on the value
2552        of decimalPoint itself.
2553
2554        * kjs/NumberPrototype.cpp:
2555        (KJS::exponentialPartToString):
2556
25572008-07-02  Kevin McCullough  <kmccullough@apple.com>
2558
2559        Reviewed by Darin.
2560
2561        <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
2562        - Subclass TreeProfile as I prepare for a HeavyProfile to be comming
2563        later.
2564
2565        * JavaScriptCore.xcodeproj/project.pbxproj:
2566        * profiler/Profile.cpp: By default we create a TreeProfile.
2567        (KJS::Profile::create):
2568        * profiler/Profile.h: Changes to the Profile class to make it amenable
2569        to be inherited from.
2570        (KJS::Profile::~Profile):
2571        * profiler/TreeProfile.cpp: Added.
2572        (KJS::TreeProfile::create):
2573        (KJS::TreeProfile::TreeProfile):
2574        (KJS::TreeProfile::heavyProfile):
2575        * profiler/TreeProfile.h: Added.
2576        (KJS::TreeProfile::treeProfile):
2577
25782008-07-02  Kevin McCullough  <kmccullough@apple.com>
2579
2580        Reviewed by Dan.
2581
2582        Broke CallIdentifier out into its own file. I did this because it's
2583        going to grow a lot soon and I wanted this to be a separate patch.
2584
2585        * JavaScriptCore.xcodeproj/project.pbxproj:
2586        * profiler/CallIdentifier.h: Added.
2587        (KJS::CallIdentifier::CallIdentifier):
2588        (KJS::CallIdentifier::operator==):
2589        (KJS::CallIdentifier::operator!=):
2590        (KJS::CallIdentifier::operator const char* ):
2591        (KJS::CallIdentifier::toString):
2592        * profiler/ProfileNode.h:
2593
25942008-07-02  Simon Hausmann  <hausmann@webkit.org>
2595
2596        Build fix. Implemented missing functions for single-threaded build.
2597
2598        * kjs/JSLock.cpp:
2599        (KJS::JSLock::JSLock):
2600        (KJS::JSLock::lock):
2601        (KJS::JSLock::unlock):
2602        (KJS::JSLock::DropAllLocks::DropAllLocks):
2603
26042008-07-02  Alexey Proskuryakov  <ap@webkit.org>
2605
2606        Another non-AllInOne build fix.
2607
2608        * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
2609
26102008-07-02  Alexey Proskuryakov  <ap@webkit.org>
2611
2612        Non-AllInOne build fix.
2613
2614        * kjs/interpreter.cpp: Include JSLock.h.
2615
26162008-06-30  Alexey Proskuryakov  <ap@webkit.org>
2617
2618        Reviewed by Darin.
2619
2620        Disable JSLock for per-thread contexts.
2621
2622        No change on SunSpider.
2623
2624        * kjs/JSGlobalData.h:
2625        * kjs/JSGlobalData.cpp:
2626        (KJS::JSGlobalData::JSGlobalData):
2627        (KJS::JSGlobalData::sharedInstance):
2628        Added isSharedInstance as a better way to tell whether the instance is shared (legacy).
2629
2630        * kjs/JSLock.cpp:
2631        (KJS::createJSLockCount):
2632        (KJS::JSLock::lockCount):
2633        (KJS::setLockCount):
2634        (KJS::JSLock::JSLock):
2635        (KJS::JSLock::lock):
2636        (KJS::JSLock::unlock):
2637        (KJS::JSLock::currentThreadIsHoldingLock):
2638        (KJS::JSLock::DropAllLocks::DropAllLocks):
2639        (KJS::JSLock::DropAllLocks::~DropAllLocks):
2640        * kjs/JSLock.h:
2641        (KJS::JSLock::JSLock):
2642        (KJS::JSLock::~JSLock):
2643        Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to
2644        actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op
2645        if we want to keep existing assertions working.
2646        Made recursion count per-thread, now that locks may not lock.
2647
2648        * API/JSBase.cpp:
2649        (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need
2650        locking in any case), so that a decision whether to actually lock can be made.
2651        (JSCheckScriptSyntax): Ditto.
2652        (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one.
2653
2654        * API/JSObjectRef.cpp:
2655        (JSClassCreate): Don't lock, as there is no reason to.
2656        (JSClassRetain): Ditto.
2657        (JSClassRelease): Ditto.
2658        (JSPropertyNameArrayRetain): Ditto.
2659        (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch
2660        identifier table.
2661        (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table
2662        lookup, and possibly modification.
2663
2664        * API/JSStringRef.cpp:
2665        (JSStringCreateWithCharacters):
2666        (JSStringCreateWithUTF8CString):
2667        (JSStringRetain):
2668        (JSStringRelease):
2669        (JSStringGetUTF8CString):
2670        (JSStringIsEqual):
2671        * API/JSStringRefCF.cpp:
2672        (JSStringCreateWithCFString):
2673        JSStringRef operations other than releasing do not need locking.
2674
2675        * VM/Machine.cpp: Don't include unused JSLock.h.
2676
2677        * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics):
2678        Don't take the lock for real, as heap introspection pauses the process anyway. It seems that
2679        the existing code could cause deadlocks.
2680
2681        * kjs/Shell.cpp:
2682        (functionGC):
2683        (main):
2684        (jscmain):
2685        The test tool uses a per-thread context, so no real locking is required.
2686
2687        * kjs/collector.h:
2688        (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a
2689        per-heap mutex. This is only needed for WebCore Database code, which violates the "no data
2690        migration between threads" by using ProtectedPtr on a background thread.
2691        (KJS::Heap::isShared): Keep a shared flag here, as well.
2692
2693        * kjs/protect.h:
2694        (KJS::::ProtectedPtr):
2695        (KJS::::~ProtectedPtr):
2696        (KJS::::operator):
2697        (KJS::operator==):
2698        (KJS::operator!=):
2699        ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in
2700        Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC.
2701
2702        * kjs/collector.cpp:
2703        (KJS::Heap::Heap): Initialize m_isShared.
2704        (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions
2705        in sweep() working.
2706        (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap,
2707        so locking is always needed here.
2708        (KJS::Heap::registerThread): Ditto.
2709        (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared
2710        instance for a small speedup.
2711        (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no
2712        way to undo this - and ideally, Database code will be fixed to lo longer require this quirk.
2713        (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing
2714        m_protectedValues.
2715        (KJS::Heap::unprotect): Ditto.
2716        (KJS::Heap::markProtectedObjects): Ditto.
2717        (KJS::Heap::protectedGlobalObjectCount): Ditto.
2718        (KJS::Heap::protectedObjectCount): Ditto.
2719        (KJS::Heap::protectedObjectTypeCounts): Ditto.
2720
2721        * kjs/ustring.cpp:
2722        * kjs/ustring.h:
2723        Don't include JSLock.h, which is no longer used here. As a result, an explicit include had
2724        to be added to many files in JavaScriptGlue, WebCore and WebKit.
2725
2726        * kjs/JSGlobalObject.cpp:
2727        (KJS::JSGlobalObject::init):
2728        * API/JSCallbackConstructor.cpp:
2729        (KJS::constructJSCallback):
2730        * API/JSCallbackFunction.cpp:
2731        (KJS::JSCallbackFunction::call):
2732        * API/JSCallbackObjectFunctions.h:
2733        (KJS::::init):
2734        (KJS::::getOwnPropertySlot):
2735        (KJS::::put):
2736        (KJS::::deleteProperty):
2737        (KJS::::construct):
2738        (KJS::::hasInstance):
2739        (KJS::::call):
2740        (KJS::::getPropertyNames):
2741        (KJS::::toNumber):
2742        (KJS::::toString):
2743        (KJS::::staticValueGetter):
2744        (KJS::::callbackGetter):
2745        * API/JSContextRef.cpp:
2746        (JSGlobalContextCreate):
2747        (JSGlobalContextRetain):
2748        (JSGlobalContextRelease):
2749        * API/JSValueRef.cpp:
2750        (JSValueIsEqual):
2751        (JSValueIsStrictEqual):
2752        (JSValueIsInstanceOfConstructor):
2753        (JSValueMakeNumber):
2754        (JSValueMakeString):
2755        (JSValueToNumber):
2756        (JSValueToStringCopy):
2757        (JSValueToObject):
2758        (JSValueProtect):
2759        (JSValueUnprotect):
2760        * JavaScriptCore.exp:
2761        * kjs/PropertyNameArray.h:
2762        (KJS::PropertyNameArray::globalData):
2763        * kjs/interpreter.cpp:
2764        (KJS::Interpreter::checkSyntax):
2765        (KJS::Interpreter::evaluate):
2766        Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken.
2767
27682008-07-01  Alexey Proskuryakov  <ap@webkit.org>
2769
2770        Reviewed by Darin.
2771
2772        https://bugs.webkit.org/show_bug.cgi?id=19834
2773        Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82
2774
2775        Creating a global object with a custom prototype resets it twice (wasteful!).
2776        So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset
2777        the register array.        
2778
2779        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0).
2780
2781        * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy
2782        constructor and operator= to ensure that no one attempts to copy this object (for whatever
2783        reason, I couldn't make Noncopyable work).
2784
2785        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray
2786        with new[].
2787
2788        * kjs/JSVariableObject.cpp:
2789        (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[].
2790        (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when
2791        "changing" the value from 0 to 0.
2792
27932008-07-01  Geoffrey Garen  <ggaren@apple.com>
2794
2795        Reviewed by Oliver Hunt.
2796        
2797        Removed and/or reordered exception checks in array-style a[n] access.
2798        
2799        SunSpider says 1.4% faster.
2800
2801        * VM/Machine.cpp:
2802        (KJS::Machine::privateExecute): No need to check for exceptions before
2803        calling toString, toNumber and/or get. If the call ends up being observable
2804        through toString, valueOf, or a getter, we short-circuit it there, instead.
2805        In the op_del_by_val case, I removed the incorrect comment without actually
2806        removing the code, since I didn't want to tempt the GCC fates!
2807
2808        * kjs/JSObject.cpp:
2809        (KJS::callDefaultValueFunction): Added exception check to prevent
2810        toString and valueOf functions from observing execution after an exception
2811        has been thrown. This removes some of the burden of exception checking
2812        from the machine.
2813
2814        (KJS::JSObject::defaultValue): Removed redundant exception check here.
2815
2816        * kjs/PropertySlot.cpp:
2817        (KJS::PropertySlot::functionGetter): Added exception check to prevent
2818        getter functions from observing execution after an exception has been
2819        thrown. This removes some of the burden of exception checking from the
2820        machine.
2821
28222008-07-01  Geoffrey Garen  <ggaren@apple.com>
2823
2824        Reviewed by Oliver Hunt.
2825        
2826        Optimized a[n] get and put for cases where n is an immediate unsigned
2827        value.
2828        
2829        SunSpider says 3.5% faster.
2830
28312008-07-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2832
2833        Reviewed by Darin.
2834
2835        Bug 19844: JavaScript Switch statement modifies "this"
2836        <https://bugs.webkit.org/show_bug.cgi?id=19844>
2837
2838        Use a temporary when generating code for switch clauses to avoid
2839        overwriting 'this' or a local variable.
2840
2841        * kjs/nodes.cpp:
2842        (KJS::CaseBlockNode::emitCodeForBlock):
2843
28442008-07-01  Christian Dywan  <christian@twotoasts.de>
2845
2846        Gtk+ build fix.
2847
2848        * kjs/list.cpp: Include "JSCell.h"
2849
28502008-07-01  Kevin McCullough  <kmccullough@apple.com>
2851
2852        Build fix.
2853
2854        * JavaScriptCore.xcodeproj/project.pbxproj:
2855
28562008-07-01  Dan Bernstein  <mitz@apple.com>
2857
2858        Reviewed by Anders Carlsson.
2859
2860        - Mac release build fix
2861
2862        * JavaScriptCore.exp:
2863
28642008-07-01  Sam Weinig  <sam@webkit.org>
2865
2866        Try and fix mac builds.
2867
2868        * JavaScriptCore.exp:
2869
28702008-07-01  Sam Weinig  <sam@webkit.org>
2871
2872        Fix non-AllInOne builds.
2873
2874        * kjs/DateMath.cpp:
2875
28762008-07-01  Sam Weinig  <sam@webkit.org>
2877
2878        Reviewed by Darin Adler.
2879
2880        Split JSCell and JSNumberCell class declarations out of JSValue.h
2881
2882        * GNUmakefile.am:
2883        * JavaScriptCore.pri:
2884        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2885        * JavaScriptCore.xcodeproj/project.pbxproj:
2886        * JavaScriptCoreSources.bkl:
2887        * VM/JSPropertyNameIterator.h:
2888        * kjs/AllInOneFile.cpp:
2889        * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
2890        * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
2891        (KJS::JSValue::getJSNumber):
2892        * kjs/JSNumberCell.cpp:
2893        * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
2894        * kjs/JSObject.h:
2895        * kjs/JSString.cpp:
2896        (KJS::jsString):
2897        (KJS::jsOwnedString):
2898        * kjs/JSString.h:
2899        (KJS::JSValue::toThisJSString):
2900        * kjs/JSValue.cpp:
2901        * kjs/JSValue.h:
2902
29032008-07-01  Anders Carlsson  <andersca@apple.com>
2904
2905        Build fixes.
2906        
2907        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2908        * kjs/JSGlobalObject.h:
2909        (KJS::JSGlobalObject::addStaticGlobals):
2910
29112008-07-01  Simon Hausmann  <hausmann@webkit.org>
2912
2913        Build fix, include OwnPtr.h.
2914
2915        * kjs/RegExpConstructor.h:
2916
29172008-06-30  Geoffrey Garen  <ggaren@apple.com>
2918
2919        Reviewed by Oliver Hunt.
2920        
2921        Fixed a global object leak caused by the switch to one register file.
2922        
2923        Don't unconditionally mark the register file, since that logically
2924        makes all global variables GC roots, even when their global object is
2925        no longer reachable.
2926        
2927        Instead, make the global object associated with the register file
2928        responsible for marking the register file.
2929
29302008-06-30  Geoffrey Garen  <ggaren@apple.com>
2931
2932        Reviewed by Oliver Hunt.
2933        
2934        Removed the "registerBase" abstraction. Since the register file never
2935        reallocates, we can keep direct pointers into it, instead of
2936        <registerBase, offset> tuples.
2937        
2938        SunSpider says 0.8% faster.
2939        
29402008-06-30  Oliver Hunt  <oliver@apple.com>
2941
2942        Reviewed by NOBODY (build fix).
2943
2944        Fix build by adding all (hopefully) the missing includes.
2945
2946        * kjs/BooleanPrototype.cpp:
2947        * kjs/DateConstructor.cpp:
2948        * kjs/ErrorPrototype.cpp:
2949        * kjs/FunctionPrototype.cpp:
2950        * kjs/NativeErrorConstructor.cpp:
2951        * kjs/NumberPrototype.cpp:
2952        * kjs/ObjectPrototype.cpp:
2953        * kjs/RegExpConstructor.cpp:
2954        * kjs/StringConstructor.cpp:
2955        * kjs/StringPrototype.cpp:
2956
29572008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2958
2959        Reviewed by Oliver.
2960
2961        Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar
2962        <https://bugs.webkit.org/show_bug.cgi?id=19830>
2963
2964        Ensure that we do not eliminate a write to a local register when doing
2965        peephole optimizations.
2966
2967        * VM/CodeGenerator.cpp:
2968        (KJS::CodeGenerator::emitJumpIfTrue):
2969        (KJS::CodeGenerator::emitJumpIfFalse):
2970
29712008-06-30  Sam Weinig  <sam@webkit.org>
2972
2973        Rubber-stamped by Darin Alder.
2974
2975        Split InternalFunction into its own header file.
2976
2977        * API/JSCallbackFunction.h:
2978        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2979        * JavaScriptCore.xcodeproj/project.pbxproj:
2980        * kjs/ArrayConstructor.h:
2981        * kjs/BooleanConstructor.h:
2982        * kjs/DateConstructor.h:
2983        * kjs/ErrorConstructor.h:
2984        * kjs/FunctionConstructor.h:
2985        * kjs/FunctionPrototype.h:
2986        * kjs/InternalFunction.h: Copied from kjs/JSFunction.h.
2987        * kjs/JSFunction.h:
2988        * kjs/NativeErrorConstructor.h:
2989        * kjs/NumberConstructor.h:
2990        * kjs/ObjectConstructor.h:
2991        * kjs/RegExpConstructor.h:
2992        * kjs/StringConstructor.h:
2993        * profiler/Profiler.cpp:
2994
29952008-06-30  Sam Weinig  <sam@webkit.org>
2996
2997        Reviewed by Kevin McCullough.
2998
2999        Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp.
3000
3001        * GNUmakefile.am:
3002        * JavaScriptCore.pri:
3003        * JavaScriptCore.xcodeproj/project.pbxproj:
3004        * JavaScriptCoreSources.bkl:
3005        * VM/Instruction.cpp: Removed.
3006        * VM/LabelID.cpp: Removed.
3007        * VM/Register.cpp: Removed.
3008        * VM/RegisterID.cpp: Removed.
3009
30102008-06-30  Sam Weinig  <sam@webkit.org>
3011
3012        Rubber-stamped (reluctantly) by Kevin McCullough.
3013
3014        Rename date_object.h/cpp to DateInstance.h/cpp
3015
3016        * GNUmakefile.am:
3017        * JavaScriptCore.pri:
3018        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3019        * JavaScriptCore.xcodeproj/project.pbxproj:
3020        * JavaScriptCoreSources.bkl:
3021        * kjs/AllInOneFile.cpp:
3022        * kjs/DateConstructor.cpp:
3023        * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp.
3024        * kjs/DateInstance.h: Copied from kjs/date_object.h.
3025        * kjs/DatePrototype.cpp:
3026        * kjs/DatePrototype.h:
3027        * kjs/date_object.cpp: Removed.
3028        * kjs/date_object.h: Removed.
3029
30302008-06-30  Sam Weinig  <sam@webkit.org>
3031
3032        Rubber-stamped by Darin Adler.
3033
3034        Remove internal.cpp and move its contents to there own .cpp files.
3035
3036        * GNUmakefile.am:
3037        * JavaScriptCore.pri:
3038        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3039        * JavaScriptCore.xcodeproj/project.pbxproj:
3040        * JavaScriptCoreSources.bkl:
3041        * kjs/AllInOneFile.cpp:
3042        * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
3043        * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
3044        * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
3045        * kjs/JSString.cpp: Copied from kjs/internal.cpp.
3046        * kjs/JSString.h:
3047        * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
3048        * kjs/NumberConstructor.cpp:
3049        * kjs/NumberObject.cpp:
3050        (KJS::constructNumber):
3051        (KJS::constructNumberFromImmediateNumber):
3052        * kjs/internal.cpp: Removed.
3053
30542008-06-30  Adam Roben  <aroben@apple.com>
3055
3056        Fix <rdar://5954749> Assertion failure due to HashTable's use of
3057        operator&
3058
3059        HashTable was passing &value to constructDeletedValue, which in
3060        classes like WebCore::COMPtr would cause an assertion. We now pass
3061        value by reference instead of by address so that the HashTraits
3062        implementations have more flexibility in constructing the deleted
3063        value.
3064
3065        Reviewed by Ada Chan.
3066
3067        * VM/CodeGenerator.h: Updated for changes to HashTraits.
3068        * wtf/HashTable.h:
3069        (WTF::::deleteBucket): Changed to pass bucket by reference instead of
3070        by address.
3071        (WTF::::checkKey): Ditto.
3072        * wtf/HashTraits.h:
3073        (WTF::): Updated HashTraits for HashTable change.
3074
30752008-07-01  Alexey Proskuryakov  <ap@webkit.org>
3076
3077        Reviewed by Cameron Zwarich.
3078
3079        Make RegisterFile really unmap memory on destruction.
3080
3081        This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds.
3082
3083        * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just
3084        1/4 of it.
3085
3086        * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make
3087        half of WebCore rebuild.
3088
3089        * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already.
3090
3091        * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded.
3092
30932008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3094
3095        Rubber-stamped by Oliver.
3096
3097        Correct the documentation for op_put_by_index.
3098
3099        * VM/Machine.cpp:
3100        (KJS::Machine::privateExecute):
3101
31022008-06-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3103
3104        Reviewed by Oliver.
3105
3106        Bug 19821: Merge the instruction pair (less, jfalse)
3107        <https://bugs.webkit.org/show_bug.cgi?id=19821>
3108        
3109        This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE
3110        intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive
3111        regression in regexp-dna.
3112
3113        * VM/CodeBlock.cpp:
3114        (KJS::CodeBlock::dump):
3115        * VM/CodeGenerator.cpp:
3116        (KJS::CodeGenerator::rewindBinaryOp):
3117        (KJS::CodeGenerator::emitJumpIfFalse):
3118        * VM/Machine.cpp:
3119        (KJS::Machine::privateExecute):
3120        * VM/Opcode.cpp:
3121        (KJS::):
3122        * VM/Opcode.h:
3123
31242008-06-29  Sam Weinig  <sam@webkit.org>
3125
3126        Fix non-AllInOne builds.
3127
3128        * kjs/JSObject.cpp:
3129        * kjs/JSValue.cpp:
3130
31312008-06-29  Sam Weinig  <sam@webkit.org>
3132
3133        Build fix for Qt.
3134
3135        * kjs/DateMath.cpp:
3136        * kjs/DatePrototype.cpp:
3137
31382008-06-29  Sam Weinig  <sam@webkit.org>
3139
3140        Rubber-stamped by Cameron Zwarich.
3141
3142        Splits ErrorConstructor, ErrorPrototype,  NativeErrorConstructor and
3143        NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance.
3144
3145        * GNUmakefile.am:
3146        * JavaScriptCore.pri:
3147        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3148        * JavaScriptCore.xcodeproj/project.pbxproj:
3149        * JavaScriptCoreSources.bkl:
3150        * kjs/AllInOneFile.cpp:
3151        * kjs/ArrayConstructor.cpp:
3152        * kjs/ArrayPrototype.cpp:
3153        * kjs/BooleanPrototype.cpp:
3154        * kjs/DatePrototype.cpp:
3155        * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp.
3156        * kjs/ErrorConstructor.h: Copied from kjs/error_object.h.
3157        * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp.
3158        * kjs/ErrorInstance.h: Copied from kjs/error_object.h.
3159        * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp.
3160        * kjs/ErrorPrototype.h: Copied from kjs/error_object.h.
3161        * kjs/JSGlobalObject.cpp:
3162        * kjs/JSObject.cpp:
3163        * kjs/JSValue.cpp:
3164        * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp.
3165        * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h.
3166        * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp.
3167        * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h.
3168        * kjs/NumberPrototype.cpp:
3169        * kjs/RegExpConstructor.cpp:
3170        * kjs/RegExpObject.cpp:
3171        * kjs/RegExpPrototype.cpp:
3172        * kjs/StringPrototype.cpp:
3173        * kjs/error_object.cpp: Removed.
3174        * kjs/error_object.h: Removed.
3175        * kjs/internal.cpp:
3176
31772008-06-29  Sam Weinig  <sam@webkit.org>
3178
3179        Fix non-AllInOne build.
3180
3181        * kjs/DateConstructor.cpp:
3182        * kjs/DateMath.cpp:
3183        * kjs/JSObject.cpp:
3184
31852008-06-29  Sam Weinig  <sam@webkit.org>
3186
3187        Rubber-stamped by Oliver Hunt.
3188
3189        Splits DateConstructor and DatePrototype out of date_object.h/cpp
3190        Moves shared Date code into DateMath.
3191
3192        * DerivedSources.make:
3193        * GNUmakefile.am:
3194        * JavaScriptCore.pri:
3195        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3196        * JavaScriptCore.xcodeproj/project.pbxproj:
3197        * JavaScriptCoreSources.bkl:
3198        * kjs/AllInOneFile.cpp:
3199        * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp.
3200        * kjs/DateConstructor.h: Copied from kjs/date_object.h.
3201        * kjs/DateMath.cpp:
3202        (KJS::ymdhmsToSeconds):
3203        (KJS::):
3204        (KJS::skipSpacesAndComments):
3205        (KJS::findMonth):
3206        (KJS::parseDate):
3207        (KJS::timeClip):
3208        (KJS::formatDate):
3209        (KJS::formatDateUTCVariant):
3210        (KJS::formatTime):
3211        * kjs/DateMath.h:
3212        (KJS::gmtoffset):
3213        * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp.
3214        * kjs/DatePrototype.h: Copied from kjs/date_object.h.
3215        * kjs/JSGlobalObject.cpp:
3216        * kjs/JSObject.cpp:
3217        * kjs/date_object.cpp:
3218        * kjs/date_object.h:
3219        * kjs/internal.cpp:
3220
32212008-06-29  Jan Michael Alonzo  <jmalonzo@webkit.org>
3222
3223        Rubber-stamped by Cameron Zwarich
3224
3225        Fix Gtk non-AllInOne build
3226
3227        * GNUmakefile.am: include JSVariableObject.cpp
3228        * kjs/RegExpConstructor.cpp: include RegExpObject.h
3229        * kjs/RegExpObject.h: forward declare RegExpPrototype
3230
32312008-06-28  Darin Adler  <darin@apple.com>
3232
3233        Reviewed by Sam and Cameron.
3234
3235        - fix https://bugs.webkit.org/show_bug.cgi?id=19805
3236          Array.concat turns missing array elements into "undefined"
3237
3238        Test: fast/js/array-holes.html
3239
3240        * JavaScriptCore.exp: No longer export JSArray::getItem.
3241
3242        * kjs/ArrayPrototype.cpp:
3243        (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of
3244        JSArray::getItem -- need to handle properties from the prototype chain
3245        instead of ignoring them.
3246
3247        * kjs/JSArray.cpp: Removed getItem.
3248        * kjs/JSArray.h: Ditto.
3249
32502008-06-28  Darin Adler  <darin@apple.com>
3251
3252        Reviewed by Cameron.
3253
3254        - https://bugs.webkit.org/show_bug.cgi?id=19804
3255          optimize access to arrays without "holes"
3256
3257        SunSpider says 1.8% faster.
3258
3259        * kjs/JSArray.cpp:
3260        (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating
3261        arrays. Also updated for new location of m_vectorLength.
3262        (KJS::JSArray::getItem): Updated for new location of m_vectorLength.
3263        (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of
3264        getOwnPropertySlot to make the hot part faster.
3265        (KJS::JSArray::getOwnPropertySlot): Added a new faster case for
3266        indices lower than m_fastAccessCutoff. We can do theese with no
3267        additional checks or branches.
3268        (KJS::JSArray::put): Added a new faster case for indices lower than
3269        m_fastAccessCutoff. We can do theese with no additional checks or
3270        branches. Moved the maxArrayIndex handling out of this function.
3271        Added code to set m_fastAccessCutoff when the very last hole in
3272        an array is filled; this is how the cutoff gets set for most arrays.
3273        (KJS::JSArray::putSlowCase): Moved the rest of the put function logic
3274        in here, to make the hot part of the put function faster.
3275        (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff
3276        when a delete makes a new hole in the array.
3277        (KJS::JSArray::getPropertyNames): Updated for new location of
3278        m_vectorLength.
3279        (KJS::JSArray::increaseVectorLength): Ditto.
3280        (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff
3281        when setLength makes the array smaller.
3282        (KJS::JSArray::mark): Updated for new location of m_vectorLength.
3283        (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving
3284        all the holes to the end of the array.
3285        (KJS::JSArray::compactForSorting): Ditto.
3286        (KJS::JSArray::checkConsistency): Added consistency checks fro
3287        m_fastAccessCutoff and updated for the new location of m_vectorLength.
3288
3289        * kjs/JSArray.h: Added declarations for slow case functions.
3290        Replaced m_vectorLength with m_fastAccessCutoff.
3291
32922008-06-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3293
3294        Reviewed by Sam.
3295
3296        When executing a native call, check for an exception before writing the
3297        return value.
3298
3299        * VM/Machine.cpp:
3300        (KJS::Machine::privateExecute):
3301
33022008-06-28  Mark Rowe  <mrowe@apple.com>
3303
3304        Build fix.  Flag headers as private or public as is appropriate.
3305        These settings were accidentally removed during some project file cleanup.
3306
3307        * JavaScriptCore.xcodeproj/project.pbxproj:
3308
33092008-06-28  Sam Weinig  <sam@webkit.org>
3310
3311        Rubber-stamped by Darin Adler.
3312
3313        Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp
3314
3315        * DerivedSources.make:
3316        * GNUmakefile.am:
3317        * JavaScriptCore.pri:
3318        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3319        * JavaScriptCore.xcodeproj/project.pbxproj:
3320        * JavaScriptCoreSources.bkl:
3321        * VM/Machine.cpp:
3322        * kjs/AllInOneFile.cpp:
3323        * kjs/JSGlobalObject.cpp:
3324        * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp.
3325        * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h.
3326        * kjs/RegExpObject.cpp:
3327        * kjs/RegExpObject.h:
3328        * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp.
3329        * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h.
3330        * kjs/StringPrototype.cpp:
3331        * kjs/internal.cpp:
3332
33332008-06-28  Sam Weinig  <sam@webkit.org>
3334
3335        Fix non-AllInOne builds.
3336
3337        * kjs/StringConstructor.cpp:
3338
33392008-06-28  Sam Weinig  <sam@webkit.org>
3340
3341        Rubber-stamped by Darin Adler.
3342
3343        Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined,
3344        StringConstructor and StringPrototype.
3345
3346        * DerivedSources.make:
3347        * GNUmakefile.am:
3348        * JavaScriptCore.pri:
3349        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3350        * JavaScriptCore.xcodeproj/project.pbxproj:
3351        * JavaScriptCoreSources.bkl:
3352        * kjs/AllInOneFile.cpp:
3353        * kjs/JSGlobalObject.cpp:
3354        * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
3355        * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h.
3356        * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
3357        * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h.
3358        * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h.
3359        * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
3360        * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h.
3361        * kjs/internal.cpp:
3362        * kjs/string_object.cpp: Removed.
3363        * kjs/string_object.h: Removed.
3364
33652008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
3366
3367        Gtk build fix: JSVariableObject is now part of AllInOne
3368
3369        * GNUmakefile.am:
3370
33712008-06-28  Darin Adler  <darin@apple.com>
3372
3373        Reviewed by Oliver.
3374
3375        - https://bugs.webkit.org/show_bug.cgi?id=19801
3376          add a feature so we can tell what regular expressions are taking time
3377
3378        * pcre/pcre_compile.cpp:
3379        (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on.
3380
3381        * pcre/pcre_exec.cpp:
3382        (jsRegExpExecute): Add hook to time execution.
3383        (Histogram::~Histogram): Print a sorted list of what took time.
3384        (Histogram::add): Accumulate records of what took time.
3385        (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls
3386        Histogram::add at the right moment and creates the global histogram
3387        object.
3388
3389        * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM.
3390
3391        * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed
3392        any more, but an omissions an earlier version of this patch detected.
3393        * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
3394        * pcre/pcre_xclass.cpp: Ditto.
3395
33962008-06-28  Sam Weinig  <sam@webkit.org>
3397
3398        Try and fix the Windows build again.
3399
3400        * kjs/RegExpObject.cpp:
3401        * kjs/date_object.cpp:
3402        * kjs/error_object.cpp:
3403
34042008-06-28  Sam Weinig  <sam@webkit.org>
3405
3406        Rubber-stamped by Darin Adler.
3407
3408        Remove unused StringConstructorFunction class.
3409
3410        * kjs/string_object.h:
3411
34122008-06-28  Sam Weinig  <sam@webkit.org>
3413
3414        Fix windows build.
3415
3416        * kjs/ArrayPrototype.cpp:
3417        * kjs/BooleanPrototype.cpp:
3418        * kjs/BooleanPrototype.h:
3419        * kjs/FunctionPrototype.cpp:
3420        * kjs/JSImmediate.cpp:
3421        * kjs/JSObject.cpp:
3422        * kjs/MathObject.cpp:
3423        * kjs/NumberPrototype.cpp:
3424        * kjs/NumberPrototype.h:
3425        * kjs/ObjectConstructor.cpp:
3426        * kjs/RegExpObject.h:
3427        * kjs/error_object.h:
3428        * kjs/string_object.cpp:
3429
34302008-06-28  Sam Weinig  <sam@webkit.org>
3431
3432        Rubber-stamped by Oliver Hunt.
3433
3434        Splits FunctionConstructor out of FunctionPrototype.h/cpp
3435        Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp
3436        Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor.
3437
3438        * API/JSCallbackConstructor.cpp:
3439        * API/JSClassRef.cpp:
3440        * API/JSObjectRef.cpp:
3441        * DerivedSources.make:
3442        * GNUmakefile.am:
3443        * JavaScriptCore.pri:
3444        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3445        * JavaScriptCore.xcodeproj/project.pbxproj:
3446        * JavaScriptCoreSources.bkl:
3447        * VM/Machine.cpp:
3448        * kjs/AllInOneFile.cpp:
3449        * kjs/ArrayConstructor.cpp:
3450        * kjs/ArrayConstructor.h:
3451        * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp.
3452        * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h.
3453        * kjs/FunctionPrototype.cpp:
3454        * kjs/FunctionPrototype.h:
3455        * kjs/JSFunction.cpp:
3456        * kjs/JSGlobalObject.cpp:
3457        * kjs/JSImmediate.cpp:
3458        * kjs/MathObject.h:
3459        * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
3460        * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h.
3461        * kjs/NumberObject.cpp:
3462        * kjs/NumberObject.h:
3463        * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
3464        * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h.
3465        * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
3466        * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h.
3467        * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
3468        * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h.
3469        * kjs/RegExpObject.h:
3470        * kjs/Shell.cpp:
3471        * kjs/error_object.h:
3472        * kjs/internal.cpp:
3473        * kjs/nodes.cpp:
3474        * kjs/object_object.cpp: Removed.
3475        * kjs/object_object.h: Removed.
3476        * kjs/string_object.h:
3477
34782008-06-28  Darin Adler  <darin@apple.com>
3479
3480        Reviewed by Oliver.
3481
3482        - fix https://bugs.webkit.org/show_bug.cgi?id=19796
3483          optimize expressions with ignored results (especially post-increment)
3484
3485        SunSpider says 0.9% faster.
3486
3487        * VM/CodeGenerator.h:
3488        (KJS::CodeGenerator::tempDestination): Create a new temporary for
3489        ignoredResult() too, just as we would for 0.
3490        (KJS::CodeGenerator::finalDestination): Use the temporary if the
3491        register passed in is ignoredResult() too, just as we would for 0.
3492        (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the
3493        passed in register is ignoredResult(), just as we would for 0.
3494        (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the
3495        register passed in is ignoredResult(). What matters is that we
3496        don't want to emit a move. The return value won't be looked at.
3497        (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it
3498        through to the node's emitCode function.
3499
3500        * VM/RegisterID.h:
3501        (KJS::ignoredResult): Added. Special value to indicate the result of
3502        a node will be ignored and need not be put in any register.
3503
3504        * kjs/nodes.cpp:
3505        (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult().
3506        (KJS::BooleanNode::emitCode): Ditto.
3507        (KJS::NumberNode::emitCode): Ditto.
3508        (KJS::StringNode::emitCode): Ditto.
3509        (KJS::RegExpNode::emitCode): Ditto.
3510        (KJS::ThisNode::emitCode): Ditto.
3511        (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and
3512        the identifier resolves to a local variable.
3513        (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult()
3514        and the object is empty.
3515        (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do
3516        nothing for the local constant case, and do a pre-increment in all the
3517        other cases.
3518        (KJS::PostDecResolveNode::emitCode): Ditto.
3519        (KJS::PostIncBracketNode::emitCode): Ditto.
3520        (KJS::PostDecBracketNode::emitCode): Ditto.
3521        (KJS::PostIncDotNode::emitCode): Ditto.
3522        (KJS::PostDecDotNode::emitCode): Ditto.
3523        (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating
3524        the expression.
3525        (KJS::VoidNode::emitCode): Ditto.
3526        (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing
3527        if the identifier resolves to a local variable, and don't bother generating
3528        a typeof opcode in the other case.
3529        (KJS::TypeOfValueNode::emitCode): Ditto.
3530        (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and
3531        the identifier resolves to a local constant.
3532        (KJS::PreDecResolveNode::emitCode): Ditto.
3533        (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple
3534        places, because we need to put the result into a register so we can assign
3535        it. At other sites this is taken care of by functions like finalDestination.
3536        (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first
3537        expression.
3538        (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and
3539        third expressions.
3540        (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first
3541        expression.
3542
35432008-06-28  Darin Adler  <darin@apple.com>
3544
3545        Reviewed by Oliver.
3546
3547        - https://bugs.webkit.org/show_bug.cgi?id=19787
3548          create most arrays from values in registers rather than with multiple put operations
3549
3550        SunSpider says 0.8% faster.
3551
3552        * VM/CodeBlock.cpp:
3553        (KJS::CodeBlock::dump): Added argv and argc parameters to new_array.
3554        * VM/Machine.cpp:
3555        (KJS::Machine::privateExecute): Ditto.
3556
3557        * VM/CodeGenerator.cpp:
3558        (KJS::CodeGenerator::emitNewArray): Added.
3559        * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray.
3560
3561        * kjs/nodes.cpp:
3562        (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be
3563        initialized with as many elements as possible. If the array doesn't have any
3564        holes in it, that's all that's needed. If there are holes, then emit some separate
3565        put operations for the other values in the array and for the length as needed.
3566
3567        * kjs/nodes.h: Added some accessors to ElementNode so the code generator can
3568        iterate through elements and generate code to evaluate them. Now ArrayNode does
3569        not need to be a friend. Also took out some unused PlacementNewAdoptType
3570        constructors.
3571
35722008-06-28  Darin Adler  <darin@apple.com>
3573
3574        Reviewed by Oliver.
3575
3576        * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors.
3577        We no longer mutate the AST in place.
3578
35792008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
3580
3581        Reviewed by Oliver Hunt.
3582
3583        Build fix
3584
3585        * VM/Machine.cpp: include stdio.h for printf
3586
35872008-06-27  Sam Weinig  <sam@webkit.org>
3588
3589        Reviewed by Oliver Hunt.
3590
3591        Fix platforms that don't use AllInOne.cpp
3592
3593        * kjs/BooleanConstructor.h:
3594        * kjs/BooleanPrototype.h:
3595        * kjs/FunctionPrototype.cpp:
3596
35972008-06-27  Sam Weinig  <sam@webkit.org>
3598
3599        Rubber-stamped by Oliver Hunt.
3600
3601        Splits ArrayConstructor out of ArrayPrototype.h/cpp
3602        Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp
3603
3604        * GNUmakefile.am:
3605        * JavaScriptCore.pri:
3606        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3607        * JavaScriptCore.xcodeproj/project.pbxproj:
3608        * JavaScriptCoreSources.bkl:
3609        * VM/Machine.cpp:
3610        * kjs/AllInOneFile.cpp:
3611        * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp.
3612        * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h.
3613        * kjs/ArrayPrototype.cpp:
3614        * kjs/ArrayPrototype.h:
3615        * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp.
3616        * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h.
3617        * kjs/BooleanObject.cpp:
3618        * kjs/BooleanObject.h:
3619        * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp.
3620        * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h.
3621        * kjs/CommonIdentifiers.h:
3622        * kjs/FunctionPrototype.cpp:
3623        * kjs/JSArray.cpp:
3624        * kjs/JSGlobalObject.cpp:
3625        * kjs/JSImmediate.cpp:
3626        * kjs/Shell.cpp:
3627        * kjs/internal.cpp:
3628        * kjs/nodes.cpp:
3629        * kjs/string_object.cpp:
3630
36312008-06-27  Oliver Hunt  <oliver@apple.com>
3632
3633        Reviewed by Sam.
3634
3635        Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626>
3636        <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish
3637
3638        Adds support for the slow script dialog in squirrelfish.  This requires the addition
3639        of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the
3640        same behaviour as their simple jump equivalents but have an additional time out check.
3641
3642        Additional assertions were added to other jump instructions to prevent accidentally
3643        creating loops with jump types that do not support time out checks.
3644
3645        Sunspider does not report a regression, however this appears very sensitive to code
3646        layout and hardware, so i would expect up to a 1% regression on other systems.
3647
3648        Part of this required moving the old timeout logic from JSGlobalObject and into Machine
3649        which is the cause of a number of the larger diff blocks.
3650
3651        * JavaScriptCore.exp:
3652        * VM/CodeBlock.cpp:
3653        (KJS::CodeBlock::dump):
3654        * VM/CodeGenerator.cpp:
3655        (KJS::CodeGenerator::emitJumpIfTrue):
3656        (KJS::CodeGenerator::emitJumpScopes):
3657        * VM/ExceptionHelpers.cpp:
3658        (KJS::InterruptedExecutionError::isWatchdogException):
3659        (KJS::createInterruptedExecutionException):
3660        * VM/ExceptionHelpers.h:
3661        * VM/LabelID.h:
3662        * VM/Machine.cpp:
3663        (KJS::Machine::Machine):
3664        (KJS::Machine::throwException):
3665        (KJS::Machine::resetTimeoutCheck):
3666        (KJS::getCurrentTime):
3667        (KJS::Machine::checkTimeout):
3668        (KJS::Machine::privateExecute):
3669        * VM/Machine.h:
3670        (KJS::Machine::setTimeoutTime):
3671        (KJS::Machine::startTimeoutCheck):
3672        (KJS::Machine::stopTimeoutCheck):
3673        (KJS::Machine::initTimeout):
3674        * VM/Opcode.cpp:
3675        (KJS::):
3676        * VM/Opcode.h:
3677        * kjs/JSGlobalObject.cpp:
3678        (KJS::JSGlobalObject::init):
3679        (KJS::JSGlobalObject::setTimeoutTime):
3680        (KJS::JSGlobalObject::startTimeoutCheck):
3681        * kjs/JSGlobalObject.h:
3682        * kjs/JSObject.h:
3683        * kjs/interpreter.cpp:
3684        (KJS::Interpreter::evaluate):
3685
36862008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>
3687
3688        Gtk and Qt build fix: Remove RegisterFileStack from the build
3689        scripts.
3690
3691        * GNUmakefile.am:
3692        * JavaScriptCore.pri:
3693
36942008-06-27  Adele Peterson  <adele@apple.com>
3695
3696        Reviewed by Geoff.
3697
3698        Build fixes. 
3699
3700        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3701        * VM/RegisterFile.h:
3702        (KJS::RegisterFile::RegisterFile):
3703        * kjs/JSGlobalObject.cpp:
3704        * kjs/collector.cpp:
3705
37062008-06-27  Geoffrey Garen  <ggaren@apple.com>
3707
3708        Reviewed by Oliver Hunt.
3709        
3710        One RegisterFile to rule them all!
3711        
3712        SunSpider reports a 0.2% speedup.
3713
3714        This patch removes the RegisterFileStack abstraction and replaces it with
3715        a single register file that
3716        
3717        (a) allocates a fixed storage area, including a fixed area for global
3718        vars, so that no operation may cause the register file to reallocate
3719        
3720        and
3721
3722        (b) swaps between global storage areas when executing code in different 
3723        global objects.
3724        
3725        This patch also changes the layout of the register file so that all call
3726        frames, including call frames for global code, get a header. This is
3727        required to support re-entrant global code. It also just makes things simpler.
3728        
3729        * VM/CodeGenerator.cpp:
3730        (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in
3731        that
3732        
3733        (a) global vars don't contribute to a CodeBlock's numLocals count, since
3734        global storage is fixed and allocated at startup
3735        
3736        and
3737        
3738        (b) references to global vars get shifted to elide intermediate stack
3739        between "r" and the global storage area.
3740        
3741        * VM/Machine.cpp:
3742        (KJS::Machine::dumpRegisters): Updated this function to match the new
3743        register file layout, and added the ability to dump exact identifiers
3744        for the different parts of a call frame.
3745        
3746        (KJS::Machine::unwindCallFrame): Updated this function to match the new
3747        register file layout.
3748         
3749        (KJS::Machine::execute): Updated this function to initialize a call frame
3750        header for global code, and to swap global storage areas when switching
3751        to execution in a new global object.
3752        
3753        (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading
3754        of registerBase because the register file is always safe for reentry now,
3755        and registerBase never changes.
3756        
3757        * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile,
3758        to resolve a header dependency problem (a good sign that the enum belonged
3759        in RegisterFile all along!)
3760
3761        * VM/RegisterFile.cpp:
3762        * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register
3763        area. This allows us to avoid re-allocting the register file later on.
3764        Instead, we rely on the OS to allocate physical pages to the register
3765        file as necessary.
3766
3767        * VM/RegisterFileStack.cpp: Removed. Tada!
3768        * VM/RegisterFileStack.h: Removed. Tada!
3769
3770        * kjs/DebuggerCallFrame.cpp: Updated this class to match the new
3771        register file layout, greatly simplifying it in the process.
3772
3773        * kjs/JSActivation.h:
3774        * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject,
3775        since the global object now needs to be able to tear off its registers
3776        just like the activation object.
3777
3778        * kjs/JSFunction.cpp: No need to fiddle with the register file anymore.
3779
3780        * kjs/JSGlobalObject.h:
3781        * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its
3782        global storage area into and out of the register file.
3783
3784        * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore.
3785
3786        * kjs/collector.cpp: Renamed markStackObjectConservatively to
3787        markConservatively, since we don't just mark stack objects this way.
3788        
3789        Also, added code to mark the machine's register file.
3790
3791        * kjs/config.h: Moved some platforms #defines from here...
3792        * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection
3793        in RegisterFile.h.
3794
37952008-06-26  Mark Rowe  <mrowe@apple.com>
3796
3797        Speculative fix for the Windows build.
3798
3799        * kjs/JSImmediate.cpp:
3800
38012008-06-26  Mark Rowe  <mrowe@apple.com>
3802
3803        Reviewed by Darin Adler and Geoff Garen.
3804
3805        Fix the malloc zone introspection functions so that malloc_zone_statistics does not give
3806        bogus output in an application that uses JavaScriptCore.
3807
3808        * kjs/CollectorHeapIntrospector.cpp:
3809        (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector.
3810        * kjs/CollectorHeapIntrospector.h:
3811        * wtf/FastMalloc.cpp: Zero out the statistics.  FastMalloc doesn't track this information at present.
3812        Returning zero for all values is preferable to returning bogus data.
3813
38142008-06-26  Darin Adler  <darin@apple.com>
3815
3816        Reviewed by Geoff.
3817
3818        - https://bugs.webkit.org/show_bug.cgi?id=19721
3819          speed up JavaScriptCore by not wrapping strings in objects just
3820          to call functions on them
3821
3822        - optimize UString append and the replace function a bit
3823
3824        SunSpider says 1.8% faster.
3825
3826        * JavaScriptCore.exp: Updated.
3827
3828        * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed
3829        because jsString returns a JSString*.
3830
3831        * VM/Machine.cpp:
3832        (KJS::Machine::privateExecute): Removed the toObject call from native
3833        function calls. Also removed code to put the this value into a register.
3834
3835        * kjs/BooleanObject.cpp:
3836        (KJS::booleanProtoFuncToString): Rewrite to handle false and true
3837        separately.
3838
3839        * kjs/FunctionPrototype.cpp:
3840        (KJS::constructFunction): Use single-character append rather than building
3841        a string for each character.
3842        * kjs/JSFunction.cpp:
3843        (KJS::globalFuncUnescape): Ditto.
3844
3845        * kjs/JSImmediate.cpp:
3846        (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for
3847        use with an immediate value. To be used instead of toObject when doing a
3848        get on an immediate value.
3849        * kjs/JSImmediate.h: Added prototype.
3850
3851        * kjs/JSObject.cpp:
3852        (KJS::JSObject::toString): Tweaked formatting.
3853
3854        * kjs/JSObject.h:
3855        (KJS::JSValue::get): Use prototype instead of toObject to avoid creating
3856        an object wrapper just to search for properties. This also saves an
3857        unnecessary hash table lookup since the object wrappers themselves don't
3858        have any properties.
3859
3860        * kjs/JSString.h: Added toThisString and toThisJSString.
3861
3862        * kjs/JSValue.cpp:
3863        (KJS::JSCell::toThisString): Added.
3864        (KJS::JSCell::toThisJSString): Added.
3865        (KJS::JSCell::getJSNumber): Added.
3866        (KJS::jsString): Changed return type to JSString*.
3867        (KJS::jsOwnedString): Ditto.
3868
3869        * kjs/JSValue.h:
3870        (KJS::JSValue::toThisString): Added.
3871        (KJS::JSValue::toThisJSString): Added.
3872        (KJS::JSValue::getJSNumber): Added.
3873
3874        * kjs/NumberObject.cpp:
3875        (KJS::NumberObject::getJSNumber): Added.
3876        (KJS::integer_part_noexp): Append C string directly rather than first
3877        turning it into a UString.
3878        (KJS::numberProtoFuncToString): Use getJSNumber to check if the value
3879        is a number rather than isObject(&NumberObject::info). This works for
3880        immediate numbers, number cells, and NumberObject instances.
3881        (KJS::numberProtoFuncToLocaleString): Ditto.
3882        (KJS::numberProtoFuncValueOf): Ditto.
3883        (KJS::numberProtoFuncToFixed): Ditto.
3884        (KJS::numberProtoFuncToExponential): Ditto.
3885        (KJS::numberProtoFuncToPrecision): Ditto.
3886        * kjs/NumberObject.h: Added getJSNumber.
3887
3888        * kjs/PropertySlot.cpp: Tweaked comment.
3889
3890        * kjs/internal.cpp:
3891        (KJS::JSString::toThisString): Added.
3892        (KJS::JSString::toThisJSString): Added.
3893        (KJS::JSString::getOwnPropertySlot): Changed code that searches the
3894        prototype chain to start with the string prototype and not create a
3895        string object.
3896        (KJS::JSNumberCell::toThisString): Added.
3897        (KJS::JSNumberCell::getJSNumber): Added.
3898
3899        * kjs/lookup.cpp:
3900        (KJS::staticFunctionGetter): Moved here, because there's no point in
3901        having a function that's only used for a function pointer be inline.
3902        (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot.
3903
3904        * kjs/lookup.h:
3905        (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense
3906        to have a function that's only used for a function pointer be inline.
3907        (KJS::getStaticFunctionSlot): Changed to get properties from the parent
3908        first before doing any handling of functions. This is the fastest way
3909        to return the function once the initial setup is done.
3910
3911        * kjs/string_object.cpp:
3912        (KJS::StringObject::getPropertyNames): Call value() instead of getString(),
3913        avoiding an unnecessary virtual function call (the call to the type()
3914        function in the implementation of the isString() function).
3915        (KJS::StringObject::toString): Added.
3916        (KJS::StringObject::toThisString): Added.
3917        (KJS::StringObject::toThisJSString): Added.
3918        (KJS::substituteBackreferences): Rewrote to use a appending algorithm
3919        instead of a the old one that tried to replace in place.
3920        (KJS::stringProtoFuncReplace): Merged this function and the replace function.
3921        Replaced the hand-rolled dynamic arrays for source ranges and replacements
3922        with Vector.
3923        (KJS::stringProtoFuncToString): Handle JSString as well as StringObject.
3924        Removed the separate valueOf implementation, since it can just share this.
3925        (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as
3926        well as StringObject, and is slightly more efficient than the old code too.
3927        (KJS::stringProtoFuncCharCodeAt): Ditto.
3928        (KJS::stringProtoFuncConcat): Ditto.
3929        (KJS::stringProtoFuncIndexOf): Ditto.
3930        (KJS::stringProtoFuncLastIndexOf): Ditto.
3931        (KJS::stringProtoFuncMatch): Ditto.
3932        (KJS::stringProtoFuncSearch): Ditto.
3933        (KJS::stringProtoFuncSlice): Ditto.
3934        (KJS::stringProtoFuncSplit): Ditto.
3935        (KJS::stringProtoFuncSubstr): Ditto.
3936        (KJS::stringProtoFuncSubstring): Ditto.
3937        (KJS::stringProtoFuncToLowerCase): Use toThisJSString.
3938        (KJS::stringProtoFuncToUpperCase): Ditto.
3939        (KJS::stringProtoFuncToLocaleLowerCase): Ditto.
3940        (KJS::stringProtoFuncToLocaleUpperCase): Ditto.
3941        (KJS::stringProtoFuncLocaleCompare): Ditto.
3942        (KJS::stringProtoFuncBig): Use toThisString.
3943        (KJS::stringProtoFuncSmall): Ditto.
3944        (KJS::stringProtoFuncBlink): Ditto.
3945        (KJS::stringProtoFuncBold): Ditto.
3946        (KJS::stringProtoFuncFixed): Ditto.
3947        (KJS::stringProtoFuncItalics): Ditto.
3948        (KJS::stringProtoFuncStrike): Ditto.
3949        (KJS::stringProtoFuncSub): Ditto.
3950        (KJS::stringProtoFuncSup): Ditto.
3951        (KJS::stringProtoFuncFontcolor): Ditto.
3952        (KJS::stringProtoFuncFontsize): Ditto.
3953        (KJS::stringProtoFuncAnchor): Ditto.
3954        (KJS::stringProtoFuncLink): Ditto.
3955
3956        * kjs/string_object.h: Added toString, toThisString, and toThisJSString.
3957
3958        * kjs/ustring.cpp:
3959        (KJS::UString::append): Added a version that takes a character pointer and
3960        size, so we don't have to create a UString just to append to another UString.
3961        * kjs/ustring.h:
3962
39632008-06-26  Alexey Proskuryakov  <ap@webkit.org>
3964
3965        Reviewed by Maciej.
3966
3967        Make JSGlobalData per-thread.
3968
3969        No change on SunSpider total.
3970
3971        * wtf/ThreadSpecific.h: Re-enabled the actual implementation.
3972
3973        * kjs/JSGlobalObject.cpp:
3974        (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably
3975        want to preserve these somehow to keep legacy behavior in working condition.
3976        (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready
3977        when updating JSGlobalObject linked list.
3978
3979        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and
3980        to use JSGlobalData associated with the current object.
3981
3982        * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed
3983        Heap::registerAsMainThread() call.
3984
3985        * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not
3986        transient, and while newParserObjects may conceptually be such, there is still some node
3987        manipulation going on outside Parser::parse which touches it.
3988
3989        * kjs/JSGlobalData.cpp:
3990        (KJS::JSGlobalData::~JSGlobalData): Delete recently added members.
3991        (KJS::JSGlobalData::sharedInstance): Actually use a separate instance.
3992
3993        * kjs/collector.cpp:
3994        (KJS::Heap::Heap):
3995        (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything.
3996        (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic.
3997        (KJS::Heap::collect): Ditto.
3998        (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked
3999        list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only
4000        work with the main thread currently anyway.
4001        (KJS::Heap::protectedGlobalObjectCount): Ditto.
4002
4003        * kjs/collector.h: Removed code related to "collect on main thread only" logic.
4004
4005        * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly.
4006
40072008-06-26  Alexey Proskuryakov  <ap@webkit.org>
4008
4009        Reviewed by Darin.
4010
4011        https://bugs.webkit.org/show_bug.cgi?id=19767
4012        REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/
4013
4014        * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
4015        Made changing balance factor from -1 to +1 work correctly.
4016
4017        * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches
4018        this slightly earlier.
4019
40202008-06-25  Timothy Hatcher  <timothy@apple.com>
4021
4022        Fixes an ASSERT in the profiler when starting multiple profiles
4023        with the same name inside the same function/program.
4024
4025        Reviewed by Kevin McCullough.
4026
4027        * profiler/Profile.cpp:
4028        (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero.
4029        (KJS::Profile::stopProfiling): Set the current node to the parent,
4030        because we are in a call that will not get a didExecute call.
4031        (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to
4032        account for didExecute not being called for profile.
4033        (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped.
4034        (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and
4035        greater than zero, and return early.
4036        * profiler/Profile.h: Added stoppedProfiling().
4037        * profiler/Profiler.cpp:
4038        (KJS::Profiler::findProfile): Removed.
4039        (KJS::Profiler::startProfiling): Don't return early for stopped profiles.
4040        (KJS::Profiler::stopProfiling): Skipp stopped profiles.
4041        (KJS::Profiler::didFinishAllExecution): Code clean-up.
4042        * profiler/Profiler.h: Removed findProfile.
4043
40442008-06-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4045
4046        Reviewed by Alexey Proskuryakov.
4047
4048        Attempt to fix Windows debug build. The compiler gives a warning when
4049        Structured Exception Handling and destructors are used in the same
4050        function. Using manual locking and unlocking instead of constructors
4051        and destructors should fix the warning.
4052
4053        * kjs/Shell.cpp:
4054        (main):
4055
40562008-06-25  Alexey Proskuryakov  <ap@webkit.org>
4057
4058        Forgot to address a review comment about better names for tracked objects, doing it now.
4059
4060        * kjs/JSGlobalData.cpp:
4061        (KJS::JSGlobalData::JSGlobalData):
4062        * kjs/JSGlobalData.h:
4063        * kjs/nodes.cpp:
4064        (KJS::ParserRefCounted::ParserRefCounted):
4065        (KJS::ParserRefCounted::ref):
4066        (KJS::ParserRefCounted::deref):
4067        (KJS::ParserRefCounted::hasOneRef):
4068        (KJS::ParserRefCounted::deleteNewObjects):
4069
40702008-06-25  Alexey Proskuryakov  <ap@webkit.org>
4071
4072        Reviewed by Geoff.
4073
4074        Remove more threadInstance() calls.
4075
4076        * kjs/JSFunction.cpp:
4077        (KJS::JSFunction::getParameterName):
4078        (KJS::IndexToNameMap::unMap):
4079        (KJS::Arguments::deleteProperty):
4080        * kjs/JSFunction.h:
4081        Access nullIdentifier without going to thread specific storage.
4082
4083        * JavaScriptCore.exp:
4084        * kjs/JSGlobalData.cpp:
4085        (KJS::JSGlobalData::JSGlobalData):
4086        * kjs/JSGlobalData.h:
4087        * kjs/Parser.cpp:
4088        (KJS::Parser::parse):
4089        * kjs/Parser.h:
4090        (KJS::ParserRefCountedData::ParserRefCountedData):
4091        (KJS::Parser::parse):
4092        * kjs/grammar.y:
4093        * kjs/nodes.cpp:
4094        (KJS::ParserRefCounted::ParserRefCounted):
4095        (KJS::ParserRefCounted::ref):
4096        (KJS::ParserRefCounted::deref):
4097        (KJS::ParserRefCounted::hasOneRef):
4098        (KJS::ParserRefCounted::deleteNewObjects):
4099        (KJS::Node::Node):
4100        (KJS::StatementNode::StatementNode):
4101        (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
4102        (KJS::ConstDeclNode::ConstDeclNode):
4103        (KJS::BlockNode::BlockNode):
4104        (KJS::ForInNode::ForInNode):
4105        (KJS::ScopeNode::ScopeNode):
4106        (KJS::ProgramNode::ProgramNode):
4107        (KJS::ProgramNode::create):
4108        (KJS::EvalNode::EvalNode):
4109        (KJS::EvalNode::create):
4110        (KJS::FunctionBodyNode::FunctionBodyNode):
4111        (KJS::FunctionBodyNode::create):
4112        * kjs/nodes.h:
4113        (KJS::ExpressionNode::):
4114        (KJS::NullNode::):
4115        (KJS::BooleanNode::):
4116        (KJS::NumberNode::):
4117        (KJS::ImmediateNumberNode::):
4118        (KJS::StringNode::):
4119        (KJS::RegExpNode::):
4120        (KJS::ThisNode::):
4121        (KJS::ResolveNode::):
4122        (KJS::ElementNode::):
4123        (KJS::ArrayNode::):
4124        (KJS::PropertyNode::):
4125        (KJS::PropertyListNode::):
4126        (KJS::ObjectLiteralNode::):
4127        (KJS::BracketAccessorNode::):
4128        (KJS::DotAccessorNode::):
4129        (KJS::ArgumentListNode::):
4130        (KJS::ArgumentsNode::):
4131        (KJS::NewExprNode::):
4132        (KJS::EvalFunctionCallNode::):
4133        (KJS::FunctionCallValueNode::):
4134        (KJS::FunctionCallResolveNode::):
4135        (KJS::FunctionCallBracketNode::):
4136        (KJS::FunctionCallDotNode::):
4137        (KJS::PrePostResolveNode::):
4138        (KJS::PostIncResolveNode::):
4139        (KJS::PostDecResolveNode::):
4140        (KJS::PostfixBracketNode::):
4141        (KJS::PostIncBracketNode::):
4142        (KJS::PostDecBracketNode::):
4143        (KJS::PostfixDotNode::):
4144        (KJS::PostIncDotNode::):
4145        (KJS::PostDecDotNode::):
4146        (KJS::PostfixErrorNode::):
4147        (KJS::DeleteResolveNode::):
4148        (KJS::DeleteBracketNode::):
4149        (KJS::DeleteDotNode::):
4150        (KJS::DeleteValueNode::):
4151        (KJS::VoidNode::):
4152        (KJS::TypeOfResolveNode::):
4153        (KJS::TypeOfValueNode::):
4154        (KJS::PreIncResolveNode::):
4155        (KJS::PreDecResolveNode::):
4156        (KJS::PrefixBracketNode::):
4157        (KJS::PreIncBracketNode::):
4158        (KJS::PreDecBracketNode::):
4159        (KJS::PrefixDotNode::):
4160        (KJS::PreIncDotNode::):
4161        (KJS::PreDecDotNode::):
4162        (KJS::PrefixErrorNode::):
4163        (KJS::UnaryOpNode::UnaryOpNode):
4164        (KJS::UnaryPlusNode::):
4165        (KJS::NegateNode::):
4166        (KJS::BitwiseNotNode::):
4167        (KJS::LogicalNotNode::):
4168        (KJS::BinaryOpNode::BinaryOpNode):
4169        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
4170        (KJS::MultNode::):
4171        (KJS::DivNode::):
4172        (KJS::ModNode::):
4173        (KJS::AddNode::):
4174        (KJS::SubNode::):
4175        (KJS::LeftShiftNode::):
4176        (KJS::RightShiftNode::):
4177        (KJS::UnsignedRightShiftNode::):
4178        (KJS::LessNode::):
4179        (KJS::GreaterNode::):
4180        (KJS::LessEqNode::):
4181        (KJS::GreaterEqNode::):
4182        (KJS::InstanceOfNode::):
4183        (KJS::InNode::):
4184        (KJS::EqualNode::):
4185        (KJS::NotEqualNode::):
4186        (KJS::StrictEqualNode::):
4187        (KJS::NotStrictEqualNode::):
4188        (KJS::BitAndNode::):
4189        (KJS::BitOrNode::):
4190        (KJS::BitXOrNode::):
4191        (KJS::LogicalAndNode::):
4192        (KJS::LogicalOrNode::):
4193        (KJS::ConditionalNode::):
4194        (KJS::ReadModifyResolveNode::):
4195        (KJS::AssignResolveNode::):
4196        (KJS::ReadModifyBracketNode::):
4197        (KJS::AssignBracketNode::):
4198        (KJS::AssignDotNode::):
4199        (KJS::ReadModifyDotNode::):
4200        (KJS::AssignErrorNode::):
4201        (KJS::CommaNode::):
4202        (KJS::VarDeclCommaNode::):
4203        (KJS::ConstStatementNode::):
4204        (KJS::SourceElements::SourceElements):
4205        (KJS::EmptyStatementNode::):
4206        (KJS::DebuggerStatementNode::):
4207        (KJS::ExprStatementNode::):
4208        (KJS::VarStatementNode::):
4209        (KJS::IfNode::):
4210        (KJS::IfElseNode::):
4211        (KJS::DoWhileNode::):
4212        (KJS::WhileNode::):
4213        (KJS::ForNode::):
4214        (KJS::ContinueNode::):
4215        (KJS::BreakNode::):
4216        (KJS::ReturnNode::):
4217        (KJS::WithNode::):
4218        (KJS::LabelNode::):
4219        (KJS::ThrowNode::):
4220        (KJS::TryNode::):
4221        (KJS::ParameterNode::):
4222        (KJS::FuncExprNode::):
4223        (KJS::FuncDeclNode::):
4224        (KJS::CaseClauseNode::):
4225        (KJS::ClauseListNode::):
4226        (KJS::CaseBlockNode::):
4227        (KJS::SwitchNode::):
4228        Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
4229        threadInstance calls.
4230
42312008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4232
4233        Reviewed by Alexey Proskuryakov.
4234
4235        Make the JavaScript shell collect the heap from main() instead of
4236        jscmain() to suppress leak messages in debug builds.
4237
4238        * kjs/Shell.cpp:
4239        (main):
4240        (jscmain):
4241
42422008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4243
4244        Reviewed by Maciej.
4245
4246        Make the conversion of the pair (less, jtrue) to jless use register
4247        reference counting information for safety instead of requiring callers
4248        to decide whether it is safe.
4249
4250        No changes on SunSpider codegen.
4251
4252        * VM/CodeGenerator.cpp:
4253        (KJS::CodeGenerator::emitJumpIfTrue):
4254        * VM/CodeGenerator.h:
4255        * kjs/nodes.cpp:
4256        (KJS::DoWhileNode::emitCode):
4257        (KJS::WhileNode::emitCode):
4258        (KJS::ForNode::emitCode):
4259        (KJS::CaseBlockNode::emitCodeForBlock):
4260
42612008-06-24  Kevin McCullough  <kmccullough@apple.com>
4262
4263        Reviewed by Tim.
4264
4265        <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite
4266        loop sometimes.
4267        <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and
4268        give the wrong times in release
4269
4270        Fixed two issues found by Tim in the same test.
4271
4272        * profiler/Profile.cpp:
4273        (KJS::Profile::removeProfileStart): No longer take profile's time from
4274        all ancestors, but instead attribute it to its parent.  Also add an
4275        Assert to ensure we only delete the child we mean to.
4276        (KJS::Profile::removeProfileEnd): Ditto for profileEnd.
4277        (KJS::Profile::didExecute): Cleaned up the execution order and correctly
4278        attribute all of the parent's time to the new node.
4279        * profiler/ProfileNode.cpp: If this node does not have a startTime it
4280        should not get a giant total time, but instead be 0.
4281        (KJS::ProfileNode::endAndRecordCall):
4282        * profiler/ProfileNode.h:
4283        (KJS::ProfileNode::removeChild): Should reset the sibling pointers since
4284        one of them has been removed.
4285
42862008-06-24  Darin Adler  <darin@apple.com>
4287
4288        Reviewed by Cameron.
4289
4290        - fix https://bugs.webkit.org/show_bug.cgi?id=19739
4291          REGRESSION: fast/js/property-getters-and-setters.html fails
4292
4293        * kjs/JSObject.cpp:
4294        (KJS::JSObject::put): Remove an untested optimization I checked in by accident.
4295        The two loops up the prototype chain both need to start from this; instead the
4296        second loop was starting where the first loop left off.
4297
42982008-06-24  Steve Falkenburg  <sfalken@apple.com>
4299
4300        Build fix.
4301
4302        * kjs/nodes.cpp:
4303
43042008-06-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>
4305
4306        Reviewed by Simon.
4307
4308        For the Qt build on Windows don't depend on the presence of GNU CPP
4309        but use MSVC's preprocessor instead.
4310        dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms.
4311
4312        * pcre/dftables: Added support for specifying the preprocessor command
4313        to use via --preprocessor, similar to
4314        WebCore/bindings/scripts/generate-bindings.pl.
4315        * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more
4316        generally speaking QMAKE_CC /E for the win32-msvc buildspecs.
4317
43182008-06-24  Simon Hausmann  <hausmann@webkit.org>
4319
4320        Fix the Qt build, added missing include.
4321
4322        * kjs/PropertySlot.cpp:
4323
43242008-06-24  Alexey Proskuryakov  <ap@webkit.org>
4325
4326        Reviewed by Cameron Zwarich.
4327
4328        Make ParserRefCountedCounter actually perform a leak check.
4329
4330        * kjs/nodes.cpp:
4331        (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor,
4332        not in constructor.
4333        (KJS::ParserRefCountedCounter::increment):
4334        (KJS::ParserRefCountedCounter::decrement):
4335        (KJS::ParserRefCounted::ParserRefCounted):
4336        (KJS::ParserRefCounted::~ParserRefCounted):
4337        While at it, also made counting thread-safe.
4338
43392008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4340
4341        Reviewed by Oliver.
4342
4343        Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped
4344        <https://bugs.webkit.org/show_bug.cgi?id=19730>
4345
4346        Do not convert the pair (less, jtrue) to jless when jtrue is a jump
4347        target. An example of this is when the condition of a while loop is a
4348        LogicalOrNode.
4349
4350        * VM/CodeGenerator.cpp:
4351        (KJS::CodeGenerator::emitLabel):
4352
43532008-06-20  Ariya Hidayat  <ariya.hidayat@trolltech.com>
4354
4355        Reviewed by Adam Roben.
4356
4357        Fix compile with MinGW.
4358
4359        * kjs/Shell.cpp:
4360        * wtf/Threading.h:
4361        (WTF::atomicIncrement):
4362        (WTF::atomicDecrement):
4363
43642008-06-23  Mark Rowe  <mrowe@apple.com>
4365
4366        Reviewed by Oliver Hunt.
4367
4368        Prepration for returning memory to the OS on Windows.  Track whether a portion of a span of memory was returned to the OS.
4369        If it was, ask that it be recommitted before returning it to the application as an allocated region.
4370
4371        * wtf/FastMalloc.cpp:
4372        (WTF::TCMalloc_PageHeap::New):  If the span was decommitted, ask that it be recommitted before returning it.
4373        (WTF::TCMalloc_PageHeap::AllocLarge):  Ditto.
4374        (WTF::TCMalloc_PageHeap::Carve):  When splitting a span, ensure that the decommitted state propogates to the two new spans.
4375        (WTF::TCMalloc_PageHeap::Delete):  When merging a span, ensure that the resulting span is marked as decommitted if any of the
4376        spans being merged were marked as decommitted.
4377        (WTF::TCMalloc_PageHeap::IncrementalScavenge):  Mark as decommitted after releasing the span.
4378        (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application
4379        without first being recommitted.
4380        (WTF::TCMalloc_Central_FreeList::Populate): Ditto.
4381        * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit.
4382        * wtf/TCSystemAlloc.h:
4383
43842008-06-23  Mark Rowe  <mrowe@apple.com>
4385
4386        Reviewed by Sam Weinig.
4387
4388        Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined.
4389
4390        * wtf/FastMalloc.cpp:
4391        (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined.
4392        (WTF::TCMallocStats::do_free):  Ditto.
4393
43942008-06-23  Darin Adler  <darin@apple.com>
4395
4396        Reviewed by Geoff.
4397
4398        - work toward https://bugs.webkit.org/show_bug.cgi?id=19721
4399
4400        More preparation toward making functions work on primitive types without
4401        creating wrapper objects. No speedup this time, but prepares for a future
4402        speedup without slowing things down.
4403
4404        SunSpider reports no change.
4405
4406        - Eliminated the implementsCall, callAsFunction and construct virtual
4407          functions from JSObject. Instead, the CallData and ConstructData for
4408          a native function includes a function pointer that the caller can use
4409          directly. Changed all call sites to use CallData and ConstructData.
4410
4411        - Changed the "this" argument to native functions to be a JSValue rather
4412          than a JSObject. This prepares us for passing primitives into these
4413          functions. The conversion to an object now must be done inside the
4414          function. Critically, if it's a function that can be called on a DOM
4415          window object, then we have to be sure to call toThisObject on the
4416          argument before we use it for anything even if it's already an object.
4417
4418        - Eliminated the practice of using constructor objects in the global
4419          object to make objects of the various basic types. Since these
4420          constructors can't be replaced by script, there's no reason to involve
4421          a constructor object at all. Added functions to do the construction
4422          directly.
4423
4424        - Made some more class members private and protected, including virtual
4425          function overrides. This can catch code using unnecessarily slow virtual
4426          function code paths when the type of an object is known statically. If we
4427          later find a new reason use the members outside the class it's easy to
4428          make them public again.
4429
4430        - Moved the declarations of the native implementations for functions out
4431          of header files. These can have internal linkage and be declared inside
4432          the source file.
4433
4434        - Changed PrototypeFunction to take function pointers with the right
4435          arguments to be put directly into CallData. This eliminates the
4436          need to have a separate PrototypeReflexiveFunction, and reveals that the
4437          real purpose of that class included something else specific to eval --
4438          storage of a cached global object. So renamed PrototypeReflexiveFunction
4439          to GlobalEvalFunction.
4440
4441        * API/JSCallbackConstructor.cpp:
4442        (KJS::constructJSCallback):
4443        (KJS::JSCallbackConstructor::getConstructData):
4444        * API/JSCallbackConstructor.h:
4445        * API/JSCallbackFunction.cpp:
4446        (KJS::JSCallbackFunction::implementsHasInstance):
4447        (KJS::JSCallbackFunction::call):
4448        (KJS::JSCallbackFunction::getCallData):
4449        * API/JSCallbackFunction.h:
4450        (KJS::JSCallbackFunction::classInfo):
4451        * API/JSCallbackObject.h:
4452        (KJS::JSCallbackObject::classRef):
4453        (KJS::JSCallbackObject::classInfo):
4454        * API/JSCallbackObjectFunctions.h:
4455        (KJS::::getConstructData):
4456        (KJS::::construct):
4457        (KJS::::getCallData):
4458        (KJS::::call):
4459        * API/JSObjectRef.cpp:
4460        (JSObjectMakeFunction):
4461        (JSObjectIsFunction):
4462        (JSObjectCallAsFunction):
4463        (JSObjectCallAsConstructor):
4464        * JavaScriptCore.exp:
4465        * VM/Machine.cpp:
4466        (KJS::jsTypeStringForValue):
4467        (KJS::Machine::privateExecute):
4468        * kjs/ArrayPrototype.cpp:
4469        (KJS::arrayProtoFuncToString):
4470        (KJS::arrayProtoFuncToLocaleString):
4471        (KJS::arrayProtoFuncJoin):
4472        (KJS::arrayProtoFuncConcat):
4473        (KJS::arrayProtoFuncPop):
4474        (KJS::arrayProtoFuncPush):
4475        (KJS::arrayProtoFuncReverse):
4476        (KJS::arrayProtoFuncShift):
4477        (KJS::arrayProtoFuncSlice):
4478        (KJS::arrayProtoFuncSort):
4479        (KJS::arrayProtoFuncSplice):
4480        (KJS::arrayProtoFuncUnShift):
4481        (KJS::arrayProtoFuncFilter):
4482        (KJS::arrayProtoFuncMap):
4483        (KJS::arrayProtoFuncEvery):
4484        (KJS::arrayProtoFuncForEach):
4485        (KJS::arrayProtoFuncSome):
4486        (KJS::arrayProtoFuncIndexOf):
4487        (KJS::arrayProtoFuncLastIndexOf):
4488        (KJS::ArrayConstructor::ArrayConstructor):
4489        (KJS::constructArrayWithSizeQuirk):
4490        (KJS::constructWithArrayConstructor):
4491        (KJS::ArrayConstructor::getConstructData):
4492        (KJS::callArrayConstructor):
4493        (KJS::ArrayConstructor::getCallData):
4494        * kjs/ArrayPrototype.h:
4495        * kjs/BooleanObject.cpp:
4496        (KJS::booleanProtoFuncToString):
4497        (KJS::booleanProtoFuncValueOf):
4498        (KJS::constructBoolean):
4499        (KJS::constructWithBooleanConstructor):
4500        (KJS::BooleanConstructor::getConstructData):
4501        (KJS::callBooleanConstructor):
4502        (KJS::BooleanConstructor::getCallData):
4503        (KJS::constructBooleanFromImmediateBoolean):
4504        * kjs/BooleanObject.h:
4505        * kjs/CallData.h:
4506        (KJS::):
4507        * kjs/ConstructData.h:
4508        (KJS::):
4509        * kjs/FunctionPrototype.cpp:
4510        (KJS::callFunctionPrototype):
4511        (KJS::FunctionPrototype::getCallData):
4512        (KJS::functionProtoFuncToString):
4513        (KJS::functionProtoFuncApply):
4514        (KJS::functionProtoFuncCall):
4515        (KJS::constructWithFunctionConstructor):
4516        (KJS::FunctionConstructor::getConstructData):
4517        (KJS::callFunctionConstructor):
4518        (KJS::FunctionConstructor::getCallData):
4519        (KJS::constructFunction):
4520        * kjs/FunctionPrototype.h:
4521        * kjs/JSArray.cpp:
4522        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
4523        (KJS::JSArray::sort):
4524        (KJS::constructEmptyArray):
4525        (KJS::constructArray):
4526        * kjs/JSArray.h:
4527        (KJS::JSArray::classInfo):
4528        * kjs/JSFunction.cpp:
4529        (KJS::JSFunction::call):
4530        (KJS::globalFuncEval):
4531        (KJS::globalFuncParseInt):
4532        (KJS::globalFuncParseFloat):
4533        (KJS::globalFuncIsNaN):
4534        (KJS::globalFuncIsFinite):
4535        (KJS::globalFuncDecodeURI):
4536        (KJS::globalFuncDecodeURIComponent):
4537        (KJS::globalFuncEncodeURI):
4538        (KJS::globalFuncEncodeURIComponent):
4539        (KJS::globalFuncEscape):
4540        (KJS::globalFuncUnescape):
4541        (KJS::globalFuncKJSPrint):
4542        (KJS::PrototypeFunction::PrototypeFunction):
4543        (KJS::PrototypeFunction::getCallData):
4544        (KJS::GlobalEvalFunction::GlobalEvalFunction):
4545        (KJS::GlobalEvalFunction::mark):
4546        * kjs/JSFunction.h:
4547        (KJS::InternalFunction::classInfo):
4548        (KJS::InternalFunction::functionName):
4549        (KJS::JSFunction::classInfo):
4550        (KJS::GlobalEvalFunction::cachedGlobalObject):
4551        * kjs/JSGlobalObject.cpp:
4552        (KJS::JSGlobalObject::reset):
4553        (KJS::JSGlobalObject::mark):
4554        * kjs/JSGlobalObject.h:
4555        (KJS::JSGlobalObject::JSGlobalObject):
4556        (KJS::JSGlobalObject::evalFunction):
4557        * kjs/JSImmediate.cpp:
4558        (KJS::JSImmediate::toObject):
4559        * kjs/JSNotAnObject.cpp:
4560        * kjs/JSNotAnObject.h:
4561        * kjs/JSObject.cpp:
4562        (KJS::JSObject::put):
4563        (KJS::callDefaultValueFunction):
4564        (KJS::JSObject::defaultValue):
4565        (KJS::JSObject::lookupGetter):
4566        (KJS::JSObject::lookupSetter):
4567        (KJS::JSObject::hasInstance):
4568        (KJS::JSObject::fillGetterPropertySlot):
4569        (KJS::Error::create):
4570        (KJS::constructEmptyObject):
4571        * kjs/JSObject.h:
4572        (KJS::GetterSetter::GetterSetter):
4573        (KJS::GetterSetter::getter):
4574        (KJS::GetterSetter::setGetter):
4575        (KJS::GetterSetter::setter):
4576        (KJS::GetterSetter::setSetter):
4577        * kjs/JSValue.cpp:
4578        (KJS::JSCell::deleteProperty):
4579        (KJS::call):
4580        (KJS::construct):
4581        * kjs/JSValue.h:
4582        * kjs/MathObject.cpp:
4583        (KJS::mathProtoFuncAbs):
4584        (KJS::mathProtoFuncACos):
4585        (KJS::mathProtoFuncASin):
4586        (KJS::mathProtoFuncATan):
4587        (KJS::mathProtoFuncATan2):
4588        (KJS::mathProtoFuncCeil):
4589        (KJS::mathProtoFuncCos):
4590        (KJS::mathProtoFuncExp):
4591        (KJS::mathProtoFuncFloor):
4592        (KJS::mathProtoFuncLog):
4593        (KJS::mathProtoFuncMax):
4594        (KJS::mathProtoFuncMin):
4595        (KJS::mathProtoFuncPow):
4596        (KJS::mathProtoFuncRandom):
4597        (KJS::mathProtoFuncRound):
4598        (KJS::mathProtoFuncSin):
4599        (KJS::mathProtoFuncSqrt):
4600        (KJS::mathProtoFuncTan):
4601        * kjs/MathObject.h:
4602        * kjs/NumberObject.cpp:
4603        (KJS::numberProtoFuncToString):
4604        (KJS::numberProtoFuncToLocaleString):
4605        (KJS::numberProtoFuncValueOf):
4606        (KJS::numberProtoFuncToFixed):
4607        (KJS::numberProtoFuncToExponential):
4608        (KJS::numberProtoFuncToPrecision):
4609        (KJS::NumberConstructor::NumberConstructor):
4610        (KJS::constructWithNumberConstructor):
4611        (KJS::NumberConstructor::getConstructData):
4612        (KJS::callNumberConstructor):
4613        (KJS::NumberConstructor::getCallData):
4614        (KJS::constructNumber):
4615        (KJS::constructNumberFromImmediateNumber):
4616        * kjs/NumberObject.h:
4617        (KJS::NumberObject::classInfo):
4618        (KJS::NumberConstructor::classInfo):
4619        * kjs/PropertySlot.cpp:
4620        (KJS::PropertySlot::functionGetter):
4621        * kjs/RegExpObject.cpp:
4622        (KJS::regExpProtoFuncTest):
4623        (KJS::regExpProtoFuncExec):
4624        (KJS::regExpProtoFuncCompile):
4625        (KJS::regExpProtoFuncToString):
4626        (KJS::callRegExpObject):
4627        (KJS::RegExpObject::getCallData):
4628        (KJS::constructRegExp):
4629        (KJS::constructWithRegExpConstructor):
4630        (KJS::RegExpConstructor::getConstructData):
4631        (KJS::callRegExpConstructor):
4632        (KJS::RegExpConstructor::getCallData):
4633        * kjs/RegExpObject.h:
4634        (KJS::RegExpConstructor::classInfo):
4635        * kjs/Shell.cpp:
4636        (GlobalObject::GlobalObject):
4637        (functionPrint):
4638        (functionDebug):
4639        (functionGC):
4640        (functionVersion):
4641        (functionRun):
4642        (functionLoad):
4643        (functionReadline):
4644        (functionQuit):
4645        * kjs/date_object.cpp:
4646        (KJS::gmtoffset):
4647        (KJS::formatLocaleDate):
4648        (KJS::fillStructuresUsingDateArgs):
4649        (KJS::DateInstance::getTime):
4650        (KJS::DateInstance::getUTCTime):
4651        (KJS::DateConstructor::DateConstructor):
4652        (KJS::constructDate):
4653        (KJS::DateConstructor::getConstructData):
4654        (KJS::callDate):
4655        (KJS::DateConstructor::getCallData):
4656        (KJS::dateParse):
4657        (KJS::dateNow):
4658        (KJS::dateUTC):
4659        (KJS::dateProtoFuncToString):
4660        (KJS::dateProtoFuncToUTCString):
4661        (KJS::dateProtoFuncToDateString):
4662        (KJS::dateProtoFuncToTimeString):
4663        (KJS::dateProtoFuncToLocaleString):
4664        (KJS::dateProtoFuncToLocaleDateString):
4665        (KJS::dateProtoFuncToLocaleTimeString):
4666        (KJS::dateProtoFuncValueOf):
4667        (KJS::dateProtoFuncGetTime):
4668        (KJS::dateProtoFuncGetFullYear):
4669        (KJS::dateProtoFuncGetUTCFullYear):
4670        (KJS::dateProtoFuncToGMTString):
4671        (KJS::dateProtoFuncGetMonth):
4672        (KJS::dateProtoFuncGetUTCMonth):
4673        (KJS::dateProtoFuncGetDate):
4674        (KJS::dateProtoFuncGetUTCDate):
4675        (KJS::dateProtoFuncGetDay):
4676        (KJS::dateProtoFuncGetUTCDay):
4677        (KJS::dateProtoFuncGetHours):
4678        (KJS::dateProtoFuncGetUTCHours):
4679        (KJS::dateProtoFuncGetMinutes):
4680        (KJS::dateProtoFuncGetUTCMinutes):
4681        (KJS::dateProtoFuncGetSeconds):
4682        (KJS::dateProtoFuncGetUTCSeconds):
4683        (KJS::dateProtoFuncGetMilliSeconds):
4684        (KJS::dateProtoFuncGetUTCMilliseconds):
4685        (KJS::dateProtoFuncGetTimezoneOffset):
4686        (KJS::dateProtoFuncSetTime):
4687        (KJS::setNewValueFromTimeArgs):
4688        (KJS::setNewValueFromDateArgs):
4689        (KJS::dateProtoFuncSetMilliSeconds):
4690        (KJS::dateProtoFuncSetUTCMilliseconds):
4691        (KJS::dateProtoFuncSetSeconds):
4692        (KJS::dateProtoFuncSetUTCSeconds):
4693        (KJS::dateProtoFuncSetMinutes):
4694        (KJS::dateProtoFuncSetUTCMinutes):
4695        (KJS::dateProtoFuncSetHours):
4696        (KJS::dateProtoFuncSetUTCHours):
4697        (KJS::dateProtoFuncSetDate):
4698        (KJS::dateProtoFuncSetUTCDate):
4699        (KJS::dateProtoFuncSetMonth):
4700        (KJS::dateProtoFuncSetUTCMonth):
4701        (KJS::dateProtoFuncSetFullYear):
4702        (KJS::dateProtoFuncSetUTCFullYear):
4703        (KJS::dateProtoFuncSetYear):
4704        (KJS::dateProtoFuncGetYear):
4705        * kjs/date_object.h:
4706        (KJS::DateInstance::internalNumber):
4707        (KJS::DateInstance::classInfo):
4708        * kjs/error_object.cpp:
4709        (KJS::errorProtoFuncToString):
4710        (KJS::constructError):
4711        (KJS::constructWithErrorConstructor):
4712        (KJS::ErrorConstructor::getConstructData):
4713        (KJS::callErrorConstructor):
4714        (KJS::ErrorConstructor::getCallData):
4715        (KJS::NativeErrorConstructor::construct):
4716        (KJS::constructWithNativeErrorConstructor):
4717        (KJS::NativeErrorConstructor::getConstructData):
4718        (KJS::callNativeErrorConstructor):
4719        (KJS::NativeErrorConstructor::getCallData):
4720        * kjs/error_object.h:
4721        (KJS::NativeErrorConstructor::classInfo):
4722        * kjs/internal.cpp:
4723        (KJS::JSNumberCell::toObject):
4724        (KJS::JSNumberCell::toThisObject):
4725        (KJS::GetterSetter::mark):
4726        (KJS::GetterSetter::toPrimitive):
4727        (KJS::GetterSetter::toBoolean):
4728        (KJS::GetterSetter::toNumber):
4729        (KJS::GetterSetter::toString):
4730        (KJS::GetterSetter::toObject):
4731        (KJS::InternalFunction::InternalFunction):
4732        (KJS::InternalFunction::implementsHasInstance):
4733        * kjs/lookup.h:
4734        (KJS::HashEntry::):
4735        * kjs/nodes.cpp:
4736        (KJS::FuncDeclNode::makeFunction):
4737        (KJS::FuncExprNode::makeFunction):
4738        * kjs/object_object.cpp:
4739        (KJS::objectProtoFuncValueOf):
4740        (KJS::objectProtoFuncHasOwnProperty):
4741        (KJS::objectProtoFuncIsPrototypeOf):
4742        (KJS::objectProtoFuncDefineGetter):
4743        (KJS::objectProtoFuncDefineSetter):
4744        (KJS::objectProtoFuncLookupGetter):
4745        (KJS::objectProtoFuncLookupSetter):
4746        (KJS::objectProtoFuncPropertyIsEnumerable):
4747        (KJS::objectProtoFuncToLocaleString):
4748        (KJS::objectProtoFuncToString):
4749        (KJS::ObjectConstructor::ObjectConstructor):
4750        (KJS::constructObject):
4751        (KJS::constructWithObjectConstructor):
4752        (KJS::ObjectConstructor::getConstructData):
4753        (KJS::callObjectConstructor):
4754        (KJS::ObjectConstructor::getCallData):
4755        * kjs/object_object.h:
4756        * kjs/string_object.cpp:
4757        (KJS::replace):
4758        (KJS::stringProtoFuncToString):
4759        (KJS::stringProtoFuncValueOf):
4760        (KJS::stringProtoFuncCharAt):
4761        (KJS::stringProtoFuncCharCodeAt):
4762        (KJS::stringProtoFuncConcat):
4763        (KJS::stringProtoFuncIndexOf):
4764        (KJS::stringProtoFuncLastIndexOf):
4765        (KJS::stringProtoFuncMatch):
4766        (KJS::stringProtoFuncSearch):
4767        (KJS::stringProtoFuncReplace):
4768        (KJS::stringProtoFuncSlice):
4769        (KJS::stringProtoFuncSplit):
4770        (KJS::stringProtoFuncSubstr):
4771        (KJS::stringProtoFuncSubstring):
4772        (KJS::stringProtoFuncToLowerCase):
4773        (KJS::stringProtoFuncToUpperCase):
4774        (KJS::stringProtoFuncToLocaleLowerCase):
4775        (KJS::stringProtoFuncToLocaleUpperCase):
4776        (KJS::stringProtoFuncLocaleCompare):
4777        (KJS::stringProtoFuncBig):
4778        (KJS::stringProtoFuncSmall):
4779        (KJS::stringProtoFuncBlink):
4780        (KJS::stringProtoFuncBold):
4781        (KJS::stringProtoFuncFixed):
4782        (KJS::stringProtoFuncItalics):
4783        (KJS::stringProtoFuncStrike):
4784        (KJS::stringProtoFuncSub):
4785        (KJS::stringProtoFuncSup):
4786        (KJS::stringProtoFuncFontcolor):
4787        (KJS::stringProtoFuncFontsize):
4788        (KJS::stringProtoFuncAnchor):
4789        (KJS::stringProtoFuncLink):
4790        (KJS::stringFromCharCode):
4791        (KJS::StringConstructor::StringConstructor):
4792        (KJS::constructWithStringConstructor):
4793        (KJS::StringConstructor::getConstructData):
4794        (KJS::callStringConstructor):
4795        (KJS::StringConstructor::getCallData):
4796        * kjs/string_object.h:
4797
47982008-06-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4799
4800        Reviewed by Oliver.
4801
4802        Bug 19716: REGRESSION (SquirrelFish): Reproducible crash after entering a username at mint.com
4803        <https://bugs.webkit.org/show_bug.cgi?id=19716>
4804
4805        When unwinding callframes for exceptions, check whether the callframe
4806        was created by a reentrant native call to JavaScript after tearing off
4807        the local variables instead of before.
4808
4809        * VM/Machine.cpp:
4810        (KJS::Machine::unwindCallFrame):
4811
48122008-06-23  Mark Rowe  <mrowe@apple.com>
4813
4814        Reviewed by Oliver Hunt.
4815
4816        Get testapi passing again in a debug build.
4817
4818        * API/testapi.c:
4819        (main): Update the expected output of calling JSValueMakeString on a function object.
4820
48212008-06-21  Mark Rowe  <mrowe@apple.com>
4822
4823        Reviewed by Sam Weinig.
4824
4825        Print a blank line when exiting the jsc interactive mode to ensure that the shell
4826        prompt will start on a new line.
4827
4828        * kjs/Shell.cpp:
4829        (runInteractive):
4830
48312008-06-21  Mark Rowe  <mrowe@apple.com>
4832
4833        Rubber-stamped by Sam Weinig.
4834
4835        Tweak the paths of the items in the "tests" group to clean things up a little.
4836
4837        * JavaScriptCore.xcodeproj/project.pbxproj:
4838
48392008-06-21  Mark Rowe  <mrowe@apple.com>
4840
4841        Rubber-stamped by Sam Weinig.
4842
4843        Fix jsc to link against libedit.dylib rather than libedit.2.dylib.
4844
4845        * JavaScriptCore.xcodeproj/project.pbxproj:
4846
48472008-06-21  Mark Rowe  <mrowe@apple.com>
4848
4849        Reviewed by Sam Weinig.
4850
4851        Copy the JavaScriptCore shell (jsc) into JavaScriptCore.framework so that it will
4852        be included in nightly builds.
4853        https://bugs.webkit.org/show_bug.cgi?id=19691
4854
4855        * JavaScriptCore.xcodeproj/project.pbxproj:
4856
48572008-06-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4858
4859        Reviewed by Mark Rowe.
4860
4861        Fix the build for non-Mac Darwin platforms by disabling their support
4862        for readline in the JavaScript shell.
4863
4864        * kjs/config.h:
4865
48662008-06-20  Timothy Hatcher  <timothy@apple.com>
4867
4868        Use member function pointers for the Profile::forEach function.
4869        Eliminating a few static functions and simplified things a little.
4870
4871        Reviewed by Alexey Proskuryakov.
4872
4873        * JavaScriptCore.exp: Change the symbol for forEach.
4874        * profiler/Profile.cpp:
4875        (KJS::Profile::forEach): Use a member function pointer.
4876        * profiler/Profile.h:
4877        (KJS::Profile::sortTotalTimeDescending): Pass a function pointer.
4878        (KJS::Profile::sortTotalTimeAscending): Ditto.
4879        (KJS::Profile::sortSelfTimeDescending): Ditto.
4880        (KJS::Profile::sortSelfTimeAscending): Ditto.
4881        (KJS::Profile::sortCallsDescending): Ditto.
4882        * profiler/ProfileNode.h:
4883        (KJS::ProfileNode::sortTotalTimeDescending): No longer static.
4884        (KJS::ProfileNode::sortTotalTimeAscending): Ditto.
4885        (KJS::ProfileNode::sortSelfTimeDescending): Ditto.
4886        (KJS::ProfileNode::sortSelfTimeAscending): Ditto.
4887        (KJS::ProfileNode::sortCallsDescending): Ditto.
4888
48892008-06-20  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4890
4891        Reviewed by Oliver.
4892
4893        Remove unused destructors.
4894
4895        * kjs/nodes.cpp:
4896        * kjs/nodes.h:
4897
48982008-06-20  Timothy Hatcher  <timothy@apple.com>
4899
4900        Fixed an ASSERT(m_actualSelfTime <= m_actualTotalTime) when starting
4901        and stopping a profile from the Develop menu. Also prevents
4902        inserting an incorrect parent node as the new head after profiling
4903        is stopped from the Develop menu.
4904
4905        Reviewed by Dan Bernstein.
4906
4907        * profiler/Profile.cpp:
4908        (KJS::Profile::stopProfiling): If the current node is already the head
4909        then there is no more need to record future nodes in didExecute.
4910        (KJS::Profile::didExecute): Move the code of setupCurrentNodeAsStopped
4911        into here since this was the only caller. When setting the total time
4912        keep any current total time while adding the self time of the head.
4913        (KJS::Profile::setupCurrentNodeAsStopped): Removed.
4914        * profiler/Profile.h: Removed setupCurrentNodeAsStopped.
4915
49162008-06-20  Kevin Ollivier  <kevino@theolliviers.com>
4917
4918        !USE(MULTIPLE_THREADS) on Darwin build fix
4919
4920        * kjs/InitializeThreading.cpp:
4921        (KJS::initializeThreading):
4922        * kjs/collector.h:
4923
49242008-06-20  Kevin McCullough  <kmccullough@apple.com>
4925
4926        -Leopard Build Fix.
4927
4928        * profiler/Profile.cpp:
4929        (KJS::Profile::removeProfileStart):
4930        (KJS::Profile::removeProfileEnd):
4931
49322008-06-20  Kevin McCullough  <kmccullough@apple.com>
4933
4934        Just giving credit.
4935
4936        * ChangeLog:
4937
49382008-06-20  Kevin McCullough  <kmccullough@apple.com>
4939
4940        Reviewed by Tim and Dan.
4941
4942        <rdar://problem/6024846> JSProfiler: ASSERT hit in Profiler.
4943        - Because InspectorController can call startProfiling() and
4944        stopProfiling() we cannot assert that console.profile() and
4945        console.profileEnd() will be in the profile tree.
4946
4947        * profiler/Profile.cpp:
4948        (KJS::Profile::removeProfileStart):
4949        (KJS::Profile::removeProfileEnd):
4950
49512008-06-20  Kevin McCullough  <kmccullough@apple.com>
4952
4953        Reviewed by Tim.
4954
4955        <rdar://problem/5958770> JSProfiler: Time incorrectly given to (idle)
4956        if profiling is started and finished within the same function. (19230)
4957        - Now we profile one more stack frame up from the last frame to allocate
4958        the time spent in it, if it exists.
4959
4960        * JavaScriptCore.exp:
4961        * VM/Machine.cpp: We need to let the profiler know when the JS program 
4962        has finished since that is what will actually stop the profiler instead
4963        of just calling stopProfiling().
4964        (KJS::Machine::execute):
4965        * profiler/Profile.cpp:
4966        (KJS::Profile::create): Moved from Profile.h since it was getting pretty
4967        long.
4968        (KJS::Profile::Profile): We now have a client, which is a listener who
4969        we will return this profile to, once it has actually finished.
4970        (KJS::Profile::stopProfiling): Instead of fully stopping the profiler
4971        here, we set the flag and keep it profiling in the background.
4972        (KJS::Profile::didFinishAllExecution): This is where the profiler
4973        actually finishes and creates the (idle) node if one should be made.
4974        (KJS::Profile::removeProfileStart): Don't use m_currentNode since it is
4975        needed by the profiler as it runs silently in the background.
4976        (KJS::Profile::removeProfileEnd): Ditto.
4977        (KJS::Profile::willExecute): Don't profile new functions if we have
4978        stopped profiling.
4979        (KJS::Profile::didExecute): Only record one more return as all the
4980        remaining time will be attributed to that function.
4981        (KJS::Profile::setupCurrentNodeAsStopped): Sets the current node's time.
4982        * profiler/Profile.h: Added functions and variables for the above
4983        changes.
4984        (KJS::Profile::client):
4985        * profiler/ProfileNode.h:
4986        (KJS::CallIdentifier::toString): Debug method.
4987        * profiler/Profiler.cpp: Added support for the ProfilerClient.
4988        (KJS::Profiler::startProfiling):
4989        (KJS::Profiler::stopProfiling): No longer return sthe profile.
4990        (KJS::Profiler::didFinishAllExecution): Now returns the profile to the
4991        client instead of stopProfiling.
4992        * profiler/Profiler.h:
4993        (KJS::ProfilerClient::~ProfilerClient): Clients will implement this
4994        interface.
4995
49962008-06-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>
4997
4998        Reviewed by Simon.
4999
5000        Surpress compiler warning (int vs unsigned comparison).
5001
5002        * wtf/unicode/qt4/UnicodeQt4.h:
5003        (WTF::Unicode::toLower):
5004
50052008-06-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>
5006
5007        Reviewed by Timothy Hatcher.
5008
5009        Introduce compiler define for MinGW, to have COMPILER(MINGW).
5010
5011        * wtf/Platform.h:
5012
50132008-06-19  Alexey Proskuryakov  <ap@webkit.org>
5014
5015        Reviewed by Geoff.
5016
5017        Make Machine per-JSGlobalData.
5018
5019        * VM/CodeBlock.cpp:
5020        (KJS::CodeBlock::dump):
5021        * VM/CodeGenerator.cpp:
5022        (KJS::CodeGenerator::emitOpcode):
5023        * VM/Machine.cpp:
5024        (KJS::callEval):
5025        (KJS::Machine::unwindCallFrame):
5026        (KJS::Machine::throwException):
5027        (KJS::Machine::execute):
5028        (KJS::Machine::debug):
5029        * VM/Machine.h:
5030        * kjs/DebuggerCallFrame.cpp:
5031        (KJS::DebuggerCallFrame::evaluate):
5032        * kjs/DebuggerCallFrame.h:
5033        (KJS::DebuggerCallFrame::DebuggerCallFrame):
5034        * kjs/ExecState.cpp:
5035        (KJS::ExecState::ExecState):
5036        * kjs/ExecState.h:
5037        (KJS::ExecState::machine):
5038        * kjs/JSFunction.cpp:
5039        (KJS::JSFunction::callAsFunction):
5040        (KJS::JSFunction::argumentsGetter):
5041        (KJS::JSFunction::callerGetter):
5042        (KJS::JSFunction::construct):
5043        (KJS::globalFuncEval):
5044        * kjs/JSGlobalData.cpp:
5045        (KJS::JSGlobalData::JSGlobalData):
5046        * kjs/JSGlobalData.h:
5047        * kjs/interpreter.cpp:
5048        (KJS::Interpreter::evaluate):
5049
50502008-06-19  Alp Toker  <alp@nuanti.com>
5051
5052        GTK+/autotools build fix. JSGlobalObject.cpp in now in
5053        AllInOneFile.cpp and shouldn't be built separately.
5054
5055        * GNUmakefile.am:
5056
50572008-06-19  Alexey Proskuryakov  <ap@webkit.org>
5058
5059        Reviewed by Darin.
5060
5061        Get rid of some threadInstance calls.
5062
5063        * kjs/JSGlobalObject.cpp:
5064        (KJS::JSGlobalObject::init):
5065        * kjs/Parser.cpp:
5066        (KJS::Parser::parse):
5067        * kjs/Shell.cpp:
5068        (jscmain):
5069
50702008-06-19  Alexey Proskuryakov  <ap@webkit.org>
5071
5072        Reviewed by Sam.
5073
5074        Fix an assertion failure at startup.
5075
5076        * kjs/JSObject.h: (KJS::JSObject::JSObject): Allow jsNull prototype in an assertion (I had
5077        it fixed in a wrong copy of the file, so I wasn't getting the failure).
5078
50792008-06-19  Alexey Proskuryakov  <ap@webkit.org>
5080
5081        Build fix.
5082
5083        * kjs/collector.cpp:
5084        (KJS::Heap::Heap):
5085        (KJS::allocateBlock):
5086        * kjs/collector.h:
5087        No, #if PLATFORM(UNIX) was not right. I've just moved the unsafe initialization back for now,
5088        as the platforms that use that code path do not use multiple threads yet.
5089
50902008-06-19  Alexey Proskuryakov  <ap@webkit.org>
5091
5092        Windows and Qt build fixes.
5093
5094        * kjs/collector.h: 
5095        * kjs/collector.cpp:
5096        (KJS::Heap::Heap):
5097        Wrapped m_pagesize in #if PLATFORM(UNIX), which should better match the sequence of #elifs
5098        in allocateBlock(). Changed MIN_ARRAY_SIZE to be explicitly size_t, as this type is different
5099        on different platforms.
5100
51012008-06-17  Alexey Proskuryakov  <ap@webkit.org>
5102
5103        Reviewed by Darin.
5104
5105        Prepare JavaScript heap for being per-thread.
5106
5107        * kjs/ExecState.h: Shuffle includes, making it possible to include ExecState.h in JSValue.h.
5108        (KJS::ExecState::heap): Added an accessor.
5109
5110        * API/JSBase.cpp: (JSGarbageCollect): Collect both shared and per-thread heaps.
5111
5112        * API/JSContextRef.cpp: (JSGlobalContextCreate): When allocating JSGlobalObject, indicate
5113        that it belongs to a shared heap.
5114
5115        * JavaScriptCore.xcodeproj/project.pbxproj:
5116        * kjs/AllInOneFile.cpp:
5117        Moved JSGlobalObject.cpp to AllInOneFile, as a build fix for inlineAllocate magic.
5118
5119        * VM/CodeGenerator.h: (KJS::CodeGenerator::globalExec): Added an accessor (working via
5120        m_scopeChain).
5121
5122        * VM/RegisterFile.h:
5123        (KJS::RegisterFile::mark):
5124        * VM/RegisterFileStack.h:
5125        (KJS::RegisterFileStack::mark):
5126        Made these pseudo-mark functions take Heap*.
5127
5128        * kjs/InitializeThreading.cpp:
5129        (KJS::initializeThreading): Initialize heap introspector.
5130
5131        * kjs/JSGlobalData.h: Added Heap to the structure.
5132
5133        * kjs/JSGlobalData.cpp:
5134        (KJS::JSGlobalData::JSGlobalData): Initialize Heap.
5135        (KJS::JSGlobalData::sharedInstance): Added a method to access shared global data instance
5136        for legacy clients.
5137
5138        * kjs/JSGlobalObject.cpp:
5139        (KJS::JSGlobalObject::~JSGlobalObject): Changed to work with per-thread head; fixed list
5140        maintenance logic.
5141        (KJS::JSGlobalObject::init): Changed to work with per-thread head.
5142        (KJS::JSGlobalObject::put): Assert that a cross-heap operation is not being attempted.
5143        (KJS::JSGlobalObject::reset): Pass ExecState* where now required.
5144        (KJS::JSGlobalObject::mark): Pass the current heap to RegisterFileStack::mark.
5145        (KJS::JSGlobalObject::operator new): Overload operator new to use per-thread or shared heap.
5146        * kjs/JSGlobalObject.h: Removed static s_head member.
5147
5148        * kjs/PropertyMap.h: (KJS::PropertyMap::PropertyMap): Removed unused SavedProperty.
5149
5150        * kjs/collector.h: Turned Collector into an actual object with its own data, renamed to Heap.
5151        (KJS::Heap::initializeHeapIntrospector): Added.
5152        (KJS::Heap::heap): Added a method to determine which heap a JSValue is in, if any.
5153        (KJS::Heap::allocate): Made non-static.
5154        (KJS::Heap::inlineAllocateNumber): Ditto.
5155        (KJS::Heap::markListSet): Ditto.
5156        (KJS::Heap::cellBlock): Ditto.
5157        (KJS::Heap::cellOffset): Ditto.
5158        (KJS::Heap::isCellMarked): Ditto.
5159        (KJS::Heap::markCell): Ditto.
5160        (KJS::Heap::reportExtraMemoryCost): Ditto.
5161        (KJS::CollectorBlock): Added a back-reference to Heap for Heap::heap() method.
5162        (KJS::SmallCellCollectorBlock): Ditto.
5163
5164        * kjs/collector.cpp: Changed MIN_ARRAY_SIZE to a #define to avoid a PIC branch. Removed
5165        main thread related machinery.
5166        (KJS::Heap::Heap): Initialize the newly added data members.
5167        (KJS::allocateBlock): Marked NEVER_INLINE, as this is a rare case that uses a PIC branch.
5168        Moved static pagesize to the class to make it safely initialized.
5169        (KJS::Heap::heapAllocate): Initialize heap back reference after a new block is allocated.
5170        (KJS::Heap::registerThread): Removed introspector initialization, as it is now performed
5171        in InitializeThreading.cpp.
5172        (KJS::Heap::markOtherThreadConservatively): Assert that the "other thread" case only occurs
5173        for legacy clients using a shared heap.
5174        (KJS::Heap::markStackObjectsConservatively): Moved fastMallocForbid/Allow down here, since
5175        it doesn't need to be forbidden during other GC phases.
5176
5177        * kjs/JSImmediate.h:
5178        (KJS::jsUndefined):
5179        (KJS::jsNull):
5180        (KJS::jsBoolean):
5181        Moved from JSvalue.h, to make these usable in files that cannot include JSValue.h (such
5182        as list.h).
5183
5184        * API/JSCallbackObjectFunctions.h:
5185        (KJS::::staticFunctionGetter):
5186        * API/JSClassRef.cpp:
5187        (OpaqueJSClass::prototype):
5188        * API/JSObjectRef.cpp:
5189        (JSObjectMake):
5190        (JSObjectMakeFunctionWithCallback):
5191        (JSObjectMakeConstructor):
5192        (JSObjectMakeFunction):
5193        * API/JSValueRef.cpp:
5194        (JSValueMakeNumber):
5195        (JSValueMakeString):
5196        * JavaScriptCore.exp:
5197        * VM/CodeGenerator.cpp:
5198        (KJS::CodeGenerator::emitLoad):
5199        * VM/JSPropertyNameIterator.cpp:
5200        (KJS::JSPropertyNameIterator::create):
5201        (KJS::JSPropertyNameIterator::next):
5202        * VM/Machine.cpp:
5203        (KJS::jsAddSlowCase):
5204        (KJS::jsAdd):
5205        (KJS::jsTypeStringForValue):
5206        (KJS::scopeChainForCall):
5207        (KJS::Machine::throwException):
5208        (KJS::Machine::execute):
5209        (KJS::Machine::privateExecute):
5210        (KJS::Machine::retrieveArguments):
5211        * kjs/ArrayPrototype.cpp:
5212        (KJS::arrayProtoFuncToString):
5213        (KJS::arrayProtoFuncToLocaleString):
5214        (KJS::arrayProtoFuncJoin):
5215        (KJS::arrayProtoFuncConcat):
5216        (KJS::arrayProtoFuncPop):
5217        (KJS::arrayProtoFuncPush):
5218        (KJS::arrayProtoFuncShift):
5219        (KJS::arrayProtoFuncSlice):
5220        (KJS::arrayProtoFuncSplice):
5221        (KJS::arrayProtoFuncUnShift):
5222        (KJS::arrayProtoFuncFilter):
5223        (KJS::arrayProtoFuncMap):
5224        (KJS::arrayProtoFuncEvery):
5225        (KJS::arrayProtoFuncForEach):
5226        (KJS::arrayProtoFuncSome):
5227        (KJS::arrayProtoFuncIndexOf):
5228        (KJS::arrayProtoFuncLastIndexOf):
5229        (KJS::ArrayConstructor::ArrayConstructor):
5230        (KJS::ArrayConstructor::construct):
5231        (KJS::ArrayConstructor::callAsFunction):
5232        * kjs/BooleanObject.cpp:
5233        (KJS::BooleanPrototype::BooleanPrototype):
5234        (KJS::booleanProtoFuncToString):
5235        (KJS::BooleanConstructor::BooleanConstructor):
5236        (KJS::BooleanConstructor::construct):
5237        * kjs/FunctionPrototype.cpp:
5238        (KJS::FunctionPrototype::FunctionPrototype):
5239        (KJS::functionProtoFuncToString):
5240        (KJS::FunctionConstructor::FunctionConstructor):
5241        (KJS::FunctionConstructor::construct):
5242        * kjs/JSActivation.cpp:
5243        (KJS::JSActivation::createArgumentsObject):
5244        * kjs/JSArray.cpp:
5245        (KJS::JSArray::JSArray):
5246        (KJS::JSArray::lengthGetter):
5247        * kjs/JSFunction.cpp:
5248        (KJS::JSFunction::lengthGetter):
5249        (KJS::JSFunction::construct):
5250        (KJS::Arguments::Arguments):
5251        (KJS::encode):
5252        (KJS::decode):
5253        (KJS::globalFuncParseInt):
5254        (KJS::globalFuncParseFloat):
5255        (KJS::globalFuncEscape):
5256        (KJS::globalFuncUnescape):
5257        (KJS::PrototypeFunction::PrototypeFunction):
5258        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
5259        * kjs/JSImmediate.cpp:
5260        (KJS::JSImmediate::toObject):
5261        * kjs/JSLock.cpp:
5262        (KJS::JSLock::registerThread):
5263        * kjs/JSObject.cpp:
5264        (KJS::JSObject::put):
5265        (KJS::JSObject::defineGetter):
5266        (KJS::JSObject::defineSetter):
5267        (KJS::Error::create):
5268        * kjs/JSObject.h:
5269        (KJS::JSObject::putDirect):
5270        * kjs/JSString.h:
5271        (KJS::JSString::JSString):
5272        * kjs/JSValue.cpp:
5273        (KJS::JSCell::operator new):
5274        (KJS::jsString):
5275        (KJS::jsOwnedString):
5276        * kjs/JSValue.h:
5277        (KJS::JSNumberCell::operator new):
5278        (KJS::jsNumberCell):
5279        (KJS::jsNaN):
5280        (KJS::jsNumber):
5281        (KJS::JSCell::marked):
5282        (KJS::JSCell::mark):
5283        (KJS::JSValue::toJSNumber):
5284        * kjs/MathObject.cpp:
5285        (KJS::MathObject::getValueProperty):
5286        (KJS::mathProtoFuncAbs):
5287        (KJS::mathProtoFuncACos):
5288        (KJS::mathProtoFuncASin):
5289        (KJS::mathProtoFuncATan):
5290        (KJS::mathProtoFuncATan2):
5291        (KJS::mathProtoFuncCeil):
5292        (KJS::mathProtoFuncCos):
5293        (KJS::mathProtoFuncExp):
5294        (KJS::mathProtoFuncFloor):
5295        (KJS::mathProtoFuncLog):
5296        (KJS::mathProtoFuncMax):
5297        (KJS::mathProtoFuncMin):
5298        (KJS::mathProtoFuncPow):
5299        (KJS::mathProtoFuncRandom):
5300        (KJS::mathProtoFuncRound):
5301        (KJS::mathProtoFuncSin):
5302        (KJS::mathProtoFuncSqrt):
5303        (KJS::mathProtoFuncTan):
5304        * kjs/NumberObject.cpp:
5305        (KJS::NumberPrototype::NumberPrototype):
5306        (KJS::numberProtoFuncToString):
5307        (KJS::numberProtoFuncToLocaleString):
5308        (KJS::numberProtoFuncToFixed):
5309        (KJS::numberProtoFuncToExponential):
5310        (KJS::numberProtoFuncToPrecision):
5311        (KJS::NumberConstructor::NumberConstructor):
5312        (KJS::NumberConstructor::getValueProperty):
5313        (KJS::NumberConstructor::construct):
5314        (KJS::NumberConstructor::callAsFunction):
5315        * kjs/RegExpObject.cpp:
5316        (KJS::RegExpPrototype::RegExpPrototype):
5317        (KJS::regExpProtoFuncToString):
5318        (KJS::RegExpObject::getValueProperty):
5319        (KJS::RegExpConstructor::RegExpConstructor):
5320        (KJS::RegExpMatchesArray::fillArrayInstance):
5321        (KJS::RegExpConstructor::arrayOfMatches):
5322        (KJS::RegExpConstructor::getBackref):
5323        (KJS::RegExpConstructor::getLastParen):
5324        (KJS::RegExpConstructor::getLeftContext):
5325        (KJS::RegExpConstructor::getRightContext):
5326        (KJS::RegExpConstructor::getValueProperty):
5327        (KJS::RegExpConstructor::construct):
5328        * kjs/RegExpObject.h:
5329        * kjs/Shell.cpp:
5330        (GlobalObject::GlobalObject):
5331        (functionGC):
5332        (functionRun):
5333        (functionReadline):
5334        (jscmain):
5335        * kjs/date_object.cpp:
5336        (KJS::formatLocaleDate):
5337        (KJS::DatePrototype::DatePrototype):
5338        (KJS::DateConstructor::DateConstructor):
5339        (KJS::DateConstructor::construct):
5340        (KJS::DateConstructor::callAsFunction):
5341        (KJS::DateFunction::DateFunction):
5342        (KJS::DateFunction::callAsFunction):
5343        (KJS::dateProtoFuncToString):
5344        (KJS::dateProtoFuncToUTCString):
5345        (KJS::dateProtoFuncToDateString):
5346        (KJS::dateProtoFuncToTimeString):
5347        (KJS::dateProtoFuncToLocaleString):
5348        (KJS::dateProtoFuncToLocaleDateString):
5349        (KJS::dateProtoFuncToLocaleTimeString):
5350        (KJS::dateProtoFuncValueOf):
5351        (KJS::dateProtoFuncGetTime):
5352        (KJS::dateProtoFuncGetFullYear):
5353        (KJS::dateProtoFuncGetUTCFullYear):
5354        (KJS::dateProtoFuncToGMTString):
5355        (KJS::dateProtoFuncGetMonth):
5356        (KJS::dateProtoFuncGetUTCMonth):
5357        (KJS::dateProtoFuncGetDate):
5358        (KJS::dateProtoFuncGetUTCDate):
5359        (KJS::dateProtoFuncGetDay):
5360        (KJS::dateProtoFuncGetUTCDay):
5361        (KJS::dateProtoFuncGetHours):
5362        (KJS::dateProtoFuncGetUTCHours):
5363        (KJS::dateProtoFuncGetMinutes):
5364        (KJS::dateProtoFuncGetUTCMinutes):
5365        (KJS::dateProtoFuncGetSeconds):
5366        (KJS::dateProtoFuncGetUTCSeconds):
5367        (KJS::dateProtoFuncGetMilliSeconds):
5368        (KJS::dateProtoFuncGetUTCMilliseconds):
5369        (KJS::dateProtoFuncGetTimezoneOffset):
5370        (KJS::dateProtoFuncSetTime):
5371        (KJS::setNewValueFromTimeArgs):
5372        (KJS::setNewValueFromDateArgs):
5373        (KJS::dateProtoFuncSetYear):
5374        (KJS::dateProtoFuncGetYear):
5375        * kjs/error_object.cpp:
5376        (KJS::ErrorPrototype::ErrorPrototype):
5377        (KJS::errorProtoFuncToString):
5378        (KJS::ErrorConstructor::ErrorConstructor):
5379        (KJS::ErrorConstructor::construct):
5380        (KJS::NativeErrorPrototype::NativeErrorPrototype):
5381        (KJS::NativeErrorConstructor::NativeErrorConstructor):
5382        (KJS::NativeErrorConstructor::construct):
5383        * kjs/identifier.h:
5384        * kjs/internal.cpp:
5385        (KJS::StringObject::create):
5386        (KJS::JSString::lengthGetter):
5387        (KJS::JSString::indexGetter):
5388        (KJS::JSString::indexNumericPropertyGetter):
5389        * kjs/interpreter.cpp:
5390        * kjs/list.cpp:
5391        (KJS::ArgList::slowAppend):
5392        * kjs/list.h:
5393        * kjs/lookup.h:
5394        (KJS::staticFunctionGetter):
5395        (KJS::cacheGlobalObject):
5396        * kjs/nodes.cpp:
5397        (KJS::Node::emitThrowError):
5398        (KJS::StringNode::emitCode):
5399        (KJS::ArrayNode::emitCode):
5400        (KJS::FuncDeclNode::makeFunction):
5401        (KJS::FuncExprNode::makeFunction):
5402        * kjs/nodes.h:
5403        * kjs/object_object.cpp:
5404        (KJS::ObjectPrototype::ObjectPrototype):
5405        (KJS::objectProtoFuncToLocaleString):
5406        (KJS::objectProtoFuncToString):
5407        (KJS::ObjectConstructor::ObjectConstructor):
5408        (KJS::ObjectConstructor::construct):
5409        * kjs/protect.h:
5410        (KJS::gcProtect):
5411        (KJS::gcUnprotect):
5412        * kjs/string_object.cpp:
5413        (KJS::StringObject::StringObject):
5414        (KJS::StringPrototype::StringPrototype):
5415        (KJS::replace):
5416        (KJS::stringProtoFuncCharAt):
5417        (KJS::stringProtoFuncCharCodeAt):
5418        (KJS::stringProtoFuncConcat):
5419        (KJS::stringProtoFuncIndexOf):
5420        (KJS::stringProtoFuncLastIndexOf):
5421        (KJS::stringProtoFuncMatch):
5422        (KJS::stringProtoFuncSearch):
5423        (KJS::stringProtoFuncReplace):
5424        (KJS::stringProtoFuncSlice):
5425        (KJS::stringProtoFuncSplit):
5426        (KJS::stringProtoFuncSubstr):
5427        (KJS::stringProtoFuncSubstring):
5428        (KJS::stringProtoFuncToLowerCase):
5429        (KJS::stringProtoFuncToUpperCase):
5430        (KJS::stringProtoFuncToLocaleLowerCase):
5431        (KJS::stringProtoFuncToLocaleUpperCase):
5432        (KJS::stringProtoFuncLocaleCompare):
5433        (KJS::stringProtoFuncBig):
5434        (KJS::stringProtoFuncSmall):
5435        (KJS::stringProtoFuncBlink):
5436        (KJS::stringProtoFuncBold):
5437        (KJS::stringProtoFuncFixed):
5438        (KJS::stringProtoFuncItalics):
5439        (KJS::stringProtoFuncStrike):
5440        (KJS::stringProtoFuncSub):
5441        (KJS::stringProtoFuncSup):
5442        (KJS::stringProtoFuncFontcolor):
5443        (KJS::stringProtoFuncFontsize):
5444        (KJS::stringProtoFuncAnchor):
5445        (KJS::stringProtoFuncLink):
5446        (KJS::StringConstructor::StringConstructor):
5447        (KJS::StringConstructor::construct):
5448        (KJS::StringConstructor::callAsFunction):
5449        (KJS::StringConstructorFunction::StringConstructorFunction):
5450        (KJS::StringConstructorFunction::callAsFunction):
5451        * kjs/string_object.h:
5452        (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
5453        * kjs/ustring.h:
5454        Updated for the above changes.
5455
54562008-06-17  Timothy Hatcher  <timothy@apple.com>
5457
5458        Added a type to DebuggerCallFrame so the under interface can
5459        distinguish anonymous functions and program call frames.
5460
5461        https://bugs.webkit.org/show_bug.cgi?id=19585
5462
5463        Reviewed by Geoff Garen.
5464
5465        * JavaScriptCore.exp: Export the DebuggerCallFrame::type symbol.
5466        * kjs/DebuggerCallFrame.cpp:
5467        (KJS::DebuggerCallFrame::type): Added.
5468        * kjs/DebuggerCallFrame.h:
5469
54702008-06-17  Eric Seidel  <eric@webkit.org>
5471
5472        Reviewed by Tim H.
5473        
5474        Remove bogus ASSERT which tripped every time for those who use PAC files.
5475
5476        * kjs/Parser.cpp:
5477        (KJS::Parser::parse):
5478
54792008-06-17  Kevin McCullough  <kmccullough@apple.com>
5480
5481        Reviewed by Geoff.
5482
5483        <rdar://problem/5951534> JSProfiler: Don't profile console.profile()
5484        or console.profileEnd()
5485
5486        * profiler/Profile.cpp:
5487        (KJS::Profile::stopProfiling): Moved the creation of the (idle) node to
5488        the Profile (not ProfileNode).  This makes sense since the Profile
5489        should be the one to modify the profile tree.  Also each stopProfiling()
5490        does not need to check if it's the head node anymore.  Also fixed an
5491        oddity where I was using willExecute to create the node.
5492        (KJS::Profile::removeProfileStart): Removes the call to console.profile
5493        that started this profile.
5494        (KJS::Profile::removeProfileEnd): Removes the call to console.profileEnd
5495        that ended this profile.
5496        * profiler/Profile.h:
5497        * profiler/ProfileNode.cpp: Moved the creation of the (idle) node to
5498        the Profile object.
5499        (KJS::ProfileNode::stopProfiling):
5500        * profiler/ProfileNode.h: Added some helper functions and whitespace to
5501        facilitate readability and the removal of profile() and profileEnd()
5502        from the Profile tree.
5503        (KJS::CallIdentifier::operator const char* ):
5504        (KJS::ProfileNode::firstChild):
5505        (KJS::ProfileNode::lastChild):
5506        (KJS::ProfileNode::removeChild):
5507        (KJS::ProfileNode::toString):
5508
55092008-06-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
5510
5511        Rubber stamped by Adam Roben.
5512
5513        Include JSGlobalObject.h to fix the build.
5514
5515        * kjs/ScopeChain.cpp:
5516
55172008-06-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
5518
5519        Reviewed by Oliver.
5520
5521        Reduce code duplication in emitReadModifyAssignment().
5522
5523        * kjs/nodes.cpp:
5524        (KJS::emitReadModifyAssignment):
5525
55262008-06-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
5527
5528        Reviewed by Oliver.
5529
5530        Sort includes alphabetically.
5531
5532        * kjs/nodes.cpp:
5533
55342008-06-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
5535
5536        Reviewed by Maciej.
5537
5538        Bug 19596: LEAK: Gmail leaks SegmentedVector<RegisterID>
5539        <https://bugs.webkit.org/show_bug.cgi?id=19596>
5540
5541        When growing SegmentedVector, we start adding segments at the position
5542        of the last segment, overwriting it. The destructor frees allocated
5543        segments starting at the segment of index 1, because the segment of
5544        index 0 is assumed to be the initial inline segment. This causes a leak
5545        of the segment that is referenced by index 0. Modifying grow() so that
5546        it starts adding segments at the position after the last segment fixes
5547        the leak.
5548
5549        Since the initial segment is a special case in the lookup code, this
5550        bug never manifested itself via incorrect results.
5551
5552        * VM/SegmentedVector.h:
5553        (KJS::SegmentedVector::grow):
5554
55552008-06-16  Maciej Stachowiak  <mjs@apple.com>
5556
5557        Reviewed by Alexey.
5558        
5559        - removed nearly unused types.h and LocalStorageEntry.h headers
5560
5561        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5562        * JavaScriptCore.xcodeproj/project.pbxproj:
5563        * kjs/ExecState.h:
5564        * kjs/LocalStorageEntry.h: Removed.
5565        * kjs/RegExpObject.cpp:
5566        * kjs/error_object.cpp:
5567        * kjs/grammar.y:
5568        * kjs/nodes.cpp:
5569        * kjs/types.h: Removed.
5570
55712008-06-16  Alp Toker  <alp@nuanti.com>
5572
5573        Rubber-stamped by Geoff.
5574
5575        Change c++ to c in minidom and testapi emacs mode line comments.
5576
5577        * API/Node.h:
5578        * API/NodeList.c:
5579        * API/NodeList.h:
5580        * API/testapi.c:
5581
55822008-06-16  Alexey Proskuryakov  <ap@webkit.org>
5583
5584        Trying to fix Windows build.
5585
5586        * kjs/PropertyNameArray.h:
5587        * kjs/identifier.cpp:
5588        Include ExecState.h
5589
55902008-06-16  Geoffrey Garen  <ggaren@apple.com>
5591
5592        Reviewed by Oliver Hunt.
5593        
5594        Slight cleanup to the SymbolTableEntry class.
5595        
5596        Renamed isEmpty to isNull, since we usually use "empty" to mean "holds
5597        the valid, empty value", and "null" to mean "holds no value".
5598        
5599        Changed an "== 0" to a "!", to match our style guidelines.
5600        
5601        Added some ASSERTs to verify the (possibly questionable) assumption that
5602        all register indexes will have their high two bits set. Also clarified a
5603        comment to make that assumption clear.
5604
56052008-06-16  Alexey Proskuryakov  <ap@webkit.org>
5606
5607        Reviewed by Darin.
5608
5609        Initialize functionQueueMutex in a safe manner.
5610
5611        * wtf/MainThread.cpp:
5612        (WTF::functionQueueMutex): Made it an AtomicallyInitializedStatic.
5613
5614        (WTF::dispatchFunctionsFromMainThread):
5615        (WTF::setMainThreadCallbacksPaused):
5616        Assert that the current thread is main, meaning that the callbacksPaused static can be
5617        accessed.
5618
56192008-06-16  Alexey Proskuryakov  <ap@webkit.org>
5620
5621        Reviewed by Geoff Garen.
5622
5623        Make Identifier construction use an explicitly passed IdentifierTable.
5624
5625        No change on SunSpider total.
5626
5627        * API/JSCallbackObjectFunctions.h:
5628        (KJS::::getOwnPropertySlot):
5629        (KJS::::put):
5630        (KJS::::deleteProperty):
5631        (KJS::::getPropertyNames):
5632        * API/JSObjectRef.cpp:
5633        (JSObjectMakeFunctionWithCallback):
5634        (JSObjectMakeFunction):
5635        (JSObjectHasProperty):
5636        (JSObjectGetProperty):
5637        (JSObjectSetProperty):
5638        (JSObjectDeleteProperty):
5639        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
5640        (JSObjectCopyPropertyNames):
5641        * JavaScriptCore.exp:
5642        * VM/CodeGenerator.cpp:
5643        (KJS::CodeGenerator::CodeGenerator):
5644        (KJS::CodeGenerator::registerForLocal):
5645        (KJS::CodeGenerator::isLocal):
5646        (KJS::CodeGenerator::addConstant):
5647        (KJS::CodeGenerator::findScopedProperty):
5648        * VM/CodeGenerator.h:
5649        (KJS::CodeGenerator::globalData):
5650        (KJS::CodeGenerator::propertyNames):
5651        * VM/JSPropertyNameIterator.cpp:
5652        (KJS::JSPropertyNameIterator::create):
5653        * VM/Machine.cpp:
5654        (KJS::Machine::throwException):
5655        (KJS::Machine::privateExecute):
5656        * kjs/ArrayPrototype.cpp:
5657        (KJS::ArrayConstructor::ArrayConstructor):
5658        * kjs/BooleanObject.cpp:
5659        (KJS::BooleanConstructor::BooleanConstructor):
5660        * kjs/FunctionPrototype.cpp:
5661        (KJS::FunctionConstructor::FunctionConstructor):
5662        (KJS::FunctionConstructor::construct):
5663        * kjs/JSArray.cpp:
5664        (KJS::JSArray::inlineGetOwnPropertySlot):
5665        (KJS::JSArray::put):
5666        (KJS::JSArray::deleteProperty):
5667        (KJS::JSArray::getPropertyNames):
5668        * kjs/JSFunction.cpp:
5669        (KJS::Arguments::Arguments):
5670        * kjs/JSGlobalData.cpp:
5671        (KJS::JSGlobalData::JSGlobalData):
5672        * kjs/JSGlobalObject.cpp:
5673        (KJS::JSGlobalObject::reset):
5674        * kjs/JSObject.cpp:
5675        (KJS::JSObject::getOwnPropertySlot):
5676        (KJS::JSObject::put):
5677        (KJS::JSObject::putWithAttributes):
5678        (KJS::JSObject::deleteProperty):
5679        (KJS::JSObject::findPropertyHashEntry):
5680        (KJS::JSObject::getPropertyNames):
5681        (KJS::Error::create):
5682        * kjs/JSVariableObject.cpp:
5683        (KJS::JSVariableObject::getPropertyNames):
5684        * kjs/NumberObject.cpp:
5685        (KJS::NumberConstructor::NumberConstructor):
5686        * kjs/PropertyNameArray.cpp:
5687        (KJS::PropertyNameArray::add):
5688        * kjs/PropertyNameArray.h:
5689        (KJS::PropertyNameArray::PropertyNameArray):
5690        (KJS::PropertyNameArray::addKnownUnique):
5691        * kjs/PropertySlot.h:
5692        (KJS::PropertySlot::getValue):
5693        * kjs/RegExpObject.cpp:
5694        (KJS::RegExpConstructor::RegExpConstructor):
5695        * kjs/ScopeChain.cpp:
5696        (KJS::ScopeChainNode::print):
5697        * kjs/Shell.cpp:
5698        (GlobalObject::GlobalObject):
5699        * kjs/date_object.cpp:
5700        (KJS::DateConstructor::DateConstructor):
5701        * kjs/error_object.cpp:
5702        (KJS::ErrorConstructor::ErrorConstructor):
5703        (KJS::NativeErrorConstructor::NativeErrorConstructor):
5704        * kjs/grammar.y:
5705        * kjs/identifier.cpp:
5706        (KJS::Identifier::add):
5707        (KJS::Identifier::addSlowCase):
5708        * kjs/identifier.h:
5709        (KJS::Identifier::Identifier):
5710        (KJS::Identifier::from):
5711        (KJS::Identifier::equal):
5712        (KJS::Identifier::add):
5713        (KJS::operator==):
5714        (KJS::operator!=):
5715        * kjs/internal.cpp:
5716        (KJS::JSString::getOwnPropertySlot):
5717        * kjs/lexer.cpp:
5718        (KJS::Lexer::Lexer):
5719        (KJS::Lexer::lex):
5720        (KJS::Lexer::makeIdentifier):
5721        * kjs/lexer.h:
5722        * kjs/lookup.cpp:
5723        (KJS::HashTable::createTable):
5724        * kjs/lookup.h:
5725        (KJS::HashTable::initializeIfNeeded):
5726        (KJS::HashTable::entry):
5727        (KJS::getStaticPropertySlot):
5728        (KJS::getStaticFunctionSlot):
5729        (KJS::getStaticValueSlot):
5730        (KJS::lookupPut):
5731        * kjs/object_object.cpp:
5732        (KJS::objectProtoFuncHasOwnProperty):
5733        (KJS::objectProtoFuncDefineGetter):
5734        (KJS::objectProtoFuncDefineSetter):
5735        (KJS::objectProtoFuncLookupGetter):
5736        (KJS::objectProtoFuncLookupSetter):
5737        (KJS::objectProtoFuncPropertyIsEnumerable):
5738        (KJS::ObjectConstructor::ObjectConstructor):
5739        * kjs/string_object.cpp:
5740        (KJS::StringObject::getOwnPropertySlot):
5741        (KJS::StringObject::getPropertyNames):
5742        (KJS::StringConstructor::StringConstructor):
5743        Just pass ExecState or JSGlobalData everywhere. Identifier construction is now always
5744        explicit.
5745
5746        * kjs/nodes.cpp: (KJS::RegExpNode::emitCode): Here, Identifier was created from a non-literal
5747        char*, which was incorrect, as that uses the pointer value as a key.
5748
57492008-06-16  Thiago Macieira  <tjmaciei@trolltech.com>
5750
5751        Reviewed by Darin.
5752
5753        https://bugs.webkit.org/show_bug.cgi?id=19577
5754
5755        Fix compilation in C++ environments where C99 headers are not present
5756
5757        The stdbool.h header is a C99 feature, defining the "_Bool" type as well as the
5758        "true" and "false" constants. But it's completely unnecessary in C++ as the
5759        language already defines the "bool" type and its two values.
5760
5761        * API/JSBase.h:
5762        * API/JSContextRef.h:
5763        * API/JSObjectRef.h:
5764        * API/JSStringRef.h:
5765        * API/JSValueRef.h:
5766
57672008-06-16  Kevin McCullough  <kmccullough@apple.com>
5768
5769        Reviewed by John.
5770
5771        <rdar://problem/6012509> JSProfiler: %s are incorrect if you exclude a
5772        top level node like (idle)
5773
5774        * profiler/Profile.cpp:
5775        (KJS::Profile::focus):
5776        (KJS::Profile::exclude): Subtract the selfTime from the totalTime of the
5777        head since its self time will only be non-zero when one of its children
5778        were excluded. Since the head's totalTime is used to calculate %s when
5779        its totalTime is the same as the sum of all its visible childrens' times
5780        their %s will sum to 100%.
5781
57822008-06-16  Kevin McCullough  <kmccullough@apple.com>
5783
5784        Reviewed by Sam Weinig.
5785
5786        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the profiler.
5787
5788        * profiler/Profile.cpp:
5789        (KJS::Profile::willExecute):
5790
57912008-06-16  Kevin McCullough  <kmccullough@apple.com>
5792
5793        Reviewed by Sam.
5794
5795        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
5796        profiler.
5797        - Remove the last of the uses of recursion in the profiler.
5798
5799        * JavaScriptCore.exp: Export the new function's signature.
5800        * profiler/Profile.cpp: 
5801        (KJS::calculateVisibleTotalTime): Added a new static method for
5802        recalculating the visibleTotalTime of methods after focus has changed
5803        which are visible.
5804        (KJS::stopProfiling): 
5805        (KJS::Profile::focus): Implemented focus without recursion.
5806        * profiler/Profile.h: Moved implementation into the definition file.
5807        * profiler/ProfileNode.cpp:
5808        (KJS::ProfileNode::traverseNextNodePreOrder): Added an argument for
5809        whether or not to process the children nodes, this allows focus to skip
5810        sub trees which have been set as not visible.
5811        (KJS::ProfileNode::calculateVisibleTotalTime): This function set's a
5812        node's total visible time to the sum of its self time and its children's
5813        total times.
5814        (KJS::ProfileNode::focus): Implemented focus without recursion.
5815        * profiler/ProfileNode.h:
5816        (KJS::CallIdentifier::operator!= ):
5817        (KJS::ProfileNode::setActualTotalTime): Expanded setting the total time
5818        so that focus could modify only the visible total time.
5819        (KJS::ProfileNode::setVisibleTotalTime):
5820
58212008-06-16  Christian Dywan  <christian@twotoasts.de>
5822
5823        Reviewed by Sam.
5824
5825        https://bugs.webkit.org/show_bug.cgi?id=19552
5826        JavaScriptCore headers use C++ style comments
5827
5828        Replace all C++ style comments with C style multiline
5829        comments and remove all "mode" lines.
5830
5831        * API/JSBase.h:
5832        * API/JSClassRef.h:
5833        * API/JSContextRef.h:
5834        * API/JSObjectRef.h:
5835        * API/JSStringRef.h:
5836        * API/JSStringRefBSTR.h:
5837        * API/JSStringRefCF.h:
5838        * API/JSValueRef.h:
5839        * API/JavaScript.h:
5840        * API/JavaScriptCore.h:
5841
58422008-06-16  Christian Dywan  <christian@twotoasts.de>
5843
5844        Reviewed by Sam.
5845
5846        https://bugs.webkit.org/show_bug.cgi?id=19557
5847        (JavaScriptCore) minidom uses C++ style comments
5848
5849        Use only C style comments in minidom sources
5850
5851        * API/JSNode.c:
5852        (JSNode_appendChild):
5853        (JSNode_removeChild):
5854        * API/JSNode.h:
5855        * API/JSNodeList.c:
5856        (JSNodeList_getProperty):
5857        * API/JSNodeList.h:
5858        * API/Node.c:
5859        * API/Node.h:
5860        * API/NodeList.c:
5861        (NodeList_new):
5862        (NodeList_item):
5863        * API/NodeList.h:
5864        * API/minidom.c:
5865        (createStringWithContentsOfFile):
5866        * wtf/Assertions.h:
5867        * wtf/UnusedParam.h:
5868
58692008-06-16  Adriaan de Groot  <groot@kde.org>
5870
5871        Reviewed by Simon.
5872
5873        Fix compilation on Solaris
5874
5875        On some systems, munmap takes a char* instead of a void* (contrary to POSIX and
5876        Single Unix Specification). Since you can always convert from char* to void*
5877        but not vice-versa, do the casting to char*.
5878
5879        * kjs/collector.cpp:
5880        (KJS::allocateBlock):
5881        (KJS::freeBlock):
5882
58832008-06-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
5884
5885        Reviewed by Maciej.
5886
5887        Make a UnaryOpNode class to reduce boilerplate code for UnaryPlusNode,
5888        NegateNode, BitwiseNotNode, and LogicalNotNode.
5889
5890        * VM/CodeGenerator.h:
5891        (KJS::CodeGenerator::emitToJSNumber):
5892        * kjs/nodes.cpp:
5893        (KJS::UnaryOpNode::emitCode):
5894        * kjs/nodes.h:
5895        (KJS::UnaryOpNode::UnaryOpNode):
5896        (KJS::UnaryPlusNode::):
5897        (KJS::NegateNode::):
5898        (KJS::NegateNode::precedence):
5899        (KJS::BitwiseNotNode::):
5900        (KJS::BitwiseNotNode::precedence):
5901        (KJS::LogicalNotNode::):
5902        (KJS::LogicalNotNode::precedence):
5903
59042008-06-16  Jan Michael Alonzo  <jmalonzo@webkit.org>
5905
5906        Gtk build fix
5907
5908        * GNUmakefile.am:
5909
59102008-06-15  Darin Adler  <darin@apple.com>
5911
5912        - rename KJS::List to KJS::ArgList
5913
5914        * API/JSCallbackConstructor.cpp:
5915        (KJS::JSCallbackConstructor::construct):
5916        * API/JSCallbackConstructor.h:
5917        * API/JSCallbackFunction.cpp:
5918        (KJS::JSCallbackFunction::callAsFunction):
5919        * API/JSCallbackFunction.h:
5920        * API/JSCallbackObject.h:
5921        * API/JSCallbackObjectFunctions.h:
5922        (KJS::::construct):
5923        (KJS::::callAsFunction):
5924        * API/JSObjectRef.cpp:
5925        (JSObjectMakeFunction):
5926        (JSObjectCallAsFunction):
5927        (JSObjectCallAsConstructor):
5928        * JavaScriptCore.exp:
5929        * VM/Machine.cpp:
5930        (KJS::Machine::execute):
5931        (KJS::Machine::privateExecute):
5932        * VM/Machine.h:
5933        * kjs/ArrayPrototype.cpp:
5934        (KJS::arrayProtoFuncToString):
5935        (KJS::arrayProtoFuncToLocaleString):
5936        (KJS::arrayProtoFuncJoin):
5937        (KJS::arrayProtoFuncConcat):
5938        (KJS::arrayProtoFuncPop):
5939        (KJS::arrayProtoFuncPush):
5940        (KJS::arrayProtoFuncReverse):
5941        (KJS::arrayProtoFuncShift):
5942        (KJS::arrayProtoFuncSlice):
5943        (KJS::arrayProtoFuncSort):
5944        (KJS::arrayProtoFuncSplice):
5945        (KJS::arrayProtoFuncUnShift):
5946        (KJS::arrayProtoFuncFilter):
5947        (KJS::arrayProtoFuncMap):
5948        (KJS::arrayProtoFuncEvery):
5949        (KJS::arrayProtoFuncForEach):
5950        (KJS::arrayProtoFuncSome):
5951        (KJS::arrayProtoFuncIndexOf):
5952        (KJS::arrayProtoFuncLastIndexOf):
5953        (KJS::ArrayConstructor::construct):
5954        (KJS::ArrayConstructor::callAsFunction):
5955        * kjs/ArrayPrototype.h:
5956        * kjs/BooleanObject.cpp:
5957        (KJS::booleanProtoFuncToString):
5958        (KJS::booleanProtoFuncValueOf):
5959        (KJS::BooleanConstructor::construct):
5960        (KJS::BooleanConstructor::callAsFunction):
5961        * kjs/BooleanObject.h:
5962        * kjs/CommonIdentifiers.h:
5963        * kjs/ExecState.h:
5964        (KJS::ExecState::emptyList):
5965        * kjs/FunctionPrototype.cpp:
5966        (KJS::FunctionPrototype::callAsFunction):
5967        (KJS::functionProtoFuncToString):
5968        (KJS::functionProtoFuncApply):
5969        (KJS::functionProtoFuncCall):
5970        (KJS::FunctionConstructor::construct):
5971        (KJS::FunctionConstructor::callAsFunction):
5972        * kjs/FunctionPrototype.h:
5973        * kjs/JSActivation.cpp:
5974        (KJS::JSActivation::createArgumentsObject):
5975        * kjs/JSArray.cpp:
5976        (KJS::JSArray::JSArray):
5977        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
5978        * kjs/JSArray.h:
5979        * kjs/JSFunction.cpp:
5980        (KJS::JSFunction::callAsFunction):
5981        (KJS::JSFunction::construct):
5982        (KJS::IndexToNameMap::IndexToNameMap):
5983        (KJS::Arguments::Arguments):
5984        (KJS::encode):
5985        (KJS::decode):
5986        (KJS::globalFuncEval):
5987        (KJS::globalFuncParseInt):
5988        (KJS::globalFuncParseFloat):
5989        (KJS::globalFuncIsNaN):
5990        (KJS::globalFuncIsFinite):
5991        (KJS::globalFuncDecodeURI):
5992        (KJS::globalFuncDecodeURIComponent):
5993        (KJS::globalFuncEncodeURI):
5994        (KJS::globalFuncEncodeURIComponent):
5995        (KJS::globalFuncEscape):
5996        (KJS::globalFuncUnescape):
5997        (KJS::globalFuncKJSPrint):
5998        (KJS::PrototypeFunction::callAsFunction):
5999        (KJS::PrototypeReflexiveFunction::callAsFunction):
6000        * kjs/JSFunction.h:
6001        * kjs/JSGlobalData.h:
6002        * kjs/JSImmediate.cpp:
6003        (KJS::JSImmediate::toObject):
6004        * kjs/JSNotAnObject.cpp:
6005        (KJS::JSNotAnObject::construct):
6006        (KJS::JSNotAnObject::callAsFunction):
6007        * kjs/JSNotAnObject.h:
6008        * kjs/JSObject.cpp:
6009        (KJS::JSObject::put):
6010        (KJS::JSObject::construct):
6011        (KJS::JSObject::callAsFunction):
6012        (KJS::Error::create):
6013        * kjs/JSObject.h:
6014        * kjs/MathObject.cpp:
6015        (KJS::mathProtoFuncAbs):
6016        (KJS::mathProtoFuncACos):
6017        (KJS::mathProtoFuncASin):
6018        (KJS::mathProtoFuncATan):
6019        (KJS::mathProtoFuncATan2):
6020        (KJS::mathProtoFuncCeil):
6021        (KJS::mathProtoFuncCos):
6022        (KJS::mathProtoFuncExp):
6023        (KJS::mathProtoFuncFloor):
6024        (KJS::mathProtoFuncLog):
6025        (KJS::mathProtoFuncMax):
6026        (KJS::mathProtoFuncMin):
6027        (KJS::mathProtoFuncPow):
6028        (KJS::mathProtoFuncRandom):
6029        (KJS::mathProtoFuncRound):
6030        (KJS::mathProtoFuncSin):
6031        (KJS::mathProtoFuncSqrt):
6032        (KJS::mathProtoFuncTan):
6033        * kjs/MathObject.h:
6034        * kjs/NumberObject.cpp:
6035        (KJS::numberProtoFuncToString):
6036        (KJS::numberProtoFuncToLocaleString):
6037        (KJS::numberProtoFuncValueOf):
6038        (KJS::numberProtoFuncToFixed):
6039        (KJS::numberProtoFuncToExponential):
6040        (KJS::numberProtoFuncToPrecision):
6041        (KJS::NumberConstructor::construct):
6042        (KJS::NumberConstructor::callAsFunction):
6043        * kjs/NumberObject.h:
6044        * kjs/RegExpObject.cpp:
6045        (KJS::regExpProtoFuncTest):
6046        (KJS::regExpProtoFuncExec):
6047        (KJS::regExpProtoFuncCompile):
6048        (KJS::regExpProtoFuncToString):
6049        (KJS::RegExpObject::match):
6050        (KJS::RegExpObject::test):
6051        (KJS::RegExpObject::exec):
6052        (KJS::RegExpObject::callAsFunction):
6053        (KJS::RegExpConstructor::construct):
6054        (KJS::RegExpConstructor::callAsFunction):
6055        * kjs/RegExpObject.h:
6056        * kjs/Shell.cpp:
6057        (functionPrint):
6058        (functionDebug):
6059        (functionGC):
6060        (functionVersion):
6061        (functionRun):
6062        (functionLoad):
6063        (functionReadline):
6064        (functionQuit):
6065        * kjs/collector.cpp:
6066        (KJS::Collector::collect):
6067        * kjs/collector.h:
6068        (KJS::Collector::markListSet):
6069        * kjs/date_object.cpp:
6070        (KJS::formatLocaleDate):
6071        (KJS::fillStructuresUsingTimeArgs):
6072        (KJS::fillStructuresUsingDateArgs):
6073        (KJS::DateConstructor::construct):
6074        (KJS::DateConstructor::callAsFunction):
6075        (KJS::DateFunction::callAsFunction):
6076        (KJS::dateProtoFuncToString):
6077        (KJS::dateProtoFuncToUTCString):
6078        (KJS::dateProtoFuncToDateString):
6079        (KJS::dateProtoFuncToTimeString):
6080        (KJS::dateProtoFuncToLocaleString):
6081        (KJS::dateProtoFuncToLocaleDateString):
6082        (KJS::dateProtoFuncToLocaleTimeString):
6083        (KJS::dateProtoFuncValueOf):
6084        (KJS::dateProtoFuncGetTime):
6085        (KJS::dateProtoFuncGetFullYear):
6086        (KJS::dateProtoFuncGetUTCFullYear):
6087        (KJS::dateProtoFuncToGMTString):
6088        (KJS::dateProtoFuncGetMonth):
6089        (KJS::dateProtoFuncGetUTCMonth):
6090        (KJS::dateProtoFuncGetDate):
6091        (KJS::dateProtoFuncGetUTCDate):
6092        (KJS::dateProtoFuncGetDay):
6093        (KJS::dateProtoFuncGetUTCDay):
6094        (KJS::dateProtoFuncGetHours):
6095        (KJS::dateProtoFuncGetUTCHours):
6096        (KJS::dateProtoFuncGetMinutes):
6097        (KJS::dateProtoFuncGetUTCMinutes):
6098        (KJS::dateProtoFuncGetSeconds):
6099        (KJS::dateProtoFuncGetUTCSeconds):
6100        (KJS::dateProtoFuncGetMilliSeconds):
6101        (KJS::dateProtoFuncGetUTCMilliseconds):
6102        (KJS::dateProtoFuncGetTimezoneOffset):
6103        (KJS::dateProtoFuncSetTime):
6104        (KJS::setNewValueFromTimeArgs):
6105        (KJS::setNewValueFromDateArgs):
6106        (KJS::dateProtoFuncSetMilliSeconds):
6107        (KJS::dateProtoFuncSetUTCMilliseconds):
6108        (KJS::dateProtoFuncSetSeconds):
6109        (KJS::dateProtoFuncSetUTCSeconds):
6110        (KJS::dateProtoFuncSetMinutes):
6111        (KJS::dateProtoFuncSetUTCMinutes):
6112        (KJS::dateProtoFuncSetHours):
6113        (KJS::dateProtoFuncSetUTCHours):
6114        (KJS::dateProtoFuncSetDate):
6115        (KJS::dateProtoFuncSetUTCDate):
6116        (KJS::dateProtoFuncSetMonth):
6117        (KJS::dateProtoFuncSetUTCMonth):
6118        (KJS::dateProtoFuncSetFullYear):
6119        (KJS::dateProtoFuncSetUTCFullYear):
6120        (KJS::dateProtoFuncSetYear):
6121        (KJS::dateProtoFuncGetYear):
6122        * kjs/date_object.h:
6123        * kjs/debugger.h:
6124        * kjs/error_object.cpp:
6125        (KJS::errorProtoFuncToString):
6126        (KJS::ErrorConstructor::construct):
6127        (KJS::ErrorConstructor::callAsFunction):
6128        (KJS::NativeErrorConstructor::construct):
6129        (KJS::NativeErrorConstructor::callAsFunction):
6130        * kjs/error_object.h:
6131        * kjs/internal.cpp:
6132        (KJS::JSNumberCell::toObject):
6133        (KJS::JSNumberCell::toThisObject):
6134        * kjs/list.cpp:
6135        (KJS::ArgList::getSlice):
6136        (KJS::ArgList::markLists):
6137        (KJS::ArgList::slowAppend):
6138        * kjs/list.h:
6139        (KJS::ArgList::ArgList):
6140        (KJS::ArgList::~ArgList):
6141        * kjs/object_object.cpp:
6142        (KJS::objectProtoFuncValueOf):
6143        (KJS::objectProtoFuncHasOwnProperty):
6144        (KJS::objectProtoFuncIsPrototypeOf):
6145        (KJS::objectProtoFuncDefineGetter):
6146        (KJS::objectProtoFuncDefineSetter):
6147        (KJS::objectProtoFuncLookupGetter):
6148        (KJS::objectProtoFuncLookupSetter):
6149        (KJS::objectProtoFuncPropertyIsEnumerable):
6150        (KJS::objectProtoFuncToLocaleString):
6151        (KJS::objectProtoFuncToString):
6152        (KJS::ObjectConstructor::construct):
6153        (KJS::ObjectConstructor::callAsFunction):
6154        * kjs/object_object.h:
6155        * kjs/string_object.cpp:
6156        (KJS::replace):
6157        (KJS::stringProtoFuncToString):
6158        (KJS::stringProtoFuncValueOf):
6159        (KJS::stringProtoFuncCharAt):
6160        (KJS::stringProtoFuncCharCodeAt):
6161        (KJS::stringProtoFuncConcat):
6162        (KJS::stringProtoFuncIndexOf):
6163        (KJS::stringProtoFuncLastIndexOf):
6164        (KJS::stringProtoFuncMatch):
6165        (KJS::stringProtoFuncSearch):
6166        (KJS::stringProtoFuncReplace):
6167        (KJS::stringProtoFuncSlice):
6168        (KJS::stringProtoFuncSplit):
6169        (KJS::stringProtoFuncSubstr):
6170        (KJS::stringProtoFuncSubstring):
6171        (KJS::stringProtoFuncToLowerCase):
6172        (KJS::stringProtoFuncToUpperCase):
6173        (KJS::stringProtoFuncToLocaleLowerCase):
6174        (KJS::stringProtoFuncToLocaleUpperCase):
6175        (KJS::stringProtoFuncLocaleCompare):
6176        (KJS::stringProtoFuncBig):
6177        (KJS::stringProtoFuncSmall):
6178        (KJS::stringProtoFuncBlink):
6179        (KJS::stringProtoFuncBold):
6180        (KJS::stringProtoFuncFixed):
6181        (KJS::stringProtoFuncItalics):
6182        (KJS::stringProtoFuncStrike):
6183        (KJS::stringProtoFuncSub):
6184        (KJS::stringProtoFuncSup):
6185        (KJS::stringProtoFuncFontcolor):
6186        (KJS::stringProtoFuncFontsize):
6187        (KJS::stringProtoFuncAnchor):
6188        (KJS::stringProtoFuncLink):
6189        (KJS::StringConstructor::construct):
6190        (KJS::StringConstructor::callAsFunction):
6191        (KJS::StringConstructorFunction::callAsFunction):
6192        * kjs/string_object.h:
6193
61942008-06-15  Darin Adler  <darin@apple.com>
6195
6196        - new names for more JavaScriptCore files
6197
6198        * API/JSCallbackFunction.cpp:
6199        * API/JSObjectRef.cpp:
6200        * DerivedSources.make:
6201        * GNUmakefile.am:
6202        * JavaScriptCore.exp:
6203        * JavaScriptCore.pri:
6204        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6205        * JavaScriptCore.xcodeproj/project.pbxproj:
6206        * JavaScriptCoreSources.bkl:
6207        * VM/Machine.cpp:
6208        * kjs/AllInOneFile.cpp:
6209        * kjs/ArrayPrototype.cpp: Copied from JavaScriptCore/kjs/array_object.cpp.
6210        * kjs/ArrayPrototype.h: Copied from JavaScriptCore/kjs/array_object.h.
6211        * kjs/BooleanObject.cpp: Copied from JavaScriptCore/kjs/bool_object.cpp.
6212        * kjs/BooleanObject.h: Copied from JavaScriptCore/kjs/bool_object.h.
6213        * kjs/ExecState.cpp:
6214        * kjs/ExecState.h:
6215        * kjs/FunctionPrototype.cpp: Copied from JavaScriptCore/kjs/function_object.cpp.
6216        * kjs/FunctionPrototype.h: Copied from JavaScriptCore/kjs/function_object.h.
6217        * kjs/JSArray.cpp: Copied from JavaScriptCore/kjs/array_instance.cpp.
6218        * kjs/JSArray.h: Copied from JavaScriptCore/kjs/array_instance.h.
6219        * kjs/JSFunction.cpp:
6220        * kjs/JSFunction.h:
6221        * kjs/JSGlobalObject.cpp:
6222        * kjs/JSImmediate.cpp:
6223        * kjs/JSObject.h:
6224        * kjs/JSString.h:
6225        * kjs/JSValue.h:
6226        * kjs/JSVariableObject.cpp:
6227        * kjs/MathObject.cpp: Copied from JavaScriptCore/kjs/math_object.cpp.
6228        * kjs/MathObject.h: Copied from JavaScriptCore/kjs/math_object.h.
6229        * kjs/NumberObject.cpp: Copied from JavaScriptCore/kjs/number_object.cpp.
6230        * kjs/NumberObject.h: Copied from JavaScriptCore/kjs/number_object.h.
6231        * kjs/PropertyMap.cpp: Copied from JavaScriptCore/kjs/property_map.cpp.
6232        * kjs/PropertyMap.h: Copied from JavaScriptCore/kjs/property_map.h.
6233        * kjs/PropertySlot.cpp: Copied from JavaScriptCore/kjs/property_slot.cpp.
6234        * kjs/PropertySlot.h: Copied from JavaScriptCore/kjs/property_slot.h.
6235        * kjs/RegExpObject.cpp: Copied from JavaScriptCore/kjs/regexp_object.cpp.
6236        * kjs/RegExpObject.h: Copied from JavaScriptCore/kjs/regexp_object.h.
6237        * kjs/ScopeChain.cpp: Copied from JavaScriptCore/kjs/scope_chain.cpp.
6238        * kjs/ScopeChain.h: Copied from JavaScriptCore/kjs/scope_chain.h.
6239        * kjs/ScopeChainMark.h: Copied from JavaScriptCore/kjs/scope_chain_mark.h.
6240        * kjs/Shell.cpp:
6241        * kjs/array_instance.cpp: Removed.
6242        * kjs/array_instance.h: Removed.
6243        * kjs/array_object.cpp: Removed.
6244        * kjs/array_object.h: Removed.
6245        * kjs/bool_object.cpp: Removed.
6246        * kjs/bool_object.h: Removed.
6247        * kjs/error_object.h:
6248        * kjs/function_object.cpp: Removed.
6249        * kjs/function_object.h: Removed.
6250        * kjs/internal.cpp:
6251        * kjs/math_object.cpp: Removed.
6252        * kjs/math_object.h: Removed.
6253        * kjs/nodes.cpp:
6254        * kjs/number_object.cpp: Removed.
6255        * kjs/number_object.h: Removed.
6256        * kjs/object_object.cpp:
6257        * kjs/property_map.cpp: Removed.
6258        * kjs/property_map.h: Removed.
6259        * kjs/property_slot.cpp: Removed.
6260        * kjs/property_slot.h: Removed.
6261        * kjs/regexp_object.cpp: Removed.
6262        * kjs/regexp_object.h: Removed.
6263        * kjs/scope_chain.cpp: Removed.
6264        * kjs/scope_chain.h: Removed.
6265        * kjs/scope_chain_mark.h: Removed.
6266        * kjs/string_object.cpp:
6267        * kjs/string_object.h:
6268
62692008-06-15  Darin Adler  <darin@apple.com>
6270
6271        - new names for a few key JavaScriptCore files
6272
6273        * API/JSBase.cpp:
6274        * API/JSCallbackConstructor.h:
6275        * API/JSCallbackFunction.cpp:
6276        * API/JSCallbackFunction.h:
6277        * API/JSCallbackObject.h:
6278        * API/JSCallbackObjectFunctions.h:
6279        * API/JSClassRef.h:
6280        * API/JSContextRef.cpp:
6281        * API/JSObjectRef.cpp:
6282        * API/JSStringRef.cpp:
6283        * API/JSStringRefCF.cpp:
6284        * API/JSValueRef.cpp:
6285        * GNUmakefile.am:
6286        * JavaScriptCore.pri:
6287        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6288        * JavaScriptCore.xcodeproj/project.pbxproj:
6289        * JavaScriptCoreSources.bkl:
6290        * VM/CodeBlock.cpp:
6291        * VM/CodeGenerator.cpp:
6292        * VM/ExceptionHelpers.cpp:
6293        * VM/ExceptionHelpers.h:
6294        * VM/JSPropertyNameIterator.cpp:
6295        * VM/JSPropertyNameIterator.h:
6296        * VM/Machine.cpp:
6297        * kjs/AllInOneFile.cpp:
6298        * kjs/DateMath.cpp:
6299        * kjs/DebuggerCallFrame.cpp:
6300        * kjs/ExecState.cpp:
6301        * kjs/JSActivation.cpp:
6302        * kjs/JSFunction.cpp: Copied from JavaScriptCore/kjs/function.cpp.
6303        * kjs/JSFunction.h: Copied from JavaScriptCore/kjs/function.h.
6304        * kjs/JSImmediate.cpp:
6305        * kjs/JSNotAnObject.h:
6306        * kjs/JSObject.cpp: Copied from JavaScriptCore/kjs/object.cpp.
6307        * kjs/JSObject.h: Copied from JavaScriptCore/kjs/object.h.
6308        * kjs/JSString.h: Copied from JavaScriptCore/kjs/internal.h.
6309        * kjs/JSValue.cpp: Copied from JavaScriptCore/kjs/value.cpp.
6310        * kjs/JSValue.h: Copied from JavaScriptCore/kjs/value.h.
6311        * kjs/JSVariableObject.h:
6312        * kjs/JSWrapperObject.h:
6313        * kjs/Shell.cpp:
6314        * kjs/SymbolTable.h:
6315        * kjs/array_instance.h:
6316        * kjs/collector.cpp:
6317        * kjs/date_object.cpp:
6318        * kjs/date_object.h:
6319        * kjs/error_object.cpp:
6320        * kjs/function.cpp: Removed.
6321        * kjs/function.h: Removed.
6322        * kjs/function_object.cpp:
6323        * kjs/function_object.h:
6324        * kjs/grammar.y:
6325        * kjs/internal.cpp:
6326        * kjs/internal.h: Removed.
6327        * kjs/lexer.cpp:
6328        * kjs/list.h:
6329        * kjs/lookup.h:
6330        * kjs/nodes.h:
6331        * kjs/object.cpp: Removed.
6332        * kjs/object.h: Removed.
6333        * kjs/object_object.h:
6334        * kjs/operations.cpp:
6335        * kjs/property_map.cpp:
6336        * kjs/property_slot.cpp:
6337        * kjs/property_slot.h:
6338        * kjs/protect.h:
6339        * kjs/regexp_object.cpp:
6340        * kjs/scope_chain.cpp:
6341        * kjs/string_object.h:
6342        * kjs/ustring.cpp:
6343        * kjs/value.cpp: Removed.
6344        * kjs/value.h: Removed.
6345        * profiler/Profile.cpp:
6346        * profiler/Profiler.cpp:
6347
63482008-06-15  Darin Adler  <darin@apple.com>
6349
6350        Rubber stamped by Sam.
6351
6352        - cut down on confusing uses of "Object" and "Imp" in
6353          JavaScriptCore class names
6354
6355        * API/JSCallbackFunction.cpp:
6356        (KJS::JSCallbackFunction::JSCallbackFunction):
6357        * API/JSCallbackFunction.h:
6358        * VM/Machine.cpp:
6359        (KJS::Machine::privateExecute):
6360        * kjs/ExecState.h:
6361        (KJS::ExecState::regExpTable):
6362        (KJS::ExecState::regExpConstructorTable):
6363        * kjs/JSGlobalData.cpp:
6364        (KJS::JSGlobalData::JSGlobalData):
6365        (KJS::JSGlobalData::~JSGlobalData):
6366        * kjs/JSGlobalData.h:
6367        * kjs/JSGlobalObject.cpp:
6368        (KJS::JSGlobalObject::reset):
6369        * kjs/JSGlobalObject.h:
6370        (KJS::JSGlobalObject::objectConstructor):
6371        (KJS::JSGlobalObject::functionConstructor):
6372        (KJS::JSGlobalObject::arrayConstructor):
6373        (KJS::JSGlobalObject::booleanConstructor):
6374        (KJS::JSGlobalObject::stringConstructor):
6375        (KJS::JSGlobalObject::numberConstructor):
6376        (KJS::JSGlobalObject::dateConstructor):
6377        (KJS::JSGlobalObject::regExpConstructor):
6378        (KJS::JSGlobalObject::errorConstructor):
6379        (KJS::JSGlobalObject::evalErrorConstructor):
6380        (KJS::JSGlobalObject::rangeErrorConstructor):
6381        (KJS::JSGlobalObject::referenceErrorConstructor):
6382        (KJS::JSGlobalObject::syntaxErrorConstructor):
6383        (KJS::JSGlobalObject::typeErrorConstructor):
6384        (KJS::JSGlobalObject::URIErrorConstructor):
6385        * kjs/array_object.cpp:
6386        (KJS::ArrayConstructor::ArrayConstructor):
6387        (KJS::ArrayConstructor::getConstructData):
6388        (KJS::ArrayConstructor::construct):
6389        (KJS::ArrayConstructor::callAsFunction):
6390        * kjs/array_object.h:
6391        * kjs/bool_object.cpp:
6392        (KJS::BooleanObject::BooleanObject):
6393        (KJS::BooleanPrototype::BooleanPrototype):
6394        (KJS::booleanProtoFuncToString):
6395        (KJS::booleanProtoFuncValueOf):
6396        (KJS::BooleanConstructor::BooleanConstructor):
6397        (KJS::BooleanConstructor::getConstructData):
6398        (KJS::BooleanConstructor::construct):
6399        (KJS::BooleanConstructor::callAsFunction):
6400        * kjs/bool_object.h:
6401        * kjs/date_object.cpp:
6402        (KJS::DatePrototype::DatePrototype):
6403        (KJS::DateConstructor::DateConstructor):
6404        (KJS::DateConstructor::getConstructData):
6405        (KJS::DateConstructor::construct):
6406        (KJS::DateConstructor::callAsFunction):
6407        (KJS::DateFunction::DateFunction):
6408        (KJS::DateFunction::callAsFunction):
6409        * kjs/date_object.h:
6410        * kjs/error_object.cpp:
6411        (KJS::ErrorPrototype::ErrorPrototype):
6412        (KJS::ErrorConstructor::ErrorConstructor):
6413        (KJS::ErrorConstructor::getConstructData):
6414        (KJS::ErrorConstructor::construct):
6415        (KJS::ErrorConstructor::callAsFunction):
6416        (KJS::NativeErrorConstructor::NativeErrorConstructor):
6417        (KJS::NativeErrorConstructor::getConstructData):
6418        (KJS::NativeErrorConstructor::construct):
6419        (KJS::NativeErrorConstructor::callAsFunction):
6420        (KJS::NativeErrorConstructor::mark):
6421        * kjs/error_object.h:
6422        * kjs/function.cpp:
6423        (KJS::JSFunction::JSFunction):
6424        (KJS::JSFunction::mark):
6425        (KJS::JSFunction::getOwnPropertySlot):
6426        (KJS::JSFunction::put):
6427        (KJS::JSFunction::deleteProperty):
6428        (KJS::PrototypeFunction::PrototypeFunction):
6429        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
6430        (KJS::PrototypeReflexiveFunction::mark):
6431        * kjs/function.h:
6432        * kjs/function_object.cpp:
6433        (KJS::functionProtoFuncToString):
6434        (KJS::FunctionConstructor::FunctionConstructor):
6435        (KJS::FunctionConstructor::getConstructData):
6436        (KJS::FunctionConstructor::construct):
6437        (KJS::FunctionConstructor::callAsFunction):
6438        * kjs/function_object.h:
6439        * kjs/internal.cpp:
6440        (KJS::StringObject::create):
6441        (KJS::JSString::toObject):
6442        (KJS::JSString::toThisObject):
6443        (KJS::JSString::getOwnPropertySlot):
6444        (KJS::InternalFunction::InternalFunction):
6445        (KJS::InternalFunction::getCallData):
6446        (KJS::InternalFunction::implementsHasInstance):
6447        * kjs/math_object.cpp:
6448        (KJS::MathObject::MathObject):
6449        (KJS::MathObject::getOwnPropertySlot):
6450        (KJS::MathObject::getValueProperty):
6451        * kjs/math_object.h:
6452        * kjs/number_object.cpp:
6453        (KJS::NumberObject::NumberObject):
6454        (KJS::NumberPrototype::NumberPrototype):
6455        (KJS::numberProtoFuncToString):
6456        (KJS::numberProtoFuncToLocaleString):
6457        (KJS::numberProtoFuncValueOf):
6458        (KJS::numberProtoFuncToFixed):
6459        (KJS::numberProtoFuncToExponential):
6460        (KJS::numberProtoFuncToPrecision):
6461        (KJS::NumberConstructor::NumberConstructor):
6462        (KJS::NumberConstructor::getOwnPropertySlot):
6463        (KJS::NumberConstructor::getValueProperty):
6464        (KJS::NumberConstructor::getConstructData):
6465        (KJS::NumberConstructor::construct):
6466        (KJS::NumberConstructor::callAsFunction):
6467        * kjs/number_object.h:
6468        * kjs/object.cpp:
6469        (KJS::JSObject::putDirectFunction):
6470        * kjs/object.h:
6471        * kjs/object_object.cpp:
6472        (KJS::ObjectConstructor::ObjectConstructor):
6473        (KJS::ObjectConstructor::getConstructData):
6474        (KJS::ObjectConstructor::construct):
6475        (KJS::ObjectConstructor::callAsFunction):
6476        * kjs/object_object.h:
6477        * kjs/regexp.cpp:
6478        (KJS::RegExp::RegExp):
6479        * kjs/regexp_object.cpp:
6480        (KJS::regExpProtoFuncTest):
6481        (KJS::regExpProtoFuncExec):
6482        (KJS::regExpProtoFuncCompile):
6483        (KJS::regExpProtoFuncToString):
6484        (KJS::RegExpObject::RegExpObject):
6485        (KJS::RegExpObject::~RegExpObject):
6486        (KJS::RegExpObject::getOwnPropertySlot):
6487        (KJS::RegExpObject::getValueProperty):
6488        (KJS::RegExpObject::put):
6489        (KJS::RegExpObject::putValueProperty):
6490        (KJS::RegExpObject::match):
6491        (KJS::RegExpObject::test):
6492        (KJS::RegExpObject::exec):
6493        (KJS::RegExpObject::getCallData):
6494        (KJS::RegExpObject::callAsFunction):
6495        (KJS::RegExpConstructorPrivate::RegExpConstructorPrivate):
6496        (KJS::RegExpConstructor::RegExpConstructor):
6497        (KJS::RegExpConstructor::performMatch):
6498        (KJS::RegExpMatchesArray::RegExpMatchesArray):
6499        (KJS::RegExpMatchesArray::~RegExpMatchesArray):
6500        (KJS::RegExpMatchesArray::fillArrayInstance):
6501        (KJS::RegExpConstructor::arrayOfMatches):
6502        (KJS::RegExpConstructor::getBackref):
6503        (KJS::RegExpConstructor::getLastParen):
6504        (KJS::RegExpConstructor::getLeftContext):
6505        (KJS::RegExpConstructor::getRightContext):
6506        (KJS::RegExpConstructor::getOwnPropertySlot):
6507        (KJS::RegExpConstructor::getValueProperty):
6508        (KJS::RegExpConstructor::put):
6509        (KJS::RegExpConstructor::putValueProperty):
6510        (KJS::RegExpConstructor::getConstructData):
6511        (KJS::RegExpConstructor::construct):
6512        (KJS::RegExpConstructor::callAsFunction):
6513        (KJS::RegExpConstructor::input):
6514        * kjs/regexp_object.h:
6515        * kjs/string_object.cpp:
6516        (KJS::StringObject::StringObject):
6517        (KJS::StringObject::getOwnPropertySlot):
6518        (KJS::StringObject::put):
6519        (KJS::StringObject::deleteProperty):
6520        (KJS::StringObject::getPropertyNames):
6521        (KJS::StringPrototype::StringPrototype):
6522        (KJS::StringPrototype::getOwnPropertySlot):
6523        (KJS::replace):
6524        (KJS::stringProtoFuncToString):
6525        (KJS::stringProtoFuncValueOf):
6526        (KJS::stringProtoFuncCharAt):
6527        (KJS::stringProtoFuncCharCodeAt):
6528        (KJS::stringProtoFuncConcat):
6529        (KJS::stringProtoFuncIndexOf):
6530        (KJS::stringProtoFuncLastIndexOf):
6531        (KJS::stringProtoFuncMatch):
6532        (KJS::stringProtoFuncSearch):
6533        (KJS::stringProtoFuncReplace):
6534        (KJS::stringProtoFuncSlice):
6535        (KJS::stringProtoFuncSplit):
6536        (KJS::stringProtoFuncSubstr):
6537        (KJS::stringProtoFuncSubstring):
6538        (KJS::stringProtoFuncToLowerCase):
6539        (KJS::stringProtoFuncToUpperCase):
6540        (KJS::stringProtoFuncToLocaleLowerCase):
6541        (KJS::stringProtoFuncToLocaleUpperCase):
6542        (KJS::stringProtoFuncLocaleCompare):
6543        (KJS::stringProtoFuncBig):
6544        (KJS::stringProtoFuncSmall):
6545        (KJS::stringProtoFuncBlink):
6546        (KJS::stringProtoFuncBold):
6547        (KJS::stringProtoFuncFixed):
6548        (KJS::stringProtoFuncItalics):
6549        (KJS::stringProtoFuncStrike):
6550        (KJS::stringProtoFuncSub):
6551        (KJS::stringProtoFuncSup):
6552        (KJS::stringProtoFuncFontcolor):
6553        (KJS::stringProtoFuncFontsize):
6554        (KJS::stringProtoFuncAnchor):
6555        (KJS::stringProtoFuncLink):
6556        (KJS::StringConstructor::StringConstructor):
6557        (KJS::StringConstructor::getConstructData):
6558        (KJS::StringConstructor::construct):
6559        (KJS::StringConstructor::callAsFunction):
6560        (KJS::StringConstructorFunction::StringConstructorFunction):
6561        (KJS::StringConstructorFunction::callAsFunction):
6562        * kjs/string_object.h:
6563        (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
6564        * profiler/Profiler.cpp:
6565        (KJS::createCallIdentifier):
6566
65672008-06-15  Darin Adler  <darin@apple.com>
6568
6569        Rubber stamped by Sam.
6570
6571        - use JS prefix and simpler names for basic JavaScriptCore types,
6572          to complement JSValue and JSObject
6573
6574        * JavaScriptCore.exp:
6575        * VM/Machine.cpp:
6576        (KJS::jsLess):
6577        (KJS::jsLessEq):
6578        (KJS::jsAdd):
6579        (KJS::callEval):
6580        (KJS::Machine::execute):
6581        (KJS::Machine::retrieveArguments):
6582        (KJS::Machine::retrieveCaller):
6583        (KJS::Machine::getCallFrame):
6584        (KJS::Machine::getFunctionAndArguments):
6585        * VM/Machine.h:
6586        * VM/Register.h:
6587        * kjs/DebuggerCallFrame.cpp:
6588        (KJS::DebuggerCallFrame::functionName):
6589        * kjs/ExecState.h:
6590        * kjs/JSActivation.cpp:
6591        (KJS::JSActivation::createArgumentsObject):
6592        * kjs/array_instance.cpp:
6593        (KJS::JSArray::checkConsistency):
6594        (KJS::JSArray::JSArray):
6595        (KJS::JSArray::~JSArray):
6596        (KJS::JSArray::getItem):
6597        (KJS::JSArray::lengthGetter):
6598        (KJS::JSArray::inlineGetOwnPropertySlot):
6599        (KJS::JSArray::getOwnPropertySlot):
6600        (KJS::JSArray::put):
6601        (KJS::JSArray::deleteProperty):
6602        (KJS::JSArray::getPropertyNames):
6603        (KJS::JSArray::increaseVectorLength):
6604        (KJS::JSArray::setLength):
6605        (KJS::JSArray::mark):
6606        (KJS::JSArray::sort):
6607        (KJS::JSArray::compactForSorting):
6608        (KJS::JSArray::lazyCreationData):
6609        (KJS::JSArray::setLazyCreationData):
6610        * kjs/array_instance.h:
6611        * kjs/array_object.cpp:
6612        (KJS::ArrayPrototype::ArrayPrototype):
6613        (KJS::ArrayPrototype::getOwnPropertySlot):
6614        (KJS::arrayProtoFuncToString):
6615        (KJS::arrayProtoFuncToLocaleString):
6616        (KJS::arrayProtoFuncConcat):
6617        (KJS::arrayProtoFuncSort):
6618        (KJS::ArrayObjectImp::construct):
6619        * kjs/array_object.h:
6620        * kjs/completion.h:
6621        * kjs/function.cpp:
6622        (KJS::JSFunction::JSFunction):
6623        (KJS::JSFunction::mark):
6624        (KJS::JSFunction::getCallData):
6625        (KJS::JSFunction::callAsFunction):
6626        (KJS::JSFunction::argumentsGetter):
6627        (KJS::JSFunction::callerGetter):
6628        (KJS::JSFunction::lengthGetter):
6629        (KJS::JSFunction::getOwnPropertySlot):
6630        (KJS::JSFunction::put):
6631        (KJS::JSFunction::deleteProperty):
6632        (KJS::JSFunction::getParameterName):
6633        (KJS::JSFunction::getConstructData):
6634        (KJS::JSFunction::construct):
6635        (KJS::IndexToNameMap::IndexToNameMap):
6636        (KJS::Arguments::Arguments):
6637        * kjs/function.h:
6638        * kjs/function_object.cpp:
6639        (KJS::functionProtoFuncToString):
6640        (KJS::functionProtoFuncApply):
6641        (KJS::FunctionObjectImp::construct):
6642        * kjs/internal.cpp:
6643        (KJS::JSString::toPrimitive):
6644        (KJS::JSString::getPrimitiveNumber):
6645        (KJS::JSString::toBoolean):
6646        (KJS::JSString::toNumber):
6647        (KJS::JSString::toString):
6648        (KJS::StringInstance::create):
6649        (KJS::JSString::toObject):
6650        (KJS::JSString::toThisObject):
6651        (KJS::JSString::lengthGetter):
6652        (KJS::JSString::indexGetter):
6653        (KJS::JSString::indexNumericPropertyGetter):
6654        (KJS::JSString::getOwnPropertySlot):
6655        (KJS::JSNumberCell::type):
6656        (KJS::JSNumberCell::toPrimitive):
6657        (KJS::JSNumberCell::getPrimitiveNumber):
6658        (KJS::JSNumberCell::toBoolean):
6659        (KJS::JSNumberCell::toNumber):
6660        (KJS::JSNumberCell::toString):
6661        (KJS::JSNumberCell::toObject):
6662        (KJS::JSNumberCell::toThisObject):
6663        (KJS::JSNumberCell::getUInt32):
6664        (KJS::JSNumberCell::getTruncatedInt32):
6665        (KJS::JSNumberCell::getTruncatedUInt32):
6666        (KJS::GetterSetter::mark):
6667        (KJS::GetterSetter::toPrimitive):
6668        (KJS::GetterSetter::getPrimitiveNumber):
6669        (KJS::GetterSetter::toBoolean):
6670        (KJS::GetterSetter::toNumber):
6671        (KJS::GetterSetter::toString):
6672        (KJS::GetterSetter::toObject):
6673        (KJS::GetterSetter::getOwnPropertySlot):
6674        (KJS::GetterSetter::put):
6675        (KJS::GetterSetter::toThisObject):
6676        * kjs/internal.h:
6677        (KJS::JSString::JSString):
6678        (KJS::JSString::getStringPropertySlot):
6679        * kjs/nodes.cpp:
6680        (KJS::FuncDeclNode::makeFunction):
6681        (KJS::FuncExprNode::makeFunction):
6682        * kjs/nodes.h:
6683        * kjs/object.cpp:
6684        (KJS::JSObject::put):
6685        (KJS::JSObject::deleteProperty):
6686        (KJS::JSObject::defineGetter):
6687        (KJS::JSObject::defineSetter):
6688        (KJS::JSObject::lookupGetter):
6689        (KJS::JSObject::lookupSetter):
6690        (KJS::JSObject::fillGetterPropertySlot):
6691        * kjs/object.h:
6692        (KJS::GetterSetter::GetterSetter):
6693        * kjs/operations.cpp:
6694        (KJS::equal):
6695        (KJS::strictEqual):
6696        * kjs/property_map.cpp:
6697        (KJS::PropertyMap::containsGettersOrSetters):
6698        * kjs/regexp_object.cpp:
6699        (KJS::RegExpMatchesArray::getOwnPropertySlot):
6700        (KJS::RegExpMatchesArray::put):
6701        (KJS::RegExpMatchesArray::deleteProperty):
6702        (KJS::RegExpMatchesArray::getPropertyNames):
6703        (KJS::RegExpMatchesArray::RegExpMatchesArray):
6704        (KJS::RegExpMatchesArray::fillArrayInstance):
6705        * kjs/string_object.cpp:
6706        (KJS::StringInstance::StringInstance):
6707        (KJS::replace):
6708        (KJS::stringProtoFuncReplace):
6709        (KJS::stringProtoFuncToLowerCase):
6710        (KJS::stringProtoFuncToUpperCase):
6711        (KJS::stringProtoFuncToLocaleLowerCase):
6712        (KJS::stringProtoFuncToLocaleUpperCase):
6713        * kjs/string_object.h:
6714        (KJS::StringInstance::internalValue):
6715        * kjs/value.cpp:
6716        (KJS::JSCell::getNumber):
6717        (KJS::JSCell::getString):
6718        (KJS::JSCell::getObject):
6719        (KJS::jsString):
6720        (KJS::jsOwnedString):
6721        * kjs/value.h:
6722        (KJS::JSNumberCell::JSNumberCell):
6723        (KJS::jsNumberCell):
6724        (KJS::JSValue::uncheckedGetNumber):
6725        * profiler/Profiler.cpp:
6726        (KJS::createCallIdentifier):
6727        (KJS::createCallIdentifierFromFunctionImp):
6728
67292008-06-15  Maciej Stachowiak  <mjs@apple.com>
6730
6731        Reviewed by Alexey.
6732        
6733        - add emitUnaryOp, emitNullaryOp and emitUnaryOpNoDst; use them
6734        
6735        This removes some boilerplate code and also reduces the number of
6736        places that will need to be changed to do on-demand emit of
6737        loads (and thus support k operands).
6738
6739        * VM/CodeGenerator.cpp:
6740        (KJS::CodeGenerator::emitUnaryOp):
6741        (KJS::CodeGenerator::emitNullaryOp):
6742        (KJS::CodeGenerator::emitUnaryOpNoDst):
6743        (KJS::CodeGenerator::emitPushScope):
6744        * VM/CodeGenerator.h:
6745        (KJS::CodeGenerator::emitNewObject):
6746        (KJS::CodeGenerator::emitNewArray):
6747        (KJS::CodeGenerator::emitNot):
6748        (KJS::CodeGenerator::emitBitNot):
6749        (KJS::CodeGenerator::emitToJSNumber):
6750        (KJS::CodeGenerator::emitNegate):
6751        (KJS::CodeGenerator::emitInstanceOf):
6752        (KJS::CodeGenerator::emitTypeOf):
6753        (KJS::CodeGenerator::emitIn):
6754        (KJS::CodeGenerator::emitReturn):
6755        (KJS::CodeGenerator::emitEnd):
6756        (KJS::CodeGenerator::emitGetPropertyNames):
6757
67582008-06-15  Alp Toker  <alp@nuanti.com>
6759
6760        Rubber-stamped by Maciej.
6761
6762        Install 'jsc' application by default.
6763
6764        * GNUmakefile.am:
6765
67662008-06-15  Maciej Stachowiak  <mjs@apple.com>
6767
6768        Reviewed by Oliver.
6769        
6770        - rename testkjs to jsc
6771
6772        * GNUmakefile.am:
6773        * JavaScriptCore.vcproj/JavaScriptCore.sln:
6774        * JavaScriptCore.vcproj/jsc: Added.
6775        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Copied from JavaScriptCore.vcproj/testkjs/testkjs.vcproj.
6776        * JavaScriptCore.vcproj/testkjs: Removed.
6777        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Removed.
6778        * JavaScriptCore.xcodeproj/project.pbxproj:
6779        * jscore.bkl:
6780        * kjs/Shell.cpp: Copied from kjs/testkjs.cpp.
6781        (main):
6782        (printUsageStatement):
6783        (jscmain):
6784        * kjs/jsc.pro: Copied from kjs/testkjs.pro.
6785        * kjs/testkjs.cpp: Removed.
6786        * kjs/testkjs.pro: Removed.
6787        * tests/mozilla/expected.html:
6788        * tests/mozilla/js1_2/Array/tostring_1.js:
6789        * tests/mozilla/js1_2/Array/tostring_2.js:
6790        * tests/mozilla/jsDriver.pl:
6791
67922008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6793
6794        Reviewed by Maciej.
6795
6796        Mac build fix.
6797
6798        * JavaScriptCore.xcodeproj/project.pbxproj:
6799        * kjs/nodes.h:
6800
68012008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6802
6803        Reviewed by Maciej.
6804
6805        Change the spelling of PrecMultiplicitave to PrecMultiplicative.
6806
6807        * kjs/nodes.h:
6808        (KJS::MultNode::precedence):
6809        (KJS::DivNode::precedence):
6810        (KJS::ModNode::precedence):
6811
68122008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6813
6814        Reviewed by Maciej.
6815
6816        Remove unused preprocessor macros related to exceptions in the old
6817        interpreter.
6818
6819        * kjs/nodes.cpp:
6820
68212008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6822
6823        Reviewed by Maciej.
6824
6825        Bug 19484: More instructions needs to use temporary registers
6826        <https://bugs.webkit.org/show_bug.cgi?id=19484>
6827
6828        Fix codegen for all binary operations so that temporaries are used if
6829        necessary. This was done by making BinaryOpNode and ReverseBinaryOpNode
6830        subclasses of ExpressionNode, and eliminating the custom emitCode()
6831        methods for the individual node classes.
6832
6833        This only adds 3 new instructions to SunSpider code, and there is no
6834        difference in SunSpider execution time.
6835
6836        * VM/CodeGenerator.cpp:
6837        (KJS::CodeGenerator::emitBitNot):
6838        (KJS::CodeGenerator::emitBinaryOp):
6839        * VM/CodeGenerator.h:
6840        * kjs/grammar.y:
6841        * kjs/nodes.cpp:
6842        (KJS::PreIncResolveNode::emitCode):
6843        (KJS::PreDecResolveNode::emitCode):
6844        (KJS::BinaryOpNode::emitCode):
6845        (KJS::ReverseBinaryOpNode::emitCode):
6846        (KJS::emitReadModifyAssignment):
6847        (KJS::CaseBlockNode::emitCodeForBlock):
6848        * kjs/nodes.h:
6849        (KJS::BinaryOpNode::BinaryOpNode):
6850        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
6851        (KJS::MultNode::):
6852        (KJS::DivNode::):
6853        (KJS::DivNode::precedence):
6854        (KJS::ModNode::):
6855        (KJS::ModNode::precedence):
6856        (KJS::AddNode::):
6857        (KJS::AddNode::precedence):
6858        (KJS::SubNode::):
6859        (KJS::SubNode::precedence):
6860        (KJS::LeftShiftNode::):
6861        (KJS::LeftShiftNode::precedence):
6862        (KJS::RightShiftNode::):
6863        (KJS::RightShiftNode::precedence):
6864        (KJS::UnsignedRightShiftNode::):
6865        (KJS::UnsignedRightShiftNode::precedence):
6866        (KJS::LessNode::):
6867        (KJS::LessNode::precedence):
6868        (KJS::GreaterNode::):
6869        (KJS::GreaterNode::precedence):
6870        (KJS::LessEqNode::):
6871        (KJS::LessEqNode::precedence):
6872        (KJS::GreaterEqNode::):
6873        (KJS::GreaterEqNode::precedence):
6874        (KJS::InstanceOfNode::):
6875        (KJS::InstanceOfNode::precedence):
6876        (KJS::InNode::):
6877        (KJS::InNode::precedence):
6878        (KJS::EqualNode::):
6879        (KJS::EqualNode::precedence):
6880        (KJS::NotEqualNode::):
6881        (KJS::NotEqualNode::precedence):
6882        (KJS::StrictEqualNode::):
6883        (KJS::StrictEqualNode::precedence):
6884        (KJS::NotStrictEqualNode::):
6885        (KJS::NotStrictEqualNode::precedence):
6886        (KJS::BitAndNode::):
6887        (KJS::BitAndNode::precedence):
6888        (KJS::BitOrNode::):
6889        (KJS::BitOrNode::precedence):
6890        (KJS::BitXOrNode::):
6891        (KJS::BitXOrNode::precedence):
6892        * kjs/nodes2string.cpp:
6893        (KJS::LessNode::streamTo):
6894        (KJS::GreaterNode::streamTo):
6895        (KJS::LessEqNode::streamTo):
6896        (KJS::GreaterEqNode::streamTo):
6897        (KJS::InstanceOfNode::streamTo):
6898        (KJS::InNode::streamTo):
6899        (KJS::EqualNode::streamTo):
6900        (KJS::NotEqualNode::streamTo):
6901        (KJS::StrictEqualNode::streamTo):
6902        (KJS::NotStrictEqualNode::streamTo):
6903        (KJS::BitAndNode::streamTo):
6904        (KJS::BitXOrNode::streamTo):
6905        (KJS::BitOrNode::streamTo):
6906
69072008-06-14  Darin Adler  <darin@apple.com>
6908
6909        Rubber stamped by Sam.
6910
6911        - rename a bunch of local symbols within the regular expression code to
6912          follow our usual coding style, and do a few other name tweaks
6913
6914        * pcre/pcre_compile.cpp:
6915        (CompileData::CompileData):
6916        (checkEscape):
6917        (readRepeatCounts):
6918        (compileBranch):
6919        (compileBracket):
6920        (calculateCompiledPatternLength):
6921        (returnError):
6922        (jsRegExpCompile):
6923        * pcre/pcre_exec.cpp:
6924        (MatchStack::MatchStack):
6925        (MatchStack::canUseStackBufferForNextFrame):
6926        (MatchStack::popCurrentFrame):
6927        (match):
6928        (tryFirstByteOptimization):
6929        (tryRequiredByteOptimization):
6930        (jsRegExpExecute):
6931        * pcre/pcre_internal.h:
6932
69332008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6934
6935        Reviewed by Darin.
6936
6937        Remove redundant uses of get().
6938
6939        * kjs/nodes.cpp:
6940        (KJS::BracketAccessorNode::emitCode):
6941        (KJS::AddNode::emitCode):
6942        (KJS::SubNode::emitCode):
6943        (KJS::ReadModifyResolveNode::emitCode):
6944        (KJS::AssignDotNode::emitCode):
6945        (KJS::ReadModifyDotNode::emitCode):
6946        (KJS::AssignBracketNode::emitCode):
6947        (KJS::ReadModifyBracketNode::emitCode):
6948
69492008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
6950
6951        Reviewed by Maciej.
6952
6953        Make code generation not use a temporary for the left-hand side of an
6954        expression if the right-hand side is a local variable.
6955
6956        * VM/CodeGenerator.cpp:
6957        (KJS::CodeGenerator::isLocal):
6958        * VM/CodeGenerator.h:
6959        (KJS::CodeGenerator::leftHandSideNeedsCopy):
6960        (KJS::CodeGenerator::emitNodeForLeftHandSide):
6961        * kjs/nodes.cpp:
6962        (KJS::ResolveNode::isPure):
6963        (KJS::BracketAccessorNode::emitCode):
6964        (KJS::AddNode::emitCode):
6965        (KJS::SubNode::emitCode):
6966        (KJS::ReadModifyResolveNode::emitCode):
6967        (KJS::AssignDotNode::emitCode):
6968        (KJS::ReadModifyDotNode::emitCode):
6969        (KJS::AssignBracketNode::emitCode):
6970        (KJS::ReadModifyBracketNode::emitCode):
6971        * kjs/nodes.h:
6972        (KJS::ExpressionNode::):
6973        (KJS::BooleanNode::):
6974        (KJS::NumberNode::):
6975        (KJS::StringNode::):
6976
69772008-06-14  Darin Adler  <darin@apple.com>
6978
6979        Reviewed by Sam.
6980
6981        - more of https://bugs.webkit.org/show_bug.cgi?id=17257
6982          start ref counts at 1 instead of 0 for speed
6983
6984        * kjs/nodes.cpp:
6985        (KJS::ParserRefCounted::hasOneRef): Added. Replaces refcount.
6986        * kjs/nodes.h: Replaced refcount with hasOneRef.
6987
6988        * wtf/ListRefPtr.h:
6989        (WTF::ListRefPtr::~ListRefPtr): Changed to use hasOneRef instead of
6990        refcount, so this class can be used with the RefCounted template.
6991
6992        * wtf/RefCounted.h:
6993        (WTF::RefCounted::hasOneRef): Made const, since there's no reason for
6994        it to be non-const.
6995
69962008-06-14  Maciej Stachowiak  <mjs@apple.com>
6997
6998        Reviewed by Oliver.
6999        
7000        - initialize local vars as side effect of call instead of in bytecode
7001        1.004x speedup on SunSpider.
7002
7003        This removes just the dispatch overhead for these loads - in the
7004        future, dead store elimination might be able to eliminate them
7005        entirely.
7006        
7007        * VM/CodeGenerator.cpp:
7008        (KJS::CodeGenerator::CodeGenerator): For function blocks, don't
7009        emit loads of undefined for var initialization.
7010        * VM/Machine.cpp:
7011        (KJS::slideRegisterWindowForCall): Instead, initialize locals
7012        as part of the call.
7013
70142008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7015
7016        Reviewed by Oliver.
7017
7018        Remove helper functions in the parser that are no longer needed.
7019
7020        * kjs/grammar.y:
7021
70222008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7023
7024        Reviewed by Oliver.
7025
7026        Bug 19484: More instructions needs to use temporary registers
7027        <https://bugs.webkit.org/show_bug.cgi?id=19484>
7028
7029        Make code generation for AddNode and SubNode use temporaries when
7030        necessary.
7031
7032        * kjs/grammar.y:
7033        * kjs/nodes.cpp:
7034        (KJS::AddNode::emitCode):
7035        (KJS::SubNode::emitCode):
7036        * kjs/nodes.h:
7037        (KJS::AddNode::):
7038        (KJS::SubNode::):
7039
70402008-06-13  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7041
7042        Reviewed by Maciej.
7043
7044        Combine TrueNode and FalseNode to make BooleanNode, and remove the
7045        unused class PlaceholderTrueNode.
7046
7047        * kjs/grammar.y:
7048        * kjs/nodes.cpp:
7049        (KJS::BooleanNode::emitCode):
7050        * kjs/nodes.h:
7051        (KJS::BooleanNode::):
7052        (KJS::BooleanNode::precedence):
7053        * kjs/nodes2string.cpp:
7054        (KJS::BooleanNode::streamTo):
7055
70562008-06-13  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7057
7058        Reviewed by Maciej.
7059
7060        Eliminate the use of temporaries to store the left hand side of an
7061        expression when the right hand side is a constant. This slightly
7062        improves the generated bytecode for a few SunSpider tests, but it is
7063        mostly in preparation for fixing
7064
7065        Bug 19484: More instructions needs to use temporary registers
7066        <https://bugs.webkit.org/show_bug.cgi?id=19484>
7067
7068        * VM/CodeGenerator.h:
7069        (KJS::CodeGenerator::leftHandSideNeedsCopy):
7070        (KJS::CodeGenerator::emitNodeForLeftHandSide):
7071        * kjs/nodes.cpp:
7072        (KJS::BracketAccessorNode::emitCode):
7073        (KJS::ReadModifyResolveNode::emitCode):
7074        (KJS::AssignDotNode::emitCode):
7075        (KJS::ReadModifyDotNode::emitCode):
7076        (KJS::AssignBracketNode::emitCode):
7077        (KJS::ReadModifyBracketNode::emitCode):
7078        * kjs/nodes.h:
7079        (KJS::ExpressionNode::):
7080        (KJS::FalseNode::):
7081        (KJS::TrueNode::):
7082        (KJS::NumberNode::):
7083        (KJS::StringNode::):
7084
70852008-06-13  Maciej Stachowiak  <mjs@apple.com>
7086
7087        Reviewed by Oliver.
7088        
7089        - prettify opcode stats output
7090        
7091        I changed things to be a bit more aligned, also there is a new
7092        section listing most common opcodes and most common sequences that
7093        include them.
7094
7095        * VM/Opcode.cpp:
7096        (KJS::OpcodeStats::~OpcodeStats):
7097        * VM/Opcode.h:
7098
70992008-06-13  Kevin McCullough  <kmccullough@apple.com>
7100
7101        Reviewed by Geoff.
7102
7103        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
7104        profiler.
7105        - Remove recursion from exclude().  This leaves only focus() to fix.
7106
7107        * JavaScriptCore.exp: Change the signatures of the exported functions.
7108        * profiler/Profile.cpp:
7109        (KJS::Profile::forEach): I added a traverseNextNodePreOrder() function
7110        and so needed to distinguish the other function by labeling it
7111        traverseNextNodePostOrder().
7112        (KJS::Profile::exclude): All new exclude that iteratively walks the tree
7113        * profiler/Profile.h:
7114        (KJS::Profile::focus): Add a null check for m_head.
7115        * profiler/ProfileNode.cpp:
7116        (KJS::ProfileNode::traverseNextNodePostOrder): Renamed
7117        (KJS::ProfileNode::traverseNextNodePreOrder): Walks the tree in pre-
7118        order, where the parent is processed before the children.
7119        (KJS::ProfileNode::setTreeVisible): Iterate over the sub-tree and set
7120        all of the nodes visible value.  This changes another function that used
7121        recursion.
7122        (KJS::ProfileNode::exclude): Remove recursion from this function.
7123        Because we now check for m_visible and we are walking the tree in pre-
7124        order we do not need to check if an excluded node is in an excluded
7125        sub-tree.
7126        * profiler/ProfileNode.h: Added specific selfTime functions to
7127        facilitate exclude().
7128        (KJS::ProfileNode::setSelfTime):
7129        (KJS::ProfileNode::setActualSelfTime):
7130        (KJS::ProfileNode::setVisibleSelfTime):
7131
71322008-06-12  Darin Adler  <darin@apple.com>
7133
7134        Reviewed by Maciej.
7135
7136        - https://bugs.webkit.org/show_bug.cgi?id=19434
7137          speed up SunSpider by avoiding some string boxing
7138
7139        Speeds up SunSpider by 1.1%.
7140
7141        Optimized code path for getting built-in properties from strings -- avoid
7142        boxing with a string object in that case. We can make further changes to avoid
7143        even more boxing, but this change alone is a win.
7144
7145        * API/JSCallbackObjectFunctions.h:
7146        (KJS::JSCallbackObject::staticValueGetter): Use isObject instead of inherits
7147        in asssert, since the type of slotBase() is now JSValue, not JSObject.
7148        (KJS::JSCallbackObject::staticFunctionGetter): Ditto.
7149        (KJS::JSCallbackObject::callbackGetter): Ditto.
7150
7151        * kjs/internal.cpp:
7152        (KJS::StringImp::getPrimitiveNumber): Updated for change of data member name.
7153        (KJS::StringImp::toBoolean): Ditto.
7154        (KJS::StringImp::toNumber): Ditto.
7155        (KJS::StringImp::toString): Ditto.
7156        (KJS::StringInstance::create): Added; avoids a bit of cut and paste code.
7157        (KJS::StringImp::toObject): Use StringInstance::create.
7158        (KJS::StringImp::toThisObject): Ditto.
7159        (KJS::StringImp::lengthGetter): Added. Replaces the getter that used to live in
7160        the StringInstance class.
7161        (KJS::StringImp::indexGetter): Ditto.
7162        (KJS::StringImp::indexNumericPropertyGetter): Ditto.
7163        (KJS::StringImp::getOwnPropertySlot): Added. Deals with built in properties of
7164        the string class without creating a StringInstance.
7165
7166        * kjs/internal.h:
7167        (KJS::StringImp::getStringPropertySlot): Added. To be used by both the string
7168        and string object getOwnPropertySlot function.
7169
7170        * kjs/lookup.h:
7171        (KJS::staticFunctionGetter): Updated since slotBase() is now a JSValue rather
7172        than a JSObject.
7173
7174        * kjs/object.h: Removed PropertySlot::slotBase() function, which can now move
7175        back into property_slot.h where it belongs since it doesn't have to cast to
7176        JSObject*.
7177
7178        * kjs/property_slot.cpp:
7179        (KJS::PropertySlot::functionGetter): Updated since slot.slotBase() is now a JSValue*
7180        instead of JSObject*. setGetterSlot still guarantees the base is a JSObject*.
7181        * kjs/property_slot.h:
7182        (KJS::PropertySlot::PropertySlot): Changed base to JSValue* intead of JSCell*.
7183        (KJS::PropertySlot::setStaticEntry): Ditto.
7184        (KJS::PropertySlot::setCustom): Ditto.
7185        (KJS::PropertySlot::setCustomIndex): Ditto.
7186        (KJS::PropertySlot::setCustomNumeric): Ditto.
7187        (KJS::PropertySlot::slotBase): Moved inline here since it no longer involves a
7188        downcast to JSObject*.
7189        (KJS::PropertySlot::setBase): Changed to JSValue*.
7190
7191        * kjs/string_object.cpp:
7192        (KJS::StringInstance::getOwnPropertySlot): Changed to use getStringPropertySlot
7193        instead of coding the properties here. This allows sharing the code with StringImp.
7194
7195        * kjs/string_object.h: Removed inlineGetOwnPropertySlot, lengthGetter, and indexGetter.
7196        Made one of the constructors protected.
7197
7198        * kjs/value.h: Made getOwnPropertySlot private in the JSCell class -- this is better
7199        since it's not the real JSObject getOwnPropertySlot semantic and most callers shouldn't
7200        use it.
7201
72022008-06-12  Alexey Proskuryakov  <ap@webkit.org>
7203
7204        Reviewed by Maciej.
7205
7206        Preparation to making JavaScript heap per-thread.
7207
7208        * kjs/collector.cpp:
7209        (KJS::Collector::collect):
7210        * kjs/collector.h:
7211        (KJS::Collector::markListSet):
7212        The collector now holds the list of protected lists itself, to be made per-instance.
7213
7214        * kjs/list.h: Changed to hold a pointer to a mark set this list is in, if any.
7215        (KJS::List::List): Explicitly initialize m_size with zero, as m_vector.size() is
7216        guaranteed to be such anyway.
7217        (KJS::List::append): Changed the fast case to only be executed as long as inline buffer
7218        is used, because otherwise, we now do more expensive checks.
7219
7220        * kjs/list.cpp:
7221        (KJS::List::markLists): Renamed from markProtectedListsSlowCase, made it take the list set
7222        as a parameter.
7223        (KJS::List::slowAppend): If a non-immediate value is appended, the list needs to be added
7224        to an appropriate Heap's protected list. For now, a static Collector::markListSet() is
7225        used, but the code is layed out in preparation to making the switch to multiple heaps.
7226
7227        * JavaScriptCore.exp: Updated export list.
7228
72292008-06-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7230
7231        Reviewed by Maciej.
7232
7233        Bug 19510: CodeBlock::needsFullScopeChain not always set for global code
7234        <https://bugs.webkit.org/show_bug.cgi?id=19510>
7235
7236        This fixes the symptoms by using CodeGenerator::m_codeType to determine
7237        when to use temporaries instead of CodeBlock::needsFullScopeChain, but
7238        it does not fix the problem itself.
7239
7240        * VM/CodeGenerator.h:
7241        (KJS::CodeGenerator::leftHandSideNeedsCopy):
7242
72432008-06-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7244
7245        Reviewed by Maciej.
7246
7247        Bug 19498: REGRESSION (r34497): crash while loading GMail
7248        <https://bugs.webkit.org/show_bug.cgi?id=19498>
7249
7250        * VM/CodeGenerator.cpp:
7251        (KJS::CodeGenerator::emitJumpIfTrueMayCombine):
7252        (KJS::CodeGenerator::emitJumpIfTrue):
7253        * VM/CodeGenerator.h:
7254        * kjs/nodes.cpp:
7255        (KJS::DoWhileNode::emitCode):
7256        (KJS::WhileNode::emitCode):
7257        (KJS::ForNode::emitCode):
7258        (KJS::CaseBlockNode::emitCodeForBlock):
7259
72602008-06-11  Darin Adler  <darin@apple.com>
7261
7262        Reviewed by Maciej.
7263
7264        - a little bit of cleanup and prep for some upcoming optimizations
7265
7266        * JavaScriptCore.exp: Re-sorted this file (with sort command line tool).
7267        * VM/CodeBlock.cpp:
7268        (KJS::CodeBlock::dump): Fixed printf to avoid warnings -- to use %lu we
7269        need to make sure the type is unsigned long.
7270        * kjs/object.cpp:
7271        (KJS::Error::create): Eliminated unused error names array, and also put
7272        the strings into the code since there was already a switch statment.
7273        This also avoids having to contemplate a hypothetical access past the
7274        end of the array.
7275        * kjs/object.h: Got rid of errorNames.
7276        * kjs/property_slot.cpp: Deleted unused ungettableGetter.
7277        * kjs/property_slot.h: Ditto.
7278        * wtf/AlwaysInline.h: Added LIKELY alongside UNLIKELY.
7279
72802008-06-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7281
7282        Reviewed by Darin.
7283
7284        Bug 19457: Create fused opcodes for tests and conditional jumps
7285        <https://bugs.webkit.org/show_bug.cgi?id=19457>
7286
7287        Add a new jless instruction, and modify the code generator to emit it
7288        instead of the pair (less, jtrue).
7289
7290        Gives a 3.6% improvement on SunSpider.
7291
7292        * VM/CodeBlock.cpp:
7293        (KJS::CodeBlock::dump):
7294        * VM/CodeGenerator.cpp:
7295        (KJS::CodeGenerator::CodeGenerator):
7296        (KJS::CodeGenerator::emitOpcode):
7297        (KJS::CodeGenerator::retrieveLastBinaryOp):
7298        (KJS::CodeGenerator::rewindBinaryOp):
7299        (KJS::CodeGenerator::emitJump):
7300        (KJS::CodeGenerator::emitJumpIfTrue):
7301        (KJS::CodeGenerator::emitJumpIfFalse):
7302        (KJS::CodeGenerator::emitMove):
7303        (KJS::CodeGenerator::emitNot):
7304        (KJS::CodeGenerator::emitEqual):
7305        (KJS::CodeGenerator::emitNotEqual):
7306        (KJS::CodeGenerator::emitStrictEqual):
7307        (KJS::CodeGenerator::emitNotStrictEqual):
7308        (KJS::CodeGenerator::emitLess):
7309        (KJS::CodeGenerator::emitLessEq):
7310        (KJS::CodeGenerator::emitPreInc):
7311        (KJS::CodeGenerator::emitPreDec):
7312        (KJS::CodeGenerator::emitPostInc):
7313        (KJS::CodeGenerator::emitPostDec):
7314        (KJS::CodeGenerator::emitToJSNumber):
7315        (KJS::CodeGenerator::emitNegate):
7316        (KJS::CodeGenerator::emitAdd):
7317        (KJS::CodeGenerator::emitMul):
7318        (KJS::CodeGenerator::emitDiv):
7319        (KJS::CodeGenerator::emitMod):
7320        (KJS::CodeGenerator::emitSub):
7321        (KJS::CodeGenerator::emitLeftShift):
7322        (KJS::CodeGenerator::emitRightShift):
7323        (KJS::CodeGenerator::emitUnsignedRightShift):
7324        (KJS::CodeGenerator::emitBitAnd):
7325        (KJS::CodeGenerator::emitBitXOr):
7326        (KJS::CodeGenerator::emitBitOr):
7327        (KJS::CodeGenerator::emitBitNot):
7328        (KJS::CodeGenerator::emitInstanceOf):
7329        (KJS::CodeGenerator::emitTypeOf):
7330        (KJS::CodeGenerator::emitIn):
7331        (KJS::CodeGenerator::emitLoad):
7332        (KJS::CodeGenerator::emitNewObject):
7333        (KJS::CodeGenerator::emitNewArray):
7334        (KJS::CodeGenerator::emitResolve):
7335        (KJS::CodeGenerator::emitGetScopedVar):
7336        (KJS::CodeGenerator::emitPutScopedVar):
7337        (KJS::CodeGenerator::emitResolveBase):
7338        (KJS::CodeGenerator::emitResolveWithBase):
7339        (KJS::CodeGenerator::emitResolveFunction):
7340        (KJS::CodeGenerator::emitGetById):
7341        (KJS::CodeGenerator::emitPutById):
7342        (KJS::CodeGenerator::emitPutGetter):
7343        (KJS::CodeGenerator::emitPutSetter):
7344        (KJS::CodeGenerator::emitDeleteById):
7345        (KJS::CodeGenerator::emitGetByVal):
7346        (KJS::CodeGenerator::emitPutByVal):
7347        (KJS::CodeGenerator::emitDeleteByVal):
7348        (KJS::CodeGenerator::emitPutByIndex):
7349        (KJS::CodeGenerator::emitNewFunction):
7350        (KJS::CodeGenerator::emitNewRegExp):
7351        (KJS::CodeGenerator::emitNewFunctionExpression):
7352        (KJS::CodeGenerator::emitCall):
7353        (KJS::CodeGenerator::emitReturn):
7354        (KJS::CodeGenerator::emitEnd):
7355        (KJS::CodeGenerator::emitConstruct):
7356        (KJS::CodeGenerator::emitPushScope):
7357        (KJS::CodeGenerator::emitPopScope):
7358        (KJS::CodeGenerator::emitDebugHook):
7359        (KJS::CodeGenerator::emitComplexJumpScopes):
7360        (KJS::CodeGenerator::emitJumpScopes):
7361        (KJS::CodeGenerator::emitNextPropertyName):
7362        (KJS::CodeGenerator::emitGetPropertyNames):
7363        (KJS::CodeGenerator::emitCatch):
7364        (KJS::CodeGenerator::emitThrow):
7365        (KJS::CodeGenerator::emitNewError):
7366        (KJS::CodeGenerator::emitJumpSubroutine):
7367        (KJS::CodeGenerator::emitSubroutineReturn):
7368        * VM/CodeGenerator.h:
7369        * VM/Machine.cpp:
7370        (KJS::Machine::privateExecute):
7371        * VM/Opcode.cpp:
7372        * VM/Opcode.h:
7373
73742008-06-11  Darin Adler  <darin@apple.com>
7375
7376        Reviewed by Alexey.
7377
7378        - fix https://bugs.webkit.org/show_bug.cgi?id=19442
7379          JavaScript array implementation doesn't maintain m_numValuesInVector when sorting
7380
7381        * kjs/array_instance.cpp:
7382        (KJS::ArrayInstance::checkConsistency): Added. Empty inline version for when
7383        consistency checks are turned off.
7384        (KJS::ArrayInstance::ArrayInstance): Check consistency after construction.
7385        (KJS::ArrayInstance::~ArrayInstance): Check consistency before destruction.
7386        (KJS::ArrayInstance::put): Check consistency before and after.
7387        (KJS::ArrayInstance::deleteProperty): Ditto.
7388        (KJS::ArrayInstance::setLength): Ditto.
7389        (KJS::compareByStringPairForQSort): Use typedef for clarity.
7390        (KJS::ArrayInstance::sort): Check consistency before and after. Also broke the loop
7391        to set up sorting into two separate passes. Added FIXMEs about various exception
7392        safety issues. Added code to set m_numValuesInVector after sorting.
7393        (KJS::ArrayInstance::compactForSorting): Ditto.
7394
7395        * kjs/array_instance.h: Added a definition of an enum for the types of consistency
7396        check and a declaration of the consistency checking function.
7397
73982008-06-10  Kevin Ollivier  <kevino@theolliviers.com>
7399
7400        wx build fix. Link against libedit on Mac since HAVE(READLINE) is defined there.
7401
7402        * jscore.bkl:
7403
74042008-06-10  Alexey Proskuryakov  <ap@webkit.org>
7405
7406        Reviewed by Darin.
7407
7408        https://bugs.webkit.org/show_bug.cgi?id=16503
7409        match limit takes at least 13% of the time on the SunSpider regexp-dna test
7410
7411        Make the limit test slightly more efficient. It is not clear how much of a win it is,
7412        as the improvement on regexp-dna varies from 2.3% to 0.6% depending on what revision I
7413        apply the patch to. Today, the win on regexp-dna was minimal, but the total win was whopping
7414        0.5%, due to random code generation changes.
7415
7416        * pcre/pcre_exec.cpp: (match): Avoid loading a constant on each iteration.
7417
74182008-06-09  Alp Toker  <alp@nuanti.com>
7419
7420        gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to
7421        each of the tools since these are no longer set globally.
7422
7423        * GNUmakefile.am:
7424
74252008-06-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7426
7427        Reviewed by Sam.
7428
7429        Add an include for readline/history.h to fix the build for Darwin users
7430        with the GNU readline library installed. Also, clean up the style of
7431        the HAVE(READLINE) check.
7432
7433        * kjs/testkjs.cpp:
7434        (runInteractive):
7435
74362008-06-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7437
7438        Reviewed by Darin.
7439
7440        Bug 17531: Add interactive mode to testkjs
7441        <https://bugs.webkit.org/show_bug.cgi?id=17531>
7442
7443        This is a cleaned up version of Sam's earlier patch to add an
7444        interactive mode to testkjs.
7445
7446        Readline support is only enabled on Darwin platforms for now, but
7447        other ports can enable it by defining HAVE_READLINE in kjs/config.h.
7448
7449        * JavaScriptCore.xcodeproj/project.pbxproj:
7450        * kjs/config.h:
7451        * kjs/testkjs.cpp:
7452        (Options::Options):
7453        (runWithScripts):
7454        (runInteractive):
7455        (printUsageStatement):
7456        (parseArguments):
7457        (kjsmain):
7458
74592008-06-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7460
7461        Reviewed by Darin.
7462
7463        Bug 19346: REGRESSION: Mootools 1.2 Class inheritance broken in post-SquirrelFish merge
7464        <https://bugs.webkit.org/show_bug.cgi?id=19346>
7465
7466        A check for whether a function's caller is eval code accidentally included
7467        the case where the caller's caller is native code. Add a CodeType field to
7468        CodeBlock and use this for the eval caller test instead.
7469
7470        * VM/CodeBlock.h:
7471        (KJS::CodeBlock::CodeBlock):
7472        (KJS::ProgramCodeBlock::ProgramCodeBlock):
7473        (KJS::EvalCodeBlock::EvalCodeBlock):
7474        * VM/Machine.cpp:
7475        (KJS::getCallerFunctionOffset):
7476        * kjs/nodes.cpp:
7477        (KJS::FunctionBodyNode::generateCode):
7478        (KJS::ProgramNode::generateCode):
7479
74802008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7481
7482        Reviewed by Dan Bernstein.
7483
7484        Bug 17928: testkjs shouldn't require "-f"
7485        <https://bugs.webkit.org/show_bug.cgi?id=17928>
7486
7487        * kjs/testkjs.cpp:
7488        (printUsageStatement):
7489        (parseArguments):
7490
74912008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7492
7493        Reviewed by Eric.
7494
7495        Bug 17548: JavaScriptCore print(a, b) differs from Spidermonkey Behavior
7496        <https://bugs.webkit.org/show_bug.cgi?id=17548>
7497
7498        * kjs/testkjs.cpp:
7499        (functionPrint):
7500
75012008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7502
7503        Reviewed by Sam.
7504
7505        Bug 17547: JavaScriptCore print() differs from Spidermonkey Behavior
7506        <https://bugs.webkit.org/show_bug.cgi?id=17547>
7507
7508        * kjs/testkjs.cpp:
7509        (functionPrint):
7510
75112008-06-07  Alexey Proskuryakov  <ap@webkit.org>
7512
7513        More build fixes.
7514
7515        * kjs/JSGlobalData.cpp: Fixed an included file name for case-sensitive file systems, fixed
7516        JSGlobalData::threadInstance() for non-multithreaded builds.
7517
75182008-06-07  Alexey Proskuryakov  <ap@webkit.org>
7519
7520        Build fix - actually adding JSGlobalData.cpp to non-Mac builds!
7521
7522        * GNUmakefile.am:
7523        * JavaScriptCore.pri:
7524        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7525        * JavaScriptCoreSources.bkl:
7526
75272008-06-07  Alexey Proskuryakov  <ap@webkit.org>
7528
7529        Try to fix Gtk/gcc 4.3 build.
7530
7531        * kjs/JSGlobalData.h: Include ustring.h instead of forward-declaring UString::Rep.
7532
75332008-06-06  Alexey Proskuryakov  <ap@webkit.org>
7534
7535        Reviewed by Darin.
7536
7537        Combine per-thread objects into one, to make it easier to support legacy clients (for
7538        which they shouldn't be really per-thread).
7539
7540        No change on SunSpider total.
7541
7542        * JavaScriptCore.xcodeproj/project.pbxproj: Added JSGlobalData.{h,cpp}
7543
7544        * kjs/JSGlobalData.cpp: Added.
7545        (KJS::JSGlobalData::JSGlobalData):
7546        (KJS::JSGlobalData::~JSGlobalData):
7547        (KJS::JSGlobalData::threadInstance):
7548        * kjs/JSGlobalData.h: Added.
7549        This class encapsulates all data that should be per-thread (or shared between legacy clients).
7550        It will also keep a Heap pointer, but right now, Heap (Collector) methods are all static.
7551
7552        * kjs/identifier.h:
7553        (KJS::Identifier::Identifier):
7554        Added a constructor explicitly taking JSGlobalData to access IdentifierTable. Actually,
7555        all of them should, but this will be a separate patch.
7556
7557        * kjs/identifier.cpp:
7558        (KJS::IdentifierTable::literalTable):
7559        (KJS::createIdentifierTable):
7560        (KJS::deleteIdentifierTable):
7561        (KJS::Identifier::add):
7562        (KJS::Identifier::addSlowCase):
7563        Combined IdentifierTable and LiteralIdentifierTable into a single class for simplicity.
7564
7565        * kjs/grammar.y: kjsyyparse now takes JSGlobalData, not just a Lexer.
7566
7567        * kjs/nodes.cpp:
7568        (KJS::Node::Node):
7569        (KJS::EvalFunctionCallNode::emitCode):
7570        (KJS::ScopeNode::ScopeNode):
7571        Changed to access Lexer and Parser via JSGlobalData::threadInstance(). This is also a
7572        temporary measure, they will need to use JSGlobalData explicitly.
7573
7574        * VM/CodeGenerator.cpp:
7575        (KJS::CodeGenerator::CodeGenerator):
7576        * VM/CodeGenerator.h:
7577        * VM/Machine.cpp:
7578        (KJS::callEval):
7579        * kjs/CommonIdentifiers.cpp:
7580        (KJS::CommonIdentifiers::CommonIdentifiers):
7581        * kjs/CommonIdentifiers.h:
7582        * kjs/DebuggerCallFrame.cpp:
7583        (KJS::DebuggerCallFrame::evaluate):
7584        * kjs/ExecState.cpp:
7585        (KJS::ExecState::ExecState):
7586        * kjs/ExecState.h:
7587        (KJS::ExecState::globalData):
7588        (KJS::ExecState::identifierTable):
7589        (KJS::ExecState::propertyNames):
7590        (KJS::ExecState::emptyList):
7591        (KJS::ExecState::lexer):
7592        (KJS::ExecState::parser):
7593        (KJS::ExecState::arrayTable):
7594        (KJS::ExecState::dateTable):
7595        (KJS::ExecState::mathTable):
7596        (KJS::ExecState::numberTable):
7597        (KJS::ExecState::RegExpImpTable):
7598        (KJS::ExecState::RegExpObjectImpTable):
7599        (KJS::ExecState::stringTable):
7600        * kjs/InitializeThreading.cpp:
7601        (KJS::initializeThreadingOnce):
7602        * kjs/JSGlobalObject.cpp:
7603        (KJS::JSGlobalObject::init):
7604        * kjs/JSGlobalObject.h:
7605        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
7606        (KJS::JSGlobalObject::head):
7607        (KJS::JSGlobalObject::globalData):
7608        * kjs/Parser.cpp:
7609        (KJS::Parser::parse):
7610        * kjs/Parser.h:
7611        * kjs/function.cpp:
7612        (KJS::FunctionImp::getParameterName):
7613        (KJS::IndexToNameMap::unMap):
7614        (KJS::globalFuncEval):
7615        * kjs/function_object.cpp:
7616        (KJS::FunctionObjectImp::construct):
7617        * kjs/interpreter.cpp:
7618        (KJS::Interpreter::checkSyntax):
7619        (KJS::Interpreter::evaluate):
7620        * kjs/lexer.cpp:
7621        (kjsyylex):
7622        * kjs/lexer.h:
7623        * kjs/testkjs.cpp:
7624        (prettyPrintScript):
7625        Updated for the above changes. Most of threadInstance uses here will need to be replaced with
7626        explicitly passed pointers to support legacy JSC clients.
7627
7628        * JavaScriptCore.exp: Removed KJS::parser().
7629
76302008-06-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7631
7632        Reviewed by Oliver.
7633
7634        Bug 19424: Add support for logging opcode pair counts
7635        <https://bugs.webkit.org/show_bug.cgi?id=19424>
7636
7637        * VM/Machine.cpp:
7638        (KJS::Machine::privateExecute):
7639        * VM/Opcode.cpp:
7640        (KJS::OpcodeStats::OpcodeStats):
7641        (KJS::compareOpcodeIndices):
7642        (KJS::compareOpcodePairIndices):
7643        (KJS::OpcodeStats::~OpcodeStats):
7644        (KJS::OpcodeStats::recordInstruction):
7645        (KJS::OpcodeStats::resetLastInstruction):
7646        * VM/Opcode.h:
7647
76482008-06-06  Kevin McCullough  <kmccullough@apple.com>
7649
7650        Reviewed by Adam.
7651
7652        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
7653        profiler.
7654        - Change the remaining functions that do not take arguments, from using
7655        recursion to using iteration.
7656
7657        * JavaScriptCore.exp:
7658        * profiler/Profile.cpp:
7659        (KJS::stopProfiling):
7660        (KJS::restoreAll):
7661        (KJS::Profile::stopProfiling): Use foreach instead of recursion.
7662        (KJS::Profile::restoreAll): Ditto.
7663        * profiler/Profile.h:
7664        * profiler/ProfileNode.cpp: Remove recursion.
7665        (KJS::ProfileNode::stopProfiling):
7666        (KJS::ProfileNode::restore):
7667        * profiler/ProfileNode.h:
7668
76692008-06-05  Oliver Hunt  <oliver@apple.com>
7670
7671        Reviewed by Alexey.
7672
7673        Fix Greater and GreaterEq nodes to emit code for the left
7674        and right sub-expressions in the correct order.
7675
7676        * kjs/nodes.cpp:
7677        (KJS::GreaterNode::emitCode):
7678        (KJS::GreaterEqNode::emitCode):
7679
76802008-06-05  Antti Koivisto  <antti@apple.com>
7681
7682        Reviewed by Alp Toker.
7683        
7684        Fix whitespaces.
7685
7686        * kjs/collector.cpp:
7687        (KJS::getPlatformThreadRegisters):
7688
76892008-06-05  Antti Koivisto  <antti@apple.com>
7690
7691        Reviewed by Darin.
7692        
7693        Support compiling JavaScriptCore for ARM.
7694
7695        * kjs/collector.cpp:
7696        (KJS::getPlatformThreadRegisters):
7697        (KJS::otherThreadStackPointer):
7698
76992008-06-05  Kevin McCullough  <kmccullough@apple.com>
7700
7701        Reviewed by Jon.
7702
7703        - Name changes.
7704
7705        * JavaScriptCore.exp:
7706        * profiler/Profile.cpp:
7707        (KJS::Profile::Profile):
7708        (KJS::Profile::stopProfiling):
7709        (KJS::Profile::didExecute):
7710        (KJS::Profile::forEach):
7711        (KJS::Profile::debugPrintData):
7712        (KJS::Profile::debugPrintDataSampleStyle):
7713        * profiler/Profile.h:
7714        (KJS::Profile::callTree):
7715        (KJS::Profile::totalTime):
7716        (KJS::Profile::sortTotalTimeDescending):
7717        (KJS::Profile::sortTotalTimeAscending):
7718        (KJS::Profile::sortSelfTimeDescending):
7719        (KJS::Profile::sortSelfTimeAscending):
7720        (KJS::Profile::sortCallsDescending):
7721        (KJS::Profile::sortCallsAscending):
7722        (KJS::Profile::sortFunctionNameDescending):
7723        (KJS::Profile::sortFunctionNameAscending):
7724        (KJS::Profile::focus):
7725        (KJS::Profile::exclude):
7726        (KJS::Profile::restoreAll):
7727
77282008-06-05  Geoffrey Garen  <ggaren@apple.com>
7729
7730        Reviewed by Stephanie Lewis.
7731
7732        Added the -fno-move-loop-invariants flag to the pcre_exec.cpp build, to
7733        tell GCC not to perform loop invariant motion, since GCC's loop
7734        invariant motion doesn't do very well with computed goto code.
7735        
7736        SunSpider reports no change.
7737
77382008-06-05  Geoffrey Garen  <ggaren@apple.com>
7739
7740        Reviewed by Stephanie Lewis.
7741        
7742        Added the -fno-tree-pre flag to the Machine.cpp build, to tell GCC not
7743        to perform Partial Redundancy Elimination (PRE) on trees in Machine.cpp,
7744        since GCC's PRE doesn't do very well with computed goto code.
7745        
7746        SunSpider reports a .7% speedup.
7747        
77482008-06-05  Geoffrey Garen  <ggaren@apple.com>
7749
7750        Reviewed by Stephanie Lewis (or maybe the other way around).
7751        
7752        Minor change to PCRE to help out certain compilers.
7753        
7754        SunSpider reports no change, maybe a small speedup.
7755
7756        * pcre/pcre_exec.cpp:
7757        (match): Use instructionPtr++ a little less, to avoid confusing the
7758        optimizer.
7759
77602008-06-05  Alexey Proskuryakov  <ap@webkit.org>
7761
7762        Re-landing an independent part of a previously rolled out threading patch.
7763
7764        * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
7765        (replaced "new T" with "new T()").
7766
77672008-06-05  Maciej Stachowiak  <mjs@apple.com>
7768
7769        Reviewed by Hyatt.
7770        
7771        - force inlining of a template function that only has one call site per specialization
7772        1.3% speedup on SunSpider
7773
7774        * kjs/collector.cpp:
7775        (KJS::Collector::heapAllocate): This template function is only
7776        called from allocate() and allocateNumber() (once per
7777        specialization) and the extra call overhead for GC allocation
7778        shows up, so force inlining.
7779
77802008-06-05  Maciej Stachowiak  <mjs@apple.com>
7781
7782        Reviewed by Alexey and Oliver.
7783        
7784        - remove profiler fetch hack
7785        I measure an 0.5% progression from this, others show a wash. It seems not needed any more.
7786
7787        * VM/Machine.cpp:
7788        (KJS::Machine::privateExecute):
7789
77902008-06-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7791
7792        Reviewed by Maciej.
7793
7794        Bug 19400: subscript operator does not protect base when necessary
7795        <https://bugs.webkit.org/show_bug.cgi?id=19400>
7796
7797        Use a temporary for the base in BracketAccessorNode if the subscript
7798        might possibly modify it.
7799
7800        * kjs/grammar.y:
7801        * kjs/nodes.cpp:
7802        (KJS::BracketAccessorNode::emitCode):
7803        * kjs/nodes.h:
7804        (KJS::BracketAccessorNode::):
7805
78062008-06-04  Sam Weinig  <sam@webkit.org>
7807
7808        Reviewed by Maciej Stachowiak.
7809
7810        Big cleanup of formatting and whitespace.
7811
78122008-06-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7813
7814        Reviewed by Oliver.
7815
7816        Add an option to dump statistics on executed instructions.
7817
7818        * VM/Machine.cpp:
7819        (KJS::Machine::privateExecute):
7820        * VM/Opcode.cpp:
7821        (KJS::OpcodeStats::~OpcodeStats):
7822        (KJS::OpcodeStats::recordInstruction):
7823        * VM/Opcode.h:
7824
78252008-06-04  Kevin McCullough  <kmccullough@apple.com>
7826
7827        Reviewed by Geoff.
7828
7829        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
7830        profiler.
7831        - This patch removes the use of recursion for the sort functions.
7832
7833        * JavaScriptCore.exp: Change the signatures of the functions being
7834        exported.
7835        * profiler/Profile.cpp:
7836        (KJS::Profile::sort): This generic function will accept any of the
7837        static sort functions and apply them to the whole tree.
7838        * profiler/Profile.h: All of the sorting functions now call the new
7839        sort() function.
7840        (KJS::Profile::sortTotalTimeDescending):
7841        (KJS::Profile::sortTotalTimeAscending):
7842        (KJS::Profile::sortSelfTimeDescending):
7843        (KJS::Profile::sortSelfTimeAscending):
7844        (KJS::Profile::sortCallsDescending):
7845        (KJS::Profile::sortCallsAscending):
7846        (KJS::Profile::sortFunctionNameDescending):
7847        (KJS::Profile::sortFunctionNameAscending):
7848        * profiler/ProfileNode.cpp:
7849        (KJS::ProfileNode::ProfileNode): m_head used to point to the head node
7850        if this was the head node.  It now points to null to make iteration easy
7851        (KJS::ProfileNode::willExecute): Now must check if m_head is null, this
7852        check used to happend in the constructor.
7853        (KJS::ProfileNode::stopProfiling): Again the check is slightly different
7854        to determine if this is the head.
7855        (KJS::ProfileNode::traverseNextNode): This function returns the next
7856        node in post order.
7857        (KJS::ProfileNode::sort): This generic function will sort according to
7858        the comparator passed in, then reset the children pointers to macth the
7859        new order.
7860        * profiler/ProfileNode.h: The sorting function were removed from the
7861        definition file and instead use the new generic sort() function
7862        (KJS::ProfileNode::totalPercent): because the head can now be empty we
7863        need to check here too for the head node.
7864        (KJS::ProfileNode::selfPercent): Ditto
7865        (KJS::ProfileNode::firstChild): This function is necessary for the 
7866        iterative algorithm in Profile.cpp.
7867        (KJS::ProfileNode::sortTotalTimeDescending):
7868        (KJS::ProfileNode::sortTotalTimeAscending):
7869        (KJS::ProfileNode::sortSelfTimeDescending):
7870        (KJS::ProfileNode::sortSelfTimeAscending):
7871        (KJS::ProfileNode::sortCallsDescending):
7872        (KJS::ProfileNode::sortCallsAscending):
7873        (KJS::ProfileNode::sortFunctionNameDescending):
7874        (KJS::ProfileNode::sortFunctionNameAscending):
7875        (KJS::ProfileNode::childrenBegin):
7876        (KJS::ProfileNode::childrenEnd):
7877        (KJS::ProfileNode::totalTimeDescendingComparator):
7878        (KJS::ProfileNode::totalTimeAscendingComparator):
7879        (KJS::ProfileNode::selfTimeDescendingComparator):
7880        (KJS::ProfileNode::selfTimeAscendingComparator):
7881        (KJS::ProfileNode::callsDescendingComparator):
7882        (KJS::ProfileNode::callsAscendingComparator):
7883        (KJS::ProfileNode::functionNameDescendingComparator):
7884        (KJS::ProfileNode::functionNameAscendingComparator):
7885
78862008-06-04  Alexey Proskuryakov  <ap@webkit.org>
7887
7888        Reviewed by Darin.
7889
7890        Fix JSClassCreate to work with old JSCore API threading model.
7891
7892        No change on SunSpider.
7893
7894        * API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Since JSClass is constructed without
7895        a context, there is no way for it to create Identifiers.
7896        Also, added initializeThreading(), just for good measure.
7897
7898        * API/JSCallbackObjectFunctions.h: (KJS::::getPropertyNames): Make an Identifier out of the
7899        string here, because propertyNames.add() needs that.
7900
7901        * kjs/identifier.cpp:
7902        * kjs/identifier.h:
7903        (KJS::Identifier::equal):
7904        * kjs/ustring.cpp:
7905        (KJS::equal):
7906        Moved equal() from identifier.h to ustring.h, because it's not really about Identifiers,
7907        and to make it possible to use it from StrHash.
7908        Include StrHash.h from ustring.h to avoid having the behavior depend on headers that happen
7909        to be included.
7910
7911        * wtf/StrHash.h: Removed.
7912        * kjs/ustring.h: Made RefPtr<UString::Rep> use the same default hash as UString::Rep* (it
7913        used to default to pointer equality). Moved the whole StrHash header into ustring.h.
7914
7915        * JavaScriptCore.exp: Export equal() for WebCore use (this StrHash is used in c_class.cpp,
7916        jni_class.cpp, and npruntime.cpp).
7917
79182008-06-04  Alexey Proskuryakov  <ap@webkit.org>
7919
7920        Rubber-stamped by Darin.
7921
7922        Fix spacing in collector.{h,cpp}.
7923
7924        * kjs/collector.cpp:
7925        * kjs/collector.h:
7926
79272008-06-03  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
7928
7929        Reviewed by Maciej.
7930
7931        Build fix. The cleanup in r34355 missed a method.
7932
7933        * kjs/nodes.cpp:
7934        * kjs/nodes.h:
7935
79362008-06-03  Darin Adler  <darin@apple.com>
7937
7938        Reviewed by Geoff.
7939
7940        - https://bugs.webkit.org/show_bug.cgi?id=19269
7941          speed up SunSpider by eliminating the toObject call for most get/put/delete
7942
7943        Makes standalone SunSpider 1.025x as fast as before.
7944
7945        The getOwnPropertySlot virtual function now takes care of the toObject call
7946        for get. Similarly, the put function (and later deleteProperty) does the
7947        same for those operations. To do this, the virtual functions were moved from
7948        the JSObject class to the JSCell class. Also, since the caller no longer knows
7949        the identity of the "original object", which is used by JavaScript-function
7950        based getters, changed the PropertySlot class so the original object is
7951        already stored in the slot when getOwnPropertySlot is called, if the caller
7952        intends to call getValue.
7953
7954        This affected the old interpreter code enough that the easiest thing for me
7955        was to just delete it. While I am not certain the mysterious slowdown is not
7956        still occurring, the net change is definitely a significant speedup.
7957
7958        * JavaScriptCore.exp: Updated.
7959
7960        * VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h.
7961        (KJS::resolve): Set up the originalObject in the PropertySlot before
7962        calling getPropertySlot. Also removed the originalObject argument from
7963        getValue.
7964        (KJS::resolve_skip): Ditto.
7965        (KJS::resolveBaseAndProperty): Ditto.
7966        (KJS::resolveBaseAndFunc): Ditto.
7967        (KJS::Machine::privateExecute): Removed the toObject calls from the get and
7968        put functions where possible, instead calling directly with JSValue and letting
7969        the JSValue and JSCell calls handle toObject. Same for toThisObject.
7970
7971        * kjs/ExecState.h: Removed OldInterpreterExecState.
7972
7973        * API/JSBase.cpp: Updated includes.
7974
7975        * kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too.
7976
7977        * kjs/array_instance.cpp:
7978        (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet.
7979        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to
7980        setValueSlot. Also use UNLIKELY around the "getting elements past the end of
7981        the array" code path; less common than successfully getting an element.
7982
7983        * kjs/array_object.cpp:
7984        (KJS::getProperty): Initialize the PropertySlot with the original object.
7985        Don't pass the original object to the get function.
7986        (KJS::arrayProtoFuncFilter): Ditto.
7987        (KJS::arrayProtoFuncMap): Ditto.
7988        (KJS::arrayProtoFuncEvery): Ditto.
7989        (KJS::arrayProtoFuncForEach): Ditto.
7990        (KJS::arrayProtoFuncSome): Ditto.
7991
7992        * kjs/function_object.cpp:
7993        (KJS::FunctionObjectImp::construct): Removed an obsolete comment.
7994
7995        * kjs/grammar.y: Eliminated support for some of the node types that were
7996        used to optimize executing from the syntax tree.
7997
7998        * kjs/internal.cpp:
7999        (KJS::StringImp::toThisObject): Added. Same as toObject.
8000        (KJS::NumberImp::toThisObject): Ditto.
8001        (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached.
8002        (KJS::GetterSetterImp::put): Ditto.
8003        (KJS::GetterSetterImp::toThisObject): Ditto.
8004
8005        * kjs/internal.h: Added toThisObject to NumberImp for speed.
8006
8007        * kjs/lexer.cpp:
8008        (KJS::Lexer::shift): Changed shift to just do a single character, to unroll
8009        the loop and especially to make the one character case faster.
8010        (KJS::Lexer::setCode): Call shift multiple times instead of passing a number.
8011        (KJS::Lexer::lex): Ditto.
8012        (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns.
8013        (KJS::Lexer::scanRegExp): Ditto.
8014        * kjs/lexer.h: Removed the count argument from shift.
8015
8016        * kjs/math_object.cpp:
8017        (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN).
8018
8019        * kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish
8020        execution model.
8021        (KJS::ForNode::emitCode): Handle cases where some expressions are missing by
8022        not emitting any code at all. The old way was to emit code for "true", but
8023        this is an unnecessary remnant of the old way of doing things.
8024
8025        * kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish
8026        execution model.
8027
8028        * kjs/object.cpp:
8029        (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter
8030        function. The old code passed in a base, but it was never used when
8031        actually getting the property; the toThisObject call was pointless. Also
8032        changed to not pass a base for setUndefined.
8033
8034        * kjs/object.h: Added the new JSCell operations to GetterSetterImp.
8035        Never called.
8036        (KJS::JSObject::get): Initialize the object in the PropertySlot and don't
8037        pass it in getValue.
8038        (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument
8039        in calls to setValueSlot.
8040        (KJS::JSObject::getOwnPropertySlot): Ditto.
8041        (KJS::JSValue::get): Added. Here because it calls through to JSObject.
8042        A version of JSObject::get that also handles the other types of JSValue
8043        by creating the appropriate wrapper. Saves the virtual call to toObject.
8044        (KJS::JSValue::put): Ditto.
8045        (KJS::JSValue::deleteProperty): Ditto.
8046
8047        * kjs/property_slot.cpp:
8048        (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument.
8049        (KJS::PropertySlot::ungettableGetter): Ditto.
8050        (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base
8051        as the "this" object, which will be set to the original object by the new
8052        PropertySlot initialization code. Also call toThisObject. The old code did
8053        not do this, but needed to so we can properly handle the activation object
8054        like the other similar code paths.
8055
8056        * kjs/property_slot.h:
8057        (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base
8058        object. In debug builds, set the base to 0 if you don't pass one.
8059        (KJS::PropertySlot::getValue): Don't take or pass the originalObject.
8060        (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the
8061        base object in debug builds.
8062        (KJS::PropertySlot::setGetterSlot): Ditto.
8063        (KJS::PropertySlot::setUndefined): Ditto.
8064        (KJS::PropertySlot::setUngettable): Ditto.
8065        (KJS::PropertySlot::slotBase): Assert that a base object is present.
8066        This will fire if someone actually calls the get function without having
8067        passed in a base object and the getter needs it.
8068        (KJS::PropertySlot::setBase): Added. Used by the code that implements
8069        toObject so it can supply the original object after the fact.
8070        (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only
8071        code because it's an error to fetch the base if you don't have a guarantee
8072        it was set.
8073
8074        * API/JSCallbackObject.h:
8075        * API/JSCallbackObjectFunctions.h:
8076        (KJS::JSCallbackObject::cachedValueGetter):
8077        (KJS::JSCallbackObject::staticValueGetter):
8078        (KJS::JSCallbackObject::staticFunctionGetter):
8079        (KJS::JSCallbackObject::callbackGetter):
8080        * kjs/JSActivation.cpp:
8081        (KJS::JSActivation::getOwnPropertySlot):
8082        (KJS::JSActivation::argumentsGetter):
8083        * kjs/JSActivation.h:
8084        * kjs/JSVariableObject.h:
8085        (KJS::JSVariableObject::symbolTableGet):
8086        * kjs/array_instance.h:
8087        * kjs/function.cpp:
8088        (KJS::FunctionImp::argumentsGetter):
8089        (KJS::FunctionImp::callerGetter):
8090        (KJS::FunctionImp::lengthGetter):
8091        (KJS::Arguments::mappedIndexGetter):
8092        * kjs/function.h:
8093        * kjs/lookup.h:
8094        (KJS::staticFunctionGetter):
8095        (KJS::staticValueGetter):
8096        * kjs/string_object.cpp:
8097        (KJS::StringInstance::lengthGetter):
8098        (KJS::StringInstance::indexGetter):
8099        (KJS::stringInstanceNumericPropertyGetter):
8100        * kjs/string_object.h:
8101        Removed originalObject arguments from getters. Don't pass base values to
8102        the various PropertySlot functions that no longer take them.
8103
8104        * kjs/value.cpp:
8105        (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot.
8106        This function has to always return true, because the caller can't walk the prototype
8107        chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works
8108        for the caller. This is private, only called by getOwnPropertySlotInternal.
8109        (KJS::JSCell::put): Added. Calls toObject and then put.
8110        (KJS::JSCell::toThisObject): Added. Calls toObject.
8111
8112        * kjs/value.h: Added get, put, and toThisObject to both JSValue
8113        and JSCell. These take care of the toObject operation without an additional virtual
8114        function call, and so make the common "already an object" case faster.
8115
8116        * wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a
8117        better place later, or rename this header.
8118
81192008-06-03  Oliver Hunt  <oliver@apple.com>
8120
8121        Reviewed by Tim.
8122
8123        Bug 12983: Web Inspector break on the debugger keyword
8124        <https://bugs.webkit.org/show_bug.cgi?id=12983>
8125
8126        Added a DebuggerStatementNode to handle codegen, and added a new
8127        DidReachBreakPoint debug event (which will hopefully be useful
8128        if we ever move breakpoint management into JSC proper).  Also
8129        added didReachBreakpoint to Debugger to allow us to actually respond
8130        to this event.
8131
8132        * VM/CodeBlock.cpp:
8133        (KJS::debugHookName):
8134        * VM/Machine.cpp:
8135        (KJS::Machine::debug):
8136        * VM/Machine.h:
8137        * kjs/debugger.h:
8138        * kjs/grammar.y:
8139        * kjs/nodes.cpp:
8140        (KJS::DebuggerStatementNode::emitCode):
8141        (KJS::DebuggerStatementNode::execute):
8142        * kjs/nodes.h:
8143        (KJS::DebuggerStatementNode::):
8144        * kjs/nodes2string.cpp:
8145        (KJS::DebuggerStatementNode::streamTo):
8146
81472008-06-03  Maciej Stachowiak  <mjs@apple.com>
8148
8149        Reviewed by Oliver.
8150        
8151        - document remaining opcodes.
8152
8153        * VM/Machine.cpp:
8154        (KJS::Machine::privateExecute): Document call, call_eval,
8155        construct, ret and end opcodes.
8156
81572008-06-03  Maciej Stachowiak  <mjs@apple.com>
8158
8159        Reviewed by Oliver.
8160
8161        * VM/Machine.cpp:
8162        (KJS::Machine::privateExecute): Document throw and catch opcodes.
8163
81642008-06-02  Geoffrey Garen  <ggaren@apple.com>
8165
8166        Reviewed by Alexey Proskuryakov.
8167
8168        Removed JSObject::call, since it just called JSObject::callAsFunction.
8169
8170        SunSpider reports no change.
8171
81722008-06-02  Geoffrey Garen  <ggaren@apple.com>
8173
8174        Reviewed by Darin Adler.
8175        
8176        A little cleanup in the CodeGenerator.
8177
8178        * VM/CodeGenerator.cpp: A few changes here.
8179
8180        (1) Removed remaining cases of the old hack of putting "this" into the
8181        symbol table; replaced with explicit tracking of m_thisRegister.
8182
8183        (2) Made m_thisRegister behave the same for function, eval, and program
8184        code, removing the static programCodeThis() function.
8185
8186        (3) Added a feature to nix a ScopeNode's declaration stacks when done
8187        compiling, to save memory.
8188
8189        (4) Removed code that copied eval declarations into special vectors: we
8190        just use the originals in the ScopeNode now.
8191        
8192        * VM/CodeGenerator.h: Removed unneded parameters from the CodeGenerator
8193        constructor: we just use get that data from the ScopeNode now.
8194
8195        * VM/Machine.cpp:
8196        (KJS::Machine::execute): When executing an eval node, don't iterate a
8197        special copy of its declarations; iterate the originals, instead.
8198
8199        * kjs/nodes.cpp: Moved responsibility for knowing what AST data to throw
8200        away into the CodeGenerator. Nodes no longer call shrinkCapacity on
8201        their data directly.
8202        
8203        * kjs/nodes.h: Changed FunctionStack to ref its contents, so declaration
8204        data stays around even after we've thrown away the AST, unless we explicitly
8205        throw away the declaration data, too. This is useful for eval code, which
8206        needs to reference its declaration data at execution time. (Soon, it will
8207        be useful for program code, too, since program code should do the same.)
8208
82092008-06-02  Adam Roben  <aroben@apple.com>
8210
8211        Build fix for non-AllInOne builds
8212
8213        * kjs/array_object.cpp: Added a missing #include.
8214
82152008-06-02  Kevin McCullough  <kmccullough@apple.com>
8216
8217        Took out accidental confilct lines I checked in.
8218
8219        * ChangeLog:
8220
82212008-06-02  Kevin McCullough  <kmccullough@apple.com>
8222
8223        Reviewed by Darin.
8224
8225        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
8226        profiler
8227        Implement Next Sibling pointers as groundwork for removing the recursion
8228        limit in the profiler.
8229
8230        * profiler/ProfileNode.cpp: Also I renamed parentNode and headNode since
8231        'node' is redundant.
8232        (KJS::ProfileNode::ProfileNode): Initialize the nextSibling.
8233        (KJS::ProfileNode::willExecute): If there are already children then the
8234        new child needs to be the nextSibling of the last child.
8235        (KJS::ProfileNode::didExecute):
8236        (KJS::ProfileNode::addChild): Ditto.
8237        (KJS::ProfileNode::stopProfiling):
8238        (KJS::ProfileNode::sortTotalTimeDescending): For all of the sorting
8239        algorithms once the children are sorted their nextSibling pointers need
8240        to be reset to reflect the new order.
8241        (KJS::ProfileNode::sortTotalTimeAscending):
8242        (KJS::ProfileNode::sortSelfTimeDescending):
8243        (KJS::ProfileNode::sortSelfTimeAscending):
8244        (KJS::ProfileNode::sortCallsDescending):
8245        (KJS::ProfileNode::sortCallsAscending):
8246        (KJS::ProfileNode::sortFunctionNameDescending):
8247        (KJS::ProfileNode::sortFunctionNameAscending):
8248        (KJS::ProfileNode::resetChildrensSiblings): This new function simply
8249        loops over all of the children and sets their nextSibling pointers to
8250        the next child in the Vector
8251        (KJS::ProfileNode::debugPrintData):
8252        * profiler/ProfileNode.h:
8253        (KJS::ProfileNode::parent):
8254        (KJS::ProfileNode::setParent):
8255        (KJS::ProfileNode::nextSibling):
8256        (KJS::ProfileNode::setNextSibling):
8257        (KJS::ProfileNode::totalPercent):
8258        (KJS::ProfileNode::selfPercent):
8259
82602008-06-02  Geoffrey Garen  <ggaren@apple.com>
8261
8262        Reviewed by Maciej Stachowiak.
8263
8264        Removed the recursion limit from JSObject::call, since the VM does
8265        recursion checking now.
8266
8267        This should allow us to remove JSObject::call entirely, netting a small
8268        speedup.
8269
8270        * kjs/object.cpp:
8271        (KJS::JSObject::call):
8272
82732008-06-02  Geoffrey Garen  <ggaren@apple.com>
8274
8275        Reviewed by Adele Peterson.
8276
8277        Added a specific affordance for avoiding stack overflow when converting
8278        recursive arrays to string, in preparation for removing generic stack
8279        overflow checking from JSObject::call.
8280        
8281        Tested by fast/js/toString-stack-overflow.html.
8282
82832008-06-02  Geoffrey Garen  <ggaren@apple.com>
8284
8285        Reviewed by Alice Liu.
8286        
8287        Refactored some hand-rolled code to call ScopeChain::globalObject instead.
8288
82892008-06-02  Geoffrey Garen  <ggaren@apple.com>
8290
8291        Reviewed by Darin Adler.
8292        
8293        Fixed ASSERT due to execution continuing after an exception is thrown
8294        during array sort.
8295
8296        * kjs/array_instance.cpp:
8297        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): Don't call the
8298        custom comparator function if an exception has been thrown. Just return
8299        1 for everything, so the sort completes quickly. (The result will be
8300        thrown away.)
8301
83022008-05-30  Timothy Hatcher  <timothy@apple.com>
8303
8304        Made the starting line number of scripts be 1-based throughout the engine.
8305        This cleans up script line numbers so they are all consistent now and fixes
8306        some cases where script execution was shown as off by one line in the debugger.
8307
8308        No change in SunSpider.
8309
8310        Reviewed by Oliver Hunt.
8311
8312        * API/minidom.c:
8313        (main): Pass a line number of 1 instead of 0 to parser().parse().
8314        * API/testapi.c:
8315        (main): Ditto. And removes a FIXME and changed an assertEqualsAsNumber
8316        to use 1 instead of 2 for the line number.
8317        * VM/Machine.cpp:
8318        (KJS::callEval): Pass a line number of 1 instead of 0.
8319        (KJS::Machine::debug): Use firstLine for WillExecuteProgram instead of
8320        lastLine. Use lastLine for DidExecuteProgram instead of firstLine.
8321        * kjs/DebuggerCallFrame.cpp:
8322        (KJS::DebuggerCallFrame::evaluate): Pass a line number of 1 instead of
8323        0 to parser().parse().
8324        * kjs/Parser.cpp:
8325        (KJS::Parser::parse): ASSERT startingLineNumber is greatter than 0. Change
8326        the startingLineNumber to be 1 if it was less than or equal to 0. This is needed
8327        for release builds to maintain compatibility with the JavaScriptCore API.
8328        * kjs/function.cpp:
8329        (KJS::globalFuncEval): Pass a line number of 1 instead of 0 to parser().parse().
8330        * kjs/function_object.cpp:
8331        (FunctionObjectImp::construct): Pass a line number of 1 instead of 0 to construct().
8332        * kjs/lexer.cpp:
8333        (Lexer::setCode): Made yylineno = startingLineNumber instead of adding 1.
8334        * kjs/testkjs.cpp:
8335        (functionRun): Pass a line number of 1 instead of 0 to Interpreter::evaluate().
8336        (functionLoad): Ditto.
8337        (prettyPrintScript): Ditto.
8338        (runWithScripts): Ditto.
8339        * profiler/Profiler.cpp:
8340        (WebCore::createCallIdentifier): Removed a plus 1 of startingLineNumber.
8341
83422008-05-30  Alexey Proskuryakov  <ap@webkit.org>
8343
8344        Reviewed by Darin.
8345
8346        https://bugs.webkit.org/show_bug.cgi?id=19180
8347        speed up SunSpider by optimizing immediate number cases
8348
8349        Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift
8350        parameter to 0...31.
8351
8352        0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte.
8353
8354        * VM/Machine.cpp:
8355        (KJS::Machine::privateExecute):
8356
8357        * kjs/JSImmediate.h:
8358        (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result
8359        to unsigned.
8360
83612008-05-30  Alexey Proskuryakov  <ap@webkit.org>
8362
8363        Reviewed by Oliver Hunt.
8364
8365        https://bugs.webkit.org/show_bug.cgi?id=19180
8366        speed up SunSpider by optimizing immediate number cases
8367
8368        Also fixed two JavaScriptCore regressions seen on PowerPC - we didn't clip right shift
8369        parameter to 0...31.
8370
8371        1.6% improvement on SunSpider, without significant regressions on any tests.
8372
8373        * VM/Machine.cpp:
8374        (KJS::Machine::privateExecute):
8375        Added fast paths for >>, ==, ===, !=, !==. Changed order of memory accesses in many
8376        cases, making them less dependent on gcc's ability to properly assign registers. With this,
8377        I could move exception checks back into slow code paths, and saw less randomness in general.
8378
8379        * kjs/JSImmediate.h:
8380        (KJS::JSImmediate::rightShiftImmediateNumbers):
8381        Added.
8382
83832008-05-29  Maciej Stachowiak  <mjs@apple.com>
8384
8385        Reviewed by Oliver.
8386
8387        - fixed <rdar://problem/5972943> REGRESSION(r33979): Flash clips do not play on cnn.com
8388        
8389        Finally blocks could clobber registers that had to remain live
8390        until they returned. This patch takes a conservative approach and
8391        makes sure that finally blocks do not reuse any registers that
8392        were previously allocated for the function. In the future this
8393        could probably be tightened up to be less profligate with the
8394        register allocation.
8395        
8396        * VM/CodeGenerator.cpp:
8397        (KJS::CodeGenerator::highestUsedRegister):
8398        * VM/CodeGenerator.h:
8399        * kjs/nodes.cpp:
8400        (KJS::TryNode::emitCode):
8401
84022008-05-29  Steve Falkenburg  <sfalken@apple.com>
8403
8404        Build fix.
8405
8406        * kjs/array_instance.cpp:
8407
84082008-05-29  Alexey Proskuryakov  <ap@webkit.org>
8409
8410        Reviewed by Darin.
8411
8412        https://bugs.webkit.org/show_bug.cgi?id=19294
8413        <rdar://problem/5969062> A crash when iterating over a sparse array backwards.
8414
8415        * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it
8416        doesn't cause a PIC branch.
8417        (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not
8418        preserving class invariants.
8419        (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to
8420        the vector from the map in all code paths.
8421
84222008-05-29  Thiago Macieira  <tjmaciei@trolltech.com>
8423
8424        Reviewed by Simon.
8425
8426        Fix compilation in Solaris with Sun CC
8427
8428        Lots of WebKit code uses C99 functions that, strict as it
8429        is, the Solaris system doesn't provide in C++. So we must define them
8430        for both GCC and the Sun CC.
8431
8432        * wtf/MathExtras.h:
8433
84342008-05-28  Oliver Hunt  <oliver@apple.com>
8435
8436        Reviewed by Anders.
8437
8438        Fix codegen for assignment being used as a function.
8439
8440        FunctionCallValueNode::emitCode failed to account for the
8441        potential of the function expression to allocate arbitrary
8442        registers.
8443
8444        * kjs/nodes.cpp:
8445        (KJS::FunctionCallValueNode::emitCode):
8446
84472008-05-27  Geoffrey Garen  <ggaren@apple.com>
8448
8449        Reviewed by Tim Hatcher.
8450
8451        Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
8452        REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
8453        clicking button in returnEvent-crash.html
8454
8455        Added two new debugger hooks, willExecuteProgram and didExecuteProgram,
8456        along with code to generate them, code to invoke them when unwinding
8457        due to an exception, and code to dump them.
8458        
8459        SunSpider reports no change.
8460
8461        * VM/CodeBlock.cpp:
8462        (KJS::debugHookName): I had to mark this function NEVER_INLINE to avoid
8463        a .4% performance regression. The mind boggles.
8464
84652008-05-28  Adam Roben  <aroben@apple.com>
8466
8467        Fix JavaScriptCore tests on OS X
8468
8469        We were quoting the path to testkjs too late, after it had already
8470        been combined with spaces and other options.
8471
8472        * tests/mozilla/jsDriver.pl:
8473        (top level): Move path quoting from here...
8474        (sub get_kjs_engine_command): ...to here.
8475
84762008-05-28  Anders Carlsson  <andersca@apple.com>
8477
8478        Reviewed by Oliver.
8479
8480        <rdar://problem/5968071> "const f" crashes in JavaScriptCore
8481        
8482        Make sure to null check the initializer.
8483        
8484        * kjs/nodes.cpp:
8485        (KJS::ConstDeclNode::emitCodeSingle):
8486
84872008-05-28  Adam Roben  <aroben@apple.com>
8488
8489        Make run-javascriptcore-tests work with a space in the path to testkjs
8490
8491        Reviewed by Alexey Proskuryakov.
8492
8493        * tests/mozilla/jsDriver.pl: Quote the path to the engine so that
8494        spaces will be interpreted correctly.
8495
84962008-05-28  Alexey Proskuryakov  <ap@webkit.org>
8497
8498        Fixed a misguiding comment - my measurement for negative numbers only included cases
8499        where both operands were negative, which is not very interesting.
8500
8501        * VM/Machine.cpp:
8502
85032008-05-28  Alexey Proskuryakov  <ap@webkit.org>
8504
8505        Reviewed by Maciej.
8506
8507        Based on a patch by Oliver Hunt.
8508
8509        https://bugs.webkit.org/show_bug.cgi?id=19180
8510        speed up SunSpider by optimizing immediate number cases
8511
8512        1.4% speedup on SunSpider.
8513
8514        * VM/Machine.cpp:
8515        (KJS::Machine::privateExecute):
8516        * kjs/JSImmediate.h:
8517        (KJS::JSImmediate::incImmediateNumber):
8518        (KJS::JSImmediate::decImmediateNumber):
8519        Added fast paths for ++ and --.
8520
8521        (KJS::JSImmediate::canDoFastAdditiveOperations): Corrected a comment.
8522
85232008-05-28  Alexey Proskuryakov  <ap@webkit.org>
8524
8525        Reviewed by Darin.
8526
8527        https://bugs.webkit.org/show_bug.cgi?id=19180
8528        speed up SunSpider by optimizing immediate number cases
8529
8530        2% speedup overall, maximum 10% on controlflow-recursive and bitops-3bit-bits-in-byte,
8531        but a 4% regression on bitops-bits-in-byte and bitops-bitwise-and.
8532
8533        * kjs/JSImmediate.h:
8534        (KJS::JSImmediate::canDoFastAdditiveOperations):
8535        (KJS::JSImmediate::addImmediateNumbers):
8536        (KJS::JSImmediate::subImmediateNumbers):
8537        Added fast cases that work with positive values less than 2^30.
8538
8539        * VM/Machine.cpp:
8540        (KJS::Machine::privateExecute): Use the above operations. Also updated SunSpider frequencies
8541        with my results (looks like tag values have changed, not sure what caused the minor variation
8542        in actual frequencies).
8543
85442008-05-27  Adam Roben  <aroben@apple.com>
8545
8546        Windows build fix
8547
8548        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
8549        Remove code that appended Cygwin's /bin directory to PATH.
8550        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
8551        Prepend Cygwin's /bin directory to PATH. We prepend instead of append
8552        so that Cygwin's utilities will win out over Win32 versions of the
8553        same utilities (particularly perl). We do the prepend here instead of
8554        in the Makefile because nmake doesn't seem to like prepending to PATH
8555        inside the Makefile. This also matches the way WebCoreGenerated works.
8556
85572008-05-27  Adam Roben  <aroben@apple.com>
8558
8559        Roll out r34163
8560
8561        A better fix is on the way.
8562
8563        * DerivedSources.make:
8564        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
8565
85662008-05-27  Adam Roben  <aroben@apple.com>
8567
8568        Windows build fix
8569
8570        * DerivedSources.make: Don't generate the bytecode docs if
8571        OMIT_BYTECODE_DOCS is set to 1.
8572        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Set
8573        OMIT_BYTECODE_DOCS for production builds.
8574
85752008-05-27  Anders Carlsson  <andersca@apple.com>
8576
8577        Reviewed by Geoff and Maciej.
8578
8579        <rdar://problem/5806428> 
8580        https://bugs.webkit.org/show_bug.cgi?id=17925
8581        Crash in KJS::JSObject::put after setting this.__proto__
8582
8583        Set slotIsWriteable to false for __proto__, we want setting __proto__ to go through JSObject::put instead.
8584        
8585        * kjs/object.h:
8586        (KJS::JSObject::getOwnPropertySlotForWrite):
8587
85882008-05-27  Kevin Ollivier  <kevino@theolliviers.com>
8589
8590        wx build fixes to catch up with SquirrelFish, etc.
8591
8592        * JavaScriptCoreSources.bkl:
8593        * jscore.bkl:
8594        * wtf/Platform.h:
8595
85962008-05-27  Darin Adler  <darin@apple.com>
8597
8598        Reviewed by Tim Hatcher.
8599
8600        - https://bugs.webkit.org/show_bug.cgi?id=19180
8601          speed up SunSpider by optimizing immediate number cases
8602
8603        Add immediate number cases for the &, |, and ^ operators.
8604        Makes standalone SunSpider 1.010x faster.
8605
8606        * VM/Machine.cpp:
8607        (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases
8608        for the &, |, and ^ operators.
8609
8610        * kjs/JSImmediate.h:
8611        (KJS::JSImmediate::xorImmediateNumbers): Added.
8612        (KJS::JSImmediate::orImmediateNumbers): Added.
8613
86142008-05-26  Stephanie Lewis  <slewis@apple.com>
8615
8616        Windows build fix. 
8617
8618        * kjs/testkjs.cpp:
8619
86202008-05-26  Maciej Stachowiak  <mjs@apple.com>
8621
8622        Reviewed by Anders.
8623        
8624        - make addStaticGlobals protected instead of private so subclasses can use it
8625
8626        * JavaScriptCore.exp:
8627        * kjs/JSGlobalObject.h:
8628
86292008-05-26  Geoffrey Garen  <ggaren@apple.com>
8630
8631        Reviewed by Darin Adler.
8632        
8633        Fixed <rdar://problem/5960859> After an eval of a non-string or a syntax
8634        error, all profile stack frames are incorrect
8635        
8636        SunSpider reports a .3% speedup, possibly because eval of a string is a
8637        little more efficient now.
8638
8639        * VM/Machine.cpp:
8640        (KJS::callEval): Make sure to call didExecute when returning early. I
8641        simplified this function to remove one early return, making the job
8642        of adding special code to early returns easier.
8643
8644        (KJS::Machine::execute): Use the new function ExecState when notifying
8645        the profiler. (This doesn't change behavior now, but it might prevent
8646        subtle errors in the future.)
8647
86482008-05-23  Tor Arne Vestbø  <tavestbo@trolltech.com>
8649
8650        Reviewed by Simon.
8651
8652        Fixed toLower and toUpper implementations to allow being called
8653        with a null result pointer and resultLength, to determine the
8654        number of characters needed for the case conversion.
8655
8656        * wtf/unicode/qt4/UnicodeQt4.h:
8657        (WTF::Unicode::toLower):
8658        (WTF::Unicode::toUpper):
8659
86602008-05-25  Alexey Proskuryakov  <ap@webkit.org>
8661
8662        Fixing a typo in the previous commit made as a last minute change.
8663
8664        * kjs/regexp_object.cpp:
8665
86662008-05-24  Alexey Proskuryakov  <ap@webkit.org>
8667
8668        Reviewed by Darin.
8669
8670        Changed regular expression matching result array to be lazily filled, because many callers
8671        only care about it being non-null.
8672
8673        2% improvement on Acid3 test 26.
8674
8675        * kjs/array_instance.cpp: Added a void* member to ArrayStorage for ArrayInstance subclasses
8676        to use.
8677        * kjs/array_instance.h:
8678        (KJS::ArrayInstance::lazyCreationData):
8679        (KJS::ArrayInstance::setLazyCreationData):
8680        Added methods to access it from subclasses.
8681
8682        * kjs/regexp_object.cpp:
8683        (KJS::RegExpMatchesArray::RegExpMatchesArray):
8684        (KJS::RegExpMatchesArray::getOwnPropertySlot):
8685        (KJS::RegExpMatchesArray::put):
8686        (KJS::RegExpMatchesArray::deleteProperty):
8687        (KJS::RegExpMatchesArray::getPropertyNames):
8688        (KJS::RegExpMatchesArray::fillArrayInstanceIfNeeded):
8689        (KJS::RegExpMatchesArray::~RegExpMatchesArray):
8690        (KJS::RegExpObjectImp::arrayOfMatches):
8691        RegExpMatchesArray is a subclass of ArrayInstance that isn't filled until
8692        accessed for the first time.
8693
86942008-05-24  Alp Toker  <alp@nuanti.com>
8695
8696        Win32/gcc build fix. Remove MSVC assumption.
8697
8698        * wtf/TCSpinLock.h:
8699        (TCMalloc_SlowLock):
8700
87012008-05-24  Oleg Finkelshteyn <olegfink@gmail.com>
8702
8703        Rubber-stamped, tweaked and landed by Alexey.
8704
8705        Build fix for gcc 4.3.
8706
8707        * JavaScriptCore/kjs/testkjs.cpp:
8708        * JavaScriptCore/VM/CodeBlock.cpp:
8709        Add missing standard includes.
8710
87112008-05-23  Anders Carlsson  <andersca@apple.com>
8712
8713        Reviewed by Geoff.
8714
8715        <rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217)
8716        
8717        Change List to store a JSValue*** pointer + an offset instead of a JSValue** pointer to protect against the case where 
8718        a register file changes while a list object points to its buffer.
8719        
8720        * VM/Machine.cpp:
8721        (KJS::Machine::privateExecute):
8722        * kjs/JSActivation.cpp:
8723        (KJS::JSActivation::createArgumentsObject):
8724        * kjs/list.cpp:
8725        (KJS::List::getSlice):
8726        * kjs/list.h:
8727        (KJS::List::List):
8728        (KJS::List::at):
8729        (KJS::List::append):
8730        (KJS::List::begin):
8731        (KJS::List::end):
8732        (KJS::List::buffer):
8733
87342008-05-23  Kevin McCullough  <kmccullough@apple.com>
8735
8736        Reviewed by Sam.
8737
8738        <rdar://problem/5960012> JSProfiler: Stack overflow if recursion is
8739        too deep.
8740        -Use a simple depth limit to restrict too deep of recursion.
8741
8742        * profiler/Profile.cpp:
8743        (KJS::Profile::willExecute):
8744        (KJS::Profile::didExecute):
8745        * profiler/Profile.h:
8746
87472008-05-23  Geoffrey Garen  <ggaren@apple.com>
8748
8749        Rolling back in r34085, with performance resolved.
8750        
8751        Apparently, passing the eval function to callEval gave GCC a hernia.
8752
8753        Reviewed by Darin Adler, Kevin McCullough, and Oliver Hunt.
8754        
8755        Fixed <rdar://problem/5959447> Crashes and incorrect reporting in the
8756        JavaScript profiler
8757
8758        * VM/Machine.cpp:
8759        (KJS::Machine::unwindCallFrame): Fixed incorrect reporting / a crash
8760        when unwinding from inside eval and/or program code: detect the
8761        difference, and do the right thing. Also, be sure to notify the profiler
8762        *before* deref'ing the scope chain, since the profiler uses the scope chain.
8763
8764        (KJS::Machine::execute): Fixed incorrect reporting / crash when calling
8765        a JS function re-entrently: Machine::execute(FunctionBodyNode*...)
8766        should not invoke the didExecute hook, because op_ret already does that.
8767        Also, use the new function's ExecState when calling out to the profiler.
8768        (Not important now, but could have become a subtle bug later.)
8769
8770        (KJS::Machine::privateExecute): Fixed a hard to reproduce crash when
8771        profiling JS functions: notify the profiler *before* deref'ing the scope
8772        chain, since the profiler uses the scope chain.
8773
8774        * kjs/object.cpp:
8775        (KJS::JSObject::call): Removed these hooks, because they are now unnecessary.
8776
8777        * profiler/Profile.cpp: Added a comment to explain a subtlety that only
8778        Kevin and I understood previously. (Now, the whole world can understand!)
8779
8780        * profiler/Profiler.cpp:
8781        (KJS::shouldExcludeFunction): Don't exclude .call and .apply. That was
8782        a hack to fix bugs that no longer exist.
8783
8784        Finally, sped things up a little bit by changing the "Is the profiler
8785        running?" check into an ASSERT, since we only call into the profiler
8786        when it's running:
8787
8788        (KJS::Profiler::willExecute):
8789        (KJS::Profiler::didExecute):
8790
87912008-05-23  Geoffrey Garen  <ggaren@apple.com>
8792
8793        Reviewed by Oliver Hunt.
8794
8795        - fixed <rdar://problem/5957662> REGRESSION(r33943-r33980): Can't send email , attach file or save as draft from hotmail.com
8796        
8797        SunSpider reports no change.
8798        
8799        This is a reworking of r34073, which I rolled out because it caused
8800        lots of crashes.
8801
8802        * VM/CodeGenerator.cpp:
8803        (KJS::CodeGenerator::CodeGenerator): Use removeDirect to nix old
8804        properties whose names collide with new functions. (Don't use putWithAttributes
8805        because that tries to write to the register file, which hasn't grown to
8806        fit this program yet.)
8807
88082008-05-23  Darin Adler  <darin@apple.com>
8809
8810        Reviewed by Mark Rowe.
8811
8812        As allocateNumber is used via jsNumberCell outside of JavaScriptCore,
8813        we need to provide a non-inlined version of it to avoid creating a
8814        weak external symbol.
8815
8816        * JavaScriptCore.exp:
8817        * kjs/AllInOneFile.cpp:
8818        * kjs/collector.cpp:
8819        (KJS::Collector::allocate):
8820        (KJS::Collector::allocateNumber):
8821        * kjs/collector.h:
8822        (KJS::Collector::allocate):
8823        (KJS::Collector::inlineAllocateNumber):
8824        * kjs/value.h:
8825        (KJS::NumberImp::operator new):
8826
88272008-05-23  Geoffrey Garen  <ggaren@apple.com>
8828
8829        Rolled out r34073 because it caused lots of layout test crashes.
8830
88312008-05-23  Geoffrey Garen  <ggaren@apple.com>
8832
8833        Rolled out r34085 because it measured as a 7.6% performance regression.
8834
88352008-05-23  Adam Roben  <aroben@apple.com>
8836
8837        Windows build fix
8838
8839        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add the
8840        profiler directory to the include path.
8841
88422008-05-23  Oliver Hunt  <oliver@apple.com>
8843
8844        Reviewed by Anders.
8845
8846        SQUIRRELFISH: JavaScript error messages are missing informative text
8847
8848        Partial fix.
8849        Tidy up error messages, makes a couple of them provide slightly more info.
8850        Inexplicably leads to a 1% SunSpider Progression.
8851
8852        * VM/ExceptionHelpers.cpp:
8853        (KJS::createError):
8854        (KJS::createInvalidParamError):
8855        (KJS::createNotAConstructorError):
8856        (KJS::createNotAFunctionError):
8857        * VM/ExceptionHelpers.h:
8858        * VM/Machine.cpp:
8859        (KJS::isNotObject):
8860
88612008-05-23  Oliver Hunt  <oliver@apple.com>
8862
8863        Reviewed by Tim H.
8864
8865        Fix call stack reported by profiler when entering event handlers.
8866
8867        JSObject::call was arbitrarily notifying the profiler when it was
8868        called, even if it was JS code, which notifies the profile on entry
8869        in any case.
8870
8871        * kjs/object.cpp:
8872        (KJS::JSObject::call):
8873
88742008-05-16  Alp Toker  <alp@nuanti.com>
8875
8876        Build fix for gcc 3. Default constructor required in ExecState,
8877        used by OldInterpreterExecState.
8878
8879        * kjs/ExecState.h:
8880        (KJS::ExecState::ExecState):
8881
88822008-05-23  Mark Rowe  <mrowe@apple.com>
8883
8884        Reviewed by Oliver Hunt.
8885
8886        Fix <rdar://problem/5954997> global-recursion-on-full-stack.html crashes under guardmalloc.
8887
8888        Growing the register file with uncheckedGrow from within Machine::execute is not safe as the
8889        register file may be too close to its maximum size to grow successfully.  By using grow,
8890        checking the result and throwing a stack overflow error we can avoid crashing.
8891
8892        * VM/Machine.cpp:
8893        (KJS::Machine::execute):
8894        * VM/RegisterFile.h: Remove the now-unused uncheckedGrow.
8895
88962008-05-23  Oliver Hunt  <oliver@apple.com>
8897
8898        RS=Kevin McCullough
8899
8900        Remove JAVASCRIPT_PROFILER define
8901
8902        * VM/Machine.cpp:
8903        (KJS::callEval):
8904        (KJS::Machine::unwindCallFrame):
8905        (KJS::Machine::execute):
8906        (KJS::Machine::privateExecute):
8907        * kjs/config.h:
8908        * kjs/object.cpp:
8909        (KJS::JSObject::call):
8910
89112008-05-23  Oliver Hunt  <oliver@apple.com>
8912
8913       <rdar://problem/5951561> Turn on JavaScript Profiler
8914
8915        Reviewed by Kevin McCullough.
8916
8917        Flipped the switch on the profiler, rearranged how we
8918        signal the the profiler is active so that calls aren't
8919        needed in the general case.
8920        
8921        Also fixed the entry point for Machine::execute(FunctionBodyNode..)
8922        to correctly indicate function exit.
8923
8924        Results in a 0.7-1.0% regression in SunSpider :-(
8925
8926        * VM/Machine.cpp:
8927        (KJS::callEval):
8928        (KJS::Machine::unwindCallFrame):
8929        (KJS::Machine::execute):
8930        (KJS::Machine::privateExecute):
8931        * kjs/config.h:
8932        * profiler/Profiler.cpp:
8933        (KJS::Profiler::profiler):
8934        (KJS::Profiler::startProfiling):
8935        (KJS::Profiler::stopProfiling):
8936        * profiler/Profiler.h:
8937        (KJS::Profiler::enabledProfilerReference):
8938
89392008-05-23  Simon Hausmann  <hausmann@webkit.org>
8940
8941        Fix the Qt build by adding profiler/ to the include search path.
8942
8943        * JavaScriptCore.pri:
8944
89452008-05-22  Kevin McCullough  <kmccullough@apple.com>
8946
8947        Reviewed by Adam.
8948
8949        Fix a bug in the profiler where time in the current function is given to
8950        (idle).
8951
8952        * profiler/Profile.cpp:
8953        (KJS::Profile::didExecute): Set the start time and then call didExecute
8954        to calculate the time spent in this function.
8955        * profiler/ProfileNode.cpp: Remove confusing calculations that are no
8956        longer necessary.
8957        (KJS::ProfileNode::insertNode):
8958        * profiler/ProfileNode.h: Expose access to the start time to allow the
8959        simpler time calculations above.
8960        (KJS::ProfileNode::startTime):
8961        (KJS::ProfileNode::setStartTime):
8962
89632008-05-22  Adam Roben  <aroben@apple.com>
8964
8965        Show "(Function object)" instead of "(JSInpectorCallbackWrapper
8966        object)" in profiles
8967
8968        Reviewed by Kevin McCullough.
8969
8970        * profiler/Profiler.cpp:
8971        (KJS::createCallIdentifier): Use JSObject::className instead of
8972        getting the class name from the ClassInfo directly. JSObject
8973        subclasses can override className to provide a custom class name, and
8974        it seems like we should honor that.
8975
89762008-05-22  Timothy Hatcher  <timothy@apple.com>
8977
8978        Added Profile::restoreAll and added ProfileNode::restoreAll
8979        to the export file.
8980
8981        Reviewed by Adam Roben.
8982
8983        * JavaScriptCore.exp:
8984        * profiler/Profile.h:
8985
89862008-05-22  Alp Toker  <alp@nuanti.com>
8987
8988        GTK+ build fix. Add JavaScriptCore/profiler to include path.
8989
8990        * GNUmakefile.am:
8991
89922008-05-22  Adam Roben  <aroben@apple.com>
8993
8994        Implement sub-millisecond profiling on Windows
8995
8996        Reviewed by Kevin McCullough.
8997
8998        * profiler/ProfileNode.cpp:
8999        (KJS::getCount): Added. On Windows, we use QueryPerformanceCounter. On
9000        other platforms, we use getCurrentUTCTimeWithMicroseconds.
9001        (KJS::ProfileNode::endAndRecordCall): Use getCount instead of
9002        getCurrentUTCTimeWithMicroseconds.
9003        (KJS::ProfileNode::startTimer): Ditto.
9004
90052008-05-22  Adam Roben  <aroben@apple.com>
9006
9007        Fix a profiler assertion when calling a NodeList as a function
9008
9009        Reviewed by Kevin McCullough.
9010
9011        * profiler/Profiler.cpp:
9012        (KJS::createCallIdentifier): Don't assert when a non-function object
9013        is called as a function. Instead, build up a CallIdentifier using the
9014        object's class name.
9015
90162008-05-22  Kevin McCullough  <kmccullough@apple.com>
9017
9018        Reviewed by Darin.
9019
9020        <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a
9021        profile node.
9022        -Implement 'exclude'; where the excluded node attributes its time to its
9023        parent's self time.
9024
9025        * JavaScriptCore.exp: Export the exclude function.
9026        * profiler/Profile.h: 
9027        (KJS::Profile::exclude):
9028        * profiler/ProfileNode.cpp: 
9029        (KJS::ProfileNode::setTreeVisible): New function that allows a change in
9030        visiblitiy to be propogated to all the children of a node.
9031        (KJS::ProfileNode::exclude): If the node matches the callIdentifier then
9032        set the visiblity of this node and all of its children to false and
9033        attribute it's total time to it's caller's self time.
9034        * profiler/ProfileNode.h:
9035
90362008-05-22  Mark Rowe  <mrowe@apple.com>
9037
9038        Reviewed by Oliver Hunt.
9039
9040        Fix access to static global variables in Windows release builds.
9041
9042        * kjs/JSGlobalObject.h: Don't store a reference to an Identifier
9043        in GlobalPropertyInfo as the Identifier is likely to be a temporary
9044        and therefore may be destroyed before the GlobalPropertyInfo.
9045
90462008-05-22  Kevin McCullough  <kmccullough@apple.com>
9047
9048        Build fix.
9049
9050        * VM/Machine.cpp:
9051        (KJS::callEval):
9052
90532008-05-22  Kevin McCullough  <kmccullough@apple.com>
9054
9055        Reviewed by Sam.
9056
9057        <rdar://problem/5951561> Turn on JavaScript Profiler
9058        Get basic JS profiling working.
9059        Even with this patch the profiler will not be compiled in because we do
9060        not know the extend, if any, of the performance regression it would cause
9061        when it is not in use. However with these changes, if the profiler were
9062        on, it would not crash and show good profiling data.
9063
9064        * VM/Machine.cpp: Instrument the calls sites that are needed for profiling.
9065        (KJS::callEval):
9066        (KJS::Machine::unwindCallFrame):
9067        (KJS::Machine::execute):
9068        (KJS::Machine::privateExecute):
9069        * kjs/function.cpp: Ditto.
9070        (KJS::globalFuncEval):
9071        * kjs/interpreter.cpp: Ditto.
9072        (KJS::Interpreter::evaluate):
9073        * profiler/Profile.cpp: 
9074        (KJS::Profile::willExecute):
9075        (KJS::Profile::didExecute): Because we do not get a good context when
9076        startProfiling is called it is possible that m_currentNode will be at the
9077        top of the known stack when a didExecute() is called.  What we then do is
9078        create a new node that represents the function being exited and insert
9079        it between the head and the currently known children, since they should
9080        be children of this new node.
9081        * profiler/ProfileNode.cpp:
9082        (KJS::ProfileNode::ProfileNode):
9083        (KJS::ProfileNode::willExecute): Rename the add function for consistency.
9084        (KJS::ProfileNode::addChild): Appends the child to this node but also
9085        sets the parent pointer of the children to this node.
9086        (KJS::ProfileNode::insertNode): Insert a node between this node and its
9087        children.  Also set the time for the new node since it is now exiting
9088        and we don't really know when it started.
9089        (KJS::ProfileNode::stopProfiling):
9090        (KJS::ProfileNode::startTimer):
9091        * profiler/ProfileNode.h:
9092        (KJS::CallIdentifier::toString): Added for debugging.
9093        (KJS::ProfileNode::setParent):
9094        (KJS::ProfileNode::setSelfTime): Fixed an old bug where we set the
9095        visibleTotalTime not the visibleSelfTime.
9096        (KJS::ProfileNode::children):
9097        (KJS::ProfileNode::toString): Added for debugging.
9098        * profiler/Profiler.cpp: remove unecessary calls.
9099        (KJS::Profiler::startProfiling):
9100
91012008-05-22  Sam Weinig  <sam@webkit.org>
9102
9103        Reviewed by Oliver Hunt.
9104
9105        Rename register arguments for op_call, op_call_eval, op_end, and op_construct 
9106        to document what they are for.
9107
9108        * VM/CodeGenerator.cpp:
9109        (KJS::CodeGenerator::emitCall):
9110        (KJS::CodeGenerator::emitCallEval):
9111        (KJS::CodeGenerator::emitEnd):
9112        (KJS::CodeGenerator::emitConstruct):
9113        * VM/CodeGenerator.h:
9114        * VM/Machine.cpp:
9115        (KJS::Machine::privateExecute):
9116
91172008-05-22  Oliver Hunt  <oliver@apple.com>
9118
9119        Reviewed by Darin.
9120
9121        Bug 19116: SquirrelFish shouldn't regress on variable lookups
9122        <https://bugs.webkit.org/show_bug.cgi?id=19116>
9123
9124        Last of the multiscope look up optimisations.  This is a wash overall on SunSpider
9125        but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
9126        ... applied to any non-local var).
9127
9128        * kjs/nodes.cpp:
9129        (KJS::PostIncResolveNode::emitCode):
9130        (KJS::PostDecResolveNode::emitCode):
9131        (KJS::PreIncResolveNode::emitCode):
9132        (KJS::PreDecResolveNode::emitCode):
9133        (KJS::ReadModifyResolveNode::emitCode):
9134
91352008-05-22  David Kilzer  <ddkilzer@apple.com>
9136
9137        <rdar://problem/5954233> Add method to release free memory from FastMalloc
9138
9139        Patch suggested by Mark Rowe.  Rubber-stamped by Maciej.
9140
9141        * JavaScriptCore.exp: Export _releaseFastMallocFreeMemory.
9142        * wtf/FastMalloc.cpp:
9143        (WTF::TCMallocStats::): Added releaseFastMallocFreeMemory() for both
9144        system malloc and FastMalloc code paths.
9145        * wtf/FastMalloc.h: Define releaseFastMallocFreeMemory().
9146
91472008-05-22  Oliver Hunt  <oliver@apple.com>
9148
9149        RS=Maciej.
9150
9151        Roll out r34020 as it causes recursion tests to fail.
9152
9153        * kjs/object.cpp:
9154        (KJS::JSObject::call):
9155
91562008-05-22  Oliver Hunt  <oliver@apple.com>
9157
9158        Reviewed by Mark.
9159
9160        Don't leak the SymbolTable when compiling eval code.
9161
9162        * kjs/nodes.cpp:
9163        (KJS::EvalNode::generateCode):
9164
91652008-05-22  Simon Hausmann  <hausmann@webkit.org>
9166
9167        Reviewed by Oliver.
9168
9169        Qt build fix.
9170
9171        * JavaScriptCore.pri: Added DebuggerCallFrame to the build.
9172        * VM/LabelID.h: Include limits.h for UINT_MAX.
9173        * wtf/VectorTraits.h: Include memory for std::auto_ptr.
9174
91752008-05-22  Geoffrey Garen  <ggaren@apple.com>
9176
9177        Reviewed by Adam Roben.
9178        
9179        Removed the old recursion guard mechanism, since squirrelfish has its
9180        own mechanism. Also removed some old JS call tracing code, since we
9181        have other ways to do that, too.
9182        
9183        SunSpider reports no change.
9184
9185        * kjs/object.cpp:
9186        (KJS::JSObject::call):
9187
91882008-05-22  Maciej Stachowiak  <mjs@apple.com>
9189
9190        Reviewed by Oliver.
9191        
9192        - fixed <rdar://problem/5954979> crash on celtic kane JS benchmark
9193
9194        * kjs/nodes.cpp:
9195        (KJS::WithNode::emitCode):
9196        (KJS::TryNode::emitCode):
9197
91982008-05-21  Kevin McCullough  <kmccullough@apple.com>
9199
9200        Reviewed by Maciej and Geoff.
9201
9202        <rdar://problem/5951561> Turn on JavaScript Profiler
9203        -As part of the effort to turn on the profiler it would be helpful if it
9204        did not need ExecStates to represent the stack location of the currently
9205        executing statement.
9206        -We now create each node as necessary with a reference to the current
9207        node and each node knows its parent so that the tree can be made without
9208        the entire stack.
9209
9210        * profiler/Profile.cpp:
9211        (KJS::Profile::Profile): The current node starts at the head.
9212        (KJS::Profile::stopProfiling): The current node is cleared when profiling
9213        stops.
9214        (KJS::Profile::willExecute): The current node either adds a new child or
9215        starts and returns a reference to an already existing child if the call
9216        ID that is requested already exists.
9217        (KJS::Profile::didExecute): The current node finishes and returns its
9218        parent.
9219        * profiler/Profile.h: Use a single callIdentifier instead of a vector
9220        since we no longer use the whole stack.
9221        * profiler/ProfileNode.cpp: Now profile nodes keep a reference to their
9222        parent.
9223        (KJS::ProfileNode::ProfileNode): Initialize the parent.
9224        (KJS::ProfileNode::didExecute): Record the time and return the parent.
9225        (KJS::ProfileNode::addOrStartChild): If the given callIdentifier is
9226        already a child, start it and return it, otherwise create a new one and
9227        return that.
9228        (KJS::ProfileNode::stopProfiling): Same logic, just use the new function.
9229        * profiler/ProfileNode.h: Utilize the parent.
9230        (KJS::ProfileNode::create):
9231        (KJS::ProfileNode::parent):
9232        * profiler/Profiler.cpp: 
9233        (KJS::Profiler::startProfiling): Here is the only place where the
9234        ExecState is used to figure out where in the stack the profiler is
9235        currently profiling.
9236        (KJS::dispatchFunctionToProfiles): Only send one CallIdentifier instead
9237        of a vector of them.
9238        (KJS::Profiler::willExecute): Ditto.
9239        (KJS::Profiler::didExecute): Ditto.
9240        (KJS::createCallIdentifier): Create only one CallIdentifier.
9241        (KJS::createCallIdentifierFromFunctionImp): Ditto.
9242        * profiler/Profiler.h:
9243
92442008-05-21  Darin Adler  <darin@apple.com>
9245
9246        Reviewed by Maciej.
9247
9248        - https://bugs.webkit.org/show_bug.cgi?id=19180
9249          speed up the < operator for the case when both values are integers
9250
9251        Makes standalone SunSpider 1.022x faster.
9252
9253        * VM/Machine.cpp:
9254        (KJS::jsLess): Add a special case for when both are numbers that fit in a JSImmediate.
9255
92562008-05-21  Maciej Stachowiak  <mjs@apple.com>
9257
9258        Reviewed by Oliver and Sam.
9259        
9260        - fixed <rdar://problem/5815631> REGRESSION (r31239): Multiscope optimisation of function calls results in incorrect this value (breaks tvtv.de)
9261        
9262        Track global this value in the scope chain so we can retrieve it
9263        efficiently but it follows lexical scope properly.
9264
9265        * kjs/ExecState.h:
9266        (KJS::ExecState::globalThisValue):
9267        * kjs/JSGlobalObject.h:
9268        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
9269        * kjs/function_object.cpp:
9270        (KJS::FunctionObjectImp::construct):
9271        * kjs/scope_chain.h:
9272        (KJS::ScopeChainNode::ScopeChainNode):
9273        (KJS::ScopeChainNode::globalThisObject):
9274        (KJS::ScopeChainNode::push):
9275        (KJS::ScopeChain::ScopeChain):
9276
92772008-05-21  Kevin McCullough  <kmccullough@apple.com>
9278
9279        Sadness :(
9280
9281        * kjs/config.h:
9282
92832008-05-21  Kevin McCullough  <kmccullough@apple.com>
9284
9285        Reviewed by Maciej.
9286
9287        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
9288        profile node.
9289        - This patch updatest the times of the visible nodes correctly, but to do
9290        so, some of the design of the ProfileNode changed.
9291
9292        * JavaScriptCore.exp: export focus' symbol.
9293        * profiler/Profile.cpp: ProfileNodes now take a reference to the head of
9294        the profile tree to get up-to-date accurate total profile time.
9295        (KJS::Profile::Profile): Pass 0 for the head node.
9296        (KJS::Profile::stopProfiling): stopProfiling no longer needs the time
9297        passed into it, since it can get it from the head and it does not need to
9298        be told it is the head because it can figure it out on it's own.
9299        (KJS::Profile::willExecute): Set the head node for each created node.
9300        * profiler/Profile.h:
9301        (KJS::Profile::focus): Instead of taking a CallIdentifier that the caller
9302        would have to create, now focus() takes a ProfileNode that they should
9303        already have a reference to and focus() can extract the CallIdentifier
9304        from it.
9305        * profiler/ProfileNode.cpp: Create actual and visible versions fo the
9306        total and self times for focus and exclude.  Also add a head node
9307        reference so that nodes can get information from their head.
9308        (KJS::ProfileNode::ProfileNode):
9309        (KJS::ProfileNode::stopProfiling): Rename the total and self time
9310        variables and set the visual ones to the actual ones, so that without any
9311        changes to the visual versions of these variables, their times will match
9312        the actual times.
9313        (KJS::ProfileNode::focus): Now focus() has a bool to force it's children
9314        to be visible if this node is visible.  If this node does not match the
9315        CallIdentifier being focused then the visibleTotalTime is only updated if
9316        one or more of it's children is the CallIdentifier being focused. 
9317        (KJS::ProfileNode::restoreAll): Restores all variables with respect to
9318        the visible data in the ProfileNode.
9319        (KJS::ProfileNode::endAndRecordCall): Name change.
9320        (KJS::ProfileNode::debugPrintData): Dump the new variables.
9321        (KJS::ProfileNode::debugPrintDataSampleStyle): Name change.
9322        * profiler/ProfileNode.h: Use the new variables and reference to the head
9323        node.
9324        (KJS::ProfileNode::create):
9325        (KJS::ProfileNode::totalTime):
9326        (KJS::ProfileNode::setTotalTime):
9327        (KJS::ProfileNode::selfTime):
9328        (KJS::ProfileNode::setSelfTime):
9329        (KJS::ProfileNode::totalPercent):
9330        (KJS::ProfileNode::selfPercent):
9331        (KJS::ProfileNode::setVisible):
9332
93332008-05-21  Alp Toker  <alp@nuanti.com>
9334
9335        GTK+/UNIX testkjs build fix. Include signal.h.
9336
9337        * kjs/testkjs.cpp:
9338
93392008-05-21  Oliver Hunt  <oliver@apple.com>
9340
9341        Yet more windows build fixes
9342
9343        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9344
93452008-05-21  Oliver Hunt  <oliver@apple.com>
9346
9347        Yet more windows build fixes
9348
9349        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9350
93512008-05-21  Alp Toker  <alp@nuanti.com>
9352
9353        GTK+ build fix. Add DebuggerCallFrame.cpp and take AllInOneFile.cpp
9354        changes into account.
9355
9356        * GNUmakefile.am:
9357
93582008-05-21  Oliver Hunt  <oliver@apple.com>
9359
9360        Add DebuggerCallFrame.{h,cpp} to the project file
9361
9362        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9363
93642008-05-21  Alp Toker  <alp@nuanti.com>
9365
9366        GTK+ port build fixes following squirrelfish merge r33979.
9367
9368        * GNUmakefile.am:
9369
93702008-05-21  Maciej Stachowiak  <mjs@apple.com>
9371
9372        Reviewed by Darin.
9373        
9374        - save a hash lookup wne writing to global properties
9375        0.3% speedup on SunSpider, 7% on bitops-bitwise-and
9376
9377        * VM/Machine.cpp:
9378        (KJS::resolveBase): Check for being a the end of the scope chain
9379        before hash lookup.
9380
93812008-05-21  Alp Toker  <alp@nuanti.com>
9382
9383        Rubber-stamped by Maciej.
9384
9385        Replace non-standard #pragma marks with comments to avoid compiler
9386        warnings.
9387
9388        * profiler/ProfileNode.cpp:
9389
93902008-05-21  Geoffrey Garen  <ggaren@apple.com>
9391
9392        Reviewed by Mark Rowe.
9393
9394        Fix layout test failure in fast/dom/getter-on-window-object2 introduced in r33961.
9395
9396        * JavaScriptCore.exp:
9397        * kjs/JSGlobalObject.cpp:
9398        (KJS::JSGlobalObject::defineGetter):
9399        (KJS::JSGlobalObject::defineSetter):
9400        * kjs/JSGlobalObject.h:
9401
9402=== End merge of squirrelfish ===
9403
94042008-05-21  Geoffrey Garen  <ggaren@apple.com>
9405
9406        Reviewed by Tim Hatcher.
9407        
9408        Merged with trunk WebCore's new debugger.
9409
9410        * kjs/DebuggerCallFrame.cpp:
9411        (KJS::DebuggerCallFrame::evaluate): Changed this function to separate
9412        the exception value from the return value. The WebKit debugger treats
9413        them as one, but the WebCore debugger doesn't.
9414
9415        * kjs/DebuggerCallFrame.h:
9416        (KJS::DebuggerCallFrame::dynamicGlobalObject): Added a new accessor for
9417        the dynamic global object, since the debugger doesn't want the lexical
9418        global object.
9419
94202008-05-21  Oliver Hunt  <oliver@apple.com>
9421
9422        Reviewed by Maciej.
9423
9424        Bug 19116: SquirrelFish shouldn't regress on variable lookups
9425        <https://bugs.webkit.org/show_bug.cgi?id=19116>
9426
9427        Optimise cross scope assignment, 0.4% progression in sunspider.
9428
9429        * VM/CodeBlock.cpp:
9430        (KJS::CodeBlock::dump):
9431        * VM/CodeGenerator.cpp:
9432        (KJS::CodeGenerator::emitPutScopedVar):
9433        * VM/CodeGenerator.h:
9434        * VM/Machine.cpp:
9435        (KJS::Machine::privateExecute):
9436        * VM/Opcode.h:
9437        * kjs/nodes.cpp:
9438        (KJS::AssignResolveNode::emitCode):
9439
94402008-05-21  Maciej Stachowiak  <mjs@apple.com>
9441
9442        Reviewed by Oliver.
9443        
9444        - check property map before symbol table in JSGlobalObject::getOwnPropertySlot
9445        0.5% speedup on SunSpider
9446
9447        * kjs/JSGlobalObject.h:
9448        (KJS::JSGlobalObject::getOwnPropertySlot): Check property map before symbol table
9449        because symbol table access is likely to have been optimized.
9450
94512008-05-21  Oliver Hunt  <oliver@apple.com>
9452
9453        Reviewed by Maciej.
9454
9455        Bug 19116: SquirrelFish shouldn't regress on variable lookups
9456        <https://bugs.webkit.org/show_bug.cgi?id=19116>
9457
9458        Optimise multiscope lookup of statically resolvable function calls.
9459        SunSpider reports a 1.5% improvement, including 37% on 
9460        controlflow-recursive for some reason :D
9461
9462        * VM/CodeBlock.cpp:
9463        (KJS::CodeBlock::dump):
9464        * VM/CodeGenerator.cpp:
9465        (KJS::CodeGenerator::emitResolve):
9466        * VM/CodeGenerator.h:
9467        * kjs/nodes.cpp:
9468        (KJS::FunctionCallResolveNode::emitCode):
9469
94702008-05-21  Maciej Stachowiak  <mjs@apple.com>
9471
9472        Reviewed by Oliver.
9473        
9474        - give JSGlobalObject a special version of getOwnPropertySlot that tells you if the slot is directly writable
9475        (WebCore change using this is a 2.6% speedup on in-browser SunSpider).
9476
9477        * JavaScriptCore.exp:
9478        * kjs/JSGlobalObject.h:
9479        (KJS::JSGlobalObject::getOwnPropertySlot):
9480        * kjs/JSVariableObject.h:
9481        (KJS::JSVariableObject::symbolTableGet):
9482        * kjs/object.h:
9483        (KJS::JSObject::getDirectLocation):
9484        (KJS::JSObject::getOwnPropertySlotForWrite):
9485        * kjs/property_map.cpp:
9486        (KJS::PropertyMap::getLocation):
9487        * kjs/property_map.h:
9488        * kjs/property_slot.h:
9489        (KJS::PropertySlot::putValue):
9490
94912008-05-20  Oliver Hunt  <oliver@apple.com>
9492
9493        Reviewed by Maciej.
9494
9495        Bug 19116: SquirrelFish shouldn't regress on variable lookups
9496        <https://bugs.webkit.org/show_bug.cgi?id=19116>
9497
9498        This restores multiscope optimisation to simple resolve, producing
9499        a 2.6% progression in SunSpider.  Have verified that none of the
9500        sites broken by the multiscope optimisation in trunk were effected
9501        by this change.
9502
9503        * VM/CodeBlock.cpp:
9504        (KJS::CodeBlock::dump):
9505        * VM/CodeBlock.h:
9506        (KJS::CodeBlock::CodeBlock):
9507        * VM/CodeGenerator.cpp:
9508        (KJS::CodeGenerator::findScopedProperty):
9509        (KJS::CodeGenerator::emitResolve):
9510        * VM/CodeGenerator.h:
9511        * VM/Machine.cpp:
9512        (KJS::resolve_n):
9513        (KJS::Machine::privateExecute):
9514        * VM/Opcode.h:
9515        * kjs/JSVariableObject.h:
9516
95172008-05-20  Oliver Hunt  <oliver@apple.com>
9518
9519        Fixerate the windows build.
9520
9521        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9522        * VM/CodeGenerator.cpp:
9523        * VM/RegisterFile.h:
9524        * kjs/JSGlobalObject.h:
9525        * kjs/Parser.cpp:
9526        * kjs/interpreter.h:
9527
95282008-05-20  Oliver Hunt  <oliver@apple.com>
9529
9530        Reviewed by Geoff.
9531
9532        Bug 19110: SquirrelFish: Google Maps - no maps
9533        <https://bugs.webkit.org/show_bug.cgi?id=19110>
9534
9535        Correct a comedy of errors present in my original patch to "fix"
9536        exceptions occurring midway through pre and post increment. This
9537        solution is cleaner than the original, doesn't need the additional
9538        opcodes, and as an added benefit does not break Google Maps.
9539
9540        Sunspider reports a 0.4% progression.
9541
9542        * VM/CodeBlock.cpp:
9543        (KJS::CodeBlock::dump):
9544        * VM/CodeGenerator.cpp:
9545        * VM/CodeGenerator.h:
9546        * VM/Machine.cpp:
9547        (KJS::Machine::privateExecute):
9548        * VM/Opcode.h:
9549        * kjs/nodes.cpp:
9550        (KJS::PreIncResolveNode::emitCode):
9551        (KJS::PreDecResolveNode::emitCode):
9552        (KJS::PreIncBracketNode::emitCode):
9553        (KJS::PreDecBracketNode::emitCode):
9554        (KJS::PreIncDotNode::emitCode):
9555        (KJS::PreDecDotNode::emitCode):
9556
95572008-05-20  Maciej Stachowiak  <mjs@apple.com>
9558
9559        Reviewed by Oliver.
9560        
9561        - inline JSGlobalObject::getOwnPropertySlot
9562        1% improvement on in-browser SunSpider (a wash command-line)
9563
9564        * kjs/JSGlobalObject.cpp:
9565        * kjs/JSGlobalObject.h:
9566        (KJS::JSGlobalObject::getOwnPropertySlot):
9567
95682008-05-18  Oliver Hunt  <oliver@apple.com>
9569
9570        Reviewed by Maciej.
9571
9572        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
9573        <https://bugs.webkit.org/show_bug.cgi?id=18752>
9574
9575        Handle exceptions thrown by toString conversion in subscript operators,
9576        this should basically complete exception handling in SquirrelFish.
9577
9578        Sunspider reports no regression.
9579
9580        * VM/Machine.cpp:
9581        (KJS::Machine::privateExecute):
9582
95832008-05-17  Geoffrey Garen  <ggaren@apple.com>
9584
9585        Reviewed by Oliver Hunt.
9586
9587        [Reapplying patch with previously missing files from r33553 -- Oliver]
9588
9589        Behold: debugging.
9590        
9591        SunSpider reports no change.
9592
9593        * JavaScriptCore.xcodeproj/project.pbxproj: Added DebuggerCallFrame.h/.cpp,
9594        and created a debugger folder.
9595
9596        * VM/CodeGenerator.cpp:
9597        (KJS::CodeGenerator::generate): If the debugger is attached, always
9598        generate full scope chains for its sake.
9599
9600        * VM/Machine.cpp:
9601        (KJS::Machine::unwindCallFrame): Notify the debugger when unwinding
9602        due to an exception, so it doesn't keep stale call frames around.
9603
9604        (KJS::Machine::execute): Set Callee to 0 in eval frames, so the
9605        debugger can distinguish them from function call frames.
9606
9607        (KJS::Machine::debug): Simplified this function, since the debugger
9608        doesn't actually need all the information we used to provide.
9609
9610        (KJS::Machine::privateExecute): Treat debugging hooks like other function
9611        calls, so the code we hook into (the debugger UI) can be optimized.
9612
9613        * kjs/debugger.cpp: Nixed these default callback implementations and
9614        made the callbacks pure virtual instead, so the compiler could tell me
9615        if I made a mistake in one of the subclasses.
9616
9617        * kjs/debugger.h: Removed a bunch of irrelevent data from the debugger
9618        callbacks. Changed from passing an ExecState* to passing a
9619        DebuggerCallFrame*, since an ExecState* doesn't contain sufficient
9620        information anymore.
9621
9622        * kjs/function.cpp:
9623        (KJS::globalFuncEval): Easiest bug fix evar!
9624
9625        [Previously missing files from r33553]
9626        * kjs/DebuggerCallFrame.cpp: Copied from JavaScriptCore/profiler/FunctionCallProfile.h.
9627        (KJS::DebuggerCallFrame::functionName):
9628        (KJS::DebuggerCallFrame::thisObject):
9629        (KJS::DebuggerCallFrame::evaluateScript):
9630        * kjs/DebuggerCallFrame.h: Copied from JavaScriptCore/VM/Register.h.
9631        (KJS::DebuggerCallFrame::DebuggerCallFrame):
9632        (KJS::DebuggerCallFrame::scopeChain):
9633        (KJS::DebuggerCallFrame::exception):
9634
96352008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9636
9637        Reviewed by Oliver.
9638
9639        Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
9640        <https://bugs.webkit.org/show_bug.cgi?id=18991>
9641
9642        Fix the last remaining blocking cases of this bug.
9643
9644        * kjs/grammar.y:
9645        * kjs/nodes.cpp:
9646        (KJS::ReadModifyResolveNode::emitCode):
9647
96482008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9649
9650        Reviewed by Oliver.
9651
9652        Partial fix for:
9653
9654        Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
9655        <https://bugs.webkit.org/show_bug.cgi?id=18991>
9656
9657        Ensure that the code generated for assignments uses temporaries whenever
9658        necessary. This patch covers the vast majority of situations, but there
9659        are still a few left.
9660
9661        This patch also adds some missing cases to CodeBlock::dump().
9662
9663        * VM/CodeBlock.cpp:
9664        (KJS::CodeBlock::dump):
9665        * VM/CodeGenerator.h:
9666        (KJS::CodeGenerator::destinationForAssignResult):
9667        (KJS::CodeGenerator::leftHandSideNeedsCopy):
9668        (KJS::CodeGenerator::emitNodeForLeftHandSide):
9669        * kjs/NodeInfo.h:
9670        * kjs/grammar.y:
9671        * kjs/nodes.cpp:
9672        (KJS::AssignDotNode::emitCode):
9673        (KJS::ReadModifyDotNode::emitCode):
9674        (KJS::AssignBracketNode::emitCode):
9675        (KJS::ReadModifyBracketNode::emitCode):
9676        (KJS::ForInNode::ForInNode):
9677        * kjs/nodes.h:
9678        (KJS::ReadModifyResolveNode::):
9679        (KJS::AssignResolveNode::):
9680        (KJS::ReadModifyBracketNode::):
9681        (KJS::AssignBracketNode::):
9682        (KJS::AssignDotNode::):
9683        (KJS::ReadModifyDotNode::):
9684
96852008-05-17  Oliver Hunt  <oliver@apple.com>
9686
9687        Reviewed by Maciej.
9688
9689        Bug 19106: SquirrelFish: Activation is not marked correctly
9690        <https://bugs.webkit.org/show_bug.cgi?id=19106>
9691
9692        We can't rely on the symbol table for a count of the number of globals
9693        we need to mark as that misses duplicate parameters and 'this'.  Now we
9694        use the actual local register count from the codeBlock.
9695
9696        * kjs/JSActivation.cpp:
9697        (KJS::JSActivation::mark):
9698
96992008-05-16  Oliver Hunt  <oliver@apple.com>
9700
9701        Reviewed by Geoff.
9702
9703        Bug 19076: SquirrelFish: RegisterFile can be corrupted if implictly reenter global scope with no declared vars
9704        <https://bugs.webkit.org/show_bug.cgi?id=19076>
9705
9706        Don't delay allocation of initial global RegisterFile, as we can't guarantee we will be able
9707        to allocate the global 'this' register safely at any point after initialisation of the Global
9708        Object.
9709
9710        Unfortunately this initial allocation caused a regression of 0.2-0.3%, however this patch adds
9711        support for the static slot optimisation for the global Math object which brings it to a 0.3%
9712        progression.
9713
9714        * VM/CodeGenerator.cpp:
9715        (KJS::CodeGenerator::programCodeThis):
9716        (KJS::CodeGenerator::CodeGenerator):
9717        (KJS::CodeGenerator::addParameter):
9718        * VM/CodeGenerator.h:
9719        * VM/Machine.cpp:
9720        (KJS::Machine::execute):
9721        * kjs/ExecState.h:
9722        * kjs/JSGlobalObject.cpp:
9723        (KJS::JSGlobalObject::reset):
9724        * kjs/JSGlobalObject.h:
9725        (KJS::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
9726        (KJS::JSGlobalObject::addStaticGlobals):
9727        * kjs/nodes.cpp:
9728
97292008-05-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9730
9731        Reviewed by Oliver Hunt.
9732
9733        Bug 19098: SquirrelFish: Ref'd temporaries can be clobbered
9734        <https://bugs.webkit.org/show_bug.cgi?id=19098>
9735
9736        When doing code generation for a statement list, increase the reference
9737        count on a register that might eventually be returned, so that it doesn't
9738        get clobbered by a request for a new temporary.
9739
9740        * kjs/nodes.cpp:
9741        (KJS::statementListEmitCode):
9742
97432008-05-16  Maciej Stachowiak  <mjs@apple.com>
9744
9745        Reviewed by Oliver.
9746        
9747        - fixed Bug 19044: SquirrelFish: Bogus values enter evaluation when closing over scope with parameter and var with same name
9748        https://bugs.webkit.org/show_bug.cgi?id=19044
9749
9750        * kjs/JSActivation.cpp:
9751        (KJS::JSActivation::copyRegisters): Use numLocals from the code
9752        block rather than the size of the symbol table for the number of
9753        registers to copy, to account for duplicate parameters and vars
9754        with the same name as parameters (we still have potentially
9755        suboptimal codegen in that we allocate a local register for the
9756        var in the latter case but it is never used).
9757        
97582008-05-15  Geoffrey Garen  <ggaren@apple.com>
9759
9760        Not reviewed.
9761        
9762        We regret to inform you that your program is crashing because you were
9763        stupid.
9764
9765        * VM/Machine.cpp:
9766        (KJS::Machine::privateExecute): Math is hard.
9767
97682008-05-14  Geoffrey Garen  <ggaren@apple.com>
9769
9770        Reviewed by Oliver Hunt.
9771
9772        A little more debugger action: filled in op_debug. All debugger control
9773        flow works now, but variable inspection and backtraces still don't.
9774        
9775        SunSpider reports no change.
9776
9777        * VM/CodeGenerator.cpp: Changed op_debug to accept line number parameters.
9778
9779        * VM/Machine.cpp:
9780        (KJS::Machine::getFunctionAndArguments): Moved op_debug into a
9781        NEVER_INLINE function to avoid a stunning 10% performance regression.
9782        Also factored out a common function for retrieving the function and 
9783        arguments from a  call frame. 
9784
9785        * kjs/JSActivation.cpp:
9786        (KJS::JSActivation::createArgumentsObject): Use the new factored out
9787        function mentioned above.
9788
9789        * kjs/Parser.cpp:
9790        (KJS::Parser::parse): Increment m_sourceId before assigning it, so the
9791        sourceId we send to the debugger matches the sourceId recorded in the
9792        node.
9793
9794        * kjs/nodes.cpp: Emit debugging hooks.
9795
97962008-05-14  Oliver Hunt  <oliver@apple.com>
9797
9798        Reviewed by Maciej.
9799
9800        Bug 19024: SQUIRRELFISH: ASSERTION FAILED: activation->isActivationObject() in Machine::unwindCallFrame
9801        <https://bugs.webkit.org/show_bug.cgi?id=19024>
9802
9803        This fixes a number of issues.  The most important is that we now check every register
9804        file for tainting rather than just looking for function register files as that was
9805        insufficient. Additionally guarded against implicit re-entry into Eval code.
9806
9807        Also added a few additional assertions to reduce the amout of time between something
9808        going wrong and us seeing the error.
9809
9810        * VM/Machine.cpp:
9811        (KJS::Machine::execute):
9812        (KJS::Machine::privateExecute):
9813        * VM/RegisterFile.cpp:
9814        (KJS::RegisterFile::growBuffer):
9815        (KJS::RegisterFile::addGlobalSlots):
9816        * VM/RegisterFileStack.cpp:
9817        (KJS::RegisterFileStack::pushGlobalRegisterFile):
9818        (KJS::RegisterFileStack::pushFunctionRegisterFile):
9819        * VM/RegisterFileStack.h:
9820        (KJS::RegisterFileStack::inImplicitCall):
9821
98222008-05-14  Geoffrey Garen  <ggaren@apple.com>
9823
9824        Reviewed by Oliver Hunt.
9825        
9826        A little more debugger action: emit opcodes for debugger hooks. Right
9827        now, the opcode implementation is just a stub.
9828        
9829        SunSpider reports no change.
9830        
9831        Some example codegen for "function f() { 1; }":
9832
9833            [   0] dbg         DidEnterCallFrame
9834            [   2] dbg         WillExecuteStatement
9835            [   4] load        tr0, 1(@k0)
9836            [   7] load        tr0, undefined(@k1)
9837            [  10] dbg         WillLeaveCallFrame
9838            [  12] ret         tr0
9839
98402008-05-14  Oliver Hunt  <oliver@apple.com>
9841
9842        Reviewed by Geoff.
9843
9844        Bug 19025: SQUIRRELFISH: malformed syntax in onload handler causes crash
9845        <https://bugs.webkit.org/show_bug.cgi?id=19025>
9846
9847        Simple fix -- move the use of functionBodyNode to after the null check.
9848
9849        * kjs/function_object.cpp:
9850        (KJS::FunctionObjectImp::construct):
9851
98522008-05-13  Geoffrey Garen  <ggaren@apple.com>
9853
9854        Reviewed by Oliver Hunt.
9855        
9856        Fixed a codegen crash with run-time parse errors.
9857        
9858        SunSpider reports no change.
9859        
9860        emitThrowError needs to return the temporary holding the error, not dst,
9861        since dst may be NULL. In fact, emitThrowError shouldn't take a dst
9862        parameter at all, since exceptions should not modify the destination
9863        register.
9864
98652008-05-13  Oliver Hunt  <oliver@apple.com>
9866
9867        Reviewed by Geoff.
9868
9869        Bug 19027: SquirrelFish: Incorrect codegen for pre-increment
9870        <https://bugs.webkit.org/show_bug.cgi?id=19027>
9871
9872        This fixes the codegen issues for the pre-inc/decrement operators
9873        to prevent incorrectly clobbering the destination in the event of
9874        an exception.
9875
9876        * VM/CodeBlock.cpp:
9877        (KJS::CodeBlock::dump):
9878        * VM/CodeGenerator.cpp:
9879        (KJS::CodeGenerator::emitPreInc):
9880        (KJS::CodeGenerator::emitPreDec):
9881        * VM/CodeGenerator.h:
9882        * VM/Machine.cpp:
9883        (KJS::Machine::privateExecute):
9884        * VM/Opcode.h:
9885        * kjs/nodes.cpp:
9886        (KJS::PreIncResolveNode::emitCode):
9887        (KJS::PreDecResolveNode::emitCode):
9888        (KJS::PreIncBracketNode::emitCode):
9889        (KJS::PreDecBracketNode::emitCode):
9890        (KJS::PreIncDotNode::emitCode):
9891        (KJS::PreDecDotNode::emitCode):
9892
98932008-05-13  Geoffrey Garen  <ggaren@apple.com>
9894
9895        Reviewed by Oliver Hunt.
9896        
9897        A little more debugger action: supply a real line number, sourceId,
9898        and sourceURL in op_new_error.
9899        
9900        SunSpider reports a .2% speedup. Not sure what that's about.
9901
9902        * VM/Machine.cpp:
9903        (KJS::Machine::privateExecute): Use the new good stuff in op_new_error.
9904
9905        * kjs/nodes.cpp:
9906        (KJS::RegExpNode::emitCode): Use the shared emitThrowError instead of
9907        rolling our own.
9908
99092008-05-13  Geoffrey Garen  <ggaren@apple.com>
9910
9911        Reviewed by Oliver Hunt.
9912        
9913        A little more debugger action: implemented the exception callback.
9914        
9915        SunSpider reports a .2% speedup. Not sure what that's about.
9916
9917        * VM/CodeBlock.h: A little refactoring here. Store a pointer to our
9918        owner ScopeNode so we can retrieve data from it. This allows us to
9919        stop storing copies of the data ourselves. Also, store a "this" register
9920        instead of a code type, since we were only using the code type to
9921        calculate the "this" register.
9922
9923        * VM/CodeGenerator.cpp:
9924        (KJS::CodeGenerator::generate): Calculate the "this" register mentioned
9925        above. Also, take care of removing "this" from the symbol table after
9926        codegen is done, since relying on the timing of a destructor for correct
9927        behavior is not so good.
9928
9929        * VM/Machine.cpp:
9930        (KJS::Machine::throwException): Invoke the debugger's exception callback.
9931        (KJS::Machine::privateExecute): Use the "this" register mentioned above.
9932
99332008-05-13  Geoffrey Garen  <ggaren@apple.com>
9934
9935        Reviewed by Oliver Hunt.
9936        
9937        Removed some unused exception machinery.
9938        
9939        SunSpider reports a .3% speedup.
9940
9941        * API/JSCallbackObject.h:
9942        * API/JSCallbackObjectFunctions.h:
9943        * JavaScriptCore.exp:
9944        * VM/Machine.cpp:
9945        (KJS::Machine::privateExecute):
9946        * kjs/internal.cpp:
9947        * kjs/object.cpp:
9948        * kjs/object.h:
9949        * kjs/value.h:
9950
99512008-05-13  Geoffrey Garen  <ggaren@apple.com>
9952
9953        Reviewed by Oliver Hunt.
9954        
9955        A little more debugger action.
9956
9957        * kjs/debugger.cpp:
9958        * kjs/debugger.h: Removed debuggersPresent because it was unused.
9959        Replaced AttachedGlobalObject linked list with a HashSet because HashSet
9960        is faster and simpler. Changed all functions to return void instead of
9961        bool, because no clients ever return false, and we don't want to support
9962        it.
9963
9964        * kjs/nodes.cpp: Did some up-keep to avoid build bustage.
9965        (KJS::Node::handleException):
9966        (KJS::BreakpointCheckStatement::execute):
9967        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
9968
99692008-05-13  Oliver Hunt  <oliver@apple.com>
9970
9971        Reviewed by Darin.
9972
9973        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
9974        <https://bugs.webkit.org/show_bug.cgi?id=18752>
9975
9976        Replace old attempt at "branchless" exceptions as the extra information
9977        being passed made gcc an unhappy compiler, replacing these custom toNumber
9978        calls with ordinary toNumber logic (by relying on toNumber now preventing
9979        side effects after an exception has been thrown) provided sufficient leeway
9980        to add the additional checks for the remaining unchecked cases.
9981
9982        This leaves only toString conversions in certain contexts as possibly
9983        misbehaving.
9984
9985        * VM/Machine.cpp:
9986        (KJS::jsAdd):
9987        (KJS::resolve):
9988        (KJS::resolveBaseAndProperty):
9989        (KJS::resolveBaseAndFunc):
9990        (KJS::Machine::privateExecute):
9991        * VM/Opcode.h:
9992        * kjs/value.h:
9993        (KJS::JSValue::safeGetNumber):
9994
99952008-05-13  Geoffrey Garen  <ggaren@apple.com>
9996
9997        Reviewed by Oliver Hunt.
9998        
9999        First steps toward supporting the debugger API: support the sourceParsed
10000        callback; plus some minor fixups.
10001
10002        SunSpider reports no regression.
10003
10004        * VM/CodeGenerator.h: Removed a misleading comment.
10005
10006        * kjs/Parser.h: Changed the parser to take an ExecState*, so it can
10007        implement the sourceParsed callback -- that way, we only have to
10008        implement the callback in one place.
10009
10010        * kjs/debugger.cpp: Nixed DebuggerImp, because its sole purpose in life
10011        was to demonstrate the misapplication of design patterns.
10012
10013        * kjs/debugger.h: Changed sourceParsed to take a SourceProvider, to
10014        reduce copying, and not to return a value, because pausing execution
10015        after parsing is complicated, and no clients needed that ability, anyway.
10016
10017        * kjs/grammar.y: Make sure never to pass a NULL SourceElements* to
10018        didFinishParsing -- that simplifies some code down the road.
10019        
10020        * kjs/nodes.cpp: Don't generate special AST nodes just because the
10021        debugger is attached -- that's a relic of the old AST execution model,
10022        and those nodes haven't been maintained.
10023
100242008-05-13  Oliver Hunt  <oliver@apple.com>
10025
10026        Reviewed by Geoff.
10027
10028        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
10029        <https://bugs.webkit.org/show_bug.cgi?id=18752>
10030
10031        First step: prevent incorrect evaluation of valueOf/toString conversion
10032        in right hand side of expression after earlier conversion throws.
10033
10034        * API/JSCallbackObjectFunctions.h:
10035        (KJS::::toNumber):
10036        * kjs/object.cpp:
10037        (KJS::JSObject::defaultValue):
10038
100392008-05-12  Oliver Hunt  <oliver@apple.com>
10040
10041        Reviewed by Geoff.
10042
10043        Bug 18934: SQUIRRELFISH: ASSERT @ nytimes.com due to RegisterFile being clobbered
10044        <https://bugs.webkit.org/show_bug.cgi?id=18934>
10045
10046        Unfortunately we cannot create new statically optimised globals if there are any
10047        tainted RegisterFiles on the RegisterFileStack.  To handle this we re-introduce
10048        (in a slightly cleaner form) the inImplicitCall concept to the RegisterFileStack.
10049
10050        * VM/Machine.cpp:
10051        (KJS::Machine::execute):
10052        * VM/RegisterFileStack.cpp:
10053        (KJS::RegisterFileStack::pushFunctionRegisterFile):
10054        * VM/RegisterFileStack.h:
10055
100562008-05-12  Geoffrey Garen  <ggaren@apple.com>
10057
10058        Reviewed by Maciej Stachowiak.
10059        
10060        Introduced support for function.caller.
10061        
10062        Improved support for walking interesting scopes for function introspection.
10063        
10064        This fixes all remaining layout tests not blocked by rebasing to trunk.
10065        
10066        SunSpider reports no change.
10067
10068        * VM/Machine.cpp:
10069        (KJS::Machine::dumpRegisters): Fixed a spacing issue.
10070
100712008-05-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
10072
10073        Reviewed by Oliver.
10074
10075        Bug 18961: SQUIRRELFISH: Gmail doesn't load
10076        <https://bugs.webkit.org/show_bug.cgi?id=18961>
10077
10078        Fix codegen for logical nodes so that they don't use their destination
10079        as a temporary.
10080
10081        * kjs/nodes.cpp:
10082        (KJS::LogicalAndNode::emitCode):
10083        (KJS::LogicalOrNode::emitCode):
10084
100852008-05-10  Maciej Stachowiak  <mjs@apple.com>
10086
10087        Reviewed by Oliver.
10088
10089        - JavaScriptCore part of fix for: "SQUIRRELFISH: function toString broken after calling"
10090        https://bugs.webkit.org/show_bug.cgi?id=18869
10091       
10092        Three layout tests are fixed:
10093          fast/js/toString-elision-trailing-comma.html
10094          fast/js/toString-prefix-postfix-preserve-parens.html
10095          fast/js/kde/lval-exceptions.html
10096        
10097        Functions now save a shared subrange of the original source used
10098        to make them (so in the common case this adds no storage above the
10099        memory cache).
10100        
10101        * kjs/SourceProvider.h: Added.
10102        (KJS::SourceProvider): New abstract base class for classes that provide on-demand access
10103        to the source for a JavaScript program. This allows function objects to have access to their
10104        original source without copying.
10105        (KJS::UStringSourceProvider): SourceProvider subclass backed by a KJS::UString.
10106        (KJS::UStringSourceProvider::create):
10107        (KJS::UStringSourceProvider::getRange):
10108        (KJS::UStringSourceProvider::data):
10109        (KJS::UStringSourceProvider::length):
10110        (KJS::UStringSourceProvider::UStringSourceProvider):
10111        * kjs/SourceRange.h: Added.
10112        (KJS::SourceRange::SourceRange): Class that holds a SourceProvider and a character range into
10113        the source, to encapsulate on-demand access to the source of a function.
10114        (KJS::SourceRange::toString):
10115        * VM/Machine.cpp:
10116        (KJS::eval): Pass a UStringSourceProvider to the parser.
10117        * kjs/Parser.cpp:
10118        (KJS::Parser::parse): Take a SourceProvider and pass it on to the lexer.
10119        * kjs/Parser.h:
10120        (KJS::Parser::parse): Take a SourceProvider.
10121        * kjs/lexer.cpp:
10122        (KJS::Lexer::setCode): Take a SourceProvider; keep it around, and
10123        use it to get the raw buffer and length.
10124        * kjs/lexer.h:
10125        (KJS::Lexer::sourceRange): Convenience function to get a source
10126        range based on the lexer's source provieder, and char offsets
10127        right before and after the desired range.
10128        * kjs/function.cpp:
10129        (KJS::globalFuncEval): Pass a UStringSourceProvider to the parser.
10130        * kjs/function_object.cpp:
10131        (KJS::functionProtoFuncToString): Use toSourceString to get the source.
10132        (KJS::FunctionObjectImp::construct): Give the parser a UStringSourceProvider.
10133        * kjs/grammar.y: When parsing a function declaration, function
10134        expression, or getter or setter, tell the function body about its
10135        SourceRange.
10136        * kjs/interpreter.cpp:
10137        (KJS::Interpreter::checkSyntax): Pass a SourceProvider to the parser.
10138        (KJS::Interpreter::evaluate): Pass a SourceProvider to the parser.
10139        * kjs/interpreter.h:
10140        * kjs/nodes.h:
10141        (KJS::FunctionBodyNode::setSource): Establish a SourceRange for this function.
10142        (KJS::FunctionBodyNode::toSourceString): Get the source string out
10143        of the SourceRange.
10144        (KJS::FuncExprNode::): Take a SourceRange and set it on the body.
10145        (KJS::FuncDeclNode::): ditto
10146        * kjs/testkjs.cpp:
10147        (prettyPrintScript): Use a SourceProvider appropriately.
10148        * JavaScriptCore.exp: Export new symbols.
10149        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add new files.
10150        * JavaScriptCore.xcodeproj/project.pbxproj: Add new files.
10151
101522008-05-09  Oliver Hunt  <oliver@apple.com>
10153
10154        Reviewed by Maciej.
10155
10156        Bring back RegisterFile tainting in order to correctly handle
10157        natively implemented getters and setters that re-enter JavaScript
10158
10159        * VM/Machine.cpp:
10160        (KJS::Machine::privateExecute):
10161        * VM/RegisterFile.h:
10162        * kjs/function.cpp:
10163        (KJS::FunctionImp::callAsFunction):
10164        * kjs/object.cpp:
10165        (KJS::JSObject::put):
10166        (KJS::tryGetAndCallProperty):
10167        * kjs/property_slot.cpp:
10168        (KJS::PropertySlot::functionGetter):
10169
101702008-05-09  Maciej Stachowiak  <mjs@apple.com>
10171
10172        Reviewed by Oliver.
10173        
10174        - track character offsets of open and close braces, in preparation for saving function source
10175        
10176        I verified that there is no performance regression from this change.
10177
10178        * kjs/grammar.y:
10179        * kjs/lexer.cpp:
10180        (KJS::Lexer::lex):
10181        (KJS::Lexer::matchPunctuator):
10182        * kjs/lexer.h:
10183
101842008-05-09  Oliver Hunt  <oliver@apple.com>
10185
10186        Debug build fix
10187
10188        * kjs/JSGlobalObject.cpp:
10189        (KJS::JSGlobalObject::restoreLocalStorage):
10190
101912008-05-09  Oliver Hunt  <oliver@apple.com>
10192
10193        Reviewed by Geoff.
10194
10195        Build fixes for SquirrelFish on windows.
10196
10197        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10198        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
10199        * VM/Register.h:
10200        * kjs/JSGlobalObject.cpp:
10201        (KJS::JSGlobalObject::restoreLocalStorage):
10202        * kjs/collector.cpp:
10203        (KJS::Collector::allocate):
10204        (KJS::Collector::allocateNumber):
10205        * kjs/collector.h:
10206        (KJS::Collector::allocate):
10207        (KJS::Collector::allocateNumber):
10208        * kjs/property_slot.cpp:
10209
102102008-05-08  Maciej Stachowiak  <mjs@apple.com>
10211
10212        Reviewed by Geoff.
10213        
10214        - fix activation tearoff in the case where functions are called with too many arguments
10215        
10216        Fixes:
10217        fast/canvas/patternfill-repeat.html
10218        fast/dom/SelectorAPI/bug-17313.html
10219
10220        * VM/Machine.cpp:
10221        (KJS::slideRegisterWindowForCall):
10222        (KJS::scopeChainForCall):
10223        (KJS::Machine::execute):
10224        (KJS::Machine::privateExecute):
10225
102262008-05-08  Geoffrey Garen  <ggaren@apple.com>
10227
10228        Reviewed by Oliver Hunt.
10229        
10230        Fixed failure in fast/canvas/canvas-pattern-behaviour.html.
10231        
10232        SunSpider reports a small speedup. Not sure what that's about.
10233
10234        * VM/CodeBlock.cpp:
10235        (KJS::CodeBlock::dump): Fixed op_call_eval to dump as "op_call_eval".
10236        This helped me while debugging.
10237
10238        * VM/Machine.cpp:
10239        (KJS::Machine::unwindCallFrame): When looking for an activation to tear
10240        off, don't use the scope chain. Inside eval, the scope chain doesn't
10241        belong to us; it belongs to our calling function.
10242        
10243        Also, don't use the needsFullScopeChain flag to decide whether to tear
10244        off the activation. "function.arguments" can create an activation
10245        for a function whose needsFullScopeChain flag is set to false.
10246
102472008-05-08  Maciej Stachowiak  <mjs@apple.com>
10248
10249        Reviewed by Oliver.
10250        
10251        - fix function.call for calls of more than 8 arguments
10252        
10253        Fixes svg/carto.net/button.svg
10254
10255        * kjs/list.cpp:
10256        (KJS::List::getSlice): properly set up the m_buffer of the target list.
10257
102582008-05-08  Maciej Stachowiak  <mjs@apple.com>
10259
10260        Reviewed by Oliver.
10261        
10262        - don't return a null RegisterID from RegExpNode in the exception case, since the caller may need a real register
10263
10264        Fixes:
10265        - fast/regex/early-acid3-86.html
10266        - http/tests/misc/acid3.html
10267        
10268        * kjs/nodes.cpp:
10269        (KJS::RegExpNode::emitCode):
10270
102712008-05-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
10272
10273        Reviewed by Oliver.
10274
10275        Fix a performance regression caused by the introduction of property
10276        attributes to SymbolTable in r32859 by encoding the attributes and the
10277        register index into a single field of SymbolTableEntry.
10278
10279        This leaves Node::optimizeVariableAccess() definitely broken, although
10280        it was probably not entirely correct in SquirrelFish before this change.
10281
10282        * VM/CodeBlock.h:
10283        (KJS::missingThisObjectMarker):
10284        * VM/CodeGenerator.cpp:
10285        (KJS::CodeGenerator::addVar):
10286        (KJS::CodeGenerator::CodeGenerator):
10287        (KJS::CodeGenerator::registerForLocal):
10288        (KJS::CodeGenerator::registerForLocalConstInit):
10289        (KJS::CodeGenerator::isLocalConstant):
10290        (KJS::CodeGenerator::addConstant):
10291        (KJS::CodeGenerator::emitCall):
10292        * VM/CodeGenerator.h:
10293        (KJS::CodeGenerator::IdentifierMapIndexHashTraits::emptyValue):
10294        * VM/Machine.cpp:
10295        (KJS::Machine::privateExecute):
10296        * kjs/JSGlobalObject.cpp:
10297        (KJS::JSGlobalObject::saveLocalStorage):
10298        * kjs/JSVariableObject.cpp:
10299        (KJS::JSVariableObject::getPropertyNames):
10300        (KJS::JSVariableObject::getPropertyAttributes):
10301        * kjs/JSVariableObject.h:
10302        (KJS::JSVariableObject::symbolTableGet):
10303        (KJS::JSVariableObject::symbolTablePut):
10304        (KJS::JSVariableObject::symbolTablePutWithAttributes):
10305        * kjs/SymbolTable.h:
10306        (KJS::SymbolTableEntry::SymbolTableEntry):
10307        (KJS::SymbolTableEntry::isEmpty):
10308        (KJS::SymbolTableEntry::getIndex):
10309        (KJS::SymbolTableEntry::getAttributes):
10310        (KJS::SymbolTableEntry::setAttributes):
10311        (KJS::SymbolTableEntry::isReadOnly):
10312        * kjs/nodes.cpp:
10313        (KJS::getSymbolTableEntry):
10314        (KJS::PostIncResolveNode::optimizeVariableAccess):
10315        (KJS::PostDecResolveNode::optimizeVariableAccess):
10316        (KJS::DeleteResolveNode::optimizeVariableAccess):
10317        (KJS::TypeOfResolveNode::optimizeVariableAccess):
10318        (KJS::PreIncResolveNode::optimizeVariableAccess):
10319        (KJS::PreDecResolveNode::optimizeVariableAccess):
10320        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
10321        (KJS::AssignResolveNode::optimizeVariableAccess):
10322        (KJS::ProgramNode::initializeSymbolTable):
10323
103242008-05-06  Maciej Stachowiak  <mjs@apple.com>
10325
10326        Rubber stamped by Oliver.
10327        
10328        - add missing ! in an assert that I failed to reverse
10329
10330        * VM/CodeGenerator.cpp:
10331        (KJS::CodeGenerator::CodeGenerator):
10332
103332008-05-06  Maciej Stachowiak  <mjs@apple.com>
10334
10335        Reviewed by Oliver.
10336        
10337        - fixed "SQUIRRELFISH: window.this shows up as a property, but it shouldn't"
10338        https://bugs.webkit.org/show_bug.cgi?id=18868
10339        
10340        The basic approach is to have "this" only be present in the symbol
10341        table at compile time, not runtime.
10342
10343        * VM/CodeGenerator.cpp:
10344        (KJS::CodeGenerator::~CodeGenerator): Remove "this" from symbol table.
10345        (KJS::CodeGenerator::CodeGenerator): Add "this" back when re-using
10346        a symbol table.
10347        * VM/CodeGenerator.h:
10348        * VM/Machine.cpp:
10349        (KJS::Machine::execute): Don't assert that "this" is in the symbol table.
10350
103512008-05-06  Geoffrey Garen  <ggaren@apple.com>
10352
10353        Reviewed by Oliver Hunt.
10354        
10355        Trivial support for function.arguments: Currently, we only support
10356        function.arguments from within the scope of function.
10357        
10358        This fixes the remaining Mozilla JS test failures.
10359        
10360        SunSpider reports no change.
10361
10362        * JavaScriptCore.exp:
10363
10364        * VM/Machine.cpp:
10365        (KJS::Machine::privateExecute): Separated scope chain deref from
10366        activation register copying: since it is now possible for client code
10367        to create an activation on behalf of a function that otherwise wouldn't
10368        need one, having an activation no longer necessarily means that you need
10369        to deref the scope chain.
10370        
10371        (KJS::Machine::getCallFrame): For now, this function only examines the
10372        current scope. Walking parent scopes requires some refactoring in the
10373        way we track execution stacks.
10374
10375        * kjs/ExecState.cpp:
10376        (KJS::ExecState::ExecState): We use a negative call frame offset to
10377        indicate that a given scope is not a function call scope.
10378        
103792008-05-05  Oliver Hunt  <oliver@apple.com>
10380
10381        Reviewed by Geoff.
10382
10383        Fix call frame set up for native -> JS function calls.
10384
10385        * VM/Machine.cpp:
10386        (KJS::Machine::execute):
10387
103882008-05-05  Geoffrey Garen  <ggaren@apple.com>
10389
10390        Reviewed by Maciej Stachowiak.
10391        
10392        Fixed ecma_3/Object/8.6.2.6-001.js, and similar bugs.
10393        
10394        SunSpider reports a .4% speedup. Not sure what that's about.
10395
10396        * VM/Machine.cpp:
10397        (KJS::Machine::privateExecute): Check for exception return from equal,
10398        since toPrimitive can throw.
10399
10400        * kjs/operations.cpp:
10401        (KJS::strictEqual): In response to an error I made in an earlier version
10402        of this patch, I changed strictEqual to make clear the fact that it
10403        performs no conversions and can't throw, making it slightly more efficient
10404        in the process.
10405
104062008-05-05  Maciej Stachowiak  <mjs@apple.com>
10407
10408        Reviewed by Oliver.
10409        
10410        - fix some dumb mistakes in my last patch
10411
10412        * VM/CodeGenerator.cpp:
10413        (KJS::CodeGenerator::emitPushScope):
10414        (KJS::CodeGenerator::emitGetPropertyNames):
10415        * VM/Machine.cpp:
10416        (KJS::Machine::privateExecute):
10417
104182008-05-05  Maciej Stachowiak  <mjs@apple.com>
10419
10420        Reviewed by Oliver.
10421        
10422        - document opcodes relating to jumps, scopes, and property name iteration
10423        
10424        Documented jmp, jtrue, false, push_scope, pop_scope, get_pnames,
10425        next_pname and jmp_scopes.
10426
10427        * VM/CodeGenerator.cpp:
10428        (KJS::CodeGenerator::emitJump):
10429        (KJS::CodeGenerator::emitJumpIfTrue):
10430        (KJS::CodeGenerator::emitJumpIfFalse):
10431        (KJS::CodeGenerator::emitPushScope):
10432        (KJS::CodeGenerator::emitNextPropertyName):
10433        (KJS::CodeGenerator::emitGetPropertyNames):
10434        * VM/CodeGenerator.h:
10435        * VM/Machine.cpp:
10436        (KJS::Machine::privateExecute):
10437        * kjs/nodes.cpp:
10438        (KJS::LogicalAndNode::emitCode):
10439        (KJS::LogicalOrNode::emitCode):
10440        (KJS::ConditionalNode::emitCode):
10441        (KJS::IfNode::emitCode):
10442        (KJS::IfElseNode::emitCode):
10443        (KJS::DoWhileNode::emitCode):
10444        (KJS::WhileNode::emitCode):
10445        (KJS::ForNode::emitCode):
10446        (KJS::ForInNode::emitCode):
10447        (KJS::WithNode::emitCode):
10448
104492008-05-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
10450
10451        Reviewed by Oliver.
10452
10453        Bug 18749: SQUIRRELFISH: const support is broken
10454        <https://bugs.webkit.org/show_bug.cgi?id=18749>
10455
10456        Adds support for const during code generation.
10457
10458        Fixes 2 layout tests.
10459
10460        * ChangeLog:
10461        * VM/CodeGenerator.cpp:
10462        (KJS::CodeGenerator::addVar):
10463        (KJS::CodeGenerator::CodeGenerator):
10464        (KJS::CodeGenerator::isLocalConstant):
10465        * VM/CodeGenerator.h:
10466        (KJS::CodeGenerator::addVar):
10467        * kjs/nodes.cpp:
10468        (KJS::PostIncResolveNode::emitCode):
10469        (KJS::PostDecResolveNode::emitCode):
10470        (KJS::PreIncResolveNode::emitCode):
10471        (KJS::PreDecResolveNode::emitCode):
10472        (KJS::ReadModifyResolveNode::emitCode):
10473        (KJS::AssignResolveNode::emitCode):
10474
104752008-05-04  Maciej Stachowiak  <mjs@apple.com>
10476
10477        Reviewed by Geoff.
10478        
10479        - document some more opcodes (and fix argument names)
10480        
10481        Added docs for eq, neq, stricteq, nstriceq, less and lesseq.
10482
10483        * VM/CodeGenerator.cpp:
10484        (KJS::CodeGenerator::emitEqual):
10485        (KJS::CodeGenerator::emitNotEqual):
10486        (KJS::CodeGenerator::emitStrictEqual):
10487        (KJS::CodeGenerator::emitNotStrictEqual):
10488        (KJS::CodeGenerator::emitLess):
10489        (KJS::CodeGenerator::emitLessEq):
10490        * VM/CodeGenerator.h:
10491        * VM/Machine.cpp:
10492        (KJS::Machine::privateExecute):
10493        * kjs/nodes.cpp:
10494        (KJS::LessNode::emitCode):
10495        (KJS::GreaterNode::emitCode):
10496        (KJS::LessEqNode::emitCode):
10497        (KJS::GreaterEqNode::emitCode):
10498        (KJS::EqualNode::emitCode):
10499        (KJS::NotEqualNode::emitCode):
10500        (KJS::StrictEqualNode::emitCode):
10501        (KJS::NotStrictEqualNode::emitCode):
10502        (KJS::CaseBlockNode::emitCodeForBlock):
10503
105042008-05-04  Geoffrey Garen  <ggaren@apple.com>
10505
10506        Reviewed by Maciej Stachowiak.
10507
10508        More scaffolding for f.arguments.
10509        
10510        Track the offset of the last call frame in the ExecState, so we can
10511        produce a backtrace at any time.
10512        
10513        Also, record numLocals, the sum of numVars + numParameters, in each code
10514        block, to make updates to the ExecState a little cheaper than they
10515        would be otherwise.
10516        
10517        We now use numLocals in a bunch of places where we used to calculate
10518        numVars + numParameters or -numVars - numParameters.
10519        
10520        Reports are mixed, but all in all, this seems to be a wash on SunSpider.
10521
105222008-05-04  Oliver Hunt  <oliver@apple.com>
10523
10524        Reviewed by Geoff.
10525
10526        Whoops, correctly handle properties that don't exist in the 
10527        symbol table.
10528
10529        * kjs/JSVariableObject.h:
10530        (KJS::JSVariableObject::symbolTablePutWithAttributes):
10531
105322008-05-04  Oliver Hunt  <oliver@apple.com>
10533
10534        Reviewed by Geoff.
10535
10536        Add attribute information to SymbolTable as ground work for
10537        various DontEnum and ReadOnly issues.
10538
10539        * VM/CodeGenerator.cpp:
10540        (KJS::CodeGenerator::addVar):
10541        (KJS::CodeGenerator::CodeGenerator):
10542        (KJS::CodeGenerator::registerForLocal):
10543        (KJS::CodeGenerator::registerForLocalConstInit):
10544        (KJS::CodeGenerator::addConstant):
10545        * VM/Machine.cpp:
10546        (KJS::Machine::execute):
10547        * kjs/JSGlobalObject.cpp:
10548        (KJS::JSGlobalObject::saveLocalStorage):
10549        * kjs/JSVariableObject.cpp:
10550        (KJS::JSVariableObject::getPropertyNames):
10551        (KJS::JSVariableObject::getPropertyAttributes):
10552        * kjs/JSVariableObject.h:
10553        (KJS::JSVariableObject::symbolTablePut):
10554        (KJS::JSVariableObject::symbolTablePutWithAttributes):
10555        * kjs/SymbolTable.h:
10556        (KJS::SymbolTableEntry::SymbolTableEntry):
10557        (KJS::SymbolTableIndexHashTraits::emptyValue):
10558        * kjs/nodes.cpp:
10559        (KJS::getSymbolTableEntry):
10560        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
10561        (KJS::AssignResolveNode::optimizeVariableAccess):
10562        (KJS::ProgramNode::initializeSymbolTable):
10563
105642008-05-04  Geoffrey Garen  <ggaren@apple.com>
10565
10566        Reviewed by Oliver Hunt.
10567        
10568        More scaffolding for f.arguments.
10569        
10570        Store the register file associated with an ExecState in the ExecState.
10571        
10572        SunSpider reports no change.
10573
10574        * kjs/JSGlobalObject.h:
10575        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Moved
10576        registerFileStack above globalExec, so it gets initialized first.
10577        Removed remnants of old activation scheme.
10578
105792008-05-04  Maciej Stachowiak  <mjs@apple.com>
10580
10581        Rubber stamped by Oliver.
10582        
10583        - renamed a few opcodes and fixed assembly formatting to accomodate the longest opcode
10584        
10585        equal --> eq
10586        nequal --> neq
10587        resolve_base_and_property --> resolve_with_base
10588        resolve_base_and_func --> resolve_func
10589        get_prop_id --> get_by_id
10590        put_prop_id --> put_by_id
10591        delete_prop_id --> del_by_id
10592        get_prop_val --> get_by_val
10593        put_prop_val --> put_by_val
10594        delete_prop_val --> del_by_val
10595        put_prop_index --> put_by_index
10596        
10597        * VM/CodeBlock.cpp:
10598        (KJS::printUnaryOp):
10599        (KJS::printBinaryOp):
10600        (KJS::printConditionalJump):
10601        (KJS::CodeBlock::dump):
10602        * VM/CodeGenerator.cpp:
10603        (KJS::CodeGenerator::emitEqual):
10604        (KJS::CodeGenerator::emitNotEqual):
10605        (KJS::CodeGenerator::emitResolveWithBase):
10606        (KJS::CodeGenerator::emitResolveFunction):
10607        (KJS::CodeGenerator::emitGetById):
10608        (KJS::CodeGenerator::emitPutById):
10609        (KJS::CodeGenerator::emitDeleteById):
10610        (KJS::CodeGenerator::emitGetByVal):
10611        (KJS::CodeGenerator::emitPutByVal):
10612        (KJS::CodeGenerator::emitDeleteByVal):
10613        (KJS::CodeGenerator::emitPutByIndex):
10614        * VM/CodeGenerator.h:
10615        * VM/Machine.cpp:
10616        (KJS::Machine::privateExecute):
10617        * VM/Opcode.h:
10618        * kjs/nodes.cpp:
10619        (KJS::ArrayNode::emitCode):
10620        (KJS::PropertyListNode::emitCode):
10621        (KJS::BracketAccessorNode::emitCode):
10622        (KJS::DotAccessorNode::emitCode):
10623        (KJS::EvalFunctionCallNode::emitCode):
10624        (KJS::FunctionCallResolveNode::emitCode):
10625        (KJS::FunctionCallBracketNode::emitCode):
10626        (KJS::FunctionCallDotNode::emitCode):
10627        (KJS::PostIncResolveNode::emitCode):
10628        (KJS::PostDecResolveNode::emitCode):
10629        (KJS::PostIncBracketNode::emitCode):
10630        (KJS::PostDecBracketNode::emitCode):
10631        (KJS::PostIncDotNode::emitCode):
10632        (KJS::PostDecDotNode::emitCode):
10633        (KJS::DeleteResolveNode::emitCode):
10634        (KJS::DeleteBracketNode::emitCode):
10635        (KJS::DeleteDotNode::emitCode):
10636        (KJS::TypeOfResolveNode::emitCode):
10637        (KJS::PreIncResolveNode::emitCode):
10638        (KJS::PreDecResolveNode::emitCode):
10639        (KJS::PreIncBracketNode::emitCode):
10640        (KJS::PreDecBracketNode::emitCode):
10641        (KJS::PreIncDotNode::emitCode):
10642        (KJS::PreDecDotNode::emitCode):
10643        (KJS::ReadModifyResolveNode::emitCode):
10644        (KJS::AssignResolveNode::emitCode):
10645        (KJS::AssignDotNode::emitCode):
10646        (KJS::ReadModifyDotNode::emitCode):
10647        (KJS::AssignBracketNode::emitCode):
10648        (KJS::ReadModifyBracketNode::emitCode):
10649        (KJS::ConstDeclNode::emitCodeSingle):
10650        (KJS::ForInNode::emitCode):
10651        (KJS::TryNode::emitCode):
10652
106532008-05-04  Oliver Hunt  <oliver@apple.com>
10654
10655        Reviewed by Maciej.
10656
10657        Fix assertion when accessing arguments object with too many arguments provided
10658
10659        The arguments constructor was assuming that the register offset given for argv
10660        was an absolute offset into the registerfile, rather than the offset from the
10661        frame.  This patches corrects that issue.
10662
10663        * kjs/JSActivation.cpp:
10664        (KJS::JSActivation::createArgumentsObject):
10665
106662008-05-04  Geoffrey Garen  <ggaren@apple.com>
10667
10668        Rubber stamped by Sam Weinig.
10669        
10670        Cleaned up Machine.cpp according to our style guidelines: moved static
10671        data to the top of the file; moved stand-alone functions below that;
10672        moved the Machine constructor above other Machine member functions.
10673
106742008-05-03  Maciej Stachowiak  <mjs@apple.com>
10675
10676        Reviewed by Sam.
10677        
10678        - fix accidental breakage from last patch
10679
10680        * VM/Machine.cpp:
10681        (KJS::Machine::privateExecute):
10682
106832008-05-03  Maciej Stachowiak  <mjs@apple.com>
10684
10685        Reviewed by Geoff.
10686        
10687        - a bunch more opcode documentation and corresponding parameter name fixes
10688
10689        I renamed a few opcodes:
10690        
10691        type_of --> typeof (that's what the JS operator is named)
10692        instance_of --> instanceof (ditto)
10693        create_error --> new_error (for consistency with other new_* opcodes)
10694        
10695        I documented the following opcodes:
10696        
10697        - load
10698        - new_object
10699        - new_array
10700        - new_regexp
10701        - mov
10702        - pre_inc
10703        - pre_dec
10704        - post_inc
10705        - post_dec
10706        - to_jsnumber
10707        - negate
10708        - bitnot
10709        - not
10710        - instanceof
10711        - typeof
10712        - in
10713        - new_func
10714        - new_funcexp
10715        - new_error
10716
10717        I also fixed formatting on some existing opcode docs.
10718        
10719        * VM/CodeBlock.cpp:
10720        (KJS::CodeBlock::dump):
10721        * VM/CodeGenerator.cpp:
10722        (KJS::CodeGenerator::emitMove):
10723        (KJS::CodeGenerator::emitNot):
10724        (KJS::CodeGenerator::emitPreInc):
10725        (KJS::CodeGenerator::emitPreDec):
10726        (KJS::CodeGenerator::emitPostInc):
10727        (KJS::CodeGenerator::emitPostDec):
10728        (KJS::CodeGenerator::emitToJSNumber):
10729        (KJS::CodeGenerator::emitNegate):
10730        (KJS::CodeGenerator::emitBitNot):
10731        (KJS::CodeGenerator::emitInstanceOf):
10732        (KJS::CodeGenerator::emitTypeOf):
10733        (KJS::CodeGenerator::emitIn):
10734        (KJS::CodeGenerator::emitLoad):
10735        (KJS::CodeGenerator::emitNewObject):
10736        (KJS::CodeGenerator::emitNewArray):
10737        (KJS::CodeGenerator::emitNewRegExp):
10738        (KJS::CodeGenerator::emitNewError):
10739        * VM/CodeGenerator.h:
10740        (KJS::CodeGenerator::scopeDepth):
10741        (KJS::CodeGenerator::addVar):
10742        * VM/Machine.cpp:
10743        (KJS::Machine::privateExecute):
10744        * VM/Opcode.h:
10745        * kjs/nodes.cpp:
10746        (KJS::Node::emitThrowError):
10747        (KJS::RegExpNode::emitCode):
10748        (KJS::TypeOfValueNode::emitCode):
10749        (KJS::UnaryPlusNode::emitCode):
10750        (KJS::NegateNode::emitCode):
10751        (KJS::BitwiseNotNode::emitCode):
10752        (KJS::LogicalNotNode::emitCode):
10753        (KJS::InstanceOfNode::emitCode):
10754        (KJS::InNode::emitCode):
10755
107562008-05-03  Maciej Stachowiak  <mjs@apple.com>
10757
10758        Reviewed by Geoff and Sam.
10759        
10760        - generate HTML bytecode docs at build time
10761
10762        * DerivedSources.make:
10763        * docs: Added.
10764        * docs/make-bytecode-docs.pl: Added.
10765
107662008-05-03  Geoffrey Garen  <ggaren@apple.com>
10767
10768        Reviewed by Sam Weinig.
10769        
10770        Update ExecState::m_scopeChain when switching scope chains inside the
10771        machine.
10772        
10773        This fixes uses of lexicalGlobalObject, such as, in a subframe
10774
10775            alert(top.makeArray() instanceof Array ? "FAIL" : "PASS");
10776        
10777        and a bunch of the security failures listed in
10778        https://bugs.webkit.org/show_bug.cgi?id=18870. (Those tests still fail,
10779        seemingly because of regressions in exception messages).
10780        
10781        SunSpider reports no change.
10782
10783        * VM/Machine.cpp: Factored out scope chain updating into a common
10784        function that takes care to update ExecState::m_scopeChain, too.
10785
10786        * kjs/ExecState.h: I made Machine a friend of ExecState so that Machine
10787        could update ExecState::m_scopeChain, even though that value is
10788        read-only for everyone else.
10789
10790        * kjs/JSGlobalObject.h:
10791        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Changed
10792        this client to be a little friendlier to ExecState's internal
10793        storage type for scope chain data.
10794
107952008-05-03  Geoffrey Garen  <ggaren@apple.com>
10796
10797        Reviewed by Sam Weinig.
10798        
10799        Fixed https://bugs.webkit.org/show_bug.cgi?id=18876
10800        Squirrelfish: ScopeChainNode leak in op_jmp_scopes.
10801        
10802        SunSpider reports no change.
10803
10804        * VM/Machine.cpp:
10805        (KJS::Machine::privateExecute): Don't construct a ScopeChain object,
10806        since the direct threaded interpreter will goto across its destructor.
10807
108082008-05-03  Geoffrey Garen  <ggaren@apple.com>
10809
10810        Reviewed by Oliver Hunt.
10811        
10812        A bit more efficient fix than r32832: Don't copy globals into function
10813        register files; instead, have the RegisterFileStack track only the base
10814        of the last *global* register file, so the global object's register
10815        references stay good.
10816        
10817        SunSpider reports a .3% speedup. Not sure what that's about.
10818
108192008-05-03  Oliver Hunt  <oliver@apple.com>
10820
10821        Reviewed by Maciej.
10822
10823        Bug 18864: SquirrelFish: Support getter and setter definition in object literals
10824        <https://bugs.webkit.org/show_bug.cgi?id=18864>
10825
10826        Add new opcodes to allow us to add getters and setters to an object.  These are
10827        only used by the codegen for object literals.
10828
10829        * VM/CodeGenerator.cpp:
10830        (KJS::CodeGenerator::emitPutGetter):
10831        (KJS::CodeGenerator::emitPutSetter):
10832        * VM/CodeGenerator.h:
10833        * VM/Machine.cpp:
10834        (KJS::Machine::privateExecute):
10835        * VM/Opcode.h:
10836        * kjs/nodes.cpp:
10837        (KJS::PropertyListNode::emitCode):
10838
108392008-05-02  Maciej Stachowiak  <mjs@apple.com>
10840
10841        Reviewed by Oliver.
10842        
10843        - properly copy globals into and out of implicit call register
10844        files, otherwise they will fail at global lookup
10845
10846        Fixes fast/js/array-tostring-and-join.html layout test.
10847        
10848        * VM/RegisterFileStack.cpp:
10849        (KJS::RegisterFileStack::pushGlobalRegisterFile):
10850        (KJS::RegisterFileStack::popGlobalRegisterFile):
10851        (KJS::RegisterFileStack::pushFunctionRegisterFile):
10852        (KJS::RegisterFileStack::popFunctionRegisterFile):
10853
108542008-05-02  Geoffrey Garen  <ggaren@apple.com>
10855
10856        Reviewed by Oliver Hunt.
10857        
10858        Fixed https://bugs.webkit.org/show_bug.cgi?id=18822
10859        SQUIRRELFISH: incorrect eval used in some cases
10860        
10861        Changed all code inside the machine to fetch the lexical global object
10862        directly from the scope chain, instead of from the ExecState.
10863        
10864        Clients who fetch the lexical global object through the ExecState
10865        still don't work.
10866        
10867        SunSpider reports no change.
10868
10869        * VM/Machine.cpp:
10870        (KJS::Machine::privateExecute): Fetch the lexical global object from
10871        the scope chain.
10872        
10873        * kjs/ExecState.h:
10874        (KJS::ExecState::ExecState::lexicalGlobalObject): Moved the logic for
10875        this function into ScopeChainNode, but kept this function around to
10876        support existing clients.
10877
108782008-05-02  Geoffrey Garen  <ggaren@apple.com>
10879
10880        Rubber stamped by Oliver Hunt.
10881        
10882        Removed ExecState.cpp from AllInOneFile.cpp, for a .2% speedup.
10883
10884        * JavaScriptCore.xcodeproj/project.pbxproj:
10885        * kjs/AllInOneFile.cpp:
10886
108872008-05-01  Oliver Hunt  <oliver@apple.com>
10888
10889        Reviewed by Geoff and Maciej.
10890
10891        Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
10892        <https://bugs.webkit.org/show_bug.cgi?id=18827>
10893
10894        Remove safe/unsafe RegisterFile concept, and instead just add additional
10895        logic to ensure we always push/pop RegisterFiles when executing getters
10896        and setters, similar to the logic for valueOf and toString.
10897
10898        * VM/Machine.cpp:
10899        (KJS::Machine::privateExecute):
10900        * VM/RegisterFile.h:
10901        * kjs/function.cpp:
10902        (KJS::FunctionImp::callAsFunction):
10903        * kjs/object.cpp:
10904        (KJS::JSObject::put):
10905        * kjs/property_slot.cpp:
10906        (KJS::PropertySlot::functionGetter):
10907
109082008-05-01  Oliver Hunt  <oliver@apple.com>
10909
10910        RS=Geoff
10911
10912        Rename unsafeForReentry to safeForReentry to avoid double negatives.
10913
10914        * VM/Machine.cpp:
10915        (KJS::Machine::privateExecute):
10916        * VM/RegisterFile.h:
10917        * kjs/function.cpp:
10918        (KJS::FunctionImp::callAsFunction):
10919
109202008-05-01  Oliver Hunt  <oliver@apple.com>
10921
10922        Reviewed by Maciej.
10923
10924        Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
10925        <https://bugs.webkit.org/show_bug.cgi?id=18827>
10926        
10927        This patch makes getters and setters work.  It does this by
10928        tracking whether the RegisterFile is "safe", that is whether
10929        the interpreter is in a state that in which it can handle
10930        the RegisterFile being reallocated.
10931
10932        * VM/Machine.cpp:
10933        (KJS::resolve):
10934        (KJS::Machine::privateExecute):
10935        * VM/RegisterFile.h:
10936        * kjs/function.cpp:
10937        (KJS::FunctionImp::callAsFunction):
10938
109392008-04-30  Geoffrey Garen  <ggaren@apple.com>
10940
10941        Release build fix: Always compile in "isGlobalObject", since it's
10942        listed in our .exp file.
10943
10944        * kjs/ExecState.cpp:
10945        (KJS::ExecState::isGlobalObject):
10946        * kjs/ExecState.h:
10947
109482008-04-30  Oliver Hunt  <oliver@apple.com>
10949
10950        Reviewed by Maciej.
10951
10952        Minor code restructuring to prepare for getters and setters, 
10953        also helps exception semantics a bit.
10954
10955        * VM/Machine.cpp:
10956        (KJS::Machine::privateExecute):
10957
109582008-04-30  Geoffrey Garen  <ggaren@apple.com>
10959
10960        Fixed tyop.
10961
10962        * kjs/ExecState.h:
10963
109642008-04-30  Geoffrey Garen  <ggaren@apple.com>
10965
10966        Debug build fix: export a missing symbol.
10967
10968        * JavaScriptCore.exp:
10969
109702008-04-30  Geoffrey Garen  <ggaren@apple.com>
10971
10972        Reviewed by Oliver Hunt.
10973        
10974        A little more ExecState refactoring: Now, only the global object creates
10975        an ExecState.
10976        
10977        Also inlined ExecState::lexicalGlobalObject().
10978        
10979        SunSpider reports no change.
10980
109812008-04-30  Geoffrey Garen  <ggaren@apple.com>
10982
10983        WebCore build fix: forward-declare ScopeChain.
10984
10985        * kjs/interpreter.h:
10986
109872008-04-30  Geoffrey Garen  <ggaren@apple.com>
10988
10989        Build fix for JavaScriptGlue: export a missing symbol.
10990
10991        * JavaScriptCore.exp:
10992
109932008-04-30  Geoffrey Garen  <ggaren@apple.com>
10994
10995        Reviewed by Oliver Hunt.
10996        
10997        Removed a lot of unused bits from ExecState, moving them into
10998        OldInterpreterExecState, the fake scaffolding class.
10999        
11000        The clutter was making it hard to see the forest from the trees.
11001        
11002        .4% SunSpider speedup, probably because ExecState::lexicalGlobalObject()
11003        is faster now.
11004
110052008-04-29  Oliver Hunt  <oliver@apple.com>
11006
11007        Reviewed by Maciej.
11008
11009        Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
11010        <https://bugs.webkit.org/show_bug.cgi?id=18643>
11011
11012        Prevent static slot optimisation for new variables and functions in
11013        globally re-entrant code called from an an implicit function call.
11014
11015        This is necessary to prevent us from needing to resize the global
11016        slot portion of the root RegisterFile during an implicit (and hence
11017        unguarded) function call.
11018
11019        * VM/CodeGenerator.cpp:
11020        (KJS::CodeGenerator::CodeGenerator):
11021        * VM/CodeGenerator.h:
11022        * VM/Machine.cpp:
11023        (KJS::Machine::execute):
11024        * VM/RegisterFile.h:
11025        * VM/RegisterFileStack.cpp:
11026        (KJS::RegisterFileStack::pushGlobalRegisterFile):
11027        (KJS::RegisterFileStack::popGlobalRegisterFile):
11028        (KJS::RegisterFileStack::pushFunctionRegisterFile):
11029        (KJS::RegisterFileStack::popFunctionRegisterFile):
11030        * VM/RegisterFileStack.h:
11031        (KJS::RegisterFileStack::inImplicitFunctionCall):
11032        (KJS::RegisterFileStack::lastGlobal):
11033        * kjs/nodes.cpp:
11034        (KJS::ProgramNode::generateCode):
11035        * kjs/nodes.h:
11036        (KJS::ProgramNode::):
11037
110382008-04-29  Geoffrey Garen  <ggaren@apple.com>
11039
11040        Reviewed by Oliver Hunt.
11041        
11042        In nested program code, don't propogate "this" back to the parent
11043        register file. ("this" should remain constant in the parent register
11044        file, regardless of the scripts it invokes.)
11045
11046        * VM/RegisterFile.cpp:
11047        (KJS::RegisterFile::copyGlobals):
11048
110492008-04-28  Oliver Hunt  <oliver@apple.com>
11050
11051        Reviewed by Geoff.
11052
11053        Restore base pointer when popping a global RegisterFile
11054
11055        * VM/RegisterFileStack.cpp:
11056        (KJS::RegisterFileStack::popGlobalRegisterFile):
11057
110582008-04-28  Oliver Hunt  <oliver@apple.com>
11059
11060        Reviewed by Geoff.
11061
11062        Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
11063        <https://bugs.webkit.org/show_bug.cgi?id=18643>
11064
11065        Partial fix.  This results in all implicit calls to toString or valueOf
11066        executing in a separate RegisterFile, so ensuring that the the pointers
11067        in the triggering interpreter don't get trashed.  This still leaves the
11068        task of preventing new global re-entry from toString and valueOf from
11069        clobbering the RegisterFile.
11070
11071        * VM/Machine.cpp:
11072        (KJS::Machine::execute):
11073        * VM/RegisterFileStack.cpp:
11074        (KJS::RegisterFileStack::pushFunctionRegisterFile):
11075        (KJS::RegisterFileStack::popFunctionRegisterFile):
11076        * VM/RegisterFileStack.h:
11077        * kjs/object.cpp:
11078        (KJS::tryGetAndCallProperty):
11079
110802008-04-28  Geoffrey Garen  <ggaren@apple.com>
11081
11082        Reviewed by Maciej Stachowiak.
11083        
11084        Simplified activation object a bit: No need to store the callee
11085        in the activation object -- we can pull it out of the call frame
11086        when needed, instead.
11087        
11088        SunSpider reports no change.
11089
110902008-04-28  Geoffrey Garen  <ggaren@apple.com>
11091
11092        Reviewed by Maciej Stachowiak.
11093        
11094        RS by Oliver Hunt on moving JSArguments.cpp out of AllInOneFile.cpp.
11095
11096        Substantially more handling of "arguments": "arguments" works fully
11097        now, but "f.arguments" still doesn't work.
11098
11099        Fixes 10 regression tests.
11100        
11101        SunSpider reports no regression.
11102
11103        * kjs/JSActivation.cpp:
11104        (KJS::JSActivation::createArgumentsObject): Reconstruct an arguments
11105        List to pass to the arguments object constructor.
11106
11107        * JavaScriptCore.xcodeproj/project.pbxproj:
11108        * kjs/AllInOneFile.cpp: Removed JSActivation.cpp from AllInOneFile.cpp
11109        because that seems to make GCC happy. (Previously, I had added
11110        JSActivation.cpp to AllInOneFile.cpp because *that* seemed to make GCC
11111        happy. So it goes.)
11112
111132008-04-28  Geoffrey Garen  <ggaren@apple.com>
11114
11115        Reviewed by Maciej Stachowiak.
11116        
11117        Groundwork for more handling of "arguments". I'm not checking in the
11118        actual handling of "arguments" yet, because it still needs a little
11119        fiddling to avoid a performance regression.
11120        
11121        SunSpider reports no change.
11122
11123        * VM/Machine.cpp:
11124        (KJS::initializeCallFrame): Put argc in the register file, so the
11125        arguments object can find it later, to determine arguments.length.
11126
11127        * kjs/nodes.h:
11128        (KJS::FunctionBodyNode::): Added a special code accessor for when you
11129        know the code has already been generated, and you don't have a scopeChain
11130        to supply for potential code generation. (This is the case when the
11131        activation object creates the arguments object.)
11132
111332008-04-28  Oliver Hunt  <oliver@apple.com>
11134
11135        Reviewed by Geoff.
11136
11137        Replace unsafe use of auto_ptr in Vector with manual memory
11138        management.
11139
11140        * VM/RegisterFileStack.cpp:
11141        (KJS::RegisterFileStack::~RegisterFileStack):
11142        (KJS::RegisterFileStack::popRegisterFile):
11143        * VM/RegisterFileStack.h:
11144
111452008-04-27  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11146
11147        Reviewed by Maciej.
11148
11149        Bug 18746: SQUIRRELFISH: indirect eval used when direct eval should be used
11150        <https://bugs.webkit.org/show_bug.cgi?id=18746>
11151
11152        Change the base to the correct value of the 'this' object after the direct
11153        eval test instead of before.
11154
11155        Fixes 5 layout tests.
11156
11157        * VM/Machine.cpp:
11158        (KJS::Machine::privateExecute):
11159        * kjs/nodes.cpp:
11160        (KJS::EvalFunctionCallNode::emitCode):
11161
111622008-04-26  Maciej Stachowiak  <mjs@apple.com>
11163
11164        Reviewed by Oliver.
11165        
11166        - document all property getting, setting and deleting opcodes
11167        
11168        (And fix function parameter names to match corresponding opcode parameter names.)
11169
11170        * VM/CodeGenerator.cpp:
11171        (KJS::CodeGenerator::emitResolve):
11172        (KJS::CodeGenerator::emitResolveBase):
11173        (KJS::CodeGenerator::emitResolveBaseAndProperty):
11174        (KJS::CodeGenerator::emitResolveBaseAndFunc):
11175        (KJS::CodeGenerator::emitGetPropId):
11176        (KJS::CodeGenerator::emitPutPropId):
11177        (KJS::CodeGenerator::emitDeletePropId):
11178        (KJS::CodeGenerator::emitPutPropVal):
11179        * VM/CodeGenerator.h:
11180        * VM/Machine.cpp:
11181        (KJS::resolve):
11182        (KJS::resolveBase):
11183        (KJS::resolveBaseAndProperty):
11184        (KJS::resolveBaseAndFunc):
11185        (KJS::Machine::privateExecute):
11186        * kjs/nodes.cpp:
11187        (KJS::ResolveNode::emitCode):
11188        (KJS::ArrayNode::emitCode):
11189        (KJS::PropertyListNode::emitCode):
11190        (KJS::BracketAccessorNode::emitCode):
11191        (KJS::EvalFunctionCallNode::emitCode):
11192        (KJS::FunctionCallResolveNode::emitCode):
11193        (KJS::FunctionCallBracketNode::emitCode):
11194        (KJS::PostIncResolveNode::emitCode):
11195        (KJS::PostDecResolveNode::emitCode):
11196        (KJS::PostIncBracketNode::emitCode):
11197        (KJS::PostDecBracketNode::emitCode):
11198        (KJS::PostIncDotNode::emitCode):
11199        (KJS::PostDecDotNode::emitCode):
11200        (KJS::DeleteResolveNode::emitCode):
11201        (KJS::TypeOfResolveNode::emitCode):
11202        (KJS::PreIncResolveNode::emitCode):
11203        (KJS::PreDecResolveNode::emitCode):
11204        (KJS::PreIncBracketNode::emitCode):
11205        (KJS::PreDecBracketNode::emitCode):
11206        (KJS::AssignResolveNode::emitCode):
11207        (KJS::AssignDotNode::emitCode):
11208        (KJS::ReadModifyDotNode::emitCode):
11209        (KJS::AssignBracketNode::emitCode):
11210        (KJS::ReadModifyBracketNode::emitCode):
11211        (KJS::ConstDeclNode::emitCodeSingle):
11212
112132008-04-26  Oliver Hunt  <oliver@apple.com>
11214
11215        Reviewed by Maciej.
11216
11217        Bug 18628: SQUIRRELFISH: need to support recursion limit
11218        <https://bugs.webkit.org/show_bug.cgi?id=18628>
11219
11220        Basically completes recursion limiting.  There is still some
11221        tuning we may want to do to make things better in the face of
11222        very bad code, but certainly nothing worse than anything already
11223        possible in trunk.
11224
11225        Also fixes a WebKit test by fixing the exception text :D
11226
11227        * JavaScriptCore.exp:
11228        * VM/ExceptionHelpers.cpp:
11229        * VM/Machine.cpp:
11230        (KJS::Machine::execute):
11231        * VM/RegisterFile.cpp:
11232        (KJS::RegisterFile::growBuffer):
11233        (KJS::RegisterFile::addGlobalSlots):
11234        * VM/RegisterFile.h:
11235        (KJS::RegisterFile::grow):
11236        (KJS::RegisterFile::uncheckedGrow):
11237        * VM/RegisterFileStack.cpp:
11238        (KJS::RegisterFileStack::pushRegisterFile):
11239        * VM/RegisterFileStack.h:
11240
112412008-04-25  Oliver Hunt  <oliver@apple.com>
11242
11243        Reviewed by Geoff.
11244
11245        Bug 18628: SQUIRRELFISH: need to support recursion limit
11246        <https://bugs.webkit.org/show_bug.cgi?id=18628>
11247
11248        Put a limit on the level of reentry recursion.  128 levels of re-entrant recursion
11249        seems reasonable as it is greater than the old eval limit, and a long way short of
11250        the reentry depth needed to overflow the stack.
11251
11252        * VM/Machine.cpp:
11253        (KJS::Machine::execute):
11254        * VM/Machine.h:
11255
112562008-04-25  Geoffrey Garen  <ggaren@apple.com>
11257
11258        Reviewed by Sam Weinig.
11259        
11260        A tiny bit of cleanup to the regexp code.
11261        
11262        Removed some static_cast.
11263        
11264        Removed createRegExpImp because it's no longer used.
11265
112662008-04-25  Oliver Hunt  <oliver@apple.com>
11267
11268        Reviewed by Maciej.
11269
11270        Bug 18736: SQUIRRELFISH: switch statements with no default have incorrect codegen
11271        <https://bugs.webkit.org/show_bug.cgi?id=18736>
11272
11273        Ensure the "default" target is correct in the absence of an explicit default handler.
11274
11275        * kjs/nodes.cpp:
11276        (KJS::CaseBlockNode::emitCodeForBlock):
11277
112782008-04-25  Oliver Hunt  <oliver@apple.com>
11279
11280        Reviewed by Maciej.
11281
11282        Bug 18628: SQUIRRELFISH: need to support recursion limit
11283        <https://bugs.webkit.org/show_bug.cgi?id=18628>
11284
11285        More bounds checking.
11286
11287        * VM/Machine.cpp:
11288        (KJS::Machine::execute):
11289        * VM/RegisterFile.cpp:
11290        (KJS::RegisterFile::growBuffer):
11291        * VM/RegisterFile.h:
11292
112932008-04-25  Maciej Stachowiak  <mjs@apple.com>
11294
11295        Reviewed by Oliver.
11296        
11297        - fix signal catching magic
11298        
11299        The signal handlers are restored to _exit but are only set when
11300        running under run-javascriptcore-tests. fprintf from a signal
11301        handler is not safe.
11302
11303        * kjs/testkjs.cpp:
11304        (main):
11305        (parseArguments):
11306        * tests/mozilla/jsDriver.pl:
11307
113082008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11309
11310        Reviewed by Maciej.
11311
11312        Bug 18732: SQUIRRELFISH: exceptions thrown by native constructors are ignored
11313        <https://bugs.webkit.org/show_bug.cgi?id=18732>
11314
11315        Fixes another regression test.
11316
11317        * VM/Machine.cpp:
11318        (KJS::Machine::privateExecute):
11319
113202008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11321
11322        Reviewed by Maciej.
11323
11324        Bug 18728: SQUIRRELFISH: invalid regular expression constants should throw exceptions
11325        <https://bugs.webkit.org/show_bug.cgi?id=18728>
11326
11327        Fixes another regression test.
11328
11329        * kjs/nodes.cpp:
11330        (KJS::RegExpNode::emitCode):
11331
113322008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11333
11334        Reviewed by Geoffrey Garen.
11335
11336        Bug 18735: SQUIRRELFISH: closures are sometimes given an incorrect 'this' value when called
11337        <https://bugs.webkit.org/show_bug.cgi?id=18735>
11338
11339        The overloaded toThisObject method was not copied over to JSActivation.
11340
11341        Fixes two regression tests.
11342
11343        * kjs/JSActivation.cpp:
11344        (KJS::JSActivation::toThisObject):
11345        * kjs/JSActivation.h:
11346
113472008-04-24  Geoffrey Garen  <ggaren@apple.com>
11348
11349        Reviewed by Oliver Hunt.
11350        
11351        Added support for arguments.callee.
11352
113532008-04-24  Oliver Hunt  <oliver@apple.com>
11354
11355        Reviewed by Maciej.
11356
11357        Bug 18628: SQUIRRELFISH: need to support recursion limit
11358        <https://bugs.webkit.org/show_bug.cgi?id=18628>
11359
11360        Partial fix -- this gets us some of the required bounds checking, but not
11361        complete coverage.  But it does manage to do them without regressing :D
11362
11363        * VM/ExceptionHelpers.cpp:
11364        (KJS::createError):
11365        (KJS::createStackOverflowError):
11366        * VM/ExceptionHelpers.h:
11367        * VM/Machine.cpp:
11368        (KJS::slideRegisterWindowForCall):
11369        (KJS::Machine::execute):
11370        (KJS::Machine::privateExecute):
11371        * VM/RegisterFile.cpp:
11372        * VM/RegisterFile.h:
11373        (KJS::RegisterFile::):
11374        (KJS::RegisterFile::RegisterFile):
11375        (KJS::RegisterFile::grow):
11376
113772008-04-24  Geoffrey Garen  <ggaren@apple.com>
11378
11379        Reviewed by Oliver Hunt.
11380        
11381        A tiny bit more handling of "arguments": create a real, but mostly
11382        hollow, arguments object.
11383        
11384        Fixes 2 regression tests.
11385
113862008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11387
11388        Reviewed by Oliver.
11389
11390        Bug 18717: SQUIRRELFISH: eval returns the wrong value for a variable declaration statement
11391        <https://bugs.webkit.org/show_bug.cgi?id=18717>
11392
11393        Fixes a regression test, but exposes the failure of another due to the
11394        lack of getters and setters.
11395
11396        * kjs/nodes.cpp:
11397        (KJS::ConstDeclNode::emitCodeSingle):
11398        (KJS::ConstDeclNode::emitCode):
11399        (KJS::ConstStatementNode::emitCode):
11400        (KJS::VarStatementNode::emitCode):
11401        * kjs/nodes.h:
11402
114032008-04-24  Geoffrey Garen  <ggaren@apple.com>
11404
11405        Reviewed by Sam Weinig.
11406        
11407        Print a CRASH statement when crashing, so test failures are not a
11408        mystery.
11409
11410        * kjs/testkjs.cpp:
11411        (handleCrash):
11412        (main):
11413
114142008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11415
11416        Reviewed by Geoffrey Garen.
11417
11418        Bug 18716: SQUIRRELFISH: typeof should return undefined for an undefined variable reference
11419        <https://bugs.webkit.org/show_bug.cgi?id=18716>
11420
11421        This fixes 2 more regression tests.
11422
11423        * kjs/nodes.cpp:
11424        (KJS::TypeOfResolveNode::emitCode):
11425
114262008-04-24  Geoffrey Garen  <ggaren@apple.com>
11427
11428        Reviewed by Sam Weinig.
11429        
11430        Put the callee in the call frame.
11431        
11432        Necessary in order to support "arguments" and "arguments.callee".
11433
11434        Also fixes a latent GC bug, where an executing function could be
11435        subject to GC if the register holding it were overwritten. Here's
11436        an example that would have caused problems:
11437        
11438        function f()
11439        {
11440            // Flood the machine stack to eliminate any old pointers to f.
11441            g.call({});
11442            
11443            // Overwrite f in the register file.
11444            f = 1;
11445
11446            // Force a GC.
11447            for (var i = 0; i < 5000; ++i) {
11448                ({});
11449            }
11450            
11451            // Welcome to crash-ville.
11452        }
11453
11454        function g()
11455        {
11456        }
11457
11458        f();
11459
11460        * VM/Machine.h: Changed the order of arguments to
11461        execute(FunctionBodyNode*...) to match the other execute functions.
11462        * kjs/function.cpp: Updated to match new argument requirements from
11463        execute(FunctionBodyNode*...). Renamed newObj to thisObj to match the
11464        rest of JavaScriptCore.
11465
11466        SunSpider reports no change.
11467
114682008-04-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
11469
11470        Reviewed by Maciej.
11471
11472        Bug 18707: SQUIRRELFISH: eval always performs toString() on its argument
11473        <https://bugs.webkit.org/show_bug.cgi?id=18707>
11474
11475        This fixes 4 more regression tests.
11476
11477        * VM/Machine.cpp:
11478        (KJS::eval):
11479
114802008-04-23  Maciej Stachowiak  <mjs@apple.com>
11481
11482        Reviewed by Oliver.
11483        
11484        - fix logic bug in SegmentedVector::grow which would sometimes fail to resize a segment when needed
11485        
11486        Fixes 3 JSC tests.
11487
11488        * VM/SegmentedVector.h:
11489        (KJS::SegmentedVector::grow):
11490
114912008-04-23  Geoffrey Garen  <ggaren@apple.com>
11492
11493        Reviewed by Maciej Stachowiak.
11494        
11495        Degenerate handling of "arguments" as a property of the activation
11496        object. Currently, we just return a vanilla object.
11497        
11498        SunSpider reports no change.
11499
11500        Fixes:
11501
11502        ecma_3/Function/regress-94506.js.
11503        
11504        Reveals to have been secretly broken:
11505
11506        ecma_3/Function/15.3.4.3-1.js
11507        ecma_3/Function/15.3.4.4-1.js
11508        
11509        These tests were passing incorrectly. testkjs creates a global array
11510        named "arguments" to hold command-line arguments. That array was
11511        tricking these tests into thinking that an arguments object with length
11512        0 had been created. Since our new vanilla object shadows the global
11513        property named arguments, that object no longer fools these tests into
11514        passing.
11515        
11516        Net change: +1 failing test.
11517
11518        * kjs/AllInOneFile.cpp: Had to put JSActivation.cpp into AllInOneFile.cpp
11519        to solve a surprising 8.6% regression in bitops-3bit-bits-in-byte.
11520
115212008-04-23  Maciej Stachowiak  <mjs@apple.com>
11522
11523        Reviewed by Oliver.
11524        
11525        - save and restore callFrame
11526
11527        * VM/Machine.cpp:
11528        (KJS::slideRegisterWindowForCall):
11529        (KJS::Machine::execute):
11530        (KJS::Machine::privateExecute):
11531        * kjs/testkjs.cpp:
11532        (main):
11533
115342008-04-23  Geoffrey Garen  <ggaren@apple.com>
11535
11536        Reviewed by Maciej Stachowiak.
11537        
11538        Fixed scopes for named function expressions.
11539        
11540        Fixes one regression test.
11541        
11542        Two changes here:
11543        
11544        (1) The function's name is supposed to have attributes DontDelete,
11545        ReadOnly, regardless of the type of code executing.
11546        
11547        (2) Push the name object on the function's scope chain, rather than
11548        the ExecState's scope chain because, well, that's where it belongs.
11549
115502008-04-23  Geoffrey Garen  <ggaren@apple.com>
11551
11552        Reviewed by Oliver Hunt.
11553        
11554        Inlined JSObject::putDirect, for a .4% SunSpider speedup.
11555        
11556        I did this as a first step toward removing nodes.cpp from
11557        AllInOneFile.cpp, but I'm putting that larger project aside for now.
11558
115592008-04-23  Maciej Stachowiak  <mjs@apple.com>
11560
11561        Rubber stamped by Geoff.
11562        
11563        - add OldInterpreterExecState class and use it in dead code
11564        
11565        This will allow removing things from the real ExecState class
11566        without having to figure out how to remove all this code without
11567        getting a perf regression.
11568
11569        * kjs/nodes.cpp:
11570        (KJS::ExpressionNode::evaluateToNumber):
11571        (KJS::ExpressionNode::evaluateToBoolean):
11572        (KJS::ExpressionNode::evaluateToInt32):
11573        (KJS::ExpressionNode::evaluateToUInt32):
11574        (KJS::Node::setErrorCompletion):
11575        (KJS::Node::throwError):
11576        (KJS::Node::throwUndefinedVariableError):
11577        (KJS::Node::handleException):
11578        (KJS::Node::rethrowException):
11579        (KJS::BreakpointCheckStatement::execute):
11580        (KJS::BreakpointCheckStatement::optimizeVariableAccess):
11581        (KJS::NullNode::evaluate):
11582        (KJS::FalseNode::evaluate):
11583        (KJS::TrueNode::evaluate):
11584        (KJS::NumberNode::evaluate):
11585        (KJS::NumberNode::evaluateToNumber):
11586        (KJS::NumberNode::evaluateToBoolean):
11587        (KJS::NumberNode::evaluateToInt32):
11588        (KJS::NumberNode::evaluateToUInt32):
11589        (KJS::ImmediateNumberNode::evaluate):
11590        (KJS::ImmediateNumberNode::evaluateToInt32):
11591        (KJS::ImmediateNumberNode::evaluateToUInt32):
11592        (KJS::StringNode::evaluate):
11593        (KJS::StringNode::evaluateToNumber):
11594        (KJS::StringNode::evaluateToBoolean):
11595        (KJS::RegExpNode::evaluate):
11596        (KJS::ThisNode::evaluate):
11597        (KJS::ResolveNode::inlineEvaluate):
11598        (KJS::ResolveNode::evaluate):
11599        (KJS::ResolveNode::evaluateToNumber):
11600        (KJS::ResolveNode::evaluateToBoolean):
11601        (KJS::ResolveNode::evaluateToInt32):
11602        (KJS::ResolveNode::evaluateToUInt32):
11603        (KJS::getSymbolTableEntry):
11604        (KJS::ResolveNode::optimizeVariableAccess):
11605        (KJS::LocalVarAccessNode::inlineEvaluate):
11606        (KJS::LocalVarAccessNode::evaluate):
11607        (KJS::LocalVarAccessNode::evaluateToNumber):
11608        (KJS::LocalVarAccessNode::evaluateToBoolean):
11609        (KJS::LocalVarAccessNode::evaluateToInt32):
11610        (KJS::LocalVarAccessNode::evaluateToUInt32):
11611        (KJS::getNonLocalSymbol):
11612        (KJS::ScopedVarAccessNode::inlineEvaluate):
11613        (KJS::ScopedVarAccessNode::evaluate):
11614        (KJS::ScopedVarAccessNode::evaluateToNumber):
11615        (KJS::ScopedVarAccessNode::evaluateToBoolean):
11616        (KJS::ScopedVarAccessNode::evaluateToInt32):
11617        (KJS::ScopedVarAccessNode::evaluateToUInt32):
11618        (KJS::NonLocalVarAccessNode::inlineEvaluate):
11619        (KJS::NonLocalVarAccessNode::evaluate):
11620        (KJS::NonLocalVarAccessNode::evaluateToNumber):
11621        (KJS::NonLocalVarAccessNode::evaluateToBoolean):
11622        (KJS::NonLocalVarAccessNode::evaluateToInt32):
11623        (KJS::NonLocalVarAccessNode::evaluateToUInt32):
11624        (KJS::ElementNode::optimizeVariableAccess):
11625        (KJS::ElementNode::evaluate):
11626        (KJS::ArrayNode::optimizeVariableAccess):
11627        (KJS::ArrayNode::evaluate):
11628        (KJS::ObjectLiteralNode::optimizeVariableAccess):
11629        (KJS::ObjectLiteralNode::evaluate):
11630        (KJS::PropertyListNode::optimizeVariableAccess):
11631        (KJS::PropertyListNode::evaluate):
11632        (KJS::PropertyNode::optimizeVariableAccess):
11633        (KJS::PropertyNode::evaluate):
11634        (KJS::BracketAccessorNode::optimizeVariableAccess):
11635        (KJS::BracketAccessorNode::inlineEvaluate):
11636        (KJS::BracketAccessorNode::evaluate):
11637        (KJS::BracketAccessorNode::evaluateToNumber):
11638        (KJS::BracketAccessorNode::evaluateToBoolean):
11639        (KJS::BracketAccessorNode::evaluateToInt32):
11640        (KJS::BracketAccessorNode::evaluateToUInt32):
11641        (KJS::DotAccessorNode::optimizeVariableAccess):
11642        (KJS::DotAccessorNode::inlineEvaluate):
11643        (KJS::DotAccessorNode::evaluate):
11644        (KJS::DotAccessorNode::evaluateToNumber):
11645        (KJS::DotAccessorNode::evaluateToBoolean):
11646        (KJS::DotAccessorNode::evaluateToInt32):
11647        (KJS::DotAccessorNode::evaluateToUInt32):
11648        (KJS::ArgumentListNode::optimizeVariableAccess):
11649        (KJS::ArgumentListNode::evaluateList):
11650        (KJS::ArgumentsNode::optimizeVariableAccess):
11651        (KJS::NewExprNode::optimizeVariableAccess):
11652        (KJS::NewExprNode::inlineEvaluate):
11653        (KJS::NewExprNode::evaluate):
11654        (KJS::NewExprNode::evaluateToNumber):
11655        (KJS::NewExprNode::evaluateToBoolean):
11656        (KJS::NewExprNode::evaluateToInt32):
11657        (KJS::NewExprNode::evaluateToUInt32):
11658        (KJS::ExpressionNode::resolveAndCall):
11659        (KJS::EvalFunctionCallNode::optimizeVariableAccess):
11660        (KJS::EvalFunctionCallNode::evaluate):
11661        (KJS::FunctionCallValueNode::optimizeVariableAccess):
11662        (KJS::FunctionCallValueNode::evaluate):
11663        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
11664        (KJS::FunctionCallResolveNode::inlineEvaluate):
11665        (KJS::FunctionCallResolveNode::evaluate):
11666        (KJS::FunctionCallResolveNode::evaluateToNumber):
11667        (KJS::FunctionCallResolveNode::evaluateToBoolean):
11668        (KJS::FunctionCallResolveNode::evaluateToInt32):
11669        (KJS::FunctionCallResolveNode::evaluateToUInt32):
11670        (KJS::LocalVarFunctionCallNode::inlineEvaluate):
11671        (KJS::LocalVarFunctionCallNode::evaluate):
11672        (KJS::LocalVarFunctionCallNode::evaluateToNumber):
11673        (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
11674        (KJS::LocalVarFunctionCallNode::evaluateToInt32):
11675        (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
11676        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
11677        (KJS::ScopedVarFunctionCallNode::evaluate):
11678        (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
11679        (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
11680        (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
11681        (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
11682        (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
11683        (KJS::NonLocalVarFunctionCallNode::evaluate):
11684        (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
11685        (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
11686        (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
11687        (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
11688        (KJS::FunctionCallBracketNode::optimizeVariableAccess):
11689        (KJS::FunctionCallBracketNode::evaluate):
11690        (KJS::FunctionCallDotNode::optimizeVariableAccess):
11691        (KJS::FunctionCallDotNode::inlineEvaluate):
11692        (KJS::FunctionCallDotNode::evaluate):
11693        (KJS::FunctionCallDotNode::evaluateToNumber):
11694        (KJS::FunctionCallDotNode::evaluateToBoolean):
11695        (KJS::FunctionCallDotNode::evaluateToInt32):
11696        (KJS::FunctionCallDotNode::evaluateToUInt32):
11697        (KJS::PostIncResolveNode::optimizeVariableAccess):
11698        (KJS::PostIncResolveNode::evaluate):
11699        (KJS::PostIncLocalVarNode::evaluate):
11700        (KJS::PostDecResolveNode::optimizeVariableAccess):
11701        (KJS::PostDecResolveNode::evaluate):
11702        (KJS::PostDecLocalVarNode::evaluate):
11703        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
11704        (KJS::PostDecLocalVarNode::evaluateToNumber):
11705        (KJS::PostDecLocalVarNode::evaluateToBoolean):
11706        (KJS::PostDecLocalVarNode::evaluateToInt32):
11707        (KJS::PostDecLocalVarNode::evaluateToUInt32):
11708        (KJS::PostfixBracketNode::optimizeVariableAccess):
11709        (KJS::PostIncBracketNode::evaluate):
11710        (KJS::PostDecBracketNode::evaluate):
11711        (KJS::PostfixDotNode::optimizeVariableAccess):
11712        (KJS::PostIncDotNode::evaluate):
11713        (KJS::PostDecDotNode::evaluate):
11714        (KJS::PostfixErrorNode::evaluate):
11715        (KJS::DeleteResolveNode::optimizeVariableAccess):
11716        (KJS::DeleteResolveNode::evaluate):
11717        (KJS::LocalVarDeleteNode::evaluate):
11718        (KJS::DeleteBracketNode::optimizeVariableAccess):
11719        (KJS::DeleteBracketNode::evaluate):
11720        (KJS::DeleteDotNode::optimizeVariableAccess):
11721        (KJS::DeleteDotNode::evaluate):
11722        (KJS::DeleteValueNode::optimizeVariableAccess):
11723        (KJS::DeleteValueNode::evaluate):
11724        (KJS::VoidNode::optimizeVariableAccess):
11725        (KJS::VoidNode::evaluate):
11726        (KJS::TypeOfValueNode::optimizeVariableAccess):
11727        (KJS::TypeOfResolveNode::optimizeVariableAccess):
11728        (KJS::LocalVarTypeOfNode::evaluate):
11729        (KJS::TypeOfResolveNode::evaluate):
11730        (KJS::TypeOfValueNode::evaluate):
11731        (KJS::PreIncResolveNode::optimizeVariableAccess):
11732        (KJS::PreIncLocalVarNode::evaluate):
11733        (KJS::PreIncResolveNode::evaluate):
11734        (KJS::PreDecResolveNode::optimizeVariableAccess):
11735        (KJS::PreDecLocalVarNode::evaluate):
11736        (KJS::PreDecResolveNode::evaluate):
11737        (KJS::PreIncConstNode::evaluate):
11738        (KJS::PreDecConstNode::evaluate):
11739        (KJS::PostIncConstNode::evaluate):
11740        (KJS::PostDecConstNode::evaluate):
11741        (KJS::PrefixBracketNode::optimizeVariableAccess):
11742        (KJS::PreIncBracketNode::evaluate):
11743        (KJS::PreDecBracketNode::evaluate):
11744        (KJS::PrefixDotNode::optimizeVariableAccess):
11745        (KJS::PreIncDotNode::evaluate):
11746        (KJS::PreDecDotNode::evaluate):
11747        (KJS::PrefixErrorNode::evaluate):
11748        (KJS::UnaryPlusNode::optimizeVariableAccess):
11749        (KJS::UnaryPlusNode::evaluate):
11750        (KJS::UnaryPlusNode::evaluateToBoolean):
11751        (KJS::UnaryPlusNode::evaluateToNumber):
11752        (KJS::UnaryPlusNode::evaluateToInt32):
11753        (KJS::UnaryPlusNode::evaluateToUInt32):
11754        (KJS::NegateNode::optimizeVariableAccess):
11755        (KJS::NegateNode::evaluate):
11756        (KJS::NegateNode::evaluateToNumber):
11757        (KJS::BitwiseNotNode::optimizeVariableAccess):
11758        (KJS::BitwiseNotNode::inlineEvaluateToInt32):
11759        (KJS::BitwiseNotNode::evaluate):
11760        (KJS::BitwiseNotNode::evaluateToNumber):
11761        (KJS::BitwiseNotNode::evaluateToBoolean):
11762        (KJS::BitwiseNotNode::evaluateToInt32):
11763        (KJS::BitwiseNotNode::evaluateToUInt32):
11764        (KJS::LogicalNotNode::optimizeVariableAccess):
11765        (KJS::LogicalNotNode::evaluate):
11766        (KJS::LogicalNotNode::evaluateToBoolean):
11767        (KJS::MultNode::optimizeVariableAccess):
11768        (KJS::MultNode::inlineEvaluateToNumber):
11769        (KJS::MultNode::evaluate):
11770        (KJS::MultNode::evaluateToNumber):
11771        (KJS::MultNode::evaluateToBoolean):
11772        (KJS::MultNode::evaluateToInt32):
11773        (KJS::MultNode::evaluateToUInt32):
11774        (KJS::DivNode::optimizeVariableAccess):
11775        (KJS::DivNode::inlineEvaluateToNumber):
11776        (KJS::DivNode::evaluate):
11777        (KJS::DivNode::evaluateToNumber):
11778        (KJS::DivNode::evaluateToInt32):
11779        (KJS::DivNode::evaluateToUInt32):
11780        (KJS::ModNode::optimizeVariableAccess):
11781        (KJS::ModNode::inlineEvaluateToNumber):
11782        (KJS::ModNode::evaluate):
11783        (KJS::ModNode::evaluateToNumber):
11784        (KJS::ModNode::evaluateToBoolean):
11785        (KJS::ModNode::evaluateToInt32):
11786        (KJS::ModNode::evaluateToUInt32):
11787        (KJS::throwOutOfMemoryErrorToNumber):
11788        (KJS::addSlowCase):
11789        (KJS::addSlowCaseToNumber):
11790        (KJS::add):
11791        (KJS::addToNumber):
11792        (KJS::AddNode::optimizeVariableAccess):
11793        (KJS::AddNode::evaluate):
11794        (KJS::AddNode::inlineEvaluateToNumber):
11795        (KJS::AddNode::evaluateToNumber):
11796        (KJS::AddNode::evaluateToInt32):
11797        (KJS::AddNode::evaluateToUInt32):
11798        (KJS::AddNumbersNode::inlineEvaluateToNumber):
11799        (KJS::AddNumbersNode::evaluate):
11800        (KJS::AddNumbersNode::evaluateToNumber):
11801        (KJS::AddNumbersNode::evaluateToInt32):
11802        (KJS::AddNumbersNode::evaluateToUInt32):
11803        (KJS::AddStringsNode::evaluate):
11804        (KJS::AddStringLeftNode::evaluate):
11805        (KJS::AddStringRightNode::evaluate):
11806        (KJS::SubNode::optimizeVariableAccess):
11807        (KJS::SubNode::inlineEvaluateToNumber):
11808        (KJS::SubNode::evaluate):
11809        (KJS::SubNode::evaluateToNumber):
11810        (KJS::SubNode::evaluateToInt32):
11811        (KJS::SubNode::evaluateToUInt32):
11812        (KJS::LeftShiftNode::optimizeVariableAccess):
11813        (KJS::LeftShiftNode::inlineEvaluateToInt32):
11814        (KJS::LeftShiftNode::evaluate):
11815        (KJS::LeftShiftNode::evaluateToNumber):
11816        (KJS::LeftShiftNode::evaluateToInt32):
11817        (KJS::LeftShiftNode::evaluateToUInt32):
11818        (KJS::RightShiftNode::optimizeVariableAccess):
11819        (KJS::RightShiftNode::inlineEvaluateToInt32):
11820        (KJS::RightShiftNode::evaluate):
11821        (KJS::RightShiftNode::evaluateToNumber):
11822        (KJS::RightShiftNode::evaluateToInt32):
11823        (KJS::RightShiftNode::evaluateToUInt32):
11824        (KJS::UnsignedRightShiftNode::optimizeVariableAccess):
11825        (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
11826        (KJS::UnsignedRightShiftNode::evaluate):
11827        (KJS::UnsignedRightShiftNode::evaluateToNumber):
11828        (KJS::UnsignedRightShiftNode::evaluateToInt32):
11829        (KJS::UnsignedRightShiftNode::evaluateToUInt32):
11830        (KJS::lessThan):
11831        (KJS::lessThanEq):
11832        (KJS::LessNode::optimizeVariableAccess):
11833        (KJS::LessNode::inlineEvaluateToBoolean):
11834        (KJS::LessNode::evaluate):
11835        (KJS::LessNode::evaluateToBoolean):
11836        (KJS::LessNumbersNode::inlineEvaluateToBoolean):
11837        (KJS::LessNumbersNode::evaluate):
11838        (KJS::LessNumbersNode::evaluateToBoolean):
11839        (KJS::LessStringsNode::inlineEvaluateToBoolean):
11840        (KJS::LessStringsNode::evaluate):
11841        (KJS::LessStringsNode::evaluateToBoolean):
11842        (KJS::GreaterNode::optimizeVariableAccess):
11843        (KJS::GreaterNode::inlineEvaluateToBoolean):
11844        (KJS::GreaterNode::evaluate):
11845        (KJS::GreaterNode::evaluateToBoolean):
11846        (KJS::LessEqNode::optimizeVariableAccess):
11847        (KJS::LessEqNode::inlineEvaluateToBoolean):
11848        (KJS::LessEqNode::evaluate):
11849        (KJS::LessEqNode::evaluateToBoolean):
11850        (KJS::GreaterEqNode::optimizeVariableAccess):
11851        (KJS::GreaterEqNode::inlineEvaluateToBoolean):
11852        (KJS::GreaterEqNode::evaluate):
11853        (KJS::GreaterEqNode::evaluateToBoolean):
11854        (KJS::InstanceOfNode::optimizeVariableAccess):
11855        (KJS::InstanceOfNode::evaluate):
11856        (KJS::InstanceOfNode::evaluateToBoolean):
11857        (KJS::InNode::optimizeVariableAccess):
11858        (KJS::InNode::evaluate):
11859        (KJS::InNode::evaluateToBoolean):
11860        (KJS::EqualNode::optimizeVariableAccess):
11861        (KJS::EqualNode::inlineEvaluateToBoolean):
11862        (KJS::EqualNode::evaluate):
11863        (KJS::EqualNode::evaluateToBoolean):
11864        (KJS::NotEqualNode::optimizeVariableAccess):
11865        (KJS::NotEqualNode::inlineEvaluateToBoolean):
11866        (KJS::NotEqualNode::evaluate):
11867        (KJS::NotEqualNode::evaluateToBoolean):
11868        (KJS::StrictEqualNode::optimizeVariableAccess):
11869        (KJS::StrictEqualNode::inlineEvaluateToBoolean):
11870        (KJS::StrictEqualNode::evaluate):
11871        (KJS::StrictEqualNode::evaluateToBoolean):
11872        (KJS::NotStrictEqualNode::optimizeVariableAccess):
11873        (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
11874        (KJS::NotStrictEqualNode::evaluate):
11875        (KJS::NotStrictEqualNode::evaluateToBoolean):
11876        (KJS::BitAndNode::optimizeVariableAccess):
11877        (KJS::BitAndNode::evaluate):
11878        (KJS::BitAndNode::inlineEvaluateToInt32):
11879        (KJS::BitAndNode::evaluateToNumber):
11880        (KJS::BitAndNode::evaluateToBoolean):
11881        (KJS::BitAndNode::evaluateToInt32):
11882        (KJS::BitAndNode::evaluateToUInt32):
11883        (KJS::BitXOrNode::optimizeVariableAccess):
11884        (KJS::BitXOrNode::inlineEvaluateToInt32):
11885        (KJS::BitXOrNode::evaluate):
11886        (KJS::BitXOrNode::evaluateToNumber):
11887        (KJS::BitXOrNode::evaluateToBoolean):
11888        (KJS::BitXOrNode::evaluateToInt32):
11889        (KJS::BitXOrNode::evaluateToUInt32):
11890        (KJS::BitOrNode::optimizeVariableAccess):
11891        (KJS::BitOrNode::inlineEvaluateToInt32):
11892        (KJS::BitOrNode::evaluate):
11893        (KJS::BitOrNode::evaluateToNumber):
11894        (KJS::BitOrNode::evaluateToBoolean):
11895        (KJS::BitOrNode::evaluateToInt32):
11896        (KJS::BitOrNode::evaluateToUInt32):
11897        (KJS::LogicalAndNode::optimizeVariableAccess):
11898        (KJS::LogicalAndNode::evaluate):
11899        (KJS::LogicalAndNode::evaluateToBoolean):
11900        (KJS::LogicalOrNode::optimizeVariableAccess):
11901        (KJS::LogicalOrNode::evaluate):
11902        (KJS::LogicalOrNode::evaluateToBoolean):
11903        (KJS::ConditionalNode::optimizeVariableAccess):
11904        (KJS::ConditionalNode::evaluate):
11905        (KJS::ConditionalNode::evaluateToBoolean):
11906        (KJS::ConditionalNode::evaluateToNumber):
11907        (KJS::ConditionalNode::evaluateToInt32):
11908        (KJS::ConditionalNode::evaluateToUInt32):
11909        (KJS::valueForReadModifyAssignment):
11910        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
11911        (KJS::AssignResolveNode::optimizeVariableAccess):
11912        (KJS::ReadModifyLocalVarNode::evaluate):
11913        (KJS::AssignLocalVarNode::evaluate):
11914        (KJS::ReadModifyConstNode::evaluate):
11915        (KJS::AssignConstNode::evaluate):
11916        (KJS::ReadModifyResolveNode::evaluate):
11917        (KJS::AssignResolveNode::evaluate):
11918        (KJS::AssignDotNode::optimizeVariableAccess):
11919        (KJS::AssignDotNode::evaluate):
11920        (KJS::ReadModifyDotNode::optimizeVariableAccess):
11921        (KJS::ReadModifyDotNode::evaluate):
11922        (KJS::AssignErrorNode::evaluate):
11923        (KJS::AssignBracketNode::optimizeVariableAccess):
11924        (KJS::AssignBracketNode::evaluate):
11925        (KJS::ReadModifyBracketNode::optimizeVariableAccess):
11926        (KJS::ReadModifyBracketNode::evaluate):
11927        (KJS::CommaNode::optimizeVariableAccess):
11928        (KJS::CommaNode::evaluate):
11929        (KJS::ConstDeclNode::optimizeVariableAccess):
11930        (KJS::ConstDeclNode::handleSlowCase):
11931        (KJS::ConstDeclNode::evaluateSingle):
11932        (KJS::ConstDeclNode::evaluate):
11933        (KJS::ConstStatementNode::optimizeVariableAccess):
11934        (KJS::ConstStatementNode::execute):
11935        (KJS::statementListExecute):
11936        (KJS::BlockNode::optimizeVariableAccess):
11937        (KJS::BlockNode::execute):
11938        (KJS::EmptyStatementNode::execute):
11939        (KJS::ExprStatementNode::optimizeVariableAccess):
11940        (KJS::ExprStatementNode::execute):
11941        (KJS::VarStatementNode::optimizeVariableAccess):
11942        (KJS::VarStatementNode::execute):
11943        (KJS::IfNode::optimizeVariableAccess):
11944        (KJS::IfNode::execute):
11945        (KJS::IfElseNode::optimizeVariableAccess):
11946        (KJS::IfElseNode::execute):
11947        (KJS::DoWhileNode::optimizeVariableAccess):
11948        (KJS::DoWhileNode::execute):
11949        (KJS::WhileNode::optimizeVariableAccess):
11950        (KJS::WhileNode::execute):
11951        (KJS::ForNode::optimizeVariableAccess):
11952        (KJS::ForNode::execute):
11953        (KJS::ForInNode::optimizeVariableAccess):
11954        (KJS::ForInNode::execute):
11955        (KJS::ContinueNode::execute):
11956        (KJS::BreakNode::execute):
11957        (KJS::ReturnNode::optimizeVariableAccess):
11958        (KJS::ReturnNode::execute):
11959        (KJS::WithNode::optimizeVariableAccess):
11960        (KJS::WithNode::execute):
11961        (KJS::CaseClauseNode::optimizeVariableAccess):
11962        (KJS::CaseClauseNode::evaluate):
11963        (KJS::CaseClauseNode::executeStatements):
11964        (KJS::ClauseListNode::optimizeVariableAccess):
11965        (KJS::CaseBlockNode::optimizeVariableAccess):
11966        (KJS::CaseBlockNode::executeBlock):
11967        (KJS::SwitchNode::optimizeVariableAccess):
11968        (KJS::SwitchNode::execute):
11969        (KJS::LabelNode::optimizeVariableAccess):
11970        (KJS::LabelNode::execute):
11971        (KJS::ThrowNode::optimizeVariableAccess):
11972        (KJS::ThrowNode::execute):
11973        (KJS::TryNode::optimizeVariableAccess):
11974        (KJS::TryNode::execute):
11975        (KJS::ProgramNode::initializeSymbolTable):
11976        (KJS::ScopeNode::optimizeVariableAccess):
11977        (KJS::ProgramNode::processDeclarations):
11978        (KJS::EvalNode::processDeclarations):
11979        (KJS::ProgramNode::execute):
11980        (KJS::EvalNode::execute):
11981        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
11982        (KJS::FuncDeclNode::execute):
11983        (KJS::FuncExprNode::evaluate):
11984        * kjs/nodes.h:
11985        (KJS::Node::):
11986        (KJS::FalseNode::):
11987        (KJS::TrueNode::):
11988        (KJS::ArgumentsNode::):
11989
119902008-04-23  Oliver Hunt  <oliver@apple.com>
11991
11992        Reviewed by Geoff.
11993
11994        Bug 18672: SQUIRRELFISH: codegen fails with a large number of temporaries
11995        <https://bugs.webkit.org/show_bug.cgi?id=18672>
11996
11997        Add a SegmentedVector type, which provides a Vector<T> which maintains
11998        existing memory locations during resize.  This allows dynamically sizing
11999        local, temporary and label "vectors" in CodeGenerator.
12000
12001        * JavaScriptCore.xcodeproj/project.pbxproj:
12002        * VM/CodeGenerator.cpp:
12003        (KJS::CodeGenerator::addVar):
12004        (KJS::CodeGenerator::CodeGenerator):
12005        (KJS::CodeGenerator::newTemporary):
12006        (KJS::CodeGenerator::newLabel):
12007        * VM/CodeGenerator.h:
12008        * VM/SegmentedVector.h: Added.
12009        (KJS::SegmentedVector::SegmentedVector):
12010        (KJS::SegmentedVector::~SegmentedVector):
12011        (KJS::SegmentedVector::last):
12012        (KJS::SegmentedVector::append):
12013        (KJS::SegmentedVector::removeLast):
12014        (KJS::SegmentedVector::size):
12015        (KJS::SegmentedVector::operator[]):
12016        (KJS::SegmentedVector::resize):
12017        (KJS::SegmentedVector::shrink):
12018        (KJS::SegmentedVector::grow):
12019
120202008-04-23  Geoffrey Garen  <ggaren@apple.com>
12021
12022        Reviewed by Maciej Stachowiak.
12023        
12024        A little refactoring in preparation for supporting 'arguments'.
12025        
12026        Fixes 2 regression tests.
12027
12028        SunSpider reports no change.        
12029
12030        We now check the activation register, instead of the codeBlock, to
12031        determine whether we need to tear off the activation. This is to support
12032        "f.arguments", which will create an activation/arguments pair for f,
12033        even though the needsFullScopeChain flag is false for f's codeBlock.
12034        
12035        The test fixes resulted from calling initializeCallFrame for re-entrant
12036        function code, instead of initializing (not enough) parts of the call
12037        frame by hand.
12038
120392008-04-22  Maciej Stachowiak  <mjs@apple.com>
12040
12041        Reviewed by Sam.
12042        
12043        - propagate the "this" value properly to local eval
12044        
12045        (fixes a measly one regression test)
12046
12047        * VM/CodeBlock.h:
12048        (KJS::CodeBlock::CodeBlock):
12049        (KJS::ProgramCodeBlock::ProgramCodeBlock):
12050        (KJS::EvalCodeBlock::EvalCodeBlock):
12051        * VM/Machine.cpp:
12052        (KJS::Machine::privateExecute):
12053
120542008-04-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12055
12056        Reviewed by Maciej.
12057
12058        Add support for function declarations in eval code.
12059
12060        (this fixes 12 more regression tests)
12061        
12062        * VM/CodeBlock.h:
12063        * VM/CodeGenerator.cpp:
12064        (KJS::CodeGenerator::CodeGenerator):
12065        * VM/CodeGenerator.h:
12066        * VM/Machine.cpp:
12067        (KJS::Machine::execute):
12068        * kjs/nodes.cpp:
12069        (KJS::EvalNode::generateCode):
12070
120712008-04-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12072
12073        Reviewed by Oliver.
12074
12075        Implement LabelNode.
12076
12077        * VM/CodeGenerator.cpp:
12078        (KJS::CodeGenerator::pushJumpContext):
12079        (KJS::CodeGenerator::jumpContextForContinue):
12080        (KJS::CodeGenerator::jumpContextForBreak):
12081        * VM/CodeGenerator.h:
12082        * kjs/nodes.cpp:
12083        (KJS::DoWhileNode::emitCode):
12084        (KJS::WhileNode::emitCode):
12085        (KJS::ForNode::emitCode):
12086        (KJS::ForInNode::emitCode):
12087        (KJS::ContinueNode::emitCode):
12088        (KJS::BreakNode::emitCode):
12089        (KJS::SwitchNode::emitCode):
12090        (KJS::LabelNode::emitCode):
12091
120922008-04-22  Geoffrey Garen  <ggaren@apple.com>
12093
12094        Reviewed by Oliver Hunt.
12095        
12096        Fixed crash when unwinding from exceptions inside eval.
12097
12098        * VM/Machine.cpp:
12099        (KJS::Machine::unwindCallFrame): Don't assume that the top of the
12100        current call frame's scope chain is an activation: it can be the global
12101        object, instead.
12102
121032008-04-22  Maciej Stachowiak  <mjs@apple.com>
12104
12105        Reviewed by Geoff.
12106
12107        * kjs/testkjs.cpp:
12108        (main): Convert signals to exit codes, so that crashing tests are
12109        detected as regression test failures.
12110
121112008-04-22  Geoffrey Garen  <ggaren@apple.com>
12112
12113        Reviewed by Oliver Hunt and Maciej Stachowiak.
12114        
12115        Renamed "needsActivation" to "needsFullScopeChain" because lying will
12116        make hair grow on the backs of your hands.
12117
121182008-04-21  Geoffrey Garen  <ggaren@apple.com>
12119
12120        Reviewed by Maciej Stachowiak.
12121        
12122        Fixed ScopeChainNode lifetime problems:
12123        
12124        (1) In "with" and "catch" scopes, we would construct a ScopeChain
12125        object and then jump across its destructor, leaking the ScopeChainNode
12126        we had pushed.
12127
12128        (2) In global and eval scopes, we would fail to initially ref
12129        "scopeChain", causing us to overrelease it later. Now that we ref
12130        "scopeChain" properly, we also need to deref it when the script
12131        terminates.
12132
12133        SunSpider reports a .2% regression, but an earlier round of ScopeChain
12134        refactoring was a .4% speedup, so there.
12135
121362008-04-22  Maciej Stachowiak  <mjs@apple.com>
12137
12138        Reviewed by Alexey.
12139        
12140        - use global object instead of null for "this" on unqualified calls
12141        
12142        This fixes 10 more JSC test regressions.
12143
12144        * VM/Machine.cpp:
12145        (KJS::Machine::privateExecute):
12146
121472008-04-22  Maciej Stachowiak  <mjs@apple.com>
12148
12149        Reviewed by Oliver.
12150        
12151        - throw proper exceptions for objects that don't implement call or construct
12152        
12153        This fixes 21 more JSC test regressions. It is also seemingly an
12154        0.5% progression.
12155
12156        * VM/ExceptionHelpers.cpp:
12157        (KJS::createNotAnObjectError):
12158        (KJS::createNotAConstructorError):
12159        (KJS::createNotAFunctionError):
12160        * VM/ExceptionHelpers.h:
12161        * VM/Machine.cpp:
12162        (KJS::Machine::privateExecute):
12163
121642008-04-21  Oliver Hunt  <oliver@apple.com>
12165
12166        Reviewed by Geoff.
12167
12168        Implement emitCode for ConstDeclNode.
12169
12170        This fixes the crash (assertion) in js1_5/Scope/scope-001.js
12171
12172        * VM/CodeGenerator.cpp:
12173        (KJS::CodeGenerator::registerForLocalConstInit):
12174        * VM/CodeGenerator.h:
12175        * kjs/nodes.cpp:
12176        (KJS::AssignResolveNode::emitCode):
12177        (KJS::ConstDeclNode::emitCodeSingle):
12178        (KJS::ConstDeclNode::emitCode):
12179        (KJS::ConstStatementNode::emitCode):
12180        * kjs/nodes.h:
12181
121822008-04-21  Maciej Stachowiak  <mjs@apple.com>
12183
12184        Reviewed by Sam.
12185        
12186        - add some support for the split window object
12187
12188        This fixes many layout tests.
12189        
12190        * VM/Machine.cpp:
12191        (KJS::resolveBaseAndFunc): Use toThisObject() to ensure we get the
12192        wrapper global, if one exists, as the "this" object.
12193        * kjs/function.cpp:
12194        (KJS::globalFuncEval): Use toGlobalObject() to handle the wrapper
12195        case properly.
12196
121972008-04-21  Maciej Stachowiak  <mjs@apple.com>
12198
12199        Reviewed by Oliver.
12200        
12201        - restore ScopeChain::operator= to avoid crash on many layout tests
12202        
12203        Otherwise, FunctionImp::setScope would cause a reference
12204        underflow. I implemented using the copy construct and swap idiom.
12205
12206        * kjs/scope_chain.h:
12207        (KJS::ScopeChain::swap):
12208        (KJS::ScopeChain::operator=):
12209
122102008-04-21  Oliver Hunt  <oliver@apple.com>
12211
12212        Reviewed by Geoff.
12213
12214        Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
12215        <https://bugs.webkit.org/show_bug.cgi?id=18649>
12216
12217        Allocate a callframe for eval() and initialise with a null codeBlock to
12218        indicate native code.  This prevents the unwinder from clobbering the
12219        register stack.
12220
12221        * VM/Machine.cpp:
12222        (KJS::Machine::execute):
12223
122242008-04-21  Geoffrey Garen  <ggaren@apple.com>
12225
12226        Reviewed by Sam Weinig.
12227        
12228        Removed ScopeChain::push(ScopeChain&) because it was unused. Moved
12229        ScopeChain::print to ScopeChainNode.
12230        
12231        ScopeChain is now nothing more than a resource-handling wrapper around
12232        ScopeChainNode.
12233
122342008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12235
12236        Reviewed by Maciej.
12237
12238        Bug 18671: SquirrelFish: continue inside switch fails
12239        <https://bugs.webkit.org/show_bug.cgi?id=18671>
12240
12241        * VM/CodeGenerator.cpp:
12242        (KJS::CodeGenerator::jumpContextForLabel):
12243        * VM/CodeGenerator.h:
12244        * kjs/nodes.cpp:
12245        (KJS::ContinueNode::emitCode):
12246
122472008-04-21  Geoffrey Garen  <ggaren@apple.com>
12248
12249        Reviewed by Sam Weinig.
12250        
12251        Moved push(JSObject*) and pop() from ScopeChain to ScopeChainNode,
12252        rearranging scope_chain.h a bit.
12253
12254        SunSpider reports no change.
12255
122562008-04-21  Geoffrey Garen  <ggaren@apple.com>
12257
12258        Reviewed by Sam Weinig.
12259        
12260        Moved bottom() from ScopeChain to ScopeChainNode, simplifying it based
12261        on the knowledge that the ScopeChain is never empty.
12262
12263        SunSpider reports no change.
12264
122652008-04-21  Geoffrey Garen  <ggaren@apple.com>
12266
12267        Reviewed by Oliver Hunt.
12268        
12269        Moved begin() and end() from ScopeChain to ScopeChainNode. 
12270        
12271        Also marked a few methods "const".
12272
12273        SunSpider reports no change.
12274        
122752008-04-21  Geoffrey Garen  <ggaren@apple.com>
12276
12277        Reviewed by Maciej Stachowiak.
12278        
12279        Turned ScopeChain::depth into a stand-alone function, and simplified it
12280        a bit. 
12281        
12282        I also moved ScopeChain::depth to Machine.cpp because it doesn't report
12283        the true depth of the ScopeChain -- just the Machine's perspective of
12284        its depth within a given call frame.
12285
12286        SunSpider reports no change.
12287        
122882008-04-21  Geoffrey Garen  <ggaren@apple.com>
12289
12290        Reviewed by Maciej Stachowiak.
12291        
12292        Removed indirection in ScopeChain::ref / ScopeChain::deref.
12293        
12294        SunSpider reports no change.
12295        
12296        * kjs/scope_chain.h:
12297        (KJS::ScopeChain::ScopeChain):
12298        (KJS::ScopeChain::~ScopeChain):
12299        (KJS::ScopeChain::clear):
12300
123012008-04-21  Oliver Hunt  <oliver@apple.com>
12302
12303        Fix debug build
12304
12305        * kjs/nodes.cpp:
12306        (KJS::ConstDeclNode::evaluateSingle):
12307
123082008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12309
12310        Reviewed by Oliver.
12311
12312        Bug 18664: SQUIRRELFISH: correctly throw a SyntaxError when parsing of eval code fails
12313        <https://bugs.webkit.org/show_bug.cgi?id=18664>
12314
12315        Correctly throw a SyntaxError when parsing of eval code fails.
12316
12317        * VM/Machine.cpp:
12318        (KJS::eval):
12319
123202008-04-21  Oliver Hunt  <oliver@apple.com>
12321
12322        Reviewed by Geoff.
12323
12324        Partial fix for Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
12325
12326        Make sure we correct the register state before jumping to vm_throw.
12327
12328        * VM/Machine.cpp:
12329        (KJS::Machine::privateExecute):
12330
123312008-04-21  Geoffrey Garen  <ggaren@apple.com>
12332
12333        Reviewed by Maciej Stachowiak.
12334        
12335        Simplified ScopeChain ref/deref.
12336        
12337        SunSpider reports a .4% speedup.
12338        
12339        * kjs/scope_chain.h:
12340        (KJS::ScopeChainNode::ref): Removed this function because it was nonsense.
12341        ScopeChainNodes are initialized with a refCount of 1, so the loop was
12342        guaranteed to iterate exactly once.
12343
123442008-04-21  Geoffrey Garen  <ggaren@apple.com>
12345
12346        Reviewed by Maciej Stachowiak.
12347        
12348        Removed support for empty ScopeChains.
12349
12350        SunSpider reports no change.
12351
123522008-04-21  Geoffrey Garen  <ggaren@apple.com>
12353
12354        Reviewed by Maciej Stachowiak.
12355        
12356        Removed some completely unused ScopeChain member functions.
12357
12358        SunSpider reports no change.
12359
123602008-04-21  Geoffrey Garen  <ggaren@apple.com>
12361
12362        Reviewed by Maciej Stachowiak.
12363        
12364        Avoid creating unnecessary ScopeChain objects, to reduce refcount churn.
12365
12366        SunSpider reports no change.
12367
123682008-04-21  Maciej Stachowiak  <mjs@apple.com>
12369
12370        Rubber stamped by Alexey.
12371        
12372        Add some braces.x
12373
12374        * kjs/testkjs.cpp:
12375        (runWithScripts):
12376
123772008-04-21  Maciej Stachowiak  <mjs@apple.com>
12378
12379        Reviewed by Oliver.
12380        
12381        - only print "End:" output when -d flag is passed.
12382        
12383        This fixes half of our failing JSC regression tests.
12384
12385        * kjs/testkjs.cpp:
12386        (runWithScripts):
12387
123882008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12389
12390        Reviewed by Maciej.
12391
12392        Add support for variable declarations in eval code.
12393
12394        * VM/CodeBlock.h:
12395        (KJS::EvalCodeBlock::EvalCodeBlock):
12396        * VM/CodeGenerator.cpp:
12397        (KJS::CodeGenerator::CodeGenerator):
12398        * VM/CodeGenerator.h:
12399        * VM/Machine.cpp:
12400        (KJS::Machine::execute):
12401        * VM/Machine.h:
12402        * kjs/function.cpp:
12403        (KJS::globalFuncEval):
12404        * kjs/nodes.cpp:
12405        (KJS::EvalNode::generateCode):
12406        * kjs/nodes.h:
12407        (KJS::EvalNode::):
12408
124092008-04-20  Oliver Hunt  <oliver@apple.com>
12410
12411        Reviewed by Maciej.
12412
12413        Throw exceptions for invalid continue, break, and return statements.
12414
12415        Simple refactoring and extension of Cameron's AssignErrorNode, etc patch
12416
12417        * VM/CodeGenerator.cpp:
12418        (KJS::CodeGenerator::CodeGenerator):
12419        (KJS::CodeGenerator::pushJumpContext):
12420        (KJS::CodeGenerator::popJumpContext):
12421        (KJS::CodeGenerator::jumpContextForLabel):
12422        * VM/CodeGenerator.h:
12423        * kjs/nodes.cpp:
12424        (KJS::Node::emitThrowError):
12425        (KJS::ContinueNode::emitCode):
12426        (KJS::BreakNode::emitCode):
12427        (KJS::ReturnNode::emitCode):
12428        * kjs/nodes.h:
12429
124302008-04-20  Geoffrey Garen  <ggaren@apple.com>
12431
12432        Reviewed by Oliver Hunt.
12433        
12434        Removed Machine.cpp from AllInOneFile.cpp, and manually inlined a few
12435        things that used to be inlined automatically.
12436        
12437        1.9% speedup on SunSpider.
12438        
12439        My hope is that we'll face fewer surprises in Machine.cpp codegen, now
12440        that GCC is making fewer decisions. The speedup seems to confirm that.
12441
124422008-04-20  Oliver Hunt  <oliver@apple.com>
12443
12444        Reviewed by Maciej.
12445
12446        Bug 18642: Iterator context may get placed into the return register, leading to much badness
12447        <https://bugs.webkit.org/show_bug.cgi?id=18642>
12448
12449        To prevent incorrectly reusing what will become the result register for
12450        eval and global code execution, we need to request and ref the destination
12451        in advance of codegen.  Unfortunately this may lead to unnecessary copying,
12452        although in future we can probably limit this.  Curiously SunSpider shows
12453        a progression in a number of tests, although it comes out as a wash overall.
12454
12455        * kjs/nodes.cpp:
12456        (KJS::EvalNode::emitCode):
12457        (KJS::ProgramNode::emitCode):
12458
124592008-04-20  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12460
12461        Reviewed by Maciej.
12462
12463        Add support for AssignErrorNode, PrefixErrorNode, and PostfixErrorNode.
12464
12465        * VM/CodeBlock.cpp:
12466        (KJS::CodeBlock::dump):
12467        * VM/CodeGenerator.cpp:
12468        (KJS::CodeGenerator::emitCreateError):
12469        * VM/CodeGenerator.h:
12470        * VM/Machine.cpp:
12471        (KJS::Machine::privateExecute):
12472        * VM/Opcode.h:
12473        * kjs/nodes.cpp:
12474        (KJS::PostfixErrorNode::emitCode):
12475        (KJS::PrefixErrorNode::emitCode):
12476        (KJS::AssignErrorNode::emitCode):
12477        * kjs/nodes.h:
12478
124792008-04-20  Oliver Hunt  <oliver@apple.com>
12480
12481        Reviewed by Geoff and Mark.
12482
12483        Provide line number information in exceptions
12484
12485        Simple patch, adds line number information metadata to CodeBlock
12486        and a simple method to get the line number responsible for a given
12487        Instruction*.
12488
12489        * VM/CodeBlock.cpp:
12490        (KJS::CodeBlock::lineNumberForVPC):
12491        * VM/CodeBlock.h:
12492        * VM/CodeGenerator.h:
12493        (KJS::CodeGenerator::emitNode):
12494        * VM/Machine.cpp:
12495        (KJS::Machine::throwException):
12496
124972008-04-20  Oliver Hunt  <oliver@apple.com>
12498
12499        Reviewed by Maciej.
12500
12501        Provide "sourceURL" in exceptions
12502
12503        * VM/CodeBlock.h:
12504        * VM/Machine.cpp:
12505        (KJS::Machine::throwException):
12506        * kjs/nodes.cpp:
12507        (KJS::EvalNode::generateCode):
12508        (KJS::ProgramNode::generateCode):
12509
125102008-04-19  Oliver Hunt  <oliver@apple.com>
12511
12512        Reviewed by Maciej.
12513
12514        Don't call emitCode directly on subnodes, instead use CodeGenerator::emitNode
12515
12516        This patch just a preparation for tracking line numbers.
12517
12518        * kjs/nodes.cpp:
12519        (KJS::ObjectLiteralNode::emitCode):
12520        (KJS::PropertyListNode::emitCode):
12521        (KJS::ArgumentListNode::emitCode):
12522        (KJS::TryNode::emitCode):
12523
125242008-04-19  Oliver Hunt  <oliver@apple.com>
12525
12526        Reviewed by Maciej.
12527
12528        Bug 18619: Support continue, break, and return in try .. finally blocks
12529        <https://bugs.webkit.org/show_bug.cgi?id=18619>
12530
12531        This patch replaces the current partial finally support (which uses code
12532        duplication to achieve what it does) with a subroutine based approach.
12533        This has a number of advantages over code duplication:
12534          * Reduced code size
12535          * Simplified exception handling as the finaliser code only exists in 
12536            one place, so no "magic" is needed to get the correct handler for a 
12537            finaliser.
12538          * When we support instruction to line number mapping we won't need to
12539            worry about the dramatic code movement caused by duplication
12540
12541        On the downside it is necessary to add two new opcodes, op_jsr and op_sret
12542        to enter and exit the finaliser subroutines, happily SunSpider reports
12543        a performance progression (gcc amazes me) and ubench reports a wash.
12544
12545        While jsr and sret provide a mechanism that allows us to enter and exit
12546        any arbitrary finaliser we need to, it was still necessary to increase
12547        the amount of information tracked when entering and exiting both finaliser
12548        scopes and dynamic scopes ("with").  This means "scopeDepth" is now
12549        the combination of "finaliserDepth" and "dynamicScopeDepth".  We also
12550        now use a scopeContextStack to ensure that we pop scopes and execute
12551        finalisers in the correct order.  This increases the cost of "with" nodes
12552        during codegen, but it should not be significant enough to effect real
12553        world performance and greatly simplifies codegen for return, break and
12554        continue when interacting with finalisers.
12555
12556        * VM/CodeBlock.cpp:
12557        (KJS::CodeBlock::dump):
12558          Pretty printing of jsr/sret opcodes
12559
12560        * VM/CodeGenerator.cpp:
12561        (KJS::CodeGenerator::CodeGenerator):
12562        (KJS::CodeGenerator::emitPushScope):
12563        (KJS::CodeGenerator::emitPopScope):
12564          Dynamic scopes need to be tracked on the scopeContextStack now
12565
12566        (KJS::CodeGenerator::pushFinallyContext):
12567        (KJS::CodeGenerator::popFinallyContext):
12568          Handle entry and exit from code regions with finalisers.  This is
12569          needed solely to support return, continue and break inside finaliser
12570          regions.
12571
12572        (KJS::CodeGenerator::emitComplexJumpScopes):
12573          Helper function for emitJumpScopes to handle the complex codegen
12574          needed to handle return, continue and break inside a finaliser region
12575
12576        (KJS::CodeGenerator::emitJumpScopes):
12577          Updated to be aware of finalisers, if a cross-scope jump occurs inside
12578          a finaliser we hand off codegen to emitComplexJumpScopes, otherwise
12579          we can handle the normal (trivial) case with a single instruction.
12580
12581        (KJS::CodeGenerator::emitJumpSubroutine):
12582        (KJS::CodeGenerator::emitSubroutineReturn):
12583          Trivial opcode emitter functions.
12584
12585        * VM/CodeGenerator.h:
12586        (KJS::CodeGenerator::scopeDepth):
12587        * VM/Machine.cpp:
12588        (KJS::Machine::privateExecute):
12589          Implement op_jsr and op_sret.
12590
12591        * VM/Opcode.h:
12592          Ad op_jsr and op_sret
12593
12594        * kjs/nodes.cpp:
12595        (KJS::TryNode::emitCode):
12596          Fix codegen for new finaliser model.
12597
125982008-04-17  Mark Rowe  <mrowe@apple.com>
12599
12600        Rubber-stamped by Oliver Hunt.
12601
12602        Remove unnecessary files from testkjs, testapi and minidom targets.
12603
12604        * JavaScriptCore.xcodeproj/project.pbxproj:
12605
126062008-04-17  Geoffrey Garen  <ggaren@apple.com>
12607
12608        Reviewed by Oliver Hunt.
12609        
12610        Fixed ASSERT seen during run-sunspider of a debug build.
12611
12612        * VM/CodeGenerator.h: Made the default codegen buffers bigger. SunSpider
12613        runs all tests in one global environment, so you end up with more than
12614        128 locals. This is just a stop-gap until we code up a real
12615        solution to arbitrary symbol and label limits.
12616
126172008-04-17  Geoffrey Garen  <ggaren@apple.com>
12618
12619        Reviewed by Oliver Hunt.
12620        
12621        Fixed a bug in exception unwinding, where we wouldn't deref the scope
12622        chain in global scope, so we would leak ScopeChainNodes when exceptions
12623        were thrown inside "with" and "catch" scopes.
12624        
12625        Also did some cleanup of the unwinding code along the way.
12626        
12627        Scope chain reference counting is still wrong in a few ways. I thought
12628        I would fix this portion of it first.
12629        
12630        run-sunspider shows no change.
12631
12632        * VM/Machine.cpp:
12633        (KJS::Machine::unwindCallFrame):
12634        (KJS::Machine::throwException):
12635        (KJS::Machine::privateExecute):
12636        * VM/Machine.h:
12637
126382008-04-17  Oliver Hunt  <oliver@apple.com>
12639
12640        Reviewed by Maciej.
12641
12642        Add more exception checking to toNumber conversions
12643
12644        This corrects op_pre_dec, op_negate, op_mod and op_sub.
12645
12646        * VM/Machine.cpp:
12647        (KJS::Machine::privateExecute):
12648
126492008-04-17  Geoffrey Garen  <ggaren@apple.com> and Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12650
12651        Reviewed by Oliver Hunt.
12652        
12653        Behold: eval.
12654        
12655        Introduced a new opcode: op_call_eval. In the normal case, it performs
12656        an eval. In the case where eval has been overridden in some way, it
12657        performs a function call.
12658
12659        * VM/CodeGenerator.h: Added a feature so the code generator knows not
12660        to optimized locals in eval code.
12661        
126622008-04-17  Geoffrey Garen  <ggaren@apple.com>
12663
12664        Reviewed by Sam Weinig.
12665        
12666        Added some ASSERTs to document codegen failures in
12667        run-javascriptcore-tests.
12668        
12669        For all tests, program-level codegen now either succeeds, or fails with
12670        an ASSERT.
12671
12672        * VM/CodeGenerator.cpp:
12673        (KJS::CodeGenerator::addVar):
12674        (KJS::CodeGenerator::CodeGenerator):
12675        (KJS::CodeGenerator::newTemporary):
12676        (KJS::CodeGenerator::newLabel):
12677
126782008-04-17  Geoffrey Garen  <ggaren@apple.com>
12679
12680        Reviewed by Maciej Stachowiak.
12681        
12682        Fixed another case of a dst register being an unreferenced temporary
12683        (caused an ASSERT when running the full sunspider suite).
12684
12685        * kjs/nodes.cpp:
12686        (KJS::CaseBlockNode::emitCodeForBlock):
12687
126882008-04-16  Maciej Stachowiak  <mjs@apple.com>
12689
12690        Reviewed by Geoff.
12691        
12692        - add documentation (and meaningful parameter names) for arithmetic and bitwise binary ops
12693
12694        * VM/CodeBlock.cpp:
12695        (KJS::CodeBlock::dump):
12696        * VM/CodeGenerator.cpp:
12697        (KJS::CodeGenerator::emitMul):
12698        (KJS::CodeGenerator::emitDiv):
12699        (KJS::CodeGenerator::emitMod):
12700        (KJS::CodeGenerator::emitSub):
12701        (KJS::CodeGenerator::emitLeftShift):
12702        (KJS::CodeGenerator::emitRightShift):
12703        (KJS::CodeGenerator::emitUnsignedRightShift):
12704        (KJS::CodeGenerator::emitBitAnd):
12705        (KJS::CodeGenerator::emitBitXOr):
12706        (KJS::CodeGenerator::emitBitOr):
12707        * VM/CodeGenerator.h:
12708        * VM/Machine.cpp:
12709        (KJS::Machine::privateExecute):
12710        * VM/Opcode.h:
12711        * kjs/nodes.cpp:
12712        (KJS::MultNode::emitCode):
12713        (KJS::DivNode::emitCode):
12714        (KJS::ModNode::emitCode):
12715        (KJS::SubNode::emitCode):
12716        (KJS::LeftShiftNode::emitCode):
12717        (KJS::RightShiftNode::emitCode):
12718        (KJS::UnsignedRightShiftNode::emitCode):
12719        (KJS::BitAndNode::emitCode):
12720        (KJS::BitXOrNode::emitCode):
12721        (KJS::BitOrNode::emitCode):
12722        (KJS::emitReadModifyAssignment):
12723        (KJS::ReadModifyResolveNode::emitCode):
12724
127252008-04-16  Oliver Hunt  <oliver@apple.com>
12726
12727        Reviewed by Geoff.
12728
12729        Exception checks for toNumber in op_pre_inc
12730
12731        This is somewhat more convoluted than the simple hadException checks
12732        we currently use.  Instead we use special toNumber conversions that
12733        select between the exception and ordinary vPC.  This allows us to 
12734        remove any branches in the common case (incrementing a number).
12735
12736        * API/JSCallbackObject.h:
12737        * API/JSCallbackObjectFunctions.h:
12738        (KJS::::toNumber):
12739        * ChangeLog:
12740        * JavaScriptCore.exp:
12741        * JavaScriptCore.xcodeproj/project.pbxproj:
12742        * VM/JSPropertyNameIterator.cpp:
12743        (KJS::JSPropertyNameIterator::toNumber):
12744        * VM/JSPropertyNameIterator.h:
12745        * VM/Machine.cpp:
12746        (KJS::Machine::privateExecute):
12747        * VM/Opcode.h:
12748        * kjs/ExecState.cpp:
12749        (KJS::ExecState::ExecState):
12750        * kjs/ExecState.h:
12751        * kjs/JSNotAnObject.cpp:
12752        (KJS::JSNotAnObject::toNumber):
12753        * kjs/JSNotAnObject.h:
12754        * kjs/internal.cpp:
12755        (KJS::StringImp::toNumber):
12756        (KJS::NumberImp::toNumber):
12757        (KJS::GetterSetterImp::toNumber):
12758        * kjs/internal.h:
12759        * kjs/object.cpp:
12760        (KJS::JSObject::toNumber):
12761        * kjs/object.h:
12762        * kjs/value.h:
12763        (KJS::JSValue::toNumber):
12764
127652008-04-16  Maciej Stachowiak  <mjs@apple.com>
12766
12767        Reviewed by Geoff.
12768        
12769        - ensure that activations are kept in a register to protect them from GC
12770        
12771        Also renamed OptionalCalleeScopeChain constant to OptionalCalleeActivation, since
12772        that is what is now kept there, and there is no more need to keep the scope chain in
12773        the register file.
12774
12775        * VM/Machine.cpp:
12776        (KJS::initializeCallFrame):
12777        (KJS::scopeChainForCall):
12778        * VM/Machine.h:
12779        (KJS::Machine::):
12780
127812008-04-16  Geoffrey Garen  <ggaren@apple.com>
12782
12783        Reviewed by Oliver Hunt.
12784        
12785        Made "this" work in program code / global scope.
12786        
12787        The machine can initialize "this" prior to execution because it knows
12788        that, for program code, "this" is always stored in lr1. 
12789
12790        * VM/Machine.cpp:
12791        (KJS::Machine::execute):
12792        * VM/Machine.h:
12793        (KJS::Machine::):
12794        * kjs/interpreter.cpp:
12795        (KJS::Interpreter::evaluate):
12796
127972008-04-16  Geoffrey Garen  <ggaren@apple.com>
12798
12799        Reviewed by Oliver Hunt.
12800        
12801        Fixed a codegen bug when returning from inside a dynamic scope (a with
12802        or catch block): we need to pop any dynamic scope(s) that have been
12803        added so op_ret can find the activation object at the top of the scope
12804        chain.
12805
12806        * kjs/nodes.cpp:
12807        (KJS::ReturnNode::emitCode): If we're returning from inside a dynamic
12808        scope, emit a jmp_scopes to take care of popping any dynamic scope(s)
12809        and then branching to the return instruction.
12810
128112008-04-16  Maciej Stachowiak  <mjs@apple.com>
12812
12813        Reviewed by Geoff.
12814        
12815        - document the add and get_prop_id opcodes
12816        
12817        In addition to adding documentation in comments, I changed
12818        references to register IDs or indices relating to these opcodes to
12819        have meaningful names instead of r0 r1 r2.
12820
12821        * VM/CodeGenerator.cpp:
12822        (KJS::CodeGenerator::emitAdd):
12823        * VM/CodeGenerator.h:
12824        * VM/Machine.cpp:
12825        (KJS::Machine::privateExecute):
12826        * kjs/nodes.cpp:
12827        (KJS::DotAccessorNode::emitCode):
12828        (KJS::FunctionCallDotNode::emitCode):
12829        (KJS::PostIncDotNode::emitCode):
12830        (KJS::PostDecDotNode::emitCode):
12831        (KJS::PreIncDotNode::emitCode):
12832        (KJS::PreDecDotNode::emitCode):
12833        (KJS::AddNode::emitCode):
12834        (KJS::ReadModifyDotNode::emitCode):
12835
128362008-04-15  Geoffrey Garen  <ggaren@apple.com>
12837
12838        Reviewed by Oliver Hunt and Maciej Stachowiak.
12839        
12840        Fixed a codegen bug in with and switch, and added an ASSERT to
12841        make sure it doesn't happen again.
12842        
12843        emitCode() assumes that dst, if non-zero, is either referenced or
12844        non-temporary (i.e., it assumes that newTemporary() will return a
12845        register not equal to dst). Certain callers to emitCode() weren't
12846        guaranteeing that to be so, so temporary register values were being
12847        overwritten.
12848
12849        * VM/CodeGenerator.h:
12850        (KJS::CodeGenerator::emitNode): ASSERT that dst is referenced or non-temporary.
12851
12852        * kjs/nodes.cpp:
12853        (KJS::CommaNode::emitCode): Reference the dst we pass.
12854
12855        (KJS::WithNode::emitCode): No need to pass an explicit dst register.
12856        
12857        (KJS::CaseBlockNode::emitCodeForBlock): No need to pass an explicit dst register.
12858        (KJS::SwitchNode::emitCode): No need to pass an explicit dst register.
12859
12860        * kjs/nodes.h: Made dst the last parameter to emitCodeForBlock, to match
12861        emitCode.
12862
128632008-04-15  Oliver Hunt  <oliver@apple.com>
12864
12865        Reviewed by Maciej.
12866
12867        Bug 18526: Throw exceptions when resolve fails for op_resolve_base_and_func.
12868        <https://bugs.webkit.org/show_bug.cgi?id=18526>
12869
12870        Very simple fix, sunspider shows a 0.7% progression, ubench shows a 0.4% regression.
12871
12872        * VM/Machine.cpp:
12873        (KJS::resolveBaseAndFunc):
12874        (KJS::Machine::privateExecute):
12875
128762008-04-15  Maciej Stachowiak  <mjs@apple.com>
12877
12878        Reviewed by Oliver.
12879        
12880        - fix incorrect result on 3d-raytrace test
12881        
12882        Oliver found and tracked down this bug, I just typed in the fix.
12883
12884        * VM/Machine.cpp:
12885        (KJS::slideRegisterWindowForCall): When setting omitted parameters to undefined,
12886        account for the space for local variables.
12887
128882008-04-15  Maciej Stachowiak  <mjs@apple.com>
12889
12890        Reviewed by Oliver.
12891        
12892        - fix codegen handling of dst registers
12893        
12894        1.006x speedup (not sure why).
12895        
12896        Most emitCode functions take an optional "dst" parameter that says
12897        where the output of the instruction should be written. I made some
12898        functions for convenient handling of the dst register:
12899
12900        * VM/CodeGenerator.h:
12901        (KJS::CodeGenerator::tempDestination): Takes the dst register. Returns it if
12902        it is not null and is a temporary, otherwise allocates a new temporary. This is
12903        intended for cases where an intermediate value might be written into the dst
12904
12905        (KJS::CodeGenerator::finalDestination): Takes the dst register and an optional
12906        register that was used as a temp destination. Picks the right thing for the final
12907        output. Intended to be used as the output register for the instruction that generates
12908        the final value of a particular node.
12909        
12910        (KJS::CodeGenerator::moveToDestinationIfNeeded): Takes dst and a
12911        RegisterID; moves from the register to dst if dst is defined and
12912        different from the register. This is intended for cases where the
12913        result of a node is already in a specific register (likely a
12914        local), and so no code needs to be generated unless a specific
12915        destination has been requested, in which case a move is needed.
12916        
12917        I also applied these methods throughout emitCode functions. In
12918        some cases this was just cleanup, in other cases I fixed actual
12919        codegen bugs. Below I have given specific comments for the cases
12920        where I believe I fixed a codegen bug, or improved quality of codegen.
12921        
12922        * kjs/nodes.cpp:
12923        (KJS::NullNode::emitCode):
12924        (KJS::FalseNode::emitCode):
12925        (KJS::TrueNode::emitCode):
12926        (KJS::NumberNode::emitCode):
12927        (KJS::StringNode::emitCode):
12928        (KJS::RegExpNode::emitCode):
12929        (KJS::ThisNode::emitCode): Now avoids emitting a mov when dst is
12930        the same as the this register (the unlikely case of "this = this");
12931        (KJS::ResolveNode::emitCode): Now avoids emitting a mov when dst
12932        is the same as the local regiester, in the local var case (the
12933        unlikely case of "x = x");
12934        (KJS::ArrayNode::emitCode): Fixed a codegen bug where array
12935        literal element expressions may have observed an intermediate
12936        value of constructing the array.
12937        (KJS::ObjectLiteralNode::emitCode): 
12938        (KJS::PropertyListNode::emitCode): Fixed a codegen bug where object literal
12939        property definition expressions may have obesrved an intermediate value of
12940        constructing the object.
12941        (KJS::BracketAccessorNode::emitCode):
12942        (KJS::DotAccessorNode::emitCode):
12943        (KJS::NewExprNode::emitCode):
12944        (KJS::FunctionCallValueNode::emitCode):
12945        (KJS::FunctionCallBracketNode::emitCode):
12946        (KJS::FunctionCallDotNode::emitCode):
12947        (KJS::PostIncResolveNode::emitCode):
12948        (KJS::PostDecResolveNode::emitCode):
12949        (KJS::PostIncBracketNode::emitCode):
12950        (KJS::PostDecBracketNode::emitCode):
12951        (KJS::PostIncDotNode::emitCode):
12952        (KJS::PostDecDotNode::emitCode):
12953        (KJS::DeleteResolveNode::emitCode):
12954        (KJS::DeleteBracketNode::emitCode):
12955        (KJS::DeleteDotNode::emitCode):
12956        (KJS::DeleteValueNode::emitCode):
12957        (KJS::VoidNode::emitCode):
12958        (KJS::TypeOfResolveNode::emitCode):
12959        (KJS::TypeOfValueNode::emitCode):
12960        (KJS::PreIncResolveNode::emitCode): Fixed a codegen bug where the final
12961        value would not be output to the dst register in the local var case.
12962        (KJS::PreDecResolveNode::emitCode): Fixed a codegen bug where the final
12963        value would not be output to the dst register in the local var case.
12964        (KJS::PreIncBracketNode::emitCode):
12965        (KJS::PreDecBracketNode::emitCode):
12966        (KJS::PreIncDotNode::emitCode):
12967        (KJS::PreDecDotNode::emitCode):
12968        (KJS::UnaryPlusNode::emitCode):
12969        (KJS::NegateNode::emitCode):
12970        (KJS::BitwiseNotNode::emitCode):
12971        (KJS::LogicalNotNode::emitCode):
12972        (KJS::MultNode::emitCode):
12973        (KJS::DivNode::emitCode):
12974        (KJS::ModNode::emitCode):
12975        (KJS::AddNode::emitCode):
12976        (KJS::SubNode::emitCode):
12977        (KJS::LeftShiftNode::emitCode):
12978        (KJS::RightShiftNode::emitCode):
12979        (KJS::UnsignedRightShiftNode::emitCode):
12980        (KJS::LessNode::emitCode):
12981        (KJS::GreaterNode::emitCode):
12982        (KJS::LessEqNode::emitCode):
12983        (KJS::GreaterEqNode::emitCode):
12984        (KJS::InstanceOfNode::emitCode):
12985        (KJS::InNode::emitCode):
12986        (KJS::EqualNode::emitCode):
12987        (KJS::NotEqualNode::emitCode):
12988        (KJS::StrictEqualNode::emitCode):
12989        (KJS::NotStrictEqualNode::emitCode):
12990        (KJS::BitAndNode::emitCode):
12991        (KJS::BitXOrNode::emitCode):
12992        (KJS::BitOrNode::emitCode):
12993        (KJS::LogicalAndNode::emitCode):
12994        (KJS::LogicalOrNode::emitCode):
12995        (KJS::ConditionalNode::emitCode):
12996        (KJS::emitReadModifyAssignment): Allow an out argument separate from the operands,
12997        needed for fixes below.
12998        (KJS::ReadModifyResolveNode::emitCode): Fixed a codegen bug where the right side of
12999        the expression may observe an intermediate value.
13000        (KJS::AssignResolveNode::emitCode): Fixed a codegen bug where the right side of the
13001        expression may observe an intermediate value.
13002        (KJS::ReadModifyDotNode::emitCode): Fixed a codegen bug where the right side of the
13003        expression may observe an intermediate value.
13004        (KJS::ReadModifyBracketNode::emitCode): Fixed a codegen bug where the right side of the
13005        expression may observe an intermediate value.
13006        (KJS::CommaNode::emitCode): Avoid writing temporary value to dst register.
13007        (KJS::ReturnNode::emitCode): Void return should return undefined, not null.
13008        (KJS::FuncExprNode::emitCode):
13009
130102008-04-15  Maciej Stachowiak  <mjs@apple.com>
13011
13012        Reviewed by Geoff.
13013
13014        - fix huge performance regression (from trunk) in string-unpack-code
13015        
13016        This restores string-unpack-code performance to parity with
13017        trunk (2.27x speedup relative to previous SquirrelFish)
13018        
13019        * VM/Machine.cpp:
13020        (KJS::Machine::execute): Shrink register file after call to avoid
13021        growing repeatedly.
13022
130232008-04-15  Geoffrey Garen  <ggaren@apple.com>
13024
13025        Reviewed by Sam Weinig.
13026        
13027        Fixed dumpCallFrame to match our new convention of passing around a
13028        ScopeChainNode* instead of a ScopeChain*.
13029
13030        * JavaScriptCore.exp:
13031        * VM/Machine.cpp:
13032        (KJS::Machine::dumpCallFrame):
13033        * VM/Machine.h:
13034
130352008-04-15  Oliver Hunt  <oliver@apple.com>
13036
13037        Reviewed by Maciej.
13038
13039        Bug 18436: Need to throw exception on read/modify/write or similar resolve for nonexistent property
13040        <https://bugs.webkit.org/show_bug.cgi?id=18436>
13041
13042        Add op_resolve_base_and_property for read/modify/write operations,
13043        this adds a "superinstruction" to resolve the base and value of a
13044        property simultaneously.  Just using resolveBase and resolve results 
13045        in an 5% regression in ubench, 30% in loop-empty-resolve (which is 
13046        expected).  1.3% progression in sunspider, 2.1% in ubench, with a 
13047        21% gain in loop-empty-resolve.  The only outlier is function-missing-args
13048        which gets a 3% regression that I could never resolve.
13049
13050        * VM/CodeBlock.cpp:
13051        (KJS::CodeBlock::dump):
13052        * VM/CodeGenerator.cpp:
13053        (KJS::CodeGenerator::emitResolveBaseAndProperty):
13054        * VM/CodeGenerator.h:
13055        * VM/Machine.cpp:
13056        (KJS::resolveBaseAndProperty):
13057        (KJS::Machine::privateExecute):
13058        * VM/Opcode.h:
13059        * kjs/nodes.cpp:
13060        (KJS::PostIncResolveNode::emitCode):
13061        (KJS::PostDecResolveNode::emitCode):
13062        (KJS::PreIncResolveNode::emitCode):
13063        (KJS::PreDecResolveNode::emitCode):
13064        (KJS::ReadModifyResolveNode::emitCode):
13065
130662008-04-15  Maciej Stachowiak  <mjs@apple.com>
13067
13068        Reviewed by Oliver.
13069        
13070        - fixed "SquirrelFish crashes due to bad scope chain on some SunSpider tests"
13071        https://bugs.webkit.org/show_bug.cgi?id=18508
13072
13073        3d-raytrace and string-unpack-code now run.
13074        
13075        The basic approach is to pass around ScopeChainNode* instead of
13076        ScopeChain*, which in addition to not becoming suddenly an invalid
13077        pointer also saves an indirection.
13078        
13079        This is an 0.4% speedup on SunSpider --squirrelfish (1.8% on --ubench)
13080        
13081        * VM/Machine.cpp:
13082        (KJS::resolve):
13083        (KJS::resolveBase):
13084        (KJS::resolveBaseAndFunc):
13085        (KJS::initializeCallFrame):
13086        (KJS::scopeChainForCall):
13087        (KJS::Machine::unwindCallFrame):
13088        (KJS::Machine::throwException):
13089        (KJS::Machine::execute):
13090        (KJS::Machine::privateExecute):
13091        * VM/Machine.h:
13092        * VM/Register.h:
13093        (KJS::Register::):
13094        * kjs/nodes.cpp:
13095        (KJS::EvalNode::generateCode):
13096        (KJS::FunctionBodyNode::generateCode):
13097        (KJS::ProgramNode::generateCode):
13098        (KJS::ProgramNode::processDeclarations):
13099        (KJS::EvalNode::processDeclarations):
13100        (KJS::FuncDeclNode::makeFunction):
13101        (KJS::FuncExprNode::makeFunction):
13102        * kjs/nodes.h:
13103        (KJS::ProgramNode::):
13104        (KJS::EvalNode::):
13105        (KJS::FunctionBodyNode::):
13106        * kjs/object.h:
13107        * kjs/scope_chain.h:
13108        (KJS::ScopeChainNode::ScopeChainNode):
13109        (KJS::ScopeChainNode::deref):
13110        (KJS::ScopeChainIterator::ScopeChainIterator):
13111        (KJS::ScopeChainIterator::operator*):
13112        (KJS::ScopeChainIterator::operator->):
13113        (KJS::ScopeChain::ScopeChain):
13114        (KJS::ScopeChain::node):
13115        (KJS::ScopeChain::deref):
13116        (KJS::ScopeChain::ref):
13117        (KJS::ScopeChainNode::ref):
13118        (KJS::ScopeChainNode::release):
13119        (KJS::ScopeChainNode::begin):
13120        (KJS::ScopeChainNode::end):
13121
131222008-04-14  Geoffrey Garen  <ggaren@apple.com>
13123
13124        Reviewed by Oliver Hunt.
13125        
13126        Fixed crash when accessing registers in a torn-off activation object.
13127
13128        * kjs/JSActivation.cpp:
13129        (KJS::JSActivation::copyRegisters): Update our registerOffset after
13130        copying our registers, since our offset should now be relative to
13131        our private register array, not the shared register file.
13132
131332008-04-14  Maciej Stachowiak  <mjs@apple.com>
13134
13135        Reviewed by Oliver.
13136        
13137        - fix a codegen flaw that makes some tests run way too fast or way too slow
13138        
13139        The basic problem was that FunctionCallResolveNode results in
13140        codegen which can incorrectly write an intermediate value into the
13141        dst register even when that is a local. I added convenience
13142        functions to CodeGenerator for getting this right, but for now I
13143        only fixed FunctionCallResolve.
13144
13145        * VM/CodeGenerator.h:
13146        (KJS::CodeGenerator::tempDestination):
13147        (KJS::CodeGenerator::):
13148        * kjs/nodes.cpp:
13149        (KJS::FunctionCallResolveNode::emitCode):
13150
131512008-04-14  Gabor Loki  <loki@inf.u-szeged.hu>
13152
13153        Reviewed and slightly tweaked by Geoffrey Garen.
13154
13155        Bug 18489: Squirrelfish doesn't build on linux
13156        <https://bugs.webkit.org/show_bug.cgi?id=18489>
13157
13158        * JavaScriptCore.pri: Add VM into include path and its files into
13159        source set
13160        * VM/JSPropertyNameIterator.cpp: Fix include name
13161        * VM/Machine.cpp: Add UNLIKELY macro for GCC
13162        * VM/Machine.h: Add missing includes
13163        * VM/RegisterFile.cpp: Add missing include
13164        * kjs/testkjs.pro: Add VM into include path
13165
131662008-04-14  Geoffrey Garen  <ggaren@apple.com>
13167
13168        Reviewed by Sam Weinig.
13169        
13170        Restored OwnPtr in some places where I had removed it previously. We
13171        can have an OwnPtr to an undefined class in a header as long as the
13172        class's destructor isn't in the header.
13173        
131742008-04-14  Geoffrey Garen  <ggaren@apple.com>
13175
13176        Reviewed by Sam Weinig.
13177        
13178        Fixed access to "this" inside dynamic scopes.
13179
13180        * VM/CodeGenerator.cpp:
13181        (KJS::CodeGenerator::registerForLocal): Always return a register for
13182        "this", even if we're not optimizing access to other locals. Because
13183        "this" is a keyword, it's always in a register and always accessible.
13184
13185        * VM/CodeGenerator.h:
13186        (KJS::CodeGenerator::shouldOptimizeLocals): Factored out a function
13187        for determining whether we should optimize access to locals, since
13188        eval will need to make this test a little more complicated.
13189
131902008-04-14  Maciej Stachowiak  <mjs@apple.com>
13191
13192        Reviewed by Adam.
13193        
13194        - fix crash when running SunSpider full harness
13195        
13196        When growing the register file's buffer to make space for new globals,
13197        make sure to copy accounting for the fact that the new space is logically
13198        at the beginning of the buffer in this case, instead of at the end as when
13199        growing for a new call frame.
13200
13201        * VM/RegisterFile.cpp:
13202        (KJS::RegisterFile::newBuffer):
13203        (KJS::RegisterFile::growBuffer):
13204        (KJS::RegisterFile::addGlobalSlots):
13205        * VM/RegisterFile.h:
13206
132072008-04-11  Geoffrey Garen  <ggaren@apple.com>
13208
13209        Reviewed by Sam Weinig.
13210        
13211        Mark constant pools for global and eval code (collectively known as
13212        "program code"). (Constant pools for function code are already marked by
13213        their functions.)
13214        
13215        The global object is responsible for marking program code constant
13216        pools. Code blocks add themselves to the mark set at creation time, and
13217        remove themselves from the mark set at destruction time.
13218        
13219        sunspider --squirrelfish reports a 1% speedup, perhaps because
13220        generateCode() is now non-virtual.
13221
13222        * kjs/nodes.cpp: I had to use manual init and delete in this file
13223        because putting an OwnPtr into the header would have created a circular
13224        header dependency.
13225
132262008-04-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
13227
13228        Reviewed by Maciej.
13229
13230        Bug 18231: Improve support for function call nodes in SquirrelFish
13231        <https://bugs.webkit.org/show_bug.cgi?id=18231>
13232
13233        Use correct value of 'this' for function calls.
13234
13235        * VM/CodeBlock.cpp:
13236        (KJS::CodeBlock::dump):
13237        * VM/CodeGenerator.cpp:
13238        (KJS::CodeGenerator::emitResolveBaseAndFunc):
13239        * VM/CodeGenerator.h:
13240        * VM/Machine.cpp:
13241        (KJS::resolveBaseAndFunc):
13242        (KJS::Machine::privateExecute):
13243        * VM/Opcode.h:
13244        * kjs/nodes.cpp:
13245        (KJS::FunctionCallResolveNode::emitCode):
13246
132472008-04-10  Geoffrey Garen  <ggaren@apple.com>
13248
13249        This time for sure.
13250
13251        * kjs/interpreter.cpp:
13252        (KJS::Interpreter::evaluate):
13253
132542008-04-10  Geoffrey Garen  <ggaren@apple.com>
13255
13256        Reviewed by Sam Weinig.
13257        
13258        Fixed Interpreter::execute to honor the new model for returning non-NULL
13259        values when an exception is thrown.
13260
13261        * kjs/interpreter.cpp:
13262        (KJS::Interpreter::evaluate):
13263
132642008-04-10  Oliver Hunt  <oliver@apple.com>
13265
13266        Reviewed by Geoff.
13267
13268        Fix SquirrelFish interpreter to pass internal exceptions back to 
13269        native code correctly.
13270
13271        * JavaScriptCore.xcodeproj/project.pbxproj:
13272        * VM/Machine.cpp:
13273        (KJS::Machine::privateExecute):
13274
132752008-04-10  Sam Weinig  <sam@webkit.org>
13276
13277        Reviewed by Geoffrey Garen.
13278
13279        Replace the use of getCallData in op_construct with the new
13280        getConstructData function that replaces implementsConstruct.
13281
13282        * API/JSCallbackConstructor.cpp:
13283        (KJS::JSCallbackConstructor::getConstructData):
13284        * API/JSCallbackConstructor.h:
13285        * API/JSCallbackObject.h:
13286        * API/JSCallbackObjectFunctions.h:
13287        (KJS::::getConstructData):
13288        (KJS::::construct):
13289        * API/JSObjectRef.cpp:
13290        (JSObjectIsConstructor):
13291        * JavaScriptCore.exp:
13292        * JavaScriptCore.xcodeproj/project.pbxproj:
13293        * VM/Machine.cpp:
13294        (KJS::Machine::privateExecute):
13295        * kjs/CallData.h:
13296        * kjs/ConstructData.h: Copied from JavaScriptCore/kjs/CallData.h.
13297        * kjs/array_object.cpp:
13298        (KJS::ArrayObjectImp::getConstructData):
13299        * kjs/array_object.h:
13300        * kjs/bool_object.cpp:
13301        (KJS::BooleanObjectImp::getConstructData):
13302        * kjs/bool_object.h:
13303        * kjs/date_object.cpp:
13304        (KJS::DateObjectImp::getConstructData):
13305        * kjs/date_object.h:
13306        * kjs/error_object.cpp:
13307        (KJS::ErrorObjectImp::getConstructData):
13308        (KJS::NativeErrorImp::getConstructData):
13309        * kjs/error_object.h:
13310        * kjs/function.cpp:
13311        (KJS::FunctionImp::getCallData):
13312        (KJS::FunctionImp::getConstructData):
13313        (KJS::FunctionImp::construct):
13314        * kjs/function.h:
13315        * kjs/function_object.cpp:
13316        (KJS::FunctionObjectImp::getConstructData):
13317        * kjs/function_object.h:
13318        * kjs/nodes.cpp:
13319        (KJS::NewExprNode::inlineEvaluate):
13320        * kjs/number_object.cpp:
13321        (KJS::NumberObjectImp::getConstructData):
13322        * kjs/number_object.h:
13323        * kjs/object.cpp:
13324        * kjs/object.h:
13325        * kjs/object_object.cpp:
13326        (KJS::ObjectObjectImp::getConstructData):
13327        * kjs/object_object.h:
13328        * kjs/regexp_object.cpp:
13329        (KJS::RegExpObjectImp::getConstructData):
13330        * kjs/regexp_object.h:
13331        * kjs/string_object.cpp:
13332        (KJS::StringObjectImp::getConstructData):
13333        * kjs/string_object.h:
13334        * kjs/value.cpp:
13335        (KJS::JSCell::getConstructData):
13336        * kjs/value.h:
13337        (KJS::JSValue::getConstructData):
13338
133392008-04-10  Oliver Hunt  <oliver@apple.com>
13340
13341        Reviewed by Geoff.
13342
13343        Bug 18420: SquirrelFish: need to throw Reference and Type errors 
13344        when attempting invalid operations on JSValues
13345
13346        Add validation and exception checks to SquirrelFish so that the
13347        correct exceptions are thrown for undefined variables, type errors
13348        and toObject failure.  Also handle exceptions thrown by native
13349        function calls.
13350
13351        * JavaScriptCore.xcodeproj/project.pbxproj:
13352        * VM/ExceptionHelpers.cpp: Added.
13353        (KJS::substitute):
13354        (KJS::createError):
13355        (KJS::createUndefinedVariableError):
13356        * VM/ExceptionHelpers.h: Added.
13357          Helper functions
13358        * VM/Machine.cpp:
13359        (KJS::resolve):
13360           Modified to signal failure
13361        (KJS::isNotObject):
13362           Wrapper for JSValue::isObject and exception creation (these need
13363           to be merged, lest GCC go off the deep end)
13364        (KJS::Machine::privateExecute):
13365           Adding the many exception and validity checks.
13366
13367        * kjs/JSNotAnObject.cpp: Added.
13368          Stub object used to reduce the need for multiple exception checks
13369          when toObject fails.
13370        (KJS::JSNotAnObject::toPrimitive):
13371        (KJS::JSNotAnObject::getPrimitiveNumber):
13372        (KJS::JSNotAnObject::toBoolean):
13373        (KJS::JSNotAnObject::toNumber):
13374        (KJS::JSNotAnObject::toString):
13375        (KJS::JSNotAnObject::toObject):
13376        (KJS::JSNotAnObject::mark):
13377        (KJS::JSNotAnObject::getOwnPropertySlot):
13378        (KJS::JSNotAnObject::put):
13379        (KJS::JSNotAnObject::deleteProperty):
13380        (KJS::JSNotAnObject::defaultValue):
13381        (KJS::JSNotAnObject::construct):
13382        (KJS::JSNotAnObject::callAsFunction):
13383        (KJS::JSNotAnObject::getPropertyNames):
13384        * kjs/JSNotAnObject.h: Added.
13385        (KJS::JSNotAnObject::JSNotAnObject):
13386        * kjs/JSImmediate.cpp:
13387        (KJS::JSImmediate::toObject):
13388          modified to create an JSNotAnObject rather than throwing an exception
13389          directly.
13390
133912008-04-10  Geoffrey Garen  <ggaren@apple.com>
13392
13393        Reviewed by Oliver Hunt.
13394        
13395        Pass a function body node its function's scope chain, rather than the
13396        current execution context's scope chain, when compiling it.
13397        
13398        This doesn't matter yet, but it will once we start using the scope
13399        chain during compilation.
13400
13401        sunspider --squirrelfish notes a tiny speedup.
13402
13403        * VM/Machine.cpp:
13404        (KJS::Machine::privateExecute):
13405
134062008-04-10  Geoffrey Garen  <ggaren@apple.com>
13407
13408        Reviewed by Oliver Hunt.
13409        
13410        Fix two bugs when throwing exceptions from re-entrant JS calls:
13411        
13412        (1) Don't shrink the register file to 0, since our caller may still
13413        be using it.
13414        
13415        (2) In case of exception, return jsNull() instead of 0 because,
13416        surprisingly, some JavaScriptCore clients rely on a function's return
13417        value being safe to operate on even if the function threw an exception.
13418        
13419        Also:
13420        
13421        - Changed FunctionImp::callAsFunction to honor the new semantics of
13422        exceptions not returning 0.
13423        
13424        - Renamed "handlerPC" to "handlerVPC" to match other uses of "VPC".
13425        
13426        - Renamed "exceptionData" to "exceptionValue", because "data" seemed to
13427        imply something more than just a JSValue.
13428        
13429        - Merged prepareException into throwException, since throwException was
13430        its only caller, and it seemed weird that throwException didn't take
13431        an exception as an argument.
13432
13433        sunspider --squirrelfish does not seem to complain on my machine, but it
13434        complains a little (.6%) on Oliver's.
13435
134362008-04-10  Geoffrey Garen  <ggaren@apple.com>
13437
13438        Reviewed by Maciej Stachowiak.
13439        
13440        Fixed op_construct for CallTypeNative to reacquire "r" before setting
13441        its return value, since registerBase can theoretically change during the
13442        execution of arbitrary code. (Not sure if any native constructors
13443        actually make this possible.)
13444
13445        sunspider --squirrelfish does not seem to complain.
13446
13447        * VM/Machine.cpp:
13448        (KJS::Machine::privateExecute):
13449
134502008-04-10  Geoffrey Garen  <ggaren@apple.com>
13451
13452        Reviewed by Oliver Hunt and Sam Weinig.
13453        
13454        Re-entrant execution of function code (global code -> built-in function
13455        -> JS function):
13456        
13457        Miraculously, sunspider --squirrelfish does not seem to complain.
13458
13459        A re-entrant function call is the same as a normal function call with
13460        one exception: the re-entrant call leaves everything except for
13461        CallerCodeBlock in the call frame header uninitialized, since the call
13462        doesn't need to return to JS code. (It sets CallerCodeBlock to 0, to
13463        indicate that the call shouldn't return to JS code.)
13464        
13465        Also fixed a few issues along the way:
13466        
13467        - Fixed two bugs in the read-write List implementation that caused
13468        m_size and m_buffer to go stale.
13469        
13470        - Changed native call code to update "r" *before* setting the return
13471        value, since the call may in turn call JS code, which changes the value
13472        of "r".
13473        
13474        - Migrated initialization of "r" outside of Machine::privateExecute,
13475        because global code and function code initialize "r" differently.
13476        
13477        - Migrated a codegen warning from Machine::privateExecute to the wiki.
13478        
13479        - Removed unnecessary "r" parameter from slideRegisterWindowForCall
13480
13481        * VM/Machine.cpp:
13482        (KJS::slideRegisterWindowForCall):
13483        (KJS::scopeChainForCall):
13484        (KJS::Machine::execute):
13485        (KJS::Machine::privateExecute):
13486        * VM/Machine.h:
13487        * kjs/function.cpp:
13488        (KJS::FunctionImp::callAsFunction):
13489        * kjs/list.cpp:
13490        (KJS::List::getSlice):
13491        * kjs/list.h:
13492        (KJS::List::clear):
13493
134942008-04-10  Maciej Stachowiak  <mjs@apple.com>
13495
13496        Reviewed by Oliver.
13497        
13498        - fix problem with code generation for return with no argument
13499        
13500        3d-cube now runs
13501
13502        * kjs/nodes.cpp:
13503        (KJS::ReturnNode::emitCode):
13504
135052008-04-10  Maciej Stachowiak  <mjs@apple.com>
13506
13507        Reviewed by Oliver.
13508        
13509        - Implement support for JS constructors
13510        
13511        access-binary-trees and access-nbody now run.
13512        
13513        Inexplicably a 1% speedup.
13514
13515        * VM/Machine.cpp:
13516        (KJS::initializeCallFrame):
13517        (KJS::Machine::privateExecute):
13518        * VM/Machine.h:
13519        (KJS::Machine::):
13520
135212008-04-10  Maciej Stachowiak  <mjs@apple.com>
13522
13523        Reviewed by Oliver.
13524
13525        - More code cleanup in preparation for JS constructors
13526
13527        Factor the remaining interesting parts of JS function calls into
13528        slideRegisterWindowForCall and scopeChainForCall.
13529        
13530        * VM/Machine.cpp:
13531        (KJS::slideRegisterWindowForCall):
13532        (KJS::scopeChainForCall):
13533        (KJS::Machine::privateExecute):
13534
135352008-04-10  Maciej Stachowiak  <mjs@apple.com>
13536
13537        Reviewed by Geoff.
13538        
13539        - Code cleanup in preparation for JS constructors
13540
13541        - Renamed returnInfo to callFrame. 
13542        - Made an enum which defines what goes where in the call frame.
13543        - Factored out initializeCallFrame function from op_call
13544        
13545        * VM/CodeGenerator.cpp:
13546        (KJS::CodeGenerator::emitCall):
13547        (KJS::CodeGenerator::emitConstruct):
13548        * VM/Machine.cpp:
13549        (KJS::Machine::dumpRegisters):
13550        (KJS::initializeCallFrame):
13551        (KJS::Machine::unwindCallFrame):
13552        (KJS::Machine::execute):
13553        (KJS::Machine::privateExecute):
13554        * VM/Machine.h:
13555        (KJS::Machine::):
13556
135572008-04-10  Geoffrey Garen  <ggaren@apple.com>
13558
13559        Reviewed by Oliver Hunt.
13560        
13561        Fixed two bugs in register allocation for function calls:
13562        
13563        (1) op_call used to allocate codeBlock->numVars too many registers for
13564        each call frame, due to duplicated math. Fixing this revealed...
13565        
13566        (2) By unconditionally calling resize(), op_call used to truncate the
13567        register file when calling a function whose registers fit wholly within
13568        the register file already allocated by its caller.
13569        
13570        sunspider --squirrelfish reports no regression.
13571        
13572        I also threw in a little extra formatting to dumpCallFrame, because it
13573        helped me debug these issues.
13574
13575        * VM/Machine.cpp:
13576        (KJS::Machine::dumpRegisters):
13577        (KJS::Machine::execute):
13578        (KJS::Machine::privateExecute):
13579        * VM/RegisterFile.h:
13580        (KJS::RegisterFile::shrink):
13581        (KJS::RegisterFile::grow):
13582        * VM/RegisterFileStack.cpp:
13583        (KJS::RegisterFileStack::popRegisterFile):
13584
135852008-04-09  Geoffrey Garen  <ggaren@apple.com>
13586
13587        Reviewed by Oliver Hunt.
13588
13589        Next step toward re-entrant execution of function code (global code ->
13590        built-in function -> JS function):
13591        
13592        Made op_ret return from Machine::privateExecute if its calling codeBlock
13593        is NULL.
13594        
13595        I'm checking this in by itself to demonstrate that a more clever
13596        mechanism is not necessary for performance.
13597        
13598        sunspider --squirrelfish reports no regression.
13599
13600        * ChangeLog:
13601        * VM/Machine.cpp:
13602        (KJS::Machine::execute):
13603        (KJS::Machine::privateExecute):
13604
136052008-04-09  Geoffrey Garen  <ggaren@apple.com>
13606
13607        Reviewed by Maciej Stachowiak.
13608
13609        Next step toward re-entrant execution of function code (global code ->
13610        built-in function -> JS function):
13611        
13612        Made Machine::execute return a value.
13613        
13614        Sketched out some code for Machine::execute for functions -- still
13615        doesn't work yet, though.
13616
13617        sunspider --squirrelfish reports no regression.
13618
13619        * VM/Machine.cpp:
13620        (KJS::Machine::execute):
13621        (KJS::Machine::privateExecute):
13622        * VM/Machine.h:
13623        * kjs/interpreter.cpp:
13624        (KJS::Interpreter::evaluate):
13625        * kjs/testkjs.cpp:
13626        (runWithScripts):
13627
136282008-04-09  Geoffrey Garen  <ggaren@apple.com>
13629
13630        Reviewed by Sam Weinig.
13631        
13632        First step toward re-entrant execution of function code (global code ->
13633        built-in function -> JS function):
13634        
13635        Tiny bit of refactoring in the Machine class.
13636
13637        sunspider --squirrelfish reports no regression.
13638
13639        * VM/Machine.cpp:
13640        (KJS::Machine::dumpRegisters):
13641        (KJS::Machine::unwindCallFrame):
13642        (KJS::Machine::execute):
13643        (KJS::Machine::privateExecute):
13644        * VM/Machine.h:
13645        (KJS::Machine::isGlobalCallFrame):
13646        * kjs/interpreter.cpp:
13647        (KJS::Interpreter::evaluate):
13648
136492008-04-08  Geoffrey Garen  <ggaren@apple.com>
13650
13651        Reviewed by Oliver Hunt.
13652        
13653        Support for re-entrant execution of global code (global code -> built-in
13654        function -> global code).
13655        
13656        Keep a stack of register files instead of just one. Globals propogate
13657        between register files as the register files enter and exit the stack.
13658        
13659        An activation still uses its own register file's base as its
13660        registerBase, but the global object uses the register file *stack*'s
13661        registerBase, which updates dynamically to match the register file at
13662        the top of the stack.
13663        
13664        sunspider --squirrelfish reports no regression.
13665
136662008-04-08  Maciej Stachowiak  <mjs@apple.com>
13667
13668        Reviewed by Geoff.
13669        
13670        - initial preparatory work for JS constructors
13671        
13672        1) Allocate registers for the returnInfo block and "this" value when generating code for
13673        op_construct. These are not used yet, but the JS branch of op_construct will use them.
13674        
13675        2) Adjust argc and argv appropriately for native constructor calls.
13676        
13677        3) Assign return value in a more straightforward way in op_ret since this is actually
13678        a bit faster (and makes up for the allocation of extra registers above).
13679
13680        * VM/CodeGenerator.cpp:
13681        (KJS::CodeGenerator::emitConstruct):
13682        * VM/Machine.cpp:
13683        (KJS::Machine::privateExecute):
13684
136852008-04-07  Geoffrey Garen  <ggaren@apple.com>
13686
13687        Reviewed by Maciej Stachowiak.
13688        
13689        Fixed crashing SunSpider tests.
13690        
13691        Let's just pretend this never happened, bokay?
13692
13693        * VM/CodeGenerator.cpp:
13694        (KJS::CodeGenerator::CodeGenerator):
13695        * VM/CodeGenerator.h:
13696        * VM/RegisterFile.cpp:
13697        (KJS::RegisterFile::addGlobals):
13698
136992008-04-07  Geoffrey Garen  <ggaren@apple.com>
13700
13701        Reviewed by Oliver Hunt.
13702        
13703        Restored dumping of generated code as a command-line switch:
13704        run-testkjs -d will do it.
13705
137062008-04-07  Geoffrey Garen  <ggaren@apple.com>
13707
13708        Reviewed by Oliver Hunt.
13709        
13710        Next step toward supporting re-entrant evaluation: Moved register file
13711        maintenance code into a proper "RegisterFile" class.
13712        
13713        There's a subtle change to the register file's internal layout: for
13714        global code / the global object, registerOffset is always 0 now. In
13715        other words, all register counting starts at 0, not 0 + (number of
13716        global variables). The helps simplify accounting when the number of
13717        global variables changes.
13718
137192008-04-07  Oliver Hunt  <oliver@apple.com>
13720
13721        Reviewed by Geoff.
13722
13723        Bug 18338: Support exceptions in SquirrelFish <http://bugs.webkit.org/show_bug.cgi?id=18338>
13724        
13725        Initial support for exceptions in SquirrelFish, only supports finalisers in the
13726        simple cases (eg. exceptions and non-goto/return across finaliser boundaries).
13727        This doesn't add the required exception checks to existing code, it merely adds
13728        support for throw, catch, and the required stack unwinding.
13729
13730        * VM/CodeBlock.cpp:
13731        (KJS::CodeBlock::dump):
13732        (KJS::CodeBlock::getHandlerForVPC):
13733        * VM/CodeBlock.h:
13734        * VM/CodeGenerator.cpp:
13735        (KJS::CodeGenerator::emitCatch):
13736        (KJS::CodeGenerator::emitThrow):
13737        * VM/CodeGenerator.h:
13738        * VM/JSPropertyNameIterator.cpp:
13739        (KJS::JSPropertyNameIterator::create):
13740        * VM/Machine.cpp:
13741        (KJS::prepareException):
13742        (KJS::Machine::unwindCallFrame):
13743        (KJS::Machine::throwException):
13744        (KJS::Machine::privateExecute):
13745        * VM/Machine.h:
13746        * VM/Opcode.h:
13747        * kjs/nodes.cpp:
13748        (KJS::ThrowNode::emitCode):
13749        (KJS::TryNode::emitCode):
13750        * kjs/nodes.h:
13751        * kjs/scope_chain.cpp:
13752        (KJS::ScopeChain::depth):
13753        * kjs/scope_chain.h:
13754
137552008-04-06  Geoffrey Garen  <ggaren@apple.com>
13756
13757        Reviewed by Oliver Hunt.
13758        
13759        First step toward supporting re-entrant evaluation: Switch register
13760        clients from using "registers", a pointer to a register vector, to
13761        "registerBase", an indirect pointer to the logical first entry in the
13762        register file. (The logical first entry is the first entry that is not
13763        a global variable).
13764        
13765        With a vector, offsets into the register file remain good when the
13766        underlying buffer reallocates, but they go bad when the logical
13767        first entry moves. (The logical first entry moves when new global
13768        variables get added to the beginning of the register file.) With an
13769        indirect pointer to the logical first entry, offsets will remain good
13770        regardless.
13771
13772        1.4% speedup on sunspider --squirrelfish. I suspect this is due to
13773        reduced allocation when creating closures, and reduced indirection
13774        through the register vector.
13775
13776        * wtf/Vector.h: Added an accessor for an indirect pointer to the vector's
13777        buffer, which we currently use (incorrectly) for registerBase. This is
13778        temporary scaffolding to allow us to change client code without
13779        changing behavior.
13780
137812008-04-06  Sam Weinig  <sam@webkit.org>
13782
13783        Reviewed by Oliver Hunt.
13784
13785        Implement codegen for ReadModifyDotNode.
13786
13787        * kjs/nodes.cpp:
13788        (KJS::ReadModifyDotNode::emitCode):
13789        * kjs/nodes.h:
13790
137912008-04-06  Sam Weinig  <sam@webkit.org>
13792
13793        Reviewed by Oliver Hunt.
13794
13795        Fix codegen for PostIncDotNode and implement codegen for PostIncBracketNode,
13796        PostDecBracketNode and PostDecDotNode.
13797
13798        * kjs/nodes.cpp:
13799        (KJS::PostIncBracketNode::emitCode):
13800        (KJS::PostDecBracketNode::emitCode):
13801        (KJS::PostIncDotNode::emitCode):
13802        (KJS::PostDecDotNode::emitCode):
13803        * kjs/nodes.h:
13804
138052008-04-06  Sam Weinig  <sam@webkit.org>
13806
13807        Reviewed by Geoffrey Garen.
13808
13809        Implement codegen for PreDecResolveNode, PreIncBracketNode, PreDecBracketNode,
13810        PreIncDotNode and PreDecDotNode.  This required adding one new op code, op_pre_dec.
13811
13812        * VM/CodeBlock.cpp:
13813        (KJS::CodeBlock::dump):
13814        * VM/CodeGenerator.cpp:
13815        (KJS::CodeGenerator::emitPreDec):
13816        * VM/CodeGenerator.h:
13817        * VM/Machine.cpp:
13818        (KJS::Machine::privateExecute):
13819        * VM/Opcode.h:
13820        * kjs/nodes.cpp:
13821        (KJS::PreDecResolveNode::emitCode):
13822        (KJS::PreIncBracketNode::emitCode):
13823        (KJS::PreDecBracketNode::emitCode):
13824        (KJS::PreIncDotNode::emitCode):
13825        (KJS::PreDecDotNode::emitCode):
13826        * kjs/nodes.h:
13827
138282008-04-06  Geoffrey Garen  <ggaren@apple.com>
13829
13830        Reviewed by Sam Weinig.
13831        
13832        Improved register dumping, plus a liberal smattering of "const". Here's
13833        what the new format looks like:
13834
13835        (gdb) call (void)dumpCallFrame(codeBlock, scopeChain, registers->begin(), r)
13836        4 instructions; 48 bytes at 0x509210; 3 locals (2 parameters); 1 temporaries
13837
13838        [   0] load             lr1, undefined(@k0)
13839        [   3] load             lr1, 2(@k1)
13840        [   6] add              tr0, lr2, lr1
13841        [  10] ret              tr0
13842
13843        Constants:
13844          k0 = undefined
13845          k1 = 2
13846
13847        Register frame: 
13848
13849        ----------------------------------------
13850             use      |   address  |    value   
13851        ----------------------------------------
13852        [return info] |   0x80ac08 |   0x5081c0 
13853        [return info] |   0x80ac0c |   0x508e90 
13854        [return info] |   0x80ac10 |   0x504acc 
13855        [return info] |   0x80ac14 |        0x2 
13856        [return info] |   0x80ac18 |        0x0 
13857        [return info] |   0x80ac1c |        0x7 
13858        [return info] |   0x80ac20 |        0x0 
13859        ----------------------------------------
13860        [param]       |   0x80ac24 |        0x1 
13861        [param]       |   0x80ac28 |        0x7 
13862        [var]         |   0x80ac2c |        0xb 
13863        [temp]        |   0x80ac30 |        0xf 
13864
138652008-04-06  Geoffrey Garen  <ggaren@apple.com>
13866
13867        Reviewed by Sam Weinig.
13868
13869        Support for evaluating multiple scripts in the same global environment.
13870        (Still don't support re-entrant evaluation yet.)
13871
13872        The main changes here are:
13873
13874        (1) Obey the ECMA 10.1.3 rules regarding how to resolve collisions when
13875        a given symbol is declared more than once. (This patch fixes the same
13876        issue for function code, too.)
13877        
13878        (2) In the case of var and/or function collisions, reuse the existing
13879        storage slot. For global code, this is required for previously
13880        generated instructions to continue to work. For function code, it's
13881        more of a "nice to have": it makes register layout in the case of
13882        collisions easier to understand, and has the added benefit of saving
13883        memory.
13884        
13885        (3) Allocate slots in the CodeGenerator's m_locals vector in parallel
13886        to register indexes in the symbol table. This ensures that, given an
13887        index in the symbol table, we can find the corresponding RegisterID
13888        without hashing, which speeds up codegen. 
13889        
13890        I moved responsibility for emitting var and function initialization
13891        instructions into the CodeGenerator, because bookkeeping in cases where
13892        var, function, and/or parameter names collide requires a lot of
13893        internal knowledge about the CodeGenerator.
13894
13895        * VM/CodeGenerator.cpp:
13896        (KJS::CodeGenerator::addVar): Removed responsibility for checking whether
13897        a var declaration overwrites "arguments", because the check is
13898        inappropriate for global code, which may not have a pre-existing
13899        "arguments" symbol in scope. Also changed this function to return a
13900        boolean indicating whether addVar actually created a new RegisterID,
13901        or just reused an old one.
13902        
13903        (KJS::CodeGenerator::CodeGenerator): Split out the constructors for
13904        function code and global code, since they're quite different now.
13905        
13906        (KJS::CodeGenerator::registerForLocal): This function does its job
13907        without any hashing now.
13908        
13909        * VM/Machine.cpp: Move old globals and update "r" before executing a
13910        new script. That way, old globals stay at a constant offset from "r",
13911        and previously optimized code still works.
13912        
13913        * VM/RegisterID.h: Added the ability to allocate a RegisterID before
13914        initializing its index field. We use this for parameters now.
13915
13916        * kjs/JSVariableObject.h:
13917        (KJS::JSVariableObject::symbolTableGet): Changed the ungettable getter
13918        ASSERT to account for the fact that symbol indexes are all negative.
13919
139202008-04-05  Sam Weinig  <sam@webkit.org>
13921
13922        Reviewed by Geoffrey Garen.
13923
13924        Implement codegen for InNode.
13925
13926        * VM/CodeBlock.cpp:
13927        (KJS::CodeBlock::dump):
13928        * VM/CodeGenerator.cpp:
13929        (KJS::CodeGenerator::emitIn):
13930        * VM/CodeGenerator.h:
13931        * VM/Machine.cpp:
13932        (KJS::Machine::privateExecute):
13933        * VM/Opcode.h:
13934        * kjs/nodes.cpp:
13935        (KJS::InNode::emitCode):
13936        * kjs/nodes.h:
13937
139382008-04-05  Sam Weinig  <sam@webkit.org>
13939
13940        Reviewed by Oliver Hunt.
13941
13942        - Implement codegen for DeleteResolveNode, DeleteBracketNode, DeleteDotNode and DeleteValueNode.
13943
13944        * VM/CodeBlock.cpp:
13945        (KJS::CodeBlock::dump):
13946        * VM/CodeGenerator.cpp:
13947        (KJS::CodeGenerator::emitGetPropId):
13948        (KJS::CodeGenerator::emitPutPropId):
13949        (KJS::CodeGenerator::emitDeletePropId):
13950        (KJS::CodeGenerator::emitDeletePropVal):
13951        (KJS::CodeGenerator::emitPutPropIndex):
13952        * VM/CodeGenerator.h:
13953        * VM/Machine.cpp:
13954        (KJS::Machine::privateExecute):
13955        * VM/Opcode.h:
13956        * kjs/nodes.cpp:
13957        (KJS::DeleteResolveNode::emitCode):
13958        (KJS::DeleteBracketNode::emitCode):
13959        (KJS::DeleteDotNode::emitCode):
13960        (KJS::DeleteValueNode::emitCode):
13961        * kjs/nodes.h:
13962
139632008-04-04  Sam Weinig  <sam@webkit.org>
13964
13965        Reviewed by Oliver Hunt.
13966
13967        - Implement codegen for Switch statements.
13968
13969        * VM/CodeGenerator.cpp:
13970        (KJS::CodeGenerator::pushJumpContext):
13971        (KJS::CodeGenerator::popJumpContext):
13972        (KJS::CodeGenerator::jumpContextForLabel):
13973        * VM/CodeGenerator.h:
13974        Rename LoopContext to JumpContext now that it used of Switch statements in addition
13975        to loops.
13976
13977        * kjs/nodes.cpp:
13978        (KJS::DoWhileNode::emitCode):
13979        (KJS::WhileNode::emitCode):
13980        (KJS::ForNode::emitCode):
13981        (KJS::ForInNode::emitCode):
13982        (KJS::ContinueNode::emitCode):
13983        (KJS::BreakNode::emitCode):
13984        (KJS::CaseBlockNode::emitCodeForBlock):
13985        (KJS::SwitchNode::emitCode):
13986        * kjs/nodes.h:
13987        (KJS::CaseClauseNode::expr):
13988        (KJS::CaseClauseNode::children):
13989        (KJS::CaseBlockNode::):
13990
139912008-04-03  Maciej Stachowiak  <mjs@apple.com>
13992
13993        Reviewed by Sam.
13994        
13995        - fix crash in codegen from new nodes
13996
13997        * VM/CodeGenerator.cpp:
13998        (KJS::CodeGenerator::emitConstruct):
13999        * kjs/nodes.h:
14000
140012008-04-03  Maciej Stachowiak  <mjs@apple.com>
14002
14003        Reviewed by Geoff.
14004
14005        * kjs/nodes.cpp:
14006        (KJS::ReadModifyResolveNode::emitCode):
14007        (KJS::ReadModifyBracketNode::emitCode):
14008        * kjs/nodes.h:
14009
140102008-04-02  Maciej Stachowiak  <mjs@apple.com>
14011
14012        Reviewed by Geoff.
14013        
14014        - take a shot at marking constant pools for global and eval code
14015        
14016        Geoff says this won't really work in all cases but is an ok stopgap.
14017
14018        * kjs/JSGlobalObject.cpp:
14019        (KJS::JSGlobalObject::mark):
14020
140212008-04-02  Maciej Stachowiak  <mjs@apple.com>
14022
14023        Reviewed by Geoff.
14024        
14025        - fix 2x perf regression in 3d-morph
14026        
14027        * VM/Machine.cpp:
14028        (KJS::Machine::privateExecute): If we subbed in null for the global object,
14029        don't toObject it, since that will throw an exception (very slowly).
14030
140312008-04-02  Maciej Stachowiak  <mjs@apple.com>
14032
14033        Rubber stamped by Geoff
14034        
14035        - fix Release build
14036
14037        * kjs/nodes.cpp:
14038        (KJS::getNonLocalSymbol):
14039
140402008-04-02  Geoffrey Garen  <ggaren@apple.com>
14041
14042        Reviewed by Oliver Hunt.
14043        
14044        Removed the last vestiges of LocalStorage from JSVariableObject and
14045        JSGlobalObject.
14046
14047        * kjs/JSGlobalObject.cpp:
14048        (KJS::JSGlobalObject::saveLocalStorage): Save and restore from/to
14049        registers. Use stub isReadOnly and isDontEnum methods for now, until
14050        we really implement attributes in the symbol table.
14051        (KJS::JSGlobalObject::restoreLocalStorage):
14052        (KJS::JSGlobalObject::reset):
14053
14054        * kjs/JSVariableObject.cpp:
14055        (KJS::JSVariableObject::getPropertyNames): Use stub isDontEnum method
14056        for now, as above.
14057        (KJS::JSVariableObject::getPropertyAttributes): ditto
14058
14059        * kjs/JSVariableObject.h: Removed LocalStorage from JSVariableObjectData.
14060        Removed mark method, because subclasses implement different strategies for
14061        marking registers.
14062        (KJS::JSVariableObject::isReadOnly): Stub method
14063        (KJS::JSVariableObject::isDontEnum): ditto
14064
14065        Changed the code below to ASSERT_NOT_REACHED() and return 0, since it
14066        can no longer retrieve LocalStorage from the ExecState. (Eventually,
14067        we'll just remove this code and all its friends, but that's a task for
14068        later.)
14069        
14070        * kjs/ExecState.cpp:
14071        (KJS::ExecState::ExecState):
14072        * kjs/function.cpp:
14073        (KJS::ActivationImp::markChildren):
14074        * kjs/function.h:
14075        * kjs/nodes.cpp:
14076        (KJS::getNonLocalSymbol):
14077        (KJS::ScopeNode::optimizeVariableAccess):
14078        (KJS::ProgramNode::processDeclarations):
14079
140802008-04-01  Geoffrey Garen  <ggaren@apple.com>
14081
14082        Reviewed by Maciej Stachowiak.
14083        
14084        Got globals?
14085        
14086        To get things working, I had to roll out
14087        http://trac.webkit.org/projects/webkit/changeset/31226 for the time
14088        being.
14089
14090        * VM/CodeBlock.h: Removed obsolete function.
14091        
14092        * VM/Machine.cpp:
14093        (KJS::Machine::privateExecute): For the sake of re-entrancy, we track
14094        and restore the global object's old rOffset value. (No way to test this
14095        yet, but I think it will work.)
14096
140972008-04-01  Maciej Stachowiak  <mjs@apple.com>
14098
14099        Reviewed by Geoff.
14100        
14101        - mark the constant pool (at least for function code blocks)
14102
14103        * VM/CodeBlock.cpp:
14104        (KJS::CodeBlock::mark):
14105        * VM/CodeBlock.h:
14106        * kjs/function.cpp:
14107        (KJS::FunctionImp::mark):
14108        * kjs/nodes.cpp:
14109        (KJS::ScopeNode::mark):
14110        * kjs/nodes.h:
14111        (KJS::FuncExprNode::body):
14112        (KJS::FuncDeclNode::body):
14113
141142008-04-01  Geoffrey Garen  <ggaren@apple.com>
14115
14116        Reviewed by Beth Dakin.
14117        
14118        Cleaned up a few loose ends.
14119
14120        * JavaScriptCore.exp: Export dumpRegisters, so it's visible to gdb even
14121        if we don't explicitly call it in the source text.
14122
14123        * VM/Machine.cpp:
14124        (KJS::Machine::privateExecute): No need to call dumpRegisters anymore,
14125        since that was just a hack for gdb's sake.
14126
14127        * kjs/JSActivation.h: Removed obsolete comment.
14128
14129        * VM/CodeGenerator.cpp: Added ASSERTs to verify that the localCount
14130        we're given matches the number of locals actually allocated.
14131
14132        * VM/CodeGenerator.h:
14133        (KJS::CodeGenerator::CodeGenerator): Changed "localCount" to include
14134        the parameter count, since we're using the word "local" to mean
14135        parameter, var, function, or "this". Renamed "m_nextLocal" to
14136        "m_nextVar", since "m_nextLocal" doesn't contrast well with
14137        "m_nextParameter".
14138        
14139        Also moved tracking of implicit "this" parameter from here...
14140
14141        * kjs/nodes.cpp:
14142        (KJS::FunctionBodyNode::generateCode): ... to here
14143        (KJS::ProgramNode::generateCode): ... and here
14144
14145        * VM/CodeBlock.cpp:
14146        (KJS::CodeBlock::dump): Added missing "\n".
14147
141482008-04-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14149
14150        Reviewed by Oliver.
14151
14152        Bug 18274: ResolveNode::emitCode() doesn't make a new temporary when dst
14153                   is 0, leading to incorrect codegen
14154        <http://bugs.webkit.org/show_bug.cgi?id=18274>
14155
14156        * kjs/nodes.cpp:
14157        (KJS::FunctionCallBracketNode::emitCode):
14158        (KJS::FunctionCallDotNode::emitCode):
14159
141602008-04-01  Maciej Stachowiak  <mjs@apple.com>
14161
14162        Reviewed by Oliver.
14163        
14164        - fix bug in for..in codegen (gotta use ident, not m_ident)
14165
14166        * kjs/nodes.cpp:
14167        (KJS::ForInNode::emitCode):
14168
141692008-04-01  Maciej Stachowiak  <mjs@apple.com>
14170
14171        Reviewed by Oliver.
14172        
14173        - Add suport for regexp literals
14174
14175        * VM/CodeBlock.cpp:
14176        (KJS::regexpToSourceString):
14177        (KJS::regexpName):
14178        (KJS::CodeBlock::dump):
14179        * VM/CodeBlock.h:
14180        * VM/CodeGenerator.cpp:
14181        (KJS::CodeGenerator::addRegExp):
14182        (KJS::CodeGenerator::emitNewRegExp):
14183        * VM/CodeGenerator.h:
14184        * VM/Machine.cpp:
14185        (KJS::Machine::privateExecute):
14186        * VM/Opcode.h:
14187        * kjs/nodes.cpp:
14188        (KJS::RegExpNode::emitCode):
14189        * kjs/nodes.h:
14190
141912008-04-01  Oliver Hunt  <oliver@apple.com>
14192
14193        Reviewed by Geoff
14194
14195        Add support for for..in nodes
14196        
14197        Added two new opcodes to get_pnames and next_pname to handle iterating
14198        over the set of properties on an object.  This iterator is explicitly
14199        invalidated and the property name array is released on standard exit
14200        from the loop, otherwise we rely on GC to do the clean up for us.
14201
14202        * JavaScriptCore.xcodeproj/project.pbxproj:
14203        * VM/CodeBlock.cpp:
14204        (KJS::CodeBlock::dump):
14205        * VM/CodeGenerator.cpp:
14206        (KJS::CodeGenerator::emitNextPropertyName):
14207        (KJS::CodeGenerator::emitGetPropertyNames):
14208        * VM/CodeGenerator.h:
14209        * VM/JSPropertyNameIterator.cpp: Added.
14210        (KJS::JSPropertyNameIterator::JSPropertyNameIterator):
14211        (KJS::JSPropertyNameIterator::type):
14212        (KJS::JSPropertyNameIterator::toPrimitive):
14213        (KJS::JSPropertyNameIterator::getPrimitiveNumber):
14214        (KJS::JSPropertyNameIterator::toBoolean):
14215        (KJS::JSPropertyNameIterator::toNumber):
14216        (KJS::JSPropertyNameIterator::toString):
14217        (KJS::JSPropertyNameIterator::toObject):
14218        (KJS::JSPropertyNameIterator::mark):
14219        (KJS::JSPropertyNameIterator::next):
14220        (KJS::JSPropertyNameIterator::invalidate):
14221        (KJS::JSPropertyNameIterator::~JSPropertyNameIterator):
14222        (KJS::JSPropertyNameIterator::create):
14223        * VM/JSPropertyNameIterator.h: Added.
14224        * VM/Machine.cpp:
14225        (KJS::Machine::privateExecute):
14226        * VM/Opcode.h:
14227        * VM/Register.h:
14228        (KJS::Register::):
14229        * kjs/PropertyNameArray.h:
14230        * kjs/nodes.cpp:
14231        (KJS::ForInNode::emitCode):
14232        * kjs/nodes.h:
14233        * kjs/value.h:
14234
142352008-04-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14236
14237        Reviewed by Maciej.
14238
14239        Change CodeGenerator::emitCall() so it increments the reference count of
14240        registers passed to it, and change its callers so they don't needlessly
14241        increment the reference count of the registers they are passing.
14242
14243        * VM/CodeGenerator.cpp:
14244        (KJS::CodeGenerator::emitCall):
14245        * kjs/nodes.cpp:
14246        (KJS::FunctionCallResolveNode::emitCode):
14247        (KJS::FunctionCallDotNode::emitCode):
14248
142492008-04-01  Maciej Stachowiak  <mjs@apple.com>
14250
14251        Reviewed by Oliver.
14252        
14253        - generate call for PostIncDotNode
14254
14255        * kjs/nodes.cpp:
14256        (KJS::PostIncDotNode::emitCode):
14257        * kjs/nodes.h:
14258
142592008-04-01  Maciej Stachowiak  <mjs@apple.com>
14260
14261        Build fix.
14262        
14263        - fix build (not sure how this ever worked?)
14264
14265        * kjs/nodes.cpp:
14266        (KJS::FunctionCallBracketNode::emitCode):
14267
142682008-04-01  Maciej Stachowiak  <mjs@apple.com>
14269
14270        Reviewed by Geoff.
14271        
14272        - generate code for FunctionCallBracketNode
14273
14274        * kjs/nodes.cpp:
14275        (KJS::FunctionCallBracketNode::emitCode):
14276        * kjs/nodes.h:
14277
142782008-04-01  Maciej Stachowiak  <mjs@apple.com>
14279
14280        Reviewed by Geoff.
14281        
14282        - Fix two crashing SunSpider tests
14283
14284        * VM/Machine.cpp:
14285        (KJS::Machine::privateExecute): set up 'this' properly for native calls.
14286        * kjs/list.h:
14287        (KJS::List::List): Fix intialization of buffer and size from
14288        vector, the initialization order was wrong.
14289
142902008-04-01  Geoffrey Garen  <ggaren@apple.com>
14291
14292        Build fix: marked ASSERT-only variables as UNUSED_PARAMs.
14293
14294        * VM/Machine.cpp:
14295        (KJS::Machine::privateExecute):
14296        * kjs/JSVariableObject.h:
14297        (KJS::JSVariableObject::symbolTableInitializeVariable):
14298
142992008-04-01  Geoffrey Garen  <ggaren@apple.com>
14300
14301        Reviewed by Oliver Hunt.
14302        
14303        Next step toward global code: Moved get, put, and initializeVariable
14304        functionality up into JSVariableObject, and changed JSActivation to
14305        rely on it. 
14306
14307        * kjs/JSActivation.cpp:
14308        (KJS::JSActivation::JSActivation):
14309        (KJS::JSActivation::getOwnPropertySlot):
14310        (KJS::JSActivation::put):
14311        (KJS::JSActivation::initializeVariable):
14312        * kjs/JSVariableObject.h:
14313        (KJS::JSVariableObject::valueAt):
14314        (KJS::JSVariableObject::isReadOnly):
14315        (KJS::JSVariableObject::symbolTableGet):
14316        (KJS::JSVariableObject::symbolTablePut):
14317        (KJS::JSVariableObject::symbolTableInitializeVariable):
14318
143192008-04-01  Maciej Stachowiak  <mjs@apple.com>
14320
14321        Reviewed by Sam.
14322        
14323        - fix HashTable assertion on some SunSpider tests
14324        
14325        Don't use -1 as the deleted value for JSValue*-keyed hashtables,
14326        since it is a valid value (it's the immediate for -1).
14327
14328        * VM/CodeGenerator.h:
14329        (KJS::CodeGenerator::JSValueHashTraits::emptyValue):
14330        (KJS::CodeGenerator::JSValueHashTraits::deletedValue):
14331        * kjs/JSImmediate.h:
14332        (KJS::JSImmediate::impossibleValue):
14333
143342008-04-01  Sam Weinig  <sam@webkit.org>
14335
14336        Reviewed by Maciej Stachowiak.
14337
14338        Add support for calling Native constructors like new Array(). 
14339
14340        * VM/CodeBlock.cpp:
14341        (KJS::CodeBlock::dump):
14342        * VM/CodeGenerator.cpp:
14343        (KJS::CodeGenerator::emitConstruct):
14344        * VM/CodeGenerator.h:
14345        * VM/Machine.cpp:
14346        (KJS::Machine::privateExecute):
14347        * VM/Opcode.h:
14348        * kjs/nodes.cpp:
14349        (KJS::NewExprNode::emitCode):
14350        * kjs/nodes.h:
14351
143522008-04-01  Maciej Stachowiak  <mjs@apple.com>
14353
14354        Reviewed by Sam.
14355        
14356        - add some missing toOpbject calls to avoid crashing when calling methods on primitives
14357
14358        * VM/Machine.cpp:
14359        (KJS::Machine::privateExecute):
14360
143612008-04-01  Geoffrey Garen  <ggaren@apple.com>
14362
14363        Reviewed by Oliver Hunt.
14364        
14365        Changed Machine::dumpRegisters to take a pointer instead of a reference,
14366        so gdb understands how to call it.
14367
14368        * VM/Machine.cpp:
14369        (KJS::Machine::dumpRegisters):
14370        (KJS::Machine::privateExecute):
14371        * VM/Machine.h:
14372
143732008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14374
14375        Reviewed by Maciej.
14376
14377        Fix CodeGenerator::addConstant() so it uses the functionExpressions
14378        counter for function expressions, not the functions counter.
14379
14380        * VM/CodeGenerator.cpp:
14381        (KJS::CodeGenerator::addConstant):
14382
143832008-03-31  Sam Weinig  <sam@webkit.org>
14384
14385        Reviewed by Geoffrey Garen.
14386
14387        Add emitCode support for TypeOfResolveNode and TypeOfValueNode.
14388        Added new opcode op_type_of to handle them.
14389
14390        * VM/CodeBlock.cpp:
14391        (KJS::CodeBlock::dump):
14392        * VM/CodeGenerator.cpp:
14393        (KJS::CodeGenerator::emitNot):
14394        (KJS::CodeGenerator::emitInstanceOf):
14395        (KJS::CodeGenerator::emitTypeOf):
14396        * VM/CodeGenerator.h:
14397        * VM/Machine.cpp:
14398        (KJS::jsTypeStringForValue):
14399        (KJS::Machine::privateExecute):
14400        * VM/Opcode.h:
14401        * kjs/nodes.cpp:
14402        (KJS::TypeOfResolveNode::emitCode):
14403        (KJS::TypeOfValueNode::emitCode):
14404        * kjs/nodes.h:
14405
144062008-03-31  Sam Weinig  <sam@webkit.org>
14407
14408        Reviewed by Oliver Hunt.
14409
14410        Fix non-computed goto version of isOpcode. op_end is a valid opcode.
14411
14412        * VM/Machine.cpp:
14413        (KJS::Machine::isOpcode):
14414
144152008-03-31  Geoffrey Garen  <ggaren@apple.com>
14416
14417        Reviewed by Maciej Stachowiak.
14418        
14419        Added op_post_dec.
14420
144212008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14422
14423        Reviewed by Geoffrey Garen.
14424
14425        Add support for FunctionCallDotNode.
14426
14427        * kjs/nodes.cpp:
14428        (KJS::FunctionCallDotNode::emitCode):
14429        * kjs/nodes.h:
14430
144312008-03-31  Geoffrey Garen  <ggaren@apple.com>
14432
14433        Reviewed by Beth Dakin.
14434
14435        Next step toward global code: Removed more obsolete API, moved
14436        saveLocalStorage and restoreLocalStorage to JSGlobalObject subclass,
14437        since it's only intended for use there.
14438        
14439        * ChangeLog:
14440        * JavaScriptCore.exp:
14441        * kjs/Activation.h:
14442        * kjs/JSGlobalObject.cpp:
14443        (KJS::JSGlobalObject::saveLocalStorage):
14444        (KJS::JSGlobalObject::restoreLocalStorage):
14445        * kjs/JSGlobalObject.h:
14446        * kjs/JSVariableObject.cpp:
14447        * kjs/JSVariableObject.h:
14448        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
14449        * kjs/function.cpp:
14450        (KJS::ActivationImp::ActivationImp):
14451
144522008-03-31  Geoffrey Garen  <ggaren@apple.com>
14453
14454        Reviewed by Beth Dakin.
14455
14456        Next step toward global code: subclass JSActivation + JSActivationData
14457        from JSVariableObject + JSVariableObjectData.
14458        
14459        JSActivation now relies on JSVariableObject for access to registers and
14460        symbol table, and for some delete functionality, but not for anything
14461        else yet.
14462
14463        (KJS::JSActivation::mark): Cleaned up the style here a little bit.
14464
144652008-03-31  Geoffrey Garen  <ggaren@apple.com>
14466
14467        Reviewed by Beth Dakin.
14468        
14469        Next step toward global code: store "rOffset" in JSVariableObjectData.
14470
14471        * kjs/JSGlobalObject.h:
14472        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
14473        * kjs/JSVariableObject.h:
14474        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
14475
144762008-03-31  Geoffrey Garen  <ggaren@apple.com>
14477
14478        Reviewed by Maciej Stachowiak.
14479        
14480        Next steps toward global code:
14481        
14482        * Moved access to the register file into JSVariableObject.
14483        
14484        * Added more ASSERTs to indicate obsolete APIs there are just hanging
14485        around to stave off build failures.
14486
14487        * kjs/JSGlobalObject.h:
14488        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
14489        * kjs/JSVariableObject.h:
14490        (KJS::JSVariableObject::registers):
14491        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
14492        (KJS::JSVariableObject::JSVariableObject):
14493
144942008-03-31  Sam Weinig  <sam@webkit.org>
14495
14496        Reviewed by Oliver. Tweaked somewhat by Maciej.
14497        
14498        - implement codegen for ReadModifyResolveNode
14499
14500        * kjs/nodes.cpp:
14501        (KJS::emitReadModifyAssignment):
14502        (KJS::ReadModifyResolveNode::emitCode):
14503        * kjs/nodes.h:
14504
145052008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14506
14507        Reviewed by Geoff.
14508
14509        Fix the build -- r31492 removed activation tear-off, but r31493 used it.
14510
14511        * kjs/nodes.cpp:
14512        (KJS::FuncExprNode::makeFunction):
14513
145142008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14515
14516        Reviewed by Maciej.
14517
14518        Add support for FuncExprNode to SquirrelFish.
14519
14520        * VM/CodeBlock.cpp:
14521        (KJS::CodeBlock::dump):
14522        * VM/CodeBlock.h:
14523        * VM/CodeGenerator.cpp:
14524        (KJS::CodeGenerator::addConstant):
14525        (KJS::CodeGenerator::emitNewFunctionExpression):
14526        * VM/CodeGenerator.h:
14527        * VM/Machine.cpp:
14528        (KJS::Machine::privateExecute):
14529        * VM/Opcode.h:
14530        * kjs/nodes.cpp:
14531        (KJS::FuncExprNode::emitCode):
14532        (KJS::FuncExprNode::makeFunction):
14533        * kjs/nodes.h:
14534
145352008-03-31  Geoffrey Garen  <ggaren@apple.com>
14536
14537        Reviewed by Maciej Stachowiak.
14538        
14539        First step toward global code: removed some obsolete JSGlobalObject
14540        APIs, changing clients to ASSERT_NOT_REACHED.
14541        
14542        Activation tear-off and scope chain pushing is obsolete because we
14543        statically detect whether an activation + scope node is required.
14544        
14545        The variableObject() and activationObject() accessors are obsolete
14546        because they haven't been maintained, and they're mostly used by
14547        node evaluation code, anyway.
14548        
14549        The localStorage() accessor is obsolete because everything is in
14550        registers now, and it's mostly used by node evaluation code, anyway.
14551
145522008-03-31  Maciej Stachowiak  <mjs@apple.com>
14553
14554        Reviewed by Darin.
14555        
14556        - implement codegen for bracket accessor and bracket assign
14557
14558        * VM/CodeBlock.cpp:
14559        (KJS::CodeBlock::dump):
14560        * VM/CodeGenerator.cpp:
14561        (KJS::CodeGenerator::emitGetPropVal):
14562        (KJS::CodeGenerator::emitPutPropVal):
14563        * VM/CodeGenerator.h:
14564        * VM/Machine.cpp:
14565        (KJS::Machine::privateExecute):
14566        * VM/Opcode.h:
14567        * kjs/nodes.cpp:
14568        (KJS::BracketAccessorNode::emitCode):
14569        (KJS::AssignBracketNode::emitCode):
14570        * kjs/nodes.h:
14571
145722008-03-31  Geoffrey Garen  <ggaren@apple.com>
14573
14574        Not reviewed.
14575        
14576        Removed FIXME that I just fixed.
14577        
14578        Added ASSERT to cover an error previously only covered by a FIXME.
14579
14580        * kjs/JSActivation.cpp:
14581        (KJS::JSActivation::getOwnPropertySlot):
14582
145832008-03-31  Geoffrey Garen  <ggaren@apple.com>
14584
14585        Not reviewed.
14586
14587        Fixed indentation inside op_call. (I had left this code badly indented
14588        to make the behavior-changing diff clearer.)
14589
14590        * VM/Machine.cpp:
14591        (KJS::Machine::privateExecute):
14592
145932008-03-31  Geoffrey Garen  <ggaren@apple.com>
14594
14595        Reviewed by Sam Weinig.
14596        
14597        Fixed up logging of jump instructions to follow the following style:
14598        
14599        jump    offset(->absoluteTarget)
14600
14601        * VM/CodeBlock.cpp:
14602        (KJS::CodeBlock::dump):
14603
146042008-03-31  Geoffrey Garen  <ggaren@apple.com>
14605
14606        Reviewed by Sam Weinig.
14607        
14608        Changed the SymbolTable API to use int instead of size_t. It has been
14609        using int internally for a while now (since squirrelfish symbols can
14610        have negative indices).
14611
146122008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14613
14614        Reviewed by Maciej.
14615
14616        Add support for FunctionCallValueNode.
14617
14618        * kjs/nodes.cpp:
14619        (KJS::FunctionCallValueNode::emitCode):
14620        * kjs/nodes.h:
14621
146222008-03-31  Maciej Stachowiak  <mjs@apple.com>
14623
14624        Reviewed by Oliver.
14625        
14626        1) Implemented array literals
14627        
14628        2) Renamed op_object_get and op_object_put to op_get_prop_id and
14629        op_put_prop_id in preparation for new variants.
14630
14631        * VM/CodeBlock.cpp:
14632        (KJS::CodeBlock::dump):
14633        * VM/CodeGenerator.cpp:
14634        (KJS::CodeGenerator::emitNewArray):
14635        (KJS::CodeGenerator::emitGetPropId):
14636        (KJS::CodeGenerator::emitPutPropId):
14637        (KJS::CodeGenerator::emitPutPropIndex):
14638        * VM/CodeGenerator.h:
14639        (KJS::CodeGenerator::CodeGenerator):
14640        (KJS::CodeGenerator::propertyNames):
14641        * VM/Machine.cpp:
14642        (KJS::Machine::privateExecute):
14643        * VM/Opcode.h:
14644        * kjs/nodes.cpp:
14645        (KJS::ArrayNode::emitCode):
14646        (KJS::PropertyListNode::emitCode):
14647        (KJS::DotAccessorNode::emitCode):
14648        (KJS::PostIncResolveNode::emitCode):
14649        (KJS::PreIncResolveNode::emitCode):
14650        (KJS::AssignResolveNode::emitCode):
14651        (KJS::AssignDotNode::emitCode):
14652        * kjs/nodes.h:
14653
146542008-03-30  Geoffrey Garen  <ggaren@apple.com>
14655
14656        Reviewed by Oliver Hunt.
14657        
14658        Implemented native function calls. (Re-entering from native code back
14659        to JS doesn't work yet, though.)
14660
14661        0.2% speedup overall, due to some inlining tweaks. 3.6% regression on
14662        function-empty.js, since we're making a new virtual call and taking a
14663        new branch inside every op_call.
14664        
14665        I adjusted the JavaScriptCore calling convention to minimize overhead,
14666        like so:
14667        
14668        The machine calls a single virtual function, "getCallData", to get all
14669        the data it needs for a function call. Native code still uses the old
14670        "isObject()" check followed by an "implementsCall()" check, which
14671        aliases to "getCallData". (We can optimize native code to use getCallData
14672        at our leisure.)
14673        
14674        To supply a list of arguments, the machine calls a new List constructor
14675        that just takes a pointer and a length, without copying. Native code
14676        still appends to the list one argument at a time. (We can optimize
14677        native code to use the new List constructor at our leisure.)
14678
14679        * VM/Machine.cpp:
14680        (KJS::Machine::privateExecute): Changed resize() call to grow() call,
14681        to encourage the compiler to inline the Vector code.
14682
14683        * kjs/CallData.h: Added.
14684        (KJS::): CallData is a union because eventually native calls will stuff
14685        a function pointer into it, to eliminate the callAsFunction virtual call.
14686
14687        * kjs/function.cpp:
14688        (KJS::FunctionImp::callAsFunction): Changed this to an ASSERT since
14689        it's not implemented yet.
14690        
14691        * kjs/list.h: Made the List class two-faced, to support the old way and
14692        the new way during this transition phase: lists can be made read-only
14693        with just a pointer and a legnth, or you can append to them one item
14694        at a time.
14695
14696        * kjs/value.h:
14697        (KJS::jsUndefined): Marked this function ALWAYS_INLINE for the benefit
14698        of a certain compiler that doesn't know what's best for it.
14699
147002008-03-30  Maciej Stachowiak  <mjs@apple.com>
14701
14702        Reviewed by Oliver.
14703
14704        Dump code that codegen can't handle yet, so it's easier to prioritize missing nodes.
14705        
14706        * kjs/nodes.h:
14707        (KJS::Node::emitCode):
14708
147092008-03-30  Maciej Stachowiak  <mjs@apple.com>
14710
14711        Reviewed by Oliver.
14712
14713        Improve dumping of bytecode and fix coding style accordingly.
14714        
14715        Registers are printed as lr1 for locals, tr1 for temp registers. Identifiers print as
14716        foobar(@id0) and constants print as "foo"(@k1) or 312.4(@k2) or the like. Constant and
14717        identifier tables are dumped for reference.
14718        
14719        * VM/CodeBlock.cpp:
14720        (KJS::escapeQuotes):
14721        (KJS::valueToSourceString):
14722        (KJS::registerName):
14723        (KJS::constantName):
14724        (KJS::idName):
14725        (KJS::printUnaryOp):
14726        (KJS::printBinaryOp):
14727        (KJS::CodeBlock::dump):
14728        * VM/Machine.cpp:
14729        (KJS::resolve):
14730        (KJS::resolveBase):
14731        (KJS::Machine::privateExecute):
14732
147332008-03-30  Maciej Stachowiak  <mjs@apple.com>
14734
14735        Reviewed by Oliver.
14736        
14737        Implement StringNode and VoidNode (both pretty trivial).
14738
14739        * kjs/nodes.cpp:
14740        (KJS::StringNode::emitCode):
14741        (KJS::VoidNode::emitCode):
14742        * kjs/nodes.h:
14743
147442008-03-30  Maciej Stachowiak  <mjs@apple.com>
14745
14746        Reviewed by Sam.
14747
14748        Implement CommaNode.
14749        
14750        * kjs/nodes.cpp:
14751        (KJS::CommaNode::emitCode):
14752        * kjs/nodes.h:
14753
147542008-03-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14755
14756        Reviewed by Maciej.
14757
14758        Adds support for dot notation and object literals.
14759
14760        * VM/CodeBlock.cpp:
14761        (KJS::CodeBlock::dump):
14762        * VM/CodeGenerator.cpp:
14763        (KJS::CodeGenerator::emitNewObject):
14764        * VM/CodeGenerator.h:
14765        * VM/Machine.cpp:
14766        (KJS::Machine::privateExecute):
14767        * VM/Opcode.h:
14768        * kjs/nodes.cpp:
14769        (KJS::ObjectLiteralNode::emitCode):
14770        (KJS::PropertyListNode::emitCode):
14771        (KJS::DotAccessorNode::emitCode):
14772        (KJS::AssignDotNode::emitCode):
14773        * kjs/nodes.h:
14774
147752008-03-29  Geoffrey Garen  <ggaren@apple.com>
14776
14777        Reviewed by Maciej Stachowiak.
14778        
14779        Mark the register file. 
14780        
14781        It's a conservative mark for now, but once registers are typed, we can
14782        do an exact mark.
14783        
14784        1.4% regression regardless of whether we actually do the marking.
14785        GCC is is worth every penny.
14786
14787        * VM/Machine.cpp:
14788        (KJS::Machine::privateExecute): Most of the changes here are just for
14789        the fact that "registers" is a pointer now.
14790
14791        * kjs/JSGlobalObject.cpp: The global object owns the register file now.
14792
147932008-03-28  Oliver Hunt  <oliver@apple.com>
14794
14795        Reviewed by Maciej.
14796
14797        Bug 18204: SquirrelFish: continue/break do not correctly handle scope popping
14798        <http://bugs.webkit.org/show_bug.cgi?id=18204>
14799
14800        We now track the scope depth as part of a loop context, and add an
14801        extra instruction op_jump_scopes that is used to perform a jump across
14802        dynamic scope boundaries.
14803
14804        * VM/CodeBlock.cpp:
14805        (KJS::CodeBlock::dump):
14806        * VM/CodeGenerator.cpp:
14807        (KJS::CodeGenerator::emitJumpScopes):
14808        * VM/CodeGenerator.h:
14809        * VM/Machine.cpp:
14810        (KJS::Machine::privateExecute):
14811        * VM/Opcode.h:
14812        * kjs/nodes.cpp:
14813        (KJS::ContinueNode::emitCode):
14814        (KJS::BreakNode::emitCode):
14815
148162008-03-28  Sam Weinig  <sam@webkit.org>
14817
14818        Reviewed by Geoffrey Garen.
14819
14820        Add emitCode support for ConditionalNode.
14821
14822        * kjs/nodes.cpp:
14823        (KJS::ConditionalNode::emitCode):
14824        * kjs/nodes.h:
14825
148262008-03-28  Geoffrey Garen  <ggaren@apple.com>
14827
14828        Reviewed by Oliver Hunt.
14829        
14830        Responding to feedback, added some comments, fixed up a few names, and
14831        clarified that "locals" always means all local variables, functions,
14832        and parameters.
14833
148342008-03-28  Geoffrey Garen  <ggaren@apple.com>
14835
14836        Reviewed by Oliver Hunt.
14837
14838        Added support for "this".
14839        
14840        Supply an implicit "this" value as the first argument to every function.
14841        Alias the "this" keyword to that argument.
14842        
14843        1% regression overall, 2.5% regression on empty function calls. Seems
14844        like a reasonable cost for now, since we're doing more work.
14845        (Eventually, we might decide to create a version of op_call specialized
14846        for a known null "this" value.)
14847
14848        * VM/CodeBlock.cpp:
14849        (KJS::CodeBlock::dump):
14850        * VM/CodeGenerator.cpp:
14851        (KJS::CodeGenerator::emitCall):
14852        * VM/CodeGenerator.h:
14853        (KJS::CodeGenerator::CodeGenerator):
14854        * VM/Machine.cpp:
14855        (KJS::Machine::privateExecute):
14856        * kjs/CommonIdentifiers.cpp:
14857        (KJS::CommonIdentifiers::CommonIdentifiers):
14858        * kjs/CommonIdentifiers.h:
14859        * kjs/nodes.cpp:
14860        (KJS::ThisNode::emitCode):
14861        (KJS::FunctionCallResolveNode::emitCode):
14862        * kjs/nodes.h:
14863
148642008-03-28  Oliver Hunt  <oliver@apple.com>
14865
14866        Reviewed by Geoff.
14867
14868        Bug 18192: Squirrelfish needs support for break and continue
14869        <http://bugs.webkit.org/show_bug.cgi?id=18192>
14870
14871        Added a loop context stack to the code generator to provide the
14872        correct jump labels for continue and goto.  Added logic to the
14873        currently implemented loop constructs to manage entry and exit
14874        from the loop contexts.  Finally, implemented codegen for break
14875        and continue (and a pass through for LabelNode)
14876
14877        * VM/CodeGenerator.cpp:
14878        (KJS::CodeGenerator::pushLoopContext):
14879        (KJS::CodeGenerator::popLoopContext):
14880        (KJS::CodeGenerator::loopContextForIdentifier):
14881        (KJS::CodeGenerator::labelForContinue):
14882        (KJS::CodeGenerator::labelForBreak):
14883        * VM/CodeGenerator.h:
14884        * kjs/nodes.cpp:
14885        (KJS::DoWhileNode::emitCode):
14886        (KJS::WhileNode::emitCode):
14887        (KJS::ForNode::emitCode):
14888        (KJS::ContinueNode::emitCode):
14889        (KJS::BreakNode::emitCode):
14890        (KJS::LabelNode::emitCode):
14891        * kjs/nodes.h:
14892
148932008-03-27  Sam Weinig  <sam@webkit.org>
14894
14895        Reviewed by Geoffrey Garen.
14896
14897        Add emitCode support for UnaryPlusNode, NegateNode, BitwiseNotNode and LogicalNotNode.
14898
14899        * VM/CodeBlock.cpp:
14900        (KJS::printUnaryOp):
14901        (KJS::CodeBlock::dump):
14902        * VM/CodeGenerator.cpp:
14903        (KJS::CodeGenerator::emitToJSNumber):
14904        (KJS::CodeGenerator::emitNegate):
14905        (KJS::CodeGenerator::emitBitNot):
14906        (KJS::CodeGenerator::emitNot):
14907        * VM/CodeGenerator.h:
14908        * VM/Machine.cpp:
14909        (KJS::Machine::privateExecute):
14910        * VM/Opcode.h:
14911        * kjs/nodes.cpp:
14912        (KJS::UnaryPlusNode::emitCode):
14913        (KJS::NegateNode::emitCode):
14914        (KJS::BitwiseNotNode::emitCode):
14915        (KJS::LogicalNotNode::emitCode):
14916        * kjs/nodes.h:
14917
149182008-03-27  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
14919
14920        Reviewed by Maciej Stachowiak.
14921
14922        Add support for LogicalAndNode and LogicalOrNode.
14923
14924        * kjs/nodes.cpp:
14925        (KJS::LogicalAndNode::emitCode):
14926        (KJS::LogicalOrNode::emitCode):
14927        * kjs/nodes.h:
14928
149292008-03-27  Sam Weinig  <sam@webkit.org>
14930
14931        Clean up code and debug output.
14932
14933        * VM/CodeBlock.cpp:
14934        (KJS::CodeBlock::dump):
14935        * VM/Machine.cpp:
14936        (KJS::Machine::privateExecute):
14937
149382008-03-27  Geoffrey Garen  <ggaren@apple.com>
14939
14940        Moved an ASSERT to a more logical place.
14941
14942        * VM/Machine.cpp:
14943        (KJS::Machine::privateExecute):
14944
149452008-03-27  Sam Weinig  <sam@webkit.org>
14946
14947        Reviewed by Oliver Hunt.
14948
14949        Add emitCode support for InstanceOfNode.
14950
14951        * VM/CodeBlock.cpp:
14952        (KJS::CodeBlock::dump):
14953        * VM/CodeGenerator.cpp:
14954        (KJS::CodeGenerator::emitInstanceOf):
14955        * VM/CodeGenerator.h:
14956        * VM/Machine.cpp:
14957        (KJS::Machine::privateExecute):
14958        * VM/Opcode.h:
14959        * kjs/nodes.cpp:
14960        (KJS::InstanceOfNode::emitCode):
14961        * kjs/nodes.h:
14962
149632008-03-27  Oliver Hunt  <oliver@apple.com>
14964
14965        Reviewed by Maciej.
14966
14967        Bug 18142: squirrelfish needs to support dynamic scoping/with
14968        <http://bugs.webkit.org/show_bug.cgi?id=18142>
14969
14970        Add support for dynamic scoping and add code to handle 'with'
14971        statements.
14972
14973        * VM/CodeBlock.cpp:
14974        (KJS::CodeBlock::dump):
14975        * VM/CodeBlock.h:
14976        (KJS::CodeBlock::CodeBlock):
14977        * VM/CodeGenerator.cpp:
14978        (KJS::CodeGenerator::getRegister):
14979        (KJS::CodeGenerator::emitPushScope):
14980        (KJS::CodeGenerator::emitPopScope):
14981        * VM/CodeGenerator.h:
14982        (KJS::CodeGenerator::CodeGenerator):
14983        * VM/Machine.cpp:
14984        (KJS::Machine::privateExecute):
14985        * VM/Opcode.h:
14986        * kjs/nodes.cpp:
14987        (KJS::WithNode::emitCode):
14988        * kjs/nodes.h:
14989
149902008-03-27  Sam Weinig  <sam@webkit.org>
14991
14992        Reviewed by Geoffrey Garen.
14993
14994        Add emitCode support for NullNode, FalseNode, TrueNode, IfNode, IfElseNode, DoWhileNode and WhileNode
14995
14996        * VM/CodeBlock.cpp:
14997        (KJS::CodeBlock::dump): Dump op_jfalse opcode.
14998        * VM/CodeGenerator.cpp:
14999        (KJS::CodeGenerator::emitJumpIfFalse): Identical to emitJumpIfTrue except it emits the op_jfalse opcode.
15000        (KJS::CodeGenerator::emitLoad): Add and emitLoad override for booleans.
15001        * VM/CodeGenerator.h:
15002        * VM/Machine.cpp:
15003        (KJS::Machine::privateExecute): Adds execution of op_jfalse. It is identical to op_jtrue, except the
15004        the condition is reversed.
15005        * VM/Opcode.h: Add op_jfalse.
15006        * kjs/nodes.cpp:
15007        (KJS::NullNode::emitCode): Added.
15008        (KJS::FalseNode::emitCode): Added.
15009        (KJS::TrueNode::emitCode): Added.
15010        (KJS::IfNode::emitCode): Added.
15011        (KJS::IfElseNode::emitCode): Added.
15012        (KJS::DoWhileNode::emitCode): Added.
15013        (KJS::WhileNode::emitCode): Added.
15014        * kjs/nodes.h:
15015
150162008-03-26  Geoffrey Garen  <ggaren@apple.com>
15017
15018        Nixed an unused List.
15019        
15020        The calm before my stormy war against the List class.
15021
15022        * kjs/function_object.cpp:
15023        (KJS::FunctionObjectImp::construct):
15024
150252008-03-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15026
15027        Reviewed by Geoffrey Garen.
15028
15029        Adds support for EqualNode, NotEqualNode, StrictEqualNode, NotStrictEqualNode,
15030        LessEqNode, GreaterNode, GreaterEqNode, MultNode, DivNode, ModNode, SubNode,
15031        LeftShiftNode, RightShiftNode, UnsignedRightShiftNode, BitAndNode, BitXOrNode,
15032        and BitOrNode.
15033
15034        * VM/CodeBlock.cpp:
15035        (KJS::CodeBlock::dump):
15036        * VM/CodeGenerator.cpp:
15037        (KJS::CodeGenerator::emitEqual):
15038        (KJS::CodeGenerator::emitNotEqual):
15039        (KJS::CodeGenerator::emitStrictEqual):
15040        (KJS::CodeGenerator::emitNotStrictEqual):
15041        (KJS::CodeGenerator::emitLessEq):
15042        (KJS::CodeGenerator::emitMult):
15043        (KJS::CodeGenerator::emitDiv):
15044        (KJS::CodeGenerator::emitMod):
15045        (KJS::CodeGenerator::emitSub):
15046        (KJS::CodeGenerator::emitLeftShift):
15047        (KJS::CodeGenerator::emitRightShift):
15048        (KJS::CodeGenerator::emitUnsignedRightShift):
15049        (KJS::CodeGenerator::emitBitAnd):
15050        (KJS::CodeGenerator::emitBitXOr):
15051        (KJS::CodeGenerator::emitBitOr):
15052        * VM/CodeGenerator.h:
15053        * VM/Machine.cpp:
15054        (KJS::jsLessEq):
15055        (KJS::Machine::privateExecute):
15056        * VM/Opcode.h:
15057        * kjs/nodes.cpp:
15058        (KJS::MultNode::emitCode):
15059        (KJS::DivNode::emitCode):
15060        (KJS::ModNode::emitCode):
15061        (KJS::SubNode::emitCode):
15062        (KJS::LeftShiftNode::emitCode):
15063        (KJS::RightShiftNode::emitCode):
15064        (KJS::UnsignedRightShiftNode::emitCode):
15065        (KJS::GreaterNode::emitCode):
15066        (KJS::LessEqNode::emitCode):
15067        (KJS::GreaterEqNode::emitCode):
15068        (KJS::EqualNode::emitCode):
15069        (KJS::NotEqualNode::emitCode):
15070        (KJS::StrictEqualNode::emitCode):
15071        (KJS::NotStrictEqualNode::emitCode):
15072        (KJS::BitAndNode::emitCode):
15073        (KJS::BitXOrNode::emitCode):
15074        (KJS::BitOrNode::emitCode):
15075        * kjs/nodes.h:
15076
150772008-03-26  Geoffrey Garen  <ggaren@apple.com>
15078
15079        Reviewed by Oliver Hunt.
15080        
15081        Only print debug dumps in debug builds.
15082
15083        * VM/CodeGenerator.cpp:
15084        (KJS::CodeGenerator::generate):
15085        * VM/Machine.cpp:
15086        (KJS::Machine::privateExecute):
15087
150882008-03-26  Geoffrey Garen  <ggaren@apple.com>
15089
15090        Reviewed by Oliver Hunt.
15091        
15092        Moved a few files around in the XCode project.
15093
15094        * JavaScriptCore.xcodeproj/project.pbxproj:
15095
150962008-03-26  Geoffrey Garen  <ggaren@apple.com>
15097
15098        Reviewed by Oliver Hunt.
15099        
15100        Made closures work.
15101        
15102        An activation object aliases to the register file until its associated
15103        function returns, at which point it copies the registers for locals and
15104        parameters into an independent storage buffer.
15105
151062008-03-24  Geoffrey Garen  <ggaren@apple.com>
15107
15108        Reviewed by Oliver Hunt.
15109        
15110        Fixed recent 25% regression on simple for loop test. GCC seems to be
15111        very finicky about the code that gets inlined into
15112        Machine::privateExecute.
15113
15114        Everything in this patch is simply the result of experiment.
15115        
15116        The resolve and resolve_base opcodes do not seem to have gotten slower
15117        from this change.
15118
15119        * VM/Machine.cpp:
15120        (KJS::resolve):
15121        (KJS::resolveBase):
15122        (KJS::Machine::privateExecute):
15123        * kjs/nodes.h:
15124
151252008-03-24  Oliver Hunt  <oliver@apple.com>
15126
15127        Reviewed by Geoff Garen.
15128
15129        Bug 18059: squirrelfish needs to compile on platforms without computed goto
15130        <http://bugs.webkit.org/show_bug.cgi?id=18059>
15131
15132        "Standard" macro style support for conditionalising the use of computed goto.
15133
15134        * JavaScriptCore.xcodeproj/project.pbxproj:
15135        * VM/Machine.cpp:
15136        (KJS::Machine::isOpcode):
15137        (KJS::Machine::privateExecute):
15138        * VM/Machine.h:
15139        (KJS::Machine::getOpcode):
15140        (KJS::Machine::getOpcodeID):
15141        * VM/Opcode.h:
15142        * wtf/Platform.h:
15143
151442008-03-24  Geoffrey Garen  <ggaren@apple.com>
15145
15146        Moved my notes from nodes.h to the wiki.
15147
15148        * kjs/nodes.h:
15149
151502008-03-24  Geoffrey Garen  <ggaren@apple.com>
15151
15152        SquirrelFish lives.
15153        
15154        Initial check-in of the code I've been carrying around. Lots of stuff
15155        doesn't work. Plus a bunch of empty files.
15156
15157=== Start merge of squirrelfish ===
15158
151592008-05-21  Darin Adler  <darin@apple.com>
15160
15161        - try to fix the Windows build
15162
15163        * profiler/Profiler.cpp:
15164        (KJS::Profiler::stopProfiling): Use ptrdiff_t instead of the less-common but incredibly
15165        similar ssize_t type.
15166        * wtf/AVLTree.h:
15167        (KJS::AVLTree::search): Added a typename for a dependent name that's a type.
15168
151692008-05-21  Darin Adler  <darin@apple.com>
15170
15171        Reviewed by Anders.
15172
15173        - fix <rdar://problem/5952721> bug in JavaScript arguments object property lookup
15174
15175        Test: fast/js/arguments-bad-index.html
15176
15177        * kjs/function.cpp:
15178        (KJS::IndexToNameMap::IndexToNameMap): Use unsigned instead of int.
15179        (KJS::IndexToNameMap::isMapped): Use unsigned instead of int, and also use the
15180        strict version of the numeric conversion function, since we don't want to allow
15181        trailing junk.
15182        (KJS::IndexToNameMap::unMap): Ditto.
15183        (KJS::IndexToNameMap::operator[]): Ditto.
15184        * kjs/function.h: Changed IndexToNameMap::size type from int to unsigned.
15185
151862008-05-21  Timothy Hatcher  <timothy@apple.com>
15187
15188        Change the Profiler to allow multiple profiles to be running at
15189        the same time. This can happen when you have nested console.profile()
15190        calls. This required two changes. First, the Profiler needed to keep a
15191        Vector of current profiles, instead of one. Second, a Profile needs
15192        to keep track of the global ExecState it started in and the page group
15193        identifier it is tracking.
15194
15195        The stopProfiling call now takes the same arguments as startProfiling.
15196        This makes sure the correct profile is stopped. Passing a null UString
15197        as the title will stop the last profile for the matching ExecState.
15198
15199        <rdar://problem/5951559> Multiple pages profiling can interfere with each other
15200
15201        Reviewed by Kevin McCullough.
15202
15203        * JavaScriptCore.exp: Added new exports. Removed old symbols.
15204        * profiler/Profile.cpp:
15205        (KJS::Profile::Profile): New constructor arguments for the
15206        originatingGlobalExec and pageGroupIdentifier.
15207        (KJS::Profile::stopProfiling): Set the m_originatingGlobalExec to null.
15208        * profiler/Profile.h:
15209        (KJS::Profile::create): Additional arguments.
15210        (KJS::Profile::originatingGlobalExec): Return m_originatingGlobalExec.
15211        (KJS::Profile::pageGroupIdentifier): Return m_pageGroupIdentifier.
15212        * profiler/Profiler.cpp:
15213        (KJS::Profiler::findProfile): Added. Finds a Profile that matches
15214        the ExecState and title.
15215        (KJS::Profiler::startProfiling): Return early if there is already
15216        a Profile with the ExecState and title. If not, create a new profile
15217        and append it to m_currentProfiles.
15218        (KJS::Profiler::stopProfiling): Loops through m_currentProfiles
15219        and find the one matching the ExecState and title. If one is found
15220        call stopProfiling and return the Profile after removing it
15221        from m_currentProfiles.
15222        (KJS::dispatchFunctionToProfiles): Helper inline function to loop through
15223        m_currentProfiles and call a Profile function.
15224        (KJS::Profiler::willExecute): Call dispatchFunctionToProfiles.
15225        (KJS::Profiler::didExecute): Ditto.
15226        * profiler/Profiler.h:
15227
152282008-05-21  Alexey Proskuryakov  <ap@webkit.org>
15229
15230        Reviewed by Darin.
15231
15232        <rdar://problem/5908520> REGRESSION (3.1.1-r33033): Crash in WebKit when opening or
15233        refreshing page on people.com
15234
15235        The problem was that STL algorithms do not work with non-conformant comparators, and the
15236        site used sort(function() { return 0.5 - Math.random(); } to randomly shuffle an array.
15237
15238        https://bugs.webkit.org/show_bug.cgi?id=18687
15239        REGRESSION(r32220): ecma/Array/15.4.4.5-3.js test now fails in GMT(BST)
15240
15241        Besides relying on sort stability, this test was just broken, and kept failing with the
15242        new stable sort.
15243
15244        Tests: fast/js/sort-randomly.html
15245               fast/js/sort-stability.html
15246               fast/js/comparefn-sort-stability.html
15247
15248        * kjs/avl_tree.h: Added an AVL tree implementation.
15249
15250        * JavaScriptCore.xcodeproj/project.pbxproj:
15251        * wtf/AVLTree.h: Added.
15252        Added an AVL tree implementation.
15253
15254        * kjs/array_instance.cpp:
15255        (KJS::ArrayInstance::increaseVectorLength):
15256        (KJS::ArrayInstance::sort):
15257        (KJS::AVLTreeAbstractorForArrayCompare::get_less):
15258        (KJS::AVLTreeAbstractorForArrayCompare::set_less):
15259        (KJS::AVLTreeAbstractorForArrayCompare::get_greater):
15260        (KJS::AVLTreeAbstractorForArrayCompare::set_greater):
15261        (KJS::AVLTreeAbstractorForArrayCompare::get_balance_factor):
15262        (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
15263        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
15264        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_node):
15265        (KJS::AVLTreeAbstractorForArrayCompare::compare_node_node):
15266        (KJS::AVLTreeAbstractorForArrayCompare::null):
15267        (KJS::ArrayInstance::compactForSorting):
15268        
15269        * kjs/array_instance.h: increaseVectorLength() now returns a bool to indicate whether it was
15270        successful.
15271
15272        * wtf/Vector.h:
15273        (WTF::Vector::Vector):
15274        (WTF::::operator=):
15275        (WTF::::fill):
15276        Make these methods fail instead of crash when allocation fails, matching resize() and
15277        reserveCapacity(), which already had this behavior. Callers need to check for null buffer
15278        after making any Vector call that can try to allocate.
15279
15280        * tests/mozilla/ecma/Array/15.4.4.5-3.js: Fixed the test to use a consistent sort function,
15281        as suggested in comments to a Mozilla bug filed about it (I'll keep tracking the bug to see
15282        what the final resolution is).
15283
152842008-05-20  Kevin McCullough  <kmccullough@apple.com>
15285
15286        Reviewed by Tim.
15287
15288        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
15289        profile node.
15290        - Implements focus by adding the idea of a profileNode being visible and
15291        adding the ability to reset all of the visible flags.
15292
15293        * profiler/Profile.h: 
15294        (KJS::Profile::focus):
15295        * profiler/ProfileNode.cpp:
15296        (KJS::ProfileNode::ProfileNode): Initialize the visible flag.
15297        (KJS::ProfileNode::setTreeVisible): Set the visibility of this node and
15298        all of its descendents.
15299        (KJS::ProfileNode::focus): Determine if this node should be visible when
15300        focusing, if the functionName matches this node's function name or if any
15301        of this node's children are visible.
15302        (KJS::ProfileNode::restoreAll): Restore all nodes' visible flag.
15303        (KJS::ProfileNode::debugPrintData):
15304        * profiler/ProfileNode.h:
15305        (KJS::ProfileNode::visible):
15306        (KJS::ProfileNode::setVisible):
15307
153082008-05-20  Timothy Hatcher  <timothy@apple.com>
15309
15310        Fixes a couple performance issues with the profiler. Also fixes
15311        a regression where some nodes wouldn't be added to the tree.
15312
15313        Reviewed by Kevin McCullough.
15314
15315        * profiler/ProfileNode.cpp:
15316        (KJS::ProfileNode::addChild): Compare callIdentifier instead
15317        of functionName.
15318        * profiler/ProfileNode.h: 
15319        (CallIdentifier.operator==): Compare the CallIdentifiers in
15320        an order that fails sooner for non-matches.
15321        (CallIdentifier.callIdentifier): Return the CallIdentifier by
15322        reference to prevent making a new copy each time.
15323
153242008-05-20  Kevin McCullough  <kmccullough@apple.com>
15325
15326        Reviewed by Darin.
15327
15328        <rdar://problem/5950796> JSProfiler: dump functions are in the code
15329        Removed dump and logging functions from the Release version of the code
15330        and renamed them to be obviously for debugging only.
15331
15332        * JavaScriptCore.exp:
15333        * profiler/Profile.cpp:
15334        (KJS::Profile::debugPrintData):
15335        (KJS::Profile::debugPrintDataSampleStyle):
15336        * profiler/Profile.h:
15337        * profiler/ProfileNode.cpp:
15338        (KJS::ProfileNode::debugPrintData):
15339        (KJS::ProfileNode::debugPrintDataSampleStyle):
15340        * profiler/ProfileNode.h:
15341        * profiler/Profiler.cpp:
15342        * profiler/Profiler.h:
15343
153442008-05-20  Kevin McCullough  <kmccullough@apple.com>
15345
15346        Reviewed by Adam.
15347
15348        <rdar://problem/5950538> JSProfiler: Keep track of non-JS execution time
15349        We now have an extra node that represents the excess non-JS time.
15350        - Also changed "SCRIPT" and "anonymous function" to be more consistent
15351        with the debugger.
15352
15353        * profiler/ProfileNode.cpp:
15354        (KJS::ProfileNode::stopProfiling): If this ProfileNode is the head node
15355        create a new child that has the excess execution time.
15356        (KJS::ProfileNode::calculatePercentages): Moved calculation of the
15357        percentages into a function since it's called from multiple places.
15358        * profiler/ProfileNode.h: Add the newly needed functions used above.
15359        (KJS::ProfileNode::setTotalTime):
15360        (KJS::ProfileNode::setSelfTime):
15361        (KJS::ProfileNode::setNumberOfCalls):
15362        * profiler/Profiler.cpp: renamed "SCRIPT" and "anonymous function" to be
15363        consistent with the debugger and use constants that can be localized
15364        more easily.
15365        (KJS::getCallIdentifiers):
15366        (KJS::getCallIdentifierFromFunctionImp):
15367
153682008-05-20  Kevin McCullough  <kmccullough@apple.com>
15369
15370        Reviewed by Tim.
15371
15372        <rdar://problem/5770054> JavaScript profiler (10928)
15373        Removed only profiler-internal use of currentProfile since that concept
15374        is changing.
15375
15376        * profiler/Profile.h: Now stopProfiling takes a time and bool as
15377        arguments.  The time is used to calculate %s from and the bool tells
15378        if this node is the head node and should be the one calculating the time.
15379        (KJS::Profile::stopProfiling):
15380        * profiler/ProfileNode.cpp: Ditto.
15381        (KJS::ProfileNode::stopProfiling):
15382        * profiler/ProfileNode.h: Ditto.
15383
153842008-05-20  Kevin McCullough  <kmccullough@apple.com>
15385
15386        Accidentally turned on the profiler.
15387
15388        * kjs/config.h:
15389
15390
153912008-05-20  Kevin McCullough  <kmccullough@apple.com>
15392
15393        Reviewed by Tim.
15394
15395        <rdar://problem/5770054> JavaScript profiler (10928)
15396        Split function name into 3 parts so that the Web Inspector can link it to
15397        the resource location from whence it came.
15398
15399        * kjs/ustring.cpp: Implemented operator> for UStrings
15400        (KJS::operator>):
15401        * kjs/ustring.h:
15402        * profiler/Profile.cpp:
15403        (KJS::Profile::Profile): Initialize all 3 values.
15404        (KJS::Profile::willExecute): Use CallIdentifier struct.
15405        (KJS::Profile::didExecute): Ditto.
15406        * profiler/Profile.h: Ditto and remove unused function.
15407        * profiler/ProfileNode.cpp:
15408        (KJS::ProfileNode::ProfileNode): Use CallIdentifier struct.
15409        (KJS::ProfileNode::willExecute): Ditto and fix an issue where we
15410        restarted the m_startTime even though it was already started.
15411        (KJS::ProfileNode::didExecute): Ditto.
15412        (KJS::ProfileNode::findChild): Ditto.
15413        (KJS::functionNameDescendingComparator): Ditto and use new comparator.
15414        (KJS::functionNameAscendingComparator): Ditto.
15415        (KJS::ProfileNode::printDataInspectorStyle): Use CallIdentifier struct.
15416        (KJS::ProfileNode::printDataSampleStyle): Ditto.
15417        * profiler/ProfileNode.h:
15418        (KJS::CallIdentifier::CallIdentifier): Describe the CallIdentifier struct
15419        (KJS::CallIdentifier::operator== ):
15420        (KJS::ProfileNode::create): Use the CallIdentifier struct.
15421        (KJS::ProfileNode::callIdentifier):
15422        (KJS::ProfileNode::functionName): Now only return the function name, not
15423        the url and line number too.
15424        (KJS::ProfileNode::url):
15425        (KJS::ProfileNode::lineNumber):
15426        * profiler/Profiler.cpp: Use the CallIdentifier struct. 
15427        (KJS::Profiler::startProfiling):
15428        (KJS::Profiler::willExecute):
15429        (KJS::Profiler::didExecute):
15430        (KJS::getCallIdentifiers):
15431        (KJS::getCallIdentifierFromFunctionImp):
15432
154332008-05-20  Timothy Hatcher  <timothy@apple.com>
15434
15435        Rename sortFileName{Ascending,Descending} to
15436        sortFunctionName{Ascending,Descending}.
15437
15438        Reviewed by Kevin McCullough.
15439
15440        * JavaScriptCore.exp:
15441        * kjs/config.h:
15442        * profiler/Profile.h:
15443        * profiler/ProfileNode.cpp:
15444        (KJS::functionNameDescendingComparator):
15445        (KJS::ProfileNode::sortFunctionNameDescending):
15446        (KJS::functionNameAscendingComparator):
15447        (KJS::ProfileNode::sortFunctionNameAscending):
15448        * profiler/ProfileNode.h:
15449
154502008-05-19  Timothy Hatcher  <timothy@apple.com>
15451
15452        Make the profiler use higher than millisecond resolution time-stamps.
15453
15454        Reviewed by Kevin McCullough.
15455
15456        * kjs/DateMath.cpp:
15457        (KJS::getCurrentUTCTime): Call getCurrentUTCTimeWithMicroseconds and
15458        floor the result.
15459        (KJS::getCurrentUTCTimeWithMicroseconds): Copied from the previous
15460        implementation of getCurrentUTCTime without the floor call.
15461        * kjs/DateMath.h: Addded getCurrentUTCTimeWithMicroseconds.
15462        * profiler/ProfileNode.cpp:
15463        (KJS::ProfileNode::ProfileNode): Use getCurrentUTCTimeWithMicroseconds.
15464
154652008-05-19  Timothy Hatcher  <timothy@apple.com>
15466
15467        Fixes a bug in the profiler where call and apply would show up
15468        and double the time spent in a function. We don't want to show call
15469        and apply at all in the profiles. This change excludes them.
15470
15471        Reviewed by Kevin McCullough.
15472
15473        * profiler/ProfileNode.cpp:
15474        (KJS::ProfileNode::stopProfiling): Remove a second for loop and
15475        calculate self time in the existing loop.
15476        * profiler/Profiler.cpp:
15477        (KJS::shouldExcludeFunction): Helper inline function that returns
15478        true in the current function in an InternalFunctionImp and it is 
15479        has the functionName call or apply.
15480        (KJS::Profiler::willExecute): Call shouldExcludeFunction and return
15481        early if if returns true.
15482        (KJS::Profiler::didExecute): Ditto.
15483
154842008-05-19  Kevin McCullough  <kmccullough@apple.com>
15485
15486        Reviewed by Tim.
15487
15488        <rdar://problem/5770054> JavaScript profiler (10928)
15489        - Implement sorting by function name.
15490
15491        * JavaScriptCore.exp:
15492        * profiler/Profile.h:
15493        (KJS::Profile::sortFileNameDescending):
15494        (KJS::Profile::sortFileNameAscending):
15495        * profiler/ProfileNode.cpp:
15496        (KJS::fileNameDescendingComparator):
15497        (KJS::ProfileNode::sortFileNameDescending):
15498        (KJS::fileNameAscendingComparator):
15499        (KJS::ProfileNode::sortFileNameAscending):
15500        * profiler/ProfileNode.h:
15501
155022008-05-19  Kevin McCullough  <kmccullough@apple.com>
15503
15504        Reviewed by Adam.
15505
15506        <rdar://problem/5770054> JavaScript profiler (10928)
15507        - Pass the exec state to profiler when calling startProfiling so that if
15508        profiling is started within an execution context that location is
15509        recorded correctly.
15510
15511        * JavaScriptCore.exp:
15512        * profiler/ProfileNode.cpp:
15513        (KJS::ProfileNode::printDataInspectorStyle): Dump more info for debugging
15514        purposes.
15515        * profiler/Profiler.cpp:
15516        (KJS::Profiler::startProfiling):
15517        * profiler/Profiler.h:
15518
155192008-05-19  Kevin McCullough  <kmccullough@apple.com>
15520
15521        Rubberstamped by Geoff.
15522
15523        Turn off the profiler because it is a performance regression.
15524
15525        * kjs/config.h:
15526
155272008-05-19  Alp Toker  <alp@nuanti.com>
15528
15529        Reviewed by Anders and Beth.
15530
15531        http://bugs.webkit.org/show_bug.cgi?id=16495
15532        [GTK] Accessibility support with ATK/AT-SPI
15533
15534        Initial ATK/AT-SPI accessibility support for the GTK+ port.
15535
15536        * wtf/Platform.h:
15537
155382008-05-19  Kevin McCullough  <kmccullough@apple.com>
15539
15540        Reviewed by Tim.
15541
15542        <rdar://problem/5770054> JavaScript profiler (10928)
15543        -In an effort to make the profiler as efficient as possible instead of
15544        prepending to a vector we keep the vector in reverse order and operate
15545        over it backwards.
15546
15547        * profiler/Profile.cpp:
15548        (KJS::Profile::willExecute):
15549        (KJS::Profile::didExecute):
15550        * profiler/ProfileNode.cpp:
15551        (KJS::ProfileNode::didExecute):
15552        (KJS::ProfileNode::endAndRecordCall):
15553        * profiler/ProfileNode.h:
15554        * profiler/Profiler.cpp:
15555        (KJS::getStackNames):
15556
155572008-05-16  Kevin McCullough  <kmccullough@apple.com>
15558
15559        Reviewed by Tim.
15560
15561        <rdar://problem/5770054> JavaScript profiler (10928)
15562        Implement sorting for the profiler.
15563        I chose to sort the profileNodes in place since there is no reason they
15564        need to retain their original order.
15565
15566        * JavaScriptCore.exp: Export the symbols.
15567        * profiler/Profile.h: Add the different ways a profile can be sorted.
15568        (KJS::Profile::sortTotalTimeDescending):
15569        (KJS::Profile::sortTotalTimeAscending):
15570        (KJS::Profile::sortSelfTimeDescending):
15571        (KJS::Profile::sortSelfTimeAscending):
15572        (KJS::Profile::sortCallsDescending):
15573        (KJS::Profile::sortCallsAscending):
15574        * profiler/ProfileNode.cpp: Implement those ways.
15575        (KJS::totalTimeDescendingComparator):
15576        (KJS::ProfileNode::sortTotalTimeDescending):
15577        (KJS::totalTimeAscendingComparator):
15578        (KJS::ProfileNode::sortTotalTimeAscending):
15579        (KJS::selfTimeDescendingComparator):
15580        (KJS::ProfileNode::sortSelfTimeDescending):
15581        (KJS::selfTimeAscendingComparator):
15582        (KJS::ProfileNode::sortSelfTimeAscending):
15583        (KJS::callsDescendingComparator):
15584        (KJS::ProfileNode::sortCallsDescending):
15585        (KJS::callsAscendingComparator):
15586        (KJS::ProfileNode::sortCallsAscending):
15587        * profiler/ProfileNode.h: No longer use a Deque since it cannot be
15588        sorted by std::sort and there was no reason not to use a Vector.  I
15589        previously had though I would do prepending but am not.
15590        (KJS::ProfileNode::selfTime):
15591        (KJS::ProfileNode::totalPercent):
15592        (KJS::ProfileNode::selfPercent):
15593        (KJS::ProfileNode::children):
15594        * profiler/Profiler.cpp: Removed these functions as they can be called
15595        directoy on the Profile object after getting the Vector of them.
15596        (KJS::getStackNames):
15597        * profiler/Profiler.h:
15598
155992008-05-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>
15600
15601        Reviewed by Simon.
15602
15603        Since WebKitGtk is fully using autotools now, clean-up the .pro/.pri files
15604        from gtk-port.
15605
15606        * JavaScriptCore.pro:
15607        * kjs/testkjs.pro:
15608
156092008-05-15  Kevin McCullough  <kmccullough@apple.com>
15610
15611        - Build fix.
15612
15613        * JavaScriptCore.exp:
15614
156152008-05-15  Kevin McCullough  <kmccullough@apple.com>
15616
15617        Reviewed by Tim.
15618
15619        <rdar://problem/5770054> JavaScript profiler (10928)
15620        - Cache some values to save on computing them repetitively. This will be
15621        a big savings when we sort since we won't have to walk the tree for
15622        every comparison!
15623        - We cache these values when we end profiling because otherwise we won't
15624        know which profile to get the totalTime for the whole profile from without
15625        retaining a reference to the head profile or looking up the profile from
15626        the list of all profiles.
15627        - Also it's safe to assume we won't be asked for these values while we
15628        are still profiling since the WebInspector only get's profileNodes from
15629        profiles that are in the allProfiles() list and a profile is only added
15630        to that list after it has finished and these values will no longer
15631        change.
15632
15633        * JavaScriptCore.exp:
15634        * profiler/ProfileNode.cpp:
15635        (KJS::ProfileNode::ProfileNode):
15636        (KJS::ProfileNode::stopProfiling):
15637        (KJS::ProfileNode::printDataInspectorStyle):
15638        (KJS::ProfileNode::printDataSampleStyle):
15639        (KJS::ProfileNode::endAndRecordCall):
15640        * profiler/ProfileNode.h:
15641        (KJS::ProfileNode::totalTime):
15642        (KJS::ProfileNode::selfTime):
15643        (KJS::ProfileNode::totalPercent):
15644        (KJS::ProfileNode::selfPercent):
15645        * profiler/Profiler.cpp:
15646        (KJS::Profiler::stopProfiling):
15647
156482008-05-15  Simon Hausmann  <shausman@trolltech.com>
15649
15650        Reviewed by Holger.
15651
15652        Fix compilation when compiling with MSVC and wchar_t support.
15653
15654        * wtf/unicode/qt4/UnicodeQt4.h:
15655        (WTF::Unicode::foldCase):
15656        (WTF::Unicode::umemcasecmp):
15657
156582008-05-14  Kevin McCullough  <kmccullough@apple.com>
15659
15660        Reviewed by Tim.
15661
15662        <rdar://problem/5770054> JavaScript profiler (10928)
15663        - Turn on the profiler.
15664
15665        * kjs/config.h:
15666
156672008-05-14  Kevin McCullough  <kmccullough@apple.com>
15668
15669        Reviewed by Tim.
15670
15671        <rdar://problem/5770054> JavaScript profiler (10928)
15672        - Expose the new profiler functions to the WebInspector.
15673
15674        * JavaScriptCore.exp:
15675
156762008-05-14  Kevin McCullough  <kmccullough@apple.com>
15677
15678        Giving credit where credit is due.
15679
15680        * ChangeLog:
15681
156822008-05-14  Kevin McCullough  <kmccullough@apple.com>
15683
15684        Reviewed by Geoff and Sam.
15685
15686        <rdar://problem/5770054> JavaScript profiler (10928)
15687        Add the ability to get percentages of total and self time for displaying
15688        in the WebInspector.
15689
15690        * profiler/Profile.h:
15691        (KJS::Profile::totalProfileTime):
15692        * profiler/ProfileNode.cpp:
15693        (KJS::ProfileNode::totalPercent):
15694        (KJS::ProfileNode::selfPercent):
15695        * profiler/ProfileNode.h:
15696        * profiler/Profiler.h:
15697        (KJS::Profiler::currentProfile):
15698
156992008-05-14  Kevin McCullough  <kmccullough@apple.com>
15700
15701        Reviewed by Sam.
15702
15703        <rdar://problem/5770054> JavaScript profiler (10928)
15704        - Rename FunctionCallProfile to ProfileNode.
15705
15706        * GNUmakefile.am:
15707        * JavaScriptCore.exp:
15708        * JavaScriptCore.pri:
15709        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
15710        * JavaScriptCore.xcodeproj/project.pbxproj:
15711        * JavaScriptCoreSources.bkl:
15712        * profiler/FunctionCallProfile.cpp: Removed.
15713        * profiler/FunctionCallProfile.h: Removed.
15714        * profiler/Profile.cpp:
15715        (KJS::Profile::Profile):
15716        (KJS::Profile::willExecute):
15717        * profiler/Profile.h:
15718        (KJS::Profile::callTree):
15719        * profiler/ProfileNode.cpp: Copied from profiler/FunctionCallProfile.cpp.
15720        (KJS::ProfileNode::ProfileNode):
15721        (KJS::ProfileNode::willExecute):
15722        (KJS::ProfileNode::didExecute):
15723        (KJS::ProfileNode::addChild):
15724        (KJS::ProfileNode::findChild):
15725        (KJS::ProfileNode::stopProfiling):
15726        (KJS::ProfileNode::selfTime):
15727        (KJS::ProfileNode::printDataInspectorStyle):
15728        (KJS::ProfileNode::printDataSampleStyle):
15729        (KJS::ProfileNode::endAndRecordCall):
15730        * profiler/ProfileNode.h: Copied from profiler/FunctionCallProfile.h.
15731        (KJS::ProfileNode::create):
15732        (KJS::ProfileNode::children):
15733        * profiler/Profiler.cpp:
15734
157352008-05-14  Kevin McCullough  <kmccullough@apple.com>
15736
15737        Reviewed by John.
15738
15739        <rdar://problem/5770054> JavaScript profiler (10928)
15740        - Have each FunctionCallProfile be able to return it's total and self time.
15741
15742        * JavaScriptCore.exp:
15743        * profiler/FunctionCallProfile.cpp:
15744        (KJS::FunctionCallProfile::selfTime):
15745        * profiler/FunctionCallProfile.h:
15746        (KJS::FunctionCallProfile::totalTime):
15747
157482008-05-14  Alexey Proskuryakov  <ap@webkit.org>
15749
15750        Reviewed by Darin.
15751
15752        <rdar://problem/5934376> REGRESSION: A script fails because of a straw BOM character in it.
15753
15754        <https://bugs.webkit.org/show_bug.cgi?id=4931>
15755        Unicode format characters (Cf) should be removed from JavaScript source
15756
15757        Of all Cf characters, we are only removing BOM, because this is what Firefox trunk has
15758        settled upon, after extensive discussion and investigation.
15759
15760        Based on Darin's work on this bug.
15761
15762        Test: fast/js/removing-Cf-characters.html
15763
15764        * kjs/lexer.cpp:
15765        (KJS::Lexer::setCode): Tweak formatting. Use a call to shift(4) to read in the
15766        first characters, instead of having special case code here.
15767        (KJS::Lexer::shift): Add a loop when reading a character to skip BOM characters.
15768
157692008-05-13  Matt Lilek  <webkit@mattlilek.com>
15770
15771        Not reviewed, build fix.
15772
15773        * kjs/date_object.cpp:
15774        (KJS::DateObjectFuncImp::callAsFunction):
15775
157762008-05-13  Anders Carlsson  <andersca@apple.com>
15777
15778        Reviewed by Sam.
15779
15780        <rdar://problem/5933644> Implement Date.now
15781        
15782        Implement Date.now which returns the number of milliseconds since the epoch.
15783        
15784        * kjs/CommonIdentifiers.h:
15785        * kjs/date_object.cpp:
15786        (KJS::DateObjectFuncImp::):
15787        (KJS::DateObjectImp::DateObjectImp):
15788        (KJS::DateObjectFuncImp::callAsFunction):
15789
157902008-05-13  Kevin McCullough  <kmccullough@apple.com>
15791
15792        Giving credit where credit is due.
15793
15794        * ChangeLog:
15795
157962008-05-13  Kevin McCullough  <kmccullough@apple.com>
15797
15798        Reviewed by Adam and Geoff.
15799
15800        <rdar://problem/5770054> JavaScript profiler (10928)
15801        Use PassRefPtrs instead of RefPtrs when appropriate.
15802
15803        * profiler/FunctionCallProfile.cpp:
15804        (KJS::FunctionCallProfile::addChild):
15805        * profiler/FunctionCallProfile.h:
15806        * profiler/Profile.h:
15807        (KJS::Profile::callTree):
15808
158092008-05-13  Kevin McCullough  <kmccullough@apple.com>
15810
15811        Reviewed by Sam.
15812
15813        <rdar://problem/5770054> JavaScript profiler (10928)
15814        - Made some functions static (as per Adam) and changed from using raw
15815        pointers to RefPtr for making these JavaScript Objects.
15816
15817        * profiler/FunctionCallProfile.cpp:
15818        (KJS::FunctionCallProfile::addChild):
15819        (KJS::FunctionCallProfile::findChild):
15820        * profiler/FunctionCallProfile.h:
15821        (KJS::FunctionCallProfile::create):
15822        * profiler/Profile.cpp:
15823        (KJS::Profile::Profile):
15824        (KJS::Profile::willExecute):
15825        (KJS::Profile::didExecute):
15826        (KJS::functionNameCountPairComparator):
15827        * profiler/Profile.h:
15828        (KJS::Profile::create):
15829        (KJS::Profile::title):
15830        (KJS::Profile::callTree):
15831        * profiler/Profiler.cpp:
15832        (KJS::Profiler::startProfiling):
15833        * profiler/Profiler.h:
15834        (KJS::Profiler::allProfiles):
15835        (KJS::Profiler::clearProfiles):
15836
158372008-05-13  Alexey Proskuryakov  <ap@webkit.org>
15838
15839        Reviewed by Geoffrey Garen.
15840
15841        <rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works
15842        with ASCII strings
15843        
15844        * kjs/ustring.h:
15845        * kjs/ustring.cpp:
15846        (KJS::UString::Rep::createFromUTF8):
15847        Added. Implementation adapted from JSStringCreateWithUTF8CString().
15848
15849        * API/JSStringRef.cpp:
15850        (JSStringCreateWithUTF8CString):
15851        * API/JSClassRef.cpp:
15852        (OpaqueJSClass::OpaqueJSClass):
15853        Use UString::Rep::createFromUTF8().
15854
158552008-05-12  Mark Rowe  <mrowe@apple.com>
15856
15857        Reviewed by Tim Hatcher.
15858
15859        <rdar://problem/4859666> WebKit needs availability macros in order to deprecate APIs
15860
15861        Create WebKit availability macros that key off the Mac OS X version being targeted to
15862        determine the WebKit version being targeted.  Applications can define
15863        WEBKIT_VERSION_MIN_REQUIRED before including WebKit headers in order to target a specific
15864        version of WebKit.
15865
15866        The availability header is being added to JavaScriptCore rather than WebKit as JavaScriptCore
15867        is the lowest-level portion of the public WebKit API.
15868
15869        * API/WebKitAvailability.h: Added.
15870        * JavaScriptCore.xcodeproj/project.pbxproj:
15871
158722008-05-12  Alexey Proskuryakov  <ap@webkit.org>
15873
15874        Reviewed by Maciej.
15875
15876        https://bugs.webkit.org/show_bug.cgi?id=18828
15877        Reproducible crash with PAC file
15878
15879        Naively moving JavaScriptCore into thread-specific data was inappropriate in the face of
15880        exiting JavaScriptCore API clients, which expect a different therading model. Temporarily
15881        disabling ThreadSpecific implementation until this can be sorted out.
15882
15883        * wtf/ThreadSpecific.h:
15884        (WTF::::ThreadSpecific):
15885        (WTF::::~ThreadSpecific):
15886        (WTF::::get):
15887        (WTF::::set):
15888
158892008-05-12  Alexey Proskuryakov  <ap@webkit.org>
15890
15891        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
15892        SquirrelFish merging.
15893
15894        * API/JSBase.cpp:
15895        (JSGarbageCollect):
15896        * API/JSCallbackObjectFunctions.h:
15897        (KJS::::staticFunctionGetter):
15898        * API/JSClassRef.cpp:
15899        (OpaqueJSClass::prototype):
15900        * API/JSObjectRef.cpp:
15901        (JSObjectMake):
15902        (JSObjectMakeFunctionWithCallback):
15903        (JSObjectMakeConstructor):
15904        (JSObjectMakeFunction):
15905        * API/JSValueRef.cpp:
15906        (JSValueMakeNumber):
15907        (JSValueMakeString):
15908        * JavaScriptCore.exp:
15909        * kjs/ExecState.h:
15910        * kjs/InitializeThreading.cpp:
15911        (KJS::initializeThreadingOnce):
15912        * kjs/JSGlobalObject.cpp:
15913        (KJS::JSGlobalObject::~JSGlobalObject):
15914        (KJS::JSGlobalObject::init):
15915        (KJS::JSGlobalObject::put):
15916        (KJS::JSGlobalObject::reset):
15917        (KJS::JSGlobalObject::tearOffActivation):
15918        * kjs/JSGlobalObject.h:
15919        (KJS::JSGlobalObject::head):
15920        (KJS::JSGlobalObject::perThreadData):
15921        * kjs/JSLock.cpp:
15922        (KJS::JSLock::registerThread):
15923        * kjs/JSLock.h:
15924        (KJS::JSLock::JSLock):
15925        * kjs/array_instance.cpp:
15926        (KJS::ArrayInstance::ArrayInstance):
15927        (KJS::ArrayInstance::lengthGetter):
15928        * kjs/array_object.cpp:
15929        (KJS::arrayProtoFuncToString):
15930        (KJS::arrayProtoFuncToLocaleString):
15931        (KJS::arrayProtoFuncJoin):
15932        (KJS::arrayProtoFuncConcat):
15933        (KJS::arrayProtoFuncPop):
15934        (KJS::arrayProtoFuncPush):
15935        (KJS::arrayProtoFuncShift):
15936        (KJS::arrayProtoFuncSlice):
15937        (KJS::arrayProtoFuncSplice):
15938        (KJS::arrayProtoFuncUnShift):
15939        (KJS::arrayProtoFuncFilter):
15940        (KJS::arrayProtoFuncMap):
15941        (KJS::arrayProtoFuncEvery):
15942        (KJS::arrayProtoFuncForEach):
15943        (KJS::arrayProtoFuncSome):
15944        (KJS::arrayProtoFuncIndexOf):
15945        (KJS::arrayProtoFuncLastIndexOf):
15946        (KJS::ArrayObjectImp::ArrayObjectImp):
15947        (KJS::ArrayObjectImp::construct):
15948        * kjs/bool_object.cpp:
15949        (KJS::BooleanPrototype::BooleanPrototype):
15950        (KJS::booleanProtoFuncToString):
15951        (KJS::BooleanObjectImp::BooleanObjectImp):
15952        (KJS::BooleanObjectImp::construct):
15953        * kjs/collector.cpp:
15954        (KJS::allocateBlock):
15955        (KJS::Collector::recordExtraCost):
15956        (KJS::Collector::heapAllocate):
15957        (KJS::Collector::allocate):
15958        (KJS::Collector::allocateNumber):
15959        (KJS::Collector::registerAsMainThread):
15960        (KJS::onMainThread):
15961        (KJS::PlatformThread::PlatformThread):
15962        (KJS::getCurrentPlatformThread):
15963        (KJS::Collector::Thread::Thread):
15964        (KJS::destroyRegisteredThread):
15965        (KJS::initializeRegisteredThreadKey):
15966        (KJS::Collector::registerThread):
15967        (KJS::Collector::markStackObjectsConservatively):
15968        (KJS::Collector::markCurrentThreadConservativelyInternal):
15969        (KJS::Collector::markCurrentThreadConservatively):
15970        (KJS::suspendThread):
15971        (KJS::resumeThread):
15972        (KJS::getPlatformThreadRegisters):
15973        (KJS::otherThreadStackPointer):
15974        (KJS::Collector::markOtherThreadConservatively):
15975        (KJS::protectedValues):
15976        (KJS::Collector::protect):
15977        (KJS::Collector::unprotect):
15978        (KJS::Collector::collectOnMainThreadOnly):
15979        (KJS::Collector::markProtectedObjects):
15980        (KJS::Collector::markMainThreadOnlyObjects):
15981        (KJS::Collector::sweep):
15982        (KJS::Collector::collect):
15983        (KJS::Collector::size):
15984        (KJS::Collector::globalObjectCount):
15985        (KJS::Collector::protectedGlobalObjectCount):
15986        (KJS::Collector::protectedObjectCount):
15987        (KJS::Collector::protectedObjectTypeCounts):
15988        (KJS::Collector::isBusy):
15989        (KJS::Collector::reportOutOfMemoryToAllExecStates):
15990        * kjs/collector.h:
15991        (KJS::Collector::cellBlock):
15992        (KJS::Collector::cellOffset):
15993        (KJS::Collector::isCellMarked):
15994        (KJS::Collector::markCell):
15995        (KJS::Collector::reportExtraMemoryCost):
15996        * kjs/date_object.cpp:
15997        (KJS::formatLocaleDate):
15998        (KJS::DatePrototype::DatePrototype):
15999        (KJS::DateObjectImp::DateObjectImp):
16000        (KJS::DateObjectImp::construct):
16001        (KJS::DateObjectImp::callAsFunction):
16002        (KJS::DateObjectFuncImp::DateObjectFuncImp):
16003        (KJS::DateObjectFuncImp::callAsFunction):
16004        (KJS::dateProtoFuncToString):
16005        (KJS::dateProtoFuncToUTCString):
16006        (KJS::dateProtoFuncToDateString):
16007        (KJS::dateProtoFuncToTimeString):
16008        (KJS::dateProtoFuncToLocaleString):
16009        (KJS::dateProtoFuncToLocaleDateString):
16010        (KJS::dateProtoFuncToLocaleTimeString):
16011        (KJS::dateProtoFuncValueOf):
16012        (KJS::dateProtoFuncGetTime):
16013        (KJS::dateProtoFuncGetFullYear):
16014        (KJS::dateProtoFuncGetUTCFullYear):
16015        (KJS::dateProtoFuncToGMTString):
16016        (KJS::dateProtoFuncGetMonth):
16017        (KJS::dateProtoFuncGetUTCMonth):
16018        (KJS::dateProtoFuncGetDate):
16019        (KJS::dateProtoFuncGetUTCDate):
16020        (KJS::dateProtoFuncGetDay):
16021        (KJS::dateProtoFuncGetUTCDay):
16022        (KJS::dateProtoFuncGetHours):
16023        (KJS::dateProtoFuncGetUTCHours):
16024        (KJS::dateProtoFuncGetMinutes):
16025        (KJS::dateProtoFuncGetUTCMinutes):
16026        (KJS::dateProtoFuncGetSeconds):
16027        (KJS::dateProtoFuncGetUTCSeconds):
16028        (KJS::dateProtoFuncGetMilliSeconds):
16029        (KJS::dateProtoFuncGetUTCMilliseconds):
16030        (KJS::dateProtoFuncGetTimezoneOffset):
16031        (KJS::dateProtoFuncSetTime):
16032        (KJS::setNewValueFromTimeArgs):
16033        (KJS::setNewValueFromDateArgs):
16034        (KJS::dateProtoFuncSetYear):
16035        (KJS::dateProtoFuncGetYear):
16036        * kjs/error_object.cpp:
16037        (KJS::ErrorPrototype::ErrorPrototype):
16038        (KJS::errorProtoFuncToString):
16039        (KJS::ErrorObjectImp::ErrorObjectImp):
16040        (KJS::ErrorObjectImp::construct):
16041        (KJS::NativeErrorPrototype::NativeErrorPrototype):
16042        (KJS::NativeErrorImp::NativeErrorImp):
16043        (KJS::NativeErrorImp::construct):
16044        * kjs/function.cpp:
16045        (KJS::FunctionImp::lengthGetter):
16046        (KJS::FunctionImp::construct):
16047        (KJS::Arguments::Arguments):
16048        (KJS::ActivationImp::createArgumentsObject):
16049        (KJS::encode):
16050        (KJS::decode):
16051        (KJS::globalFuncParseInt):
16052        (KJS::globalFuncParseFloat):
16053        (KJS::globalFuncEscape):
16054        (KJS::globalFuncUnescape):
16055        (KJS::PrototypeFunction::PrototypeFunction):
16056        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
16057        * kjs/function_object.cpp:
16058        (KJS::FunctionPrototype::FunctionPrototype):
16059        (KJS::functionProtoFuncToString):
16060        (KJS::FunctionObjectImp::FunctionObjectImp):
16061        (KJS::FunctionObjectImp::construct):
16062        * kjs/internal.cpp:
16063        (KJS::StringImp::toObject):
16064        * kjs/internal.h:
16065        (KJS::StringImp::StringImp):
16066        (KJS::NumberImp::operator new):
16067        * kjs/list.cpp:
16068        (KJS::List::markSet):
16069        (KJS::List::markProtectedListsSlowCase):
16070        (KJS::List::expandAndAppend):
16071        * kjs/list.h:
16072        (KJS::List::List):
16073        (KJS::List::~List):
16074        (KJS::List::markProtectedLists):
16075        * kjs/lookup.h:
16076        (KJS::staticFunctionGetter):
16077        (KJS::cacheGlobalObject):
16078        * kjs/math_object.cpp:
16079        (KJS::MathObjectImp::getValueProperty):
16080        (KJS::mathProtoFuncAbs):
16081        (KJS::mathProtoFuncACos):
16082        (KJS::mathProtoFuncASin):
16083        (KJS::mathProtoFuncATan):
16084        (KJS::mathProtoFuncATan2):
16085        (KJS::mathProtoFuncCeil):
16086        (KJS::mathProtoFuncCos):
16087        (KJS::mathProtoFuncExp):
16088        (KJS::mathProtoFuncFloor):
16089        (KJS::mathProtoFuncLog):
16090        (KJS::mathProtoFuncMax):
16091        (KJS::mathProtoFuncMin):
16092        (KJS::mathProtoFuncPow):
16093        (KJS::mathProtoFuncRandom):
16094        (KJS::mathProtoFuncRound):
16095        (KJS::mathProtoFuncSin):
16096        (KJS::mathProtoFuncSqrt):
16097        (KJS::mathProtoFuncTan):
16098        * kjs/nodes.cpp:
16099        (KJS::ParserRefCounted::ParserRefCounted):
16100        (KJS::ParserRefCounted::ref):
16101        (KJS::ParserRefCounted::deref):
16102        (KJS::ParserRefCounted::refcount):
16103        (KJS::ParserRefCounted::deleteNewObjects):
16104        (KJS::Node::handleException):
16105        (KJS::NumberNode::evaluate):
16106        (KJS::StringNode::evaluate):
16107        (KJS::ArrayNode::evaluate):
16108        (KJS::PostIncResolveNode::evaluate):
16109        (KJS::PostIncLocalVarNode::evaluate):
16110        (KJS::PostDecResolveNode::evaluate):
16111        (KJS::PostDecLocalVarNode::evaluate):
16112        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
16113        (KJS::PostIncBracketNode::evaluate):
16114        (KJS::PostDecBracketNode::evaluate):
16115        (KJS::PostIncDotNode::evaluate):
16116        (KJS::PostDecDotNode::evaluate):
16117        (KJS::typeStringForValue):
16118        (KJS::LocalVarTypeOfNode::evaluate):
16119        (KJS::TypeOfResolveNode::evaluate):
16120        (KJS::TypeOfValueNode::evaluate):
16121        (KJS::PreIncLocalVarNode::evaluate):
16122        (KJS::PreIncResolveNode::evaluate):
16123        (KJS::PreDecLocalVarNode::evaluate):
16124        (KJS::PreDecResolveNode::evaluate):
16125        (KJS::PreIncConstNode::evaluate):
16126        (KJS::PreDecConstNode::evaluate):
16127        (KJS::PostIncConstNode::evaluate):
16128        (KJS::PostDecConstNode::evaluate):
16129        (KJS::PreIncBracketNode::evaluate):
16130        (KJS::PreDecBracketNode::evaluate):
16131        (KJS::PreIncDotNode::evaluate):
16132        (KJS::PreDecDotNode::evaluate):
16133        (KJS::NegateNode::evaluate):
16134        (KJS::BitwiseNotNode::evaluate):
16135        (KJS::MultNode::evaluate):
16136        (KJS::DivNode::evaluate):
16137        (KJS::ModNode::evaluate):
16138        (KJS::addSlowCase):
16139        (KJS::add):
16140        (KJS::AddNumbersNode::evaluate):
16141        (KJS::AddStringsNode::evaluate):
16142        (KJS::AddStringLeftNode::evaluate):
16143        (KJS::AddStringRightNode::evaluate):
16144        (KJS::SubNode::evaluate):
16145        (KJS::LeftShiftNode::evaluate):
16146        (KJS::RightShiftNode::evaluate):
16147        (KJS::UnsignedRightShiftNode::evaluate):
16148        (KJS::BitXOrNode::evaluate):
16149        (KJS::BitOrNode::evaluate):
16150        (KJS::valueForReadModifyAssignment):
16151        (KJS::ForInNode::execute):
16152        (KJS::TryNode::execute):
16153        (KJS::FuncDeclNode::makeFunction):
16154        (KJS::FuncExprNode::evaluate):
16155        * kjs/nodes.h:
16156        * kjs/number_object.cpp:
16157        (KJS::NumberPrototype::NumberPrototype):
16158        (KJS::numberProtoFuncToString):
16159        (KJS::numberProtoFuncToLocaleString):
16160        (KJS::numberProtoFuncToFixed):
16161        (KJS::numberProtoFuncToExponential):
16162        (KJS::numberProtoFuncToPrecision):
16163        (KJS::NumberObjectImp::NumberObjectImp):
16164        (KJS::NumberObjectImp::getValueProperty):
16165        (KJS::NumberObjectImp::construct):
16166        (KJS::NumberObjectImp::callAsFunction):
16167        * kjs/object.cpp:
16168        (KJS::JSObject::call):
16169        (KJS::JSObject::get):
16170        (KJS::JSObject::put):
16171        (KJS::JSObject::defineGetter):
16172        (KJS::JSObject::defineSetter):
16173        (KJS::JSObject::putDirect):
16174        (KJS::Error::create):
16175        * kjs/object.h:
16176        * kjs/object_object.cpp:
16177        (KJS::ObjectPrototype::ObjectPrototype):
16178        (KJS::objectProtoFuncToLocaleString):
16179        (KJS::objectProtoFuncToString):
16180        (KJS::ObjectObjectImp::ObjectObjectImp):
16181        (KJS::ObjectObjectImp::construct):
16182        * kjs/property_map.h:
16183        (KJS::SavedProperty::SavedProperty):
16184        (KJS::SavedProperty::init):
16185        (KJS::SavedProperty::~SavedProperty):
16186        (KJS::SavedProperty::name):
16187        (KJS::SavedProperty::value):
16188        (KJS::SavedProperty::attributes):
16189        * kjs/protect.h:
16190        (KJS::gcProtect):
16191        (KJS::gcUnprotect):
16192        * kjs/regexp_object.cpp:
16193        (KJS::RegExpPrototype::RegExpPrototype):
16194        (KJS::regExpProtoFuncToString):
16195        (KJS::RegExpImp::getValueProperty):
16196        (KJS::RegExpObjectImp::RegExpObjectImp):
16197        (KJS::RegExpObjectImp::arrayOfMatches):
16198        (KJS::RegExpObjectImp::getBackref):
16199        (KJS::RegExpObjectImp::getLastParen):
16200        (KJS::RegExpObjectImp::getLeftContext):
16201        (KJS::RegExpObjectImp::getRightContext):
16202        (KJS::RegExpObjectImp::getValueProperty):
16203        (KJS::RegExpObjectImp::createRegExpImp):
16204        * kjs/regexp_object.h:
16205        * kjs/string_object.cpp:
16206        (KJS::StringInstance::StringInstance):
16207        (KJS::StringInstance::lengthGetter):
16208        (KJS::StringInstance::indexGetter):
16209        (KJS::stringInstanceNumericPropertyGetter):
16210        (KJS::StringPrototype::StringPrototype):
16211        (KJS::replace):
16212        (KJS::stringProtoFuncCharAt):
16213        (KJS::stringProtoFuncCharCodeAt):
16214        (KJS::stringProtoFuncConcat):
16215        (KJS::stringProtoFuncIndexOf):
16216        (KJS::stringProtoFuncLastIndexOf):
16217        (KJS::stringProtoFuncMatch):
16218        (KJS::stringProtoFuncSearch):
16219        (KJS::stringProtoFuncReplace):
16220        (KJS::stringProtoFuncSlice):
16221        (KJS::stringProtoFuncSplit):
16222        (KJS::stringProtoFuncSubstr):
16223        (KJS::stringProtoFuncSubstring):
16224        (KJS::stringProtoFuncToLowerCase):
16225        (KJS::stringProtoFuncToUpperCase):
16226        (KJS::stringProtoFuncToLocaleLowerCase):
16227        (KJS::stringProtoFuncToLocaleUpperCase):
16228        (KJS::stringProtoFuncLocaleCompare):
16229        (KJS::stringProtoFuncBig):
16230        (KJS::stringProtoFuncSmall):
16231        (KJS::stringProtoFuncBlink):
16232        (KJS::stringProtoFuncBold):
16233        (KJS::stringProtoFuncFixed):
16234        (KJS::stringProtoFuncItalics):
16235        (KJS::stringProtoFuncStrike):
16236        (KJS::stringProtoFuncSub):
16237        (KJS::stringProtoFuncSup):
16238        (KJS::stringProtoFuncFontcolor):
16239        (KJS::stringProtoFuncFontsize):
16240        (KJS::stringProtoFuncAnchor):
16241        (KJS::stringProtoFuncLink):
16242        (KJS::StringObjectImp::StringObjectImp):
16243        (KJS::StringObjectImp::construct):
16244        (KJS::StringObjectImp::callAsFunction):
16245        (KJS::StringObjectFuncImp::StringObjectFuncImp):
16246        (KJS::StringObjectFuncImp::callAsFunction):
16247        * kjs/string_object.h:
16248        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
16249        * kjs/testkjs.cpp:
16250        (GlobalObject::GlobalObject):
16251        (functionGC):
16252        (functionRun):
16253        (functionReadline):
16254        (kjsmain):
16255        * kjs/ustring.h:
16256        * kjs/value.cpp:
16257        (KJS::JSCell::operator new):
16258        (KJS::jsString):
16259        (KJS::jsOwnedString):
16260        (KJS::jsNumberCell):
16261        * kjs/value.h:
16262        (KJS::jsNaN):
16263        (KJS::jsNumber):
16264        (KJS::jsNumberFromAnd):
16265        (KJS::JSCell::marked):
16266        (KJS::JSCell::mark):
16267        (KJS::JSValue::toJSNumber):
16268        * wtf/ThreadSpecific.h:
16269        (WTF::T):
16270
162712008-05-10  Julien Chaffraix  <jchaffraix@webkit.org>
16272
16273        Qt & wx build fix.
16274
16275        * JavaScriptCore.pri: Add profiler/Profile.cpp.
16276        * JavaScriptCoreSources.bkl: Ditto.
16277
162782008-05-10  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
16279
16280        Reviewed by Maciej.
16281
16282        Gtk+ build fix
16283
16284        * GNUmakefile.am: Add Profile.cpp in _sources
16285
162862008-05-09  Brady Eidson  <beidson@apple.com>
16287
16288        Build Fix.  Kevin is an idiot.  
16289        ("My name is Kevin McCullough and I approve this message.")
16290
16291        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
16292
162932008-05-09  Kevin McCullough  <kmccullough@apple.com>
16294
16295        Reviewed by Tim.
16296
16297        -<rdar://problem/5770054> JavaScript profiler (10928)
16298        -Add Profile class so that all profiles can be stored and retrieved by
16299        the WebInspector when that time comes.
16300
16301        * JavaScriptCore.exp: Export the new function signatures.
16302        * JavaScriptCore.xcodeproj/project.pbxproj: Add the new files to the
16303        project
16304        * profiler/Profile.cpp: Added. This class represents a single run of the
16305        profiler.
16306        (KJS::Profile::Profile):
16307        (KJS::Profile::willExecute):
16308        (KJS::Profile::didExecute):
16309        (KJS::Profile::printDataInspectorStyle):
16310        (KJS::functionNameCountPairComparator):
16311        (KJS::Profile::printDataSampleStyle):
16312        * profiler/Profile.h: Added. Ditto
16313        (KJS::Profile::stopProfiling):
16314        * profiler/Profiler.cpp: Now the profiler keeps track of many profiles
16315        but only runs one at a time.
16316        (KJS::Profiler::startProfiling):
16317        (KJS::Profiler::stopProfiling):
16318        (KJS::Profiler::willExecute):
16319        (KJS::Profiler::didExecute):
16320        (KJS::Profiler::printDataInspectorStyle):
16321        (KJS::Profiler::printDataSampleStyle):
16322        * profiler/Profiler.h: Ditto.
16323        (KJS::Profiler::~Profiler):
16324        (KJS::Profiler::allProfiles):
16325        (KJS::Profiler::clearProfiles):
16326
163272008-05-08  Anders Carlsson  <andersca@apple.com>
16328
16329        Reviewed by Mark.
16330
16331        Enable NPAPI plug-ins on 64-bit.
16332        
16333        * wtf/Platform.h:
16334
163352008-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
16336
16337        Reviewed by Adam Roben.
16338
16339        wx & Gtk build fix.
16340
16341        Add SIZE_MAX definition for the wx port.
16342
16343        * os-win32/stdint.h:
16344
163452008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>
16346
16347        Reviewed by Simon.
16348
16349        Support for isMainThread in the Qt port.
16350
16351        * wtf/ThreadingQt.cpp:
16352        (WTF::initializeThreading): Adjusted.
16353        (WTF::isMainThread): Added.
16354
163552008-05-05  Darin Adler  <darin@apple.com>
16356
16357        Reviewed by John Sullivan.
16358
16359        - fix debug-only leak seen on buildbot
16360
16361        * wtf/HashTable.h:
16362        (WTF::HashTable::checkKey): After writing an empty value in, but before constructing a
16363        deleted value on top of it, call the destructor so the empty value doesn't leak.
16364
163652008-05-02  Alexey Proskuryakov  <ap@webkit.org>
16366
16367        Reviewed by Geoffrey Garen.
16368
16369        Get rid of static data in nodes.cpp (well, at least of non-debug one).
16370
16371        No measurable change on SunSpider.
16372
16373        * kjs/InitializeThreading.cpp:
16374        (KJS::initializeThreadingOnce):
16375        * kjs/nodes.cpp:
16376        (KJS::newTrackedObjects):
16377        (KJS::trackedObjectExtraRefCounts):
16378        (KJS::initializeNodesThreading):
16379        (KJS::ParserRefCounted::ParserRefCounted):
16380        (KJS::ParserRefCounted::ref):
16381        (KJS::ParserRefCounted::deref):
16382        (KJS::ParserRefCounted::refcount):
16383        (KJS::ParserRefCounted::deleteNewObjects):
16384        * kjs/nodes.h:
16385        Made newTrackedObjects and trackedObjectExtraRefCounts per-thread.
16386
163872008-05-02  Alexey Proskuryakov  <ap@webkit.org>
16388
16389        Reviewed by Darin.
16390
16391        Move call stack depth counter to global object.
16392
16393        * kjs/ExecState.h: (KJS::ExecState::functionCallDepth): Added a recursion depth counter to
16394        per-thread data.
16395        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Initialize PerThreadData.functionCallDepth.
16396        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::perThreadData): Made the result non-const.
16397
16398        * kjs/object.cpp:
16399        (KJS::throwStackSizeExceededError): Moved throwError to a separate function, since it is now
16400        the only thing in JSObject::call that needs a PIC branch.
16401        (KJS::JSObject::call): Use a per-thread variable instead of local static for recursion depth
16402        tracking.
16403
164042008-05-02  Alexey Proskuryakov  <ap@webkit.org>
16405
16406        Reviewed by Darin.
16407
16408        Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading
16409        for the sake of non-WebKit clients.
16410
16411        * API/JSBase.cpp:
16412        (JSGarbageCollect):
16413        * API/JSContextRef.cpp:
16414        (JSGlobalContextCreate):
16415        These are the JavaScriptCore API bottlenecks. There are a few other JSStringRef
16416        and JSClassRef functions that can be called earlier, but they do not do anything that
16417        requires initializeThreading.
16418
16419        * kjs/InitializeThreading.cpp:
16420        (KJS::doInitializeThreading):
16421        (KJS::initializeThreading):
16422        On Darwin, make the initialization happen under pthread_once, since there is no guarantee
16423        that non-WebKit clients won't try to call this function re-entrantly.
16424
16425        * kjs/InitializeThreading.h:
16426        * wtf/Threading.h:
16427        Spell out initializeThreading contract.
16428
16429        * wtf/ThreadingPthreads.cpp: (WTF::isMainThread): Make sure that results are correct on
16430        Darwin, even if threading was initialized from a secondary thread.
16431
164322008-05-02  Alexey Proskuryakov  <ap@webkit.org>
16433
16434        Reviewed by Geoffrey Garen.
16435
16436        https://bugs.webkit.org/show_bug.cgi?id=18826
16437        Make JavaScript heap per-thread
16438
16439        * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
16440        (replaced "new T" with "new T()").
16441
16442        * kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for
16443        multithreaded access to a heap.
16444        (KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap.
16445        (KJS::SmallCellCollectorBlock): Ditto.
16446        (KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here.
16447        (KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in.
16448
16449        * kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch
16450        (gcc was using one to access a constant used in std::max(), because it takes a reference,
16451        even though std::max() itself was inlined).
16452        (KJS::Heap::threadHeap): JS heap is now per-thread.
16453        (KJS::Heap::Heap): Zero-initialize the heap.
16454        (KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so
16455        inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't
16456        use any global data.
16457        (KJS::Heap::heapAllocate): Initialize Block::heap.
16458        (KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(),
16459        as GC only works with a current thread's heap now.
16460        (KJS::Heap::sweep): Removed collectOnMainThreadOnly checks.
16461        (KJS::Heap::collect): Ditto.
16462
16463        * kjs/JSLock.cpp:
16464        * kjs/JSLock.h:
16465        (KJS::JSLock::JSLock):
16466        Removed registerThread(), as the heap no longer cares.
16467
16468        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread
16469        variables in Heap and JSGlobalObject.
16470
16471        * kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to
16472        per-thread heap, and an accessor for it.
16473
16474        * kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread.
16475        * kjs/JSGlobalObject.cpp:
16476        (KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked
16477        right if the removed object was the head one!
16478        (KJS::JSGlobalObject::head): Return a per-thread list head.
16479        (KJS::JSGlobalObject::init): Store a reference to per-thread heap.
16480        (KJS::JSGlobalObject::reset): Pass ExecState to functions that need it.
16481        (KJS::JSGlobalObject::tearOffActivation): Ditto.
16482        (KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState,
16483        so it needs a custom operator new that directly accesses per-thread heap.
16484
16485        * kjs/list.h:
16486        (KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it
16487        is no longer a single static object.
16488        (KJS::List::~List): Ditto.
16489        * kjs/list.cpp:
16490        (KJS::List::markSet): Removed, this is now stored in Heap.
16491        (KJS::List::markProtectedLists): Take a reference to the list.
16492        (KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference.
16493
16494        * kjs/protect.h:
16495        (KJS::gcProtect):
16496        (KJS::gcUnprotect):
16497        Use the newly added Heap::heap() method to find out which heap the value to be (un)protected
16498        belongs to.
16499
16500        * kjs/property_map.h: Removed unused SavedProperty class.
16501
16502        * JavaScriptCore.exp:
16503        * API/JSBase.cpp:
16504        (JSGarbageCollect):
16505        * API/JSCallbackObjectFunctions.h:
16506        (KJS::::staticFunctionGetter):
16507        * API/JSClassRef.cpp:
16508        (OpaqueJSClass::prototype):
16509        * API/JSObjectRef.cpp:
16510        (JSObjectMake):
16511        (JSObjectMakeFunctionWithCallback):
16512        (JSObjectMakeConstructor):
16513        (JSObjectMakeFunction):
16514        * API/JSValueRef.cpp:
16515        (JSValueMakeNumber):
16516        (JSValueMakeString):
16517        * kjs/array_instance.cpp:
16518        (KJS::ArrayInstance::ArrayInstance):
16519        (KJS::ArrayInstance::lengthGetter):
16520        * kjs/array_object.cpp:
16521        (KJS::arrayProtoFuncToString):
16522        (KJS::arrayProtoFuncToLocaleString):
16523        (KJS::arrayProtoFuncJoin):
16524        (KJS::arrayProtoFuncConcat):
16525        (KJS::arrayProtoFuncPop):
16526        (KJS::arrayProtoFuncPush):
16527        (KJS::arrayProtoFuncShift):
16528        (KJS::arrayProtoFuncSlice):
16529        (KJS::arrayProtoFuncSplice):
16530        (KJS::arrayProtoFuncUnShift):
16531        (KJS::arrayProtoFuncFilter):
16532        (KJS::arrayProtoFuncMap):
16533        (KJS::arrayProtoFuncEvery):
16534        (KJS::arrayProtoFuncForEach):
16535        (KJS::arrayProtoFuncSome):
16536        (KJS::arrayProtoFuncIndexOf):
16537        (KJS::arrayProtoFuncLastIndexOf):
16538        (KJS::ArrayObjectImp::ArrayObjectImp):
16539        (KJS::ArrayObjectImp::construct):
16540        * kjs/bool_object.cpp:
16541        (KJS::BooleanPrototype::BooleanPrototype):
16542        (KJS::booleanProtoFuncToString):
16543        (KJS::BooleanObjectImp::BooleanObjectImp):
16544        (KJS::BooleanObjectImp::construct):
16545        * kjs/date_object.cpp:
16546        (KJS::formatLocaleDate):
16547        (KJS::DatePrototype::DatePrototype):
16548        (KJS::DateObjectImp::DateObjectImp):
16549        (KJS::DateObjectImp::construct):
16550        (KJS::DateObjectImp::callAsFunction):
16551        (KJS::DateObjectFuncImp::DateObjectFuncImp):
16552        (KJS::DateObjectFuncImp::callAsFunction):
16553        (KJS::dateProtoFuncToString):
16554        (KJS::dateProtoFuncToUTCString):
16555        (KJS::dateProtoFuncToDateString):
16556        (KJS::dateProtoFuncToTimeString):
16557        (KJS::dateProtoFuncToLocaleString):
16558        (KJS::dateProtoFuncToLocaleDateString):
16559        (KJS::dateProtoFuncToLocaleTimeString):
16560        (KJS::dateProtoFuncValueOf):
16561        (KJS::dateProtoFuncGetTime):
16562        (KJS::dateProtoFuncGetFullYear):
16563        (KJS::dateProtoFuncGetUTCFullYear):
16564        (KJS::dateProtoFuncToGMTString):
16565        (KJS::dateProtoFuncGetMonth):
16566        (KJS::dateProtoFuncGetUTCMonth):
16567        (KJS::dateProtoFuncGetDate):
16568        (KJS::dateProtoFuncGetUTCDate):
16569        (KJS::dateProtoFuncGetDay):
16570        (KJS::dateProtoFuncGetUTCDay):
16571        (KJS::dateProtoFuncGetHours):
16572        (KJS::dateProtoFuncGetUTCHours):
16573        (KJS::dateProtoFuncGetMinutes):
16574        (KJS::dateProtoFuncGetUTCMinutes):
16575        (KJS::dateProtoFuncGetSeconds):
16576        (KJS::dateProtoFuncGetUTCSeconds):
16577        (KJS::dateProtoFuncGetMilliSeconds):
16578        (KJS::dateProtoFuncGetUTCMilliseconds):
16579        (KJS::dateProtoFuncGetTimezoneOffset):
16580        (KJS::dateProtoFuncSetTime):
16581        (KJS::setNewValueFromTimeArgs):
16582        (KJS::setNewValueFromDateArgs):
16583        (KJS::dateProtoFuncSetYear):
16584        (KJS::dateProtoFuncGetYear):
16585        * kjs/error_object.cpp:
16586        (KJS::ErrorPrototype::ErrorPrototype):
16587        (KJS::errorProtoFuncToString):
16588        (KJS::ErrorObjectImp::ErrorObjectImp):
16589        (KJS::ErrorObjectImp::construct):
16590        (KJS::NativeErrorPrototype::NativeErrorPrototype):
16591        (KJS::NativeErrorImp::NativeErrorImp):
16592        (KJS::NativeErrorImp::construct):
16593        * kjs/function.cpp:
16594        (KJS::FunctionImp::lengthGetter):
16595        (KJS::FunctionImp::construct):
16596        (KJS::Arguments::Arguments):
16597        (KJS::ActivationImp::createArgumentsObject):
16598        (KJS::encode):
16599        (KJS::decode):
16600        (KJS::globalFuncParseInt):
16601        (KJS::globalFuncParseFloat):
16602        (KJS::globalFuncEscape):
16603        (KJS::globalFuncUnescape):
16604        (KJS::PrototypeFunction::PrototypeFunction):
16605        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
16606        * kjs/function_object.cpp:
16607        (KJS::FunctionPrototype::FunctionPrototype):
16608        (KJS::functionProtoFuncToString):
16609        (KJS::FunctionObjectImp::FunctionObjectImp):
16610        (KJS::FunctionObjectImp::construct):
16611        * kjs/internal.cpp:
16612        (KJS::StringImp::toObject):
16613        * kjs/internal.h:
16614        (KJS::StringImp::StringImp):
16615        (KJS::NumberImp::operator new):
16616        * kjs/lookup.h:
16617        (KJS::staticFunctionGetter):
16618        (KJS::cacheGlobalObject):
16619        * kjs/math_object.cpp:
16620        (KJS::MathObjectImp::getValueProperty):
16621        (KJS::mathProtoFuncAbs):
16622        (KJS::mathProtoFuncACos):
16623        (KJS::mathProtoFuncASin):
16624        (KJS::mathProtoFuncATan):
16625        (KJS::mathProtoFuncATan2):
16626        (KJS::mathProtoFuncCeil):
16627        (KJS::mathProtoFuncCos):
16628        (KJS::mathProtoFuncExp):
16629        (KJS::mathProtoFuncFloor):
16630        (KJS::mathProtoFuncLog):
16631        (KJS::mathProtoFuncMax):
16632        (KJS::mathProtoFuncMin):
16633        (KJS::mathProtoFuncPow):
16634        (KJS::mathProtoFuncRandom):
16635        (KJS::mathProtoFuncRound):
16636        (KJS::mathProtoFuncSin):
16637        (KJS::mathProtoFuncSqrt):
16638        (KJS::mathProtoFuncTan):
16639        * kjs/nodes.cpp:
16640        (KJS::Node::handleException):
16641        (KJS::NumberNode::evaluate):
16642        (KJS::StringNode::evaluate):
16643        (KJS::ArrayNode::evaluate):
16644        (KJS::PostIncResolveNode::evaluate):
16645        (KJS::PostIncLocalVarNode::evaluate):
16646        (KJS::PostDecResolveNode::evaluate):
16647        (KJS::PostDecLocalVarNode::evaluate):
16648        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
16649        (KJS::PostIncBracketNode::evaluate):
16650        (KJS::PostDecBracketNode::evaluate):
16651        (KJS::PostIncDotNode::evaluate):
16652        (KJS::PostDecDotNode::evaluate):
16653        (KJS::typeStringForValue):
16654        (KJS::LocalVarTypeOfNode::evaluate):
16655        (KJS::TypeOfResolveNode::evaluate):
16656        (KJS::TypeOfValueNode::evaluate):
16657        (KJS::PreIncLocalVarNode::evaluate):
16658        (KJS::PreIncResolveNode::evaluate):
16659        (KJS::PreDecLocalVarNode::evaluate):
16660        (KJS::PreDecResolveNode::evaluate):
16661        (KJS::PreIncConstNode::evaluate):
16662        (KJS::PreDecConstNode::evaluate):
16663        (KJS::PostIncConstNode::evaluate):
16664        (KJS::PostDecConstNode::evaluate):
16665        (KJS::PreIncBracketNode::evaluate):
16666        (KJS::PreDecBracketNode::evaluate):
16667        (KJS::PreIncDotNode::evaluate):
16668        (KJS::PreDecDotNode::evaluate):
16669        (KJS::NegateNode::evaluate):
16670        (KJS::BitwiseNotNode::evaluate):
16671        (KJS::MultNode::evaluate):
16672        (KJS::DivNode::evaluate):
16673        (KJS::ModNode::evaluate):
16674        (KJS::addSlowCase):
16675        (KJS::add):
16676        (KJS::AddNumbersNode::evaluate):
16677        (KJS::AddStringsNode::evaluate):
16678        (KJS::AddStringLeftNode::evaluate):
16679        (KJS::AddStringRightNode::evaluate):
16680        (KJS::SubNode::evaluate):
16681        (KJS::LeftShiftNode::evaluate):
16682        (KJS::RightShiftNode::evaluate):
16683        (KJS::UnsignedRightShiftNode::evaluate):
16684        (KJS::BitXOrNode::evaluate):
16685        (KJS::BitOrNode::evaluate):
16686        (KJS::valueForReadModifyAssignment):
16687        (KJS::ForInNode::execute):
16688        (KJS::TryNode::execute):
16689        (KJS::FuncDeclNode::makeFunction):
16690        (KJS::FuncExprNode::evaluate):
16691        * kjs/number_object.cpp:
16692        (KJS::NumberPrototype::NumberPrototype):
16693        (KJS::numberProtoFuncToString):
16694        (KJS::numberProtoFuncToLocaleString):
16695        (KJS::numberProtoFuncToFixed):
16696        (KJS::numberProtoFuncToExponential):
16697        (KJS::numberProtoFuncToPrecision):
16698        (KJS::NumberObjectImp::NumberObjectImp):
16699        (KJS::NumberObjectImp::getValueProperty):
16700        (KJS::NumberObjectImp::construct):
16701        (KJS::NumberObjectImp::callAsFunction):
16702        * kjs/object.cpp:
16703        (KJS::JSObject::defineGetter):
16704        (KJS::JSObject::defineSetter):
16705        (KJS::JSObject::putDirect):
16706        (KJS::Error::create):
16707        * kjs/object.h:
16708        * kjs/object_object.cpp:
16709        (KJS::ObjectPrototype::ObjectPrototype):
16710        (KJS::objectProtoFuncToLocaleString):
16711        (KJS::objectProtoFuncToString):
16712        (KJS::ObjectObjectImp::ObjectObjectImp):
16713        (KJS::ObjectObjectImp::construct):
16714        * kjs/regexp_object.cpp:
16715        (KJS::RegExpPrototype::RegExpPrototype):
16716        (KJS::regExpProtoFuncToString):
16717        (KJS::RegExpImp::getValueProperty):
16718        (KJS::RegExpObjectImp::RegExpObjectImp):
16719        (KJS::RegExpObjectImp::arrayOfMatches):
16720        (KJS::RegExpObjectImp::getBackref):
16721        (KJS::RegExpObjectImp::getLastParen):
16722        (KJS::RegExpObjectImp::getLeftContext):
16723        (KJS::RegExpObjectImp::getRightContext):
16724        (KJS::RegExpObjectImp::getValueProperty):
16725        (KJS::RegExpObjectImp::createRegExpImp):
16726        * kjs/regexp_object.h:
16727        * kjs/string_object.cpp:
16728        (KJS::StringInstance::StringInstance):
16729        (KJS::StringInstance::lengthGetter):
16730        (KJS::StringInstance::indexGetter):
16731        (KJS::stringInstanceNumericPropertyGetter):
16732        (KJS::StringPrototype::StringPrototype):
16733        (KJS::replace):
16734        (KJS::stringProtoFuncCharAt):
16735        (KJS::stringProtoFuncCharCodeAt):
16736        (KJS::stringProtoFuncConcat):
16737        (KJS::stringProtoFuncIndexOf):
16738        (KJS::stringProtoFuncLastIndexOf):
16739        (KJS::stringProtoFuncMatch):
16740        (KJS::stringProtoFuncSearch):
16741        (KJS::stringProtoFuncReplace):
16742        (KJS::stringProtoFuncSlice):
16743        (KJS::stringProtoFuncSplit):
16744        (KJS::stringProtoFuncSubstr):
16745        (KJS::stringProtoFuncSubstring):
16746        (KJS::stringProtoFuncToLowerCase):
16747        (KJS::stringProtoFuncToUpperCase):
16748        (KJS::stringProtoFuncToLocaleLowerCase):
16749        (KJS::stringProtoFuncToLocaleUpperCase):
16750        (KJS::stringProtoFuncLocaleCompare):
16751        (KJS::stringProtoFuncBig):
16752        (KJS::stringProtoFuncSmall):
16753        (KJS::stringProtoFuncBlink):
16754        (KJS::stringProtoFuncBold):
16755        (KJS::stringProtoFuncFixed):
16756        (KJS::stringProtoFuncItalics):
16757        (KJS::stringProtoFuncStrike):
16758        (KJS::stringProtoFuncSub):
16759        (KJS::stringProtoFuncSup):
16760        (KJS::stringProtoFuncFontcolor):
16761        (KJS::stringProtoFuncFontsize):
16762        (KJS::stringProtoFuncAnchor):
16763        (KJS::stringProtoFuncLink):
16764        (KJS::StringObjectImp::StringObjectImp):
16765        (KJS::StringObjectImp::construct):
16766        (KJS::StringObjectImp::callAsFunction):
16767        (KJS::StringObjectFuncImp::StringObjectFuncImp):
16768        (KJS::StringObjectFuncImp::callAsFunction):
16769        * kjs/string_object.h:
16770        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
16771        * kjs/testkjs.cpp:
16772        (GlobalObject::GlobalObject):
16773        (functionGC):
16774        (functionRun):
16775        (functionReadline):
16776        (kjsmain):
16777        * kjs/ustring.h:
16778        * kjs/value.cpp:
16779        (KJS::JSCell::operator new):
16780        (KJS::jsString):
16781        (KJS::jsOwnedString):
16782        (KJS::jsNumberCell):
16783        * kjs/value.h:
16784        (KJS::jsNaN):
16785        (KJS::jsNumber):
16786        (KJS::jsNumberFromAnd):
16787        (KJS::JSCell::marked):
16788        (KJS::JSCell::mark):
16789        (KJS::JSValue::toJSNumber):
16790        Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to
16791        static Collector methods with calls to per-thread Heap ones.
16792
167932008-05-02  Dan Bernstein  <mitz@apple.com>
16794
16795        Reviewed by Maciej Stachowiak.
16796
16797        - Mac build fix
16798
16799        * wtf/StrHash.h: Added header guards and removed #include "config.h".
16800
168012008-05-01  Ada Chan  <adachan@apple.com>
16802
16803        #include <wtf/StrHash.h> in identifier.cpp.
16804
16805        Reviewed by Maciej.
16806
16807        * kjs/identifier.cpp:
16808
168092008-05-01  Steve Falkenburg  <sfalken@apple.com>
16810
16811        Build fix.
16812
16813        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
16814
168152008-05-01  Sam Weinig  <sam@webkit.org>
16816
16817        Fix build.
16818
16819        * JavaScriptCore.xcodeproj/project.pbxproj:
16820
168212008-05-01  Kevin McCullough  <kmccullough@apple.com>
16822
16823        Reviewed by Darin.
16824
16825        <rdar://problem/5770054> JavaScript profiler (10928)
16826        - Fix "sample" output so that it can be imported into Instruments
16827        - Also keep track of number of times a function is profiled.
16828
16829        * JavaScriptCore.xcodeproj/project.pbxproj: Add StrHash.h which needed
16830        to be pulled out of identifier.cpp so that it could be used by the
16831        profiler and identifiers.
16832        * kjs/identifier.cpp: Ditto.
16833        * profiler/FunctionCallProfile.cpp:
16834        (KJS::FunctionCallProfile::printDataInspectorStyle): Inspector style
16835        printing should show microseconds.
16836        (KJS::FunctionCallProfile::printDataSampleStyle): Sample style printing
16837        now counts the number of times a function is in the stack tree and does
16838        not print microseconds since that does not make sense for a sampler.
16839        * profiler/FunctionCallProfile.h: Keep track of number of times a
16840        function is profiled.
16841        (KJS::FunctionCallProfile::numberOfCalls):
16842        * profiler/Profiler.cpp:
16843        (KJS::functionNameCountPairComparator): Comparator for sort function in
16844        printDataSampleStyle.
16845        (KJS::Profiler::printDataSampleStyle): Print the number of times that a
16846        function is listed in the stack tree in order of most times listed.
16847        * wtf/HashCountedSet.h: Added copyToVector since it didn't exist and is
16848        a more standard way to copy a HashSet to a Vector. I added on variant
16849        that takes a pair as the Vector's type and so the HashCountedSet simply
16850        fills in that pair with its internal pair, and another variant that
16851        takes a Vector of the type of the HashCountedSet and only fills in the
16852        Vector with the first element of the pair.
16853        (WTF::copyToVector):
16854        * wtf/StrHash.h: Added.
16855        (WTF::):
16856
168572008-04-29  David Kilzer  <ddkilzer@apple.com>
16858
16859        BUILD FIX for ENABLE(DASHBOARD_SUPPORT)
16860
16861        * wtf/Platform.h: Defined ENABLE(DASHBOARD_SUPPORT) to 1 only for
16862        PLATFORM(MAC) and PLATFORM(WIN).  Changed default to 0 for other
16863        ports.
16864
168652008-04-29  Greg Bolsinga  <bolsinga@apple.com>
16866
16867        Reviewed by Darin.
16868
16869        Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)
16870
16871        * wtf/Platform.h:
16872
168732008-04-29  Kevin McCullough  <kmccullough@apple.com>
16874
16875        Reviewed by Geoff.
16876
16877        -<rdar://problem/5770054> JavaScript profiler (10928)
16878        -Keep call count.
16879
16880        * profiler/FunctionCallProfile.cpp:
16881        (KJS::FunctionCallProfile::FunctionCallProfile):
16882        (KJS::FunctionCallProfile::didExecute): Implements call count and fixed a bug where a stackIndex
16883        of 0 was causing the assert to be hit.
16884        (KJS::FunctionCallProfile::stopProfiling):
16885        (KJS::FunctionCallProfile::endAndRecordCall):
16886        * profiler/FunctionCallProfile.h:
16887
168882008-04-29  Simon Hausmann  <hausmann@webkit.org>
16889
16890        Qt/Windows build fix. The externally declared hash tables are actually
16891        declared const and the const is mangled in the symbol name, so when
16892        importing they also need to be marked const.
16893
16894        When compiling without MULTIPLE_THREADS use a const HashTable&
16895        instead of a HashTable& in ThreadClassInfoHashTables to avoid
16896        initializing the latter with a const reference.
16897
16898        * kjs/JSGlobalObject.cpp:
16899
169002008-04-28  Alexey Proskuryakov  <ap@webkit.org>
16901
16902        Windows build fix.
16903
16904        * kjs/ExecState.h: For whatever reason, MSVC couldn't generate a default constructor for
16905        a struct that had a "const List" member. Removing the const qulifier makes the problem go away.
16906
169072008-04-28  Alexey Proskuryakov  <ap@webkit.org>
16908
16909        Reviewed by Darin.
16910
16911        Fix run-webkit-tests --threading
16912        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
16913        Proxy server issue in Sunday's Nightly
16914
16915        Changed ClassInfo objects for built-in objects to hold a getter function returning
16916        a per-thread instance. This makes it safe to share these ClassInfo objects between threads -
16917        and these are the only ones that need to be shared.
16918
16919        * kjs/lexer.cpp:
16920        (KJS::Lexer::Lexer):
16921        (KJS::Lexer::~Lexer):
16922        * kjs/lexer.h:
16923        Made mainTable a member of Lexer, so that it no longer needs to be shared between threads.
16924
16925        * kjs/object.cpp:
16926        (KJS::JSObject::deleteProperty):
16927        (KJS::JSObject::findPropertyHashEntry):
16928        (KJS::JSObject::propertyIsEnumerable):
16929        (KJS::JSObject::getPropertyAttributes):
16930        (KJS::JSObject::getPropertyNames):
16931        * kjs/object.h:
16932        (KJS::ClassInfo::propHashTable):
16933        Added a new classPropHashTableGetterFunction field to ClassInfo. If it is non-zero, the
16934        static table is not used.
16935
16936        * kjs/JSGlobalObject.cpp:
16937        (KJS::ThreadClassInfoHashTables::ThreadClassInfoHashTables): This new class holds per-thread
16938        HashTables for built-in classes. The old static structs are copied to create per-thread
16939        instances.
16940        (KJS::JSGlobalObject::threadClassInfoHashTables): An accessor/initializer for the above.
16941        (KJS::JSGlobalObject::init): Copy per-thread data into a single structure for faster access.
16942        Also, construct globalExec.
16943        (KJS::JSGlobalObject::reset): Adapted for globalExec now being an OwnPtr.
16944        (KJS::JSGlobalObject::mark): Ditto.
16945        (KJS::JSGlobalObject::globalExec): Ditto.
16946        * kjs/JSGlobalObject.h:
16947        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Made JSGlobalObject::JSGlobalObjectData::globalExec an OwnPtr, so that it can
16948        be initialized from JSGlobalObject::init() after them. Otherwise, ExecState constructor was
16949        trying to access half-initialized JSGlobalObject to make its own copy of these table
16950        references, and failed.
16951        (KJS::JSGlobalObject::JSGlobalObject): Pass "this" value to init() to create globalExec.
16952        (KJS::JSGlobalObject::perThreadData): An accessor for per-thread data.
16953
16954        * kjs/ExecState.cpp:
16955        (KJS::ExecState::ExecState):
16956        * kjs/ExecState.h:
16957        (KJS::ExecState::propertyNames):
16958        (KJS::ExecState::emptyList):
16959        (KJS::ExecState::arrayTable):
16960        (KJS::ExecState::dateTable):
16961        (KJS::ExecState::mathTable):
16962        (KJS::ExecState::numberTable):
16963        (KJS::ExecState::RegExpImpTable):
16964        (KJS::ExecState::RegExpObjectImpTable):
16965        (KJS::ExecState::stringTable):
16966        * kjs/ExecStateInlines.h:
16967        (KJS::ExecState::ExecState):
16968        Each ExecState holds its own reference to per-thread data, for even faster access. Moved
16969        m_emptyList and m_propertyNames to the same structure, making ExecState faster to construct
16970        and take less space on the stack.
16971
16972        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize thread-static data
16973        added to JSGlobalObject.
16974
16975        * API/JSCallbackConstructor.cpp:
16976        * API/JSCallbackFunction.cpp:
16977        * API/JSCallbackObject.cpp:
16978        * JavaScriptCore.exp:
16979        * kjs/JSVariableObject.cpp:
16980        (KJS::JSVariableObject::getPropertyAttributes):
16981        * kjs/JSVariableObject.h:
16982        * kjs/array_instance.cpp:
16983        * kjs/array_object.cpp:
16984        (KJS::ArrayPrototype::getOwnPropertySlot):
16985        * kjs/bool_object.cpp:
16986        * kjs/create_hash_table:
16987        * kjs/date_object.cpp:
16988        (KJS::DatePrototype::getOwnPropertySlot):
16989        (KJS::DateObjectImp::DateObjectImp):
16990        * kjs/error_object.cpp:
16991        * kjs/function.cpp:
16992        * kjs/function_object.cpp:
16993        (KJS::FunctionPrototype::FunctionPrototype):
16994        * kjs/internal.cpp:
16995        * kjs/lookup.h:
16996        * kjs/math_object.cpp:
16997        (KJS::MathObjectImp::getOwnPropertySlot):
16998        * kjs/number_object.cpp:
16999        (KJS::NumberObjectImp::getOwnPropertySlot):
17000        * kjs/object_object.cpp:
17001        (KJS::ObjectPrototype::ObjectPrototype):
17002        * kjs/regexp_object.cpp:
17003        (KJS::RegExpPrototype::RegExpPrototype):
17004        (KJS::RegExpImp::getOwnPropertySlot):
17005        (KJS::RegExpImp::put):
17006        (KJS::RegExpObjectImp::getOwnPropertySlot):
17007        (KJS::RegExpObjectImp::put):
17008        * kjs/string_object.cpp:
17009        (KJS::StringPrototype::getOwnPropertySlot):
17010        Adjust for the above changes.
17011
170122008-04-28  Darin Adler  <darin@apple.com>
17013
17014        Reviewed by Adam.
17015
17016        - make sure RefPtr's default hash doesn't ref/deref when computing the hash
17017        - remove remnants of the hash table storage type optimization
17018
17019        * wtf/HashFunctions.h: Used "using" to get the hash and equal functions
17020        from PtrHash<P*> into PtrHash<RefPtr<P>>.
17021
17022        * wtf/HashMap.h: Replaced uses of PairBaseHashTraits with PairHashTraits.
17023        Eliminated storage-related typedefs. Removed constructor, destructor,
17024        copy constructor, and destructor since the compiler-generated ones are
17025        fine. Removed refAll and derefAll. Took out unnnecessary typecasts.
17026        Removed use of RefCounter.
17027
17028        * wtf/HashSet.h: Eliminated storage-related typedefs. Removed constructor,
17029        destructor, copy constructor, and destructor since the compiler-generated
17030        ones are fine. Removed refAll and derefAll. Removed unneeded template
17031        arguents from HashSetTranslatorAdapter. Eliminated unneeded HashSetTranslator
17032        template.
17033
17034        * wtf/HashTable.h: Tweaked formatting. Removed NeedsRef, RefCounterBase,
17035        RefCounter, HashTableRefCounterBase, HashTableRefCounter, and Assigner
17036        class templates.
17037
17038        * wtf/HashTraits.h: Removed StorageTraits, needsRef, PairBaseHashTraits,
17039        and HashKeyStorageTraits.
17040
17041        * wtf/RefPtrHashMap.h: Made all the same fixes as in HashMap. Also made
17042        the corresponding changes to RefPtrHashMapRawKeyTranslator.
17043
170442008-04-28  Darin Adler  <darin@apple.com>
17045
17046        Reviewed by Mitz.
17047
17048        - fix assertion hit every time you view www.apple.com
17049
17050        * kjs/PropertyNameArray.cpp:
17051        (KJS::PropertyNameArray::add): Changed assertion to allow null and empty strings.
17052        Now to find out why we have a property named "" and if that's a bug!
17053
170542008-04-27  Mark Rowe  <mrowe@apple.com>
17055
17056        Reviewed by Maciej Stachowiak.
17057
17058        Fix crash inside PtrHash::hash when loading a page.
17059
17060        * wtf/HashFunctions.h: Explicitly use the superclass implementation of hash to avoid infinite recursion.
17061
170622008-04-27  Darin Adler  <darin@apple.com>
17063
17064        Reviewed by Maciej.
17065
17066        - fix <rdar://problem/5657459> REGRESSION: JavaScriptCore no longer builds with
17067          GCC 4.2 due to pointer aliasing warnings
17068
17069        Fix this by removing the HashTable optimizations that allowed us to share a back end
17070        implementation between hash tables with integers, pointers, RefPtr, and String objects
17071        as keys. The way it worked was incompatible with strict aliasing.
17072
17073        This increases code size. On Mac OS X we'll have to regenerate .order files to avoid
17074        slowing down Safari startup times.
17075
17076        This creates a slight slowdown in SunSpider, mitigated by the following four speedups:
17077
17078        - speed up array put slightly by moving a branch (was already done for get)
17079
17080        - speed up symbol table access by adding a function named inlineGet to HashMap
17081          and using that in symbolTableGet/Put
17082
17083        - speed up PropertyNameArray creation by reducing the amount of reference count
17084          churn and uniqueness checking when adding names and not doing any allocation at
17085          all when building small arrays
17086
17087        - speed up conversion of strings to floating point numbers by eliminating the
17088          malloc/free of the buffer for the ASCII copy of the string; a way to make
17089          things even faster would be to change strtod to take a UTF-16 string
17090
17091        Note that there is considerable unused complexity now in HashSet/Map/Table to support
17092        "storage types", which is no longer used. Will do in a separate patch.
17093
17094        * API/JSCallbackObjectFunctions.h:
17095        (KJS::JSCallbackObject<Base>::getPropertyNames): Removed explicit cast to Identifier to
17096        take advantage of the new PropertyNameArray::add overload and avoid reference count churn.
17097        * API/JSObjectRef.cpp:
17098        (JSPropertyNameAccumulatorAddName): Ditto.
17099        * JavaScriptCore.exp: Updated PropertyNameArray::add entry point name.
17100
17101        * kjs/JSVariableObject.cpp: Removed now-unneeded IdentifierRepHashTraits::nullRepPtr
17102        definition (see below).
17103        (KJS::JSVariableObject::getPropertyNames): Removed explicit cast to Identifier.
17104
17105        * kjs/JSVariableObject.h:
17106        (KJS::JSVariableObject::symbolTableGet): Use inlineGet for speed. Also changed to do
17107        early exit instead of nesting the body inside an if.
17108        (KJS::JSVariableObject::symbolTablePut): Ditto.
17109
17110        * kjs/PropertyNameArray.cpp:
17111        (KJS::PropertyNameArray::add): Changed implementation to take a raw pointer instead of
17112        a reference to an identifier. Do uniqueness checking by searching the vector when the
17113        vector is short, only building the set once the vector is large enough.
17114
17115        * kjs/PropertyNameArray.h: Added an overload of add for a raw pointer, and made the old
17116        add function call that one. Added an addKnownUnique function for use when the new
17117        name is known to be different from any other in the array. Changed the vector to have
17118        an inline capacity of 20.
17119
17120        * kjs/SymbolTable.h: Changed IdentifierRepHash to inherit from the default hash for
17121        a RefPtr so we don't have to define so much. Added an overload of the hash function for
17122        a raw pointer as required by the new RefPtrHashMap. Got rid of the now-unneeded
17123        IdentifierRepHashTraits -- the default traits now work fine. Added a definition of
17124        empthValueIsZero to SymbolTableIndexHashTraits; not having it was incorrect, but harmless.
17125
17126        * kjs/array_instance.cpp:
17127        (KJS::ArrayInstance::put): Move the maxArrayIndex check inside the branch that checks
17128        the index against the length, as done in the get function.
17129
17130        * kjs/function.cpp:
17131        (KJS::globalFuncKJSPrint): Changed to use the new getCString instead of cstring.
17132
17133        * kjs/internal.cpp: Removed printInfo debugging function, a client of cstring.
17134        If we need a debugging function we can easily make a better one and we haven't
17135        used this one in a long time.
17136        * kjs/internal.h: Ditto.
17137
17138        * kjs/object.cpp:
17139        (KJS::JSObject::getPropertyNames): Removed explicit cast to Identifier.
17140        * kjs/property_map.cpp:
17141        (KJS::PropertyMap::getEnumerablePropertyNames): Ditto. Also added a special case for
17142        the case where the propertyNames array is empty -- in that case we know we're adding
17143        a set of names that are non-overlapping so we can use addKnownUnique.
17144        * kjs/ustring.cpp:
17145        (KJS::UString::getCString): Replaces cstring. Puts the C string into a CStringBuffer,
17146        which is a char Vector with an inline capacity. Also returns a boolean to indicate if
17147        the converion was lossy, which eliminates the need for a separate is8Bit call.
17148        (KJS::UString::toDouble): Changed to call getCString instead of cstring.
17149        * kjs/ustring.h: Ditto.
17150
17151        * wtf/HashFunctions.h: Overload the hash and equal functions for RefPtr's default
17152        hash to take raw pointers. This works with the changes to RefPtrHashMap to avoid
17153        introducing refcount churn.
17154
17155        * wtf/HashMap.h: Removed special code to convert the deleted value to the empty value
17156        when writing a new value into the map. This is now handled elsewhere.
17157        (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
17158        HashTable::lookup; it's slightly more efficient to do this check inside lookup.
17159
17160        * wtf/HashTable.h:
17161        (WTF::HashTable::isDeletedBucket): Changed to use isDeletedValue instead of using
17162        deletedValue and the equality operator.
17163        (WTF::HashTable::deleteBucket): Changed to use constructDeletedValue instead of
17164        using deletedValue and the assignment operator.
17165        (WTF::HashTable::checkKey): Added. Factors out the check for values that are empty
17166        or deleted keys that's used in various functions below.
17167        (WTF::HashTable::lookup): Changed to use checkKey, check for a 0 table, and also
17168        made public for use by RefPtrHashMap.
17169        (WTF::HashTable::lookupForWriting): Changed to use checkKey.
17170        (WTF::HashTable::fullLookupForWriting): Changed to use checkKey.
17171        (WTF::HashTable::add): Changed to use checkKey, and call initializeBucket on a
17172        deleted bucket before putting a new entry into it.
17173        (WTF::HashTable::addPassingHashCode): Ditto.
17174        (WTF::HashTable::deallocateTable): Check isDeletedBucket before calling ~ValueType.
17175
17176        * wtf/HashTraits.h: Got ridd of all the HashTraits specialization for the integer
17177        types, since GeneicHashTraitsBase already deals with integers separately. Put the
17178        deleted value support into GenericHashTraitsBase. Changed FloatHashTraits to
17179        inherit from GenericHashTraits, and define construct/isDeletedValue rather than
17180        deletedValue. Removed the ref and deref functions from RefPtr's HashTraits, and
17181        defined construct/isDeletedValue. Eliminated DeletedValueAssigner. Changed
17182        PairHashTraits to define construct/isDeletedValue, and also merged
17183        PairBaseHashTraits in with PairHashTraits. Got rid of all specialization of
17184        HashKeyStorageTraits. We'll remove that, and the needsRef data member, later.
17185
17186        * wtf/RefPtr.h: Added HashTableDeletedValueType, an enum type with a single value,
17187        HashTableDeletedValue. Used that type to make a new constructor to construct
17188        deleted values and also added an isHashTableDeletedValue function.
17189
17190        * wtf/RefPtrHashMap.h: Added RefPtrHashMapRawKeyTranslator and used it to implement
17191        the raw pointer functions. This is a way to continue to avoid refcount thrash. We
17192        can't use the old way because it depended on the underlying map using a non-RefPtr
17193        type.
17194        (WTF::HashMap::find): Use find with RefPtrHashMapRawKeyTranslator.
17195        (WTF::HashMap::contains): Use contains with RefPtrHashMapRawKeyTranslator.
17196        (WTF::HashMap::inlineAdd): Use add with RefPtrHashMapRawKeyTranslator.
17197        (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
17198        HashTable::lookup; it's slightly more efficient to do this check inside lookup.
17199        (WTF::HashMap::inlineGet): Added. Just like get, but marked inline for use in the
17200        symbol table code.
17201
172022008-04-25  Sam Weinig  <sam@webkit.org>
17203
17204        Rubber-stamped by Mark Rowe.
17205
17206        Remove SavedBuiltins and SavedProperties classes and the methods used to
17207        save data to them.  The CachedPage now stores a the JSGlobalObject in full.
17208
17209        * JavaScriptCore.exp:
17210        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17211        * JavaScriptCore.xcodeproj/project.pbxproj:
17212        * kjs/JSGlobalObject.cpp:
17213        * kjs/JSGlobalObject.h:
17214        * kjs/JSVariableObject.cpp:
17215        * kjs/JSVariableObject.h:
17216        (KJS::JSVariableObject::localStorage):
17217        * kjs/SavedBuiltins.h: Removed.
17218        * kjs/object.h:
17219        * kjs/property_map.cpp:
17220        * kjs/property_map.h:
17221
172222008-04-25  Mark Rowe  <mrowe@apple.com>
17223
17224        Rubber-stamped by Sam Weinig.
17225
17226        Add some content to an empty ICU header file to prevent verification errors.
17227
17228        * icu/unicode/utf_old.h:
17229
172302008-04-25  David Kilzer  <ddkilzer@apple.com>
17231
17232        <rdar://problem/5819422> REGRESSION: Wrong line number passed to -willLeaveCallFrame
17233
17234        Patch by George Dicker and Michael Kahl.  Reviewed by Darin.
17235
17236        When -[NSObject(WebScriptDebugDelegate) webView:willLeaveCallFrame:sourceId:line:forWebFrame:]
17237        is invoked, the first line number of the function is returned instead of the last
17238        line number.  This regressed in r28458.
17239
17240        * kjs/nodes.cpp:
17241        (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Pass lastLine() instead of lineNo()
17242        when calling Debugger::returnEvent().
17243
172442008-04-25  Darin Adler  <darin@apple.com>
17245
17246        Done with Stephanie Lewis.
17247
17248        * JavaScriptCore.xcodeproj/project.pbxproj: Prepare for compilation with gcc 4.2 by
17249        adding -fno-strict-aliasing to CollatorICU.cpp.
17250
172512008-04-24  Sam Weinig  <sam@webkit.org>
17252
17253        Reviewed by Geoffrey Garen.
17254
17255        Add a #define to easily enable collecting on every allocation to aid
17256        debugging GC bugs.
17257
17258        * kjs/collector.cpp:
17259        (KJS::Collector::heapAllocate):
17260
172612008-04-24  Kevin McCullough  <kmccullough@apple.com>
17262
17263        Reviewed by Adam and Sam.
17264
17265        -<rdar://problem/5770054> JavaScript profiler (10928)
17266        -Only profile the page group that starts profiling to avoid profiling
17267        tools that shouldn't be profiled unless explicitly requested to.
17268
17269        * JavaScriptCore.exp: Export new signature.
17270        * kjs/JSGlobalObject.cpp: Add unique identifiers to the JSGlobalObject.
17271        (KJS::JSGlobalObject::init):
17272        * kjs/JSGlobalObject.h: Ditto.
17273        (KJS::JSGlobalObject::setPageGroupIdentifier):
17274        (KJS::JSGlobalObject::pageGroupIdentifier):
17275        * profiler/Profiler.cpp: Check the identifier of the page group of the
17276        lexical global exec state and only profile if it matches the given page
17277        group identifier.
17278        (KJS::Profiler::startProfiling):
17279        (KJS::Profiler::willExecute):
17280        (KJS::Profiler::didExecute):
17281        * profiler/Profiler.h: Ditto.
17282        (KJS::Profiler::Profiler):
17283
172842008-04-24  Julien Chaffraix  <jchaffraix@webkit.org>
17285
17286        Reviewed by Simon.
17287
17288        Bug 15940: Implement threading API for Qt
17289        https://bugs.webkit.org/show_bug.cgi?id=15940
17290
17291        Original patch by Justin Haygood, tweaked by me.
17292
17293        * JavaScriptCore.pri:
17294        * wtf/ThreadingQt.cpp: Added.
17295        (WTF::threadMapMutex):
17296        (WTF::threadMap):
17297        (WTF::establishIdentifierForThread):
17298        (WTF::clearThreadForIdentifier):
17299        (WTF::threadForIdentifier):
17300        (WTF::initializeThreading):
17301        (WTF::ThreadPrivate::getReturnValue):
17302        (WTF::ThreadPrivate::ThreadPrivate):
17303        (WTF::ThreadPrivate::run):
17304        (WTF::createThread):
17305        (WTF::waitForThreadCompletion): return !res to return
17306        0 on success (to match the pthreads implementation).
17307        (WTF::detachThread):
17308        (WTF::identifierByQthreadHandle):
17309        (WTF::currentThread):
17310        (WTF::Mutex::Mutex):
17311        (WTF::Mutex::~Mutex):
17312        (WTF::Mutex::lock):
17313        (WTF::Mutex::tryLock):
17314        (WTF::Mutex::unlock):
17315        (WTF::ThreadCondition::ThreadCondition):
17316        (WTF::ThreadCondition::~ThreadCondition):
17317        (WTF::ThreadCondition::wait):
17318        (WTF::ThreadCondition::timedWait):
17319        (WTF::ThreadCondition::signal):
17320
173212008-04-22  Darin Adler  <darin@apple.com>
17322
17323        Reviewed by Anders.
17324
17325        - simplify use of HashTraits to prepare for some upcoming hash table changes
17326
17327        * kjs/SymbolTable.h: Made SymbolTableIndexHashTraits derive from HashTraits<size_t>
17328        and specialize only the empty value.
17329
173302008-04-23  Holger Hans Peter Freyther  <zecke@selfish.org>
17331
17332        Reviewed by Simon.
17333
17334        Removed the #define for USE_SYSTEM_MALLOC that we set in WebKit.pri
17335        already.
17336
17337        * wtf/Platform.h:
17338
173392008-04-21  Kevin McCullough  <kmccullough@apple.com>
17340
17341        Reviewed by Adam.
17342
17343        <rdar://problem/5770054> JavaScript profiler (10928)
17344        - When stop profiling is called we need to stop the timers on all the
17345        functions that are still running.
17346
17347        * profiler/FunctionCallProfile.cpp:
17348        (KJS::FunctionCallProfile::didExecute):
17349        (KJS::FunctionCallProfile::stopProfiling):
17350        * profiler/FunctionCallProfile.h:
17351        * profiler/Profiler.cpp:
17352        (KJS::Profiler::stopProfiling):
17353
173542008-04-21  Alexey Proskuryakov  <ap@webkit.org>
17355
17356        Reviewed by Darin.
17357
17358        Move collector main thread initialization from WebKit/win to KJS::initializeThreading.
17359
17360        * kjs/InitializeThreading.cpp:
17361        (KJS::initializeThreading):
17362
173632008-04-21  Adam Roben  <aroben@apple.com>
17364
17365        MSVC build fix
17366
17367        Reviewed by Alexey Proskuryakov.
17368
17369        * kjs/ustring.h:
17370        (KJS::UString::cost): Disable a warning about assigning a 32-bit
17371        size_t into a 31-bit size_t.
17372
173732008-04-21  Simon Hausmann  <hausmann@webkit.org>
17374
17375        Reviewed by Lars.
17376
17377        Made convertValueToQVariant accessible from within WebKit/qt/Api
17378
17379        * bindings/qt/qt_runtime.h:
17380
173812008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
17382
17383        Reviewed by Simon.
17384
17385        Build fix for Qt 4.3
17386
17387        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
17388        always defined. Do this by adding defines to the compiler line
17389        * For users of our API this is not feasible. Every public header file should
17390        include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
17391        when we are building everything < 4.4.0 and don't have them defined.
17392
17393        * kjs/testkjs.pro:
17394
173952008-04-19  Matt Lilek  <webkit@mattlilek.com>
17396
17397        Not reviewed, Windows build fix - copy the profiler headers in all
17398        configurations, not just Debug_Internal.
17399
17400        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17401
174022008-04-19  Mike Hommey  <glandium@debian.org>
17403
17404        Reviewed by Alp Toker.
17405
17406        Don't build testkjs with rpath.
17407
17408        * GNUmakefile.am:
17409
174102008-04-18  Kevin Ollivier  <kevino@theolliviers.com>
17411
17412        wx build fixes. Rename LocalStorage.h to LocalStorageEntry.h
17413        to avoid header detection issues between WebCore/storage/LocalStorage.h 
17414        and it, and add $(PROFILER_SOURCES) to the wx JSCore build.
17415
17416        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17417        * JavaScriptCore.xcodeproj/project.pbxproj:
17418        * jscore.bkl:
17419        * kjs/ExecState.h:
17420        * kjs/JSVariableObject.h:
17421        * kjs/LocalStorage.h: Removed.
17422        * kjs/LocalStorageEntry.h: Copied from JavaScriptCore/kjs/LocalStorage.h.
17423        * kjs/function.h:
17424
174252008-04-18 Jan  Michael Alonzo  <jmalonzo@unpluggable.com>
17426
17427        Reviewed by Alp Toker.
17428
17429        http://bugs.webkit.org/show_bug.cgi?id=16620
17430        [GTK] Autotools make dist and make check support
17431
17432        Cleanups.
17433
17434        * GNUmakefile.am:
17435
174362008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>
17437
17438        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
17439        build fix.
17440
174412008-04-11  Mark Rowe  <mrowe@apple.com>
17442
17443        Rubber-stamped by Antti Koivisto.
17444
17445        Silence GCC 4.3 warnings by removing extraneous consts.
17446
17447        * kjs/ustring.cpp:
17448        * kjs/ustring.h:
17449
174502008-04-18  Kevin McCullough  <kmccullough@apple.com>
17451
17452        Reviewed by Sam.
17453
17454        -<rdar://problem/5770054> JavaScript profiler (10928)
17455        - Use Deque instead of Vector since the profiler uses prepend a lot
17456        and deque is faster at that.
17457
17458        * profiler/FunctionCallProfile.h:
17459        (KJS::FunctionCallProfile::milliSecs): Corrected the name to match
17460        its output.
17461        * wtf/Deque.h:
17462        (WTF::deleteAllValues):
17463
174642008-04-18  Kevin McCullough  <kmccullough@apple.com>
17465
17466        Reviewed by Sam and Adam.
17467
17468        -<rdar://problem/5770054> JavaScript profiler (10928)
17469        - Cleaned up the header file and made some functions static, added
17470        a new, sane, printing function, and fixed a few minor bugs.
17471
17472        * JavaScriptCore.exp:
17473        * JavaScriptCore.xcodeproj/project.pbxproj:
17474        * profiler/FunctionCallProfile.cpp:
17475        (KJS::FunctionCallProfile::didExecute): Removed assertion that time is
17476        > 0 because at ms resolution that may not be true and only cross-
17477        platform way to get time differences is in ms.
17478        (KJS::FunctionCallProfile::printDataInspectorStyle): Added a new
17479        printing function for dumping data in a sane style.
17480        (KJS::FunctionCallProfile::printDataSampleStyle): Fixed a bug where we
17481        displayed too much precision when printing our floats. Also added logic
17482        to make sure we don't display 0 because that doesn't make sense for a
17483        sampling profile.
17484        * profiler/FunctionCallProfile.h:
17485        * profiler/Profiler.cpp: Moved functions that could be static into the
17486        implementation, and chaned the ASSERTs to early returns.  I did this
17487        because console.profile() is a JS function and so was being profiled
17488        but asserting because the profiler had not been started! In the future
17489        I would like to put the ASSERTs back and not profile the calls to
17490        console.profile() and console.profileEnd().
17491        (KJS::Profiler::willExecute):
17492        (KJS::Profiler::didExecute):
17493        (KJS::getStackNames): Fixed a bug where the wrong ExecState was being
17494        used.
17495        (KJS::getFunctionName):
17496        (KJS::Profiler::printDataInspectorStyle):
17497        * profiler/Profiler.h:
17498
174992008-04-18  Alexey Proskuryakov  <ap@webkit.org>
17500
17501        Reviewed by Darin.
17502
17503        Fix leaks during plugin tests (which actually excercise background JS), and potential
17504        PAC brokenness that was not reported, but very likely.
17505
17506        The leaks shadowed a bigger problem with Identifier destruction. Identifier::remove involves
17507        an IdentifierTable lookup, which is now a per-thread instance. Since garbage collection can
17508        currently happen on a different thread than allocation, a wrong table was used.
17509
17510        No measurable change on SunSpider total, ~1% variation on individual tests.
17511
17512        * kjs/ustring.cpp:
17513        (KJS::UString::Rep::create):
17514        (KJS::UString::Rep::destroy):
17515        * kjs/ustring.h:
17516        Replaced isIdentifier with a pointer to IdentifierTable, so that destruction can be done
17517        correctly. Took one bit from reportedCost, to avoid making UString::Rep larger (performance
17518        effect was measurable on SunSpider).
17519
17520        * kjs/identifier.cpp:
17521        (KJS::IdentifierTable::IdentifierTable):
17522        (KJS::IdentifierTable::~IdentifierTable):
17523        (KJS::IdentifierTable::add):
17524        (KJS::IdentifierTable::remove):
17525        Make IdentifierTable a real class. Its destructor needs to zero out outstanding references,
17526        because some identifiers may briefly outlive it during thread destruction, and we don't want
17527        them to use their stale pointers.
17528
17529        (KJS::LiteralIdentifierTable):
17530        (KJS::Identifier::add):
17531        Now that LiteralIdentifierTable is per-thread and can be destroyed not just during application
17532        shutdown, it is not appropriate to simply bump refcount for strings that get there; changed
17533        the table to hold RefPtrs.
17534
17535        (KJS::CStringTranslator::translate):
17536        (KJS::UCharBufferTranslator::translate):
17537        (KJS::Identifier::addSlowCase):
17538        (KJS::Identifier::remove):
17539        * kjs/identifier.h:
17540        (KJS::Identifier::add):
17541        Use and update UString::Rep::identifierTable as appropriate. Updating it is now done in
17542        IdentifierTable::add, not in translators.
17543
175442008-04-18  Alexey Proskuryakov  <ap@webkit.org>
17545
17546        Reviewed by Darin.
17547
17548        Get rid of static compareWithCompareFunctionArguments in array_instance.cpp.
17549
17550        No change on SunSpider, CelticKane or iBench JavaScript. It is probable that in some cases,
17551        merge sort is still faster, but more investigation is needed to determine a new cutoff.
17552        Or possibly, it would be better to do what FIXME says (change to tree sort).
17553
17554        Also, made arguments a local variable - not sure why it was a member of
17555        CompareWithCompareFunctionArguments.
17556
17557        * kjs/array_instance.cpp:
17558        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
17559        (KJS::CompareWithCompareFunctionArguments::operator()):
17560        (KJS::ArrayInstance::sort):
17561
175622008-04-18  Simon Hausmann  <hausmann@webkit.org>
17563
17564        Build fix for gcc 4.3. Include stdio.h for printf.
17565
17566        * profiler/FunctionCallProfile.cpp:
17567        * profiler/Profiler.cpp:
17568
175692008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>
17570
17571        Reviewed by mrowe.
17572
17573        * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
17574
175752008-04-17  Alexey Proskuryakov  <ap@webkit.org>
17576
17577        Reviewed by Maciej.
17578
17579        Thread static data destructors are not guaranteed to be called in any particular order;
17580        turn ThreadSpecific into a phoenix-style singleton to avoid accessing freed memory when
17581        deleted objects are interdependent (e.g. CommonIdentifiers and internal identifier tables).
17582
17583        No change on SunSpider.
17584
17585        * wtf/ThreadSpecific.h:
17586        (WTF::ThreadSpecific::Data::Data):
17587        (WTF::::get):
17588        (WTF::::set):
17589        (WTF::::destroy):
17590
175912008-04-15  Srinivas Rao. M Hamse  <msrinirao@gmail.com>
17592
17593        Reviewed by Maciej Stachowiak.
17594
17595        - gcc 3.x build fix
17596
17597        * kjs/nodes.h: CallerType definition made public for gcc 3.x compilation
17598
175992008-04-16  Brady Eidson  <beidson@apple.com>
17600
17601        Reviewed by Sam Weinig
17602
17603        Change ThreadSafeShared to act like RefCounted by starting out with a single ref by default
17604
17605        * wtf/Threading.h:
17606        (WTF::ThreadSafeShared::ThreadSafeShared):
17607
176082008-04-16  Sam Weinig  <sam@webkit.org>
17609
17610        Reviewed by Geoffrey Garen.
17611
17612        - To keep the behavior of the WebKit and JavaScriptCore API's the same,
17613          we need to hide the fact that the global object and the window object
17614          are no longer the same thing, and the the global object now changes on
17615          navigations.  To do this, only the wrapper should ever be exposed.  This
17616          fixes the two remaining spots where the internal global object is exposed,
17617          the windowScriptObject returned from [WebFrame windowObject] and the object
17618          return by calling JSContextGetGlobalObject on [WebFrame globalContext].
17619
17620        * API/JSContextRef.cpp:
17621        (JSContextGetGlobalObject):
17622        This is a bit of a hack, this returns the "this" representation of the globalObject
17623        which will be the WrapperWindow for WebCore and the globalObject for non-WebCore.
17624
17625        * API/JSObjectRef.cpp:
17626        (JSObjectSetProperty):
17627        Call the new putWithAttributes method instead of relying on lower-level calls.
17628        This is needed so that the window wrapper can forward the calls.
17629
17630        * JavaScriptCore.exp:
17631        * kjs/Activation.h:
17632        * kjs/JSGlobalObject.cpp:
17633        (KJS::JSGlobalObject::putWithAttributes):
17634        * kjs/JSGlobalObject.h:
17635        * kjs/JSVariableObject.h:
17636        (KJS::JSVariableObject::symbolTablePutWithAttributes):
17637        * kjs/function.cpp:
17638        (KJS::ActivationImp::putWithAttributes):
17639        * kjs/nodes.cpp:
17640        (KJS::ConstDeclNode::handleSlowCase):
17641        (KJS::ConstDeclNode::evaluateSingle):
17642        (KJS::EvalNode::processDeclarations):
17643        * kjs/object.cpp:
17644        (KJS::JSObject::putWithAttributes):
17645        * kjs/object.h:
17646        Rename initializeVariable to putWithAttributes and move it down to JSObject so it
17647        can be used for JSObjectSetProperty.
17648
176492008-04-16  Kevin McCullough  <kmccullough@apple.com>
17650
17651        Reviewed by Sam and Geoff.
17652
17653        -<rdar://problem/5770054> JavaScript profiler (10928)
17654        Inital profiler prototype
17655
17656        * GNUmakefile.am: Added new files to project
17657        * JavaScriptCore.pri: Ditto
17658        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto
17659        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto
17660        * JavaScriptCoreSources.bkl: Ditto
17661        * kjs/config.h: Put compiling flag in here.
17662        * kjs/function.cpp: Instrument calling the function eval().
17663        (KJS::eval):
17664        * kjs/interpreter.cpp: Instrument evaluating global scopes.
17665        (KJS::Interpreter::evaluate):
17666        * kjs/object.cpp: Instrument JS function calls.
17667        (KJS::JSObject::call):
17668        * profiler: Added.
17669        * profiler/FunctionCallProfile.cpp: Added.
17670        (KJS::FunctionCallProfile::FunctionCallProfile):
17671        (KJS::FunctionCallProfile::~FunctionCallProfile):
17672        (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer.
17673        (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer.
17674        (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile.
17675        (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one.
17676        (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
17677        * profiler/FunctionCallProfile.h: Added.
17678        (KJS::FunctionCallProfile::FunctionCallProfile):
17679        (KJS::FunctionCallProfile::~FunctionCallProfile):
17680        (KJS::FunctionCallProfile::functionName):
17681        (KJS::FunctionCallProfile::microSecs):
17682        * profiler/Profiler.cpp: Added.
17683        (KJS::Profiler::profiler):
17684        (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns)
17685        (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted.
17686        (KJS::Profiler::stopProfiling): Stop collecting profile information.
17687        (KJS::Profiler::willExecute): Same as above. 
17688        (KJS::Profiler::didExecute): Same as above.
17689        (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it.
17690        (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack.
17691        (KJS::Profiler::getFunctionName): Get the function name from the given parameter.
17692        (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
17693        (KJS::Profiler::debugLog):
17694        * profiler/Profiler.h: Added.
17695        (KJS::Profiler::Profiler):
17696
176972008-04-16  Sam Weinig  <sam@webkit.org>
17698
17699        Reviewed by Darin Adler.
17700
17701        - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it
17702          in the KJS namespace.
17703        - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C".
17704        - Remove mode switching from dtoa.  ~2% improvement on test 26. 
17705        - Removes all unnecessary #defines from dtoa code.
17706
17707        * JavaScriptCore.exp:
17708        * kjs/dtoa.cpp:
17709        (KJS::ulp):
17710        (KJS::b2d):
17711        (KJS::d2b):
17712        (KJS::ratio):
17713        (KJS::strtod):
17714        (KJS::freedtoa):
17715        (KJS::dtoa):
17716        * kjs/dtoa.h:
17717        * kjs/function.cpp:
17718        (KJS::parseInt):
17719        * kjs/lexer.cpp:
17720        (KJS::Lexer::lex):
17721        * kjs/number_object.cpp:
17722        (KJS::integer_part_noexp):
17723        (KJS::numberProtoFuncToExponential):
17724        * kjs/ustring.cpp:
17725        (KJS::UString::from):
17726        (KJS::UString::toDouble):
17727
177282008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17729
17730        Reviewed by Darin.
17731
17732        Get rid of static execForCompareByStringForQSort in array_instance.cpp.
17733
17734        No change on SunSpider, CelticKane or iBench JavaScript.
17735
17736        * kjs/array_instance.cpp:
17737        (KJS::ArraySortComparator::ArraySortComparator):
17738        (KJS::ArraySortComparator::operator()):
17739        (KJS::ArrayInstance::sort):
17740        Switch slow case to std::sort, so that ExecState can be passed in a comparator.
17741
177422008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17743
17744        Reviewed by Adam Roben.
17745
17746        MSVC build fix.
17747
17748        * kjs/CommonIdentifiers.cpp:
17749        * kjs/CommonIdentifiers.h:
17750        * kjs/Parser.cpp:
17751        * kjs/Parser.h:
17752        * kjs/identifier.cpp:
17753        * kjs/lexer.h:
17754        * wtf/ThreadSpecific.h:
17755
177562008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17757
17758        Build fix.
17759
17760        * kjs/date_object.cpp:
17761        * kjs/date_object.h:
17762        Don't include DateMath.h from date_object.h, as the latter is used from WebCore, while
17763        where the former is not available.
17764
177652008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
17766
17767        Unreviewed build fix for MSVC. It does not want to have
17768        WTF in the KJS namespace.
17769
17770        * kjs/CommonIdentifiers.h:
17771
177722008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
17773
17774        Unreviewed build fix for gcc.
17775
17776        ::msToGregorianDateTime  is not known to it.
17777
17778        * kjs/date_object.cpp:
17779        (KJS::DateInstance::msToGregorianDateTime):
17780
177812008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17782
17783        Reviewed by Oliver Hunt.
17784
17785        Initialize threadMapMutex safely (as already done in ThreadingWin).
17786
17787        * wtf/ThreadingGtk.cpp:
17788        (WTF::threadMapMutex):
17789        (WTF::initializeThreading):
17790        * wtf/ThreadingPthreads.cpp:
17791        (WTF::threadMapMutex):
17792        (WTF::initializeThreading):
17793
177942008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17795
17796        Reviewed by Adam Roben.
17797
17798        Cache Gregorian date/time structure on DateInstance objects for 1.027x SunSpider speedup
17799        (1.65x on date-format-xparb, 1.13x on date-format-tofte).
17800
17801        * kjs/DateMath.h:
17802        (KJS::GregorianDateTime::copyFrom): Added. It presumably makes sense to keep GregorianDateTime
17803        Noncopyable, so it's not just operator=.
17804
17805        * kjs/date_object.h: Added a per-object cache.
17806
17807        * kjs/date_object.cpp:
17808        (KJS::DateInstance::DateInstance):
17809        (KJS::DateInstance::msToGregorianDateTime):
17810        (KJS::dateProtoFuncToString):
17811        (KJS::dateProtoFuncToUTCString):
17812        (KJS::dateProtoFuncToDateString):
17813        (KJS::dateProtoFuncToTimeString):
17814        (KJS::dateProtoFuncToLocaleString):
17815        (KJS::dateProtoFuncToLocaleDateString):
17816        (KJS::dateProtoFuncToLocaleTimeString):
17817        (KJS::dateProtoFuncGetFullYear):
17818        (KJS::dateProtoFuncGetUTCFullYear):
17819        (KJS::dateProtoFuncToGMTString):
17820        (KJS::dateProtoFuncGetMonth):
17821        (KJS::dateProtoFuncGetUTCMonth):
17822        (KJS::dateProtoFuncGetDate):
17823        (KJS::dateProtoFuncGetUTCDate):
17824        (KJS::dateProtoFuncGetDay):
17825        (KJS::dateProtoFuncGetUTCDay):
17826        (KJS::dateProtoFuncGetHours):
17827        (KJS::dateProtoFuncGetUTCHours):
17828        (KJS::dateProtoFuncGetMinutes):
17829        (KJS::dateProtoFuncGetUTCMinutes):
17830        (KJS::dateProtoFuncGetSeconds):
17831        (KJS::dateProtoFuncGetUTCSeconds):
17832        (KJS::dateProtoFuncGetTimezoneOffset):
17833        (KJS::setNewValueFromTimeArgs):
17834        (KJS::setNewValueFromDateArgs):
17835        (KJS::dateProtoFuncSetYear):
17836        (KJS::dateProtoFuncGetYear):
17837        Use the cache when converting.
17838
178392008-04-16  Alexey Proskuryakov  <ap@webkit.org>
17840
17841        Reviewed by Darin.
17842
17843        Implement an abstraction for thread-specific storage, use it to get rid of some static objects.
17844
17845        SunSpider results were not conclusive, possibly up to 0.2% slowdown.
17846
17847        * JavaScriptCore.xcodeproj/project.pbxproj:
17848        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
17849        Added ThreadSpecific.h
17850
17851        * wtf/ThreadSpecific.h: Added.
17852        (WTF::::ThreadSpecific):
17853        (WTF::::~ThreadSpecific):
17854        (WTF::::get):
17855        (WTF::::set):
17856        (WTF::::destroy):
17857        (WTF::T):
17858        (WTF::::operator):
17859        Only implemented for platforms that use pthreads.
17860
17861        * kjs/CommonIdentifiers.cpp:
17862        (KJS::CommonIdentifiers::shared):
17863        * kjs/CommonIdentifiers.h:
17864        * kjs/InitializeThreading.cpp:
17865        (KJS::initializeThreading):
17866        * kjs/Parser.cpp:
17867        (KJS::parser):
17868        * kjs/Parser.h:
17869        * kjs/identifier.cpp:
17870        (KJS::identifierTable):
17871        (KJS::literalIdentifierTable):
17872        (KJS::Identifier::initializeIdentifierThreading):
17873        * kjs/identifier.h:
17874        * kjs/lexer.cpp:
17875        (KJS::lexer):
17876        * kjs/lexer.h:
17877        Make static instances per-thread.
17878
178792008-04-15  Anders Carlsson  <andersca@apple.com>
17880
17881        Reviewed by Adam.
17882
17883        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.
17884        
17885        * Configurations/JavaScriptCore.xcconfig:
17886
178872008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>
17888
17889        Reviewed by Simon.
17890
17891        Fix compilation with Qt namespaces
17892
17893        Qt can be configured to have all of its classes inside a specified namespaces.
17894        This is for example used in plugin/component environments like Eclipse.
17895
17896        This change makes it possible to let the Qt port compile against a namespaced
17897        Qt by the use of macros Qt provides to properly forward declare Qt classes in
17898        the namespace.
17899
17900        * wtf/unicode/qt4/UnicodeQt4.h:
17901
179022008-04-14  Anders Carlsson  <andersca@apple.com>
17903
17904        Reviewed by Adam.
17905
17906        Don't leak the prototype class.
17907        
17908        * API/JSClassRef.cpp:
17909        (OpaqueJSClass::create):
17910
179112008-04-14  Steve Falkenburg  <sfalken@apple.com>
17912
17913        Fix build.
17914
17915        * wtf/ThreadingWin.cpp:
17916
179172008-04-14  Alexey Proskuryakov  <ap@webkit.org>
17918
17919        Reviewed by Adam Roben.
17920
17921        https://bugs.webkit.org/show_bug.cgi?id=18488
17922        FastMalloc doesn't release thread-specific data on Windows
17923
17924        * wtf/ThreadingWin.cpp:
17925        (WTF::threadMapMutex): (WTF::initializeThreading): Call threadMapMutex once to initialize the static safely.
17926        (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation): Added a structure to wrap thread entry point and arguments.
17927        (WTF::wtfThreadEntryPoint): Make sure to end all WTF threads with pthread_exit(), to give pthreads-win32 a chance to call
17928        destructors of thread-specific data.
17929        (WTF::createThread): Use _beginthreadex instead of CreateThread, because MSDN says so. Also removed a call to CreateEvent,
17930        for which I could see no reason at all.
17931
179322008-04-14  Alexey Proskuryakov  <ap@webkit.org>
17933
17934        Touched a file to make JavaScriptCore.vcproj rebuild.
17935
17936        * wtf/MathExtras.h:
17937
179382008-04-14  Adam Roben  <aroben@apple.com>
17939
17940        Windows build fix
17941
17942        Rubberstamped by Alexey Proskuryakov.
17943
17944        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
17945        the "potentially uninitialized variable" warning for grammar.cpp, as
17946        it seems to be incorrect. yylval gets initialized by the lexer, but
17947        MSVC doesn't seem to understand this.
17948
179492008-04-11  Antti Koivisto  <antti@apple.com>
17950
17951        Reviewed by Maciej.
17952        
17953        Add default hash for pairs of hashable types.
17954
17955        * wtf/HashFunctions.h:
17956        (WTF::PairHash::hash):
17957        (WTF::PairHash::equal):
17958        (WTF::):
17959
179602008-04-11  Alexey Proskuryakov  <ap@webkit.org>
17961
17962        Reviewed by Geoff.
17963
17964        Make DateMath.cpp thread safe.
17965
17966        No measurable change on SunSpider (should be a very small speedup).
17967
17968        * kjs/DateMath.cpp:
17969        (KJS::mimimumYearForDST): (KJS::equivalentYearForDST): Got rid of double caching of the
17970        same precomputed value.
17971        (KJS::calculateUTCOffset): (KJS::getUTCOffset): Factored actual UTC offset calculation code
17972        out of getUTCOffset(), and notification setup into initDateMath().
17973
17974        (KJS::initDateMath): Added.
17975
17976        * kjs/DateMath.h:
17977        * kjs/InitializeThreading.cpp:
17978        (KJS::initializeThreading):
17979        Added initDateMath().
17980
179812008-04-11  Alexey Proskuryakov  <ap@webkit.org>
17982
17983        Windows build fix.
17984
17985        * kjs/grammar.y:
17986
179872008-04-11  Alexey Proskuryakov  <ap@webkit.org>
17988
17989        Tiger build fix. Forward declaring a union didn't work for whatever reason, make the
17990        parameters void*.
17991
17992        * kjs/grammar.y:
17993        * kjs/lexer.cpp:
17994        (kjsyylex):
17995        (KJS::Lexer::lex):
17996        * kjs/lexer.h:
17997
179982008-04-11  Alexey Proskuryakov  <ap@webkit.org>
17999
18000        Reviewed by Geoff.
18001
18002        Generate a pure (re-entrant) parser with Bison.
18003
18004        No change on SunSpider.
18005
18006        * kjs/Parser.cpp:
18007        (KJS::Parser::parse):
18008        * kjs/grammar.y:
18009        * kjs/lexer.cpp:
18010        (kjsyylex):
18011        (KJS::Lexer::lex):
18012        * kjs/lexer.h:
18013        Pass state as function arguments, instead of global data. Don't call lexer() as often as
18014        before, as this function is about to become slower due to thread-specific storage.
18015
18016        * kjs/function.cpp:
18017        (KJS::isStrWhiteSpace): Don't call isSeparatorSpace() for 8-bit characters, as these are
18018        already taken care of. This is a small speedup, compensating for a small slowdown caused
18019        by switching Bison mode.
18020
180212008-04-10  Alexey Proskuryakov  <ap@webkit.org>
18022
18023        Reviewed by Geoff.
18024
18025        https://bugs.webkit.org/show_bug.cgi?id=18402
18026        REGRESSION: visited element handling is incorrect in nested join/toString calls
18027
18028        No change on SunSpider total, possibly a tiny improvement (about 0.1%).
18029
18030        Test: fast/js/array-tostring-and-join.html
18031
18032        * kjs/JSGlobalObject.h:
18033        (KJS::JSGlobalObject::visitedElements): Store visited elements HashSet here, making it
18034        common to toString/toLocalizedString/join again.
18035
18036        * kjs/array_object.cpp:
18037        (KJS::arrayProtoFuncToString):
18038        (KJS::arrayProtoFuncToLocaleString):
18039        (KJS::arrayProtoFuncJoin):
18040        Got rid of static variables. Replaced UString with Vector to avoid O(n^2) behavior and
18041        regain performance.
18042
18043        * wtf/Vector.h:
18044        (WTF::::resize):
18045        (WTF::::grow):
18046        (WTF::::reserveCapacity):
18047        (WTF::::append):
18048        (WTF::::insert):
18049        Added null checks, so that Vector methods don't crash when out of memory. The caller should
18050        check that data pointer is not null before proceeding.
18051
180522008-04-10  Mark Rowe  <mrowe@apple.com>
18053
18054        Reviewed by Maciej Stachowiak.
18055
18056        Fix https://bugs.webkit.org/show_bug.cgi?id=18367 and the many dupes.
18057        Bug 18367: Crash during celtic kane js speed 2007 test
18058
18059        GCC 4.2 on x86_64 Linux decided to reorder the local variables in markCurrentThreadConservatively's
18060        stack frame.  This lead to the range of addresses the collector treated as stack to exclude the
18061        contents of volatile registers that markCurrentThreadConservatively forces onto the stack.  This was
18062        leading to objects being prematurely collected if the only reference to them was via a register at
18063        the time a collection occurred.
18064
18065        The fix for this is to move the calculation of the top of the stack into a NEVER_INLINE function
18066        that is called from markCurrentThreadConservatively.  This forces the dummy variable we use for
18067        determining the top of stack to be in a different stack frame which prevents the compiler from
18068        reordering it relative to the registers that markCurrentThreadConservatively forces onto the stack.
18069
18070        * kjs/collector.cpp:
18071        (KJS::Collector::markCurrentThreadConservativelyInternal):
18072        (KJS::Collector::markCurrentThreadConservatively):
18073        * kjs/collector.h:
18074
180752008-04-10  Adam Roben  <aroben@apple.com>
18076
18077        VC++ Express build fix
18078
18079        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Link against user32.lib so
18080        that anyone who links against WTF.lib will get user32.lib
18081        automatically.
18082
180832008-04-09  Adam Roben  <aroben@apple.com>
18084
18085        VC++ Express build fix
18086
18087        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
18088        user32.lib.
18089
180902008-04-09  Adam Roben  <aroben@apple.com>
18091
18092        Build fix
18093
18094        * JavaScriptCore.exp: Export isMainThread.
18095
180962008-04-09  Adam Roben  <aroben@apple.com>
18097
18098        Build fix
18099
18100        * wtf/AlwaysInline.h: Make sure to #include Platform.h before using
18101        the macros it defines.
18102
181032008-04-08  Mark Rowe  <mrowe@apple.com>
18104
18105        Export WTF::initializeThreading() from JavaScriptCore.
18106
18107        * JavaScriptCore.exp:
18108
181092008-04-04  Sam Weinig  <sam@webkit.org>
18110
18111        Reviewed by Geoffrey Garen.
18112
18113        First step in implementing the "split window"
18114
18115        - Add a GlobalThisValue to ExecState which should be used 
18116          in places that used to implement the "use the global object
18117          as this if null" rule.
18118        - Factor out lookupGetter/lookupSetter into virtual methods 
18119          on JSObject so that they can be forwarded.
18120        - Make defineGetter/defineSetter virtual methods for the same
18121          reason.
18122        - Have PrototypeReflexiveFunction store the globalObject used
18123          to create it so that it can be used to get the correct thisObject
18124          for eval.
18125
18126        * API/JSObjectRef.cpp:
18127        (JSObjectCallAsFunction):
18128        * JavaScriptCore.exp:
18129        * kjs/Activation.h:
18130        * kjs/ExecState.cpp:
18131        (KJS::ExecState::ExecState):
18132        (KJS::GlobalExecState::GlobalExecState):
18133        * kjs/ExecState.h:
18134        (KJS::ExecState::globalThisValue):
18135        * kjs/ExecStateInlines.h:
18136        (KJS::ExecState::ExecState):
18137        (KJS::FunctionExecState::FunctionExecState):
18138        * kjs/JSGlobalObject.cpp:
18139        (KJS::JSGlobalObject::reset):
18140        (KJS::JSGlobalObject::toGlobalObject):
18141        * kjs/JSGlobalObject.h:
18142        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
18143        (KJS::JSGlobalObject::JSGlobalObject):
18144        * kjs/array_instance.cpp:
18145        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
18146        (KJS::compareWithCompareFunctionForQSort):
18147        * kjs/array_object.cpp:
18148        (KJS::arrayProtoFuncSort):
18149        (KJS::arrayProtoFuncFilter):
18150        (KJS::arrayProtoFuncMap):
18151        (KJS::arrayProtoFuncEvery):
18152        (KJS::arrayProtoFuncForEach):
18153        (KJS::arrayProtoFuncSome):
18154        * kjs/function.cpp:
18155        (KJS::FunctionImp::callAsFunction):
18156        (KJS::ActivationImp::toThisObject):
18157        (KJS::globalFuncEval):
18158        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
18159        (KJS::PrototypeReflexiveFunction::mark):
18160        * kjs/function.h:
18161        (KJS::PrototypeReflexiveFunction::cachedGlobalObject):
18162        * kjs/function_object.cpp:
18163        (KJS::functionProtoFuncApply):
18164        (KJS::functionProtoFuncCall):
18165        * kjs/nodes.cpp:
18166        (KJS::ExpressionNode::resolveAndCall):
18167        (KJS::FunctionCallValueNode::evaluate):
18168        (KJS::LocalVarFunctionCallNode::inlineEvaluate):
18169        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
18170        (KJS::FunctionCallBracketNode::evaluate):
18171        (KJS::FunctionCallDotNode::inlineEvaluate):
18172        * kjs/object.cpp:
18173        (KJS::JSObject::call):
18174        (KJS::JSObject::put):
18175        (KJS::tryGetAndCallProperty):
18176        (KJS::JSObject::lookupGetter):
18177        (KJS::JSObject::lookupSetter):
18178        (KJS::JSObject::toThisObject):
18179        (KJS::JSObject::toGlobalObject):
18180        (KJS::JSObject::fillGetterPropertySlot):
18181        * kjs/object.h:
18182        * kjs/object_object.cpp:
18183        (KJS::objectProtoFuncLookupGetter):
18184        (KJS::objectProtoFuncLookupSetter):
18185        * kjs/string_object.cpp:
18186        (KJS::replace):
18187
181882008-04-08  Brady Eidson  <beidson@apple.com>
18189
18190        Encourage Windows to rebuild - AGAIN...
18191
18192        * kjs/DateMath.cpp:
18193
181942008-04-08  Adam Roben  <aroben@apple.com>
18195
18196        Mac build fix
18197
18198        * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
18199
182002008-04-08  Brady Eidson  <beidson@apple.com>
18201
18202        Rubberstamped by Adam Roben
18203        
18204        Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled
18205
18206        * kjs/DateMath.cpp:
18207
182082008-04-08  Adam Roben  <aroben@apple.com>
18209
18210        Move callOnMainThread to WTF
18211
18212        Reviewed by Alexey Proskuryakov.
18213
18214        * GNUmakefile.am:
18215        * JavaScriptCore.pri:
18216        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
18217        * JavaScriptCore.xcodeproj/project.pbxproj:
18218        * JavaScriptCoreSources.bkl:
18219        Added new files.
18220
18221        * wtf/MainThread.cpp:
18222        * wtf/MainThread.h:
18223        * wtf/gtk/MainThreadGtk.cpp:
18224        * wtf/mac/MainThreadMac.mm:
18225        * wtf/qt/MainThreadQt.cpp:
18226        * wtf/win/MainThreadWin.cpp:
18227        * wtf/wx/MainThreadWx.cpp:
18228        Moved here from WebCore/platform. Replaced all instances of "WebCore"
18229        with "WTF".
18230
18231        * kjs/bool_object.cpp: Touched to force JavaScriptCore.vcproj to
18232        build.
18233        to the WTF namespace.
18234        * wtf/ThreadingWin.cpp:
18235        (WTF::initializeThreading): Call initializeMainThread.
18236
182372008-04-07  Brady Eidson  <beidson@apple.com>
18238
18239        Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project
18240
18241        * Configurations/JavaScriptCore.xcconfig:
18242
182432008-04-07  Adam Roben  <aroben@apple.com>
18244
18245        Windows build fix
18246
18247        * wtf/ThreadingWin.cpp: Back out some changes I didn't mean to land.
18248
182492008-04-07  Adam Roben  <aroben@apple.com>
18250
18251        Add WTF::isMainThread
18252
18253        Reviewed by Alexey Proskuryakov.
18254
18255        * wtf/Threading.h: Declare the new function.
18256        * wtf/ThreadingGtk.cpp:
18257        (WTF::initializeThreading): Initialize the main thread identifier.
18258        (WTF::isMainThread): Added.
18259        * wtf/ThreadingNone.cpp: Ditto ThreadingGtk.cpp.
18260        (WTF::initializeThreading):
18261        (WTF::isMainThread):
18262        * wtf/ThreadingPthreads.cpp: Ditto.
18263        (WTF::initializeThreading):
18264        (WTF::isMainThread):
18265        * wtf/ThreadingWin.cpp: Ditto.
18266        (WTF::initializeThreading):
18267        (WTF::isMainThread):
18268
182692008-04-06  Alexey Proskuryakov  <ap@webkit.org>
18270
18271        Reviewed by Darin.
18272
18273        Make UString thread-safe.
18274
18275        No change on SunSpider total, although individual tests have changed a lot, up to 3%.
18276
18277        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Call UString::null() to initialize
18278        a static.
18279        
18280        * kjs/identifier.cpp:
18281        (KJS::CStringTranslator::translate):
18282        (KJS::UCharBufferTranslator::translate):
18283        Use "true" for a boolean value instead of 1, because it's C++.
18284
18285        * kjs/ustring.h:
18286        (KJS::CString::adopt): Added a method to create from a char* buffer without copying.
18287        (KJS::UString::Rep::ref): Removed an assertion for JSLock::lockCount, as it's no longer
18288        necessary to hold JSLock when working with strings.
18289        (KJS::UString::Rep::deref): Ditto.
18290        (KJS::UString::Rep::isStatic): Added a field to quickly determine that this is an empty
18291        or null static string.
18292
18293        * kjs/ustring.cpp:
18294        (KJS::): Removed normalStatBufferSize and statBufferSize, as there is no reason to have such
18295        an advanced implementation of a debug-only ascii() method. Removed a long-obsolete comment
18296        about UChar.
18297        (KJS::UString::Rep::createCopying): Removed an assertion for JSLock::lockCount.
18298        (KJS::UString::Rep::create): Ditto.
18299        (KJS::UString::Rep::destroy): Ditto. Do not do anything for static null and empty strings,
18300        as refcounting is not reliable for those. Reordered branches for a noticeable speed gain -
18301        apparently this functiton is hot enough for SunSpider to see an effect from this!
18302        (KJS::UString::null): Moved a star, added a comment.
18303        (KJS::UString::cstring): Reimplemented to not call ascii(), which is not thread-safe.
18304        (KJS::UString::ascii): Simplified statBuffer handling logic.
18305        (KJS::UString::toDouble): Use cstring() instead of ascii().
18306
183072008-04-02  Mark Rowe  <mrowe@apple.com>
18308
18309        Reviewed by Oliver Hunt.
18310
18311        Ensure that debug symbols are generated for x86_64 and ppc64 builds.
18312
18313        * Configurations/Base.xcconfig:
18314
183152008-04-01  Christian Dywan  <christian@imendio.com>
18316
18317        Build fix for GCC 4.3.
18318
18319        * wtf/unicode/icu/CollatorICU.cpp: include string.h
18320
183212008-04-01  Alexey Proskuryakov  <ap@webkit.org>
18322
18323        Rubber-stamped by Darin.
18324
18325        Turn off using 64-bit arithmetic on 32-bit hardware, as dtoa own code is faster than
18326        compiler-provided emulation.
18327
18328        1% speedup on Acid3 test 26.
18329
18330        * kjs/dtoa.cpp:
18331
183322008-04-01  Alexey Proskuryakov  <ap@webkit.org>
18333
18334        Reviewed by Darin.
18335
18336        Make MathExtras.h thread safe.
18337
18338        * kjs/math_object.cpp:
18339        (KJS::mathProtoFuncRandom): If threading is enabled, rely on initializeThreading to call
18340        wtf_random_init().
18341
18342        * wtf/Threading.h:
18343        * wtf/ThreadingGtk.cpp:
18344        (WTF::initializeThreading):
18345        * wtf/ThreadingNone.cpp:
18346        (WTF::initializeThreading):
18347        * wtf/ThreadingPthreads.cpp:
18348        (WTF::initializeThreading):
18349        * wtf/ThreadingWin.cpp:
18350        (WTF::initializeThreading):
18351        Call wtf_random_init(); made the function non-inline to avoid having to include too many
18352        headers in Threading.h.
18353
183542008-03-31  Eric Seidel  <eric@webkit.org>
18355
18356        Reviewed by darin.
18357
18358        Make matching of regexps using ^ much faster
18359        http://bugs.webkit.org/show_bug.cgi?id=18086
18360
18361        * pcre/pcre_compile.cpp:
18362        (compileBranch):
18363        (branchNeedsLineStart):
18364        * pcre/pcre_exec.cpp:
18365        (match):
18366        (jsRegExpExecute):
18367        * pcre/pcre_internal.h:
18368
183692008-03-29  Alexey Proskuryakov  <ap@webkit.org>
18370
18371        Reviewed by Oliver Hunt.
18372
18373        <rdar://problem/5829556> REGRESSION: Leak in KJS::initializeThreading()
18374
18375        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): There is no guarantee that
18376        initializeThreading() is called only once; check that the mutex hasn't been already allocated.
18377
183782008-03-29  Oliver Hunt  <oliver@apple.com>
18379
18380        Reviewed by Geoff.
18381
18382        Bug 17924: Crash in KJS::ConstDeclNode::evaluate with |with| and |const|
18383        <http://bugs.webkit.org/show_bug.cgi?id=17924>
18384        <rdar://problem/5806933>
18385
18386        It turns out this is trivially avoidable if we just match firefox's
18387        semantics and ensure that an assignment in a const declaration always
18388        writes to the variable object.
18389
18390        * kjs/nodes.cpp:
18391        (KJS::ConstDeclNode::handleSlowCase):
18392
183932008-03-28  Alexey Proskuryakov  <ap@webkit.org>
18394
18395        Reviewed by Sam Weinig.
18396
18397        Fix a dtoa thread safety issue.
18398
18399        WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety
18400        compiled in for dtoa.
18401
18402        This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with
18403        his recent improvement.
18404
18405        * kjs/dtoa.cpp:
18406        (Bigint::Balloc):
18407        (Bigint::Bfree):
18408        Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was
18409        in the presence of locking (but somewhat slower in single-threaded case).
18410        (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to
18411        restructure the code to avoid significant performance implications).
18412        (Bigint::lshift): Rewrote to avoid an allocation, if possible.
18413
18414        (Bigint::rv_alloc):
18415        (Bigint::kjs_freedtoa):
18416        (Bigint::kjs_dtoa):
18417        Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS.
18418
18419        * kjs/InitializeThreading.cpp: Added.
18420        (KJS::initializeThreading):
18421        * kjs/InitializeThreading.h: Added.
18422        Initialize threading at KJS level, if enabled.
18423
18424        * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading.
18425
18426        * kjs/testkjs.cpp: (kjsmain): Call initializeThreading.
18427
18428        * JavaScriptCore.exp: Export KJS::initializeThreading.
18429
18430        * GNUmakefile.am:
18431        * JavaScriptCore.exp:
18432        * JavaScriptCore.pri:
18433        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18434        * JavaScriptCoreSources.bkl:
18435        * JavaScriptCore.xcodeproj/project.pbxproj:
18436        Added InitializeThreading.{h,cpp}.
18437
18438        * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only
18439        to be called from KJS::initializeThreading, and having it in the global namespace is useless.
18440
184412008-03-28  Brady Eidson  <beidson@apple.com>
18442
18443        Reviewed by Darin
18444
18445        Export Unicode/UTF8.h and convertUTF16ToUTF8() for more flexible conversion in WebCore
18446
18447        * JavaScriptCore.exp:
18448        * JavaScriptCore.xcodeproj/project.pbxproj:
18449
184502008-03-27  Darin Adler  <darin@apple.com>
18451
18452        Reviewed by Mark Rowe.
18453
18454        <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their
18455        compiled length calculated incorrectly.
18456
18457        * pcre/pcre_compile.cpp:
18458        (multiplyWithOverflowCheck):
18459        (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts
18460        and bail with an error rather than returning incorrect results.
18461
184622008-03-26  Mark Rowe  <mrowe@apple.com>
18463
18464        Rubber-stamped by Brady Eidson.
18465
18466        Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.
18467
18468        * Configurations/JavaScriptCore.xcconfig:
18469
184702008-03-26  Adam Roben  <aroben@apple.com>
18471
18472        Fix Bug 18060: Assertion failure (JSLock not held) beneath
18473        JSCallbackObject<Base>::toString
18474
18475        <http://bugs.webkit.org/show_bug.cgi?id=18060>
18476
18477        Reviewed by Geoff Garen.
18478
18479        Bug fix:
18480
18481        * API/JSCallbackObjectFunctions.h:
18482        (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks
18483        instance only be in scope while calling convertToType.
18484
18485        Test:
18486
18487        * API/testapi.c:
18488        (MyObject_convertToType): Implement type conversion to string.
18489        * API/testapi.js: Add a test for type conversion to string.
18490
184912008-03-26  Adam Roben  <aroben@apple.com>
18492
18493        Windows build fix
18494
18495        * kjs/array_instance.cpp: Touched this.
18496        * wtf/HashFunctions.h:
18497        (WTF::intHash): Added 8- and 16-bit versions of intHash.
18498
184992008-03-26  Adam Roben  <aroben@apple.com>
18500
18501        Force JSC headers to be copied by touching a file
18502
18503        * kjs/array_instance.cpp:
18504        (KJS::ArrayInstance::getPropertyNames):
18505
185062008-03-26  Adam Roben  <aroben@apple.com>
18507
18508        Windows build fix after r31324
18509
18510        Written with Darin.
18511
18512        Added HashTable plumbing to support using wchar_t as a key type.
18513
18514        * wtf/HashFunctions.h:
18515        * wtf/HashTraits.h:
18516        (WTF::):
18517
185182008-03-26  Maciej Stachowiak  <mjs@apple.com>
18519
18520        Reviewed by Darin.
18521
18522        - JSC part of fix for "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)"
18523        http://bugs.webkit.org/show_bug.cgi?id=18118
18524
18525        * wtf/HashFunctions.h:
18526        (WTF::):
18527        * wtf/HashTraits.h:
18528        (WTF::):
18529
185302008-03-26  Alexey Proskuryakov  <ap@webkit.org>
18531
18532        Reviewed by Darin.
18533
18534        Cache C string identifiers by address, not value, assuming that C strings can only
18535        be literals.
18536
18537        1% speedup on Acid3 test 26.
18538
18539        * kjs/identifier.cpp:
18540        (KJS::literalIdentifierTable):
18541        (KJS::Identifier::add):
18542        Added a new table to cache UString::Reps created from C strings by address. Elements are
18543        never removed from this cache, as only predefined identifiers can get there.
18544
18545        * kjs/identifier.h:
18546        (KJS::Identifier::Identifier): Added a warning.
18547
185482008-03-26  Alexey Proskuryakov  <ap@webkit.org>
18549
18550        Rubber-stamped by Maciej.
18551
18552        An assertion was failing in function-toString-object-literals.html when parsing 1e-500.
18553        The condition existed before, and got uncovered by turning compiled-out dtoa checks into
18554        ASSERTs.
18555
18556        The assertion was verifying that the caller wasn't constructing a Bigint from 0.
18557        This might have had some reason behind it originally, but I couldn't find any,
18558        and this doesn't look like a reasonable requirement.
18559
18560        * kjs/dtoa.cpp: (d2b): Removed the assertion (two copies in different code paths).
18561
185622008-03-25  Adam Roben  <aroben@apple.com>
18563
18564        Fix Bug 18077: Integrate testapi.c into the Windows build
18565
18566        <http://bugs.webkit.org/show_bug.cgi?id=18077>
18567
18568        Reviewed by Steve Falkenburg.
18569
18570        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Added.
18571
185722008-03-25  Adam Roben  <aroben@apple.com>
18573
18574        Make testapi.c compile under MSVC
18575
18576        Currently you must compile testapi.c as C++ code since MSVC does not
18577        support many C features that GCC does.
18578
18579        Reviewed by Steve Falkenburg.
18580
18581        * API/testapi.c:
18582        (nan): Added an implementation of this for MSVC.
18583        (assertEqualsAsUTF8String): Use malloc instead of dynamically-sized
18584        stack arrays.
18585        (assertEqualsAsCharactersPtr): Ditto.
18586        (print_callAsFunction): Ditto.
18587        (main): Ditto, and explicitly cast from UniChar* to JSChar*.
18588
185892008-03-25  Adam Roben  <aroben@apple.com>
18590
18591        Stop using JavaScriptCore's custom stdbool.h and stdint.h on Windows
18592
18593        We can't remove the os-win32 directory yet because other ports (at
18594        least wx) are still relying on it.
18595
18596        Reviewed by Steve Falkenburg.
18597
18598        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18599          - Made all the include paths match the one for the Debug
18600            configuration (these got out of sync in r30797)
18601          - Removed os-win32 from the include path
18602          - Removed os-win32 from the directories we copy to $WebKitOutputDir.
18603          - Removed stdint.h from the project
18604        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
18605        Delete the files that we may have previously copied from the os-win32
18606        directory.
18607
186082008-03-25  Alexey Proskuryakov  <ap@webkit.org>
18609
18610        Windows build fix.
18611
18612        * kjs/dtoa.cpp: Include stdint.h.
18613
186142008-03-25  Alexey Proskuryakov  <ap@webkit.org>
18615
18616        Rubber-stamped by Darin.
18617
18618        Cleanup dtoa.cpp style.
18619
18620        * kjs/dtoa.cpp:
18621        (Bigint::Balloc):
18622        (Bigint::Bfree):
18623        (Bigint::multadd):
18624        (Bigint::s2b):
18625        (Bigint::hi0bits):
18626        (Bigint::lo0bits):
18627        (Bigint::i2b):
18628        (Bigint::mult):
18629        (Bigint::pow5mult):
18630        (Bigint::lshift):
18631        (Bigint::cmp):
18632        (Bigint::diff):
18633        (Bigint::ulp):
18634        (Bigint::b2d):
18635        (Bigint::d2b):
18636        (Bigint::ratio):
18637        (Bigint::):
18638        (Bigint::match):
18639        (Bigint::hexnan):
18640        (Bigint::kjs_strtod):
18641        (Bigint::quorem):
18642        (Bigint::rv_alloc):
18643        (Bigint::nrv_alloc):
18644        (Bigint::kjs_freedtoa):
18645        (Bigint::kjs_dtoa):
18646        * kjs/dtoa.h:
18647
186482008-03-24  Darin Adler  <darin@apple.com>
18649
18650        Reviewed by Sam.
18651
18652        - convert a JavaScript immediate number to a string more efficiently
18653
18654        2% speedup of Acid3 test 26
18655
18656        * kjs/JSImmediate.cpp:
18657        (KJS::JSImmediate::toString): Take advantage of the fact that all immediate
18658        numbers are integers, and use the faster UString function for formatting integers
18659        instead of the slower one that works for floating point. I think this is a leftover
18660        from when immediate numbers were floating point.
18661
186622008-03-23  Sam Weinig  <sam@webkit.org>
18663
18664        Reviewed by Darin Adler.
18665
18666        Fix http://bugs.webkit.org/show_bug.cgi?id=18048
18667        The "thisObject" parameter to JSEvaluateScript is not used properly
18668
18669        Making passing a thisObject to JSEvaluateScript actually set the thisObject of the created
18670        ExecState.
18671
18672        * API/testapi.c:
18673        (main): Add tests for setting the thisObject when calling JSEvaluateScript.
18674
18675        * kjs/ExecState.cpp:
18676        (KJS::ExecState::ExecState): Assign the thisObject to m_thisValue and remove the comment. 
18677
186782008-03-22  Jesse Ruderman  <jruderman@gmail.com>
18679
18680        Reviewed by Sam Weinig.  Landed by eseidel.
18681        
18682        Make testkjs flush stdout after printing.
18683
18684        * JavaScriptCore.xcodeproj/project.pbxproj:
18685        * kjs/testkjs.cpp:
18686        (functionPrint):
18687
186882008-03-21  Oliver Hunt  <oliver@apple.com>
18689
18690        Reviewed by Maciej.
18691
18692        Optimise lookup of Math, undefined, NaN and Infinity
18693
18694        Added a method to JSVariableObject to allow us to inject DontDelete properties
18695        into the symbol table and localStorage.  This results in a 0.4% progression in
18696        SunSpider, with a 8% gain in math-partial-sums.
18697
18698        * kjs/JSGlobalObject.cpp:
18699        (KJS::JSGlobalObject::reset):
18700        * kjs/JSVariableObject.h:
18701        (KJS::JSVariableObject::symbolTableInsert):
18702
187032008-03-21  Oliver Hunt  <oliver@apple.com>
18704
18705        Reviewed by Geoff Garen.
18706
18707        Global properties that use LocalStorage are not correctly listed as enumerable.
18708
18709        The problem was caused by JSObject::getPropertyAttributes not being aware
18710        of the JSVariableObject SymbolTable.  The fix is to make getPropertyAttributes
18711        virtual and override in JSVariableObject.  This does not produce any performance
18712        regression.
18713
18714        * JavaScriptCore.exp:
18715        * kjs/JSVariableObject.cpp:
18716        (KJS::JSVariableObject::getPropertyNames):
18717        (KJS::JSVariableObject::getPropertyAttributes):
18718        * kjs/JSVariableObject.h:
18719        * kjs/object.h:
18720
187212008-03-21  Arkadiusz Miskiewicz  <arekm@maven.pl>
18722
18723        Webkit does not build on linux powerpc
18724
18725        <http://bugs.webkit.org/show_bug.cgi?id=17019>
18726
18727        Reviewed by David Kilzer.
18728
18729        * wtf/TCSpinLock.h:
18730        (TCMalloc_SpinLock::Unlock):
18731
187322008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>
18733
18734        Reviewed by Holger.
18735
18736        http://bugs.webkit.org/show_bug.cgi?id=17981
18737
18738        Add javascriptcore_cppflags to Programs_minidom_CPPFLAGS.
18739
18740        * GNUmakefile.am:
18741
187422008-03-21  Alexey Proskuryakov  <ap@webkit.org>
18743
18744        Reviewed by Oliver Hunt.
18745
18746        Consolidate static identifier initializers within CommonIdentifiers.
18747
18748        No reliably measurable change on SunSpider; maybe a tiny improvement (within 0.2%).
18749
18750        * kjs/CommonIdentifiers.h: Added static identifiers that were lazily initialized
18751        throughout the code.
18752
18753        * kjs/date_object.cpp:
18754        (KJS::DateObjectImp::DateObjectImp):
18755        * kjs/function_object.cpp:
18756        (KJS::FunctionPrototype::FunctionPrototype):
18757        * kjs/object_object.cpp:
18758        (KJS::ObjectPrototype::ObjectPrototype):
18759        * kjs/regexp_object.cpp:
18760        (KJS::RegExpPrototype::RegExpPrototype):
18761        Use the values from CommonIdentifiers. 
18762
18763        * kjs/lookup.h: Caching the identifier in a static wasn't a win on SunSpider, removed it.
18764
18765        * kjs/value.h:
18766        (KJS::jsNaN): We already have a shared NaN value, no need for a duplicate here.
18767
18768        * wtf/MathExtras.h:
18769        (wtf_atan2): Having local variables for numeric_limits constants is good for readability,
18770        but there is no reason to keep them static.
18771
18772        * JavaScriptCore.exp: Don't needlessly export JSGlobalObject::s_head.
18773
187742008-03-20  Oliver Hunt  <oliver@apple.com>
18775
18776        Reviewed by Maciej.
18777
18778        Fix for leak introduced by inline ScopeChainNode use
18779
18780        To avoid any extra branches when managing an inline ScopeChainNode
18781        in the ScopeChain the inline node gets inserted with a refcount of
18782        2.  This meant than when the ScopeChain was destroyed the ScopeChainNodes
18783        above the inline node would be leaked.
18784
18785        We resolve this by manually popping the inline node in the
18786        FunctionExecState destructor.
18787
18788        * JavaScriptCore.xcodeproj/project.pbxproj:
18789        * kjs/ExecStateInlines.h:
18790        (KJS::FunctionExecState::~FunctionExecState):
18791        * kjs/scope_chain.h:
18792        (KJS::ScopeChain::popInlineScopeNode):
18793
187942008-03-20  Mark Rowe  <mrowe@apple.com>
18795
18796        Reviewed by Sam Weinig.
18797
18798        Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
18799        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
18800        command-line.
18801
18802        * Configurations/JavaScriptCore.xcconfig:
18803
188042008-03-20  David Krause  <david.krause@gmail.com>
18805
18806        Reviewed by David Kilzer.
18807
18808        Fix http://bugs.webkit.org/show_bug.cgi?id=17923
18809        Bug 17923: ARM platform endian defines inaccurate
18810
18811        * wtf/Platform.h: 
18812        Replaced !defined(__ARMEL__) check with !defined(__VFP_FP__)
18813        for PLATFORM(MIDDLE_ENDIAN)
18814
188152008-03-20  Maciej Stachowiak  <mjs@apple.com>
18816
18817        - fix build
18818
18819        * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
18820
188212008-03-20  Maciej Stachowiak  <mjs@apple.com>
18822
18823        Reviewed by Oliver.
18824        
18825        - reduce function call overhead for 1.014x speedup on SunSpider
18826
18827        I moved some functions from ExecState.cpp to ExecStateInline.h and
18828        from JSGlobalObject.cpp to JSGlobalObject.h, and declared them
18829        inline; machine function call overhead for these was hurting JS
18830        funcion call overhead.
18831        
18832        * kjs/ExecState.cpp:
18833        * kjs/ExecStateInlines.h: Added.
18834        (KJS::ExecState::ExecState):
18835        (KJS::ExecState::~ExecState):
18836        (KJS::FunctionExecState::FunctionExecState):
18837        (KJS::FunctionExecState::~FunctionExecState):
18838        * kjs/JSGlobalObject.cpp:
18839        * kjs/JSGlobalObject.h:
18840        (KJS::JSGlobalObject::pushActivation):
18841        (KJS::JSGlobalObject::checkActivationCount):
18842        (KJS::JSGlobalObject::popActivation):
18843        * kjs/function.cpp:
18844
188452008-03-19  Oliver Hunt  <oliver@apple.com>
18846
18847        Reviewed by Maciej.
18848
18849        Avoid heap allocating the root scope chain node for eval and closure free functions
18850
18851        Maciej suggested using an inline ScopeChainNode for functions that don't use eval
18852        or closures as they are unable to ever capture the scope chain.  This gives us a 2.4%
18853        win in sunspider, a 15% win in controlflow-recursive, and big (>5%) wins in a number 
18854        of other tests.
18855
18856        * kjs/ExecState.cpp:
18857        (KJS::ExecState::ExecState):
18858        * kjs/ExecState.h:
18859        * kjs/scope_chain.h:
18860        (KJS::ScopeChain::push):
18861
188622008-03-19  Mark Rowe  <mrowe@apple.com>
18863
18864        Reviewed by Sam Weinig.
18865
18866        Fix release build.
18867
18868        * kjs/JSGlobalObject.cpp:  Add missing #include.
18869
188702008-03-19  Sam Weinig  <sam@webkit.org>
18871
18872        Reviewed by Anders Carlsson.
18873
18874        Fix for <rdar://problem/5785694>
18875        Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file
18876
18877        Make the activeExecStates stack per JSGlobalObject instead of static to ensure
18878        thread safety.
18879
18880        * JavaScriptCore.exp:
18881        * kjs/ExecState.cpp:
18882        (KJS::InterpreterExecState::InterpreterExecState):
18883        (KJS::InterpreterExecState::~InterpreterExecState):
18884        (KJS::EvalExecState::EvalExecState):
18885        (KJS::EvalExecState::~EvalExecState):
18886        (KJS::FunctionExecState::FunctionExecState):
18887        (KJS::FunctionExecState::~FunctionExecState):
18888        * kjs/ExecState.h:
18889        * kjs/JSGlobalObject.cpp:
18890        (KJS::JSGlobalObject::mark):
18891        * kjs/JSGlobalObject.h:
18892        (KJS::JSGlobalObject::activeExecStates):
18893        * kjs/collector.cpp:
18894        (KJS::Collector::collect):
18895        (KJS::Collector::reportOutOfMemoryToAllExecStates): Iterate all JSGlobalObjects and report
18896        the OutOfMemory condition to all the ExecStates in each.
18897
188982008-03-19  Jasper Bryant-Greene  <jasper@unix.geek.nz>
18899
18900        Reviewed by Maciej Stachowiak.
18901
18902        Fix http://bugs.webkit.org/show_bug.cgi?id=17941
18903        Bug 17941: C++-style comments in JavaScriptCore API
18904
18905        * API/JSBase.h:
18906        Remove C++-style comments from public JavaScriptCore API, replacing
18907        with standard C90 block comments.
18908
189092008-03-19  Mark Rowe  <mrowe@apple.com>
18910
18911        Reviewed by Oliver Hunt.
18912
18913        Fix http://bugs.webkit.org/show_bug.cgi?id=17939
18914        Bug 17939: Crash decompiling "const a = 1, b;"
18915
18916        * kjs/nodes2string.cpp:
18917        (KJS::ConstDeclNode::streamTo): Null-check the correct variable.
18918
189192008-03-18  Oliver Hunt  <oliver@apple.com>
18920
18921        Reviewed by Mark Rowe.
18922
18923        Bug 17929: Incorrect decompilation with |const|, comma
18924        http://bugs.webkit.org/show_bug.cgi?id=17929
18925
18926        There were actually two bugs here. First we weren't correctly handling const
18927        nodes with multiple declarations. The second issue was caused by us not 
18928        giving the correct precedence to the initialisers.
18929
18930        * kjs/nodes2string.cpp:
18931        (KJS::ConstDeclNode::streamTo):
18932
189332008-03-18  Darin Adler  <darin@apple.com>
18934
18935        Reviewed by Maciej.
18936
18937        - Speed up JavaScript built-in properties by changing the
18938          hash table to take advantage of the identifier objects
18939
18940        5% speedup for Acid3 test 26
18941
18942        * JavaScriptCore.exp: Updated.
18943        * kjs/create_hash_table: Compute size of hash table large enough so that there
18944        are no collisions, but don't generate the hash table.
18945        * kjs/identifier.h: Made the add function that returns a PassRefPtr public.
18946        * kjs/lexer.cpp:
18947        (KJS::Lexer::lex): Updated for change to HashTable interface.
18948        * kjs/lookup.cpp:
18949        (KJS::HashTable::changeKeysToIdentifiers): Added. Finds the identifier for
18950        each property so the equality comparision can be done with pointer comparision.
18951        * kjs/lookup.h: Made the key be a union of char* with UString::Rep* so it can
18952        hold identifiers. Added a keysAreIdentifiers flag to the HashTable. Changed
18953        the Lookup functions to be member functions of HashTable instead.
18954        * kjs/object.cpp:
18955        (KJS::JSObject::deleteProperty): Update for change to HashTable.
18956        (KJS::JSObject::findPropertyHashEntry): Ditto.
18957        (KJS::JSObject::getPropertyAttributes): Ditto.
18958        (KJS::JSObject::getPropertyNames): Ditto.
18959
189602008-03-18  Mark Rowe  <mrowe@apple.com>
18961
18962        Reviewed by Oliver Hunt.
18963
18964        Fix http://bugs.webkit.org/show_bug.cgi?id=17925 and http://bugs.webkit.org/show_bug.cgi?id=17927.
18965        - Bug 17925: Crash in KJS::JSObject::put after setting this.__proto__
18966        - Bug 17927: Hang after attempting to create circular __proto__
18967
18968        * kjs/object.cpp:
18969        (KJS::JSObject::put): Silently ignore attempts to set __proto__ to a non-object, non-null value.
18970        Return after setting the exception when an attempt to set a cyclic __proto__ is detected so that
18971        the cyclic value is not set.
18972
189732008-03-18  Maciej Stachowiak  <mjs@apple.com>
18974
18975        Reviewed by Oliver.
18976        
18977        - inline ActivationImp::init for 0.8% SunSpider speedup
18978
18979        * kjs/Activation.h:
18980        (KJS::ActivationImp::init): Moved here from function.cpp
18981        * kjs/function.cpp:
18982
189832008-03-18  Simon Hausmann  <hausmann@webkit.org>
18984
18985        Fix the Qt build.
18986
18987        Including config.h like in the other .cpp files gets the #ifdeffery
18988        correct for rand_s.
18989
18990        * kjs/JSWrapperObject.cpp:
18991
189922008-03-17  Darin Adler  <darin@apple.com>
18993
18994        Reviewed by Maciej.
18995
18996        JavaScriptCore changes to support a WebCore speedup.
18997
18998        * JavaScriptCore.exp: Export the UString::Rep::computeHash function.
18999        * wtf/HashSet.h: Added a find and contains function that take a translator,
19000        like the add function.
19001
190022008-03-18  Maciej Stachowiak  <mjs@apple.com>
19003
19004        Reviewed by Oliver.
19005        
19006        - a few micro-optimizations for 1.2% SunSpider speedup
19007
19008        * kjs/function.cpp:
19009        (KJS::FunctionImp::callAsFunction): check for Return completion before Throw,
19010        it is more likely.
19011        * kjs/object.cpp:
19012        (KJS::JSObject::put): When walking prototype chain, instead of
19013        checking isObject (a virtual call), compare to jsNull (compare to
19014        a constant) since null is the only non-object that can be in a
19015        prototype chain.
19016
190172008-03-17  Oliver Hunt  <oliver@apple.com>
19018
19019        Reviewed by Geoff.
19020
19021        Optimise multi-scope function call resolution
19022
19023        Refactor multiscope variable resolution and use to add
19024        optimised FunctionCallResolveNode subclasses.  
19025
19026        2.6% gain in sunspider performance, *25%* gain in controlflow-recursive
19027
19028        * kjs/nodes.cpp:
19029        (KJS::getSymbolTableEntry):
19030        (KJS::ResolveNode::optimizeVariableAccess):
19031        (KJS::getNonLocalSymbol):
19032        (KJS::ExpressionNode::resolveAndCall):
19033        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
19034        (KJS::FunctionCallResolveNode::inlineEvaluate):
19035        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
19036        (KJS::ScopedVarFunctionCallNode::evaluate):
19037        (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
19038        (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
19039        (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
19040        (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
19041        (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
19042        (KJS::NonLocalVarFunctionCallNode::evaluate):
19043        (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
19044        (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
19045        (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
19046        (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
19047        * kjs/nodes.h:
19048        (KJS::ScopedVarFunctionCallNode::):
19049        (KJS::NonLocalVarFunctionCallNode::):
19050
190512008-03-17  David Kilzer  <ddkilzer@apple.com>
19052
19053        Don't define PLATFORM(MIDDLE_ENDIAN) on little endian ARM.
19054
19055        Reviewed by Darin.
19056
19057        See <http://bugs.webkit.org/show_bug.cgi?id=15416#c13>.
19058
19059        * wtf/Platform.h: Added check for !defined(__ARMEL__) when defining
19060        PLATFORM(MIDDLE_ENDIAN).
19061
190622008-03-17  Oliver Hunt  <oliver@apple.com>
19063
19064        Reviewed by Geoff, Darin and Weinig.
19065
19066        Add fast multi-level scope lookup
19067        
19068        Add logic and AST nodes to provide rapid variable resolution across
19069        static scope boundaries.  This also adds logic that allows us to skip
19070        any static scopes that do not contain the variable to be resolved.
19071        
19072        This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
19073        in some simple and ad hoc closure and global variable access tests.
19074
19075        * JavaScriptCore.exp:
19076        * kjs/Activation.h:
19077        * kjs/JSGlobalObject.cpp:
19078        * kjs/JSGlobalObject.h:
19079        * kjs/JSVariableObject.cpp:
19080        * kjs/JSVariableObject.h:
19081        * kjs/function.cpp:
19082        (KJS::ActivationImp::isDynamicScope):
19083        * kjs/nodes.cpp:
19084        (KJS::ResolveNode::optimizeVariableAccess):
19085        (KJS::ScopedVarAccessNode::inlineEvaluate):
19086        (KJS::ScopedVarAccessNode::evaluate):
19087        (KJS::ScopedVarAccessNode::evaluateToNumber):
19088        (KJS::ScopedVarAccessNode::evaluateToBoolean):
19089        (KJS::ScopedVarAccessNode::evaluateToInt32):
19090        (KJS::ScopedVarAccessNode::evaluateToUInt32):
19091        (KJS::NonLocalVarAccessNode::inlineEvaluate):
19092        (KJS::NonLocalVarAccessNode::evaluate):
19093        (KJS::NonLocalVarAccessNode::evaluateToNumber):
19094        (KJS::NonLocalVarAccessNode::evaluateToBoolean):
19095        (KJS::NonLocalVarAccessNode::evaluateToInt32):
19096        (KJS::NonLocalVarAccessNode::evaluateToUInt32):
19097        (KJS::IfElseNode::optimizeVariableAccess):
19098        (KJS::ScopeNode::optimizeVariableAccess):
19099        * kjs/nodes.h:
19100        (KJS::ScopedVarAccessNode::):
19101        (KJS::NonLocalVarAccessNode::):
19102        * kjs/object.h:
19103
19104 2008-03-16  weihongzeng  <weihong.zeng@hotmail.com>
19105 
19106         Reviewed by Darin Adler.
19107 
19108         http://bugs.webkit.org/show_bug.cgi?id=15416
19109         Add support for mixed-endian processors
19110 
19111         * kjs/dtoa.cpp: Add IEEE_ARM, triggered by PLATFORM(MIDDLE_ENDIAN).
19112 
191132008-03-16  Kevin Ollivier  <kevino@theolliviers.com>
19114
19115        Rubber stamped by Darin.
19116
19117        Add set-webkit-configuration support for wx port, and centralize
19118        build dir location setting.
19119
19120        http://bugs.webkit.org/show_bug.cgi?id=17790
19121
19122        * jscore.bkl:
19123
191242008-03-14  Steve Falkenburg  <sfalken@apple.com>
19125
19126        PGO build fixes.
19127
19128        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19129
191302008-03-14  Oliver Hunt  <oliver@apple.com>
19131
19132        Reviewed by Maciej.
19133
19134        Add logic to track whether a function uses a locally scoped eval or requires a closure
19135        
19136        Now that we limit eval we can track those uses of eval that operate
19137        in the local scope and functions that require a closure.  We track
19138        this information during initial parsing to avoid yet another tree
19139        walk.
19140
19141        * JavaScriptCore.exp:
19142        * kjs/NodeInfo.h:
19143        * kjs/Parser.cpp:
19144        (KJS::Parser::didFinishParsing):
19145        * kjs/Parser.h:
19146        (KJS::Parser::parse):
19147        * kjs/grammar.y:
19148        * kjs/nodes.cpp:
19149        (KJS::ScopeNode::ScopeNode):
19150        (KJS::ProgramNode::ProgramNode):
19151        (KJS::ProgramNode::create):
19152        (KJS::EvalNode::EvalNode):
19153        (KJS::EvalNode::create):
19154        (KJS::FunctionBodyNode::FunctionBodyNode):
19155        (KJS::FunctionBodyNode::create):
19156        * kjs/nodes.h:
19157        (KJS::ScopeNode::):
19158        (KJS::ScopeNode::usesEval):
19159        (KJS::ScopeNode::needsClosure):
19160
191612008-03-14  Geoffrey Garen  <ggaren@apple.com>
19162
19163        Reviewed by Beth Dakin.
19164
19165        Fixed another problem with Vector::shrinkCapacity.
19166        
19167        moveOverlapping isn't good enough for the case where the buffer hasn't
19168        changed, because it still destroys the contents of the buffer.
19169
19170        * wtf/Vector.h:
19171        (WTF::::shrinkCapacity): Changed to explicitly check whether the call
19172        to allocateBuffer produced a new buffer. If it didn't, there's no need
19173        to move.
19174
191752008-03-14  Geoffrey Garen  <ggaren@apple.com>
19176
19177        Reviewed by Beth Dakin.
19178        
19179        Fixed a few problems with Vector::shrinkCapacity that I noticed in testing.
19180
19181        * wtf/Vector.h:
19182        (WTF::VectorBufferBase::deallocateBuffer): Clear our m_buffer pointer
19183        when we deallocate m_buffer, in case we're not asked to reallocate a new
19184        buffer. (Otherwise, we would use a stale m_buffer if we were asked to
19185        perform any operations after shrinkCapacity was called.)
19186        
19187        (WTF::VectorBuffer::allocateBuffer): Made VectorBuffer with inline
19188        capacity aware that calls to allocateBuffer might be shrinks, rather
19189        than grows, so we shouldn't allocate a new buffer on the heap unless
19190        our inline buffer is too small.
19191        
19192        (WTF::::shrinkCapacity): Call resize() instead of just setting m_size,
19193        so destructors run. Call resize before reallocating the buffer to make
19194        sure that we still have access to the objects we need to destroy. Call
19195        moveOverlapping instead of move, since a call to allocateBuffer on an
19196        inline buffer may produce identical storage.
19197
191982008-03-14  Alexey Proskuryakov  <ap@webkit.org>
19199
19200        Reviewed by Darin.
19201
19202        Get rid of a localime() call on platforms that have better alternatives.
19203
19204        * kjs/DateMath.h: Added getLocalTime();
19205
19206        * kjs/DateMath.cpp:
19207        (KJS::getLocalTime):
19208        (KJS::getDSTOffsetSimple):
19209        Implementation moved from getDSTOffsetSimple().
19210
19211        * kjs/date_object.cpp:
19212        (KJS::DateObjectImp::callAsFunction): Switched to getLocalTime().
19213
192142008-03-14  David D. Kilzer  <ddkilzer@apple.com>
19215
19216        Unify concept of enabling the Mac Java bridge.
19217
19218        Reviewed by Darin and Anders.
19219
19220        * wtf/Platform.h: Define ENABLE_MAC_JAVA_BRIDGE here.
19221
192222008-03-13  Mark Mentovai  <mark@moxienet.com>
19223
19224        Reviewed by eseidel.  Landed by eseidel.
19225
19226        * wtf/FastMalloc.cpp: #include <wtf/HashSet.h> outside of any
19227        namespaces.
19228
192292008-03-13  Mark Mentovai  <mark@moxienet.com>
19230
19231        Reviewed by eseidel.  Landed by eseidel.
19232
19233        * pcre/pcre_exec.cpp: Fix misnamed variable, allowing -DDEBUG build
19234        to succeed.
19235        * wtf/ThreadingPthreads.cpp: #include <sys/time.h> for gettimeofday
19236        in non-pch build.
19237
192382008-03-13  Steve Falkenburg  <sfalken@apple.com>
19239
19240        PGO build fixes.
19241        
19242        Disable PGO for normal release builds.
19243        Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.
19244
19245        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19246
192472008-03-13  Beth Dakin  <bdakin@apple.com>
19248
19249        Reviewed by Geoff.
19250
19251        Adding new functionality to Vector. Currently all of the shrink and 
19252        resize functions on Vector only shrink the size of the Vector, not 
19253        the capacity. For the Vector to take up as little memory as 
19254        possible, though, it is necessary to be able to shrink the capacity 
19255        as well. So this patch adds that functionality. 
19256
19257        I need this for a speed up I am working on, and Geoff wants to use 
19258        it in a speed up he is working on also, so he asked me to commit it 
19259        now. 
19260
19261        * wtf/Vector.h:
19262        (WTF::VectorBufferBase::allocateBuffer):
19263        (WTF::::shrinkCapacity):
19264
192652008-03-13  Simon Hausmann  <hausmann@webkit.org>
19266
19267        Reviewed by Adam Roben.
19268
19269        Attempt at fixing the Qt/Windows build bot. Quote using double-quotes
19270        instead of single quotes.
19271
19272        * pcre/dftables:
19273
192742008-03-12  Steve Falkenburg  <sfalken@apple.com>
19275
19276        Build fix.
19277
19278        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19279
192802008-03-12  Alp Toker  <alp@atoker.com>
19281
19282        Another autotools testkjs build fix attempt.
19283
19284        * GNUmakefile.am:
19285
192862008-03-12  Alp Toker  <alp@atoker.com>
19287
19288        Attempt to fix the autotools testkjs build on systems with
19289        non-standard include paths.
19290
19291        * GNUmakefile.am:
19292
192932008-03-11  Alexey Proskuryakov  <ap@webkit.org>
19294
19295        Reviewed by Darin.
19296
19297        <rdar://problem/5787743> REGRESSION: Crash at WTF::Collator::CreateCollator() running fast/js/kde/StringObject.html on Windows
19298
19299        * wtf/unicode/icu/CollatorICU.cpp:
19300        (WTF::Collator::createCollator): Check for null (== user default) m_locale before calling strcmp.
19301
193022008-03-11  Steve Falkenburg  <sfalken@apple.com>
19303
19304        Disable LTCG/PGO for grammar.cpp and nodes.cpp.
19305        PGO on these files causes us to hang.
19306        
19307        Copy newer vsprops files from relative WebKitLibraries path to environment variable based path.
19308        
19309        Reviewed by Oliver.
19310
19311        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19312        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
19313
193142008-03-10  Darin Adler  <darin@apple.com>
19315
19316        - Windows build fix
19317
19318        * kjs/function.cpp: (KJS::decode): Initialize variable.
19319
193202008-03-10  Brent Fulgham  <bfulgham@gmail.com>
19321
19322        Windows build fix
19323
19324        Reviewed by Adam.
19325
19326        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
19327        Set the PATH to include Cygwin before running touch.
19328
193292008-03-10  Eric Seidel  <eric@webkit.org>
19330
19331        Build fix for JSC on windows.
19332
19333        * API/JSStringRefCF.cpp:
19334        (JSStringCreateWithCFString):
19335        * kjs/function.cpp:
19336        (KJS::decode):
19337        * kjs/nodes2string.cpp:
19338        (KJS::escapeStringForPrettyPrinting):
19339
193402008-03-10  Eric Seidel  <eric@webkit.org>
19341        
19342        No review, build fix only.
19343        
19344        Attempt to fix the windows build?
19345
19346        * kjs/ustring.h: change unsigned short to UChar
19347
193482008-03-10  Eric Seidel  <eric@webkit.org>
19349
19350        Reviewed by Darin.
19351
19352        Remove KJS::UChar, use ::UChar instead
19353        http://bugs.webkit.org/show_bug.cgi?id=17017
19354
19355        * API/JSStringRef.cpp:
19356        (JSStringCreateWithCharacters):
19357        (JSStringCreateWithUTF8CString):
19358        * API/JSStringRefCF.cpp:
19359        (JSStringCreateWithCFString):
19360        * JavaScriptCore.exp:
19361        * kjs/Parser.h:
19362        * kjs/function.cpp:
19363        (KJS::decode):
19364        (KJS::parseInt):
19365        (KJS::parseFloat):
19366        (KJS::globalFuncEscape):
19367        (KJS::globalFuncUnescape):
19368        * kjs/function_object.cpp:
19369        (KJS::FunctionObjectImp::construct):
19370        * kjs/identifier.cpp:
19371        (KJS::Identifier::equal):
19372        (KJS::CStringTranslator::translate):
19373        * kjs/interpreter.h:
19374        * kjs/lexer.cpp:
19375        (KJS::Lexer::setCode):
19376        (KJS::Lexer::shift):
19377        (KJS::Lexer::lex):
19378        (KJS::Lexer::convertUnicode):
19379        (KJS::Lexer::makeIdentifier):
19380        * kjs/lookup.cpp:
19381        (KJS::keysMatch):
19382        * kjs/nodes2string.cpp:
19383        (KJS::escapeStringForPrettyPrinting):
19384        (KJS::SourceStream::operator<<):
19385        * kjs/regexp.cpp:
19386        (KJS::RegExp::RegExp):
19387        (KJS::RegExp::match):
19388        * kjs/string_object.cpp:
19389        (KJS::substituteBackreferences):
19390        (KJS::stringProtoFuncCharCodeAt):
19391        (KJS::stringProtoFuncToLowerCase):
19392        (KJS::stringProtoFuncToUpperCase):
19393        (KJS::stringProtoFuncToLocaleLowerCase):
19394        (KJS::stringProtoFuncToLocaleUpperCase):
19395        * kjs/ustring.cpp:
19396        (KJS::UString::Rep::computeHash):
19397        (KJS::UString::UString):
19398        (KJS::UString::append):
19399        (KJS::UString::ascii):
19400        (KJS::UString::operator=):
19401        (KJS::UString::is8Bit):
19402        (KJS::UString::toStrictUInt32):
19403        (KJS::UString::find):
19404        (KJS::operator==):
19405        (KJS::operator<):
19406        (KJS::compare):
19407        (KJS::UString::UTF8String):
19408        * kjs/ustring.h:
19409        * pcre/pcre.h:
19410
194112008-03-09  Steve Falkenburg  <sfalken@apple.com>
19412
19413        Stop Windows build if an error occurs in a prior project.
19414
19415        Rubber stamped by Darin.
19416
19417        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19418        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
19419        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19420        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
19421
194222008-03-09  J¸rg Billeter  <j@bitron.ch>
19423
19424        Reviewed by Alp Toker.
19425
19426        Conditionalise ICU for Unicode in the GTK+ port.
19427
19428        * wtf/Platform.h:
19429
194302008-03-07  David D. Kilzer  <ddkilzer@apple.com>
19431
19432        Unify concept of enabling Netscape Plug-in API (NPAPI).
19433
19434        Reviewed by Darin.
19435
19436        * wtf/Platform.h: Define ENABLE_NETSCAPE_PLUGIN_API here.
19437
194382008-03-07  Geoffrey Garen  <ggaren@apple.com>
19439
19440        Reviewed by Darin Adler.
19441        
19442        Fixed <rdar://problem/5689093> Stricter (ES4) eval semantics
19443        
19444        The basic rule is:
19445        
19446        - "eval(s)" is treated as an operator that gives the ES3 eval behavior.
19447            ... but only if there is no overriding declaration of "eval" in scope.
19448        - All other invocations treat eval as a function that evaluates a
19449        script in the context of its "this" object.
19450            ... but if its "this" object is not the global object it was
19451            originally associated with, eval throws an exception.
19452        
19453        Because only expressions of the form "eval(s)" have access to local
19454        scope, the compiler can now statically determine whether a function
19455        needs local scope to be dynamic.
19456
19457        * kjs/nodes.h: Added FunctionCallEvalNode. It works just like
19458        FuncationCallResolveNode, except it statically indicates that the node
19459        may execute eval in the ES3 way.
19460        * kjs/nodes.cpp:
19461        * kjs/nodes2string.cpp:
19462
19463        * tests/mozilla/expected.html: This patch happens to fix a Mozilla JS
19464        test, but it's a bit of a pyrrhic victory. The test intends to test
19465        Mozilla's generic API for calling eval on any object, but, in reality,
19466        we only support calling eval on the global object.
19467
194682008-03-06  Steve Falkenburg  <sfalken@apple.com>
19469
19470        Build fix.
19471
19472        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
19473
194742008-03-06  Steve Falkenburg  <sfalken@apple.com>
19475
19476        Build fix.
19477
19478        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19479
194802008-03-06  Alp Toker  <alp@atoker.com>
19481
19482        Fix the build fix in r30845 to support out-of-tree builds.
19483
19484        * GNUmakefile.am:
19485
194862008-03-06  Steve Falkenburg  <sfalken@apple.com>
19487
19488        Build fix.
19489
19490        * wtf/ThreadingWin.cpp:
19491        (WTF::ThreadCondition::timedWait):
19492
194932008-03-06  Darin Adler  <darin@apple.com>
19494
19495        - another small step towards fixing the Qt build
19496
19497        * JavaScriptCore.pri: Remove more references to the now-obsolete bindings directory.
19498
194992008-03-06  Darin Adler  <darin@apple.com>
19500
19501        - a small step towards fixing the Qt build
19502
19503        * JavaScriptCore.pri: Remove references to files no longer present in JavaScriptCore/bindings.
19504
195052008-03-06  Brady Eidson  <beidson@apple.com>
19506
19507        Gtk Build fix
19508
19509        * wtf/ThreadingGtk.cpp:
19510        (WTF::ThreadCondition::timedWait):
19511
195122008-03-06  Alexey Proskuryakov  <ap@webkit.org>
19513
19514        Wx build fix.
19515
19516        * wtf/unicode/icu/CollatorICU.cpp:
19517        (WTF::Collator::userDefault): Put ICU workaround under both PLATFORM(DARWIN) and
19518        PLATFORM(CF) checks, so that each port can decide if it wants to use CF on Mac for it.
19519
195202008-03-06  Brady Eidson <beidson@apple.com>
19521
19522        Reviewed by Darin
19523
19524        Add a timedWait() method to ThreadCondition
19525
19526        * JavaScriptCore.exp:
19527
19528        * wtf/Threading.h:
19529
19530        * wtf/ThreadingGtk.cpp:
19531        (WTF::ThreadCondition::timedWait):
19532
19533        * wtf/ThreadingNone.cpp:
19534        (WTF::ThreadCondition::timedWait):
19535
19536        * wtf/ThreadingPthreads.cpp:
19537        (WTF::ThreadCondition::timedWait):
19538
19539        * wtf/ThreadingWin.cpp:
19540        (WTF::ThreadCondition::timedWait): Needs implementation
19541
195422008-03-06  Alexey Proskuryakov  <ap@webkit.org>
19543
19544        More build fixes.
19545
19546        * jscore.bkl: Add the wtf/unicode directory.
19547        * wtf/unicode/CollatorDefault.cpp:
19548        (WTF::Collator::userDefault): Use a constructor that does exist.
19549        * wtf/unicode/icu/CollatorICU.cpp: Mac build fix for case-sensitive file systems.
19550
195512008-03-06  Darin Adler  <darin@apple.com>
19552
19553        - try to fix the Qt build
19554
19555        * JavaScriptCore.pri: Add the wtf/unicode directory.
19556
195572008-03-06  Darin Adler  <darin@apple.com>
19558
19559        - try to fix the GTK build
19560
19561        * GNUmakefile.am: Add a -I for the wtf/unicode directory.
19562
195632008-03-06  Darin Adler  <darin@apple.com>
19564
19565        - try to fix the Mac build
19566
19567        * icu/unicode/parseerr.h: Copied from ../WebCore/icu/unicode/parseerr.h.
19568        * icu/unicode/ucol.h: Copied from ../WebCore/icu/unicode/ucol.h.
19569        * icu/unicode/uloc.h: Copied from ../WebCore/icu/unicode/uloc.h.
19570        * icu/unicode/unorm.h: Copied from ../WebCore/icu/unicode/unorm.h.
19571        * icu/unicode/uset.h: Copied from ../WebCore/icu/unicode/uset.h.
19572
195732008-03-06  Alexey Proskuryakov  <ap@webkit.org>
19574
19575        Reviewed by Darin.
19576
19577        <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore
19578
19579        * wtf/Threading.h:
19580        (WTF::initializeThreading):
19581        * wtf/ThreadingGtk.cpp:
19582        (WTF::initializeThreading):
19583        * wtf/ThreadingNone.cpp:
19584        * wtf/ThreadingPthreads.cpp:
19585        * wtf/ThreadingWin.cpp:
19586        Added AtomicallyInitializedStatic.
19587
19588        * kjs/string_object.cpp: (KJS::localeCompare): Changed to use Collator.
19589
19590        * GNUmakefile.am:
19591        * JavaScriptCore.exp:
19592        * JavaScriptCore.pri:
19593        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19594        * JavaScriptCore.xcodeproj/project.pbxproj:
19595        * JavaScriptCoreSources.bkl:
19596        Added new fiiles to projects.
19597
19598        * wtf/unicode/Collator.h: Added.
19599        (WTF::Collator::):
19600        * wtf/unicode/CollatorDefault.cpp: Added.
19601        (WTF::Collator::Collator):
19602        (WTF::Collator::~Collator):
19603        (WTF::Collator::setOrderLowerFirst):
19604        (WTF::Collator::collate):
19605        * wtf/unicode/icu/CollatorICU.cpp: Added.
19606        (WTF::cachedCollatorMutex):
19607        (WTF::Collator::Collator):
19608        (WTF::Collator::~Collator):
19609        (WTF::Collator::setOrderLowerFirst):
19610        (WTF::Collator::collate):
19611        (WTF::Collator::createCollator):
19612        (WTF::Collator::releaseCollator):
19613
196142008-03-05  Kevin Ollivier  <kevino@theolliviers.com>
19615
19616        Fix the wx build after the bindings move.
19617
19618        * JavaScriptCoreSources.bkl:
19619        * jscore.bkl:
19620
196212008-03-05  Alp Toker  <alp@atoker.com>
19622
19623        GTK+ build fix for breakage introduced in r30800.
19624
19625        Track moved bridge sources from JavaScriptCore to WebCore.
19626
19627        * GNUmakefile.am:
19628
196292008-03-05  Brent Fulgham  <bfulgham@gmail.com>
19630
19631        Reviewed by Adam Roben.
19632
19633        Remove definition of WTF_USE_SAFARI_THEME from wtf/Platform.h
19634        because the PLATFORM(CG) flag is not set until config.h has
19635        already included this file.
19636
19637        * wtf/Platform.h:  Remove useless definition of WTF_USE_SAFARI_THEME
19638
196392008-03-05  Brady Eidson  <beidson@apple.com>
19640
19641        Reviewed by Alexey and Mark Rowe
19642
19643        Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html
19644
19645        DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue,
19646        removing particular items for Databases that were shutting down.
19647
19648        This filtering operation is not atomic, and therefore causes a race condition with the
19649        MessageQueue waking up and reading from the message queue.  
19650
19651        The end result was an attempt to dereference a null DatabaseTask.  Timing-wise, this never
19652        seemed to happen in a debug build, otherwise an assertion would've caught it.  Replacing that
19653        assertion with a crash in a release build is what revealed this bug.
19654
19655        * wtf/MessageQueue.h:
19656        (WTF::::waitForMessage): Tweak the waiting logic to check the queue's empty state then go back
19657          to sleep if the queue was empty - checking m_killed each time it wakes up.
19658
196592008-03-05  David D. Kilzer  <ddkilzer@apple.com>
19660
19661        Remove unused header includes from interpreter.cpp.
19662
19663        Reviewed by Darin.
19664
19665        * kjs/interpreter.cpp: Remove unused header includes.
19666
196672008-03-05  Anders Carlsson  <andersca@apple.com>
19668
19669        Reviewed by Sam.
19670        
19671        Remove bindings/.
19672
19673        * bindings: Removed.
19674
196752008-03-05  Anders Carlsson  <andersca@apple.com>
19676
19677        Don't build bindings/ anymore.
19678        
19679        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19680
196812008-03-05  Anders Carlsson  <andersca@apple.com>
19682
19683        Reviewed by Geoff.
19684
19685        Don't build JavaScriptCore/bindings.
19686        
19687        * JavaScriptCore.exp:
19688        Export a couple of new functions. 
19689        
19690        * JavaScriptCore.xcodeproj/project.pbxproj:
19691        Remove bindings/
19692        
19693        * kjs/config.h:
19694        No need to define HAVE_JNI anymore.
19695        
19696        * kjs/interpreter.cpp:
19697        Remove unnecessary include.
19698
196992008-03-05  David D. Kilzer  <ddkilzer@apple.com>
19700
19701        Allow override of default script file name using command-line argument.
19702
19703        Reviewed by Adele.
19704
19705        * API/minidom.c:
19706        (main): Allow first command-line argument to override the default script
19707        file name of "minidom.js".
19708        * API/testapi.c:
19709        (main): Allow first command-line argument to override the default script
19710        file name of "testapi.js".
19711
197122008-03-04  Mark Rowe  <mrowe@apple.com>
19713
19714        Mac build fix.
19715
19716        * JavaScriptCore.exp:  Add new symbol to exports file.
19717
197182008-03-03  Oliver Hunt  <oliver@apple.com>
19719
19720        Reviewed by Anders.
19721
19722        Make ForInNode check for the timeout interrupt
19723
19724        * kjs/nodes.cpp:
19725        (KJS::ForInNode::execute):
19726
197272008-03-02  Brent Fulgham  <bfulgham@gmail.com>
19728
19729        Reviewed by Alp Toker.
19730
19731        http://bugs.webkit.org/show_bug.cgi?id=17415
19732        GTK Build (using autotools) on Mac OS (DarwinPorts) Fails
19733
19734        Add -lstdc++ to link flags for minidom program.  This corrects
19735        a build error for the GTK+ on Mac OS.
19736
19737        * GNUmakefile.am:
19738
197392008-03-01  Mark Rowe  <mrowe@apple.com>
19740
19741        Reviewed by Tim Hatcher.
19742
19743        Update Xcode configuration to support building debug and release from the mysterious future.
19744
19745        * Configurations/Base.xcconfig:
19746        * Configurations/DebugRelease.xcconfig:
19747
197482008-02-29  Brent Fulgham  <bfulgham@gmail.com>
19749
19750        http://bugs.webkit.org/show_bug.cgi?id=17483
19751        Implement scrollbars on Windows (Cairo)
19752
19753        Reviewed by Adam Roben.
19754
19755        * wtf/Platform.h:
19756
197572008-02-29  Adam Roben  <aroben@apple.com>
19758
19759        Remove unused DebuggerImp::abort and DebuggerImp::aborted
19760
19761        Reviewed by Tim and Sam.
19762
19763        * kjs/function_object.cpp:
19764        (KJS::FunctionObjectImp::construct):
19765        * kjs/internal.h:
19766        (KJS::DebuggerImp::DebuggerImp):
19767        * kjs/nodes.cpp:
19768        (KJS::Node::handleException):
19769        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
19770
197712008-02-28  Eric Christopher  <echristo@apple.com>
19772
19773        Reviewed by Geoffrey Garen.
19774
19775        ** TOTAL **:          1.005x as fast    2867.6ms +/- 0.4%  2853.2ms +/- 0.3%    significant
19776
19777        * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for
19778        the sake of branch prediction and code organization).
19779
197802008-02-27  Alexey Proskuryakov  <ap@webkit.org>
19781
19782        Reviewed by Sam Weinig.
19783
19784        http://bugs.webkit.org/show_bug.cgi?id=17030
19785        Small buffer overflow within initialization
19786
19787        * kjs/date_object.cpp:
19788        (KJS::DateObjectFuncImp::callAsFunction):
19789        (KJS::parseDate):
19790        Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself.
19791
197922008-02-25  Sam Weinig  <sam@webkit.org>
19793
19794        Reviewed by Dan Bernstein.
19795
19796        - Add a variant of remove that takes a position and a length.
19797
19798        * wtf/Vector.h:
19799        (WTF::Vector::remove):
19800
198012008-02-25  Mark Mentovai  <mark@moxienet.com>
19802
19803        Reviewed by Mark Rowe.
19804
19805        Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build.
19806        http://bugs.webkit.org/show_bug.cgi?id=17538
19807
19808        * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for
19809          WTF::RemoteMemoryReader.
19810        * kjs/collector.h: Move CollectorHeap declaration here...
19811        * kjs/collector.cpp: ... from here.
19812
198132008-02-25  Darin Adler  <darin@apple.com>
19814
19815        Reviewed by Adam.
19816
19817        * JavaScriptCore.exp: Sort the contents of this file.
19818
198192008-02-25  Adam Roben  <aroben@apple.com>
19820
19821        MSVC build fix
19822
19823        * kjs/testkjs.cpp:
19824        (functionQuit): Don't add a return statement after exit(0) for MSVC.
19825
198262008-02-24  Sam Weinig  <sam@webkit.org>
19827
19828        Reviewed by Mark Rowe.
19829
19830        http://bugs.webkit.org/show_bug.cgi?id=17529
19831        Add support for reading from stdin from testkjs
19832
19833        * kjs/testkjs.cpp:
19834        (GlobalObject::GlobalObject): Add readline function to global object.
19835        (functionReadline): Added. Reads characters from stdin until a '\n' or
19836        EOF is encountered. The input is returned as a String to the caller.
19837
198382008-02-24  Sam Weinig  <sam@webkit.org>
19839
19840        Reviewed by Mark Rowe.
19841
19842        http://bugs.webkit.org/show_bug.cgi?id=17528
19843        Give testkjs a bath
19844
19845        * JavaScriptCore.exp:
19846        * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
19847        * kjs/testkjs.cpp:
19848        (StopWatch::getElapsedMS):
19849        (GlobalObject::className):
19850        (GlobalObject::GlobalObject):
19851        Rename GlobalImp to GlobalObject and setup the global functions
19852        in the GlobalObject's constructor. Also, use static functions for
19853        the implementation so we can use the standard PrototypeFunction
19854        class and remove TestFunctionImp.
19855        (functionPrint): Move print() functionality here.
19856        (functionDebug): Move debug() functionality here.
19857        (functionGC): Move gc() functionality here.
19858        (functionVersion): Move version() functionality here.
19859        (functionRun): Move run() functionality here.
19860        (functionLoad): Move load() functionality here.
19861        (functionQuit): Move quit() functionality here.
19862        (prettyPrintScript): Fix indentation.
19863        (runWithScripts): Since all the functionality of createGlobalObject is
19864        now in the GlobalObject constructor, just call new here.
19865        (parseArguments): Fix indentation.
19866        (kjsmain): Ditto
19867        (fillBufferWithContentsOfFile): Ditto.
19868
198692008-02-24  Sam Weinig  <sam@webkit.org>
19870
19871        Reviewed by Oliver Hunt and Mark Rowe.
19872
19873        http://bugs.webkit.org/show_bug.cgi?id=17505
19874        Add support for getting command line arguments in testkjs
19875
19876        - This slightly changes the behavior of parsing arguments by requiring
19877          a '-f' before all files. 
19878
19879        * kjs/testkjs.cpp:
19880        (createGlobalObject): Add a global property called 'arguments' which
19881        contains an array with the parsed arguments as strings.
19882        (runWithScripts): Pass in the arguments vector so that it can be passed
19883        to the global object.
19884        (parseArguments): Change parsing rules to require a '-f' before any script
19885        file. After all '-f' and '-p' arguments have been parsed, the remaining
19886        are added to the arguments vector and exposed to the script. If there is a
19887        chance of ambiguity (the user wants to pass the string '-f' to the script),
19888        the string '--' can be used separate the options from the pass through 
19889        arguments.
19890        (kjsmain):
19891
198922008-02-24  Dan Bernstein  <mitz@apple.com>
19893
19894        Reviewed by Darin Adler.
19895
19896        - fix http://bugs.webkit.org/show_bug.cgi?id=17511
19897          REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
19898
19899        * wtf/Deque.h:
19900        (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
19901        are both zero but the buffer capacity is non-zero.
19902        (WTF::::prepend): Added validity checks.
19903
199042008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
19905
19906        Rubber stamped by Darin.
19907
19908        Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
19909        whitespaces introduced in the previous commit.
19910
19911        * GNUmakefile.am: 
19912
199132008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
19914
19915        * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
19916
199172008-02-23  Darin Adler  <darin@apple.com>
19918
19919        Reviewed by Anders.
19920
19921        - http://bugs.webkit.org/show_bug.cgi?id=17496
19922          make Deque use a circular array; add iterators
19923
19924        * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
19925        buffer. Growth policy is identical to vector. Added iterators.
19926
19927        * wtf/Vector.h: Made two small refinements while using this to implement
19928        Deque: Made VectorBufferBase derive from Noncopyable, which would have
19929        saved me some debugging time if it had been there. Renamed Impl and
19930        m_impl to Buffer and m_buffer.
19931
199322008-02-23  Darin Adler  <darin@apple.com>
19933
19934        Reviewed by Anders.
19935
19936        - http://bugs.webkit.org/show_bug.cgi?id=17067
19937          eliminate attributes parameter from JSObject::put for speed/clarity
19938
19939        * API/JSCallbackObject.h: Removed attribute arguments.
19940        * API/JSCallbackObjectFunctions.h:
19941        (KJS::JSCallbackObject<Base>::put): Ditto.
19942        * API/JSObjectRef.cpp:
19943        (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
19944        to set attribute values.
19945        * JavaScriptCore.exp: Updated.
19946        * bindings/objc/objc_runtime.h: Removed attribute arguments.
19947        * bindings/objc/objc_runtime.mm:
19948        (ObjcFallbackObjectImp::put): Ditto.
19949        * bindings/runtime_array.cpp:
19950        (RuntimeArray::put): Ditto.
19951        * bindings/runtime_array.h: Ditto.
19952        * bindings/runtime_object.cpp:
19953        (RuntimeObjectImp::put): Ditto.
19954        * bindings/runtime_object.h: Ditto. Also removed canPut which was only
19955        called from one place in WebCore that can use hasProperty instead.
19956
19957        * kjs/Activation.h: Removed attribute argument from put and added the new
19958        initializeVariable function that's used to put variables in variable objects.
19959        Also made isActivationObject a const member.
19960
19961        * kjs/JSGlobalObject.cpp:
19962        (KJS::JSGlobalObject::put): Removed attribute argument.
19963        (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
19964        their initial values, which can include the read-only property.
19965        (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
19966        Removed Internal flag, which is no longer needed.
19967        * kjs/JSGlobalObject.h: More of the same.
19968
19969        * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
19970        (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
19971        check read-only.
19972        (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
19973
19974        * kjs/array_instance.cpp:
19975        (KJS::ArrayInstance::put): Removed attribute argument.
19976        * kjs/array_instance.h: Ditto.
19977
19978        * kjs/function.cpp:
19979        (KJS::FunctionImp::put): Ditto.
19980        (KJS::Arguments::put): Ditto.
19981        (KJS::ActivationImp::put): Ditto.
19982        (KJS::ActivationImp::initializeVariable): Added.
19983        * kjs/function.h: Removed attribute arguments.
19984
19985        * kjs/function_object.cpp:
19986        (KJS::FunctionObjectImp::construct): Removed Internal flag.
19987
19988        * kjs/lookup.h:
19989        (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
19990        instead of calling JSObject::put.
19991        (KJS::cacheGlobalObject): Ditto.
19992
19993        * kjs/nodes.cpp:
19994        (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
19995        the constant.
19996        (KJS::ConstDeclNode::evaluateSingle): Ditto.
19997        (KJS::TryNode::execute): Use putDirect to set up the new object.
19998        (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
19999        (KJS::ProgramNode::processDeclarations): Ditto.
20000        (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
20001        the variables and functions.
20002        (KJS::FuncDeclNode::makeFunction): Removed Internal.
20003        (KJS::FuncExprNode::evaluate): Ditto.
20004
20005        * kjs/object.cpp: Removed canPut, which was only being used in one code path,
20006        not the normal high speed one.
20007        (KJS::JSObject::put): Removed attribute argument. Moved the logic from
20008        canPut here, in the one code ath that was still using it.
20009        * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
20010        attributes argument to the put function. Made isActivationObject const.
20011
20012        * kjs/regexp_object.cpp:
20013        (KJS::RegExpImp::put): Removed attributes argument.
20014        (KJS::RegExpImp::putValueProperty): Ditto.
20015        (KJS::RegExpObjectImp::put): Ditto.
20016        (KJS::RegExpObjectImp::putValueProperty): Ditto.
20017        * kjs/regexp_object.h: Ditto.
20018
20019        * kjs/string_object.cpp:
20020        (KJS::StringInstance::put): Removed attributes argument.
20021        * kjs/string_object.h: Ditto.
20022
200232008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
20024
20025        Not reviewed, Gtk build fix.
20026
20027        * kjs/testkjs.pro:
20028
200292008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20030
20031        Windows build fix - move ThreadCondition implementation from WebCore to WTF.
20032
20033        * wtf/ThreadingWin.cpp:
20034        (WTF::ThreadCondition::ThreadCondition):
20035        (WTF::ThreadCondition::~ThreadCondition):
20036        (WTF::ThreadCondition::wait):
20037        (WTF::ThreadCondition::signal):
20038        (WTF::ThreadCondition::broadcast):
20039
200402008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20041
20042        Touch some files, hoping that Windows build bot will create JSC headers.
20043
20044        * kjs/AllInOneFile.cpp:
20045        * kjs/array_instance.cpp:
20046        * wtf/HashTable.cpp:
20047
200482008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20049
20050        Qt/Wx build fix - this file was still in a wrong namespace, too.
20051
20052        * wtf/ThreadingNone.cpp:
20053
200542008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20055
20056        More build fixing - fix mismatched braces.
20057
20058        * JavaScriptCore.pri:
20059
200602008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20061
20062        Wx and Gtk build fixes.
20063
20064        * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
20065        * wtf/ThreadingGtk.cpp: Use a correct namespace.
20066
200672008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20068
20069        Reviewed by Darin.
20070
20071        Move basic threading support from WebCore to WTF.
20072
20073        Added mutex protection to MessageQueue::killed() for paranoia sake.
20074
20075        * GNUmakefile.am:
20076        * JavaScriptCore.exp:
20077        * JavaScriptCore.pri:
20078        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
20079        * JavaScriptCore.xcodeproj/project.pbxproj:
20080        * JavaScriptCoreSources.bkl:
20081        * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
20082        * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
20083        (WTF::::killed):
20084        * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
20085        * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
20086        (WebCore::createThread):
20087        * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
20088        * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
20089        (WTF::createThread):
20090        * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
20091        (WTF::createThread):
20092        (WTF::Mutex::Mutex):
20093        (WTF::Mutex::~Mutex):
20094        (WTF::Mutex::lock):
20095        (WTF::Mutex::tryLock):
20096        (WTF::Mutex::unlock):
20097
200982008-02-22  Geoffrey Garen  <ggaren@apple.com>
20099
20100        Reviewed by Sam Weinig.
20101        
20102        Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
20103        
20104        I'm removing KJS_MEM_LIMIT for the following reasons:
20105        
20106        - We have a few reports of KJS_MEM_LIMIT breaking important web
20107        applications, like GMail and Google Reader. (For example, if you
20108        simply open 12 GMail tabs, tab #12 will hit the limit.)
20109
20110        - Firefox has no discernable JS object count limit, so any limit, even
20111        a large one, is a potential compatibility problem.
20112        
20113        - KJS_MEM_LIMIT does not protect against malicious memory allocation,
20114        since there are many ways to maliciously allocate memory without
20115        increasing the JS object count.
20116        
20117        - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
20118        script that breaches the limit, not any subsequent scripts.
20119        
20120        - We've never gotten bug reports about websites that would have
20121        benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
20122        KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
20123        needed it.
20124        
20125        - Any website that brings you anywhere close to crashing due to the
20126        number of live JS objects will almost certainly put up the "slow
20127        script" dialog at least 20 times beforehand.
20128
20129        * kjs/collector.cpp:
20130        (KJS::Collector::collect):
20131        * kjs/collector.h:
20132        * kjs/nodes.cpp:
20133        (KJS::TryNode::execute):
20134
201352008-02-22  Oliver Hunt  <oliver@apple.com>
20136
20137        Reviewed by Alexey P.
20138
20139        <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
20140
20141        Fix yet another case where we incorrectly relied on implicit double
20142        to bool coercion.
20143
20144        * kjs/nodes.cpp:
20145        (KJS::PostDecLocalVarNode::evaluateToBoolean):
20146
201472008-02-20  Michael Knaup  <michael.knaup@mac.com>
20148
20149        Reviewed by Darin.
20150
20151        Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
20152        The set values result in NaN now when called with no args, NaN or +/- inf values.
20153        The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 
20154        descripted in the standard.
20155
20156        * kjs/date_object.cpp:
20157        (KJS::fillStructuresUsingTimeArgs):
20158        (KJS::fillStructuresUsingDateArgs):
20159        (KJS::setNewValueFromTimeArgs):
20160        (KJS::setNewValueFromDateArgs):
20161        (KJS::dateProtoFuncSetYear):
20162
201632008-02-19  Anders Carlsson  <andersca@apple.com>
20164
20165        Reviewed by Darin.
20166
20167        Change OpaqueJSClass and RootObject to start with a ref count of 1.
20168        
20169        * API/JSClassRef.cpp:
20170        (OpaqueJSClass::OpaqueJSClass):
20171        (OpaqueJSClass::createNoAutomaticPrototype):
20172        (OpaqueJSClass::create):
20173        * API/JSClassRef.h:
20174        * API/JSObjectRef.cpp:
20175        (JSClassCreate):
20176        * bindings/runtime_root.cpp:
20177        (KJS::Bindings::RootObject::create):
20178        (KJS::Bindings::RootObject::RootObject):
20179
201802008-02-19  Darin Adler  <darin@apple.com>
20181
20182        Rubber stamped by Anders.
20183
20184        - removed explicit initialization to 1 for RefCounted; that's now the default
20185
20186        * kjs/regexp.cpp:
20187        (KJS::RegExp::RegExp): Removed RefCounted initializer.
20188
201892008-02-19  Darin Adler  <darin@apple.com>
20190
20191        Reviewed by Anders.
20192
20193        - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
20194          start ref counts at 1 instead of 0 for speed
20195
20196        * wtf/RefCounted.h:
20197        (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
20198        removing the explicit initialization of RefCounted from classes and eventually we
20199        can remove the ability to have the initial count of 0 entirely.
20200
202012008-02-18  Samuel Weinig  <sam@webkit.org>
20202
20203        Reviewed by Geoff Garen.
20204
20205        Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
20206        Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
20207
20208        * kjs/JSGlobalObject.cpp:
20209        (KJS::JSGlobalObject::init):
20210        * kjs/JSGlobalObject.h:
20211        (KJS::JSGlobalObject::setDebugger):
20212        * kjs/date_object.cpp:
20213        (KJS::dateProtoFuncGetYear):
20214
202152008-02-18  Darin Adler  <darin@apple.com>
20216
20217        Reviewed by Sam.
20218
20219        * wtf/ASCIICType.h:
20220        (WTF::toASCIIHexValue): Added.
20221
202222008-02-17  Darin Adler  <darin@apple.com>
20223
20224        * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
20225
202262008-02-15  Adam Roben  <aroben@apple.com>
20227
20228        Make JavaScriptCore's FEATURE_DEFINES match WebCore's
20229
20230        Reviewed by Mark.
20231
20232        * Configurations/JavaScriptCore.xcconfig:
20233
202342008-02-14  Stephanie Lewis <slewis@apple.com>
20235
20236        Reviewed by Geoff.
20237
20238        Update order files.
20239
20240        * JavaScriptCore.order:
20241
202422008-02-14  Geoffrey Garen  <ggaren@apple.com>
20243
20244        Reviewed by Sam Weinig.
20245        
20246        Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
20247        Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
20248        
20249        Don't reset the "activations" stack in JSGlobalObject::reset, since we
20250        might be executing a script during the call to reset, and the script
20251        needs to safely run to completion.
20252        
20253        Instead, initialize the "activations" stack when the global object is
20254        created, and subsequently rely on pushing and popping during normal
20255        execution to maintain the stack's state.
20256        
20257        * kjs/JSGlobalObject.cpp:
20258        (KJS::JSGlobalObject::init):
20259        (KJS::JSGlobalObject::reset):
20260
202612008-02-13  Bernhard Rosenkraenzer  <bero@arklinux.org>
20262
20263        Reviewed by Darin.
20264
20265        - http://bugs.webkit.org/show_bug.cgi?id=17339
20266          JavaScriptCore does not build with gcc 4.3
20267
20268        * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
20269        getpid() comes from.
20270
202712008-02-13  Oliver Hunt  <oliver@apple.com>
20272
20273        Reviewed by Alexey P.
20274
20275        <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
20276
20277        When converting numeric values to booleans we need to account for NaN
20278
20279        * kjs/nodes.cpp:
20280        (KJS::MultNode::evaluateToBoolean):
20281        (KJS::ModNode::evaluateToBoolean):
20282
202832008-02-08  Samuel Weinig  <sam@webkit.org>
20284
20285        Reviewed by Brady Eidson.
20286
20287        <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
20288
20289        - Tweak the statements in isASCIISpace to account for the statistical distribution of
20290          usage in the PLT.
20291
20292        .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
20293
20294        * wtf/ASCIICType.h:
20295        (WTF::isASCIISpace): 
20296
202972008-02-11  Sam Weinig  <sam@webkit.org>
20298
20299        Reviewed by Anders Carlsson.
20300
20301        Fixes for:
20302        <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
20303        <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
20304
20305        - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
20306          toString calling.
20307
20308        * JavaScriptCore.exp:
20309        * kjs/object_object.cpp:
20310        * kjs/object_object.h:
20311
203122008-02-10  Darin Adler  <darin@apple.com>
20313
20314        Rubber stamped by Eric.
20315
20316        * kjs/ExecState.h:
20317        (KJS::ExecState::takeException): Added.
20318
203192008-02-10  Darin Adler  <darin@apple.com>
20320
20321        Reviewed by Eric.
20322
20323        - http://bugs.webkit.org/show_bug.cgi?id=17256
20324          eliminate default ref. count of 0 in RefCounted class
20325
20326        * wtf/RefCounted.h:
20327        (WTF::RefCounted::RefCounted): Remove default of 0.
20328
203292008-02-10  Darin Adler  <darin@apple.com>
20330
20331        Reviewed by Eric.
20332
20333        - http://bugs.webkit.org/show_bug.cgi?id=17256
20334          Make clients of RefCounted explicitly set the count to 0.
20335
20336        * API/JSClassRef.cpp:
20337        (OpaqueJSClass::OpaqueJSClass):
20338        * bindings/runtime_root.cpp:
20339        (KJS::Bindings::RootObject::RootObject):
20340
203412008-02-09  Darin Adler  <darin@apple.com>
20342
20343        Reviewed by Mitz.
20344
20345        - http://bugs.webkit.org/show_bug.cgi?id=17256
20346          Change RegExp to start its ref count at 1, not 0
20347
20348        We'll want to do this to every RefCounted class, one at a time.
20349
20350        * kjs/nodes.h:
20351        (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
20352        * kjs/regexp.cpp:
20353        (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
20354        (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
20355        * kjs/regexp.h: Reformatted. Made the constructors private. Added static
20356        create functions that return objects already wrapped in PassRefPtr.
20357        * kjs/regexp_object.cpp:
20358        (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
20359        (KJS::RegExpObjectImp::construct): Ditto.
20360        * kjs/string_object.cpp:
20361        (KJS::stringProtoFuncMatch): Ditto.
20362        (KJS::stringProtoFuncSearch): Ditto.
20363
203642008-02-08  Oliver Hunt  <oliver@apple.com>
20365
20366        Reviewed by Maciej.
20367
20368        <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
20369        https://bugs.webkit.org/show_bug.cgi?id=17214
20370
20371        Make a subclass of CommaNode to provide the correct precedence for each expression in
20372        a variable declaration list.
20373
20374        * kjs/grammar.y:
20375        * kjs/nodes.h:
20376        (KJS::VarDeclCommaNode::):
20377
203782008-02-08  Darin Adler  <darin@apple.com>
20379
20380        Reviewed by Oliver.
20381
20382        - fix http://bugs.webkit.org/show_bug.cgi?id=17247
20383          Labelled continue/break can fail in some cases
20384
20385        Test: fast/js/continue-break-multiple-labels.html
20386
20387        * kjs/nodes.h:
20388        (KJS::StatementNode::pushLabel): Made this virtual.
20389        (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
20390
203912008-02-08  Darin Adler  <darin@apple.com>
20392
20393        Reviewed by Eric.
20394
20395        - fix http://bugs.webkit.org/show_bug.cgi?id=15003
20396          Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
20397
20398        Test: fast/js/constructor-attributes.html
20399
20400        * kjs/JSGlobalObject.cpp:
20401        (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
20402        * kjs/function_object.cpp:
20403        (KJS::FunctionObjectImp::construct): Ditto.
20404        * kjs/nodes.cpp:
20405        (KJS::FuncDeclNode::makeFunction): Ditto.
20406        (KJS::FuncExprNode::evaluate): Ditto.
20407
204082008-02-06  Geoffrey Garen  <ggaren@apple.com>
20409
20410        Reviewed by Oliver Hunt.
20411        
20412        Added an ASSERT to catch refCount underflow, since it caused a leak in
20413        my last check-in.
20414
20415        * wtf/RefCounted.h:
20416        (WTF::RefCounted::deref):
20417
204182008-02-06  Geoffrey Garen  <ggaren@apple.com>
20419
20420        Reviewed by Darin Adler.
20421
20422        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
20423        slower due to r28884 (global variable symbol table optimization)
20424        
20425        Tweaked RefCounted::deref() to be a little more efficient.
20426
20427        1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
20428        
20429        * wtf/RefCounted.h:
20430        (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
20431        to delete the object anyway. Also, use a simple == test, which might be
20432        faster than <= on some hardware.
20433
204342008-02-06  Darin Adler  <darin@apple.com>
20435
20436        Reviewed by Sam.
20437
20438        - fix http://bugs.webkit.org/show_bug.cgi?id=17094
20439          Array.prototype functions create length properties with DontEnum/DontDelete
20440
20441        Test results match Gecko with very few obscure exceptions that seem to be
20442        bugs in Gecko.
20443
20444        Test: fast/js/array-functions-non-arrays.html
20445
20446        * kjs/array_object.cpp:
20447        (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
20448        to set length.
20449        (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
20450        which is not needed for real arrays, but is needed for non-arrays.
20451        (KJS::arrayProtoFuncPush): Ditto.
20452        (KJS::arrayProtoFuncShift): Ditto.
20453        (KJS::arrayProtoFuncSlice): Ditto.
20454        (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
20455        the array has no elements.
20456        (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
20457        to set length.
20458        (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
20459        make behavior match the specification in that case.
20460        * kjs/nodes.cpp:
20461        (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
20462        to set length.
20463
204642008-02-06  Darin Adler  <darin@apple.com>
20465
20466        Reviewed by Sam.
20467
20468        - replace calls to put to set up properties with calls to putDirect, to
20469          prepare for a future change where put won't take attributes any more,
20470          and for a slight performance boost
20471
20472        * API/JSObjectRef.cpp:
20473        (JSObjectMakeConstructor): Use putDirect instead of put.
20474        * kjs/CommonIdentifiers.h: Removed lastIndex.
20475        * kjs/JSGlobalObject.cpp:
20476        (KJS::JSGlobalObject::reset): Use putDirect instead of put.
20477        * kjs/array_object.cpp:
20478        (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
20479        (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
20480        * kjs/error_object.cpp:
20481        (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
20482        * kjs/function.cpp:
20483        (KJS::Arguments::Arguments): Use putDirect instead of put.
20484        (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
20485        * kjs/function_object.cpp:
20486        (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
20487        * kjs/nodes.cpp:
20488        (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
20489        (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
20490        * kjs/regexp_object.cpp:
20491        (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
20492        (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
20493        calling get and put.
20494        * kjs/regexp_object.h:
20495        (KJS::RegExpImp::setLastIndex): Added.
20496        * kjs/string_object.cpp:
20497        (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).
20498
204992008-02-05  Sam Weinig  <sam@webkit.org>
20500
20501        Reviewed by Anders Carlsson.
20502
20503        Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
20504        NodeList (and other DOM lists) items are not enumeratable using for..in
20505
20506        * JavaScriptCore.exp:
20507
205082008-02-05  Mark Rowe  <mrowe@apple.com>
20509
20510        Reviewed by Oliver Hunt.
20511
20512        Update versioning to support the mysterious future.
20513
20514        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.
20515
205162008-02-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
20517
20518        Reviewed by Oliver Hunt.
20519
20520        Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
20521              Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
20522              Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/
20523
20524        <http://bugs.webkit.org/show_bug.cgi?id=16889>
20525        <rdar://problem/5696255>
20526
20527        <http://bugs.webkit.org/show_bug.cgi?id=17015>
20528
20529        <http://bugs.webkit.org/show_bug.cgi?id=17164>
20530        <rdar://problem/5720947>
20531
20532        The ActivationImp tear-off (r29425) introduced a problem with ReadModify
20533        nodes that first resolve a slot, call valueForReadModifyNode(), and then
20534        store a value in the previously resolved slot. Since valueForReadModifyNode()
20535        may cause a tear-off, the slot needs to be resolved again, but this was
20536        not happening with the existing code.
20537
20538        * kjs/nodes.cpp:
20539        (KJS::ReadModifyLocalVarNode::evaluate):
20540        (KJS::ReadModifyResolveNode::evaluate):
20541
205422008-02-04  Cameron McCormack <cam@mcc.id.au>
20543
20544        Reviewed by Geoff Garen.
20545
20546        Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.
20547
20548        * API/JSNode.c:
20549        (JSNode_appendChild):
20550        (JSNode_removeChild):
20551        (JSNode_replaceChild):
20552        (JSNode_getNodeType):
20553        (JSNode_getFirstChild):
20554        * API/JSNodeList.c:
20555        (JSNodeList_length):
20556        * API/JSObjectRef.h:
20557
205582008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>
20559
20560        Reviewed by Alp Toker and Mark Rowe.
20561
20562        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
20563        Bug 17175: Use of C++ compiler flags in CFLAGS
20564
20565        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.
20566
205672008-02-04  Alp Toker  <alp@atoker.com>
20568
20569        Rubber-stamped by Mark Rowe.
20570
20571        Remove all trailing whitespace in the GTK+ port and related
20572        components.
20573
20574        * GNUmakefile.am:
20575
205762008-02-02  Darin Adler  <darin@apple.com>
20577
20578        Reviewed by Geoff Garen.
20579
20580        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
20581        slower due to r28884 (global variable symbol table optimization)
20582
20583        Geoff's theory is that the slowdown was due to copying hash tables when
20584        putting things into the back/forward cache. If that's true, then this
20585        should fix the problem.
20586
20587        (According to Geoff's measurements, in a PLT that exaggerates the
20588        importance of symbol table saving during cached page creation, this
20589        patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)
20590
20591        * JavaScriptCore.exp: Updated.
20592
20593        * kjs/JSVariableObject.cpp:
20594        (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
20595        which has been revised to avoid initializing each SavedProperty twice when building
20596        the array. Store the property names too, so we don't have to store the symbol table
20597        separately. Do this by iterating the symbol table instead of the local storage vector.
20598        (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
20599        well as the local storage vector.
20600
20601        * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
20602        save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
20603        that takes a const reference to a SavedProperties object.
20604
20605        * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
20606        other declarations of attributes elsewhere.
20607
20608        * kjs/property_map.cpp:
20609        (KJS::SavedProperties::SavedProperties): Updated for data member name change.
20610        (KJS::PropertyMap::save): Updated for data member name change and to use the new
20611        inline init function instead of setting the fields directly. This allows us to
20612        skip initializing the SavedProperty objects when first allocating the array, and
20613        just do it when we're actually setting up the individual elements.
20614        (KJS::PropertyMap::restore): Updated for SavedProperty changes.
20615
20616        * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
20617        it does not get initialized at construction time to avoid initializing twice when
20618        creating an array of SavedProperty. Removed the m_ prefixes from the members of
20619        the SavedProperties struct. Generally we use m_ for class members and not struct.
20620
206212008-02-02  Tony Chang  <idealisms@gmail.com>
20622
20623        Reviewed by darin.  Landed by eseidel.
20624
20625        Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.
20626
20627        * kjs/config.h:
20628        * wtf/FastMalloc.cpp:
20629        * wtf/TCSpinLock.h:
20630
206312008-01-28  Sam Weinig  <sam@webkit.org>
20632
20633        Rubber-stamped by Darin Adler.
20634
20635        - Fix whitespace in nodes.h/cpp and nodes2string.cpp.
20636
20637        (NOTE: Specific changed functions elided for space and clarity)
20638        * kjs/nodes.cpp:
20639        * kjs/nodes.h:
20640        * kjs/nodes2string.cpp:
20641
206422008-01-27  Sam Weinig  <sam@webkit.org>
20643
20644        Reviewed by Oliver Hunt.
20645
20646        Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
20647        nodes.h/cpp has been rolling around in the mud - lets hose it down
20648
20649        - Rename member variables to use the m_ prefix.
20650
20651        (NOTE: Specific changed functions elided for space and clarity)
20652        * kjs/grammar.y:
20653        * kjs/nodes.cpp:
20654        * kjs/nodes.h:
20655        * kjs/nodes2string.cpp:
20656
206572008-01-27  Darin Adler  <darin@apple.com>
20658
20659        Reviewed by Oliver.
20660
20661        - fix <rdar://problem/5657450> REGRESSION: const is broken
20662
20663        Test: fast/js/const.html
20664
20665        SunSpider said this was 0.3% slower. And I saw some Shark samples in
20666        JSGlobalObject::put -- not a lot but a few. We may be able to regain the
20667        speed, but for now we will take that small hit for correctness sake.
20668
20669        * kjs/JSGlobalObject.cpp:
20670        (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
20671        instead of passing attributes.
20672
20673        * kjs/JSVariableObject.h:
20674        (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
20675        here, since we only set attributes when creating a property. Added the code
20676        to check read-only here, since we need that to implement const!
20677
20678        * kjs/function.cpp:
20679        (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
20680        instead of passing attributes.
20681
20682        * kjs/nodes.cpp:
20683        (KJS::isConstant): Added.
20684        (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
20685        if optimizing for a local variable and the variable is constant.
20686        (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
20687        (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
20688        (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
20689        (KJS::PreIncConstNode::evaluate): Return the value + 1.
20690        (KJS::PreDecConstNode::evaluate): Return the value - 1.
20691        (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
20692        (KJS::PostDecConstNode::evaluate): Ditto.
20693        (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
20694        if optimizing for a local variable and the variable is constant.
20695        (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
20696        (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
20697        node optimizeVariableAccess functions, since that's where we need to look to
20698        figure out if a variable is constant.
20699        (KJS::FunctionBodyNode::processDeclarations): Moved the call to
20700        optimizeVariableAccess until after localStorage is set up.
20701        (KJS::ProgramNode::processDeclarations): Ditto.
20702
20703        * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
20704        as flag masks, so a value of 0 will not work for IsConstant. Changed the
20705        first parameter to optimizeVariableAccess to be a const reference to a symbol
20706        table and added a const reference to local storage. Added classes for const
20707        versions of local variable access: PostIncConstNode, PostDecConstNode,
20708        PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.
20709
20710        * kjs/object.cpp:
20711        (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
20712        expression to match the form used at the two other call sites.
20713
207142008-01-27  Darin Adler  <darin@apple.com>
20715
20716        Reviewed by Oliver.
20717
20718        - fix http://bugs.webkit.org/show_bug.cgi?id=16498
20719          ''.constructor.toString() gives [function]
20720
20721        Test: fast/js/function-names.html
20722
20723        * kjs/array_object.cpp:
20724        (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
20725        * kjs/bool_object.cpp:
20726        (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
20727        * kjs/date_object.cpp:
20728        (KJS::DateObjectImp::DateObjectImp): Ditto.
20729        * kjs/error_object.cpp:
20730        (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
20731        (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
20732        (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
20733        (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
20734        name.
20735        * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
20736        NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
20737        * kjs/function.h: Removed unneeded constructor for internal functions without names.
20738        We want to avoid those!
20739        * kjs/function_object.cpp:
20740        (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
20741        that have no names. There's no reason to do that.
20742        (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
20743        function name.
20744        * kjs/internal.cpp: Removed the unused constructor.
20745        * kjs/number_object.cpp:
20746        (KJS::fractionalPartToString): Marked static for internal linkage.
20747        (KJS::exponentialPartToString): Ditto.
20748        (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
20749        (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
20750        function name.
20751        (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
20752        * kjs/object_object.cpp:
20753        (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
20754        * kjs/regexp_object.cpp:
20755        (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
20756        * kjs/string_object.cpp:
20757        (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
20758        function name.
20759
207602008-01-26  Darin Adler  <darin@apple.com>
20761
20762        Reviewed by Oliver.
20763
20764        - fix http://bugs.webkit.org/show_bug.cgi?id=17027
20765          Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers
20766
20767        Test: fast/js/function-toString-parentheses.html
20768
20769        The problem here was that a NumberNode with a negative number in it had the wrong
20770        precedence. It's not a primary expression, it's a unary operator with a primary
20771        expression after it.
20772
20773        Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
20774        fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
20775        The reason we handle numbers before dot nodes specially is that the dot is a
20776        legal character in a number. The same is not true of a bracket. Eventually we
20777        could get smarter, and only add the parentheses when there is actual ambiguity.
20778        There is none if the string form of the number already has a dot in it, or if
20779        it's a number with a alphabetic name like infinity or NAN.
20780
20781        * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
20782        (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
20783        they serialize as a unary operator, not a primary expression.
20784        * kjs/nodes2string.cpp:
20785        (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
20786        parens; one set is enough.
20787        (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
20788        operator precedence suffices.
20789        (KJS::NewExprNode::streamTo): Ditto.
20790
207912008-01-26  Oliver Hunt  <oliver@apple.com>
20792
20793        Reviewed by Maciej and Darin.
20794
20795        Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
20796        Function.toString does not parenthesise numbers for the bracket accessor
20797
20798        It turns out that logic was there for all of the dot accessor nodes to make numbers be
20799        parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
20800        I renamed the enum type to reflect the fact that it is now used for both dot and bracket
20801        accessors.
20802
20803        * kjs/nodes2string.cpp:
20804        (KJS::bracketNodeStreamTo):
20805        (KJS::BracketAccessorNode::streamTo):
20806
208072008-01-26  Oliver Hunt  <oliver@apple.com>
20808
20809        Reviewed by Darin.
20810
20811        Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals
20812
20813        Don't quote getter and setter names during output, as that is simply wrong.
20814
20815        * kjs/nodes2string.cpp:
20816        (KJS::PropertyNode::streamTo):
20817
208182008-01-26  Darin Adler  <darin@apple.com>
20819
20820        Reviewed by Eric Seidel.
20821
20822        - http://bugs.webkit.org/show_bug.cgi?id=16860
20823          a bit of cleanup after the Activation optimization
20824
20825        * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
20826        the global flavor of the ExecState constructor. It'd probably be cleaner
20827        to not export either one, but JSGlobalObject inlines the code that
20828        constructs the ExecState. If we changed that, we could remove this export.
20829
20830        * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
20831        put the new source files into the kjs group rather than at the top level.
20832
20833        * kjs/ExecState.cpp:
20834        (KJS::ExecState::ExecState): Marked inline and updated for data member
20835        name changes. This is now only for use for the derived classes. Also removed
20836        code that sets the unused m_savedExec data member for the global case. That
20837        data member is only used for the other two types.
20838        (KJS::ExecState::~ExecState): Marked inline and removed all the code.
20839        The derived class destructors now inclde the appropriate code.
20840        (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
20841        an empty scope chain. The bottom function already returns 0 for that case,
20842        so the general case code handles it fine. Also changed to use data members
20843        directly rather than calling functions.
20844        (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
20845        class constructor.
20846        (KJS::GlobalExecState::~GlobalExecState): Added.
20847        (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
20848        manipulate activeExecStates here since we don't want to have to check for the
20849        special case of globalExec.
20850        (KJS::InterpreterExecState::~InterpreterExecState): Added.
20851        (KJS::EvalExecState::EvalExecState): Added.
20852        (KJS::EvalExecState::~EvalExecState): Added.
20853        (KJS::FunctionExecState::FunctionExecState): Added.
20854        (KJS::FunctionExecState::~FunctionExecState): Added.
20855
20856        * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
20857        Made ExecState inherit from Noncopyable. Reformatted some comments and
20858        made them a bit more brief. Rearranged declarations a little bit and removed
20859        unused savedExec function. Changed seenLabels function to return a reference
20860        rather than a pointer. Made constructors and destructor protected, and also
20861        did the same with all data members. Renamed m_thisVal to m_thisValue and
20862        ls to m_labelStack. Added three new derived classes for each of the
20863        types of ExecState. The primary goal here was to remove a branch from the
20864        code in the destructor, but it's also clearer than overloading the arguments
20865        to the ExecState constructor.
20866
20867        * kjs/JSGlobalObject.cpp:
20868        (KJS::getCurrentTime): Fixed formatting.
20869        (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
20870        the expression clearer -- other similar sites didn't have these parentheses,
20871        even the one a couple lines earlier that sets stackEntry.
20872        (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
20873        (I think I mentioned this during patch review) and used an early exit so that
20874        the entire contents of the function aren't nested inside an if statement.
20875        Also removed the check of codeType, instead checking Activation for 0.
20876        For now, I kept the codeType check, but inside an assertion.
20877
20878        * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
20879        * kjs/function.cpp:
20880        (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
20881        (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
20882        * kjs/interpreter.cpp:
20883        (KJS::Interpreter::evaluate): Changed type to GlobalExecState.
20884
20885        * kjs/nodes.cpp:
20886        (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
20887        reference now instead of a pointer.
20888        (KJS::BreakNode::execute): Ditto.
20889        (KJS::LabelNode::execute): Ditto.
20890
208912008-01-26  Sam Weinig  <sam@webkit.org>
20892
20893        Reviewed by Mark Rowe.
20894
20895        Cleanup node2string a little.
20896        - Remove some unnecessary branching.
20897        - Factor out bracket and dot streaming into static inline functions.
20898
20899        * kjs/nodes.h:
20900        * kjs/nodes2string.cpp:
20901        (KJS::bracketNodeStreamTo):
20902        (KJS::dotNodeStreamTo):
20903        (KJS::FunctionCallBracketNode::streamTo):
20904        (KJS::FunctionCallDotNode::streamTo):
20905        (KJS::PostIncBracketNode::streamTo):
20906        (KJS::PostDecBracketNode::streamTo):
20907        (KJS::PostIncDotNode::streamTo):
20908        (KJS::PostDecDotNode::streamTo):
20909        (KJS::DeleteBracketNode::streamTo):
20910        (KJS::DeleteDotNode::streamTo):
20911        (KJS::PreIncBracketNode::streamTo):
20912        (KJS::PreDecBracketNode::streamTo):
20913        (KJS::PreIncDotNode::streamTo):
20914        (KJS::PreDecDotNode::streamTo):
20915        (KJS::ReadModifyBracketNode::streamTo):
20916        (KJS::AssignBracketNode::streamTo):
20917        (KJS::ReadModifyDotNode::streamTo):
20918        (KJS::AssignDotNode::streamTo):
20919        (KJS::WhileNode::streamTo):
20920
209212008-01-26  Mark Rowe  <mrowe@apple.com>
20922
20923        Reviewed by Darin Adler.
20924
20925        Fix http://bugs.webkit.org/show_bug.cgi?id=17001
20926        Bug 17001: Build error with Gtk port on Mac OS X
20927
20928        If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
20929        These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
20930        the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
20931        in this instance.
20932
20933        * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.
20934
209352008-01-26  Darin Adler  <darin@apple.com>
20936
20937        Reviewed by Oliver.
20938
20939        - fix http://bugs.webkit.org/show_bug.cgi?id=17013
20940          JSC can't round trip certain for-loops
20941
20942        Test: fast/js/toString-for-var-decl.html
20943
20944        * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
20945        for loops without injecting the word "true" into them (nice, but not
20946        the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
20947        only when there is an expression, since it's common for the actual
20948        variable declaration to be moved by the parser.
20949
20950        * kjs/nodes2string.cpp:
20951        (KJS::PlaceholderTrueNode::streamTo): Added. Empty.
20952
209532008-01-25  Oliver Hunt  <oliver@apple.com>
20954
20955        Reviewed by Maciej.
20956
20957        Fix for bug 17012: REGRESSION: JSC can't round trip an object literal
20958
20959        Add logic to ensure that object literals and function expressions get
20960        parentheses when necessary.
20961
20962        * kjs/nodes.h:
20963        * kjs/nodes2string.cpp:
20964        (KJS::SourceStream::operator<<):
20965
209662008-01-24  Steve Falkenburg  <sfalken@apple.com>
20967
20968        Build fix.
20969
20970        * JavaScriptCore.vcproj/JavaScriptCore.sln:
20971
209722008-01-24  Steve Falkenburg  <sfalken@apple.com>
20973
20974        Build fix.
20975
20976        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
20977
209782008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
20979
20980        Reviewed by Simon.
20981
20982        Fix QDateTime to JS Date conversion.
20983        Several conversion errors (some UTC related, some month
20984        offset related) and the conversion distance for Date
20985        to DateTime conversion weights were fixed (it should never
20986        be better to convert a JS Number into a Date rather than
20987        an int).
20988        
20989        * bindings/qt/qt_runtime.cpp:
20990        (KJS::Bindings::convertValueToQVariant):
20991        (KJS::Bindings::convertQVariantToValue):
20992
209932008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
20994
20995        Reviewed by Simon.
20996
20997        Add support for calling QObjects.
20998        Add support for invokeDefaultMethod (via a call to
20999        a specific slot), and also allow using it as a
21000        constructor, like QtScript.
21001        
21002
21003        * bindings/qt/qt_class.cpp:
21004        (KJS::Bindings::QtClass::fallbackObject):
21005        * bindings/qt/qt_instance.cpp:
21006        (KJS::Bindings::QtRuntimeObjectImp::construct):
21007        (KJS::Bindings::QtInstance::QtInstance):
21008        (KJS::Bindings::QtInstance::~QtInstance):
21009        (KJS::Bindings::QtInstance::implementsCall):
21010        (KJS::Bindings::QtInstance::invokeDefaultMethod):
21011        * bindings/qt/qt_instance.h:
21012        * bindings/qt/qt_runtime.cpp:
21013        (KJS::Bindings::findMethodIndex):
21014        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
21015        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
21016        * bindings/qt/qt_runtime.h:
21017
210182008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
21019
21020        Reviewed by Simon.
21021
21022        Code style cleanups.
21023        Add spaces before/after braces in inline function.
21024
21025        * bindings/qt/qt_instance.h:
21026
210272008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
21028
21029        Reviewed by Simon.
21030
21031        Code style cleanups.
21032        Remove spaces and unneeded declared parameter names.
21033
21034        * bindings/qt/qt_instance.cpp:
21035        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
21036
210372008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
21038
21039        Reviewed by Simon.
21040
21041        Clear stale RuntimeObjectImps.
21042        Since other objects can have refs to the QtInstance,
21043        we can't rely on the QtInstance being deleted when the
21044        RuntimeObjectImp is invalidate or deleted.  This
21045        could result in a stale JSObject being returned for
21046        a valid Instance.
21047
21048        * bindings/qt/qt_instance.cpp:
21049        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
21050        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
21051        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
21052        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
21053        (KJS::Bindings::QtInstance::getRuntimeObject):
21054        * bindings/runtime.cpp:
21055        (KJS::Bindings::Instance::createRuntimeObject):
21056        * bindings/runtime.h:
21057
210582008-01-23  Alp Toker  <alp@atoker.com>
21059
21060        Rubber-stamped by Mark Rowe.
21061
21062        Remove whitespace after -I in automake include lists.
21063
21064        * GNUmakefile.am:
21065
210662008-01-23  Michael Goddard <michael.goddard@trolltech.com>
21067
21068        Reviewed by Lars Knoll <lars@trolltech.com>.
21069
21070        Reworked the JavaScriptCore Qt bindings:
21071        
21072        * Add initial support for string and variant arrays, as well
21073        as sub QObjects in the JS bindings.
21074        
21075        * Don't expose fields marked as not scriptable by moc.
21076        
21077        * Add support for dynamic properties and accessing named
21078        QObject children of an object (like QtScript and older
21079        IE DOM style JS).
21080        * Add support for custom toString methods.
21081        
21082        * Fine tune some bindings to be closer to QtScript.
21083        Make void functions return undefined, and empty/
21084        null QStrings return a zero length string.
21085        
21086        * Create framework for allowing more direct method calls.
21087        Since RuntimeMethod doesn't allow us to add additional
21088        methods/properties to a function, add these classes.
21089        Start prototyping object.signal.connect(...).
21090        
21091        * Add signal support to the Qt bindings.
21092        Allow connecting to signals (object.signal.connect(slot)),
21093        disconnecting, and emitting signals.  Currently chooses
21094        the first signal that matches the name, so this will need
21095        improvement.
21096        
21097        * Add property names, and resolve signals closer to use.
21098        Enumerating properties now returns some of the Qt properties
21099        and signals.  Slots and methods aren't quite present.  Also,
21100        resolve signal connections etc. closer to the time of use, so
21101        we can do more dynamic resolution based on argument type etc.
21102        Still picks the first one with the same name, at the moment.
21103        
21104        * Make signature comparison code consistent.
21105        Use the same code for checking meta signatures in
21106        the method and fallback getters, and avoid a
21107        QByteArray construction when we can.
21108        
21109        * Fix minor memory leak, and handle pointers better.
21110        Delete the private object in the dtors, and use RefPtrs
21111        for holding Instances etc.
21112        
21113        * Handle method lookup better.
21114        Allow invocation time method lookup based on the arguments,
21115        which is closer to QtScript behaviour.  Also, cache the
21116        method lists and delete them in the QtClass dtor (stops
21117        a memory leak).
21118        
21119        * Improve JS to Qt data type conversions.
21120        Add some support for Date & RegExp JS objects,
21121        and provide some metrics on the quality of the
21122        conversion.
21123        
21124        * A couple of fixes for autotest failures.
21125        Better support for converting lists, read/write only
21126        QMetaProperty support, modified slot search order...)
21127
21128        * bindings/qt/qt_class.cpp:
21129        (KJS::Bindings::QtClass::QtClass):
21130        (KJS::Bindings::QtClass::~QtClass):
21131        (KJS::Bindings::QtClass::name):
21132        (KJS::Bindings::QtClass::fallbackObject):
21133        (KJS::Bindings::QtClass::methodsNamed):
21134        (KJS::Bindings::QtClass::fieldNamed):
21135        * bindings/qt/qt_class.h:
21136        * bindings/qt/qt_instance.cpp:
21137        (KJS::Bindings::QtInstance::QtInstance):
21138        (KJS::Bindings::QtInstance::~QtInstance):
21139        (KJS::Bindings::QtInstance::getRuntimeObject):
21140        (KJS::Bindings::QtInstance::getClass):
21141        (KJS::Bindings::QtInstance::implementsCall):
21142        (KJS::Bindings::QtInstance::getPropertyNames):
21143        (KJS::Bindings::QtInstance::invokeMethod):
21144        (KJS::Bindings::QtInstance::invokeDefaultMethod):
21145        (KJS::Bindings::QtInstance::stringValue):
21146        (KJS::Bindings::QtInstance::booleanValue):
21147        (KJS::Bindings::QtInstance::valueOf):
21148        (KJS::Bindings::QtField::name):
21149        (KJS::Bindings::QtField::valueFromInstance):
21150        (KJS::Bindings::QtField::setValueToInstance):
21151        * bindings/qt/qt_instance.h:
21152        (KJS::Bindings::QtInstance::getBindingLanguage):
21153        (KJS::Bindings::QtInstance::getObject):
21154        * bindings/qt/qt_runtime.cpp:
21155        (KJS::Bindings::QWKNoDebug::QWKNoDebug):
21156        (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
21157        (KJS::Bindings::QWKNoDebug::operator<<):
21158        (KJS::Bindings::):
21159        (KJS::Bindings::valueRealType):
21160        (KJS::Bindings::convertValueToQVariant):
21161        (KJS::Bindings::convertQVariantToValue):
21162        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
21163        (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
21164        (KJS::Bindings::QtRuntimeMethod::codeType):
21165        (KJS::Bindings::QtRuntimeMethod::execute):
21166        (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
21167        (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
21168        (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
21169        (KJS::Bindings::QtMethodMatchType::):
21170        (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
21171        (KJS::Bindings::QtMethodMatchType::kind):
21172        (KJS::Bindings::QtMethodMatchType::isValid):
21173        (KJS::Bindings::QtMethodMatchType::isVariant):
21174        (KJS::Bindings::QtMethodMatchType::isMetaType):
21175        (KJS::Bindings::QtMethodMatchType::isUnresolved):
21176        (KJS::Bindings::QtMethodMatchType::isMetaEnum):
21177        (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
21178        (KJS::Bindings::QtMethodMatchType::variant):
21179        (KJS::Bindings::QtMethodMatchType::metaType):
21180        (KJS::Bindings::QtMethodMatchType::metaEnum):
21181        (KJS::Bindings::QtMethodMatchType::unresolved):
21182        (KJS::Bindings::QtMethodMatchType::typeId):
21183        (KJS::Bindings::QtMethodMatchType::name):
21184        (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
21185        (KJS::Bindings::QtMethodMatchData::isValid):
21186        (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
21187        (KJS::Bindings::indexOfMetaEnum):
21188        (KJS::Bindings::findMethodIndex):
21189        (KJS::Bindings::findSignalIndex):
21190        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
21191        (KJS::Bindings::QtRuntimeMetaMethod::mark):
21192        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
21193        (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
21194        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
21195        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
21196        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
21197        (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
21198        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
21199        (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
21200        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
21201        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
21202        (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
21203        (KJS::Bindings::QtConnectionObject::metaObject):
21204        (KJS::Bindings::QtConnectionObject::qt_metacast):
21205        (KJS::Bindings::QtConnectionObject::qt_metacall):
21206        (KJS::Bindings::QtConnectionObject::execute):
21207        (KJS::Bindings::QtConnectionObject::match):
21208        (KJS::Bindings::::QtArray):
21209        (KJS::Bindings::::~QtArray):
21210        (KJS::Bindings::::rootObject):
21211        (KJS::Bindings::::setValueAt):
21212        (KJS::Bindings::::valueAt):
21213        * bindings/qt/qt_runtime.h:
21214        (KJS::Bindings::QtField::):
21215        (KJS::Bindings::QtField::QtField):
21216        (KJS::Bindings::QtField::fieldType):
21217        (KJS::Bindings::QtMethod::QtMethod):
21218        (KJS::Bindings::QtMethod::name):
21219        (KJS::Bindings::QtMethod::numParameters):
21220        (KJS::Bindings::QtArray::getLength):
21221        (KJS::Bindings::QtRuntimeMethod::d_func):
21222        (KJS::Bindings::QtRuntimeMetaMethod::d_func):
21223        (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
21224        (KJS::Bindings::):
21225        * bindings/runtime.cpp:
21226        (KJS::Bindings::Instance::createBindingForLanguageInstance):
21227        (KJS::Bindings::Instance::createRuntimeObject):
21228        (KJS::Bindings::Instance::reallyCreateRuntimeObject):
21229        * bindings/runtime.h:
21230
212312008-01-22  Anders Carlsson  <andersca@apple.com>
21232
21233        Reviewed by Darin and Adam.
21234
21235        <rdar://problem/5688975>
21236        div element on microsoft site has wrong left offset.
21237        
21238        Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 
21239        (and is what the Silverlight plug-in expects).
21240        
21241        * bindings/NP_jsobject.cpp:
21242        (_NPN_GetProperty):
21243
212442008-01-21  Geoffrey Garen  <ggaren@apple.com>
21245
21246        Reviewed by Maciej Stachowiak.
21247        
21248        Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
21249        REGRESSION: Amazon.com crash (ActivationImp)
21250        
21251        (and a bunch of other crashes)
21252        
21253        Plus, a .7% SunSpider speedup to boot.
21254        
21255        Replaced the buggy currentExec and savedExec mechanisms with an
21256        explicit ExecState stack.
21257
21258        * kjs/collector.cpp:
21259        (KJS::Collector::collect): Explicitly mark the ExecState stack.
21260
21261        (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
21262        behavior: We no longer throw an exception in any global ExecStates,
21263        since global ExecStates are more like pseudo-ExecStates, and aren't
21264        used for script execution. (It's unclear what would happen if you left
21265        an exception waiting around in a global ExecState, but it probably
21266        wouldn't be good.)
21267
212682008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
21269
21270        Reviewed by Alp Toker.
21271
21272        http://bugs.webkit.org/show_bug.cgi?id=16955
21273        Get errors when cross-compile webkit-gtk
21274
21275        * GNUmakefile.am: removed ICU_CFLAGS
21276
212772008-01-18  Kevin McCullough  <kmccullough@apple.com>
21278
21279        - Build fix.
21280
21281        * kjs/ustring.h:
21282
212832008-01-18  Kevin McCullough  <kmccullough@apple.com>
21284
21285        - Build fix.
21286
21287        * kjs/ustring.cpp:
21288        * kjs/ustring.h:
21289        (KJS::UString::cost):
21290
212912008-01-18  Kevin McCullough  <kmccullough@apple.com>
21292
21293        Reviewed by Geoff.
21294
21295        - Correctly report cost of appended strings to trigger GC.
21296
21297        * kjs/ustring.cpp:
21298        (KJS::UString::Rep::create):
21299        (KJS::UString::UString): Don't create unnecssary objects.
21300        (KJS::UString::cost): Report cost if necessary but also keep track of 
21301        reported cost.
21302        * kjs/ustring.h:
21303
213042008-01-18  Simon Hausmann  <hausmann@webkit.org>
21305
21306        Reviewed by Holger.
21307
21308        Fix return type conversions from Qt slots to JS values.
21309        
21310        This also fixes fast/dom/open-and-close-by-DOM.html, which called
21311        layoutTestController.windowCount().
21312        
21313        When constructing the QVariant that holds the return type we cannot
21314        use the QVarian(Type) constuctor as that will create a null variant.
21315        We have to use the QVariant(Type, void *) constructor instead, just
21316        like in QMetaObject::read() for example.
21317        
21318
21319        * bindings/qt/qt_instance.cpp:
21320        (KJS::Bindings::QtInstance::getRuntimeObject):
21321
213222008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
21323
21324        Reviewed by Simon Hausmann <hausmann@webkit.org>.
21325
21326        Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
21327        
21328
21329        * kjs/collector.cpp:
21330        (KJS::Collector::heapAllocate):
21331
213322008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
21333
21334        Reviewed by Simon Hausmann <hausmann@webkit.org>.
21335
21336        Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
21337        
21338
21339        * wtf/Platform.h:
21340
213412008-01-17  Antti Koivisto  <antti@apple.com>
21342
21343        Fix Windows build.
21344
21345        * kjs/regexp_object.cpp:
21346        (KJS::regExpProtoFuncToString):
21347
213482008-01-16  Sam Weinig  <sam@webkit.org>
21349
21350        Reviewed by Darin.
21351
21352        Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
21353        Convert remaining JS function objects to use the new PrototypeFunction class
21354
21355        - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
21356          own static function implementations so that they can be used with the
21357          PrototypeFunction class.  SunSpider says this is 1.003x as fast.
21358
21359        * kjs/JSGlobalObject.cpp:
21360        (KJS::JSGlobalObject::reset):
21361        * kjs/array_object.h:
21362        * kjs/bool_object.cpp:
21363        (KJS::BooleanInstance::BooleanInstance):
21364        (KJS::BooleanPrototype::BooleanPrototype):
21365        (KJS::booleanProtoFuncToString):
21366        (KJS::booleanProtoFuncValueOf):
21367        (KJS::BooleanObjectImp::BooleanObjectImp):
21368        (KJS::BooleanObjectImp::implementsConstruct):
21369        (KJS::BooleanObjectImp::construct):
21370        (KJS::BooleanObjectImp::callAsFunction):
21371        * kjs/bool_object.h:
21372        (KJS::BooleanInstance::classInfo):
21373        * kjs/error_object.cpp:
21374        (KJS::ErrorPrototype::ErrorPrototype):
21375        (KJS::errorProtoFuncToString):
21376        * kjs/error_object.h:
21377        * kjs/function.cpp:
21378        (KJS::globalFuncEval):
21379        (KJS::globalFuncParseInt):
21380        (KJS::globalFuncParseFloat):
21381        (KJS::globalFuncIsNaN):
21382        (KJS::globalFuncIsFinite):
21383        (KJS::globalFuncDecodeURI):
21384        (KJS::globalFuncDecodeURIComponent):
21385        (KJS::globalFuncEncodeURI):
21386        (KJS::globalFuncEncodeURIComponent):
21387        (KJS::globalFuncEscape):
21388        (KJS::globalFuncUnEscape):
21389        (KJS::globalFuncKJSPrint):
21390        (KJS::PrototypeFunction::PrototypeFunction):
21391        * kjs/function.h:
21392        * kjs/function_object.cpp:
21393        (KJS::FunctionPrototype::FunctionPrototype):
21394        (KJS::functionProtoFuncToString):
21395        (KJS::functionProtoFuncApply):
21396        (KJS::functionProtoFuncCall):
21397        * kjs/function_object.h:
21398        * kjs/number_object.cpp:
21399        (KJS::NumberPrototype::NumberPrototype):
21400        (KJS::numberProtoFuncToString):
21401        (KJS::numberProtoFuncToLocaleString):
21402        (KJS::numberProtoFuncValueOf):
21403        (KJS::numberProtoFuncToFixed):
21404        (KJS::numberProtoFuncToExponential):
21405        (KJS::numberProtoFuncToPrecision):
21406        * kjs/number_object.h:
21407        (KJS::NumberInstance::classInfo):
21408        (KJS::NumberObjectImp::classInfo):
21409        (KJS::NumberObjectImp::):
21410        * kjs/object_object.cpp:
21411        (KJS::ObjectPrototype::ObjectPrototype):
21412        (KJS::objectProtoFuncValueOf):
21413        (KJS::objectProtoFuncHasOwnProperty):
21414        (KJS::objectProtoFuncIsPrototypeOf):
21415        (KJS::objectProtoFuncDefineGetter):
21416        (KJS::objectProtoFuncDefineSetter):
21417        (KJS::objectProtoFuncLookupGetter):
21418        (KJS::objectProtoFuncLookupSetter):
21419        (KJS::objectProtoFuncPropertyIsEnumerable):
21420        (KJS::objectProtoFuncToLocaleString):
21421        (KJS::objectProtoFuncToString):
21422        * kjs/object_object.h:
21423        * kjs/regexp_object.cpp:
21424        (KJS::RegExpPrototype::RegExpPrototype):
21425        (KJS::regExpProtoFuncTest):
21426        (KJS::regExpProtoFuncExec):
21427        (KJS::regExpProtoFuncCompile):
21428        (KJS::regExpProtoFuncToString):
21429        * kjs/regexp_object.h:
21430
214312008-01-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
21432
21433        Reviewed by Maciej & Darin.
21434
21435        Fixes Bug 16868: Gmail crash
21436          and Bug 16871: Crash when loading apple.com/startpage
21437
21438        <http://bugs.webkit.org/show_bug.cgi?id=16868>
21439        <rdar://problem/5686108>
21440
21441        <http://bugs.webkit.org/show_bug.cgi?id=16871>
21442        <rdar://problem/5686670>
21443
21444        Adds ActivationImp tear-off for cross-window eval() and fixes an
21445        existing garbage collection issue exposed by the ActivationImp tear-off
21446        patch (r29425) that can occur when an ExecState's m_callingExec is
21447        different than its m_savedExec.
21448
21449        * kjs/ExecState.cpp:
21450        (KJS::ExecState::mark):
21451        * kjs/function.cpp:
21452        (KJS::GlobalFuncImp::callAsFunction):
21453
214542008-01-16  Sam Weinig  <sam@webkit.org>
21455
21456        Reviewed by Oliver.
21457
21458        Clean up MathObjectImp, it needed a little scrubbing.
21459
21460        * kjs/math_object.cpp:
21461        (KJS::MathObjectImp::MathObjectImp):
21462        (KJS::MathObjectImp::getOwnPropertySlot):
21463        (KJS::MathObjectImp::getValueProperty):
21464        (KJS::mathProtoFuncACos):
21465        (KJS::mathProtoFuncASin):
21466        (KJS::mathProtoFuncATan):
21467        (KJS::mathProtoFuncATan2):
21468        (KJS::mathProtoFuncCos):
21469        (KJS::mathProtoFuncExp):
21470        (KJS::mathProtoFuncLog):
21471        (KJS::mathProtoFuncSin):
21472        (KJS::mathProtoFuncSqrt):
21473        (KJS::mathProtoFuncTan):
21474        * kjs/math_object.h:
21475        (KJS::MathObjectImp::classInfo):
21476        (KJS::MathObjectImp::):
21477
214782008-01-16  Sam Weinig  <sam@webkit.org>
21479
21480        Reviewed by Geoffrey Garen.
21481
21482        Rename Lexer variable bol to atLineStart.
21483
21484        * kjs/lexer.cpp:
21485        (KJS::Lexer::Lexer):
21486        (KJS::Lexer::setCode):
21487        (KJS::Lexer::nextLine):
21488        (KJS::Lexer::lex):
21489        * kjs/lexer.h:
21490
214912008-01-16  Sam Weinig  <sam@webkit.org>
21492
21493        Reviewed by Geoffrey Garen and Anders Carlsson.
21494
21495        Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
21496        and we have many features that are not included in the ECMA spec.
21497
21498        * kjs/lexer.cpp:
21499        (KJS::Lexer::Lexer):
21500        (KJS::Lexer::setCode):
21501        (KJS::Lexer::nextLine):
21502        (KJS::Lexer::lex):
21503        * kjs/lexer.h:
21504        * kjs/string_object.cpp:
21505        * kjs/string_object.h:
21506
215072008-01-15  Sam Weinig  <sam@webkit.org>
21508
21509        Reviewed by Geoffrey Garen.
21510
21511        Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size
21512
21513        - This changes the way JS functions that use Lookup tables are handled.  Instead of using
21514          one class per function, which allowed specialization of the virtual callAsFunction
21515          method, we now use one class, PrototypeFunction, which takes a pointer to a static
21516          function to use as the implementation.  This significantly decreases the binary size
21517          of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
21518          speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
21519          wiggle room from the original 1% speedup) and keeps the functions implementations in separate
21520          functions to help with optimizations.
21521
21522        * JavaScriptCore.exp:
21523        * JavaScriptCore.xcodeproj/project.pbxproj:
21524        * kjs/array_object.cpp:
21525        (KJS::arrayProtoFuncToString):
21526        (KJS::arrayProtoFuncToLocaleString):
21527        (KJS::arrayProtoFuncJoin):
21528        (KJS::arrayProtoFuncConcat):
21529        (KJS::arrayProtoFuncPop):
21530        (KJS::arrayProtoFuncPush):
21531        (KJS::arrayProtoFuncReverse):
21532        (KJS::arrayProtoFuncShift):
21533        (KJS::arrayProtoFuncSlice):
21534        (KJS::arrayProtoFuncSort):
21535        (KJS::arrayProtoFuncSplice):
21536        (KJS::arrayProtoFuncUnShift):
21537        (KJS::arrayProtoFuncFilter):
21538        (KJS::arrayProtoFuncMap):
21539        (KJS::arrayProtoFuncEvery):
21540        (KJS::arrayProtoFuncForEach):
21541        (KJS::arrayProtoFuncSome):
21542        (KJS::arrayProtoFuncIndexOf):
21543        (KJS::arrayProtoFuncLastIndexOf):
21544        * kjs/array_object.h:
21545        * kjs/date_object.cpp:
21546        (KJS::DatePrototype::getOwnPropertySlot):
21547        (KJS::dateProtoFuncToString):
21548        (KJS::dateProtoFuncToUTCString):
21549        (KJS::dateProtoFuncToDateString):
21550        (KJS::dateProtoFuncToTimeString):
21551        (KJS::dateProtoFuncToLocaleString):
21552        (KJS::dateProtoFuncToLocaleDateString):
21553        (KJS::dateProtoFuncToLocaleTimeString):
21554        (KJS::dateProtoFuncValueOf):
21555        (KJS::dateProtoFuncGetTime):
21556        (KJS::dateProtoFuncGetFullYear):
21557        (KJS::dateProtoFuncGetUTCFullYear):
21558        (KJS::dateProtoFuncToGMTString):
21559        (KJS::dateProtoFuncGetMonth):
21560        (KJS::dateProtoFuncGetUTCMonth):
21561        (KJS::dateProtoFuncGetDate):
21562        (KJS::dateProtoFuncGetUTCDate):
21563        (KJS::dateProtoFuncGetDay):
21564        (KJS::dateProtoFuncGetUTCDay):
21565        (KJS::dateProtoFuncGetHours):
21566        (KJS::dateProtoFuncGetUTCHours):
21567        (KJS::dateProtoFuncGetMinutes):
21568        (KJS::dateProtoFuncGetUTCMinutes):
21569        (KJS::dateProtoFuncGetSeconds):
21570        (KJS::dateProtoFuncGetUTCSeconds):
21571        (KJS::dateProtoFuncGetMilliSeconds):
21572        (KJS::dateProtoFuncGetUTCMilliseconds):
21573        (KJS::dateProtoFuncGetTimezoneOffset):
21574        (KJS::dateProtoFuncSetTime):
21575        (KJS::dateProtoFuncSetMilliSeconds):
21576        (KJS::dateProtoFuncSetUTCMilliseconds):
21577        (KJS::dateProtoFuncSetSeconds):
21578        (KJS::dateProtoFuncSetUTCSeconds):
21579        (KJS::dateProtoFuncSetMinutes):
21580        (KJS::dateProtoFuncSetUTCMinutes):
21581        (KJS::dateProtoFuncSetHours):
21582        (KJS::dateProtoFuncSetUTCHours):
21583        (KJS::dateProtoFuncSetDate):
21584        (KJS::dateProtoFuncSetUTCDate):
21585        (KJS::dateProtoFuncSetMonth):
21586        (KJS::dateProtoFuncSetUTCMonth):
21587        (KJS::dateProtoFuncSetFullYear):
21588        (KJS::dateProtoFuncSetUTCFullYear):
21589        (KJS::dateProtoFuncSetYear):
21590        (KJS::dateProtoFuncGetYear):
21591        * kjs/date_object.h:
21592        * kjs/function.cpp:
21593        (KJS::PrototypeFunction::PrototypeFunction):
21594        (KJS::PrototypeFunction::callAsFunction):
21595        * kjs/function.h:
21596        * kjs/lookup.h:
21597        (KJS::HashEntry::):
21598        (KJS::staticFunctionGetter):
21599        * kjs/math_object.cpp:
21600        (KJS::mathProtoFuncAbs):
21601        (KJS::mathProtoFuncACos):
21602        (KJS::mathProtoFuncASin):
21603        (KJS::mathProtoFuncATan):
21604        (KJS::mathProtoFuncATan2):
21605        (KJS::mathProtoFuncCeil):
21606        (KJS::mathProtoFuncCos):
21607        (KJS::mathProtoFuncExp):
21608        (KJS::mathProtoFuncFloor):
21609        (KJS::mathProtoFuncLog):
21610        (KJS::mathProtoFuncMax):
21611        (KJS::mathProtoFuncMin):
21612        (KJS::mathProtoFuncPow):
21613        (KJS::mathProtoFuncRandom):
21614        (KJS::mathProtoFuncRound):
21615        (KJS::mathProtoFuncSin):
21616        (KJS::mathProtoFuncSqrt):
21617        (KJS::mathProtoFuncTan):
21618        * kjs/math_object.h:
21619        * kjs/string_object.cpp:
21620        (KJS::stringProtoFuncToString):
21621        (KJS::stringProtoFuncValueOf):
21622        (KJS::stringProtoFuncCharAt):
21623        (KJS::stringProtoFuncCharCodeAt):
21624        (KJS::stringProtoFuncConcat):
21625        (KJS::stringProtoFuncIndexOf):
21626        (KJS::stringProtoFuncLastIndexOf):
21627        (KJS::stringProtoFuncMatch):
21628        (KJS::stringProtoFuncSearch):
21629        (KJS::stringProtoFuncReplace):
21630        (KJS::stringProtoFuncSlice):
21631        (KJS::stringProtoFuncSplit):
21632        (KJS::stringProtoFuncSubstr):
21633        (KJS::stringProtoFuncSubstring):
21634        (KJS::stringProtoFuncToLowerCase):
21635        (KJS::stringProtoFuncToUpperCase):
21636        (KJS::stringProtoFuncToLocaleLowerCase):
21637        (KJS::stringProtoFuncToLocaleUpperCase):
21638        (KJS::stringProtoFuncLocaleCompare):
21639        (KJS::stringProtoFuncBig):
21640        (KJS::stringProtoFuncSmall):
21641        (KJS::stringProtoFuncBlink):
21642        (KJS::stringProtoFuncBold):
21643        (KJS::stringProtoFuncFixed):
21644        (KJS::stringProtoFuncItalics):
21645        (KJS::stringProtoFuncStrike):
21646        (KJS::stringProtoFuncSub):
21647        (KJS::stringProtoFuncSup):
21648        (KJS::stringProtoFuncFontcolor):
21649        (KJS::stringProtoFuncFontsize):
21650        (KJS::stringProtoFuncAnchor):
21651        (KJS::stringProtoFuncLink):
21652        * kjs/string_object.h:
21653
216542008-01-15  Geoffrey Garen  <ggaren@apple.com>
21655
21656        Reviewed by Adam Roben.
21657        
21658        Some tweaks to our headerdoc, suggested by David Gatwood on the docs
21659        team.
21660
21661        * API/JSBase.h:
21662        * API/JSObjectRef.h:
21663        * API/JSStringRef.h:
21664        * API/JSValueRef.h:
21665
216662008-01-15  Alp Toker  <alp@atoker.com>
21667
21668        Rubber-stamped by Anders.
21669
21670        Make the HTTP backend configurable in the GTK+ port. curl is currently
21671        the only option.
21672
21673        * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK
21674
216752008-01-15  Sam Weinig  <sam@webkit.org>
21676
21677        Reviewed by Beth Dakin.
21678
21679        Remove unneeded variable.
21680
21681        * kjs/string_object.cpp:
21682        (KJS::StringProtoFuncSubstr::callAsFunction):
21683
216842008-01-14  Steve Falkenburg  <sfalken@apple.com>
21685
21686        Use shared vsprops for most vcproj properties.
21687        
21688        Reviewed by Darin.
21689
21690        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
21691        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
21692        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
21693
216942008-01-14  Adam Roben  <aroben@apple.com>
21695
21696        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
21697        some headers that were missing from the vcproj so their contents will
21698        be included in Find in Files.
21699
217002008-01-14  Adam Roben  <aroben@apple.com>
21701
21702        Fix Bug 16871: Crash when loading apple.com/startpage
21703
21704        <http://bugs.webkit.org/show_bug.cgi?id=16871>
21705        <rdar://problem/5686670>
21706
21707        Patch written by Darin, reviewed by me.
21708
21709        * kjs/ExecState.cpp:
21710        (KJS::ExecState::mark): Call ActivationImp::markChildren if our
21711        m_activation is on the stack. This is what ScopeChain::mark also does,
21712        but apparently in some cases it's possible for an ExecState's
21713        ActivationImp to not be in any ScopeChain.
21714
217152008-01-14  Kevin McCullough  <kmccullough@apple.com>
21716
21717        Reviewed by Oliver.
21718
21719        -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
21720        trying to view techreport.com comments
21721        - We need to set values in the map, because if they are already in the
21722        map they will not be reset when we use add().
21723
21724        * kjs/array_instance.cpp:
21725        (KJS::ArrayInstance::put):
21726
217272008-01-14  Darin Adler  <darin@apple.com>
21728
21729        Reviewed by Adam.
21730
21731        - re-speed-up the page load test (my StringImpl change slowed it down)
21732
21733        * wtf/RefCounted.h:
21734        (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
21735        count other than 0. Eventually everyone will want to start with a 1. This is a
21736        staged change. For now, there's a default of 0, and you can specify 1. Later,
21737        there will be no default and everyone will have to specify. And then later, there
21738        will be a default of 1. Eventually, we can take away even the option of starting
21739        with 0!
21740
21741        * wtf/Vector.h:
21742        (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
21743        overhead of first constructing something empty and then calling resize.
21744        (WTF::Vector::clear): Sped up the common case of calling clear on an empty
21745        vector by adding a check for that case.
21746        (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
21747        in the case of vectors with no inline capacity (normal vectors) by leaving out
21748        the code to copy the inline buffer in that case.
21749
217502008-01-14  Alexey Proskuryakov  <ap@webkit.org>
21751
21752        Reviewed by David Kilzer.
21753
21754        http://bugs.webkit.org/show_bug.cgi?id=16787
21755        array.splice() with 1 element not working
21756
21757        Test: fast/js/array-splice.html
21758
21759        * kjs/array_object.cpp:
21760        (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
21761        some other edge cases.
21762
217632008-01-13  Steve Falkenburg  <sfalken@apple.com>
21764
21765        Share common files across projects.
21766        
21767        Unify vsprops files
21768        Debug:          common.vsprops, debug.vsprops
21769        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
21770        Release:        common.vsprops, release.vsprops
21771        
21772        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
21773        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.
21774
21775        Reviewed by Adam Roben.
21776
21777        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21778        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
21779        * JavaScriptCore.vcproj/debug.vsprops: Removed.
21780        * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
21781        * JavaScriptCore.vcproj/release.vsprops: Removed.
21782        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
21783
217842008-01-13  Marius Bugge Monsen  <mbm@trolltech.com>
21785
21786        Contributions and review by Adriaan de Groot,
21787        Simon Hausmann, Eric Seidel, and Darin Adler.
21788
21789        - http://bugs.webkit.org/show_bug.cgi?id=16590
21790          Compilation fixes for Solaris.
21791
21792        * kjs/DateMath.h:
21793        (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
21794        for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
21795        fields.
21796        (KJS::GregorianDateTime::operator tm): Ditto.
21797
21798        * kjs/collector.cpp:
21799        (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.
21800
21801        * wtf/MathExtras.h:
21802        (isfinite): Implement for Solaris.
21803        (isinf): Ditto.
21804        (signbit): Ditto. But this one is wrong, so I added a FIXME.
21805
21806        * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.
21807
218082008-01-13  Michael Goddard  <michael.goddard@trolltech.com>
21809
21810        Reviewed by Anders Carlsson.
21811
21812        Add binding language type to Instance.
21813        Allows runtime determination of the type of an
21814        Instance, to allow safe casting.  Doesn't actually
21815        add any safe casting yet, though.
21816
21817        Add a helper function to get an Instance from a JSObject*.
21818        Given an object and the expected binding language, see if
21819        the JSObject actually wraps an Instance of the given type
21820        and return it.  Otherwise return 0.
21821
21822        Move RuntimeObjectImp creations into Instance.
21823        Make the ctor protected, and Instance a friend class, so
21824        that all creation of RuntimeObjectImps goes through
21825        one place.
21826
21827        Remove copy ctor/assignment operator for QtInstance.
21828        Instance itself is Noncopyable, so QtInstance doesn't
21829        need to have these.
21830
21831        Add caching for QtInstance and associated RuntimeObjectImps.
21832        Push any dealings with QtLanguage bindings into QtInstance,
21833        and cache them there, rather than in the Instance layer.  Add
21834        a QtRuntimeObjectImp to help with caching.
21835
21836        * JavaScriptCore.exp:
21837        * bindings/c/c_instance.h:
21838        * bindings/jni/jni_instance.h:
21839        * bindings/objc/objc_instance.h:
21840        * bindings/qt/qt_instance.cpp:
21841        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
21842        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
21843        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
21844        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
21845        (KJS::Bindings::QtInstance::QtInstance):
21846        (KJS::Bindings::QtInstance::~QtInstance):
21847        (KJS::Bindings::QtInstance::getQtInstance):
21848        (KJS::Bindings::QtInstance::getRuntimeObject):
21849        * bindings/qt/qt_instance.h:
21850        (KJS::Bindings::QtInstance::getBindingLanguage):
21851        * bindings/runtime.cpp:
21852        (KJS::Bindings::Instance::createBindingForLanguageInstance):
21853        (KJS::Bindings::Instance::createRuntimeObject):
21854        (KJS::Bindings::Instance::getInstance):
21855        * bindings/runtime.h:
21856        * bindings/runtime_object.h:
21857        (KJS::RuntimeObjectImp::getInternalInstance):
21858
218592008-01-12  Alp Toker  <alp@atoker.com>
21860
21861        Reviewed by Mark Rowe.
21862
21863        Hide non-public symbols in GTK+/autotools release builds.
21864
21865        * GNUmakefile.am:
21866
218672008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
21868
21869        Reviewed by Mark Rowe.
21870
21871        Fix http://bugs.webkit.org/show_bug.cgi?id=16852
21872        Fixes leaking of ActivationStackNode objects.
21873
21874        * kjs/JSGlobalObject.cpp:
21875        (KJS::JSGlobalObject::deleteActivationStack):
21876        (KJS::JSGlobalObject::~JSGlobalObject):
21877        (KJS::JSGlobalObject::init):
21878        (KJS::JSGlobalObject::reset):
21879        * kjs/JSGlobalObject.h:
21880
218812008-01-12  Darin Adler  <darin@apple.com>
21882
21883        - try to fix Qt Windows build
21884
21885        * pcre/dftables: Remove reliance on the list form of Perl pipes.
21886
218872008-01-12  Darin Adler  <darin@apple.com>
21888
21889        - try to fix Qt build
21890
21891        * kjs/function.cpp: Added include of scope_chain_mark.h.
21892        * kjs/scope_chain_mark.h: Added multiple-include guards.
21893
218942008-01-12  Mark Rowe  <mrowe@apple.com>
21895
21896        Another Windows build fix.
21897
21898        * kjs/Activation.h:
21899
219002008-01-12  Mark Rowe  <mrowe@apple.com>
21901
21902        Attempted Windows build fix.  Use struct consistently when forward-declaring
21903        ActivationStackNode and StackActivation.
21904
21905        * kjs/Activation.h:
21906        * kjs/JSGlobalObject.h:
21907
219082008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
21909
21910        Reviewed by Maciej.
21911
21912        Fixes a problem with the ActivationImp tear-off patch (r29425) where
21913        some of the calls to JSGlobalObject::tearOffActivation() were using
21914        the wrong test to determine whether it should leave a relic behind.
21915
21916        * kjs/function.cpp:
21917        (KJS::FunctionImp::argumentsGetter):
21918        (KJS::ActivationImp::getOwnPropertySlot):
21919
219202008-01-11  Geoffrey Garen  <ggaren@apple.com>
21921
21922        Reviewed by Oliver Hunt.
21923        
21924        Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
21925        variable access (16644)
21926        
21927        This bug was caused by var declarations shadowing built-in properties of
21928        the global object.
21929        
21930        To match Firefox, we've decided that var declarations will never shadow
21931        built-in properties of the global object or its prototypes. We used to
21932        behave more like IE, which allows shadowing, but walking that line got
21933        us into trouble with websites that sent us down the Firefox codepath.
21934
21935        * kjs/JSVariableObject.h:
21936        (KJS::JSVariableObject::symbolTableGet): New code to support calling
21937        hasProperty before the variable object is fully initialized (so you
21938        can call it during initialization).
21939
21940        * kjs/nodes.cpp:.
21941        (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
21942        check when looking for duplicates, not getDirect, since it only checks
21943        the property map, and not hasOwnProperty, since it doesn't check
21944        prototypes.
21945        (KJS::EvalNode::processDeclarations): ditto
21946
21947        * kjs/property_slot.h:
21948        (KJS::PropertySlot::ungettableGetter): Best function name evar.
21949
219502008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
21951
21952        Reviewed by Maciej.
21953
21954        Optimized ActivationImp allocation, so that activation records are now
21955        first allocated on an explicitly managed stack and only heap allocated
21956        when necessary. Roughly a 5% improvement on SunSpider, and a larger
21957        improvement on benchmarks that use more function calls.
21958
21959        * JavaScriptCore.xcodeproj/project.pbxproj:
21960        * kjs/Activation.h: Added.
21961        (KJS::ActivationImp::ActivationData::ActivationData):
21962        (KJS::ActivationImp::ActivationImp):
21963        (KJS::ActivationImp::classInfo):
21964        (KJS::ActivationImp::isActivationObject):
21965        (KJS::ActivationImp::isOnStack):
21966        (KJS::ActivationImp::d):
21967        (KJS::StackActivation::StackActivation):
21968        * kjs/ExecState.cpp:
21969        (KJS::ExecState::ExecState):
21970        (KJS::ExecState::~ExecState):
21971        * kjs/ExecState.h:
21972        (KJS::ExecState::replaceScopeChainTop):
21973        (KJS::ExecState::setActivationObject):
21974        (KJS::ExecState::setLocalStorage):
21975        * kjs/JSGlobalObject.cpp:
21976        (KJS::JSGlobalObject::reset):
21977        (KJS::JSGlobalObject::pushActivation):
21978        (KJS::JSGlobalObject::checkActivationCount):
21979        (KJS::JSGlobalObject::popActivationHelper):
21980        (KJS::JSGlobalObject::popActivation):
21981        (KJS::JSGlobalObject::tearOffActivation):
21982        * kjs/JSGlobalObject.h:
21983        * kjs/JSVariableObject.h:
21984        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
21985        (KJS::JSVariableObject::JSVariableObject):
21986        * kjs/function.cpp:
21987        (KJS::FunctionImp::argumentsGetter):
21988        (KJS::ActivationImp::ActivationImp):
21989        (KJS::ActivationImp::~ActivationImp):
21990        (KJS::ActivationImp::init):
21991        (KJS::ActivationImp::getOwnPropertySlot):
21992        (KJS::ActivationImp::markHelper):
21993        (KJS::ActivationImp::mark):
21994        (KJS::ActivationImp::ActivationData::ActivationData):
21995        (KJS::GlobalFuncImp::callAsFunction):
21996        * kjs/function.h:
21997        * kjs/nodes.cpp:
21998        (KJS::PostIncResolveNode::evaluate):
21999        (KJS::PostDecResolveNode::evaluate):
22000        (KJS::PreIncResolveNode::evaluate):
22001        (KJS::PreDecResolveNode::evaluate):
22002        (KJS::ReadModifyResolveNode::evaluate):
22003        (KJS::AssignResolveNode::evaluate):
22004        (KJS::WithNode::execute):
22005        (KJS::TryNode::execute):
22006        (KJS::FunctionBodyNode::processDeclarations):
22007        (KJS::FuncExprNode::evaluate):
22008        * kjs/object.h:
22009        * kjs/scope_chain.h:
22010        (KJS::ScopeChain::replace):
22011        * kjs/scope_chain_mark.h: Added.
22012        (KJS::ScopeChain::mark):
22013
220142008-01-11  Simon Hausmann  <hausmann@webkit.org>
22015
22016        Reviewed by Mark Rowe.
22017
22018        Fix the (clean) qmake build. For generating chartables.c we don't
22019        depend on a separate input source file anymore, the dftables perl
22020        script is enough. So use that instead as value for the .input
22021        variable, to ensure that qmake also generates a rule to call dftables.
22022
22023        * pcre/pcre.pri:
22024
220252008-01-10  Geoffrey Garen  <ggaren@apple.com>
22026
22027        Reviewed by John Sullivan.
22028
22029        Fixed some world leak reports:
22030        * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
22031        Interpreter after running cvs-base suite
22032
22033        * <rdar://problem/5669423> PLT complains about world leak if browser
22034        window is open when PLT starts
22035        
22036        * kjs/collector.h: Added the ability to distinguish between global
22037        objects and GC-protected global objects, since we only consider the
22038        latter to be world leaks.
22039        * kjs/collector.cpp:
22040
220412008-01-11  Mark Rowe  <mrowe@apple.com>
22042
22043        Silence qmake warning about ctgen lacking input.
22044
22045        Rubber-stamped by Alp Toker.
22046
22047        * pcre/pcre.pri:
22048
220492008-01-10  David Kilzer  <ddkilzer@apple.com>
22050
22051        dftables should be rewritten as a script
22052
22053        <http://bugs.webkit.org/show_bug.cgi?id=16818>
22054        <rdar://problem/5681463>
22055
22056        Reviewed by Darin.
22057
22058        Rewrote the dftables utility in Perl.  Attempted to switch all
22059        build systems to call the script directly instead of building
22060        a binary first.  Only the Xcode build was able to be tested.
22061
22062        * DerivedSources.make: Added pcre directory to VPATH and changed
22063        to invoke dftables directly.
22064        * GNUmakefile.am: Removed build information and changed to invoke
22065        dftables directly.
22066        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
22067        dftables project.
22068        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
22069        * JavaScriptCore.vcproj/dftables: Removed.
22070        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
22071        * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
22072        * jscore.bkl: Removed dftables executable definition.
22073        * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
22074        * pcre/dftables.cpp: Removed.
22075        * pcre/dftables.pro: Removed.
22076        * pcre/pcre.pri: Removed references to dftables.cpp and changed to
22077        invoke dftables directly.
22078
220792008-01-10  Dan Bernstein  <mitz@apple.com>
22080
22081        Reviewed by Darin Adler.
22082
22083        - fix http://bugs.webkit.org/show_bug.cgi?id=16782
22084          <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html
22085
22086        The crash resulted from a native object (DumpRenderTree's
22087        EventSender) causing its wrapper to be invalidated (by clicking a
22088        link that replaced the document in the window) and consequently
22089        deallocated. The fix is to use RefPtrs to protect the native object
22090        from deletion by self-invalidation.
22091
22092        * bindings/runtime_method.cpp:
22093        (RuntimeMethod::callAsFunction):
22094        * bindings/runtime_object.cpp:
22095        (RuntimeObjectImp::fallbackObjectGetter):
22096        (RuntimeObjectImp::fieldGetter):
22097        (RuntimeObjectImp::methodGetter):
22098        (RuntimeObjectImp::put):
22099        (RuntimeObjectImp::defaultValue):
22100        (RuntimeObjectImp::callAsFunction):
22101
221022008-01-07  Mark Rowe  <mrowe@apple.com>
22103
22104        Reviewed by Maciej Stachowiak.
22105
22106        Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
22107        where possible.
22108
22109        * kjs/testkjs.cpp:
22110        * wtf/HashTraits.h:
22111
221122008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>
22113
22114        Reviewed by Mark.
22115
22116        Enable SVG_FONTS by default.
22117
22118        * Configurations/JavaScriptCore.xcconfig:
22119
221202008-01-07  Darin Adler  <darin@apple.com>
22121
22122        Rubber stamped by David Kilzer.
22123
22124        - get rid of empty fpconst.cpp
22125
22126        * GNUmakefile.am: Remove fpconst.cpp.
22127        * JavaScriptCore.pri: Ditto.
22128        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
22129        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
22130        * JavaScriptCoreSources.bkl: Ditto.
22131
22132        * kjs/fpconst.cpp: Removed.
22133
221342008-01-07  Darin Adler  <darin@apple.com>
22135
22136        Reviewed by David Kilzer.
22137
22138        - fix alignment problem with NaN and Inf globals
22139
22140        * kjs/fpconst.cpp: Move the contents of this file from here back to
22141        value.cpp. The reason this was in a separate file is that the DARWIN
22142        version of this used a declaration of the globals with a different
22143        type to avoid creating "init routines". That's no longer necessary for
22144        DARWIN and was never necessary for the non-DARWIN code path.
22145        To make this patch easy to merge, I didn't actually delete this file
22146        yet. We'll do that in a separate changeset.
22147
22148        * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
22149        othrewise use the union trick from fpconst.cpp. I think it would be
22150        better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
22151        directly or std::numeric_limits<double>::quiet_nan() and
22152        std::numeric_limits<double>::infinity(). But when I tried that, it
22153        slowed down SunSpider. Someone else could do that cleanup if they
22154        could do it without slowing down the engine.
22155
221562008-01-07  Adam Roben  <aroben@apple.com>
22157
22158        Windows build fix
22159
22160        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
22161        JavaScript.h to the project.
22162        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
22163        Copy JavaScript.h to WEBKITOUTPUTDIR.
22164
221652008-01-07  Timothy Hatcher  <timothy@apple.com>
22166
22167        Reviewed by Darin.
22168
22169        Fix Mac build.
22170
22171        * API/JSNode.c:
22172        * API/JSNode.h:
22173        * API/JSNodeList.c:
22174        * API/JSNodeList.h:
22175        * API/JavaScript.h:
22176        * API/JavaScriptCore.h:
22177        * API/minidom.c:
22178        * JavaScriptCore.xcodeproj/project.pbxproj:
22179
221802008-01-07  Alp Toker  <alp@atoker.com>
22181
22182        Reviewed by Darin.
22183
22184        http://bugs.webkit.org/show_bug.cgi?id=16029
22185        JavaScriptCore.h is not suitable for platforms other than Mac OS X
22186
22187        Introduce a new JavaScriptCore/JavaScript.h public API header. This
22188        should be used by all new portable code using the JavaScriptCore API.
22189
22190        JavaScriptCore/JavaScriptCore.h will remain for compatibility with
22191        existing applications that depend on it including JSStringRefCF.h
22192        which isn't portable.
22193
22194        Also add minidom to the GTK+/autotools build since we can now support
22195        it on all platforms.
22196
22197        * API/JSNode.h:
22198        * API/JSNodeList.h:
22199        * API/JavaScript.h: Added.
22200        * API/JavaScriptCore.h:
22201        * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
22202        * GNUmakefile.am:
22203        * JavaScriptCore.xcodeproj/project.pbxproj:
22204
222052008-01-06  Eric Seidel  <eric@webkit.org>
22206
22207        Reviewed by Sam.
22208
22209        Abstract all DateObject.set* functions in preparation for fixing:
22210        http://bugs.webkit.org/show_bug.cgi?id=16753
22211        
22212        SunSpider had random changes here and there but was overall a wash.
22213
22214        * kjs/date_object.cpp:
22215        (KJS::fillStructuresUsingTimeArgs):
22216        (KJS::setNewValueFromTimeArgs):
22217        (KJS::setNewValueFromDateArgs):
22218        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
22219        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
22220        (KJS::DateProtoFuncSetSeconds::callAsFunction):
22221        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
22222        (KJS::DateProtoFuncSetMinutes::callAsFunction):
22223        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
22224        (KJS::DateProtoFuncSetHours::callAsFunction):
22225        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
22226        (KJS::DateProtoFuncSetDate::callAsFunction):
22227        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
22228        (KJS::DateProtoFuncSetMonth::callAsFunction):
22229        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
22230        (KJS::DateProtoFuncSetFullYear::callAsFunction):
22231        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
22232
222332008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>
22234
22235        Reviewed by Dan.
22236
22237        Add new helper function isArabicChar - SVG Fonts support needs it.
22238
22239        * wtf/unicode/icu/UnicodeIcu.h:
22240        (WTF::Unicode::isArabicChar):
22241        * wtf/unicode/qt4/UnicodeQt4.h:
22242        (WTF::Unicode::isArabicChar):
22243
222442008-01-06  Alp Toker  <alp@atoker.com>
22245
22246        Reviewed by Mark Rowe.
22247
22248        Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
22249        build. (This is already done correctly in DerivedSources.make.) Issue
22250        noticed by Mikkel when building in Cygwin.
22251
22252        Add a missing slash. This was a hack from the qmake build system that
22253        isn't necessary with autotools.
22254
22255        * GNUmakefile.am:
22256
222572008-01-05  Darin Adler  <darin@apple.com>
22258
22259        * API/JSRetainPtr.h: One more file that needed the change below.
22260
222612008-01-05  Darin Adler  <darin@apple.com>
22262
22263        * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
22264
222652008-01-05  Adam Roben  <aroben@apple.com>
22266
22267        Build fix.
22268
22269        Reviewed by Maciej.
22270
22271        * wtf/RetainPtr.h: Use PtrType instead of T* because of the
22272        RemovePointer magic.
22273
222742008-01-05  Darin Adler  <darin@apple.com>
22275
22276        Rubber stamped by Maciej Stachowiak.
22277
22278        - cut down own PIC branches by using a pointer-to-member-data instead of a
22279          pointer-to-member-function in WTF smart pointers
22280
22281        * wtf/OwnArrayPtr.h:
22282        * wtf/OwnPtr.h:
22283        * wtf/PassRefPtr.h:
22284        * wtf/RefPtr.h:
22285        * wtf/RetainPtr.h:
22286        Use a pointer to the m_ptr member instead of the get member.
22287        The GCC compiler generates better code for this idiom.
22288
222892008-01-05  Henry Mason  <hmason@mac.com>
22290
22291        Reviewed by Maciej Stachowiak.
22292
22293        http://bugs.webkit.org/show_bug.cgi?id=16738
22294        Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset
22295
22296        Gives a 0.4% SunSpider boost and prettier code.
22297
22298        * kjs/collector.cpp: Switched to cell offsets from byte offsets
22299        (KJS::Collector::heapAllocate):
22300        (KJS::Collector::sweep):
22301
223022008-01-04  Mark Rowe  <mrowe@apple.com>
22303
22304        Reviewed by Maciej Stachowiak.
22305
22306        Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
22307        Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
22308        was not allocated by any registered malloc zone on the system.
22309
22310        * kjs/CollectorHeapIntrospector.h:
22311        * wtf/FastMalloc.cpp:
22312
223132008-01-04  Alp Toker  <alp@atoker.com>
22314
22315        GTK+ autotools build fix. Terminate empty rules.
22316
22317        * GNUmakefile.am:
22318
223192008-01-03  Simon Hausmann  <hausmann@webkit.org>
22320
22321        Reviewed by Mark Rowe.
22322
22323        Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.
22324
22325        * pcre/pcre_exec.cpp:
22326
223272008-01-03  Darin Adler  <darin@apple.com>
22328
22329        * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
22330        case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
22331        that test to succeed.
22332
223332008-01-02  Darin Adler  <darin@apple.com>
22334
22335        Reviewed by Geoff.
22336
22337        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
22338          JSCRE fails fails to match Acid3 regexp
22339
22340        Test: fast/regex/early-acid3-86.html
22341
22342        The problem was with the cutoff point between backreferences and octal
22343        escape sequences. We need to determine the cutoff point by counting the
22344        total number of capturing brackets, which requires an extra pass through
22345        the expression when compiling it.
22346
22347        * pcre/pcre_compile.cpp:
22348        (CompileData::CompileData): Added numCapturingBrackets. Removed some
22349        unused fields.
22350        (compileBranch): Use numCapturingBrackets when calling checkEscape.
22351        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
22352        checkEscape, and also store the bracket count at the end of the compile.
22353        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
22354        count the number of brackets and then a second time to calculate the length.
22355
223562008-01-02  Darin Adler  <darin@apple.com>
22357
22358        Reviewed by Geoff.
22359
22360        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
22361          JSCRE fails fails to match Acid3 regexp
22362
22363        Test: fast/regex/early-acid3-86.html
22364
22365        The problem was with the cutoff point between backreferences and octal
22366        escape sequences. We need to determine the cutoff point by counting the
22367        total number of capturing brackets, which requires an extra pass through
22368        the expression when compiling it.
22369
22370        * pcre/pcre_compile.cpp:
22371        (CompileData::CompileData): Added numCapturingBrackets. Removed some
22372        unused fields.
22373        (compileBranch): Use numCapturingBrackets when calling checkEscape.
22374        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
22375        checkEscape, and also store the bracket count at the end of the compile.
22376        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
22377        count the number of brackets and then a second time to calculate the length.
22378
223792008-01-02  David Kilzer <ddkilzer@webkit.org>
22380
22381        Reviewed and landed by Darin.
22382
22383        * kjs/nodes.cpp:
22384        (KJS::DoWhileNode::execute): Added a missing return.
22385
223862008-01-02  Darin Adler  <darin@apple.com>
22387
22388        - try to fix Qt build
22389
22390        * wtf/unicode/qt4/UnicodeQt4.h:
22391        (WTF::Unicode::foldCase): Add some missing const.
22392
223932008-01-02  Alice Liu  <alice.liu@apple.com>
22394
22395        Reviewed by Sam Weinig.
22396
22397        need to export ASCIICType.h for use in DRT
22398
22399        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
22400        * wtf/ASCIICType.h:
22401        (WTF::isASCIIUpper):
22402
224032008-01-02  Sam Weinig  <sam@webkit.org>
22404
22405        Reviewed by Beth Dakin.
22406
22407        Cleanup error_object.h/cpp.
22408
22409        * kjs/JSGlobalObject.cpp:
22410        (KJS::JSGlobalObject::reset):
22411        * kjs/error_object.cpp:
22412        (KJS::ErrorInstance::ErrorInstance):
22413        (KJS::ErrorPrototype::ErrorPrototype):
22414        (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
22415        (KJS::ErrorProtoFuncToString::callAsFunction):
22416        (KJS::ErrorObjectImp::ErrorObjectImp):
22417        (KJS::ErrorObjectImp::implementsConstruct):
22418        (KJS::ErrorObjectImp::construct):
22419        (KJS::ErrorObjectImp::callAsFunction):
22420        (KJS::NativeErrorPrototype::NativeErrorPrototype):
22421        (KJS::NativeErrorImp::NativeErrorImp):
22422        (KJS::NativeErrorImp::implementsConstruct):
22423        (KJS::NativeErrorImp::construct):
22424        (KJS::NativeErrorImp::callAsFunction):
22425        (KJS::NativeErrorImp::mark):
22426        * kjs/error_object.h:
22427        (KJS::ErrorInstance::classInfo):
22428        (KJS::NativeErrorImp::classInfo):
22429
224302008-01-02  Mark Rowe  <mrowe@apple.com>
22431
22432        Rubber-stamped by Alp Toker.
22433
22434        * GNUmakefile.am: Add missing dependency on grammar.y.
22435
224362008-01-01  Darin Adler  <darin@apple.com>
22437
22438        Reviewed by Eric.
22439
22440        - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
22441          JSC allows non-identifier codepoints in identifiers (affects Acid3)
22442
22443        Test: fast/js/kde/parse.html
22444
22445        * kjs/lexer.cpp:
22446        (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
22447        start of identifiers from ones inside identifiers. Rejected characters that don't pass
22448        the isIdentStart and isIdentPart tests.
22449        (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.
22450
22451        * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
22452        from \u escapes inside identifiers.
22453
224542008-01-01  Darin Adler  <darin@apple.com>
22455
22456        - rolled scope chain optimization out; it was breaking the world
22457
224582008-01-01  Darin Adler  <darin@apple.com>
22459
22460        Reviewed by Geoff.
22461
22462        - http://bugs.webkit.org/show_bug.cgi?id=16685
22463          eliminate List::empty() to cut down on PIC branches
22464
22465        Also included one other speed-up -- remove the call to reserveCapacity from
22466        FunctionBodyNode::processDeclarations in all but the most unusual cases.
22467
22468        Together these make SunSpider 1.016x as fast.
22469
22470        * JavaScriptCore.exp: Updated.
22471        * kjs/ExecState.cpp:
22472        (KJS::globalEmptyList): Added. Called only when creating global ExecState
22473        instances.
22474        (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
22475        for the three separate node types. Also went through each of the three and
22476        streamlined as much as possible, removing dead code. This prevents us from having
22477        to access the global in the function body version of the constructor.
22478
22479        * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
22480        three that are specific to the different node types that can create new execution
22481        state objects.
22482
22483        * kjs/array_object.cpp:
22484        (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
22485        of List::empty().
22486        (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
22487        (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
22488        (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
22489        (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
22490        * kjs/function.cpp:
22491        (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
22492        (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
22493        * kjs/function_object.cpp:
22494        (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().
22495
22496        * kjs/list.cpp: Removed List::empty.
22497        * kjs/list.h: Ditto.
22498
22499        * kjs/nodes.cpp:
22500        (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
22501        (KJS::ArrayNode::evaluate): Ditto.
22502        (KJS::ObjectLiteralNode::evaluate): Ditto.
22503        (KJS::PropertyListNode::evaluate): Ditto.
22504        (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
22505        before calling reserveCapacity, because it doesn't get inlined the local storage
22506        vector is almost always big enough -- saving the function call overhead is a big
22507        deal.
22508        (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
22509        (KJS::FuncExprNode::evaluate): Ditto.
22510        * kjs/object.cpp:
22511        (KJS::tryGetAndCallProperty): Ditto.
22512        * kjs/property_slot.cpp:
22513        (KJS::PropertySlot::functionGetter): Ditto.
22514        * kjs/string_object.cpp:
22515        (KJS::StringProtoFuncSplit::callAsFunction): Ditto.
22516
225172008-01-01  Darin Adler  <darin@apple.com>
22518
22519        Reviewed by Geoff.
22520
22521        - fix http://bugs.webkit.org/show_bug.cgi?id=16648
22522          REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
22523          <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently
22524
22525        Fixes 34 failing test cases in the fast/regex/test1.html test.
22526
22527        Restored the stack which prevents infinite loops for brackets that match the empty
22528        string; it had been removed as an optimization.
22529
22530        Unfortunately, restoring this stack causes the regular expression test in SunSpider
22531        to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
22532        a correct optimization to restore the speed!
22533
22534        It's possible the original change was on the right track but just off by one.
22535
22536        * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
22537        (MatchStack::pushNewFrame): Add back the logic needed here.
22538        (startNewGroup): Ditto.
22539        (match): Ditto.
22540
225412008-01-01  Darin Adler  <darin@apple.com>
22542
22543        Reviewed by Geoff.
22544
22545        - http://bugs.webkit.org/show_bug.cgi?id=16683
22546          speed up function calls by making ScopeChain::push cheaper
22547
22548        This gives a 1.019x speedup on SunSpider.
22549
22550        After doing this, I realized this probably will be obsolete when the optimization
22551        to avoid creating an activation object is done. When we do that one we should check
22552        if rolling this out will speed things up, since this does add overhead at the time
22553        you copy the scope chain.
22554
22555        * kjs/object.h: Removed the ScopeChain::release function. It was
22556        marked inline, and called in exactly one place, so moved it there.
22557        No idea why it was in this header file!
22558
22559        * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
22560        function that takes another ScopeChain. It was unused. I think we used
22561        it over in WebCore at one point, but not any more.
22562
22563        * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
22564        a class, got rid of its constructor so we can have one that's uninitialized,
22565        and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
22566        mutable so it can be changed in the moveToHeap function. Changed the copy
22567        constructor and assignment operator to call moveToHeap, since the top node
22568        can't be shared when it's embedded in another ScopeChain object. Updated
22569        functions as needed to handle the case where the first object isn't on the
22570        heap or to add casts for cases where it's guaranteed to be. Changed the push
22571        function to always put the new node into the ScopeChain object; it will get
22572        put onto the heap when needed later.
22573
225742008-01-01  Geoffrey Garen  <ggaren@apple.com>
22575
22576        Reviewed by Darin Adler.
22577        
22578        Fixed slight logic error in reserveCapacity, where we would reallocate
22579        the storage buffer unnecessarily.
22580
22581        * wtf/Vector.h:
22582        (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
22583        equal to capacity().
22584
225852008-01-01  Darin Adler  <darin@apple.com>
22586
22587        Reviewed by Oliver.
22588
22589        - http://bugs.webkit.org/show_bug.cgi?id=16684
22590          eliminate debugger overhead from function body execution
22591
22592        Speeds SunSpider up 1.003x. That's a small amount, but measurable.
22593
22594        * JavaScriptCore.exp: Updated.
22595        * kjs/Parser.h:
22596        (KJS::Parser::parse): Create the node with a static member function named create() instead
22597        of using new explicitly.
22598
22599        * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().
22600
22601        * kjs/nodes.cpp:
22602        (KJS::ProgramNode::create): Added. Calls new.
22603        (KJS::EvalNode::create): Ditto.
22604        (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
22605        when a debugger is present.
22606        (KJS::FunctionBodyNode::execute): Removed debugger hooks.
22607        (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
22608        (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
22609        then the debugger again.
22610
22611        * kjs/nodes.h: Added create functions, made the constructors private and protected.
22612
226132007-12-30  Eric Seidel  <eric@webkit.org>
22614
22615        Reviewed by Sam.
22616
22617        More small cleanup to array_object.cpp
22618
22619        * kjs/array_object.cpp:
22620        (KJS::ArrayProtoFuncToString::callAsFunction):
22621        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
22622        (KJS::ArrayProtoFuncJoin::callAsFunction):
22623        (KJS::ArrayProtoFuncConcat::callAsFunction):
22624        (KJS::ArrayProtoFuncReverse::callAsFunction):
22625        (KJS::ArrayProtoFuncShift::callAsFunction):
22626        (KJS::ArrayProtoFuncSlice::callAsFunction):
22627        (KJS::ArrayProtoFuncSort::callAsFunction):
22628        (KJS::ArrayProtoFuncSplice::callAsFunction):
22629        (KJS::ArrayProtoFuncUnShift::callAsFunction):
22630        (KJS::ArrayProtoFuncFilter::callAsFunction):
22631        (KJS::ArrayProtoFuncMap::callAsFunction):
22632        (KJS::ArrayProtoFuncEvery::callAsFunction):
22633
226342007-12-30  Eric Seidel  <eric@webkit.org>
22635
22636        Reviewed by Sam.
22637
22638        Apply wkstyle to array_object.cpp
22639
22640        * kjs/array_object.cpp:
22641        (KJS::ArrayPrototype::ArrayPrototype):
22642        (KJS::ArrayPrototype::getOwnPropertySlot):
22643        (KJS::ArrayProtoFuncConcat::callAsFunction):
22644        (KJS::ArrayProtoFuncPop::callAsFunction):
22645        (KJS::ArrayProtoFuncReverse::callAsFunction):
22646        (KJS::ArrayProtoFuncShift::callAsFunction):
22647        (KJS::ArrayProtoFuncSlice::callAsFunction):
22648        (KJS::ArrayProtoFuncSort::callAsFunction):
22649        (KJS::ArrayProtoFuncSplice::callAsFunction):
22650        (KJS::ArrayProtoFuncUnShift::callAsFunction):
22651        (KJS::ArrayProtoFuncFilter::callAsFunction):
22652        (KJS::ArrayProtoFuncMap::callAsFunction):
22653        (KJS::ArrayProtoFuncEvery::callAsFunction):
22654        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
22655        (KJS::ArrayObjectImp::ArrayObjectImp):
22656        (KJS::ArrayObjectImp::implementsConstruct):
22657        (KJS::ArrayObjectImp::construct):
22658        (KJS::ArrayObjectImp::callAsFunction):
22659
226602007-12-30  Eric Seidel  <eric@webkit.org>
22661
22662        Reviewed by Sam.
22663
22664        Remove maxInt/minInt, replacing with std:max/min<int>()
22665
22666        * kjs/array_object.cpp:
22667        (KJS::ArrayProtoFuncSplice::callAsFunction):
22668        * kjs/operations.cpp:
22669        * kjs/operations.h:
22670
226712007-12-30  Eric Seidel  <eric@webkit.org>
22672
22673        Reviewed by Sam.
22674        
22675        Update Number.toString to properly throw exceptions.
22676        Cleanup code in Number.toString implementation.
22677
22678        * kjs/number_object.cpp:
22679        (KJS::numberToString):
22680        * kjs/object.cpp:
22681        (KJS::Error::create): Remove bogus debug lines.
22682
226832007-12-28  Eric Seidel  <eric@webkit.org>
22684
22685        Reviewed by Oliver.
22686
22687        ASSERT when debugging via Drosera due to missed var lookup optimization.
22688        http://bugs.webkit.org/show_bug.cgi?id=16634
22689        
22690        No test case possible.
22691
22692        * kjs/nodes.cpp:
22693        (KJS::BreakpointCheckStatement::optimizeVariableAccess):
22694        * kjs/nodes.h:
22695
226962007-12-28  Eric Seidel  <eric@webkit.org>
22697
22698        Reviewed by Oliver.
22699
22700        Fix (-0).toFixed() and re-factor a little
22701        Fix (-0).toExponential() and printing of trailing 0s in toExponential
22702        Fix toPrecision(nan) handling
22703        http://bugs.webkit.org/show_bug.cgi?id=16640
22704
22705        * kjs/number_object.cpp:
22706        (KJS::numberToFixed):
22707        (KJS::fractionalPartToString):
22708        (KJS::numberToExponential):
22709        (KJS::numberToPrecision):
22710
227112007-12-28  Eric Seidel  <eric@webkit.org>
22712
22713        Reviewed by Sam.
22714
22715        More changes to make number code readable
22716
22717        * kjs/number_object.cpp:
22718        (KJS::integer_part_noexp):
22719        (KJS::numberToFixed):
22720        (KJS::numberToExponential):
22721
227222007-12-28  Eric Seidel  <eric@webkit.org>
22723
22724        Reviewed by Sam.
22725
22726        More small cleanups to toPrecision
22727
22728        * kjs/number_object.cpp:
22729        (KJS::numberToPrecision):
22730
227312007-12-28  Eric Seidel  <eric@webkit.org>
22732
22733        Reviewed by Sam.
22734
22735        More small attempts to make number code readable
22736
22737        * kjs/number_object.cpp:
22738        (KJS::exponentialPartToString):
22739        (KJS::numberToExponential):
22740        (KJS::numberToPrecision):
22741
227422007-12-28  Eric Seidel  <eric@webkit.org>
22743
22744        Reviewed by Sam.
22745
22746        Break out callAsFunction implementations into static functions
22747
22748        * kjs/number_object.cpp:
22749        (KJS::numberToString):
22750        (KJS::numberToFixed):
22751        (KJS::numberToExponential):
22752        (KJS::numberToPrecision):
22753        (KJS::NumberProtoFunc::callAsFunction):
22754
227552007-12-28  Eric Seidel  <eric@webkit.org>
22756
22757        Reviewed by Sam.
22758
22759        Apply wkstyle/astyle and fix placement of *
22760
22761        * kjs/number_object.cpp:
22762        (KJS::NumberInstance::NumberInstance):
22763        (KJS::NumberPrototype::NumberPrototype):
22764        (KJS::NumberProtoFunc::NumberProtoFunc):
22765        (KJS::integer_part_noexp):
22766        (KJS::intPow10):
22767        (KJS::NumberProtoFunc::callAsFunction):
22768        (KJS::NumberObjectImp::NumberObjectImp):
22769        (KJS::NumberObjectImp::getOwnPropertySlot):
22770        (KJS::NumberObjectImp::getValueProperty):
22771        (KJS::NumberObjectImp::implementsConstruct):
22772        (KJS::NumberObjectImp::construct):
22773        (KJS::NumberObjectImp::callAsFunction):
22774        * kjs/object.cpp:
22775        (KJS::JSObject::put):
22776
227772007-12-27  Eric Seidel  <eric@webkit.org>
22778
22779        Reviewed by Sam.
22780
22781        ASSERT in JavaScriptCore while viewing WICD test case
22782        http://bugs.webkit.org/show_bug.cgi?id=16626
22783        
22784        * kjs/nodes.cpp:
22785        (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
22786
227872007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
22788
22789        Reviewed by Alp Toker.
22790
22791        http://bugs.webkit.org/show_bug.cgi?id=16390
22792        Use autotools or GNU make as the build system for the GTK port
22793
22794        * GNUmakefile.am: Added.
22795
227962007-12-25  Maciej Stachowiak  <mjs@apple.com>
22797        
22798        Reviewed by Oliver.
22799                
22800        - Remove unnecessary redundant check from property setting
22801        http://bugs.webkit.org/show_bug.cgi?id=16602
22802                
22803        1.3% speedup on SunSpider.
22804        
22805        * kjs/object.cpp:
22806        (KJS::JSObject::put): Don't do canPut check when not needed; let
22807        the PropertyMap handle it.        
22808        (KJS::JSObject::canPut): Don't check the static property
22809        table. lookupPut does that already.
22810        
228112007-12-24  Alp Toker  <alp@atoker.com>
22812
22813        Fix builds that don't use AllInOneFile.cpp following breakage
22814        introduced in r28973.
22815
22816        * kjs/grammar.y:
22817
228182007-12-24  Maciej Stachowiak  <mjs@apple.com>
22819
22820        Reviewed by Eric.
22821
22822        - Optimize variable declarations
22823        http://bugs.webkit.org/show_bug.cgi?id=16585
22824        
22825        3.5% speedup on SunSpider.
22826
22827        var statements now result in either assignments or empty statements.
22828        
22829        This allows a couple of optimization opportunities:
22830        - No need to branch at runtime to check if there is an initializer
22831        - EmptyStatementNodes can be removed entirely (also done in this patch)
22832        - Assignment expressions get properly optimized for local variables
22833        
22834        This patch also includes some code cleanup:
22835        - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
22836          thus it is renamed appropriately
22837        - AssignExprNode is gone
22838        
22839        * JavaScriptCore.exp:
22840        * kjs/NodeInfo.h:
22841        * kjs/grammar.y:
22842        * kjs/nodes.cpp:
22843        (KJS::SourceElements::append):
22844        (KJS::ConstDeclNode::ConstDeclNode):
22845        (KJS::ConstDeclNode::optimizeVariableAccess):
22846        (KJS::ConstDeclNode::handleSlowCase):
22847        (KJS::ConstDeclNode::evaluateSingle):
22848        (KJS::ConstDeclNode::evaluate):
22849        (KJS::ConstStatementNode::optimizeVariableAccess):
22850        (KJS::ConstStatementNode::execute):
22851        (KJS::VarStatementNode::optimizeVariableAccess):
22852        (KJS::VarStatementNode::execute):
22853        (KJS::ForInNode::ForInNode):
22854        (KJS::ForInNode::optimizeVariableAccess):
22855        (KJS::ForInNode::execute):
22856        (KJS::FunctionBodyNode::initializeSymbolTable):
22857        (KJS::ProgramNode::initializeSymbolTable):
22858        (KJS::FunctionBodyNode::processDeclarations):
22859        (KJS::ProgramNode::processDeclarations):
22860        (KJS::EvalNode::processDeclarations):
22861        * kjs/nodes.h:
22862        (KJS::DeclarationStacks::):
22863        (KJS::StatementNode::):
22864        (KJS::ConstDeclNode::):
22865        (KJS::ConstStatementNode::):
22866        (KJS::EmptyStatementNode::):
22867        (KJS::VarStatementNode::):
22868        (KJS::ForNode::):
22869        * kjs/nodes2string.cpp:
22870        (KJS::ConstDeclNode::streamTo):
22871        (KJS::ConstStatementNode::streamTo):
22872        (KJS::ScopeNode::streamTo):
22873        (KJS::VarStatementNode::streamTo):
22874        (KJS::ForNode::streamTo):
22875        (KJS::ForInNode::streamTo):
22876
228772007-12-21  Mark Rowe  <mrowe@apple.com>
22878
22879        Reviewed by Oliver Hunt.
22880
22881        * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
22882        being generated in JavaScriptCore.framework.
22883
228842007-12-21  Darin Adler  <darin@apple.com>
22885
22886        Requested by Maciej.
22887
22888        * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
22889        KJS_NO_INLINE. We don't want to have two, and we figured it was better
22890        to keep the one that's in WTF.
22891
228922007-12-21  Darin Adler  <darin@apple.com>
22893
22894        Reviewed by Eric.
22895
22896        - http://bugs.webkit.org/show_bug.cgi?id=16561
22897          remove debugger overhead from non-debugged JavaScript execution
22898
22899        1.022x as fast on SunSpider.
22900
22901        * JavaScriptCore.exp: Updated.
22902
22903        * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
22904        since that more accurately describes the role of this object, which
22905        is a reference-counted wrapper for a Vector.
22906
22907        * kjs/Parser.cpp:
22908        (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
22909        and use plain assignment instead of set.
22910        * kjs/Parser.h: Changed parameter type of didFinishParsing to a
22911        SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
22912        of an OwnPtr as well.
22913
22914        * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
22915        That's now handed inside the constructors for various node types, since we now
22916        use vector swapping instead.
22917
22918        * kjs/nodes.cpp:
22919        (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
22920        and we want exception handling out of the normal code flow.
22921        (KJS::SourceElements::append): Moved here from the header. This now handles
22922        creating a BreakpointCheckStatement for each statement in the debugger case.
22923        That way we can get breakpoint handling without having it in every execute function.
22924        (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
22925        (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
22926        in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
22927        (KJS::BreakpointCheckStatement::streamTo): Added.
22928        (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
22929        type is void.
22930        (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
22931        (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
22932        Changed code to use release since the class now contains a vector rather than
22933        a vector point.
22934        (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
22935        rather than a vector pointer.
22936        (KJS::BlockNode::execute): Ditto.
22937        (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
22938        (KJS::IfNode::execute): Ditto.
22939        (KJS::IfElseNode::execute): Ditto.
22940        (KJS::DoWhileNode::execute): Ditto.
22941        (KJS::WhileNode::execute): Ditto.
22942        (KJS::ContinueNode::execute): Ditto.
22943        (KJS::BreakNode::execute): Ditto.
22944        (KJS::ReturnNode::execute): Ditto.
22945        (KJS::WithNode::execute): Ditto.
22946        (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
22947        rather than a vector pointer.
22948        (KJS::CaseClauseNode::executeStatements): Ditto.
22949        (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
22950        (KJS::ThrowNode::execute): Ditto.
22951        (KJS::TryNode::execute): Ditto.
22952        (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
22953        (KJS::ProgramNode::ProgramNode): Ditto.
22954        (KJS::EvalNode::EvalNode): Ditto.
22955        (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
22956        (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
22957        rather than a vector pointer.
22958
22959        * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
22960        Renamed SourceElementsStub to SourceElements and made it derive from
22961        ParserRefCounted rather than from Node, hold a vector rather than a pointer to
22962        a vector, and changed the release function to swap with another vector rather
22963        than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
22964        vectors instead of pointers to vectors. Added BreakpointCheckStatement.
22965
22966        * kjs/nodes2string.cpp:
22967        (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
22968        to a vector.
22969        (KJS::BlockNode::streamTo): Ditto.
22970        (KJS::CaseClauseNode::streamTo):  Ditto.
22971
22972        * wtf/AlwaysInline.h: Added NEVER_INLINE.
22973        * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
22974        ones in OwnPtr and auto_ptr.
22975        * wtf/RefPtr.h: Ditto.
22976
229772007-12-21  Darin Adler  <darin@apple.com>
22978
22979        - fix broken regression tests
22980
22981        The broken tests were fast/js/do-while-expression-value.html and
22982        fast/js/while-expression-value.html.
22983
22984        * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
22985        an old version of my patch for bug 16471.
22986        (KJS::statementListExecute): The logic here was backwards. Have to set the value
22987        even for non-normal execution results.
22988
229892007-12-20  Alexey Proskuryakov  <ap@webkit.org>
22990
22991        Windows build fix
22992
22993        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
22994        to WebKitBuild.
22995
229962007-12-20  Eric Seidel  <eric@webkit.org>
22997
22998        Reviewed by mjs.
22999        
23000        Split IfNode into IfNode and IfElseNode for speedup.
23001        http://bugs.webkit.org/show_bug.cgi?id=16470
23002        
23003        SunSpider claims this is 1.003x as fast as before.
23004        (This required running with --runs 15 to get consistent enough results to tell!)
23005
23006        * kjs/grammar.y:
23007        * kjs/nodes.cpp:
23008        (KJS::IfNode::optimizeVariableAccess):
23009        (KJS::IfNode::execute):
23010        (KJS::IfNode::getDeclarations):
23011        (KJS::IfElseNode::optimizeVariableAccess):
23012        (KJS::IfElseNode::execute):
23013        (KJS::IfElseNode::getDeclarations):
23014        * kjs/nodes.h:
23015        (KJS::IfNode::):
23016        (KJS::IfElseNode::):
23017        * kjs/nodes2string.cpp:
23018        (KJS::IfNode::streamTo):
23019        (KJS::IfElseNode::streamTo):
23020
230212007-12-20  Darin Adler  <darin@apple.com>
23022
23023        Reviewed by Sam.
23024
23025        * wtf/OwnPtr.h:
23026        (WTF::operator==): Added.
23027        (WTF::operator!=): Added.
23028
230292007-12-20  Geoffrey Garen  <ggaren@apple.com>
23030
23031        Reviewed by Oliver Hunt.
23032        
23033        AST optimization: Avoid NULL-checking ForNode's child nodes.
23034        
23035        0.6% speedup on SunSpider.
23036        
23037        This is a proof of concept patch that demonstrates how to optimize
23038        grammar productions with optional components, like
23039        
23040            for (optional; optional; optional) {
23041                ...
23042            }
23043            
23044        The parser emits NULL for an optional component that is not present.
23045
23046        Instead of checking for a NULL child at execution time, a node that
23047        expects an optional component to be present more often than not checks
23048        for a NULL child at construction time, and substitutes a viable
23049        alternative node in its place.
23050
23051        (We'd like the parser to start emitting NULL a lot more once we teach
23052        it to emit NULL for certain no-op productions like EmptyStatement and
23053        VariableStatement, so, as a foundation, it's important for nodes with
23054        NULL optional components to be fast.)
23055
23056        * kjs/Parser.cpp:
23057        (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
23058        moved didFinishParsing into the .cpp file because adding a branch while
23059        it was in the header file caused a substantial and inexplicable
23060        performance regression. (Did I mention that GCC is crazy?)
23061
23062        * kjs/grammar.y:
23063
23064        * kjs/nodes.cpp:
23065        (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
23066        (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
23067        (KJS::ForNode::execute): No need to check for NULL here.
23068        * kjs/nodes.h:
23069        (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
23070        because it's semantically harmless, and it evaluates to boolean in an
23071        efficient manner.
23072
230732007-12-20  Oliver Hunt  <oliver@apple.com>
23074
23075        Reviewed by Geoff.
23076
23077        Slight logic reordering in JSImmediate::from(double)
23078
23079        This gives a 0.6% improvement in SunSpider.
23080
23081        * kjs/JSImmediate.h:
23082        (KJS::JSImmediate::from):
23083
230842007-12-20  Eric Seidel  <eric@webkit.org>
23085
23086        Reviewed by mjs.
23087
23088        Fix major Array regression introduced by 28899.
23089
23090        SunSpider claims this is at least 1.37x as fast as pre-regression. :)
23091
23092        * kjs/array_instance.cpp: make Arrays fast again!
23093
230942007-12-20  Eric Seidel  <eric@webkit.org>
23095
23096        Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
23097
23098        Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
23099        http://bugs.webkit.org/show_bug.cgi?id=16537
23100
23101        Make msToYear human-readable
23102        Make msToDayInMonth slightly more readable and avoid recalculating msToYear
23103        Remove use of isInLeapYear to avoid calling msToYear
23104        Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
23105        Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
23106
23107        * kjs/DateMath.cpp:
23108        (KJS::daysFrom1970ToYear):
23109        (KJS::msToYear):
23110        (KJS::monthFromDayInYear):
23111        (KJS::checkMonth):
23112        (KJS::dayInMonthFromDayInYear):
23113        (KJS::dateToDayInYear):
23114        (KJS::getDSTOffsetSimple):
23115        (KJS::getDSTOffset):
23116        (KJS::gregorianDateTimeToMS):
23117        (KJS::msToGregorianDateTime):
23118
231192007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>
23120
23121        Reviewed by Darin Adler.
23122
23123        Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
23124        Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
23125        This is for building with X11, as some type and enum names conflict
23126        with #define names in X11 headers.
23127        http://bugs.webkit.org/show_bug.cgi?id=15669
23128
23129        * JavaScriptCore.xcodeproj/project.pbxproj:
23130        * bindings/NP_jsobject.h:
23131        * bindings/npapi.h:
23132        * bindings/npruntime.cpp:
23133        * bindings/npruntime_impl.h:
23134        * bindings/npruntime_priv.h:
23135        * bindings/npruntime_internal.h:
23136        * bindings/testbindings.cpp:
23137        * bindings/c/c_class.h:
23138        * bindings/c/c_runtime.h:
23139        * bindings/c/c_utility.h:
23140
231412007-12-20  Darin Adler  <darin@apple.com>
23142
23143        - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
23144          Completions need to be smaller (or not exist at all)
23145
23146        Same patch as last time with the test failures problem fixed.
23147
23148        * kjs/function.cpp:
23149        (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
23150        type from newExec to see if the execute raised an exception.
23151
231522007-12-20  Darin Adler  <darin@apple.com>
23153
23154        - roll out that last change -- it was causing test failures;
23155          I'll check it back in after fixing them
23156
231572007-12-20  Darin Adler  <darin@apple.com>
23158
23159        Reviewed by Eric.
23160
23161        - http://bugs.webkit.org/show_bug.cgi?id=16471
23162          Completions need to be smaller (or not exist at all)
23163
23164        SuSpider shows 2.4% speedup.
23165
23166        Stop using completions in the execution engine.
23167        Instead, the completion type and label target are both
23168        stored in the ExecState.
23169
23170        * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
23171        * bindings/runtime_method.cpp: Removed unused execute function.
23172        * bindings/runtime_method.h: Ditto.
23173
23174        * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
23175        setCompletionType, setNormalCompletion, setBreakCompletion,
23176        setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
23177        setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
23178
23179        * kjs/completion.h: Removed constructor and getter for target
23180        for break and continue from Completion. This class is now only
23181        used for the public API to Interpreter and such.
23182
23183        * kjs/date_object.h: Removed unused execute function.
23184
23185        * kjs/function.cpp:
23186        (KJS::FunctionImp::callAsFunction): Removed some unneeded
23187        exception processing. Updated to call the new execute function
23188        and to get the completion type from the ExecState. Merged in
23189        the execute function, which repeated some of the same logic and
23190        was called only from here.
23191        (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
23192        * kjs/function.h: Removed execute.
23193
23194        * kjs/interpreter.cpp:
23195        (KJS::Interpreter::evaluate): Added code to convert the result of
23196        execut into a Completion.
23197
23198        * kjs/nodes.cpp:
23199        (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
23200        Now sets the completion type in the ExecState.
23201        (KJS::Node::rethrowException): Now sets the completion type in the
23202        ExecState.
23203        (KJS::StatementNode::hitStatement): Now sets the completion type in
23204        the ExecState.
23205        (KJS::VarStatementNode::execute): Updated to put completion type in
23206        the ExecState instead of a Completion object.
23207        (KJS::statementListExecute): Ditto. Also changed the for loop to use
23208        indices instead of iterators.
23209        (KJS::BlockNode::execute): Updated return type.
23210        (KJS::EmptyStatementNode::execute): Updated to put completion type in
23211        the ExecState instead of a Completion object.
23212        (KJS::ExprStatementNode::execute): Ditto.
23213        (KJS::IfNode::execute): Ditto.
23214        (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
23215        to make the normal case a little faster and moved the end outside the
23216        loop so that "break" can do a break.
23217        (KJS::WhileNode::execute): Ditto.
23218        (KJS::ForNode::execute): Ditto.
23219        (KJS::ForInNode::execute): Ditto.
23220        (KJS::ContinueNode::execute): Updated to put completion type in
23221        the ExecState instead of a Completion object.
23222        (KJS::BreakNode::execute): Ditto.
23223        (KJS::ReturnNode::execute): Ditto.
23224        (KJS::WithNode::execute): Ditto.
23225        (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
23226        execute in its name to reflect the fact that it's a member of the same
23227        family of functions.
23228        (KJS::CaseBlockNode::executeBlock): Ditto.
23229        (KJS::SwitchNode::execute): Ditto.
23230        (KJS::LabelNode::execute): Ditto.
23231        (KJS::ThrowNode::execute): Ditto.
23232        (KJS::TryNode::execute): Ditto.
23233        (KJS::ProgramNode::execute): Ditto.
23234        (KJS::EvalNode::execute): Ditto.
23235        (KJS::FunctionBodyNode::execute): Ditto.
23236        (KJS::FuncDeclNode::execute): Ditto.
23237
23238        * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
23239        hitStatement protected, changed return value of execute to a JSValue,
23240        renamed evalStatements to executeStatements, and evalBlock to executeBlock.
23241
23242        * kjs/number_object.h: Removed unused execute function.
23243
232442007-12-20  Geoffrey Garen  <ggaren@apple.com>
23245
23246        Added Radar number.
23247
23248        * kjs/nodes.cpp:
23249        (KJS::ProgramNode::processDeclarations):
23250
232512007-12-20  Geoffrey Garen  <ggaren@apple.com>
23252
23253        Linux build fix: config.h has to come first.
23254
23255        * kjs/error_object.cpp:
23256
232572007-12-19  Geoffrey Garen  <ggaren@apple.com>
23258
23259        Reviewed by Oliver Hunt.
23260        
23261        Optimized global access to global variables, using a symbol table.
23262        
23263        SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
23264        and a whopping 33.1% speedup on bitops-bitwise-and.
23265
23266        * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
23267        calls to Base::, since JSObject is not always our base class. This
23268        was always a bug, but the bug is even more apparent after some of my
23269        changes.
23270
23271        (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
23272        getOwnPropertySlot. Global declarations are no longer stored in the
23273        property map, so a call to getDirect is insufficient for finding
23274        override properties.
23275
23276        * API/testapi.c: 
23277        * API/testapi.js: Added test for the getDirect change mentioned above.
23278
23279        * kjs/ExecState.cpp: 
23280        * kjs/ExecState.h: Dialed back the optimization to store a direct
23281        pointer to the localStorage buffer. One ExecState can grow the global
23282        object's localStorage without another ExecState's knowledge, so
23283        ExecState can't store a direct pointer to the localStorage buffer
23284        unless/until we invent a way to update all the relevant ExecStates.
23285
23286        * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
23287        operations.
23288        (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
23289        too. Also, clear the property map here, removing the need for a
23290        separate call.
23291
23292        * kjs/JSVariableObject.cpp:
23293        * kjs/JSVariableObject.h: Added support for saving localStorage and the
23294        symbol table to the back/forward cache, and restoring them.
23295
23296        * kjs/function.cpp:
23297        (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
23298        because it's an EvalNode, not a ProgramNode.
23299
23300        * kjs/lookup.h:
23301        (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
23302        that's how the rest of lookup.h works. putDirect is safe here because
23303        cacheGlobalObject is only used for objects whose names are not valid
23304        identifiers.
23305
23306        * kjs/nodes.cpp: The good stuff!
23307
23308        (KJS::EvalNode::processDeclarations): Replaced hasProperty with
23309        the new hasOwnProperty, which is slightly faster.
23310
23311        * kjs/object.h: Nixed clearProperties because clear() does this job now.
23312
23313        * kjs/property_map.cpp:
23314        * kjs/property_map.h: More back/forward cache support.
23315        
23316        * wtf/Vector.h:
23317        (WTF::::grow): Added fast non-branching grow function. I used it in
23318        an earlier version of this patch, even though it's not used anymore.
23319
233202007-12-09  Mark Rowe  <mrowe@apple.com>
23321
23322        Reviewed by Oliver Hunt.
23323
23324        Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
23325        declaration in grammar.h is able to declare members of that type.
23326
23327        * kjs/NodeInfo.h: Added.
23328        (KJS::createNodeInfo):
23329        (KJS::mergeDeclarationLists):
23330        (KJS::appendToVarDeclarationList):
23331        * kjs/grammar.y:
23332        * kjs/lexer.cpp:
23333
233342007-12-19  Oliver Hunt  <oliver@apple.com>
23335
23336        Make appendToVarDeclarationList static
23337
23338        RS=Weinig.
23339
23340        * kjs/grammar.y:
23341
233422007-12-18  Oliver Hunt  <oliver@apple.com>
23343
23344        Remove dead code due to removal of post-parse declaration discovery.
23345
23346        RS=Geoff.
23347
23348        Due to the removal of the declaration discovery pass after parsing we
23349        no longer need any of the logic used for that discovery.
23350
23351        * kjs/nodes.cpp:
23352        (KJS::Node::Node):
23353        (KJS::VarDeclNode::VarDeclNode):
23354        (KJS::BlockNode::BlockNode):
23355        (KJS::ForInNode::ForInNode):
23356        (KJS::CaseBlockNode::CaseBlockNode):
23357        * kjs/nodes.h:
23358        (KJS::VarStatementNode::):
23359        (KJS::IfNode::):
23360        (KJS::DoWhileNode::):
23361        (KJS::WhileNode::):
23362        (KJS::WithNode::):
23363        (KJS::LabelNode::):
23364        (KJS::TryNode::):
23365        (KJS::FuncDeclNode::):
23366        (KJS::CaseClauseNode::):
23367        (KJS::ClauseListNode::):
23368        (KJS::SwitchNode::):
23369
233702007-12-18  Oliver Hunt  <oliver@apple.com>
23371
23372        Replace post-parse pass to find declarations with logic in the parser itself
23373
23374        Reviewed by Geoff.
23375
23376        Instead of finding declarations in a pass following the initial parsing of
23377        a program, we incorporate the logic directly into the parser.  This lays
23378        the groundwork for further optimisations (such as improving performance in
23379        declaration expressions -- var x = y; -- to match that of standard assignment)
23380        in addition to providing a 0.4% performance improvement in SunSpider.
23381
23382        * JavaScriptCore.exp:
23383        * kjs/Parser.cpp:
23384        (KJS::Parser::parse):
23385        * kjs/Parser.h:
23386        (KJS::Parser::didFinishParsing):
23387        (KJS::Parser::parse):
23388        * kjs/grammar.y:
23389        * kjs/nodes.cpp:
23390        (KJS::ParserTracked::ParserTracked):
23391        (KJS::ParserTracked::~ParserTracked):
23392        (KJS::ParserTracked::ref):
23393        (KJS::ParserTracked::deref):
23394        (KJS::ParserTracked::refcount):
23395        (KJS::ParserTracked::clearNewTrackedObjects):
23396        (KJS::Node::Node):
23397        (KJS::ScopeNode::ScopeNode):
23398        (KJS::ProgramNode::ProgramNode):
23399        (KJS::EvalNode::EvalNode):
23400        (KJS::FunctionBodyNode::FunctionBodyNode):
23401        (KJS::FunctionBodyNode::initializeSymbolTable):
23402        (KJS::FunctionBodyNode::processDeclarations):
23403        * kjs/nodes.h:
23404        (KJS::ParserTracked::):
23405        (KJS::Node::):
23406        (KJS::ScopeNode::):
23407
234082007-12-18  Xan Lopez  <xan@gnome.org>
23409
23410        Reviewed by Geoff.
23411
23412        Fix http://bugs.webkit.org/show_bug.cgi?id=14521
23413        Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
23414        
23415        * wtf/TCSpinLock.h:
23416        (TCMalloc_SpinLock::Unlock):
23417
23418        Use less strict memory operand constraint on inline asm generation.
23419        PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.
23420
23421        Patch by David Kilzer <ddkilzer@webkit.org>
23422
234232007-12-18  Mark Rowe  <mrowe@apple.com>
23424
23425        Rubber-stamped by Maciej Stachowiak.
23426
23427        Remove outdated and non-functioning project files for the Apollo port.
23428
23429        * JavaScriptCore.apolloproj: Removed.
23430
234312007-12-18  Darin Adler  <darin@apple.com>
23432
23433        - fix Windows build
23434
23435        * pcre/pcre_exec.cpp:
23436        (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
23437        deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.
23438
234392007-12-18  Darin Adler  <darin@apple.com>
23440
23441        Reviewed by Geoff.
23442
23443        - fix http://bugs.webkit.org/show_bug.cgi?id=16458
23444          REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
23445          <rdar://problem/5636067>
23446
23447        Test: fast/regex/slow.html
23448
23449        Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
23450        http://bugs.webkit.org/show_bug.cgi?id=16503
23451
23452        * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
23453        * pcre/pcre_exec.cpp:
23454        (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
23455        limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
23456        since they are just true and false (1 and 0).
23457        (jsRegExpExecute): More of the MATCH_MATCH change.
23458
234592007-12-17  Darin Adler  <darin@apple.com>
23460
23461        - speculative build fix for non-gcc platforms
23462
23463        * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.
23464
234652007-12-16  Mark Rowe  <mrowe@apple.com>
23466
23467        Speculative build fix for non-Mac platforms.
23468
23469        * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.
23470
234712007-12-16  Darin Adler  <darin@apple.com>
23472
23473        Reviewed by Maciej.
23474
23475        - http://bugs.webkit.org/show_bug.cgi?id=16438
23476        - removed some more unused code
23477        - changed quite a few more names to WebKit-style
23478        - moved more things out of pcre_internal.h
23479        - changed some indentation to WebKit-style
23480        - improved design of the functions for reading and writing
23481          2-byte values from the opcode stream (in pcre_internal.h)
23482
23483        * pcre/dftables.cpp:
23484        (main): Added the kjs prefix a normal way in lieu of using macros.
23485
23486        * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
23487        (errorText): Name changes, fewer typedefs.
23488        (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
23489        (isCountedRepeat): Name change.
23490        (readRepeatCounts): Name change.
23491        (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
23492        very lightly used here. Hard-coded the length of OP_BRANUMBER.
23493        (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
23494        use the advanceToEndOfBracket function.
23495        (getOthercaseRange): Name changes.
23496        (encodeUTF8): Ditto.
23497        (compileBranch): Name changes. Removed unused after_manual_callout and
23498        the code to handle it. Removed code to handle OP_ONCE since we never
23499        emit this opcode. Changed to use advanceToEndOfBracket in more places.
23500        (compileBracket): Name changes.
23501        (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
23502        this opcode.
23503        (bracketIsAnchored): Name changes.
23504        (branchNeedsLineStart): More fo the same.
23505        (bracketNeedsLineStart): Ditto.
23506        (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
23507        (bracketFindFirstAssertedCharacter): More of the same.
23508        (calculateCompiledPatternLengthAndFlags): Ditto.
23509        (returnError): Name changes.
23510        (jsRegExpCompile): Ditto.
23511
23512        * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
23513        (matchRef): Updated names.
23514        Improved macros to use the do { } while(0) idiom so they expand to single
23515        statements rather than to blocks or multiple statements. And refeactored
23516        the recursive match macros.
23517        (MatchStack::pushNewFrame): Name changes.
23518        (getUTF8CharAndIncrementLength): Name changes.
23519        (match): Name changes. Removed the ONCE opcode.
23520        (jsRegExpExecute): Name changes.
23521
23522        * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
23523        quite a few comments. Removed the macros that add kjs prefixes to the
23524        functions with external linkage; instead renamed the functions. Removed
23525        the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
23526        dead and not-all-working code for LINK_SIZE values other than 2, although
23527        we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
23528        (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
23529        (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
23530        (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
23531        (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
23532        addition, since a comma is really no better than a plus sign. Added an
23533        assertion to catch out of range values and changed the parameter type to
23534        int rather than unsigned.
23535        (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
23536        (putLinkValue): New function that most former callers of the
23537        putOpcodeValueAtOffset function can use; asserts the value that is
23538        being stored is non-zero and then calls putLinkValueAllowZero.
23539        (getLinkValue): Ditto.
23540        (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
23541        caller was using an offset, which makes sense given the advancing behavior.
23542        (putLinkValueAllowZeroAndAdvance): Ditto.
23543        (isBracketOpcode): Added. For use in an assertion.
23544        (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
23545        and removed comments about how it's not well designed. This function takes
23546        a pointer to the beginning of a bracket and advances to the end of the
23547        bracket.
23548
23549        * pcre/pcre_tables.cpp: Updated names.
23550        * pcre/pcre_ucp_searchfuncs.cpp:
23551        (kjs_pcre_ucp_othercase): Ditto.
23552        * pcre/pcre_xclass.cpp:
23553        (getUTF8CharAndAdvancePointer): Ditto.
23554        (kjs_pcre_xclass): Ditto.
23555        * pcre/ucpinternal.h: Ditto.
23556
23557        * wtf/ASCIICType.h:
23558        (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
23559        isASCIIDigit.
23560        (WTF::isASCIIAlphanumeric): Ditto.
23561        (WTF::isASCIIHexDigit): Ditto.
23562        (WTF::isASCIILower): Ditto.
23563        (WTF::isASCIISpace): Ditto.
23564        (WTF::toASCIILower): Ditto.
23565        (WTF::toASCIIUpper): Ditto.
23566
235672007-12-16  Darin Adler  <darin@apple.com>
23568
23569        Reviewed by Maciej.
23570
23571        - fix http://bugs.webkit.org/show_bug.cgi?id=16459
23572          REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
23573          <rdar://problem/5646361>
23574
23575        The problem was that \B was not handled properly in character classes.
23576
23577        Test: fast/js/regexp-overflow.html
23578
23579        * pcre/pcre_compile.cpp:
23580        (check_escape): Added handling of ESC_b and ESC_B in character classes here.
23581        Allows us to get rid of the handling of \b in character classes from all the
23582        call sites that handle it separately and to handle \B properly as well.
23583        (compileBranch): Remove the ESC_b handling, since it's not needed any more.
23584        (calculateCompiledPatternLengthAndFlags): Ditto.
23585
235862007-12-16  Mark Rowe  <mrowe@apple.com>
23587
23588        Reviewed by Maciej Stachowiak.
23589
23590        Fix http://bugs.webkit.org/show_bug.cgi?id=16448
23591        Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac
23592
23593        * kjs/array_instance.cpp:
23594        (KJS::compareByStringPairForQSort):
23595        (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
23596        results.  This avoids calling toString twice per comparison, but requires a temporary buffer
23597        so we only use this approach in cases where the array being sorted is not too large.
23598
235992007-12-16  Geoffrey Garen  <ggaren@apple.com>
23600
23601        Reviewed by Darin Adler and Maciej Stachowiak.
23602        
23603        More refactoring to support global variable optimization.
23604        
23605        Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
23606        UString::Rep*. With globals, the symbol table can outlast the
23607        declaration node for any given symbol, so the symbol table needs to ref
23608        its symbol names.
23609        
23610        In support, specialized HashMaps with RefPtr keys to allow lookup
23611        via raw pointer, avoiding refcount churn.
23612        
23613        SunSpider reports a .6% speedup (prolly just noise).
23614
23615        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
23616        * JavaScriptCore.xcodeproj/project.pbxproj: ditto
23617
23618        * kjs/JSVariableObject.cpp:
23619        (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.
23620
23621        * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
23622        static Rep* for null, which helps compute the deletedValue() trait.
23623
23624        * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.
23625
23626        * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
23627        of find(), contains(), get(), set(), add(), remove(), and take() that take
23628        raw pointers as keys.
23629
236302007-12-16  Alexey Proskuryakov  <ap@webkit.org>
23631
23632        Reviewed by Darin.
23633
23634        http://bugs.webkit.org/show_bug.cgi?id=16162
23635        Problems with float parsing on Linux (locale-dependent parsing was used).
23636
23637        * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
23638        * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.
23639
236402007-12-14  Alp Toker  <alp@atoker.com>
23641
23642        Reviewed by Mark Rowe.
23643
23644        Enable the AllInOneFile.cpp optimization for the GTK+ port.
23645
23646        * JavaScriptCore.pri:
23647
236482007-12-14  Mark Rowe  <mrowe@apple.com>
23649
23650        Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.
23651
23652        * wtf/FastMalloc.cpp:
23653        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
23654
236552007-12-14  Mark Rowe  <mrowe@apple.com>
23656
23657        Reviewed by Maciej Stachowiak.
23658
23659        Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
23660        currently untested on other platforms.
23661
23662        * wtf/TCSystemAlloc.cpp:
23663        (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
23664        through into another mechanism if multiple are supported.
23665
236662007-12-14  Alp Toker  <alp@atoker.com>
23667
23668        Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.
23669
23670        Include UnusedParam.h.
23671
23672        * wtf/TCSystemAlloc.cpp:
23673
236742007-12-14  Oliver Hunt  <oliver@apple.com>
23675
23676        Reviewed by Stephanie.
23677
23678        Fix build on windows
23679
23680        * wtf/FastMalloc.cpp:
23681        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
23682
236832007-12-14  Dan Bernstein  <mitz@apple.com>
23684
23685        - try again to fix the Windows build
23686
23687        * wtf/TCSystemAlloc.cpp:
23688        (TCMalloc_SystemRelease):
23689
236902007-12-14  Dan Bernstein  <mitz@apple.com>
23691
23692        - try to fix the Windows build
23693
23694        * wtf/TCSystemAlloc.cpp:
23695        (TCMalloc_SystemRelease):
23696
236972007-12-14  Mark Rowe <mrowe@apple.com>
23698
23699        Reviewed by Maciej and Oliver.
23700
23701        Add final changes to make TCMalloc release memory to the system.
23702        This results in a 0.4% regression against ToT, but this is offset
23703        against the gains made by the original TCMalloc r38 merge - in fact
23704        we retain around 0.3-0.4% progression overall.
23705
23706        * wtf/FastMalloc.cpp:
23707        (WTF::InitSizeClasses):
23708        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
23709        * wtf/TCSystemAlloc.cpp:
23710        (TCMalloc_SystemRelease):
23711
237122007-12-14  Darin Adler  <darin@apple.com>
23713
23714        Reviewed by Sam.
23715
23716        - removed unnecessary includes of "Vector.h"
23717
23718        * wtf/HashMap.h:
23719        (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
23720        This allows copying keys into a vector of a base class or one with an inline capacity.
23721        (WTF::copyValuesToVector): Ditto.
23722        * wtf/HashSet.h:
23723        (WTF::copyToVector): Ditto.
23724
237252007-12-14  Anders Carlsson  <andersca@apple.com>
23726
23727        Reviewed by Darin and Geoff.
23728
23729        <rdar://problem/5619295> 
23730        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
23731        
23732        Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 
23733        
23734        The way this used to work was that each NPObject that wrapped a JSObject would have a root object
23735        corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
23736        doing security checks). 
23737        
23738        This would prevent a plug-in from accessing a frame's window object if it's security origin was different
23739        (some parts of the window, such as the location object, can be accessed from frames with different security 
23740        origins, and those checks are being done in WebCore).
23741        
23742        Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
23743        Window JSObject being garbage collected and the NPObject pointing to freed memory.
23744        
23745        How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
23746        for a plug-in will have the root object of the containing frame of that plug-in.
23747        
23748        * bindings/NP_jsobject.cpp:
23749        (jsDeallocate):
23750        Don't free the origin root object.
23751        
23752        (_NPN_CreateScriptObject):
23753        Remove the origin root object parameter.
23754        
23755        (_NPN_InvokeDefault):
23756        (_NPN_Invoke):
23757        (_NPN_Evaluate):
23758        (_NPN_GetProperty):
23759        (_NPN_SetProperty):
23760        (_NPN_RemoveProperty):
23761        (_NPN_HasProperty):
23762        (_NPN_HasMethod):
23763        (_NPN_Enumerate):
23764        Get rid of all security checks.
23765        
23766        * bindings/NP_jsobject.h:
23767        Remove originRootObject from the JavaScriptObject struct.
23768        
23769        * bindings/c/c_utility.cpp:
23770        (KJS::Bindings::convertValueToNPVariant):
23771        Always use the root object from the ExecState.
23772        
237732007-12-13  Steve Falkenburg  <sfalken@apple.com>
23774
23775        Move source file generation into its own vcproj to fix build dependencies.
23776
23777        Reviewed by Adam.
23778
23779        * JavaScriptCore.vcproj/JavaScriptCore.sln:
23780        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
23781        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
23782        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
23783        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
23784
237852007-12-13  Alp Toker  <alp@atoker.com>
23786
23787        http://bugs.webkit.org/show_bug.cgi?id=16406
23788        [Gtk] JavaScriptCore needs -lpthread
23789
23790        Build fix for Debian and any other platforms that don't implicitly
23791        link to pthread.
23792
23793        Link to pthread on non-Windows platforms until this dependency is
23794        removed from JSC.
23795
237962007-12-11  Geoffrey Garen  <ggaren@apple.com>
23797
23798        Reviewed by Sam Weinig.
23799        
23800        Build fix: Note some variables that are used only for ASSERTs.
23801
23802        * API/testapi.c:
23803        (Base_finalize):
23804        (globalObject_initialize):
23805        (testInitializeFinalize):
23806
238072007-12-11  Geoffrey Garen  <ggaren@apple.com>
23808
23809        Reviewed by Darin Adler.
23810        
23811        Fixed: All JS tests crash on Windows.
23812
23813        NDEBUG wasn't defined when compiling testkjs in release builds, so the
23814        HashTable definition in HashTable.h included an extra data member.
23815
23816        The solution was to add NDEBUG to the release testkjs configuration on
23817        Windows and Mac.
23818        
23819        For giggles, I also added other missing #defines to testkjs on Windows.
23820
23821        * Configurations/Base.xcconfig:
23822        * Configurations/JavaScriptCore.xcconfig:
23823        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
23824        * JavaScriptCore.xcodeproj/project.pbxproj:
23825        * kjs/testkjs.cpp:
23826        (main):
23827
238282007-12-11  Geoffrey Garen  <ggaren@apple.com>
23829
23830        Reviewed by Darin Adler.
23831        
23832        Removed bogus ASSERT.
23833        
23834        ASSERT should only be used when we know that a code path will not be
23835        taken. This code path is taken often during the jsFunFuzz test.
23836
23837        * pcre/pcre_exec.cpp:
23838        (jsRegExpExecute):
23839
238402007-12-11  Darin Adler  <darin@apple.com>
23841
23842        * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.
23843
238442007-12-10  Darin Adler  <darin@apple.com>
23845
23846        Reviewed by Sam Weinig.
23847
23848        - fix http://bugs.webkit.org/show_bug.cgi?id=16379
23849          REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and
23850          fast/dom/xmlhttprequest-html-response-encoding.html
23851          and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function
23852          find_firstassertedchar
23853
23854        Test: fast/js/regexp-find-first-asserted.html
23855
23856        * pcre/pcre_compile.cpp:
23857        (compileBracket): Take out unnecessary initialization of out parameters.
23858        (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles
23859        a branch.
23860        (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the
23861        options parameter -- the caller can handle the options.
23862        (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of
23863        the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of
23864        passing in the options.
23865
238662007-12-10  Geoffrey Garen  <ggaren@apple.com>
23867
23868        Reviewed by Sam Weinig.
23869
23870        Split this:
23871        
23872                            FunctionBodyNode
23873                                    ^
23874                                    |
23875                                ProgramNode
23876            
23877        into this:
23878            
23879                                ScopeNode
23880                ^                   ^                   ^
23881                |                   |                   |
23882        FunctionBodyNode        ProgramNode         EvalNode
23883
23884        in preparation for specializing each class more while optimizing global
23885        variable access.
23886        
23887        Also removed some cruft from the FunctionBodyNode interface to simplify
23888        things.
23889        
23890        SunSpider says this patch is a .8% speedup, which seems reasonable,
23891        since it eliminates a few branches and adds KJS_FAST_CALL in a few
23892        places.
23893        
23894        Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt
23895        mileage may vary...)
23896
238972007-12-10  Geoffrey Garen  <ggaren@apple.com>
23898
23899        RS by Mark Rowe.
23900        
23901        Mac build fix: added some exported symbols, now that Parser::parse is
23902        defined in the header.
23903
23904        * JavaScriptCore.exp:
23905
239062007-12-10  Sam Weinig  <sam@webkit.org>
23907
23908        Build fix.
23909
23910        Template methods need to be in the header.
23911
23912        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
23913        * kjs/Parser.cpp:
23914        * kjs/Parser.h:
23915        (KJS::Parser::parse):
23916
239172007-12-10  Geoffrey Garen  <ggaren@apple.com>
23918
23919        Reviewed by Sam Weinig.
23920        
23921        Merged different implementations of Parser::parse into a single,
23922        templatized implementation, in preparation for adding yet another
23923        implementation for "eval" code.
23924        
23925        JS and layout tests pass.
23926
239272007-12-10  Timothy Hatcher  <timothy@apple.com>
23928
23929        Reviewed by Mark Rowe
23930
23931        <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x
23932
23933        * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
23934          so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.
23935
239362007-12-10  Mark Rowe  <mrowe@apple.com>
23937
23938        Tiger build fix.
23939
23940        * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes.
23941
239422007-12-10  Darin Adler  <darin@apple.com>
23943
23944        Reviewed by Mark Rowe.
23945
23946        - fix http://bugs.webkit.org/show_bug.cgi?id=16375
23947          REGRESSION: Safari crashes on quit
23948
23949        Probably a debug-only issue.
23950
23951        * kjs/Parser.cpp:
23952        (KJS::parser): Create the parser and never destroy it by using a pointer instead
23953        of a global object.
23954
239552007-12-09  Darin Adler  <darin@apple.com>
23956
23957        Reviewed by Sam Weinig.
23958
23959        - fix http://bugs.webkit.org/show_bug.cgi?id=16369
23960          REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization
23961
23962        * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores.
23963        (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a
23964        branch and the other on an anchor. The old function would only work on a bracket.
23965        Also removed unneeded parameters; the anchored check does not require the bracket
23966        map or the options any more because we have a reduced set of features.
23967        (bracketIsAnchored): Ditto.
23968        (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave
23969        both a better name. This is the function that was returning the wrong value. The failure
23970        was beacuse the old function would only work on a bracket.
23971        (bracketNeedsLineStart): Ditto.
23972        (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the
23973        functions based on whether we compiled an outer bracket. Also removed inaccurate comments
23974        and unneeded parameters.
23975
23976        - other small changes
23977
23978        * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then
23979        the recursion limit, then running out of memory, and finally an unexpected internal error.
23980
23981        * pcre/pcre_exec.cpp: Fixed indentation.
23982        (jsRegExpExecute): Corrected an inaccurate comment.
23983
239842007-12-09  Darin Adler  <darin@apple.com>
23985
23986        Reviewed by Maciej.
23987
23988        - fix http://bugs.webkit.org/show_bug.cgi?id=16370
23989          REGRESSION (r28540): source URL and line number no longer set for outer function/programs
23990
23991        Test: fast/js/exception-linenums-in-html-1.html
23992        Test: fast/js/exception-linenums-in-html-2.html
23993        Test: fast/js/exception-linenums.html
23994
23995        By the time the ProgramNode was constructed, the source URL was empty.
23996
23997        * kjs/Parser.cpp:
23998        (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now
23999        handled here instead of in the lexer; it needs to still be set when we create the
24000        program node. Call setLoc to set the first and last line number.
24001        (KJS::Parser::parseFunctionBody): Ditto, but for the body.
24002        (KJS::Parser::parse): Removed the sourceURL argument.
24003
24004        * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine
24005        parameter to didFinishParsing, since the bison grammar knows the last line number
24006        and we otherwise do not know it. Removed the sourceURL parameter from parse, since
24007        that's now handled at a higher level.
24008
24009        * kjs/grammar.y: Pass the last line number to didFinishParsing.
24010
24011        * kjs/lexer.cpp:
24012        (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL.
24013        (KJS::Lexer::clear): Ditto.
24014        * kjs/lexer.h: More of the same.
24015
24016        * kjs/nodes.cpp:
24017        (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather
24018        than from the lexer. Removed unneeded call to setLoc, since the line numbers already
24019        both default to -1.
24020
240212007-12-08  Oliver Hunt  <oliver@apple.com>
24022
24023        Reviewed by Sam W.
24024
24025        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
24026        
24027        Fixes <rdar://problem/5620249> Must disable SVG animation
24028        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
24029        
24030        Minor config changes.
24031
24032        * Configurations/JavaScriptCore.xcconfig:
24033        * JavaScriptCore.xcodeproj/project.pbxproj:
24034
240352007-12-07  Sam Weinig  <sam@webkit.org>
24036
24037        Reviewed by Darin.
24038
24039        - Rename isSafeScript to allowsAccessFrom.
24040
24041        * bindings/NP_jsobject.cpp:
24042        (_isSafeScript):
24043        * kjs/JSGlobalObject.h:
24044        (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match
24045        the new call.
24046
240472007-12-07  Geoffrey Garen  <ggaren@apple.com>
24048
24049        Reviewed by Sam Weinig.
24050        
24051        Refactored variable access optimization: Removed the assumption that
24052        the FunctionBodyNode holds the symbol table.
24053        
240542007-12-07  Geoffrey Garen  <ggaren@apple.com>
24055
24056        Build fix: added #include.
24057
24058        * kjs/nodes.cpp:
24059
240602007-12-07  Geoffrey Garen  <ggaren@apple.com>
24061
24062        Build fix: added #include.
24063
24064        * kjs/interpreter.cpp:
24065
240662007-12-07  Geoffrey Garen  <ggaren@apple.com>
24067
24068        Build fix: added #include.
24069
24070        * kjs/grammar.y:
24071
240722007-12-07  Geoffrey Garen  <ggaren@apple.com>
24073
24074        Build fix: added #include.
24075
24076        * kjs/function_object.cpp:
24077
240782007-12-07  Geoffrey Garen  <ggaren@apple.com>
24079
24080        Reviewed by Sam Weinig.
24081        
24082        Fixed crash seen running layout tests.
24083        
24084        Reverted a change I made earlier today. Added a comment to try to
24085        discourage myself from making this mistake a third time.
24086
24087        * kjs/function.cpp:
24088        (KJS::ActivationImp::mark):
24089        * kjs/function.h:
24090        (KJS::ActivationImp::ActivationImpData::ActivationImpData):
24091
240922007-12-07  Geoffrey Garen  <ggaren@apple.com>
24093
24094        Reviewed by Sam Weinig.
24095        
24096        Refactored parsing of global code: Removed the assumption that 
24097        ProgramNode inherits from FunctionBodyNode from the parser.
24098
24099        * kjs/Parser.cpp:
24100        (KJS::Parser::parseProgram):
24101        (KJS::Parser::parseFunctionBody):
24102        (KJS::Parser::parse):
24103        * kjs/Parser.h:
24104        (KJS::Parser::didFinishParsing):
24105        * kjs/function.cpp:
24106        * kjs/grammar.y:
24107        * kjs/nodes.h:
24108
241092007-12-07  Geoffrey Garen  <ggaren@apple.com>
24110
24111        Build fix: added JSVariableObject.cpp to the .pri file.
24112
24113        * JavaScriptCore.pri:
24114
241152007-12-07  Geoffrey Garen  <ggaren@apple.com>
24116
24117        Build fix: added #include.
24118
24119        * kjs/function.cpp:
24120
241212007-12-07  Steve Falkenburg  <sfalken@apple.com>
24122
24123        Re-named our B&I flag from BUILDBOT to PRODUCTION.
24124
24125        Reviewed by Sam Weinig.
24126
24127        * JavaScriptCore.vcproj/JavaScriptCore.make:
24128        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
24129
241302007-12-07  Geoffrey Garen  <ggaren@apple.com>
24131
24132        Build fix: removed stray name qualification.
24133
24134        * kjs/function.h:
24135        (KJS::ActivationImp::ActivationImp):
24136
241372007-12-07  Geoffrey Garen  <ggaren@apple.com>
24138
24139        Build fix: moved functions with qualified names outside of class
24140        declaration.
24141
24142        * kjs/JSVariableObject.h:
24143        (KJS::JSVariableObject::symbolTableGet):
24144        (KJS::JSVariableObject::symbolTablePut):
24145
241462007-12-07  Geoffrey Garen  <ggaren@apple.com>
24147
24148        Reviewed by Sam Weinig.
24149
24150        Next step in refactoring JSGlobalObject: Added JSVariableObject class,
24151        and factored symbol-table-related code into it. (JSGlobalObject doesn't
24152        use the symbol table code yet, though.)
24153        
24154        Layout and JS tests, and testapi, pass. SunSpider reports no regression.
24155
241562007-12-07  Darin Adler  <darin@apple.com>
24157
24158        Reviewed by Geoff.
24159
24160        - fix http://bugs.webkit.org/show_bug.cgi?id=16185
24161          jsRegExpCompile should not add implicit non-capturing bracket
24162
24163        While this does not make SunSpider faster, it will make many regular
24164        expressions a bit faster.
24165
24166        * pcre/pcre_compile.cpp: Moved CompileData struct in here from the
24167        header since it's private to this file.
24168        (compile_branch): Updated for function name change.
24169        (compile_bracket): Renamed from compile_regex, since, for one thing,
24170        this does not compile an entire regular expression.
24171        (calculateCompiledPatternLengthAndFlags): Removed unused item_count
24172        local variable. Renamed CompileData to cd instead of compile_block
24173        to be consistent with other functions. Added code to set the
24174        needOuterBracket flag if there's at least one "|" at the outer level.
24175        (jsRegExpCompile): Renamed CompileData to cd instead of compile_block
24176        to be consistent with other functions. Removed unneeded "size" field
24177        from the compiled regular expression. If no outer bracket is needed,
24178        then use compile_branch to compile the regular expression.
24179
24180        * pcre/pcre_internal.h: Removed the CompileData struct, which is now
24181        private to pcre_compile.cpp. Removed the size member from JSRegExp.
24182
241832007-12-06  Kevin Ollivier  <kevino@theolliviers.com>
24184
24185        MSVC7 build fix due to a compiler bug with placement new and/or
24186        templates and casting.
24187
24188        Reviewed by Darin Adler.
24189
24190        * wtf/Vector.h:
24191        (WTF::::append):
24192
241932007-12-06  Darin Adler  <darin@apple.com>
24194
24195        Reviewed by Eric Seidel.
24196
24197        - fix http://bugs.webkit.org/show_bug.cgi?id=16321
24198          new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds
24199          <rdar://problem/5632992>
24200
24201        Test: fast/js/regexp-oveflow.html
24202
24203        * pcre/pcre_compile.cpp:
24204        (calculateCompiledPatternLengthAndFlags): In the case where a single character
24205        character class is optimized to not use a character class at all, the preflight
24206        code was not setting the lastitemlength variable.
24207
242082007-12-05  Mark Rowe  <mrowe@apple.com>
24209
24210        Qt Windows build fix.  Include the time-related headers in the correct place.
24211
24212        * kjs/JSGlobalObject.cpp:
24213        * kjs/interpreter.cpp:
24214
242152007-12-05  Darin Adler  <darin@apple.com>
24216
24217        Not reviewed; just undoing a previous commit.
24218
24219        - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220
24220          <rdar://problem/5625221> Crash opening www.news.com (CNet)
24221
24222        The real bug was the backwards ?: in the compile function, which Geoff just
24223        fixed. Rolling out the incorrect earlier fix.
24224
24225        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out
24226        the unneeded preflight change. The regression test proves this is still working
24227        fine, so the bug remains fixed.
24228
242292007-12-01  Mark Rowe  <mrowe@apple.com>
24230
24231        Build fix.  Include headers before trying to use the things that they declare.
24232
24233        * kjs/JSImmediate.cpp:
24234        * kjs/nodes.cpp:
24235        * kjs/object.cpp:
24236        * kjs/object_object.cpp:
24237        * kjs/regexp_object.cpp:
24238        * kjs/string_object.cpp:
24239
242402007-12-05  Geoffrey Garen  <ggaren@apple.com>
24241
24242        Build fix: added some #includes.
24243
24244        * kjs/JSImmediate.cpp:
24245
242462007-12-05  Geoffrey Garen  <ggaren@apple.com>
24247
24248        Build fix: added some #includes.
24249
24250        * kjs/JSGlobalObject.cpp:
24251        * kjs/JSImmediate.cpp:
24252
242532007-12-05  Geoffrey Garen  <ggaren@apple.com>
24254
24255        Build fix: Fixed #include spelling.
24256
24257        * kjs/debugger.cpp:
24258
242592007-12-05  Geoffrey Garen  <ggaren@apple.com>
24260
24261        Build fix: added #include.
24262
24263        * kjs/debugger.cpp:
24264
242652007-12-05  Geoffrey Garen  <ggaren@apple.com>
24266
24267        Build fix: added a forward declaration.
24268
24269        * kjs/debugger.h:
24270
242712007-12-05  Geoffrey Garen  <ggaren@apple.com>
24272
24273        Build fix: added an #include.
24274
24275        * kjs/error_object.cpp:
24276
242772007-12-05  Geoffrey Garen  <ggaren@apple.com>
24278
24279        Build fix: added an #include.
24280
24281        * kjs/bool_object.cpp:
24282
242832007-12-05  Geoffrey Garen  <ggaren@apple.com>
24284
24285        Reviewed by Darin Adler.
24286
24287        Third step in refactoring JSGlobalObject: Moved data members and 
24288        functions accessing data members from Interpreter to JSGlobalObject.
24289        Changed Interpreter member functions to static functions.
24290        
24291        This resolves a bug in global object bootstrapping, where the global
24292        ExecState could be used when uninitialized.
24293        
24294        This is a big change, but it's mostly code motion and renaming.
24295        
24296        Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
24297        a .7% regression, but Shark sees no difference related to this patch,
24298        and SunSpider reported a .7% speedup from an earlier step in this 
24299        refactoring, so I think it's fair to call that a wash.
24300
243012007-12-05  Geoffrey Garen  <ggaren@apple.com>
24302
24303        Reviewed by Darin Adler. (Or vice versa.)
24304        
24305        Fixed ASSERT during run-javascriptcore-tests. (Darin just added the
24306        ASSERT, but the bug wasn't new.)
24307
24308        * pcre/pcre_compile.cpp:
24309        (compile_branch): The ?: operator here was backwards, causing us to
24310        execute the loop too many times, adding stray KET opcodes to the
24311        compiled regular expression.
24312
243132007-12-05  Kevin McCullough  <kmccullough@apple.com>
24314
24315        Reviewed by Geoff.
24316
24317        - Wait until local variable data is fully constructed before notifying the debugger of entering
24318        or leaving a call frame.
24319
24320        * kjs/function.cpp:
24321        (KJS::FunctionImp::callAsFunction):
24322        * kjs/nodes.cpp:
24323        (KJS::FunctionBodyNode::execute):
24324
243252007-12-05  Mark Rowe  <mrowe@apple.com>
24326
24327        Reviewed by Oliver.
24328
24329        Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues.
24330
24331        * wtf/FastMalloc.cpp:
24332        (WTF::):
24333        (WTF::getPageHeap):
24334
243352007-12-05  Mark Rowe  <mrowe@apple.com>
24336
24337        Reviewed by Darin.
24338
24339        Fix testkjs in 64-bit.
24340
24341        When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock
24342        implemented in assembly.  If we fail to initialize the pthread mutex, attempts to lock or unlock
24343        it will fail and trigger a call to abort.
24344
24345        * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it.
24346        * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock.
24347
243482007-12-04  Oliver Hunt  <oliver@apple.com>
24349
24350        Fix gtk build.
24351
24352        * wtf/TCSystemAlloc.cpp:
24353
243542007-12-03  Oliver Hunt  <oliver@apple.com>
24355
24356        Reviewed by Mark Rowe and Geoff Garen.
24357
24358        Merge TCMalloc r38
24359
24360        It also result in a performance progression between 0.5% and 
24361        0.9% depending on the test, however most if not all of this 
24362        gain will be consumed by the overhead involved in the later
24363        change to release memory to the system.
24364
24365        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
24366        * JavaScriptCore.xcodeproj/project.pbxproj:
24367        * wtf/FastMalloc.cpp:
24368        (WTF::KernelSupportsTLS):
24369        (WTF::CheckIfKernelSupportsTLS):
24370        (WTF::):
24371        (WTF::ClassIndex):
24372        (WTF::SLL_Next):
24373        (WTF::SLL_SetNext):
24374        (WTF::SLL_Push):
24375        (WTF::SLL_Pop):
24376        (WTF::SLL_PopRange):
24377        (WTF::SLL_PushRange):
24378        (WTF::SLL_Size):
24379        (WTF::SizeClass):
24380        (WTF::ByteSizeForClass):
24381        (WTF::NumMoveSize):
24382        (WTF::InitSizeClasses):
24383        (WTF::AllocationSize):
24384        (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
24385        (WTF::TCMalloc_PageHeap::CacheSizeClass):
24386        (WTF::TCMalloc_PageHeap::init):
24387        (WTF::TCMalloc_PageHeap::New):
24388        (WTF::TCMalloc_PageHeap::AllocLarge):
24389        (WTF::TCMalloc_PageHeap::Carve):
24390        (WTF::TCMalloc_PageHeap::Delete):
24391        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
24392        (WTF::PagesToMB):
24393        (WTF::TCMalloc_PageHeap::Dump):
24394        (WTF::TCMalloc_PageHeap::GrowHeap):
24395        (WTF::TCMalloc_PageHeap::Check):
24396        (WTF::ReleaseFreeList):
24397        (WTF::TCMalloc_PageHeap::ReleaseFreePages):
24398        (WTF::TCMalloc_ThreadCache_FreeList::Push):
24399        (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
24400        (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
24401        (WTF::TCMalloc_ThreadCache_FreeList::Pop):
24402        (WTF::TCMalloc_Central_FreeList::length):
24403        (WTF::TCMalloc_Central_FreeList::tc_length):
24404        (WTF::TCMalloc_Central_FreeList::Init):
24405        (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
24406        (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
24407        (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
24408        (WTF::TCMalloc_Central_FreeList::ShrinkCache):
24409        (WTF::TCMalloc_Central_FreeList::InsertRange):
24410        (WTF::TCMalloc_Central_FreeList::RemoveRange):
24411        (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
24412        (WTF::TCMalloc_Central_FreeList::Populate):
24413        (WTF::TCMalloc_ThreadCache::Init):
24414        (WTF::TCMalloc_ThreadCache::Cleanup):
24415        (WTF::TCMalloc_ThreadCache::Allocate):
24416        (WTF::TCMalloc_ThreadCache::Deallocate):
24417        (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
24418        (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
24419        (WTF::TCMalloc_ThreadCache::Scavenge):
24420        (WTF::TCMalloc_ThreadCache::PickNextSample):
24421        (WTF::TCMalloc_ThreadCache::NewHeap):
24422        (WTF::TCMalloc_ThreadCache::GetThreadHeap):
24423        (WTF::TCMalloc_ThreadCache::GetCache):
24424        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
24425        (WTF::TCMalloc_ThreadCache::InitTSD):
24426        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
24427        (WTF::TCMallocStats::ExtractStats):
24428        (WTF::TCMallocStats::DumpStats):
24429        (WTF::TCMallocStats::DumpStackTraces):
24430        (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle):
24431        (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory):
24432        (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard):
24433        (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard):
24434        (WTF::TCMallocStats::DoSampledAllocation):
24435        (WTF::TCMallocStats::CheckCachedSizeClass):
24436        (WTF::TCMallocStats::CheckedMallocResult):
24437        (WTF::TCMallocStats::SpanToMallocResult):
24438        (WTF::TCMallocStats::do_malloc):
24439        (WTF::TCMallocStats::do_free):
24440        (WTF::TCMallocStats::do_memalign):
24441        (WTF::TCMallocStats::do_malloc_stats):
24442        (WTF::TCMallocStats::do_mallopt):
24443        (WTF::TCMallocStats::do_mallinfo):
24444        (WTF::TCMallocStats::realloc):
24445        (WTF::TCMallocStats::cpp_alloc):
24446        (WTF::TCMallocStats::operator new):
24447        (WTF::TCMallocStats::):
24448        (WTF::TCMallocStats::operator new[]):
24449        (WTF::TCMallocStats::malloc_stats):
24450        (WTF::TCMallocStats::mallopt):
24451        (WTF::TCMallocStats::mallinfo):
24452        * wtf/TCPackedCache.h: Added.
24453        (PackedCache::PackedCache):
24454        (PackedCache::Put):
24455        (PackedCache::Has):
24456        (PackedCache::GetOrDefault):
24457        (PackedCache::Clear):
24458        (PackedCache::EntryToValue):
24459        (PackedCache::EntryToUpper):
24460        (PackedCache::KeyToUpper):
24461        (PackedCache::UpperToPartialKey):
24462        (PackedCache::Hash):
24463        (PackedCache::KeyMatch):
24464        * wtf/TCPageMap.h:
24465        (TCMalloc_PageMap2::PreallocateMoreMemory):
24466        * wtf/TCSystemAlloc.cpp:
24467        (TCMalloc_SystemRelease):
24468        * wtf/TCSystemAlloc.h:
24469
244702007-12-04  Anders Carlsson  <andersca@apple.com>
24471
24472        Reviewed by Sam.
24473
24474        Make isSafeScript const.
24475        
24476        * kjs/JSGlobalObject.h:
24477        (KJS::JSGlobalObject::isSafeScript):
24478
244792007-12-04  Darin Adler  <darin@apple.com>
24480
24481        Reviewed by Geoff.
24482
24483        - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220
24484          <rdar://problem/5625221> Crash opening www.news.com (CNet)
24485
24486        Test: fast/js/regexp-overflow.html
24487
24488        * pcre/pcre_compile.cpp:
24489        (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that
24490        was generated in the compile code but not taken into account here.
24491
244922007-12-03  Darin Adler  <darin@apple.com>
24493
24494        Reviewed by Geoff.
24495
24496        - fix http://bugs.webkit.org/show_bug.cgi?id=15618
24497          <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618)
24498
24499        Test: fast/js/recursion-limit-equal.html
24500
24501        * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive.
24502
245032007-12-03  Dan Bernstein  <mitz@apple.com>
24504
24505        - fix a copy-and-paste-o
24506
24507        * bindings/npruntime.cpp:
24508        (_NPN_GetIntIdentifier):
24509
245102007-12-03  Dan Bernstein  <mitz@apple.com>
24511
24512        Reviewed by Darin Adler.
24513
24514        - fix an ASSERT when getIntIdentifier is called with 0 or -1
24515
24516        * bindings/npruntime.cpp:
24517        (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
24518        they are the empty value and the deleted value. Instead, keep the
24519        identifiers for those two integers in a static array.
24520
245212007-12-02  Darin Adler  <darin@apple.com>
24522
24523        Reviewed by Mitz.
24524
24525        - fix http://bugs.webkit.org/show_bug.cgi?id=15848
24526          <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com
24527
24528        Test: fast/js/sparse-array.html
24529
24530        * kjs/array_instance.cpp:
24531        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
24532        in hash map. Can't avoid the branch because we can't look for 0 in the hash.
24533        (KJS::ArrayInstance::deleteProperty): Ditto.
24534
245352007-12-02  Geoffrey Garen  <ggaren@apple.com>
24536
24537        Build fix: added an #include.
24538
24539        * kjs/collector.cpp:
24540
245412007-12-02  Geoffrey Garen  <ggaren@apple.com>
24542
24543        Reviewed by Eric Seidel.
24544
24545        Second step in refactoring JSGlobalObject: moved virtual functions from
24546        Interpreter to JSGlobalObject.
24547        
24548        Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 
24549        believe his lies.
24550
245512007-12-01  Alp Toker  <alp@atoker.com>
24552
24553        Reviewed by Adam Roben.
24554
24555        http://bugs.webkit.org/show_bug.cgi?id=16228
24556        kJSClassDefinitionEmpty is not exported with JS_EXPORT
24557
24558        Add JS_EXPORT to kJSClassDefinitionEmpty.
24559
24560        Make the gcc compiler check take precedence over the WIN32||_WIN32
24561        check to ensure that symbols are exported on Windows when using gcc.
24562
24563        Add a TODO referencing the bug about JS_EXPORT in the Win build
24564        (http://bugs.webkit.org/show_bug.cgi?id=16227)
24565
24566        Don't define JS_EXPORT as 'extern' when the compiler is unknown since
24567        it would result in the incorrect expansion:
24568
24569          extern extern const JSClassDefinition kJSClassDefinitionEmpty;
24570
24571        (This was something we inherited from CFBase.h that doesn't make sense
24572        for JSBase.h)
24573
24574        * API/JSBase.h:
24575        * API/JSObjectRef.h:
24576
245772007-11-30  Geoffrey Garen  <ggaren@apple.com>
24578
24579        Reviewed by Beth Dakin.
24580        
24581        Reversed the ownership relationship between Interpreter and JSGlobalObject.
24582        Now, the JSGlobalObject owns the Interpreter, and top-level objects
24583        that need the two to persist just protect the JSGlobalObject from GC.
24584        
24585        Global object bootstrapping looks a little odd right now, but it will
24586        make much more sense soon, after further rounds of refactoring.
24587
24588        * bindings/runtime_root.h: Made this class inherit from RefCounted,
24589        to avoid code duplication.
24590
24591        * kjs/collector.cpp:
24592        (KJS::Collector::collect): No need to give special GC treatment to 
24593        Interpreters, since we mark their global objects, which mark them.
24594
24595        * kjs/interpreter.cpp:
24596        (KJS::Interpreter::mark): No need to mark our global object, since it
24597        marks us.
24598        * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 
24599        owns us directly.
24600
24601        * kjs/testkjs.cpp: Modified to follow the new rules.
24602        (createGlobalObject):
24603        (runWithScripts):
24604
246052007-11-30  Brent Fulgham  <bfulgham@gmail.com>
24606
24607        Reviewed by Eric.
24608
24609        * ChangeLog:
24610        * pcre/pcre_compile.cpp:
24611        (compile_branch):
24612
246132007-11-30  Eric Seidel  <eric@webkit.org>
24614
24615        No review, build fix only.
24616        
24617        Fix uninitialized var warnings in release build.
24618
24619        * JavaScriptCore.xcodeproj/project.pbxproj:
24620        * pcre/pcre_compile.cpp:
24621        (compile_regex):
24622
246232007-11-30  Darin Adler  <darin@apple.com>
24624
24625        Reviewed by Adam Roben.
24626
24627        - fix http://bugs.webkit.org/show_bug.cgi?id=16207
24628          JavaScript regular expressions should match UTF-16 code units rather than characters
24629
24630        SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.
24631
24632        Test: fast/js/regexp-non-bmp.html
24633
24634        Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.
24635
24636        * pcre/pcre_compile.cpp:
24637        (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
24638        them with simple pointer dereferences in some cases, and no code at all in others.
24639        (calculateCompiledPatternLengthAndFlags): Ditto.
24640
24641        * pcre/pcre_exec.cpp:
24642        (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
24643        Removed calls to the UTF-16 character accessor functions, replacing them with simple
24644        pointer dereferences in some cases, and no code at all in others. Also removed some
24645        explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
24646        in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
24647        end_subject in because it is already done outside the loop.
24648        (jsRegExpExecute):
24649
24650        * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.
24651
246522007-11-30  Eric Seidel  <eric@webkit.org>
24653
24654        Reviewed by darin.
24655        
24656        PCRE crashes under GuardMalloc
24657        http://bugs.webkit.org/show_bug.cgi?id=16127
24658        check against patternEnd to make sure we don't walk off the end of the string
24659
24660        * pcre/pcre_compile.cpp:
24661        (compile_branch):
24662        (calculateCompiledPatternLengthAndFlags):
24663
246642007-11-30  Eric Seidel  <eric@webkit.org>
24665
24666        Reviewed by Maciej.
24667        
24668        Fix layout test regressions caused by r28186
24669        http://bugs.webkit.org/show_bug.cgi?id=16195
24670        change first_byte and req_byte back to shorts instead of chars
24671        (I think PCRE stuffs information in the high bits) 
24672
24673        * pcre/pcre_internal.h:
24674
246752007-11-29  Oliver Hunt  <oliver@apple.com>
24676
24677        Reviewed by Maciej and Darin.
24678
24679        Make the JS collector work with multiple threads 
24680
24681        Under heavy contention it was possible the GC to suspend other
24682        threads inside the pthread spinlock, which could lead to the GC
24683        thread blocking on the pthread spinlock itself.
24684
24685        We now determine and store each thread's stack base when it is
24686        registered, thus removing the need for any calls to pthread_get_stackaddr_np
24687        that needed the pthread spinlock.
24688
24689        * kjs/collector.cpp:
24690        (KJS::Collector::Thread::Thread):
24691        (KJS::Collector::registerThread):
24692        (KJS::Collector::markOtherThreadConservatively):
24693
246942007-11-29  Adam Roben  <aroben@apple.com>
24695
24696        Windows build fix
24697
24698        Removed some unreachable code (ironically, the code was some
24699        ASSERT_NOT_REACHED()s).
24700
24701        * pcre/pcre_compile.cpp:
24702        (compile_branch):
24703        * pcre/pcre_exec.cpp:
24704        (match):
24705
247062007-11-29  Eric Seidel  <eric@webkit.org>
24707
24708        Reviewed by Mark Rowe.
24709        
24710        Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.
24711
24712        * pcre/pcre_compile.cpp:
24713        (is_anchored):
24714
247152007-11-28  Mark Rowe  <mrowe@apple.com>
24716
24717        Gtk build fix.  Rubber-stamped by Eric.
24718
24719        * pcre/pcre_exec.cpp:
24720        (match): Add braces around the body of the case statement to prevent
24721        wanings about jumps across the initialization of a variable.
24722
247232007-11-29  Eric Seidel  <eric@webkit.org>
24724
24725        Reviewed by Mark Rowe.
24726        
24727        Attempt to fix non-mac builds after PCRE cleanup.
24728
24729        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
24730        * JavaScriptCoreSources.bkl:
24731        * pcre/pcre.pri:
24732
247332007-11-28  Eric Seidel  <eric@webkit.org>
24734
24735        Reviewed by Maciej.
24736
24737        Centralize code for subjectPtr adjustments using inlines, only ever check for a single
24738        trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char
24739        classes and garbled UTF16 strings.
24740
24741        * pcre/pcre_exec.cpp:
24742        (match):
24743        (jsRegExpExecute):
24744        * pcre/pcre_internal.h:
24745        (getPreviousChar):
24746        (movePtrToPreviousChar):
24747        (movePtrToNextChar):
24748        (movePtrToStartOfCurrentChar):
24749
247502007-11-28  Eric Seidel  <eric@webkit.org>
24751
24752        Reviewed by Maciej.
24753
24754        change getChar* functions to return result and push 'c' into local scopes for clarity
24755
24756        * pcre/pcre_compile.cpp:
24757        (compile_branch):
24758        (calculateCompiledPatternLengthAndFlags):
24759        * pcre/pcre_exec.cpp:
24760        (match):
24761        * pcre/pcre_internal.h:
24762        (getChar):
24763        (getCharAndAdvance):
24764        (getCharAndLength):
24765        (getCharAndAdvanceIfSurrogate):
24766
247672007-11-28  Eric Seidel  <eric@webkit.org>
24768
24769        Reviewed by Sam.
24770
24771        Comment cleanup
24772
24773        * pcre/pcre_exec.cpp:
24774        (match):
24775
247762007-11-26  Eric Seidel  <eric@webkit.org>
24777
24778        Reviewed by Sam.
24779
24780        Further cleanups to calculateCompiledPatternLengthAndFlags
24781
24782        * pcre/pcre_compile.cpp:
24783        (calculateCompiledPatternLengthAndFlags):
24784        * pcre/pcre_internal.h:
24785
247862007-11-26  Eric Seidel  <eric@webkit.org>
24787
24788        Reviewed by Sam.
24789
24790        Give consistent naming to the RegExp options/compile flags
24791
24792        * pcre/pcre_compile.cpp:
24793        (compile_branch):
24794        (is_anchored):
24795        (find_firstassertedchar):
24796        (printCompiledRegExp):
24797        (jsRegExpCompile):
24798        * pcre/pcre_exec.cpp:
24799        (jsRegExpExecute):
24800        * pcre/pcre_internal.h:
24801
248022007-11-26  Eric Seidel  <eric@webkit.org>
24803
24804        Reviewed by Sam.
24805
24806        Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.
24807
24808        * pcre/pcre_exec.cpp:
24809        (tryFirstByteOptimization):
24810        (tryRequiredByteOptimization):
24811        (jsRegExpExecute):
24812        * pcre/pcre_internal.h:
24813
248142007-11-26  Eric Seidel  <eric@webkit.org>
24815
24816        Reviewed by Maciej.
24817
24818        give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines
24819
24820        * pcre/pcre_compile.cpp:
24821        (compile_branch):
24822        (is_anchored):
24823        (printCompiledRegExp):
24824        (jsRegExpCompile):
24825        * pcre/pcre_exec.cpp:
24826        (jsRegExpExecute):
24827        * pcre/pcre_internal.h:
24828
248292007-11-26  Eric Seidel  <eric@webkit.org>
24830
24831        Reviewed by Oliver.
24832
24833        Deprecate jsRegExpExecute's offset-vector fallback code
24834
24835        * pcre/pcre_exec.cpp:
24836        (jsRegExpExecute):
24837
248382007-11-26  Eric Seidel  <eric@webkit.org>
24839
24840        Reviewed by Maciej.
24841
24842        Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity
24843
24844        * pcre/pcre_compile.cpp:
24845        (find_fixedlength):
24846        (compile_branch):
24847        (canApplyFirstCharOptimization):
24848        * pcre/pcre_exec.cpp:
24849        (match):
24850        * pcre/pcre_internal.h:
24851
248522007-11-26  Eric Seidel  <eric@webkit.org>
24853
24854        Reviewed by Mitz & Maciej.
24855
24856        Change _NC operators to use _IGNORING_CASE for clarity
24857
24858        * pcre/pcre_compile.cpp:
24859        (find_fixedlength):
24860        (compile_branch):
24861        (find_firstassertedchar):
24862        * pcre/pcre_exec.cpp:
24863        (match):
24864        * pcre/pcre_internal.h:
24865
248662007-11-26  Eric Seidel  <eric@webkit.org>
24867
24868        Reviewed by Mitz.
24869
24870        Remove branch from return
24871
24872        * pcre/pcre_compile.cpp:
24873        (compile_branch):
24874        * pcre/pcre_exec.cpp:
24875        (match):
24876
248772007-11-26  Eric Seidel  <eric@webkit.org>
24878
24879        Reviewed by Maciej.
24880
24881        Add repeatInformationFromInstructionOffset inline
24882
24883        * pcre/pcre_exec.cpp:
24884        (repeatInformationFromInstructionOffset):
24885        (match):
24886
248872007-11-26  Eric Seidel  <eric@webkit.org>
24888
24889        Reviewed by Maciej.
24890
24891        Remove no longer used error code JSRegExpErrorMatchLimit
24892
24893        * kjs/regexp.cpp:
24894        (KJS::RegExp::match):
24895        * pcre/pcre.h:
24896        * pcre/pcre_internal.h:
24897
248982007-11-26  Eric Seidel  <eric@webkit.org>
24899
24900        Reviewed by Sam.
24901
24902        Make i locally scoped for better code clarity
24903
24904        * pcre/pcre_exec.cpp:
24905        (match):
24906
249072007-11-26  Eric Seidel  <eric@webkit.org>
24908
24909        Reviewed by Maciej.
24910
24911        Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.
24912
24913        * pcre/pcre_compile.cpp:
24914        (compile_branch):
24915        (calculateCompiledPatternLengthAndFlags):
24916        * pcre/pcre_exec.cpp:
24917        (match_ref):
24918        (MatchStack::pushNewFrame):
24919        (getUTF8CharAndIncrementLength):
24920        (match):
24921        * pcre/pcre_internal.h:
24922        (getChar):
24923        (getCharAndAdvance):
24924        (getCharAndLength):
24925        (getCharAndAdvanceIfSurrogate):
24926        * pcre/pcre_xclass.cpp:
24927        (getUTF8CharAndAdvancePointer):
24928
249292007-11-26  Eric Seidel  <eric@webkit.org>
24930
24931        Reviewed by Sam.
24932
24933        Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check
24934
24935        * pcre/pcre_exec.cpp:
24936        (MatchStack::MatchStack):
24937        (MatchStack::popCurrentFrame):
24938
249392007-11-25  Eric Seidel  <eric@webkit.org>
24940
24941        Reviewed by Sam.
24942
24943        Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests
24944
24945        * pcre/pcre_internal.h:
24946
249472007-11-25  Eric Seidel  <eric@webkit.org>
24948
24949        Reviewed by Maciej.
24950
24951        Remove match_is_group variable for another 5% speedup
24952
24953        * pcre/pcre_compile.cpp:
24954        * pcre/pcre_exec.cpp:
24955        (startNewGroup):
24956        (match):
24957
249582007-11-28  Eric Seidel  <eric@webkit.org>
24959
24960        Reviewed by Sam.
24961
24962        Abstract frame variables into locals and args
24963
24964        * pcre/pcre_compile.cpp:
24965        (compile_branch):
24966        * pcre/pcre_exec.cpp:
24967        (match):
24968        * pcre/pcre_internal.h:
24969
249702007-11-28  Eric Seidel  <eric@webkit.org>
24971
24972        Reviewed by Sam.
24973
24974        Section off MatchData arguments into args struct
24975
24976        * pcre/pcre_exec.cpp:
24977        (MatchStack::pushNewFrame):
24978        (match):
24979
249802007-11-24  Eric Seidel  <eric@webkit.org>
24981
24982        Reviewed by Sam.
24983
24984        Remove redundant eptrblock struct
24985
24986        * pcre/pcre_exec.cpp:
24987        (MatchStack::pushNewFrame):
24988        (match):
24989
249902007-11-24  Eric Seidel  <eric@webkit.org>
24991
24992        Reviewed by Maciej.
24993
24994        Remove redundant match_call_count and move recursion check out of super-hot code path
24995        SunSpider says this is at least an 8% speedup for regexp.
24996
24997        * pcre/pcre_exec.cpp:
24998        (MatchStack::MatchStack):
24999        (MatchStack::pushNewFrame):
25000        (MatchStack::popCurrentFrame):
25001        (MatchStack::popAllFrames):
25002        (match):
25003        (jsRegExpExecute):
25004        * pcre/pcre_internal.h:
25005
250062007-11-24  Eric Seidel  <eric@webkit.org>
25007
25008        Reviewed by Sam.
25009
25010        Get rid of GETCHAR* macros, replacing them with better named inlines
25011
25012        * pcre/pcre_compile.cpp:
25013        (compile_branch):
25014        (calculateCompiledPatternLengthAndFlags):
25015        * pcre/pcre_exec.cpp:
25016        (match):
25017        * pcre/pcre_internal.h:
25018        (getCharAndAdvance):
25019        (getCharAndLength):
25020        (getCharAndAdvanceIfSurrogate):
25021
250222007-11-24  Eric Seidel  <eric@webkit.org>
25023
25024        Reviewed by Sam.
25025
25026        Further cleanup GET/PUT inlines
25027
25028        * pcre/pcre_internal.h:
25029        (putOpcodeValueAtOffset):
25030        (getOpcodeValueAtOffset):
25031        (putOpcodeValueAtOffsetAndAdvance):
25032        (put2ByteOpcodeValueAtOffset):
25033        (get2ByteOpcodeValueAtOffset):
25034        (put2ByteOpcodeValueAtOffsetAndAdvance):
25035
250362007-11-24  Eric Seidel  <eric@webkit.org>
25037
25038        Reviewed by Sam.
25039
25040        Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches
25041
25042        * pcre/pcre_compile.cpp:
25043        (firstSignificantOpCodeSkippingAssertions):
25044        (find_fixedlength):
25045        (complete_callout):
25046        (compile_branch):
25047        (compile_regex):
25048        (is_anchored):
25049        (canApplyFirstCharOptimization):
25050        (find_firstassertedchar):
25051        * pcre/pcre_exec.cpp:
25052        (match):
25053        * pcre/pcre_internal.h:
25054        (putOpcodeValueAtOffset):
25055        (getOpcodeValueAtOffset):
25056        (putOpcodeValueAtOffsetAndAdvance):
25057        (put2ByteOpcodeValueAtOffset):
25058        (get2ByteOpcodeValueAtOffset):
25059        (moveOpcodePtrPastAnyAlternateBranches):
25060        * pcre/pcre_ucp_searchfuncs.cpp:
25061        (_pcre_ucp_othercase):
25062
250632007-11-24  Eric Seidel  <eric@webkit.org>
25064
25065        Reviewed by Sam.
25066
25067        Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup
25068
25069        * pcre/pcre_compile.cpp:
25070        (compile_branch):
25071        (jsRegExpCompile):
25072        * pcre/pcre_exec.cpp:
25073        (match):
25074        (jsRegExpExecute):
25075        * pcre/pcre_internal.h:
25076        (toLowerCase):
25077        (flipCase):
25078        (classBitmapForChar):
25079        (charTypeForChar):
25080        (isWordChar):
25081        (isSpaceChar):
25082        (CompileData::CompileData):
25083        * pcre/pcre_xclass.cpp:
25084        (_pcre_xclass):
25085
250862007-11-24  Eric Seidel  <eric@webkit.org>
25087
25088        Reviewed by Sam.
25089
25090        cleanup _pcre_ucp_othercase
25091
25092        * pcre/pcre_ucp_searchfuncs.cpp:
25093        (_pcre_ucp_othercase):
25094
250952007-11-24  Eric Seidel  <eric@webkit.org>
25096
25097        Reviewed by Maciej.
25098
25099        Use better variable names for case ignoring options
25100
25101        * pcre/pcre_compile.cpp:
25102        (compile_branch):
25103        (find_firstassertedchar):
25104        (printCompiledRegExp):
25105        (jsRegExpCompile):
25106        * pcre/pcre_exec.cpp:
25107        (match_ref):
25108        (match):
25109        (jsRegExpExecute):
25110        * pcre/pcre_internal.h:
25111
251122007-11-24  Eric Seidel  <eric@webkit.org>
25113
25114        Reviewed by Sam.
25115
25116        split first_significant_code into two simpler functions
25117
25118        * pcre/pcre_compile.cpp:
25119        (firstSignificantOpCode):
25120        (firstSignificantOpCodeSkippingAssertions):
25121        (is_anchored):
25122        (canApplyFirstCharOptimization):
25123        (find_firstassertedchar):
25124
251252007-11-24  Eric Seidel  <eric@webkit.org>
25126
25127        Reviewed by Sam.
25128
25129        clean up is_counted_repeat
25130
25131        * pcre/pcre_compile.cpp:
25132        (is_counted_repeat):
25133
251342007-11-24  Eric Seidel  <eric@webkit.org>
25135
25136        Reviewed by Sam.
25137
25138        clean up check_escape
25139
25140        * pcre/pcre_compile.cpp:
25141        (check_escape):
25142
251432007-11-24  Eric Seidel  <eric@webkit.org>
25144
25145        Reviewed by Sam.
25146
25147        Reformat find_fixedlength
25148
25149        * pcre/pcre_compile.cpp:
25150        (find_fixedlength):
25151
251522007-11-24  Eric Seidel  <eric@webkit.org>
25153
25154        Reviewed by Sam.
25155
25156        reformat is_anchored
25157
25158        * pcre/pcre_compile.cpp:
25159        (is_anchored):
25160
251612007-11-24  Eric Seidel  <eric@webkit.org>
25162
25163        Reviewed by Maciej.
25164
25165        Remove unused function could_be_empty_branch
25166
25167        * pcre/pcre_compile.cpp:
25168        (first_significant_code):
25169        (find_fixedlength):
25170        (compile_branch):
25171        (canApplyFirstCharOptimization):
25172
251732007-11-24  Eric Seidel  <eric@webkit.org>
25174
25175        Reviewed by Sam.
25176
25177        Pass around MatchData objects by reference
25178
25179        * pcre/pcre_exec.cpp:
25180        (pchars):
25181        (match_ref):
25182        (match):
25183        (jsRegExpExecute):
25184
251852007-11-24  Eric Seidel  <eric@webkit.org>
25186
25187        Reviewed by Sam.
25188
25189        give PCRE_STARTLINE a better name and rename match_data to MatchData
25190
25191        * pcre/pcre_compile.cpp:
25192        (compile_branch):
25193        (canApplyFirstCharOptimization):
25194        (find_firstassertedchar):
25195        (printCompiledRegExp):
25196        (jsRegExpCompile):
25197        * pcre/pcre_exec.cpp:
25198        (pchars):
25199        (jsRegExpExecute):
25200        * pcre/pcre_internal.h:
25201
252022007-11-24  Eric Seidel  <eric@webkit.org>
25203
25204        Reviewed by Sam.
25205
25206        Clean up find_firstassertedchar
25207
25208        * pcre/pcre_compile.cpp:
25209        (get_othercase_range):
25210        (find_firstassertedchar):
25211        (calculateCompiledPatternLengthAndFlags):
25212
252132007-11-24  Eric Seidel  <eric@webkit.org>
25214
25215        Reviewed by Tim Hatcher.
25216
25217        Pass around CompileData& instead of CompileData*
25218
25219        * pcre/pcre_compile.cpp:
25220        (compile_branch):
25221        (jsRegExpCompile):
25222
252232007-11-24  Eric Seidel  <eric@webkit.org>
25224
25225        Reviewed by Sam.
25226
25227        Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData
25228
25229        * JavaScriptCore.xcodeproj/project.pbxproj:
25230        * pcre/pcre_compile.cpp:
25231        (_pcre_ord2utf8):
25232        (calculateCompiledPatternLengthAndFlags):
25233        (jsRegExpCompile):
25234        * pcre/pcre_internal.h:
25235        * pcre/pcre_ord2utf8.cpp: Removed.
25236
252372007-11-24  Eric Seidel  <eric@webkit.org>
25238
25239        Reviewed by Sam.
25240
25241        removing more macros
25242
25243        * pcre/pcre_compile.cpp:
25244        (could_be_empty_branch):
25245        (compile_branch):
25246        (calculateCompiledPatternLengthAndFlags):
25247        * pcre/pcre_exec.cpp:
25248        (match):
25249        (jsRegExpExecute):
25250        * pcre/pcre_internal.h:
25251        * pcre/pcre_xclass.cpp:
25252
252532007-11-24  Eric Seidel  <eric@webkit.org>
25254
25255        Reviewed by Maciej.
25256
25257        clean up formating in compile_branch
25258
25259        * pcre/pcre_compile.cpp:
25260        (compile_branch):
25261
252622007-11-24  Eric Seidel  <eric@webkit.org>
25263
25264        Reviewed by Sam.
25265
25266        Fix spacing for read_repeat_counts
25267
25268        * pcre/pcre_compile.cpp:
25269        (read_repeat_counts):
25270
252712007-11-24  Eric Seidel  <eric@webkit.org>
25272
25273        Reviewed by Sam.
25274
25275        Get rid of PCRE custom char types
25276
25277        * pcre/pcre_compile.cpp:
25278        (check_escape):
25279        (complete_callout):
25280        (compile_branch):
25281        (compile_regex):
25282        (calculateCompiledPatternLengthAndFlags):
25283        (jsRegExpCompile):
25284        * pcre/pcre_exec.cpp:
25285        (match_ref):
25286        (match):
25287        (jsRegExpExecute):
25288        * pcre/pcre_internal.h:
25289
252902007-11-24  Eric Seidel  <eric@webkit.org>
25291
25292        Reviewed by Sam.
25293
25294        reformat get_othercase_range
25295
25296        * pcre/pcre_compile.cpp:
25297        (get_othercase_range):
25298
252992007-11-24  Eric Seidel  <eric@webkit.org>
25300
25301        Reviewed by Maciej.
25302
25303        Remove register keyword and more cleanup
25304
25305        * pcre/pcre_compile.cpp:
25306        (find_fixedlength):
25307        (compile_branch):
25308        (is_anchored):
25309        (is_startline):
25310        (find_firstassertedchar):
25311        (calculateCompiledPatternLengthAndFlags):
25312        (jsRegExpCompile):
25313        * pcre/pcre_exec.cpp:
25314        (MatchStack::canUseStackBufferForNextFrame):
25315        (MatchStack::allocateNextFrame):
25316        (MatchStack::pushNewFrame):
25317        (MatchStack::frameIsStackAllocated):
25318        (MatchStack::popCurrentFrame):
25319        (MatchStack::unrollAnyHeapAllocatedFrames):
25320        (getUTF8CharAndIncrementLength):
25321        (match):
25322        (jsRegExpExecute):
25323        * pcre/pcre_internal.h:
25324        (PUT2INC):
25325        (isLeadingSurrogate):
25326        (isTrailingSurrogate):
25327        (decodeSurrogatePair):
25328        (getChar):
25329        * pcre/pcre_ord2utf8.cpp:
25330        (_pcre_ord2utf8):
25331        * pcre/pcre_xclass.cpp:
25332        (getUTF8CharAndAdvancePointer):
25333        (_pcre_xclass):
25334
253352007-11-24  Eric Seidel  <eric@webkit.org>
25336
25337        Reviewed by Maciej.
25338
25339        Clean up jsRegExpExecute
25340
25341        * pcre/pcre_compile.cpp:
25342        (returnError):
25343        (jsRegExpCompile):
25344        * pcre/pcre_exec.cpp:
25345        (jsRegExpExecute):
25346        * pcre/pcre_internal.h:
25347
253482007-11-29  Oliver Hunt  <oliver@apple.com>
25349
25350        Reviewed by Geoff.
25351
25352        Merging updated system alloc and spinlock code from r38 of TCMalloc.
25353
25354        This is needed as a precursor to the merge of TCMalloc proper.
25355
25356        * wtf/FastMalloc.cpp:
25357        (WTF::TCMalloc_PageHeap::GrowHeap):
25358        * wtf/TCSpinLock.h:
25359        (TCMalloc_SpinLock::TCMalloc_SpinLock):
25360        (TCMalloc_SpinLock::):
25361        (TCMalloc_SpinLock::Lock):
25362        (TCMalloc_SpinLock::Unlock):
25363        (TCMalloc_SpinLock::IsHeld):
25364        * wtf/TCSystemAlloc.cpp:
25365        (TrySbrk):
25366        (TryMmap):
25367        (TryVirtualAlloc):
25368        (TryDevMem):
25369        (TCMalloc_SystemAlloc):
25370        * wtf/TCSystemAlloc.h:
25371
253722007-11-28  Brady Eidson <beidson@apple.com>
25373
25374        Reviewed by Geoff
25375
25376        Add copyKeysToVector utility, mirroring copyValuesToVector
25377        Also change the copyValuesToVector implementation to be a little more attractive
25378
25379        * wtf/HashMap.h:
25380        (WTF::copyKeysToVector):
25381        (WTF::copyValuesToVector):
25382
253832007-11-27  Alp Toker  <alp@atoker.com>
25384
25385        Reviewed by Mark Rowe.
25386
25387        Add a list of public JavaScriptCore headers for installation.
25388
25389        This follows the convention used for the Qt and GTK+ header lists.
25390
25391        * headers.pri: Added.
25392
253932007-11-27  Alp Toker  <alp@atoker.com>
25394
25395        Prospective MSVC build fix.
25396
25397        Roll back dllexport/dllimport support for now.
25398
25399        * API/JSBase.h:
25400
254012007-11-27  Alp Toker  <alp@atoker.com>
25402
25403        Reviewed by Maciej.
25404
25405        http://bugs.webkit.org/show_bug.cgi?id=15569
25406        [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
25407
25408        Introduce JS_EXPORT to mark symbols to be exported as public API.
25409
25410        Export all public symbols in the JavaScriptCore C API.
25411
25412        This matches conventions for exporting symbols set by the CF and CG
25413        frameworks.
25414
25415        * API/JSBase.h:
25416        * API/JSContextRef.h:
25417        * API/JSObjectRef.h:
25418        * API/JSStringRef.h:
25419        * API/JSStringRefBSTR.h:
25420        * API/JSStringRefCF.h:
25421        * API/JSValueRef.h:
25422
254232007-11-27  Anders Carlsson  <andersca@apple.com>
25424
25425        Reviewed by Adam.
25426
25427        Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
25428        
25429        * kjs/PropertyNameArray.cpp:
25430        (KJS::PropertyNameArray::swap):
25431        Implement PropertyNameArray::swap.
25432        
25433        * kjs/PropertyNameArray.h:
25434        Add ValueType typedef. Replace PropertyNameArrayIterator with 
25435        PropertyNameArray::const_iterator.
25436        
25437        * kjs/nodes.cpp:
25438        (KJS::ForInNode::execute):
25439        * kjs/scope_chain.cpp:
25440        (KJS::ScopeChain::print):
25441        Update for changes to PropertyNameArray.
25442        
25443        * kjs/scope_chain.h:
25444        Add const_iterator and ValueType typedef.
25445        
254462007-11-27  Anders Carlsson  <andersca@apple.com>
25447
25448        Reviewed by Darin.
25449
25450        Add a ValueType typedef.
25451        
25452        * wtf/Vector.h:
25453
254542007-11-26  Darin Adler  <darin@apple.com>
25455
25456        Reviewed by Mitz.
25457
25458        - fix http://bugs.webkit.org/show_bug.cgi?id=16096
25459          REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
25460
25461        Test: fast/js/regexp-overflow.html
25462
25463        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
25464        Removed a stray "ptr++" that I added by accident when merging the
25465        changes between PCRE 6.4 and 6.5. 
25466
254672007-11-26  Geoffrey Garen  <ggaren@apple.com>
25468
25469        Reviewed by Kevin McCullough.
25470        
25471        Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
25472        show variables (can't enumerate ActivationImp properties)
25473        
25474        Implemented a custom ActivationImp::getPropertyNames, since 
25475        ActivationImp now uses a custom property storage mechanism for local
25476        variables.
25477
25478        * kjs/function.cpp:
25479        (KJS::ActivationImp::getPropertyNames):
25480        * kjs/function.h:
25481
254822007-11-26  Alp Toker  <alp@atoker.com>
25483
25484        GTK+/Qt/Wx build fix for breakage introduced in r28039.
25485
25486        * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
25487
254882007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>
25489
25490        Reviewed by Maciej Stachowiak.
25491
25492        Fix minor compiler warning (GCC 4.1.3)
25493
25494        * pcre/pcre_internal.h:
25495        * pcre/pcre_ucp_searchfuncs.cpp:
25496        (_pcre_ucp_othercase):
25497
254982007-11-25  Mark Rowe  <mrowe@apple.com>
25499
25500        Reviewed by Dan Bernstein.
25501
25502        Fix http://bugs.webkit.org/show_bug.cgi?id=16129
25503        Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
25504
25505        * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
25506        to our caller like they expect.
25507
255082007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
25509
25510        MSVC7 build fix. (rand_s doesn't exist there)
25511
25512        Reviewed by Adam Roben.
25513
25514        * kjs/config.h:
25515        * wtf/MathExtras.h:
25516
255172007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
25518
25519        wx build fix. Move WX_PYTHON logic into project build settings,
25520        add WebKitLibraries dirs on Win, and explicitly include JSCore 
25521        headers in testkjs rather than getting them from a template.
25522        (Include dir order of JSCore/WTF and ICU headers is important due  
25523        to wtf/unicode/utf8.h.)
25524
25525        * jscore.bkl:
25526
255272007-11-23  Simon Hausmann  <hausmann@webkit.org>
25528
25529        Reviewed by George Staikos <staikos@kde.org>.
25530
25531        Fix make (dist)clean on Windows.
25532        
25533        OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
25534        
25535
25536        * JavaScriptCore.pri:
25537        * pcre/pcre.pri:
25538
255392007-11-22  Simon Hausmann  <hausmann@kde.org>
25540
25541        Reviewed by George.
25542
25543        Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
25544
25545        * JavaScriptCore.pri:
25546        * pcre/pcre.pri:
25547
255482007-11-22  Simon Hausmann  <hausmann@kde.org>
25549
25550        Reviewed by George.
25551
25552        Centralize the setup for all the extra compilers in a addExtraCompiler function.
25553        
25554        This allows adding a "generated_files" target that builds all generated files using "make generated_files".
25555        For the build inside Qt we do not generate actual rules for the extra compilers but instead
25556        do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
25557
25558        * JavaScriptCore.pri:
25559        * pcre/pcre.pri:
25560
255612007-11-20  Mark Rowe  <mrowe@apple.com>
25562
25563        Reviewed by Tim Hatcher.
25564
25565        <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
25566
25567        Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
25568        -Werror to succeed.  At present they will crash when executed due to code that is not safe
25569        under strict aliasing (<rdar://problem/5536806>).
25570
25571        * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
25572        * kjs/date_object.cpp:
25573        (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
25574        * kjs/dtoa.cpp:
25575        (Bigint::): Tweak formatting to silence warnings.
25576        * pcre/pcre_exec.cpp:
25577        (match): Tweak formatting to silence warnings
25578        * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
25579        * wtf/Assertions.h: Ditto.
25580
255812007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
25582
25583        wx port build fix (wx headers include ctype functions).
25584
25585        * kjs/config.h:
25586
255872007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
25588
25589        Remove outdated and unused Windows port files.
25590
25591        Reviewed by Adam Roben.
25592
25593        * Makefile.vc: Removed.
25594        * README-Win32.txt: Removed.
25595
255962007-11-18  Eric Seidel  <eric@webkit.org>
25597
25598        Reviewed by Oliver.
25599
25600        * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
25601
256022007-11-17  Mark Rowe  <mrowe@apple.com>
25603
25604        Reviewed by Darin Adler.
25605
25606        Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
25607             <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
25608             http://bugs.webkit.org/show_bug.cgi?id=16033
25609
25610        Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
25611        and constructors, and storing them on the global object.  This allows JSClassRef's passed to
25612        JSGlobalContextCreate to be instantiated with the correct prototype.
25613
25614        * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
25615        * API/JSCallbackObject.h:
25616        * API/JSCallbackObjectFunctions.h:
25617        (KJS::::JSCallbackObject):
25618        (KJS::::init):
25619        * API/JSContextRef.cpp:
25620        (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
25621        is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
25622        prevent any JSObjectInitializeCallback's being invoked before a global object is set.
25623        * API/testapi.c:
25624        (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
25625        (globalObject_get):
25626        (globalObject_set):
25627        (main):
25628        * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
25629        * JavaScriptCore.exp:
25630        * bindings/testbindings.cpp:
25631        (main): Update for changes in Interpreter method signatures.
25632        * bindings/testbindings.mm:
25633        (main): Ditto.
25634        * kjs/ExecState.cpp:
25635        (KJS::ExecState::ExecState):
25636        (KJS::ExecState::mark):
25637        (KJS::ExecState::setGlobalObject):
25638        * kjs/ExecState.h: Rename scope to m_scopeChain.
25639        * kjs/interpreter.cpp:
25640        (KJS::Interpreter::Interpreter):
25641        (KJS::Interpreter::init):
25642        (KJS::Interpreter::globalObject):
25643        (KJS::Interpreter::setGlobalObject):
25644        (KJS::Interpreter::resetGlobalObjectProperties):
25645        (KJS::Interpreter::createObjectsForGlobalObjectProperties):
25646        (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
25647        cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
25648        call back into JavaScript from the initialization of the global object's members.
25649        * kjs/interpreter.h:
25650        * kjs/testkjs.cpp:
25651        (setupInterpreter): Update for changes in Interpreter method signatures.
25652
256532007-11-17  Mark Rowe  <mrowe@apple.com>
25654
25655        Reviewed by Sam Weinig.
25656
25657        Prevent testapi from reporting false leaks.  Clear out local variables pointing at
25658        JSObjectRefs to allow their values to be collected.
25659
25660        * API/testapi.c:
25661        (main):
25662
256632007-11-17  Mark Rowe  <mrowe@apple.com>
25664
25665        Reviewed by Sam Weinig.
25666
25667        Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
25668
25669        * API/testapi.c:
25670        (main):
25671
256722007-11-17  Alp Toker  <alp@atoker.com>
25673
25674        Reviewed by Eric.
25675
25676        http://bugs.webkit.org/show_bug.cgi?id=16032
25677        JS minidom is not portable
25678
25679        Use a plain UTF-8 string instead of a CFString.
25680
25681        Print to stdout, not stderr like CFShow() would have done, since that
25682        behaviour seems unintentional.
25683
25684        * API/minidom.c:
25685        (main):
25686
256872007-11-17  Steve Falkenburg  <sfalken@apple.com>
25688
25689        Windows build fix.
25690
25691        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25692
256932007-11-16  Mark Rowe  <mrowe@apple.com>
25694
25695        Windows build fix.
25696
25697        * kjs/lexer.cpp:
25698        (KJS::Lexer::record8):
25699
257002007-11-16  Mark Rowe  <mrowe@apple.com>
25701
25702        Reviewed by Eric.
25703
25704        Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
25705        SunSpider claims this is a 0.7% speedup.
25706
25707        * kjs/lexer.cpp:
25708        (KJS::Lexer::Lexer):
25709        (KJS::Lexer::lex):
25710        (KJS::Lexer::record8):
25711        (KJS::Lexer::record16):
25712        (KJS::Lexer::scanRegExp):
25713        (KJS::Lexer::clear):
25714        (KJS::Lexer::makeIdentifier):
25715        (KJS::Lexer::makeUString):
25716        * kjs/lexer.h:
25717        * kjs/ustring.cpp:
25718        (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
25719        * kjs/ustring.h:
25720
257212007-11-16  Adam Roben  <aroben@apple.com>
25722
25723        Windows build fix
25724
25725        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
25726        and ignore the int -> bool conversion warning.
25727
257282007-11-16  Alexey Proskuryakov  <ap@webkit.org>
25729
25730        Fix Windows debug build.
25731        Rubber-stamped by Eric
25732
25733        * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
25734        complain about unreachable code.
25735
257362007-11-15  Mark Rowe  <mrowe@apple.com>
25737
25738        Gtk build fix.
25739
25740        * kjs/Parser.cpp:
25741
257422007-11-15  Mark Rowe  <mrowe@apple.com>
25743
25744        Mac build and header search path sanity fix.
25745
25746        Reviewed by Sam Weinig and Tim Hatcher.
25747
25748        Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
25749        it in JavaScriptCore.xcconfig.  This removes the need to override it on a
25750        per-target basis inside the .xcodeproj file.
25751
25752        * Configurations/Base.xcconfig:
25753        * Configurations/JavaScriptCore.xcconfig:
25754        * JavaScriptCore.xcodeproj/project.pbxproj:
25755
257562007-11-15  Mark Rowe  <mrowe@apple.com>
25757
25758        Qt build fix.
25759
25760        * kjs/Parser.h:
25761
257622007-11-15  Geoffrey Garen  <ggaren@apple.com>
25763
25764        Reviewed by Eric Seidel.
25765
25766        Another round of grammar / parsing cleanup.
25767        
25768        1. Created distinct parser calls for parsing function bodies vs
25769        programs. This will help later with optimizing global variable access.
25770        
25771        2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
25772        interface.
25773        
25774        3. Modified Lexer to free a little more memory when done lexing. (Added
25775        FIXMEs for similar issues that I didn't fix.)
25776        
25777        4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
25778        respecting the arguments passed to them. (No behavior change, but this
25779        problem could have caused serious problems for an unsuspecting user of
25780        these functions.)
25781        
25782        5. Removed KJS_DEBUG_MEM because it was bit-rotted.
25783        
25784        6. Removed Parser::prettyPrint because the same work was simpler to do
25785        at the call site.
25786        
25787        7. Some renames:
25788        
25789            "Parser::accept" => "Parser::didFinishParsing"
25790            "Parser::sid" => "Parser::m_sourceID"
25791            "Lexer::doneParsing" => "Lexer::clear"
25792            "sid" => "sourceId"
25793            "lineno" => "lineNo"
25794        
25795        * JavaScriptCore.exp:
25796        * kjs/Parser.cpp:
25797        (KJS::Parser::Parser):
25798        (KJS::Parser::parseProgram):
25799        (KJS::Parser::parseFunctionBody):
25800        (KJS::Parser::parse):
25801        (KJS::Parser::didFinishParsing):
25802        (KJS::parser):
25803        * kjs/Parser.h:
25804        (KJS::Parser::sourceId):
25805        * kjs/function.cpp:
25806        (KJS::GlobalFuncImp::callAsFunction):
25807        * kjs/function_object.cpp:
25808        (FunctionObjectImp::construct):
25809        * kjs/grammar.y:
25810        * kjs/interpreter.cpp:
25811        (KJS::Interpreter::checkSyntax):
25812        (KJS::Interpreter::evaluate):
25813        * kjs/interpreter.h:
25814        * kjs/lexer.cpp:
25815        (kjsyylex):
25816        (KJS::lexer):
25817        (KJS::Lexer::Lexer):
25818        (KJS::Lexer::~Lexer):
25819        (KJS::Lexer::scanRegExp):
25820        (KJS::Lexer::doneParsing):
25821        (KJS::Lexer::makeIdentifier):
25822        (KJS::Lexer::makeUString):
25823        * kjs/lexer.h:
25824        (KJS::Lexer::pattern):
25825        (KJS::Lexer::flags):
25826        (KJS::Lexer::sawError):
25827        * kjs/nodes.cpp:
25828        (KJS::Node::Node):
25829        (KJS::FunctionBodyNode::FunctionBodyNode):
25830        * kjs/nodes.h:
25831        * kjs/testkjs.cpp:
25832        (prettyPrintScript):
25833        (kjsmain):
25834        * kjs/ustring.cpp:
25835        * kjs/ustring.h:
25836
258372007-11-15  Oliver Hunt  <oliver@apple.com>
25838
25839        Reviewed by Darin.
25840
25841        <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
25842        
25843        Add a stub node to maintain the Vector of SourceElements until assignment.
25844
25845        * kjs/grammar.y:
25846        * kjs/nodes.h:
25847        (KJS::SourceElementsStub::SourceElementsStub):
25848        (KJS::SourceElementsStub::append):
25849        (KJS::SourceElementsStub::release):
25850        (KJS::SourceElementsStub::):
25851        (KJS::SourceElementsStub::precedence):
25852
258532007-11-15  Eric Seidel  <eric@webkit.org>
25854
25855        Reviewed by Sam.
25856
25857        Abstract most of RMATCH into MatchStack functions.
25858        
25859        SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
25860
25861        * pcre/pcre_exec.cpp:
25862        (MatchStack::canUseStackBufferForNextFrame):
25863        (MatchStack::allocateNextFrame):
25864        (MatchStack::pushNewFrame):
25865        (MatchStack::frameIsStackAllocated):
25866        (MatchStack::popCurrentFrame):
25867        (MatchStack::unrollAnyHeapAllocatedFrames):
25868        (match):
25869
258702007-11-15  Eric Seidel  <eric@webkit.org>
25871
25872        Reviewed by Sam.
25873
25874        Remove RETURN_ERROR, add MatchStack
25875        
25876        * pcre/pcre_exec.cpp:
25877        (MatchStack::MatchStack):
25878        (MatchStack::unrollAnyHeapAllocatedFrames):
25879        (matchError):
25880        (match):
25881        
258822007-11-15  Eric Seidel  <eric@webkit.org>
25883
25884        Reviewed by Sam.
25885
25886        Clean up match function to match WebKit style
25887
25888        * JavaScriptCore.xcodeproj/project.pbxproj:
25889        * pcre/pcre_exec.cpp:
25890        (match):
25891
258922007-11-15  Steve Falkenburg  <sfalken@apple.com>
25893
25894        Windows build fix.
25895
25896        * JavaScriptCore.vcproj/JavaScriptCore.make:
25897
258982007-11-14  Alexey Proskuryakov  <ap@webkit.org>
25899
25900        Reviewed by Darin.
25901
25902        http://bugs.webkit.org/show_bug.cgi?id=15982
25903        Improve JSString UTF-8 decoding
25904
25905        * API/JSStringRef.cpp:
25906        (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
25907
25908        * wtf/unicode/UTF8.cpp:
25909        (WTF::Unicode::convertUTF16ToUTF8):
25910        (WTF::Unicode::convertUTF8ToUTF16):
25911        * wtf/unicode/UTF8.h:
25912        Made these function names start with a lower case letter.
25913
25914        * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
25915
25916        * bindings/c/c_utility.cpp:
25917        (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
25918        from convertUTF8ToUTF16 in wtf/unicode.
25919        (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
25920        (KJS::Bindings::identifierFromNPIdentifier): Ditto.
25921        * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
25922
259232007-11-14  Sam Weinig  <sam@webkit.org>
25924
25925        Rubber-stamped by Anders.
25926
25927        Fix the Xcode project file after it was messed up in r27402.
25928
25929        * JavaScriptCore.xcodeproj/project.pbxproj:
25930
259312007-11-14  Eric Seidel  <eric@webkit.org>
25932
25933        Reviewed by Oliver.
25934        
25935        More PCRE style cleanup.
25936
25937        * pcre/pcre_compile.cpp:
25938        (compile_regex):
25939
259402007-11-14  Adam Roben  <aroben@apple.com>
25941
25942        Clean up the bison conflict checking script
25943
25944        Reviewed by Geoff.
25945
25946        * DerivedSources.make:
25947
259482007-11-14  Eric Seidel  <eric@webkit.org>
25949
25950        Reviewed by Geoff.
25951
25952        Another round of PCRE cleanups: inlines
25953        
25954        SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
25955
25956        * pcre/pcre_compile.cpp:
25957        (jsRegExpCompile):
25958        * pcre/pcre_exec.cpp:
25959        (match):
25960        (jsRegExpExecute):
25961        * pcre/pcre_internal.h:
25962        (PUT):
25963        (GET):
25964        (PUT2):
25965        (GET2):
25966        (isNewline):
25967
259682007-11-14  Eric Seidel  <eric@webkit.org>
25969
25970        Reviewed by Sam.
25971        
25972        Give PCRE a (small) bath.
25973        Fix some formating and break things off into separate functions
25974        http://bugs.webkit.org/show_bug.cgi?id=15993
25975
25976        * pcre/pcre_compile.cpp:
25977        (calculateCompiledPatternLengthAndFlags):
25978        (printCompiledRegExp):
25979        (returnError):
25980        (jsRegExpCompile):
25981        * pcre/pcre_internal.h:
25982        (compile_data::compile_data):
25983
259842007-11-14  Geoffrey Garen  <ggaren@apple.com>
25985
25986        Reviewed by Eric Seidel.
25987        
25988        Cleaned up the JavaScript grammar a bit.
25989        
25990        1. Changed BlockNode to always hold a child vector (which may be empty),
25991        eliminating a few NULL-check branches in the common execution case.
25992        
25993        2. Changed the Block production to correctly report its starting and 
25994        ending line numbers to the debugger. (It used to report its ending line
25995        as its starting line.) Also, removed duplicate line-reporting code
25996        inside the BlockNode constructor.
25997        
25998        3. Moved curly braces up from FunctionBody production into parent
25999        productions. (I had to move the line number reporting code, too, since
26000        it depends on the location of the curly braces.) This matches the ECMA
26001        spec more closely, and makes some future changes I plan easier.
26002        
26003        4. Fixed statementList* convenience functions to deal appropriately with
26004        empty Vectors.
26005
26006        SunSpider reports a small and statistically insignificant speedup.
26007
26008        * kjs/grammar.y:
26009        * kjs/nodes.cpp:
26010        (KJS::statementListPushFIFO):
26011        (KJS::statementListGetDeclarations):
26012        (KJS::statementListInitializeDeclarationStack):
26013        (KJS::statementListInitializeVariableAccessStack):
26014        (KJS::BlockNode::BlockNode):
26015        (KJS::BlockNode::optimizeVariableAccess):
26016        (KJS::BlockNode::getDeclarations):
26017        (KJS::BlockNode::execute):
26018        (KJS::FunctionBodyNode::initializeDeclarationStacks):
26019        (KJS::FunctionBodyNode::optimizeVariableAccess):
26020
260212007-11-13  Anders Carlsson  <andersca@apple.com>
26022
26023        Add RefCounted.h (And remove Shared.h)
26024        
26025        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
26026
260272007-11-13  Geoffrey Garen  <ggaren@apple.com>
26028
26029        Build fix.
26030
26031        * kjs/regexp.h:
26032
260332007-11-13  Geoffrey Garen  <ggaren@apple.com>
26034
26035        Reviewed by Anders Carlsson.
26036
26037        Renamed Shared to RefCounted.
26038
26039        * API/JSClassRef.h:
26040        * JavaScriptCore.xcodeproj/project.pbxproj:
26041        * kjs/interpreter.h:
26042        * kjs/regexp.h:
26043        * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
26044        (WTF::RefCounted::RefCounted):
26045        * wtf/Shared.h: Removed.
26046
260472007-11-13  Adam Roben  <aroben@apple.com>
26048
26049        Build fix
26050
26051        Reviewed by Geoff.
26052
26053        * kjs/regexp.h: Added a missing #include.
26054
260552007-11-13  Geoffrey Garen  <ggaren@apple.com>
26056
26057        Reviewed by Sam Weinig.
26058
26059        Moved Shared.h into wtf so it could be used in more places. Deployed
26060        Shared in places where JSCore previously had hand-rolled ref-counting
26061        classes.
26062
26063        * API/JSClassRef.cpp:
26064        (OpaqueJSClass::OpaqueJSClass):
26065        * API/JSClassRef.h:
26066        * API/JSObjectRef.cpp:
26067        (JSClassRetain):
26068        (JSClassRelease):
26069        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
26070        * JavaScriptCore.xcodeproj/project.pbxproj:
26071        * kjs/interpreter.cpp:
26072        (KJS::Interpreter::init):
26073        * kjs/interpreter.h:
26074        * kjs/regexp.cpp:
26075        (KJS::RegExp::RegExp):
26076        * kjs/regexp.h:
26077        * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
26078
260792007-11-13  Eric Seidel  <eric@webkit.org>
26080
26081        Reviewed by Maciej.
26082
26083        Add an ASSERT to getTruncatedInt32 to enforce proper usage.
26084        Best part about this patch?  It doesn't break the web!
26085
26086        * kjs/JSImmediate.h:
26087        (KJS::JSImmediate::getTruncatedInt32):
26088        (KJS::JSImmediate::toDouble):
26089        (KJS::JSImmediate::getUInt32):
26090
260912007-11-13  Alexey Proskuryakov  <ap@webkit.org>
26092
26093        Windows build fix.
26094
26095        * bindings/c/c_utility.cpp:
26096        (KJS::Bindings::convertUTF8ToUTF16):
26097        * kjs/ustring.cpp:
26098        (KJS::UString::UTF8String):
26099        * wtf/unicode/UTF8.cpp:
26100        (WTF::Unicode::ConvertUTF8ToUTF16):
26101
261022007-11-13  Darin Adler  <darin@apple.com>
26103
26104        Reviewed by Geoff.
26105
26106        - fix http://bugs.webkit.org/show_bug.cgi?id=11231
26107          RegExp bug when handling newline characters
26108          and a number of other differences between PCRE behvior
26109          and JavaScript regular expressions:
26110
26111          + single-digit sequences like \4 should be treated as octal
26112            character constants, unless there is a sufficient number
26113            of brackets for them to be treated as backreferences
26114
26115          + \8 turns into the character "8", not a binary zero character
26116            followed by "8" (same for 9)
26117
26118          + only the first 3 digits should be considered part of an
26119            octal character constant (the old behavior was to decode
26120            an arbitrarily long sequence and then mask with 0xFF)
26121
26122          + if \x is followed by anything other than two valid hex digits,
26123            then it should simply be treated a the letter "x"; that includes
26124            not supporting the \x{41} syntax
26125
26126          + if \u is followed by anything less than four valid hex digits,
26127            then it should simply be treated a the letter "u"
26128
26129          + an extra "+" should be a syntax error, rather than being treated
26130            as the "possessive quantifier"
26131
26132          + if a "]" character appears immediately after a "[" character that
26133            starts a character class, then that's an empty character class,
26134            rather than being the start of a character class that includes a
26135            "]" character
26136
26137          + a "$" should not match a terminating newline; we could have gotten
26138            PCRE to handle this the way we wanted by passing an appropriate option
26139
26140        Test: fast/js/regexp-no-extensions.html
26141
26142        * pcre/pcre_compile.cpp:
26143        (check_escape): Check backreferences against bracount to catch both
26144        overflows and things that should be treated as octal. Rewrite octal
26145        loop to not go on indefinitely. Rewrite both hex loops to match and
26146        remove \x{} support.
26147        (compile_branch): Restructure loops so that we don't special-case a "]"
26148        at the beginning of a character class. Remove code that treated "+" as
26149        the possessive quantifier.
26150        (jsRegExpCompile): Change the "]" handling here too.
26151
26152        * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
26153        Changed DOLL to remove handling of "terminating newline", a Perl concept
26154        which we don't need.
26155
26156        * tests/mozilla/expected.html: Two tests are fixed now:
26157        ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
26158        One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
26159        was due to a bug (we treated all 1-character numeric escapes as backreferences).
26160        The date tests also now both expect success -- whatever was making them fail
26161        before was probably due to the time being close to a DST shift; maybe we need
26162        to get rid of those tests.
26163
261642007-11-13  Darin Adler  <darin@apple.com>
26165
26166        * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
26167        Remove too-strong assert that was firing constantly and preventing even basic
26168        web browsing from working in a debug build. This function is used in many
26169        cases where the immediate value is not a number; the assertion could perhaps
26170        be added back later with a bit of reorganization.
26171
261722007-11-13  Alp Toker  <alp@atoker.com>
26173
26174        Build fix for breakage to non-Mac builds introduced in r27746.
26175
26176        * kjs/ustring.cpp:
26177
261782007-11-13  Eric Seidel  <eric@webkit.org>
26179
26180        Reviewed by Maciej.
26181
26182        Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
26183
26184        * kjs/JSImmediate.h:
26185        * kjs/nodes.cpp:
26186        (KJS::GreaterNode::inlineEvaluateToBoolean):
26187        (KJS::GreaterNode::evaluate):
26188        (KJS::LessEqNode::inlineEvaluateToBoolean):
26189        (KJS::LessEqNode::evaluate):
26190        (KJS::GreaterEqNode::inlineEvaluateToBoolean):
26191        (KJS::GreaterEqNode::evaluate):
26192        (KJS::InNode::evaluateToBoolean):
26193        (KJS::EqualNode::inlineEvaluateToBoolean):
26194        (KJS::EqualNode::evaluate):
26195        (KJS::NotEqualNode::inlineEvaluateToBoolean):
26196        (KJS::NotEqualNode::evaluate):
26197        (KJS::StrictEqualNode::inlineEvaluateToBoolean):
26198        (KJS::StrictEqualNode::evaluate):
26199        (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
26200        (KJS::NotStrictEqualNode::evaluate):
26201        * kjs/nodes.h:
26202
262032007-11-12  Geoffrey Garen  <ggaren@apple.com>
26204
26205        Reviewed by Sam Weinig.
26206        
26207        Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
26208        base64 spends 1.1% of total time checking for special Infinity case
26209        
26210        Use a fast character test instead of calling strncmp.
26211        
26212        1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
26213        Sharks reports only .1%. Who are you going to believe? Huh?
26214
26215        * kjs/ustring.cpp:
26216        (KJS::UString::toDouble):
26217
262182007-11-12  Eric Seidel  <eric@webkit.org>
26219
26220        Reviewed by Oliver.
26221
26222        Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
26223        Fix a few missing evaluateToBoolean methods
26224        Deploy all evaluateTo* functions to more nodes to avoid slowdowns
26225        http://bugs.webkit.org/show_bug.cgi?id=15950
26226        
26227        SunSpider claims this is at least a 1.4% speedup.
26228
26229        * kjs/JSImmediate.h:
26230        (KJS::JSImmediate::getTruncatedInt32):
26231        (KJS::JSImmediate::toDouble):
26232        (KJS::JSImmediate::getUInt32):
26233        * kjs/nodes.cpp:
26234        (KJS::ExpressionNode::evaluateToNumber):
26235        (KJS::ExpressionNode::evaluateToInt32):
26236        (KJS::ExpressionNode::evaluateToUInt32):
26237        (KJS::NumberNode::evaluateToInt32):
26238        (KJS::NumberNode::evaluateToUInt32):
26239        (KJS::ImmediateNumberNode::evaluateToInt32):
26240        (KJS::ImmediateNumberNode::evaluateToUInt32):
26241        (KJS::ResolveNode::evaluate):
26242        (KJS::ResolveNode::evaluateToNumber):
26243        (KJS::ResolveNode::evaluateToBoolean):
26244        (KJS::ResolveNode::evaluateToInt32):
26245        (KJS::ResolveNode::evaluateToUInt32):
26246        (KJS::LocalVarAccessNode::evaluateToInt32):
26247        (KJS::LocalVarAccessNode::evaluateToUInt32):
26248        (KJS::BracketAccessorNode::evaluateToNumber):
26249        (KJS::BracketAccessorNode::evaluateToBoolean):
26250        (KJS::BracketAccessorNode::evaluateToInt32):
26251        (KJS::BracketAccessorNode::evaluateToUInt32):
26252        (KJS::DotAccessorNode::inlineEvaluate):
26253        (KJS::DotAccessorNode::evaluate):
26254        (KJS::DotAccessorNode::evaluateToNumber):
26255        (KJS::DotAccessorNode::evaluateToBoolean):
26256        (KJS::DotAccessorNode::evaluateToInt32):
26257        (KJS::DotAccessorNode::evaluateToUInt32):
26258        (KJS::NewExprNode::inlineEvaluate):
26259        (KJS::NewExprNode::evaluate):
26260        (KJS::NewExprNode::evaluateToNumber):
26261        (KJS::NewExprNode::evaluateToBoolean):
26262        (KJS::NewExprNode::evaluateToInt32):
26263        (KJS::NewExprNode::evaluateToUInt32):
26264        (KJS::FunctionCallResolveNode::inlineEvaluate):
26265        (KJS::FunctionCallResolveNode::evaluate):
26266        (KJS::FunctionCallResolveNode::evaluateToNumber):
26267        (KJS::FunctionCallResolveNode::evaluateToBoolean):
26268        (KJS::FunctionCallResolveNode::evaluateToInt32):
26269        (KJS::FunctionCallResolveNode::evaluateToUInt32):
26270        (KJS::LocalVarFunctionCallNode::evaluate):
26271        (KJS::LocalVarFunctionCallNode::evaluateToNumber):
26272        (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
26273        (KJS::LocalVarFunctionCallNode::evaluateToInt32):
26274        (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
26275        (KJS::FunctionCallDotNode::evaluate):
26276        (KJS::FunctionCallDotNode::evaluateToNumber):
26277        (KJS::FunctionCallDotNode::evaluateToBoolean):
26278        (KJS::FunctionCallDotNode::evaluateToInt32):
26279        (KJS::FunctionCallDotNode::evaluateToUInt32):
26280        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
26281        (KJS::PostDecLocalVarNode::evaluateToNumber):
26282        (KJS::PostDecLocalVarNode::evaluateToBoolean):
26283        (KJS::PostDecLocalVarNode::evaluateToInt32):
26284        (KJS::PostDecLocalVarNode::evaluateToUInt32):
26285        (KJS::typeStringForValue):
26286        (KJS::UnaryPlusNode::evaluate):
26287        (KJS::UnaryPlusNode::evaluateToBoolean):
26288        (KJS::UnaryPlusNode::evaluateToNumber):
26289        (KJS::UnaryPlusNode::evaluateToInt32):
26290        (KJS::BitwiseNotNode::inlineEvaluateToInt32):
26291        (KJS::BitwiseNotNode::evaluate):
26292        (KJS::BitwiseNotNode::evaluateToNumber):
26293        (KJS::BitwiseNotNode::evaluateToBoolean):
26294        (KJS::BitwiseNotNode::evaluateToInt32):
26295        (KJS::MultNode::evaluateToBoolean):
26296        (KJS::MultNode::evaluateToInt32):
26297        (KJS::MultNode::evaluateToUInt32):
26298        (KJS::DivNode::evaluateToInt32):
26299        (KJS::DivNode::evaluateToUInt32):
26300        (KJS::ModNode::evaluateToBoolean):
26301        (KJS::ModNode::evaluateToInt32):
26302        (KJS::ModNode::evaluateToUInt32):
26303        (KJS::AddNode::evaluateToNumber):
26304        (KJS::AddNode::evaluateToInt32):
26305        (KJS::AddNode::evaluateToUInt32):
26306        (KJS::AddNumbersNode::evaluateToInt32):
26307        (KJS::AddNumbersNode::evaluateToUInt32):
26308        (KJS::SubNode::evaluateToInt32):
26309        (KJS::SubNode::evaluateToUInt32):
26310        (KJS::LeftShiftNode::inlineEvaluateToInt32):
26311        (KJS::LeftShiftNode::evaluate):
26312        (KJS::LeftShiftNode::evaluateToNumber):
26313        (KJS::LeftShiftNode::evaluateToInt32):
26314        (KJS::RightShiftNode::inlineEvaluateToInt32):
26315        (KJS::RightShiftNode::evaluate):
26316        (KJS::RightShiftNode::evaluateToNumber):
26317        (KJS::RightShiftNode::evaluateToInt32):
26318        (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
26319        (KJS::UnsignedRightShiftNode::evaluate):
26320        (KJS::UnsignedRightShiftNode::evaluateToNumber):
26321        (KJS::UnsignedRightShiftNode::evaluateToInt32):
26322        (KJS::LessNode::inlineEvaluateToBoolean):
26323        (KJS::LessNode::evaluate):
26324        (KJS::LessNode::evaluateToBoolean):
26325        (KJS::LessNumbersNode::inlineEvaluateToBoolean):
26326        (KJS::LessNumbersNode::evaluate):
26327        (KJS::LessNumbersNode::evaluateToBoolean):
26328        (KJS::LessStringsNode::inlineEvaluateToBoolean):
26329        (KJS::LessStringsNode::evaluate):
26330        (KJS::BitAndNode::evaluate):
26331        (KJS::BitAndNode::inlineEvaluateToInt32):
26332        (KJS::BitAndNode::evaluateToNumber):
26333        (KJS::BitAndNode::evaluateToBoolean):
26334        (KJS::BitAndNode::evaluateToInt32):
26335        (KJS::BitXOrNode::inlineEvaluateToInt32):
26336        (KJS::BitXOrNode::evaluate):
26337        (KJS::BitXOrNode::evaluateToNumber):
26338        (KJS::BitXOrNode::evaluateToBoolean):
26339        (KJS::BitXOrNode::evaluateToInt32):
26340        (KJS::BitOrNode::inlineEvaluateToInt32):
26341        (KJS::BitOrNode::evaluate):
26342        (KJS::BitOrNode::evaluateToNumber):
26343        (KJS::BitOrNode::evaluateToBoolean):
26344        (KJS::BitOrNode::evaluateToInt32):
26345        (KJS::ConditionalNode::evaluateToNumber):
26346        (KJS::ConditionalNode::evaluateToInt32):
26347        (KJS::ConditionalNode::evaluateToUInt32):
26348        (KJS::valueForReadModifyAssignment):
26349        (KJS::AssignExprNode::evaluate):
26350        (KJS::AssignExprNode::evaluateToBoolean):
26351        (KJS::AssignExprNode::evaluateToNumber):
26352        (KJS::AssignExprNode::evaluateToInt32):
26353        (KJS::VarDeclNode::handleSlowCase):
26354        * kjs/nodes.h:
26355        (KJS::FunctionCallResolveNode::precedence):
26356        (KJS::AddNode::precedence):
26357        (KJS::AddNode::):
26358        (KJS::LessNumbersNode::):
26359        (KJS::LessStringsNode::):
26360        * kjs/value.cpp:
26361        (KJS::JSValue::toInt32SlowCase):
26362        (KJS::JSValue::toUInt32SlowCase):
26363        * kjs/value.h:
26364        (KJS::JSValue::asCell):
26365        (KJS::JSValue::toInt32):
26366        (KJS::JSValue::toUInt32):
26367
263682007-11-12  Alexey Proskuryakov  <ap@webkit.org>
26369
26370        Reviewed by Darin.
26371
26372        http://bugs.webkit.org/show_bug.cgi?id=15953
26373        Add UTF-8 encoding/decoding to WTF
26374
26375        * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
26376        * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
26377        parameter. Callers are not interested in getting decoding results in strict mode, so 
26378        this allows for bailing out as soon as an error is seen.
26379
26380        * kjs/function.cpp:
26381        (KJS::encode): Updated for new UString::UTF8String() signature.
26382
26383        * API/JSStringRef.cpp:
26384        (JSStringCreateWithCharacters): Disambiguate UChar.
26385        (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
26386        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
26387
26388        * wtf/unicode/UTF8.cpp: Added.
26389        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
26390        (WTF::Unicode::inlineUTF8SequenceLength):
26391        (WTF::Unicode::UTF8SequenceLength):
26392        (WTF::Unicode::decodeUTF8Sequence):
26393        (WTF::Unicode::):
26394        (WTF::Unicode::ConvertUTF16ToUTF8):
26395        (WTF::Unicode::isLegalUTF8):
26396        (WTF::Unicode::ConvertUTF8ToUTF16):
26397        * wtf/unicode/UTF8.h: Added.
26398        (WTF::Unicode::):
26399        Some code moved from ustring.h, some adapted from unicode.org sources.
26400
26401        * JavaScriptCore.exp:
26402        * JavaScriptCore.pri:
26403        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
26404        * JavaScriptCore.xcodeproj/project.pbxproj:
26405        * JavaScriptCoreSources.bkl:
26406        Added UTF8.{h,cpp}
26407
264082007-11-12  Josh Aas  <joshmoz@gmail.com>
26409
26410        Reviewed by Darin.
26411
26412        - http://bugs.webkit.org/show_bug.cgi?id=15946
26413          add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
26414
26415        * bindings/npapi.h:
26416
264172007-11-12  Darin Adler  <darin@apple.com>
26418
26419        Reviewed by Sam.
26420
26421        - http://bugs.webkit.org/show_bug.cgi?id=15951
26422          REGRESSION: assertion failure in regexp match() when running JS tests
26423
26424        Test: fast/js/regexp-many-brackets.html
26425
26426        * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
26427        the BRANUMBER opcode.
26428
264292007-11-12  Darin Adler  <darin@apple.com>
26430
26431        Reviewed by Geoff.
26432
26433        - fix use of prefix and config.h, got rid of a few unneeded things in
26434          the PCRE code; no behavior changes
26435
26436        * API/JSBase.cpp: Added include of config.h.
26437        * API/JSCallbackConstructor.cpp: Ditto.
26438        * API/JSCallbackFunction.cpp: Ditto.
26439        * API/JSCallbackObject.cpp: Ditto.
26440        * API/JSClassRef.cpp: Ditto.
26441        * API/JSContextRef.cpp: Ditto.
26442        * API/JSObjectRef.cpp: Ditto.
26443        * API/JSStringRef.cpp: Ditto.
26444        * API/JSValueRef.cpp: Ditto.
26445
26446        * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
26447        Moved new/delete macros after includes, as they are in WebCore's prefix.
26448        Removed "config.h".
26449
26450        * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
26451        function. This is needed for PCRE, but not helpful for our use. Also changed
26452        the tables to all be 128 entries long instead of 256, since only the first
26453        128 are ever used.
26454
26455        * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
26456        which was only being used to check hex digits. Changed all uses of TRUE and
26457        FALSE to use the C++ true and false instead.
26458        (check_escape): Just the TRUE/FALSE thing.
26459        (is_counted_repeat): Ditto.
26460        (could_be_empty_branch): Ditto.
26461        (get_othercase_range): Ditto.
26462        (compile_branch): Ditto.
26463        (compile_regex): Ditto.
26464        (is_anchored): Ditto.
26465        (is_startline): Ditto.
26466        (find_firstassertedchar): Ditto.
26467        (jsRegExpCompile): Ditto.
26468
26469        * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
26470        FALSE to use the C++ true and false instead.
26471        (match_ref): Just the TRUE/FALSE thing.
26472        (match): Ditto. Removed some unneeded braces.
26473        (jsRegExpExecute): Just the TRUE/FALSE thing.
26474
26475        * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
26476        of the file instead of the bottom, so they can be used. Also changed the table
26477        sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
26478        Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
26479        be a macro instead of a extern int.
26480
26481        * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
26482
26483        * pcre/pcre_tables.cpp: Made table sizes explicit.
26484
26485        * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
26486
264872007-11-12  Adam Roben  <aroben@apple.com>
26488
26489        Build fix
26490
26491        * wtf/FastMalloc.h: Add missing using statement.
26492
264932007-11-11  Oliver Hunt  <oliver@apple.com>
26494
26495        Reviewed by Darin.
26496
26497        Add special fastZeroedMalloc function to replace a 
26498        number of fastCalloc calls where one argument was 1.
26499        
26500        This results in a 0.4% progression in SunSpider, more
26501        than making up for the earlier regression caused by 
26502        additional overflow checks.
26503
26504        * JavaScriptCore.exp:
26505        * kjs/array_instance.cpp:
26506        * kjs/property_map.cpp:
26507        * wtf/FastMalloc.cpp:
26508        * wtf/FastMalloc.h:
26509        * wtf/HashTable.h:
26510
265112007-11-11  Adam Roben  <aroben@apple.com>
26512
26513        Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
26514
26515        The bug was due to a mismatch between HashMap::remove and
26516        HashTable::checkTableConsistency. HashMap::remove can delete the value
26517        stored in the HashTable (by derefing it), which is not normally
26518        allowed by HashTable. It's OK in this case because the value is about
26519        to be removed from the table, but HashTable wasn't aware of this.
26520
26521        HashMap::remove now performs the consistency check itself before
26522        derefing the value.
26523
26524        Darin noticed that the same bug would occur in HashSet, so I've fixed
26525        it there as well.
26526
26527        Reviewed by Darin.
26528
26529        * wtf/HashMap.h:
26530        (WTF::HashMap::remove): Perform the HashTable consistency check
26531        manually before calling deref.
26532        * wtf/HashSet.h:
26533        (WTF::HashSet::remove): Ditto.
26534        * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
26535        and HashSet can call it.
26536        (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
26537        Added.
26538        (WTF::HashTable::removeAndInvalidate): Added.
26539        (WTF::HashTable::remove):
26540        (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
26541
265422007-11-11  Mark Rowe  <mrowe@apple.com>
26543
26544        Build fix.  Use the correct filename case.
26545
26546        * kjs/nodes.h:
26547
265482007-11-11  Geoffrey Garen  <ggaren@apple.com>
26549
26550        Reviewed by Sam Weinig.
26551        
26552        Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
26553        15% of string-validate-input.js is spent compiling the same regular expression
26554        
26555        Store a compiled representation of the regular expression in the AST.
26556        
26557        Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
26558        string-validate-input.js.
26559
26560        * kjs/nodes.cpp:
26561        (KJS::RegExpNode::evaluate):
26562        * kjs/nodes.h:
26563        (KJS::RegExpNode::):
26564        * kjs/nodes2string.cpp:
26565        (KJS::RegExpNode::streamTo):
26566        * kjs/regexp.cpp:
26567        (KJS::RegExp::flags):
26568        * kjs/regexp.h:
26569        (KJS::RegExp::pattern):
26570        * kjs/regexp_object.cpp:
26571        (KJS::RegExpObjectImp::construct):
26572        (KJS::RegExpObjectImp::createRegExpImp):
26573        * kjs/regexp_object.h:
26574
265752007-11-11  Oliver Hunt  <oliver@apple.com>
26576
26577        Reviewed by Eric.
26578
26579        Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
26580
26581        Unfortunately this is a very slight regression, but is unavoidable.
26582
26583        * wtf/FastMalloc.cpp:
26584
265852007-11-10  Eric Seidel  <eric@webkit.org>
26586
26587        Reviewed by darin.
26588        
26589        Add simple type inferencing to the parser, and create custom
26590        AddNode and LessNode subclasses based on inferred types.
26591        http://bugs.webkit.org/show_bug.cgi?id=15884
26592        
26593        SunSpider claims this is at least a 0.5% speedup.
26594
26595        * JavaScriptCore.exp:
26596        * kjs/grammar.y:
26597        * kjs/internal.cpp:
26598        (KJS::NumberImp::getPrimitiveNumber):
26599        (KJS::GetterSetterImp::getPrimitiveNumber):
26600        * kjs/internal.h:
26601        * kjs/lexer.cpp:
26602        (KJS::Lexer::lex):
26603        * kjs/nodes.cpp:
26604        (KJS::Node::Node):
26605        (KJS::StringNode::evaluate):
26606        (KJS::StringNode::evaluateToNumber):
26607        (KJS::StringNode::evaluateToBoolean):
26608        (KJS::RegExpNode::evaluate):
26609        (KJS::UnaryPlusNode::optimizeVariableAccess):
26610        (KJS::AddNode::evaluate):
26611        (KJS::AddNode::evaluateToNumber):
26612        (KJS::AddNumbersNode::inlineEvaluateToNumber):
26613        (KJS::AddNumbersNode::evaluate):
26614        (KJS::AddNumbersNode::evaluateToNumber):
26615        (KJS::AddStringsNode::evaluate):
26616        (KJS::AddStringLeftNode::evaluate):
26617        (KJS::AddStringRightNode::evaluate):
26618        (KJS::lessThan):
26619        (KJS::lessThanEq):
26620        (KJS::LessNumbersNode::evaluate):
26621        (KJS::LessStringsNode::evaluate):
26622        * kjs/nodes.h:
26623        (KJS::ExpressionNode::):
26624        (KJS::RegExpNode::):
26625        (KJS::RegExpNode::precedence):
26626        (KJS::TypeOfResolveNode::):
26627        (KJS::LocalVarTypeOfNode::):
26628        (KJS::UnaryPlusNode::):
26629        (KJS::UnaryPlusNode::precedence):
26630        (KJS::AddNode::):
26631        (KJS::AddNode::precedence):
26632        (KJS::AddNumbersNode::):
26633        (KJS::AddStringLeftNode::):
26634        (KJS::AddStringRightNode::):
26635        (KJS::AddStringsNode::):
26636        (KJS::LessNode::):
26637        (KJS::LessNode::precedence):
26638        (KJS::LessNumbersNode::):
26639        (KJS::LessStringsNode::):
26640        * kjs/nodes2string.cpp:
26641        (KJS::StringNode::streamTo):
26642        * kjs/object.cpp:
26643        * kjs/object.h:
26644        * kjs/value.h:
26645        (KJS::JSValue::getPrimitiveNumber):
26646
266472007-11-11  Darin Adler  <darin@apple.com>
26648
26649        - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
26650
26651        * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
26652        Later we can break it into two files.
26653
26654        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
26655        * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
26656        * pcre/dftables.pro: Take out now-unneeded include paths.
26657        * pcre/pcre_maketables.cpp: Use new instead of malloc.
26658
266592007-11-11  Darin Adler  <darin@apple.com>
26660
26661        * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
26662        another include path.
26663
266642007-11-11  Darin Adler  <darin@apple.com>
26665
26666        * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
26667        by adding another include path.
26668
266692007-11-11  Darin Adler  <darin@apple.com>
26670
26671        Reviewed by Sam.
26672
26673        - http://bugs.webkit.org/show_bug.cgi?id=15924
26674          next round of changes to JSRegExp (formerly PCRE)
26675
26676        This is a combination of converting to C++, tweaking the API, and adding
26677        some additional optimizations.
26678
26679        Future steps will involve getting rid of the use of UTF-8 completely
26680        (we'll use UTF-16 exclusively instead), eliminating more source files,
26681        and some more speed-ups.
26682
26683        SunSpider says the current round is an 0.9% speed-up overall, and a
26684        5.3% speed-up for regexp.
26685
26686        * JavaScriptCore.exp: Updated for new entry points.
26687
26688        * JavaScriptCore.pri:
26689        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26690        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
26691        * JavaScriptCore.xcodeproj/project.pbxproj:
26692        * JavaScriptCoreSources.bkl:
26693        * jscore.bkl:
26694        Updated for new source file names and ForwardingHeaders.
26695
26696        * kjs/regexp.cpp:
26697        (KJS::RegExp::RegExp): Changed to use the error message without calling
26698        strdup on it and to pass the new types and options.
26699        (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
26700        (KJS::RegExp::match): Pass the new types and options.
26701        * kjs/regexp.h: Update type of m_constructionError.
26702
26703        * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
26704        the Google parts, and this isn't the PCRE library, per se.
26705        * pcre/COPYING: Ditto.
26706
26707        * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
26708        (main): Removed unneeded ctype_digit.
26709
26710        * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
26711
26712        * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
26713        Moved a lot of private stuff used only within this file here from pcre_internal.h.
26714        Renumbered the error codes.
26715        (error_text): Use a single string with embedded nulls for the error text (I got
26716        this idea from newer versions of PCRE).
26717        (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
26718        uses with isASCIIDigit.
26719        (is_counted_repeat): Ditto.
26720        (read_repeat_counts): Ditto.
26721        (first_significant_code): Ditto.
26722        (find_fixedlength): Ditto.
26723        (could_be_empty_branch): Ditto.
26724        (compile_branch): Ditto. Also removed some code that handles changing options.
26725        JavaScript doesn't have any of the features that allow options to change.
26726        (compile_regex): Updated for change to options parameter.
26727        (is_anchored): Ditto.
26728        (find_firstassertedchar): Ditto.
26729        (jsRegExpCompile): Changed to take separate flags instead of an options int.
26730        Also changed to call new/delete instead of pcre_malloc/free.
26731        (jsRegExpFree): Ditto.
26732
26733        * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
26734        Added a case that uses computed goto for the opcode loop, but did not turn it on.
26735        Changed the RMATCH macro to handle returns more efficiently by putting the where
26736        pointer in the new frame instead of the old one, allowing us to branch to the
26737        return with a single statement. Switched to new/delete from pcre_malloc/free.
26738        Changed many RRETURN callers to not set the return value since it's already
26739        set correctly. Replaced the rrc variable with an is_match variable. Values other
26740        than "match" and "no match" are now handled differently. This allows us to remove
26741        the code to check for those cases in various rules.
26742        (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
26743        continue statements, or break statements that break out of the outer case use
26744        a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
26745        (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
26746        start_match field from the match block.
26747
26748        * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
26749        in here. Removed various unused types. Converted from JSRegExpChar to UChar.
26750        Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
26751        used in multiple places. Unfortunately we lose the comments for each opcode; we
26752        should find a place to put those back. Removed ctype_digit.
26753
26754        * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
26755        (pcre_maketables): Got rid of the conditional code that allows this to be compiled
26756        in -- it's only used for dftables now (and soon may be obsolete entirely).
26757        Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
26758        loop. Removed ctype_digit.
26759
26760        * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
26761
26762        * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
26763        Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
26764
26765        * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
26766        Updated for other file name changes.
26767
26768        * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
26769
26770        * pcre/ucpinternal.h: Updated header.
26771
26772        * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
26773
26774        * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
26775        & for this operation. Also added an overload that takes an int because that's
26776        useful for PCRE. Later we could optimize for int and overload other functions in
26777        this file; stuck to this simple one for now.
26778
26779        * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
26780        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
26781
26782        * pcre/LICENCE: Removed.
26783        * pcre/pcre-config.h: Removed.
26784        * wtf/FastMallocPCRE.cpp: Removed.
26785
26786        * pcre/dftables.c: Renamed to cpp.
26787        * pcre/pcre_compile.c: Ditto.
26788        * pcre/pcre_exec.c: Ditto.
26789        * pcre/pcre_maketables.c: Ditto.
26790        * pcre/pcre_ord2utf8.c: Ditto.
26791        * pcre/pcre_tables.c: Ditto.
26792        * pcre/pcre_ucp_searchfuncs.c: Ditto.
26793        * pcre/pcre_xclass.c: Ditto.
26794        * pcre/ucptable.c: Ditto.
26795
267962007-11-11  Eric Seidel  <eric@webkit.org>
26797
26798        Reviewed by Oliver.
26799
26800        Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
26801
26802        * kjs/nodes.cpp:
26803        (KJS::ExpressionNode::evaluateToBoolean):
26804        (KJS::LessNode::evaluateToBoolean):
26805        (KJS::GreaterNode::evaluateToBoolean):
26806        (KJS::LessEqNode::evaluateToBoolean):
26807        (KJS::GreaterEqNode::evaluateToBoolean):
26808        (KJS::InstanceOfNode::evaluateToBoolean):
26809        (KJS::InNode::evaluateToBoolean):
26810        (KJS::EqualNode::evaluateToBoolean):
26811        (KJS::NotEqualNode::evaluateToBoolean):
26812        (KJS::StrictEqualNode::evaluateToBoolean):
26813        (KJS::NotStrictEqualNode::evaluateToBoolean):
26814        (KJS::LogicalAndNode::evaluateToBoolean):
26815        (KJS::LogicalOrNode::evaluateToBoolean):
26816        (KJS::ConditionalNode::evaluateToBoolean):
26817
268182007-11-10  Darin Adler  <darin@apple.com>
26819
26820        Reviewed by Sam.
26821
26822        - fix http://bugs.webkit.org/show_bug.cgi?id=15927
26823          REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
26824          and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
26825
26826        Test: fast/js/delete-then-put.html
26827
26828        * kjs/property_map.cpp:
26829        (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
26830        (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
26831        problem before.
26832
26833        - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
26834
26835        * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
26836        optimizeForUnnecessaryResult, since the result is used in some cases.
26837
268382007-11-10  Adam Roben  <aroben@apple.com>
26839
26840        Windows build fix
26841
26842        Roll out some changes that were (seemingly accidentally) checked in
26843        with r27664.
26844
26845        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26846
268472007-11-10  Darin Adler  <darin@apple.com>
26848
26849        Reviewed by Sam.
26850
26851        - http://bugs.webkit.org/show_bug.cgi?id=15915
26852          add an evaluation path for booleans like the one we have for numbers
26853
26854        Gives 1.1% on SunSpider.
26855
26856        * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
26857
26858        * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
26859        down from Node to ExpressionNode. Changed some classes to not inherit from
26860        ExpressionNode where not necessary, and removed unnneeded evaluate functions
26861        as well as evaluate functions that need not be virtual. Call the
26862        optimizeForUnnecessaryResult function on the start of a for loop too.
26863        * kjs/nodes.cpp:
26864        (KJS::ExpressionNode::evaluateToBoolean): Added.
26865        (KJS::FalseNode::evaluate): Added.
26866        (KJS::TrueNode::evaluate): Added.
26867        (KJS::NumberNode::evaluateToBoolean): Added.
26868        (KJS::StringNode::evaluateToBoolean): Added.
26869        (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
26870        (KJS::BracketAccessorNode::evaluateToBoolean): Added.
26871        (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
26872        (KJS::LogicalNotNode::evaluateToBoolean): Added.
26873        (KJS::lessThan): Changed to return bool.
26874        (KJS::lessThanEq): Ditto.
26875        (KJS::LessNode::evaluate): Changed since lessThan returns bool.
26876        (KJS::LessNode::evaluateToBoolean): Added.
26877        (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
26878        (KJS::GreaterNode::evaluateToBoolean): Added.
26879        (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
26880        (KJS::LessEqNode::evaluateToBoolean): Added.
26881        (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
26882        (KJS::GreaterEqNode::evaluateToBoolean): Added.
26883        (KJS::InstanceOfNode::evaluateToBoolean): Added.
26884        (KJS::InNode::evaluateToBoolean): Added.
26885        (KJS::EqualNode::evaluateToBoolean): Added.
26886        (KJS::NotEqualNode::evaluateToBoolean): Added.
26887        (KJS::StrictEqualNode::evaluateToBoolean): Added.
26888        (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
26889        (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
26890        (KJS::IfNode::execute): Ditto.
26891        (KJS::DoWhileNode::execute): Ditto.
26892        (KJS::WhileNode::execute): Ditto.
26893        (KJS::ForNode::execute): Ditto.
26894
26895        * kjs/nodes2string.cpp:
26896        (KJS::FalseNode::streamTo): Added.
26897        (KJS::TrueNode::streamTo): Added.
26898
268992007-11-09  Adam Roben  <aroben@apple.com>
26900
26901        Windows build fix
26902
26903        Reviewed by Darin.
26904
26905        * kjs/value.h:
26906        (KJS::jsNumber): Add some explicit casts.
26907
269082007-11-08  Darin Adler  <darin@apple.com>
26909
26910        - fix build
26911
26912        * kjs/grammar.y:
26913        * kjs/nodes.h:
26914        * kjs/property_map.cpp:
26915
269162007-11-08  Darin Adler  <darin@apple.com>
26917
26918        - roll out accidentally-checked in changes
26919
26920        * kjs/nodes.cpp: Back to previous version.
26921        * kjs/nodes.h: Ditto.
26922        * kjs/grammar.y: Ditto.
26923
269242007-11-08  Darin Adler  <darin@apple.com>
26925
26926        Reviewed by Maciej.
26927
26928        - http://bugs.webkit.org/show_bug.cgi?id=15912
26929          fasta spends a lot of time in qsort
26930
26931        * kjs/property_map.cpp:
26932        (KJS::PropertyMap::getEnumerablePropertyNames):
26933        Use insertion sort instead of qsort for small sets of property names.
26934        We can probably do some even-better speedups of for/in, but this nets
26935        0.6% overall and 6.7% on fasta.
26936
269372007-11-08  Darin Adler  <darin@apple.com>
26938
26939        Reviewed by Maciej.
26940
26941        - http://bugs.webkit.org/show_bug.cgi?id=15906
26942          getting characters by indexing into a string is very slow
26943
26944        This fixes one source of the slowness -- the conversion to an unused
26945        Identifier as we call the get function from the slot -- but doesn't
26946        fix others, such as the fact that we have to allocate a new UString::Rep
26947        for every single character.
26948
26949        Speeds up string-base64 30%, and at least 0.5% overall.
26950        But does slow down access-fannkuch quite a bit. Might be worth
26951        revisiting in the future to see what we can do about that (although
26952        I did look at a profile for a while).
26953
26954        * kjs/property_slot.h: Add a new marker for "numeric" property slots;
26955        slots where we don't need to pass the identifier to the get function.
26956        (KJS::PropertySlot::getValue): Added code to call the numeric get function.
26957        (KJS::PropertySlot::setCustomNumeric): Added.
26958        * kjs/string_object.cpp:
26959        (KJS::StringInstance::indexGetter): Changed to use substr() instead
26960        of constructing a wholly new UString each time.
26961        (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
26962        takes advantage of setCustomNumeric to avoid creating an Identifier.
26963        (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.
26964
269652007-11-08  Darin Adler  <darin@apple.com>
26966
26967        Reviewed by Oliver.
26968
26969        - http://bugs.webkit.org/show_bug.cgi?id=15904
26970          more speed-ups possible by tightening up int version of JSImmediate
26971
26972        1% improvement of SunSpider
26973
26974        * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
26975        (KJS::JSImmediate::from): Overload for most numeric types; many types can
26976        do fewer branches and checks.
26977        (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
26978        (KJS::JSImmediate::getTruncatedInt32): Ditto.
26979        (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
26980        between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.
26981
26982        * kjs/grammar.y: Update since fromDouble is now just from.
26983        * kjs/nodes.h: Ditto.
26984
26985        * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.
26986
269872007-11-08  Kevin Ollivier  <kevino@theolliviers.com>
26988
26989        Bakefiles for building JavaScriptCore, needed by wx port.
26990
26991        Reviewed by Mark Rowe.
26992
26993        * JavaScriptCoreSources.bkl: Added.
26994        * jscore.bkl: Added.
26995
269962007-11-08  Oliver Hunt  <oliver@apple.com>
26997
26998        Reviewed by Maciej.
26999
27000        Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.
27001
27002        The implementation of JSImmediate::areBothImmediateNumbers relies on 
27003        (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 
27004        a unique result when both immediate values are numbers.
27005
27006        The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
27007        By swapping the value of NumberType and UndefinedType this ceases to be a problem.
27008
27009        * kjs/JSType.h:
27010
270112007-11-08  Darin Adler  <darin@apple.com>
27012
27013        - fix build
27014
27015        * kjs/nodes.h: Add missing parameter name.
27016
270172007-11-08  Eric Seidel  <eric@webkit.org>
27018
27019        Reviewed by darin.
27020
27021        Add ExpressionNode subclass of Node, use it.
27022
27023        * kjs/grammar.y:
27024        * kjs/nodes.cpp:
27025        (KJS::ForInNode::ForInNode):
27026        * kjs/nodes.h:
27027        (KJS::ExpressionNode::):
27028        (KJS::NullNode::):
27029        (KJS::NullNode::precedence):
27030        (KJS::BooleanNode::):
27031        (KJS::BooleanNode::precedence):
27032        (KJS::RegExpNode::):
27033        (KJS::RegExpNode::precedence):
27034        (KJS::ThisNode::):
27035        (KJS::ThisNode::precedence):
27036        (KJS::ResolveNode::):
27037        (KJS::ElementNode::):
27038        (KJS::ArrayNode::):
27039        (KJS::PropertyNode::):
27040        (KJS::PropertyNode::precedence):
27041        (KJS::PropertyNode::name):
27042        (KJS::PropertyListNode::):
27043        (KJS::ObjectLiteralNode::):
27044        (KJS::ObjectLiteralNode::precedence):
27045        (KJS::BracketAccessorNode::):
27046        (KJS::DotAccessorNode::):
27047        (KJS::DotAccessorNode::precedence):
27048        (KJS::ArgumentListNode::):
27049        (KJS::ArgumentsNode::):
27050        (KJS::NewExprNode::):
27051        (KJS::NewExprNode::precedence):
27052        (KJS::FunctionCallValueNode::):
27053        (KJS::FunctionCallValueNode::precedence):
27054        (KJS::FunctionCallResolveNode::):
27055        (KJS::FunctionCallBracketNode::):
27056        (KJS::FunctionCallBracketNode::precedence):
27057        (KJS::FunctionCallDotNode::):
27058        (KJS::FunctionCallDotNode::precedence):
27059        (KJS::PrePostResolveNode::):
27060        (KJS::PostfixBracketNode::):
27061        (KJS::PostfixBracketNode::precedence):
27062        (KJS::PostIncBracketNode::):
27063        (KJS::PostIncBracketNode::isIncrement):
27064        (KJS::PostDecBracketNode::):
27065        (KJS::PostDecBracketNode::isIncrement):
27066        (KJS::PostfixDotNode::):
27067        (KJS::PostfixDotNode::precedence):
27068        (KJS::PostIncDotNode::):
27069        (KJS::PostIncDotNode::isIncrement):
27070        (KJS::PostDecDotNode::):
27071        (KJS::PostDecDotNode::isIncrement):
27072        (KJS::PostfixErrorNode::):
27073        (KJS::PostfixErrorNode::precedence):
27074        (KJS::DeleteResolveNode::):
27075        (KJS::DeleteBracketNode::):
27076        (KJS::DeleteBracketNode::precedence):
27077        (KJS::DeleteDotNode::):
27078        (KJS::DeleteDotNode::precedence):
27079        (KJS::DeleteValueNode::):
27080        (KJS::DeleteValueNode::precedence):
27081        (KJS::VoidNode::):
27082        (KJS::VoidNode::precedence):
27083        (KJS::TypeOfResolveNode::):
27084        (KJS::TypeOfValueNode::):
27085        (KJS::PrefixBracketNode::):
27086        (KJS::PrefixBracketNode::precedence):
27087        (KJS::PreIncBracketNode::):
27088        (KJS::PreIncBracketNode::isIncrement):
27089        (KJS::PreDecBracketNode::):
27090        (KJS::PreDecBracketNode::isIncrement):
27091        (KJS::PrefixDotNode::):
27092        (KJS::PrefixDotNode::precedence):
27093        (KJS::PreIncDotNode::):
27094        (KJS::PreIncDotNode::isIncrement):
27095        (KJS::PreDecDotNode::):
27096        (KJS::PreDecDotNode::isIncrement):
27097        (KJS::PrefixErrorNode::):
27098        (KJS::PrefixErrorNode::precedence):
27099        (KJS::UnaryPlusNode::):
27100        (KJS::UnaryPlusNode::precedence):
27101        (KJS::NegateNode::):
27102        (KJS::NegateNode::precedence):
27103        (KJS::BitwiseNotNode::):
27104        (KJS::BitwiseNotNode::precedence):
27105        (KJS::LogicalNotNode::):
27106        (KJS::LogicalNotNode::precedence):
27107        (KJS::AddNode::):
27108        (KJS::AddNode::precedence):
27109        (KJS::LeftShiftNode::):
27110        (KJS::LeftShiftNode::precedence):
27111        (KJS::RightShiftNode::):
27112        (KJS::RightShiftNode::precedence):
27113        (KJS::UnsignedRightShiftNode::):
27114        (KJS::UnsignedRightShiftNode::precedence):
27115        (KJS::LessNode::):
27116        (KJS::LessNode::precedence):
27117        (KJS::GreaterNode::):
27118        (KJS::GreaterNode::precedence):
27119        (KJS::LessEqNode::):
27120        (KJS::LessEqNode::precedence):
27121        (KJS::GreaterEqNode::):
27122        (KJS::GreaterEqNode::precedence):
27123        (KJS::InstanceOfNode::):
27124        (KJS::InstanceOfNode::precedence):
27125        (KJS::InNode::):
27126        (KJS::InNode::precedence):
27127        (KJS::EqualNode::):
27128        (KJS::EqualNode::precedence):
27129        (KJS::NotEqualNode::):
27130        (KJS::NotEqualNode::precedence):
27131        (KJS::StrictEqualNode::):
27132        (KJS::StrictEqualNode::precedence):
27133        (KJS::NotStrictEqualNode::):
27134        (KJS::NotStrictEqualNode::precedence):
27135        (KJS::BitAndNode::):
27136        (KJS::BitAndNode::precedence):
27137        (KJS::BitOrNode::):
27138        (KJS::BitOrNode::precedence):
27139        (KJS::BitXOrNode::):
27140        (KJS::BitXOrNode::precedence):
27141        (KJS::LogicalAndNode::):
27142        (KJS::LogicalAndNode::precedence):
27143        (KJS::LogicalOrNode::):
27144        (KJS::LogicalOrNode::precedence):
27145        (KJS::ConditionalNode::):
27146        (KJS::ConditionalNode::precedence):
27147        (KJS::ReadModifyResolveNode::):
27148        (KJS::ReadModifyResolveNode::precedence):
27149        (KJS::AssignResolveNode::):
27150        (KJS::AssignResolveNode::precedence):
27151        (KJS::ReadModifyBracketNode::):
27152        (KJS::ReadModifyBracketNode::precedence):
27153        (KJS::AssignBracketNode::):
27154        (KJS::AssignBracketNode::precedence):
27155        (KJS::AssignDotNode::):
27156        (KJS::AssignDotNode::precedence):
27157        (KJS::ReadModifyDotNode::):
27158        (KJS::ReadModifyDotNode::precedence):
27159        (KJS::AssignErrorNode::):
27160        (KJS::AssignErrorNode::precedence):
27161        (KJS::CommaNode::):
27162        (KJS::CommaNode::precedence):
27163        (KJS::AssignExprNode::):
27164        (KJS::AssignExprNode::precedence):
27165        (KJS::ExprStatementNode::):
27166        (KJS::IfNode::):
27167        (KJS::DoWhileNode::):
27168        (KJS::WhileNode::):
27169        (KJS::ReturnNode::):
27170        (KJS::WithNode::):
27171        (KJS::ThrowNode::):
27172        (KJS::ParameterNode::):
27173        (KJS::CaseClauseNode::):
27174        (KJS::CaseClauseNode::precedence):
27175        (KJS::ClauseListNode::):
27176        (KJS::SwitchNode::):
27177
271782007-11-08  Oliver Hunt  <oliver@apple.com>
27179
27180        Reviewed by Sam.
27181
27182        Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).
27183
27184        This only improves bitwise-and performance, as the additional logic required 
27185        for similar code paths on or, xor, and shifting requires additional operations
27186        and branches that negate (and in certain cases, regress) any advantage we might
27187        otherwise receive.
27188
27189        This improves performance on all bitop tests, the cryptography tests, as well as 
27190        the string-base64 and string-unpack-code tests.  No significant degradation on 
27191        any other tests.
27192
27193        * kjs/JSImmediate.h:
27194        (KJS::JSImmediate::areBothImmediateNumbers):
27195        (KJS::JSImmediate::andImmediateNumbers):
27196        * kjs/nodes.cpp:
27197        (KJS::BitAndNode::evaluate):
27198        * kjs/value.h:
27199        (KJS::jsNumberFromAnd):
27200
272012007-11-08  Adam Roben  <aroben@apple.com>
27202
27203        Stop using KJS inside of MathExtras.h
27204
27205        Reviewed by Darin.
27206
27207        * wtf/MathExtras.h: Removed an unused header, and a now-unused
27208        forward-declaration.
27209        (wtf_atan2): Use std::numeric_limits intead of KJS.
27210
272112007-11-08  Sam Weinig  <sam@webkit.org>
27212
27213        Windows build fix.
27214
27215        * kjs/date_object.cpp:
27216        (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
27217        (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
27218        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto
27219
272202007-11-08  Mark Rowe  <mrowe@apple.com>
27221
27222        Gtk build fix.
27223
27224        * kjs/lookup.h: Add missing include.
27225
272262007-11-08  Sam Weinig  <sam@webkit.org>
27227
27228        Reviewed by Darin.
27229
27230        Convert JavaScript internal function objects to use one class per
27231        function.  This avoids a switch statement inside what used to be
27232        the shared function classes and will allow Shark to better analyze
27233        the code.
27234
27235        To make this switch, the value property of the HashEntry was changed
27236        to a union of an intptr_t (which is used to continue handle valueGetters)
27237        and function pointer which points to a static constructor for the
27238        individual new function objects.
27239
27240        SunSpider claims this is a 1.0% speedup.
27241
27242        * kjs/array_object.cpp:
27243        (KJS::ArrayPrototype::getOwnPropertySlot):
27244        (KJS::getProperty):
27245        (KJS::ArrayProtoFuncToString::callAsFunction):
27246        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
27247        (KJS::ArrayProtoFuncJoin::callAsFunction):
27248        (KJS::ArrayProtoFuncConcat::callAsFunction):
27249        (KJS::ArrayProtoFuncPop::callAsFunction):
27250        (KJS::ArrayProtoFuncPush::callAsFunction):
27251        (KJS::ArrayProtoFuncReverse::callAsFunction):
27252        (KJS::ArrayProtoFuncShift::callAsFunction):
27253        (KJS::ArrayProtoFuncSlice::callAsFunction):
27254        (KJS::ArrayProtoFuncSort::callAsFunction):
27255        (KJS::ArrayProtoFuncSplice::callAsFunction):
27256        (KJS::ArrayProtoFuncUnShift::callAsFunction):
27257        (KJS::ArrayProtoFuncFilter::callAsFunction):
27258        (KJS::ArrayProtoFuncMap::callAsFunction):
27259        (KJS::ArrayProtoFuncEvery::callAsFunction):
27260        (KJS::ArrayProtoFuncForEach::callAsFunction):
27261        (KJS::ArrayProtoFuncSome::callAsFunction):
27262        (KJS::ArrayProtoFuncIndexOf::callAsFunction):
27263        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
27264        * kjs/array_object.h:
27265        (KJS::ArrayPrototype::classInfo):
27266        * kjs/create_hash_table:
27267        * kjs/date_object.cpp:
27268        (KJS::DatePrototype::getOwnPropertySlot):
27269        (KJS::DateProtoFuncToString::callAsFunction):
27270        (KJS::DateProtoFuncToUTCString::callAsFunction):
27271        (KJS::DateProtoFuncToDateString::callAsFunction):
27272        (KJS::DateProtoFuncToTimeString::callAsFunction):
27273        (KJS::DateProtoFuncToLocaleString::callAsFunction):
27274        (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
27275        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
27276        (KJS::DateProtoFuncValueOf::callAsFunction):
27277        (KJS::DateProtoFuncGetTime::callAsFunction):
27278        (KJS::DateProtoFuncGetFullYear::callAsFunction):
27279        (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
27280        (KJS::DateProtoFuncToGMTString::callAsFunction):
27281        (KJS::DateProtoFuncGetMonth::callAsFunction):
27282        (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
27283        (KJS::DateProtoFuncGetDate::callAsFunction):
27284        (KJS::DateProtoFuncGetUTCDate::callAsFunction):
27285        (KJS::DateProtoFuncGetDay::callAsFunction):
27286        (KJS::DateProtoFuncGetUTCDay::callAsFunction):
27287        (KJS::DateProtoFuncGetHours::callAsFunction):
27288        (KJS::DateProtoFuncGetUTCHours::callAsFunction):
27289        (KJS::DateProtoFuncGetMinutes::callAsFunction):
27290        (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
27291        (KJS::DateProtoFuncGetSeconds::callAsFunction):
27292        (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
27293        (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
27294        (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
27295        (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
27296        (KJS::DateProtoFuncSetTime::callAsFunction):
27297        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
27298        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
27299        (KJS::DateProtoFuncSetSeconds::callAsFunction):
27300        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
27301        (KJS::DateProtoFuncSetMinutes::callAsFunction):
27302        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
27303        (KJS::DateProtoFuncSetHours::callAsFunction):
27304        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
27305        (KJS::DateProtoFuncSetDate::callAsFunction):
27306        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
27307        (KJS::DateProtoFuncSetMonth::callAsFunction):
27308        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
27309        (KJS::DateProtoFuncSetFullYear::callAsFunction):
27310        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
27311        (KJS::DateProtoFuncSetYear::callAsFunction):
27312        (KJS::DateProtoFuncGetYear::callAsFunction):
27313        * kjs/date_object.h:
27314        * kjs/lookup.cpp:
27315        (KJS::Lookup::find):
27316        * kjs/lookup.h:
27317        (KJS::HashEntry::):
27318        (KJS::staticFunctionGetter):
27319        (KJS::staticValueGetter):
27320        (KJS::getStaticPropertySlot):
27321        (KJS::getStaticFunctionSlot):
27322        (KJS::lookupPut):
27323        * kjs/math_object.cpp:
27324        (KJS::MathObjectImp::getOwnPropertySlot):
27325        (KJS::MathProtoFuncAbs::callAsFunction):
27326        (KJS::MathProtoFuncACos::callAsFunction):
27327        (KJS::MathProtoFuncASin::callAsFunction):
27328        (KJS::MathProtoFuncATan::callAsFunction):
27329        (KJS::MathProtoFuncATan2::callAsFunction):
27330        (KJS::MathProtoFuncCeil::callAsFunction):
27331        (KJS::MathProtoFuncCos::callAsFunction):
27332        (KJS::MathProtoFuncExp::callAsFunction):
27333        (KJS::MathProtoFuncFloor::callAsFunction):
27334        (KJS::MathProtoFuncLog::callAsFunction):
27335        (KJS::MathProtoFuncMax::callAsFunction):
27336        (KJS::MathProtoFuncMin::callAsFunction):
27337        (KJS::MathProtoFuncPow::callAsFunction):
27338        (KJS::MathProtoFuncRandom::callAsFunction):
27339        (KJS::MathProtoFuncRound::callAsFunction):
27340        (KJS::MathProtoFuncSin::callAsFunction):
27341        (KJS::MathProtoFuncSqrt::callAsFunction):
27342        (KJS::MathProtoFuncTan::callAsFunction):
27343        * kjs/math_object.h:
27344        (KJS::MathObjectImp::classInfo):
27345        (KJS::MathObjectImp::):
27346        * kjs/string_object.cpp:
27347        (KJS::StringPrototype::getOwnPropertySlot):
27348        (KJS::StringProtoFuncToString::callAsFunction):
27349        (KJS::StringProtoFuncValueOf::callAsFunction):
27350        (KJS::StringProtoFuncCharAt::callAsFunction):
27351        (KJS::StringProtoFuncCharCodeAt::callAsFunction):
27352        (KJS::StringProtoFuncConcat::callAsFunction):
27353        (KJS::StringProtoFuncIndexOf::callAsFunction):
27354        (KJS::StringProtoFuncLastIndexOf::callAsFunction):
27355        (KJS::StringProtoFuncMatch::callAsFunction):
27356        (KJS::StringProtoFuncSearch::callAsFunction):
27357        (KJS::StringProtoFuncReplace::callAsFunction):
27358        (KJS::StringProtoFuncSlice::callAsFunction):
27359        (KJS::StringProtoFuncSplit::callAsFunction):
27360        (KJS::StringProtoFuncSubstr::callAsFunction):
27361        (KJS::StringProtoFuncSubstring::callAsFunction):
27362        (KJS::StringProtoFuncToLowerCase::callAsFunction):
27363        (KJS::StringProtoFuncToUpperCase::callAsFunction):
27364        (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
27365        (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
27366        (KJS::StringProtoFuncLocaleCompare::callAsFunction):
27367        (KJS::StringProtoFuncBig::callAsFunction):
27368        (KJS::StringProtoFuncSmall::callAsFunction):
27369        (KJS::StringProtoFuncBlink::callAsFunction):
27370        (KJS::StringProtoFuncBold::callAsFunction):
27371        (KJS::StringProtoFuncFixed::callAsFunction):
27372        (KJS::StringProtoFuncItalics::callAsFunction):
27373        (KJS::StringProtoFuncStrike::callAsFunction):
27374        (KJS::StringProtoFuncSub::callAsFunction):
27375        (KJS::StringProtoFuncSup::callAsFunction):
27376        (KJS::StringProtoFuncFontcolor::callAsFunction):
27377        (KJS::StringProtoFuncFontsize::callAsFunction):
27378        (KJS::StringProtoFuncAnchor::callAsFunction):
27379        (KJS::StringProtoFuncLink::callAsFunction):
27380        * kjs/string_object.h:
27381
273822007-11-08  Adam Roben  <aroben@apple.com>
27383
27384        Windows build fix
27385
27386        Reviewed by Sam and Ada.
27387
27388        * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
27389        the build.
27390
273912007-11-08  Adam Roben  <aroben@apple.com>
27392
27393        Fix a precedence warning on Windows
27394
27395        * kjs/JSImmediate.h:
27396        (KJS::JSImmediate::toBoolean):
27397
273982007-11-08  Mark Rowe  <mrowe@apple.com>
27399
27400        Build fix for JavaScriptGlue.
27401
27402        * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
27403
274042007-11-08  Darin Adler  <darin@apple.com>
27405
27406        - Windows build fix
27407
27408        * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
27409
274102007-11-08  Oliver Hunt  <oliver@apple.com>
27411
27412        Reviewed by Darin.
27413
27414        Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
27415
27416        Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
27417        we should now have faster array access, faster immediate to double conversion, and the 
27418        potential to further improve bitwise operators in future.
27419
27420        This also removes the need for unions to avoid strict aliasing problems when extracting 
27421        a value from immediates.
27422
27423        * kjs/JSImmediate.h:
27424        (KJS::JSImmediate::trueImmediate):
27425        (KJS::JSImmediate::falseImmediate):
27426        (KJS::JSImmediate::undefinedImmediate):
27427        (KJS::JSImmediate::nullImmediate):
27428        (KJS::JSImmediate::toBoolean):
27429        * kjs/value.h:
27430        (KJS::jsNaN):
27431
274322007-11-07  Eric Seidel  <eric@webkit.org>
27433
27434        Reviewed by Darin and Oliver.
27435        
27436        Add evaluateToNumber parallel evaluation tree to speed up number operations.
27437        Make ImmediateNumberNode a subclass of NumberNode.
27438        Share evaluate logic between evaluate and evaluateToNumber using inline functions
27439        There is still a lot of improvement to be made here.
27440        
27441        SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
27442        Given the huge win that this prepares us for with simple type inferencing I see the small
27443        regression in base64 being worth the substantial overall improvement.
27444
27445        * kjs/grammar.y:
27446        * kjs/nodes.cpp:
27447        (KJS::Node::evaluateToNumber):
27448        (KJS::NumberNode::evaluate):
27449        (KJS::NumberNode::evaluateToNumber):
27450        (KJS::StringNode::evaluateToNumber):
27451        (KJS::LocalVarAccessNode::inlineEvaluate):
27452        (KJS::LocalVarAccessNode::evaluate):
27453        (KJS::LocalVarAccessNode::evaluateToNumber):
27454        (KJS::BracketAccessorNode::inlineEvaluate):
27455        (KJS::BracketAccessorNode::evaluate):
27456        (KJS::BracketAccessorNode::evaluateToNumber):
27457        (KJS::NegateNode::evaluate):
27458        (KJS::NegateNode::evaluateToNumber):
27459        (KJS::MultNode::inlineEvaluateToNumber):
27460        (KJS::MultNode::evaluate):
27461        (KJS::MultNode::evaluateToNumber):
27462        (KJS::DivNode::inlineEvaluateToNumber):
27463        (KJS::DivNode::evaluate):
27464        (KJS::DivNode::evaluateToNumber):
27465        (KJS::ModNode::inlineEvaluateToNumber):
27466        (KJS::ModNode::evaluate):
27467        (KJS::ModNode::evaluateToNumber):
27468        (KJS::throwOutOfMemoryErrorToNumber):
27469        (KJS::addSlowCaseToNumber):
27470        (KJS::add):
27471        (KJS::addToNumber):
27472        (KJS::AddNode::evaluateToNumber):
27473        (KJS::SubNode::inlineEvaluateToNumber):
27474        (KJS::SubNode::evaluate):
27475        (KJS::SubNode::evaluateToNumber):
27476        (KJS::valueForReadModifyAssignment):
27477        (KJS::ReadModifyLocalVarNode::evaluate):
27478        (KJS::ReadModifyResolveNode::evaluate):
27479        (KJS::ReadModifyDotNode::evaluate):
27480        (KJS::ReadModifyBracketNode::evaluate):
27481        * kjs/nodes.h:
27482        (KJS::Node::):
27483        (KJS::NumberNode::):
27484        (KJS::ImmediateNumberNode::):
27485        (KJS::AddNode::precedence):
27486        * kjs/nodes2string.cpp:
27487        (KJS::NumberNode::streamTo):
27488
274892007-11-07  Mark Rowe  <mrowe@apple.com>
27490
27491        Reviewed by Eric.
27492
27493        Fix up initialization after being mangled in r27572, and remove the
27494        ternary expression as extraCost will always be zero for the numeric
27495        heap.
27496
27497        * kjs/collector.cpp:
27498        (KJS::Collector::heapAllocate):
27499
275002007-11-07  Mark Rowe  <mrowe@apple.com>
27501
27502        Gtk build fix.
27503
27504        * kjs/regexp_object.cpp:
27505
275062007-11-07  Geoffrey Garen  <ggaren@apple.com>
27507
27508        Reviewed by Beth Dakin.
27509        
27510        Eliminated a bogus (though compiled-out) branch in the collector.
27511
27512        * kjs/collector.cpp:
27513        (KJS::Collector::heapAllocate):
27514
275152007-11-06  Geoffrey Garen  <ggaren@apple.com>
27516
27517        Reviewed by Darin Adler.
27518        
27519        Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
27520        5.8% of string-validate-input.js is spent creating RegExpImps
27521
27522        Put RegExpImp properties into a static hashtable to avoid a slew of
27523        PropertyMap churn when creating a RegExpImp.
27524        
27525        Factored important bits of regular expression implementation out of
27526        RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
27527        making RegExp a ref-counted class. (This will help later.)
27528
27529        Removed PCRE_POSIX support because I didn't quite know how to test it 
27530        and keep it working with these changes.
27531        
27532        1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
27533
27534        * kjs/regexp.h: A few interface changes:
27535        1. Renamed "subpatterns()" => "numSubpatterns()"
27536        2. Made flag enumeration private and replaced it with public getters for
27537        specific flags.
27538        3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
27539        4. Made RegExp take a string of flags instead of an int, eliminating 
27540        duplicated flag parsing code elsewhere.
27541
27542        * kjs/regexp_object.cpp:
27543        (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
27544        - Fixed a bug where compile(undefined) would throw an exception. 
27545        - Removed some now-redundant code.
27546        - Used RegExp sharing to eliminate an allocation and a bunch of 
27547        PropertyMap thrash. (Not a big win since compile is a deprecated 
27548        function. I mainly did this to test the plubming.)
27549
275502007-11-07  Simon Hausmann  <hausmann@kde.org>
27551
27552        Reviewed by nobody, Qt/Windows build fix.
27553
27554        JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
27555        testkjs.pro, too, where it's included from.
27556
27557        * kjs/testkjs.pro:
27558
275592007-11-07  Simon Hausmann  <shausman@trolltech.com>
27560
27561        Reviewed by Lars.
27562
27563        Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.
27564
27565        * JavaScriptCore.pri:
27566        * pcre/pcre.pri:
27567
275682007-11-07  Lars Knoll  <lars@trolltech.com>
27569
27570        Reviewed by Simon.
27571
27572        fix umemcasecmp
27573        
27574        Pretty embarrassing bug. Has the potential to fix quite a few test failures.
27575
27576        * wtf/unicode/qt4/UnicodeQt4.h:
27577        (WTF::Unicode::umemcasecmp):
27578
275792007-11-06  Maciej Stachowiak  <mjs@apple.com>
27580
27581        Reviewed by Eric.        
27582        
27583        - only collect when the heap is full, unless we have lots of extra cost garbage
27584        
27585        1.1% SunSpider speedup.
27586        
27587        This shouldn't hit memory use much since the extra space in those
27588        blocks hangs around either way.
27589
27590        * kjs/collector.cpp:
27591        (KJS::Collector::heapAllocate):
27592        (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
27593        return value.
27594
275952007-11-06  Oliver Hunt  <oliver@apple.com>
27596
27597        Reviewed by Maciej.
27598
27599        Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
27600        
27601        We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
27602        'for (...; ...; ++<var>) ...'.
27603
27604        * kjs/nodes.cpp:
27605        (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
27606        (KJS::PostIncLocalVarNode::evaluate):
27607        (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
27608        (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
27609        (KJS::PostDecLocalVarNode::evaluate):
27610        (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
27611        * kjs/nodes.h:
27612        (KJS::PrePostResolveNode::):
27613        (KJS::PostIncResolveNode::):
27614        (KJS::PostIncLocalVarNode::):
27615        (KJS::PostDecResolveNode::):
27616        (KJS::PostDecLocalVarNode::):
27617        (KJS::PreIncResolveNode::):
27618        (KJS::PreDecResolveNode::):
27619        (KJS::ForNode::ForNode):
27620
276212007-11-06  Eric Seidel  <eric@webkit.org>
27622
27623        Reviewed by darin.
27624
27625        This fixes a regressed layout test for string + object
27626        
27627        SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
27628
27629        * kjs/nodes.cpp:
27630        (KJS::add): remove erroneous "fast path" for string + *
27631
276322007-11-06  Geoffrey Garen  <ggaren@apple.com>
27633
27634        Reviewed by Eric Seidel.
27635        
27636        Added toJSNumber, a fast path for converting a JSValue to a JS number,
27637        and deployed it in postfix expressions. In the fast case this 
27638        eliminates a call to jsNumber.
27639        
27640        0.4% speedup on SunSpider.
27641
27642        * ChangeLog:
27643        * kjs/nodes.cpp:
27644        (KJS::PostIncResolveNode::evaluate):
27645        (KJS::PostIncLocalVarNode::evaluate):
27646        (KJS::PostDecResolveNode::evaluate):
27647        (KJS::PostDecLocalVarNode::evaluate):
27648        (KJS::PostIncBracketNode::evaluate):
27649        (KJS::PostDecBracketNode::evaluate):
27650        (KJS::PostIncDotNode::evaluate):
27651        (KJS::PostDecDotNode::evaluate):
27652        (KJS::UnaryPlusNode::evaluate):
27653        * kjs/value.h:
27654        (KJS::JSValue::toJSNumber):
27655
276562007-11-06  Darin Adler  <darin@apple.com>
27657
27658        Reviewed by Maciej.
27659
27660        - http://bugs.webkit.org/show_bug.cgi?id=15846
27661          REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
27662
27663        There was a mistake in the algorithm used to find an empty slot in the property
27664        map entries vector; when we were putting in a new property value and not overwriting
27665        an existing deleted sentinel, we would enlarge the entries vector, but would not
27666        overwrite the stale data that's in the new part. It was easy to pin this down by
27667        turning on property map consistency checks -- I never would have landed with this
27668        bug if I had run the regression tests once with consistency checks on!
27669
27670        * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
27671        foundDeletedElement is false to always use the item at the end of the entries vector.
27672        Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
27673
276742007-11-06  Oliver Hunt  <oliver@apple.com>
27675
27676        RS=Darin.
27677
27678        Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
27679
27680        * kjs/nodes.cpp:
27681        (KJS::add):
27682
276832007-11-06  Oliver Hunt  <oliver@apple.com>
27684
27685        Reviewed by Darin.
27686
27687        Replace boolean comparisons in AddNode with mask
27688        comparisons for a 0.2% improvement in sunspider.
27689
27690        * JavaScriptCore.xcodeproj/project.pbxproj:
27691        * kjs/nodes.cpp:
27692        (KJS::add):
27693
276942007-11-06  Eric Seidel  <eric@webkit.org>
27695
27696        Reviewed by darin.
27697        
27698        SunSpider claims this is a 1.1% speedup.
27699
27700        * kjs/nodes.cpp:
27701        (KJS::throwOutOfMemoryError): Added, non inline.
27702        (KJS::addSlowCase): renamed from add(), non inline.
27703        (KJS::add): add fast path for String + String, Number + Number and String + *
27704
277052007-11-06  Eric Seidel  <eric@webkit.org>
27706
27707        Reviewed by mjs.
27708        
27709        Avoid more UString creation.
27710        
27711        SunSpider claims this is a 0.4% speedup.
27712
27713        * kjs/regexp_object.cpp:
27714        (KJS::RegExpObjectImp::construct): use UString::find(UChar)
27715
277162007-11-05  Mark Rowe  <mrowe@apple.com>
27717
27718        Mac build fix.
27719
27720        * kjs/array_object.cpp:
27721        (KJS::ArrayProtoFunc::callAsFunction):
27722
277232007-11-05  Adam Roben  <aroben@apple.com>
27724
27725        Windows build fix
27726
27727        * kjs/list.h:
27728
277292007-11-05  Mark Rowe  <mrowe@apple.com>
27730
27731        Build fix.  Add missing #include.
27732
27733        * kjs/operations.cpp:
27734
277352007-11-05  Eric Seidel  <eric@webkit.org>
27736
27737        Reviewed by mjs.
27738        
27739        Remove another call to toString(exec)
27740        
27741        SunSpider claims this is a 0.5% speedup.
27742
27743        * kjs/operations.cpp:
27744        (KJS::equal): remove another toString
27745
277462007-11-05  Eric Seidel  <eric@webkit.org>
27747
27748        * kjs/operations.cpp:
27749        (KJS::equal): correct broken change.
27750
277512007-11-05  Eric Seidel  <eric@webkit.org>
27752
27753        Reviewed by mjs.
27754
27755        Remove one more call to toString(exec).
27756        
27757        SunSpider claims this is a 0.7% speedup.
27758
27759        * kjs/operations.cpp:
27760        (KJS::equal): remove a call to toString()
27761
277622007-11-05  Mark Rowe  <mrowe@apple.com>
27763
27764        Gtk build fix.
27765
27766        * pcre/pcre.pri:
27767
277682007-11-05  Mark Rowe  <mrowe@apple.com>
27769
27770        Gtk build fix.
27771
27772        * kjs/list.cpp:
27773
277742007-11-05  Geoffrey Garen  <ggaren@apple.com>
27775
27776        Touched a file to test my new HTTP access.
27777
27778        * kjs/scope_chain.cpp:
27779
277802007-11-05  Alp Toker  <alp@atoker.com>
27781
27782        Unreviewed build fix for qmake-based ports.
27783
27784        Someone with a better understanding of qmake still needs to sort out
27785        the INCLUDEPATH/DEPENDPATH mess.
27786
27787        * JavaScriptCore.pri:
27788
277892007-11-05  Geoffrey Garen  <ggaren@apple.com>
27790
27791        Reviewed by Darin Adler.
27792        
27793        http://bugs.webkit.org/show_bug.cgi?id=15835
27794
27795        Switched List implementation from a custom heap allocator to an inline
27796        Vector, for a disappointing .5% SunSpider speedup.
27797        
27798        Also renamed List::slice to List::getSlice because "get" is the 
27799        conventional prefix for functions returning a value through an out 
27800        parameter.
27801
27802        * kjs/array_object.cpp:
27803        (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
27804        calls and memory accesses.
27805
27806        * kjs/bool_object.cpp:
27807        (BooleanObjectImp::construct): Removed questionable use of iterator.
27808
27809        * kjs/list.cpp:
27810        * kjs/list.h: New List class, implemented in terms of Vector. Two 
27811        interesting differences:
27812            1. The inline capacity is 8, not 5. Many of the Lists constructed 
27813            during a SunSpider run are larger than 5; almost none are larger
27814            than 8.
27815
27816            2. The growth factor is 4, not 2. Since we can guarantee that Lists
27817            aren't long-lived, we can grow them more aggressively, to avoid
27818            excessive copying.
27819
27820        * kjs/regexp_object.cpp:
27821        (RegExpObjectImp::construct): Removed redundant function calls.
27822
27823        * kjs/string_object.cpp:
27824        (KJS::StringObjectImp::construct): Removed questionable use of iterator.
27825
27826        * wtf/Vector.h:
27827        (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
27828
278292007-11-05  Mark Rowe  <mrowe@apple.com>
27830
27831        Reviewed by Alp Toker.
27832
27833        Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
27834
27835        * JavaScriptCore.pri:
27836        * pcre/pcre.pri:
27837
278382007-11-04  Darin Adler  <darin@apple.com>
27839
27840        Reviewed by Maciej.
27841
27842        - http://bugs.webkit.org/show_bug.cgi?id=15826
27843          optimize opcode loop and case insensitive ASCII compares for a 30% speedup
27844
27845        SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
27846
27847        * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
27848
27849        * pcre/pcre_compile.c:
27850        (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
27851        added OP_NOT since there was no reason it should not be in here.
27852        (could_be_empty_branch): Ditto.
27853        (compile_branch): Streamlined all the single-character cases; there was a bit of
27854        duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
27855        But in particular, compile to those opcodes when the single character match is
27856        ASCII.
27857        (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
27858
27859        * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
27860        the matchframe, after I discovered that none of them needed to be saved and restored
27861        across recursive match calls. Also eliminated the ignored result field from the
27862        matchframe, since I discovered that rrc ("recursive result code") was already the
27863        exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
27864        statement of the switch instead of doing them before the switch. This removes a
27865        branch from each iteration of the opcode interpreter, just as removal of "op"
27866        removed at least one store from each iteration. Last, but not least, add the
27867        OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
27868        surrogate pair and the letter case can be handled efficiently.
27869
278702007-11-04  Darin Adler  <darin@apple.com>
27871
27872        * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
27873
278742007-11-03  Darin Adler  <darin@apple.com>
27875
27876        - fix non-Mac builds; remove some more unused PCRE stuff
27877
27878        * pcre/pcre_compile.c:
27879        (compile_branch): Removed branch chain and some unused ESC values.
27880        (compile_regex): Ditto.
27881        (jsRegExpCompile): Ditto.
27882        * pcre/pcre_exec.c:
27883        (match): Removed unused branch targets. Don't use macros any more.
27884        (jsRegExpExecute): More of the same.
27885
27886        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
27887        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
27888        * pcre/pcre.pri: Ditto.
27889
27890        * pcre/MERGING: Removed.
27891        * pcre/pcre_fullinfo.c: Removed.
27892        * pcre/pcre_get.c: Removed.
27893        * pcre/pcre_internal.h:
27894        * pcre/ucp.h: Removed.
27895
278962007-11-03  Darin Adler  <darin@apple.com>
27897
27898        Reviewed by Maciej.
27899
27900        - http://bugs.webkit.org/show_bug.cgi?id=15821
27901          remove unused PCRE features for speed
27902
27903        A first step toward removing the PCRE features we don't use.
27904        This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
27905        the SunSpider regular expression test.
27906
27907        Replaced the public interface with one that doesn't use the
27908        name PCRE. Removed code we don't need for JavaScript and various
27909        configurations we don't use. This is in preparation for still
27910        more changes in the future. We'll probably switch to C++ and
27911        make some even more significant changes to the regexp engine
27912        to get some additional speed.
27913
27914        There's probably additional unused stuff that I haven't
27915        deleted yet.
27916
27917        This does mean that our PCRE is now a fork, but I think that's
27918        not really a big deal.
27919
27920        * JavaScriptCore.exp: Remove the 5 old entry points and add
27921        the 3 new entry points for WebCore's direct use of the regular
27922        expression engine.
27923
27924        * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
27925        its sense and now there's a USE(POSIX_REGEX) instead, which should
27926        probably not be set by anyone. Maybe later we'll just get rid of it
27927        altogether.
27928
27929        * kjs/regexp.h:
27930        * kjs/regexp.cpp:
27931        (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
27932        defines. Cut down on the number of functions used.
27933        (KJS::RegExp::~RegExp): Ditto.
27934        (KJS::RegExp::match): Ditto.
27935
27936        * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
27937        which are unused.
27938
27939        * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
27940        size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
27941        POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
27942        and JAVASCRIPT. These are all no longer configurable in our copy
27943        of the library.
27944
27945        * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
27946        version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
27947        the include of <stdlib.h>, and most of the constants and
27948        functions defined in this header. Changed the naming scheme to
27949        use a JSRegExp prefix rather than a pcre prefix. In the future,
27950        we'll probably change this to be a C++ header.
27951
27952        * pcre/pcre_compile.c: Removed all unused code branches,
27953        including many whole functions and various byte codes.
27954        Kept changes outside of removal to a minimum.
27955        (check_escape):
27956        (first_significant_code):
27957        (find_fixedlength):
27958        (find_recurse):
27959        (could_be_empty_branch):
27960        (compile_branch):
27961        (compile_regex):
27962        (is_anchored):
27963        (is_startline):
27964        (find_firstassertedchar):
27965        (jsRegExpCompile): Renamed from pcre_compile2 and changed the
27966        parameters around a bit.
27967        (jsRegExpFree): Added.
27968
27969        * pcre/pcre_exec.c: Removed many unused opcodes and variables.
27970        Also started tearing down the NO_RECURSE mechanism since it's
27971        now the default. In some cases there were things in the explicit
27972        frame that could be turned into plain old local variables and
27973        other small like optimizations.
27974        (pchars):
27975        (match_ref):
27976        (match): Changed parameters quite a bit since it's now not used
27977        recursively.
27978        (jsRegExpExecute): Renamed from pcre_exec.
27979
27980        * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
27981        PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
27982        PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
27983        PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
27984        _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
27985        and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
27986
27987        * pcre/pcre_maketables.c: Changed to only compile in dftables.
27988        Also got rid of many of the tables that we don't use.
27989
27990        * pcre/pcre_tables.c: Removed the unused Unicode property tables.
27991
27992        * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
27993        _pcre_ucp_othercase.
27994
27995        * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
27996        for classes based on Unicode properties.
27997
27998        * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
27999        to eliminate this completely, but we need the regular expression
28000        code to be C++ first.
28001
28002        * pcre/pcre_fullinfo.c:
28003        * pcre/pcre_get.c:
28004        * pcre/ucp.h:
28005        Files that are no longer needed. I didn't remove them with this
28006        check-in, because I didn't want to modify all the project files.
28007
280082007-11-03  Maciej Stachowiak  <mjs@apple.com>
28009
28010        Reviewed by Sam.
28011        
28012        - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
28013
28014        It turns out that doing this check costs more than it saves.
28015        
28016        * kjs/JSImmediate.h:
28017        (KJS::JSImmediate::fromDouble):
28018
280192007-11-03  Sam Weinig  <sam@webkit.org>
28020
28021        Reviewed by Oliver.
28022
28023        Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
28024        The variable had been kept around for binary compatibility, but since nothing
28025        else is there is no point in continuing to keep it around.
28026
28027        * API/JSCallbackConstructor.cpp:
28028        * API/JSCallbackFunction.cpp:
28029        * API/JSCallbackObject.cpp:
28030        * bindings/objc/objc_runtime.mm:
28031        * bindings/runtime_array.cpp:
28032        * bindings/runtime_object.cpp:
28033        * kjs/array_instance.cpp:
28034        * kjs/array_object.cpp:
28035        * kjs/bool_object.cpp:
28036        * kjs/date_object.cpp:
28037        * kjs/error_object.cpp:
28038        * kjs/function.cpp:
28039        * kjs/internal.cpp:
28040        * kjs/lookup.h:
28041        * kjs/math_object.cpp:
28042        * kjs/number_object.cpp:
28043        * kjs/object.h:
28044        * kjs/regexp_object.cpp:
28045        * kjs/string_object.cpp:
28046
280472007-11-03  Kevin McCullough  <kmccullough@apple.com>
28048
28049        - Updated testkjs results to make the build bots green until we
28050        can fix the tests that are failing.  The new failures are in DST.
28051
28052        * tests/mozilla/expected.html:
28053
280542007-11-03  Maciej Stachowiak  <mjs@apple.com>
28055
28056        Reviewed by Adam.
28057        
28058        - don't print the var twice for ForInNodes with a var declaration
28059
28060        * kjs/nodes2string.cpp:
28061        (KJS::ForInNode::streamTo):
28062
280632007-11-03  Darin Adler  <darin@apple.com>
28064
28065        * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
28066        C-incompatible declaration.
28067
280682007-11-03  Mark Rowe  <mrowe@apple.com>
28069
28070        Gtk build fix.
28071
28072        * kjs/nodes.cpp:  Add missing include.
28073
280742007-11-03  Darin Adler  <darin@apple.com>
28075
28076        Reviewed by Maciej.
28077
28078        - fix http://bugs.webkit.org/show_bug.cgi?id=15814
28079          <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
28080
28081        These changes cause us to match the JavaScript specification and pass the
28082        fast/js/kde/encode_decode_uri.html test.
28083
28084        * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
28085        new strict mode, throwing an exception if there are malformed UTF-16 surrogate
28086        pairs in the text.
28087
28088        * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
28089        * kjs/ustring.cpp:
28090        (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
28091        those might be illegal in some sense, they aren't supposed to get any special
28092        handling in the place where this function is currently used.
28093        (KJS::UString::UTF8String): Added the strictness.
28094
280952007-11-03  Darin Adler  <darin@apple.com>
28096
28097        Reviewed by Maciej.
28098
28099        - http://bugs.webkit.org/show_bug.cgi?id=15812
28100          some JavaScript tests (from the Mozilla test suite) are failing
28101
28102        Two or three fixes get 7 more of the Mozilla tests passing.
28103        This gets us down from 61 failing tests to 54.
28104
28105        * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
28106        Made this inline and gave it a more specific type. Some day we should
28107        probably do that for all of these -- might even get a bit of a speed
28108        boost from it.
28109        * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
28110        inline in the header.
28111
28112        * kjs/regexp_object.h:
28113        * kjs/regexp_object.cpp:
28114        (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
28115        switch statement into the RegExpImp object, so they can be shared with
28116        RegExpImp::callAsFunction.
28117        (KJS::RegExpImp::match): Added. Common code used by both test and exec.
28118        (KJS::RegExpImp::test): Added.
28119        (KJS::RegExpImp::exec): Added.
28120        (KJS::RegExpImp::implementsCall): Added.
28121        (KJS::RegExpImp::callAsFunction): Added.
28122        (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
28123        lastInput to null rather than empty string -- we take advantage of the
28124        difference in RegExpImp::match.
28125        (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
28126        just to get at a field like this.
28127
28128        * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
28129        the JavaScript specification. If there are not 4 hex digits after the \u,
28130        then it's processed as if it wasn't an escape sequence at all.
28131
28132        * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
28133        for JavaScript (4 specific Unicode values).
28134        * pcre/pcre_exec.c:
28135        (match): Changed all call sites to use IS_NEWLINE.
28136        (pcre_exec): Ditto.
28137
28138        * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
28139
281402007-11-03  David D. Kilzer  <ddkilzer@webkit.org>
28141
28142        Sort files(...); sections of Xcode project files.
28143
28144        Rubber-stamped by Darin.
28145
28146        * JavaScriptCore.xcodeproj/project.pbxproj:
28147
281482007-11-03  Maciej Stachowiak  <mjs@apple.com>
28149
28150        Reviewed by Oliver.
28151        
28152        - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
28153
28154        * kjs/grammar.y:
28155        * kjs/nodes.cpp:
28156        (KJS::VarDeclNode::optimizeVariableAccess):
28157        (KJS::VarDeclNode::getDeclarations):
28158        (KJS::VarDeclNode::handleSlowCase):
28159        (KJS::VarDeclNode::evaluateSingle):
28160        (KJS::VarDeclNode::evaluate):
28161        (KJS::VarStatementNode::execute):
28162        * kjs/nodes.h:
28163        (KJS::VarDeclNode::):
28164        (KJS::VarStatementNode::):
28165        * kjs/nodes2string.cpp:
28166        (KJS::VarDeclNode::streamTo):
28167
281682007-11-03  Alexey Proskuryakov  <ap@webkit.org>
28169
28170        Reviewed by Darin.
28171
28172        http://bugs.webkit.org/show_bug.cgi?id=15800
28173        REGRESSION (r27303): RegExp leaks
28174
28175        * kjs/regexp_object.h:
28176        (KJS::RegExpImp::setRegExp):
28177        (KJS::RegExpImp::regExp):
28178        (KJS::RegExpImp::classInfo):
28179        * kjs/regexp_object.cpp:
28180        (RegExpImp::RegExpImp):
28181        (RegExpImp::~RegExpImp):
28182        Renamed reg member variable to m_regExp, changed it to use OwnPtr.
28183
281842007-11-02  Maciej Stachowiak  <mjs@apple.com>
28185
28186        Reviewed by Oliver.
28187        
28188        - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
28189
28190        * kjs/grammar.y:
28191        * kjs/nodes.cpp:
28192        (KJS::statementListPushFIFO):
28193        (KJS::statementListGetDeclarations):
28194        (KJS::statementListInitializeDeclarationStacks):
28195        (KJS::statementListInitializeVariableAccessStack):
28196        (KJS::statementListExecute):
28197        (KJS::BlockNode::BlockNode):
28198        (KJS::FunctionBodyNode::FunctionBodyNode):
28199        (KJS::ProgramNode::ProgramNode):
28200        * kjs/nodes.h:
28201        (KJS::CaseClauseNode::):
28202
282032007-11-02  Darin Adler  <darin@apple.com>
28204
28205        Reviewed by Maciej.
28206
28207        - http://bugs.webkit.org/show_bug.cgi?id=15791
28208          change property map data structure for less memory use, better speed
28209
28210        The property map now has an array of indices and a separate array of
28211        property map entries. This slightly slows down lookup because of a second
28212        memory acess, but makes property maps smaller and faster to iterate in
28213        functions like mark().
28214
28215        SunSpider says this is 1.2% faster, although it makes the bitwise-end test
28216        more than 10% slower. To fix that we'll need to optimize global variable lookup.
28217
28218        * kjs/property_map.cpp:
28219        (KJS::PropertyMapEntry::PropertyMapEntry):
28220        (KJS::PropertyMapHashTable::entries):
28221        (KJS::PropertyMapHashTable::allocationSize):
28222        (KJS::SavedProperties::SavedProperties):
28223        (KJS::SavedProperties::~SavedProperties):
28224        (KJS::PropertyMap::checkConsistency):
28225        (KJS::PropertyMap::~PropertyMap):
28226        (KJS::PropertyMap::clear):
28227        (KJS::PropertyMap::get):
28228        (KJS::PropertyMap::getLocation):
28229        (KJS::PropertyMap::put):
28230        (KJS::PropertyMap::insert):
28231        (KJS::PropertyMap::createTable):
28232        (KJS::PropertyMap::rehash):
28233        (KJS::PropertyMap::remove):
28234        (KJS::PropertyMap::mark):
28235        (KJS::comparePropertyMapEntryIndices):
28236        (KJS::PropertyMap::containsGettersOrSetters):
28237        (KJS::PropertyMap::getEnumerablePropertyNames):
28238        (KJS::PropertyMap::save):
28239        (KJS::PropertyMap::restore):
28240        * kjs/property_map.h:
28241
282422007-11-02  Darin Adler  <darin@apple.com>
28243
28244        Reviewed by Maciej.
28245
28246        - http://bugs.webkit.org/show_bug.cgi?id=15807
28247          HashMap needs a take() function that combines get and remove
28248
28249        * wtf/HashMap.h: Added take function. Simplistic implementation for now,
28250        but still does only one hash table lookup.
28251
28252        * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
28253        a find followed by a remove.
28254
282552007-11-02  David Carson  <dacarson@gmail.com>
28256
28257        Reviewed by Darin.
28258
28259        Fix compiler warning "warning: suggest parentheses around && within ||"
28260        http://bugs.webkit.org/show_bug.cgi?id=15764
28261
28262        * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
28263
282642007-11-01  Geoffrey Garen  <ggaren@apple.com>
28265
28266        Reviewed by Maciej Stachowiak.
28267        
28268        In preparation for making List a simple stack-allocated Vector:
28269
28270        Removed all instances of List copying and/or assignment, and made List 
28271        inherit from Noncopyable.
28272        
28273        Functions that used to return a List by copy now take List& out 
28274        parameters.
28275        
28276        Layout tests and JS tests pass.
28277
28278        * kjs/list.cpp:
28279        (KJS::List::slice): Replaced copyTail with a more generic slice 
28280        alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
28281        slice(2)).
28282
282832007-11-01  Geoffrey Garen  <ggaren@apple.com>
28284
28285        Reviewed by Maciej Stachowiak.
28286
28287        Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
28288        REGRESSION(r27344): Crash on load at finance.yahoo.com
28289        
28290        Reverted a small portion of my last check-in. (The speedup and the List 
28291        removal are still there, though.)
28292        
28293        ActivationImp needs to hold a pointer to its function, and mark that 
28294        pointer (rather than accessing its function through its ExecState, and 
28295        counting on the active scope to mark its function) because a closure 
28296        can cause an ActivationImp to outlive its ExecState along with any 
28297        active scope.
28298
28299        * kjs/ExecState.cpp:
28300        (KJS::ExecState::ExecState):
28301        * kjs/function.cpp:
28302        (KJS::FunctionImp::~FunctionImp):
28303        (KJS::ActivationImp::ActivationImp):
28304        * kjs/function.h:
28305        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
28306
28307        Also made HashTable a little more crash-happy in debug builds, so 
28308        problems like this will show up earlier:
28309        
28310        * wtf/HashTable.h:
28311        (WTF::HashTable::~HashTable):
28312
283132007-11-01  Geoffrey Garen  <ggaren@apple.com>
28314
28315        Reviewed by Adam Roben.
28316        
28317        Addressed some of Darin's review comments.
28318        
28319        Used perl -p, which is the shorthand while(<>) {}.
28320        
28321        Made sure not to suppress bison's output.
28322        
28323        Added line to removed bison_out.txt, since this script removes other 
28324        intermediate files, too.
28325
28326        * DerivedSources.make:
28327
283282007-11-01  Geoffrey Garen  <ggaren@apple.com>
28329
28330        Reviewed by Oliver Hunt.
28331        
28332        Removed List from ActivationImp, in preparation for making all lists
28333        stack-allocated.
28334        
28335        Tests pass.
28336        
28337        1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
28338
28339        * kjs/ExecState.cpp:
28340        (KJS::ExecState::ExecState):
28341        (KJS::ExecState::~ExecState):
28342        * kjs/function.cpp:
28343        (KJS::ActivationImp::ActivationImp):
28344        (KJS::ActivationImp::createArgumentsObject):
28345        * kjs/function.h:
28346        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
28347
283482007-11-01  Adam Roben  <aroben@apple.com>
28349
28350        Use jsNumberCell instead of jsNumber when converting double constants to JSValues
28351
28352        This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
28353        ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
28354
28355        It also gets rid of an MSVC warning that we previously had to silence.
28356
28357        Reviewed by Geoff.
28358
28359        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
28360        back on the "overflow in constant arithmetic" warning.
28361        * kjs/number_object.cpp:
28362        (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
28363        jsNumber.
28364
283652007-10-31  Adam Roben  <aroben@apple.com>
28366
28367        Windows build fix
28368
28369        * kjs/ExecState.h:
28370
283712007-10-31  Maciej Stachowiak  <mjs@apple.com>
28372
28373        Reviewed by Oliver.
28374        
28375        - shave some cycles off of local storage access for a 1% SunSpider speedup
28376        
28377        Keep the LocalStorage pointer in the ExecState, instead of getting
28378        it from the ActivationImp all the time.
28379
28380        * kjs/ExecState.cpp:
28381        (KJS::ExecState::updateLocalStorage):
28382        * kjs/ExecState.h:
28383        (KJS::ExecState::localStorage):
28384        * kjs/nodes.cpp:
28385        (KJS::LocalVarAccessNode::evaluate):
28386        (KJS::LocalVarFunctionCallNode::evaluate):
28387        (KJS::PostIncLocalVarNode::evaluate):
28388        (KJS::PostDecLocalVarNode::evaluate):
28389        (KJS::LocalVarTypeOfNode::evaluate):
28390        (KJS::PreIncLocalVarNode::evaluate):
28391        (KJS::PreDecLocalVarNode::evaluate):
28392        (KJS::ReadModifyLocalVarNode::evaluate):
28393        (KJS::AssignLocalVarNode::evaluate):
28394        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
28395
283962007-10-31  Adam Roben  <aroben@apple.com>
28397
28398        Fix a crash on launch due to a static initializer race
28399
28400        We now use fast inline assembler spinlocks which can be statically
28401        initialized at compile time.
28402
28403        As a side benefit, this speeds up SunSpider by 0.4%.
28404
28405        Reviewed by Oliver.
28406
28407        * wtf/FastMalloc.cpp:
28408        * wtf/TCSpinLock.h:
28409        (TCMalloc_SpinLock::Lock):
28410        (TCMalloc_SpinLock::Unlock):
28411        (TCMalloc_SlowLock):
28412        * wtf/TCSystemAlloc.cpp:
28413
284142007-10-31  Kevin McCullough  <kmccullough@apple.com>
28415
28416        Reviewed by Sam.
28417
28418        - Corrected spelling.
28419
28420        * wtf/HashTraits.h:
28421
284222007-10-31  Mark Rowe  <mrowe@apple.com>
28423
28424        Further Gtk build fixage.
28425
28426        * kjs/regexp_object.cpp:
28427
284282007-10-31  Mark Rowe  <mrowe@apple.com>
28429
28430        Gtk build fix.
28431
28432        * kjs/regexp.h:
28433
284342007-10-31  Darin Adler  <darin@apple.com>
28435
28436        Reviewed by Maciej.
28437
28438        - fix http://bugs.webkit.org/show_bug.cgi?id=15749
28439          RegExp/RegExpObjectImp cause needless UString creation
28440
28441        Speeds things up 0.4% according to SunSpider.
28442
28443        * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
28444        because this library doesn't use the real PCRE -- it uses its
28445        own PCRE that works on UTF-16.
28446
28447        * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
28448        Use Noncopyable. Change the return value of match.
28449        * kjs/regexp.cpp:
28450        (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
28451        (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
28452        (KJS::RegExp::match): Change to return the position as an int and the
28453        ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
28454
28455        * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
28456        require a result string.
28457        * kjs/regexp_object.cpp:
28458        (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
28459        (RegExpObjectImp::performMatch): Change so it doesn't return a string.
28460        (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
28461        the main result with the backreferences; now it doesn't need to take
28462        a result parameter.
28463        (RegExpObjectImp::getBackref): Minor tweaks.
28464        (RegExpObjectImp::getLastParen): Ditto.
28465        (RegExpObjectImp::getLeftContext): Ditto.
28466        (RegExpObjectImp::getRightContext): Ditto.
28467        (RegExpObjectImp::getValueProperty): Change LastMatch case to call
28468        getBackref(0) so we don't need a separate getLastMatch function.
28469
28470        * kjs/string_object.cpp:
28471        (KJS::replace): Update to use new performMatch, including merging the
28472        matched string section with the other substrings.
28473        (KJS::StringProtoFunc::callAsFunction): Update functions to use the
28474        new performMatch and match. Also change to use OwnArrayPtr.
28475
284762007-10-31  Oliver Hunt  <oliver@apple.com>
28477
28478        * kjs/nodes.h: include OwnPtr.h
28479
284802007-10-31  Oliver Hunt  <oliver@apple.com>
28481
28482        Reviewed by Maciej.
28483
28484        Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
28485
28486        * kjs/grammar.y:
28487        * kjs/nodes.cpp:
28488        (KJS::statementListPushFIFO):
28489        (KJS::statementListGetDeclarations):
28490        (KJS::statementListInitializeDeclarationStacks):
28491        (KJS::statementListInitializeVariableAccessStack):
28492        (KJS::statementListExecute):
28493        (KJS::BlockNode::optimizeVariableAccess):
28494        (KJS::BlockNode::BlockNode):
28495        (KJS::BlockNode::getDeclarations):
28496        (KJS::BlockNode::execute):
28497        (KJS::CaseClauseNode::optimizeVariableAccess):
28498        (KJS::CaseClauseNode::getDeclarations):
28499        (KJS::CaseClauseNode::evalStatements):
28500        (KJS::FunctionBodyNode::initializeDeclarationStacks):
28501        (KJS::FunctionBodyNode::optimizeVariableAccess):
28502        * kjs/nodes.h:
28503        * kjs/nodes2string.cpp:
28504        (KJS::statementListStreamTo):
28505        (KJS::BlockNode::streamTo):
28506        (KJS::CaseClauseNode::streamTo):
28507
285082007-10-30  Mark Rowe  <mrowe@apple.com>
28509
28510        * kjs/property_map.cpp: Added a missing using directive to fix the build
28511        for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
28512
285132007-10-31  Maciej Stachowiak  <mjs@apple.com>
28514
28515        * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
28516        for non-Mac ports.
28517
285182007-10-31  Alexey Proskuryakov  <ap@webkit.org>
28519
28520        Reviewed by Darin.
28521
28522        http://bugs.webkit.org/show_bug.cgi?id=11001
28523        WebKit doesn't support RegExp.compile method
28524
28525        Test: fast/js/regexp-compile.html
28526
28527        * kjs/regexp_object.cpp:
28528        (RegExpPrototype::RegExpPrototype):
28529        (RegExpProtoFunc::callAsFunction):
28530        * kjs/regexp_object.h:
28531        (KJS::RegExpProtoFunc::):
28532        Added RegExp.compile.
28533
28534        * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
28535
285362007-10-31  Maciej Stachowiak  <mjs@apple.com>
28537
28538        Reviewed by Oliver.
28539        
28540        - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
28541        
28542        Integer divide sucks. Fortunately, a bunch of shifts and XORs
28543        biased towards the high bits is sufficient to provide a good
28544        double hash. Besides the SunSpider win, I used the dump statistics
28545        mode for both to verify that collisions did not increase and that
28546        the longest collision chain is not any longer.
28547
28548        * kjs/property_map.cpp:
28549        (KJS::doubleHash):
28550        (KJS::PropertyMap::get):
28551        (KJS::PropertyMap::getLocation):
28552        (KJS::PropertyMap::put):
28553        (KJS::PropertyMap::insert):
28554        (KJS::PropertyMap::remove):
28555        (KJS::PropertyMap::checkConsistency):
28556        * wtf/HashTable.h:
28557        (WTF::doubleHash):
28558        (WTF::::lookup):
28559        (WTF::::lookupForWriting):
28560        (WTF::::fullLookupForWriting):
28561        (WTF::::add):
28562
285632007-10-30  Adam Roben  <aroben@apple.com>
28564
28565        * kjs/collector.h: Make HeapType public so it can be used for non-member
28566        things like the HeapConstants struct template. Fixes the build on Windows.
28567
285682007-10-30  Adam Roben  <aroben@apple.com>
28569
28570        Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
28571
28572        Speeds up SunSpider by 0.4%.
28573
28574        Reviewed by Steve and Maciej.
28575
28576        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
28577        a warning during LTCG in release builds about double -> float
28578        conversion.
28579        * wtf/AlwaysInline.h:
28580        * wtf/FastMalloc.h:
28581
285822007-10-30  Adam Roben  <aroben@apple.com>
28583
28584        Use GetCurrentThreadId instead of pthread_self in FastMalloc
28585
28586        Speeds up SunSpider by 0.3%.
28587
28588        Reviewed by Steve.
28589
28590        * wtf/FastMalloc.cpp:
28591        (WTF::TCMalloc_ThreadCache::InitTSD):
28592        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
28593
285942007-10-30  Adam Roben  <aroben@apple.com>
28595
28596        Switch to a Win32 critical section implementation of spinlocks
28597        
28598        Speeds up SunSpider by 0.4%.
28599        
28600        Reviewed by Steve.
28601        
28602        * wtf/FastMalloc.cpp:
28603        * wtf/TCSpinLock.h:
28604        (TCMalloc_SpinLock::TCMalloc_SpinLock):
28605        (TCMalloc_SpinLock::Init):
28606        (TCMalloc_SpinLock::Finalize):
28607        (TCMalloc_SpinLock::Lock):
28608        (TCMalloc_SpinLock::Unlock):
28609        * wtf/TCSystemAlloc.cpp:
28610
286112007-10-30  Adam Roben  <aroben@apple.com>
28612
28613        Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
28614
28615        http://bugs.webkit.org/show_bug.cgi?id=15586
28616
28617        Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
28618
28619        Use Win32 TLS functions instead of __declspec(thread), which breaks
28620        delay-loading.
28621
28622        Reviewed by Steve.
28623
28624        * wtf/FastMalloc.cpp:
28625        (WTF::getThreadHeap):
28626        (WTF::TCMalloc_ThreadCache::InitModule):
28627
286282007-10-30  Maciej Stachowiak  <mjs@apple.com>
28629
28630        Reviewed by Oliver.
28631        
28632        - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
28633        http://bugs.webkit.org/show_bug.cgi?id=15772
28634        
28635        We do this by using a single mark bit per two number cells, and
28636        tweaking marking.
28637        
28638        Besides being an 0.5% win overall, this is a 7.1% win on morph.
28639
28640        * kjs/collector.cpp:
28641        (KJS::Collector::heapAllocate):
28642        (KJS::Collector::markStackObjectsConservatively):
28643        (KJS::Collector::sweep):
28644        * kjs/collector.h:
28645        (KJS::SmallCollectorCell::):
28646
286472007-10-30  Geoffrey Garen  <ggaren@apple.com>
28648
28649        Reviewed by Adam Roben, Sam Weinig.
28650        
28651        Made conflicts in grammar.y a persistent build failure.
28652
28653        * DerivedSources.make:
28654
286552007-10-30  Kevin McCullough  <kmccullough@apple.com>
28656
28657        Reviewed by Adam and Geoff.
28658
28659        - Added a new cast so all the casts are in the same place.
28660
28661        * API/APICast.h:
28662        (toGlobalRef):
28663
286642007-10-30  Geoffrey Garen  <ggaren@apple.com>
28665
28666        Reviewed by Darin Adler.
28667
28668        Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
28669        
28670        JS tests, including 
28671
28672            ecma_2/Statements/dowhile-001.js
28673            ecma_2/Statements/dowhile-002.js
28674            ecma_2/Statements/dowhile-003.js
28675            ecma_2/Statements/dowhile-004.js
28676            ecma_2/Statements/dowhile-005.js
28677            ecma_2/Statements/dowhile-006.js
28678            ecma_2/Statements/dowhile-007.js
28679            js1_2/statements/do_while.js
28680
28681        and layout tests, including
28682
28683            do-while-expression-value.html
28684            do-while-semicolon.html
28685            do-while-without-semicolon.html
28686        
28687        pass.
28688        
28689        * kjs/grammar.y: Use the explicit "error" production, as we do with other
28690        automatic semicolon insertions, to disambiguate "do { } while();" from
28691        "do { } while()" followed by ";" (the empty statement).
28692
286932007-10-29  Oliver Hunt  <oliver@apple.com>
28694
28695        Reviewed by Maciej.
28696
28697        Debranching remaining assignment nodes, and miscellaneous cleanup
28698        
28699        Split read-modify code paths out of AssignBracketNode and AssignDotNode
28700        Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
28701        and ReadModifyResolveNode evaluate methods
28702
28703        Leads to a 1% gain in SunSpider.
28704
28705        * kjs/grammar.y:
28706        * kjs/nodes.cpp:
28707        (KJS::ReadModifyLocalVarNode::evaluate):
28708        (KJS::ReadModifyResolveNode::evaluate):
28709        (KJS::AssignDotNode::evaluate):
28710        (KJS::ReadModifyDotNode::optimizeVariableAccess):
28711        (KJS::ReadModifyDotNode::evaluate):
28712        (KJS::AssignBracketNode::evaluate):
28713        (KJS::ReadModifyBracketNode::optimizeVariableAccess):
28714        (KJS::ReadModifyBracketNode::evaluate):
28715        * kjs/nodes.h:
28716        (KJS::AssignBracketNode::):
28717        (KJS::AssignBracketNode::precedence):
28718        (KJS::AssignDotNode::):
28719        (KJS::AssignDotNode::precedence):
28720        * kjs/nodes2string.cpp:
28721        (KJS::ReadModifyBracketNode::streamTo):
28722        (KJS::AssignBracketNode::streamTo):
28723        (KJS::ReadModifyDotNode::streamTo):
28724        (KJS::AssignDotNode::streamTo):
28725
287262007-10-29  Oliver Hunt  <oliver@apple.com>
28727
28728        Debranching various Node::evaluate implementations
28729        
28730        Reviewed by Maciej.
28731        
28732        Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
28733        Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
28734        
28735        Gains 1.6% on SunSpider
28736
28737        * JavaScriptCore.xcodeproj/project.pbxproj:
28738        * kjs/grammar.y:
28739        * kjs/nodes.cpp:
28740        (KJS::PostIncResolveNode::optimizeVariableAccess):
28741        (KJS::PostIncResolveNode::evaluate):
28742        (KJS::PostIncLocalVarNode::evaluate):
28743        (KJS::PostDecResolveNode::optimizeVariableAccess):
28744        (KJS::PostDecResolveNode::evaluate):
28745        (KJS::PostDecLocalVarNode::evaluate):
28746        (KJS::PostIncBracketNode::evaluate):
28747        (KJS::PostDecBracketNode::evaluate):
28748        (KJS::PostIncDotNode::evaluate):
28749        (KJS::PostDecDotNode::evaluate):
28750        (KJS::PreIncResolveNode::optimizeVariableAccess):
28751        (KJS::PreIncLocalVarNode::evaluate):
28752        (KJS::PreIncResolveNode::evaluate):
28753        (KJS::PreDecResolveNode::optimizeVariableAccess):
28754        (KJS::PreDecLocalVarNode::evaluate):
28755        (KJS::PreDecResolveNode::evaluate):
28756        (KJS::PreIncBracketNode::evaluate):
28757        (KJS::PreDecBracketNode::evaluate):
28758        (KJS::PreIncDotNode::evaluate):
28759        (KJS::PreDecDotNode::evaluate):
28760        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
28761        (KJS::AssignResolveNode::optimizeVariableAccess):
28762        (KJS::AssignLocalVarNode::evaluate):
28763        (KJS::AssignResolveNode::evaluate):
28764        * kjs/nodes.h:
28765        (KJS::PostDecResolveNode::):
28766        (KJS::PostDecResolveNode::precedence):
28767        (KJS::PostDecLocalVarNode::):
28768        (KJS::PostfixBracketNode::):
28769        (KJS::PostfixBracketNode::precedence):
28770        (KJS::PostIncBracketNode::):
28771        (KJS::PostIncBracketNode::isIncrement):
28772        (KJS::PostDecBracketNode::):
28773        (KJS::PostDecBracketNode::isIncrement):
28774        (KJS::PostfixDotNode::):
28775        (KJS::PostfixDotNode::precedence):
28776        (KJS::PostIncDotNode::):
28777        (KJS::PostIncDotNode::isIncrement):
28778        (KJS::PostDecDotNode::):
28779        (KJS::PreIncResolveNode::):
28780        (KJS::PreDecResolveNode::):
28781        (KJS::PreDecResolveNode::precedence):
28782        (KJS::PreDecLocalVarNode::):
28783        (KJS::PrefixBracketNode::):
28784        (KJS::PrefixBracketNode::precedence):
28785        (KJS::PreIncBracketNode::):
28786        (KJS::PreIncBracketNode::isIncrement):
28787        (KJS::PreDecBracketNode::):
28788        (KJS::PreDecBracketNode::isIncrement):
28789        (KJS::PrefixDotNode::):
28790        (KJS::PrefixDotNode::precedence):
28791        (KJS::PreIncDotNode::):
28792        (KJS::PreIncDotNode::isIncrement):
28793        (KJS::PreDecDotNode::):
28794        (KJS::ReadModifyResolveNode::):
28795        (KJS::ReadModifyLocalVarNode::):
28796        (KJS::AssignResolveNode::):
28797        (KJS::AssignResolveNode::precedence):
28798        * kjs/nodes2string.cpp:
28799        (KJS::PostIncResolveNode::streamTo):
28800        (KJS::PostDecResolveNode::streamTo):
28801        (KJS::PostfixBracketNode::streamTo):
28802        (KJS::PostfixDotNode::streamTo):
28803        (KJS::PreIncResolveNode::streamTo):
28804        (KJS::PreDecResolveNode::streamTo):
28805        (KJS::ReadModifyResolveNode::streamTo):
28806        (KJS::AssignResolveNode::streamTo):
28807
288082007-10-29  Maciej Stachowiak  <mjs@apple.com>
28809
28810        Not reviewed, build fix.
28811        
28812        - Include Vector.h in a way that actually works.
28813
28814        * kjs/LocalStorage.h:
28815
288162007-10-29  Maciej Stachowiak  <mjs@apple.com>
28817
28818        Not reviewed, build fix.
28819        
28820        - Install LocalStorage.h as a private header.
28821
28822        * JavaScriptCore.xcodeproj/project.pbxproj:
28823
288242007-10-29  Maciej Stachowiak  <mjs@apple.com>
28825
28826        Reviewed by Darin.
28827        
28828        - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.
28829
28830        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
28831        * JavaScriptCore.xcodeproj/project.pbxproj:
28832        * kjs/LocalStorage.h: Added.
28833        (KJS::LocalStorageEntry::LocalStorageEntry):
28834        (WTF::):
28835        * kjs/function.h:
28836        * kjs/nodes.cpp:
28837        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
28838
288392007-10-29  Geoffrey Garen  <ggaren@apple.com>
28840
28841        Reviewed by Oliver Hunt.
28842        
28843        Some small tweaks that I notice while reviewing Oliver's last patch.
28844        
28845        Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
28846        
28847        No change in SunSpider because SunSpider doesn't take the code path that
28848        would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.
28849
28850        * kjs/nodes.cpp:
28851        (KJS::LocalVarPostfixNode::evaluate):
28852        (KJS::TypeOfResolveNode::optimizeVariableAccess):
28853        (KJS::LocalVarTypeOfNode::evaluate):
28854        (KJS::PrefixResolveNode::optimizeVariableAccess):
28855        (KJS::LocalVarPrefixNode::evaluate):
28856        (KJS::AssignResolveNode::optimizeVariableAccess):
28857        (KJS::LocalVarAssignNode::evaluate):
28858        * kjs/nodes.h:
28859        (KJS::LocalVarTypeOfNode::):
28860        (KJS::PrefixResolveNode::):
28861        (KJS::LocalVarPrefixNode::):
28862        (KJS::AssignResolveNode::):
28863        (KJS::LocalVarAssignNode::):
28864
288652007-10-29  Eric Seidel  <eric@webkit.org>
28866
28867        Reviewed by Maciej.
28868        
28869        SunSpider claims this was a 0.7% speedup.
28870
28871        * kjs/string_object.cpp:
28872        (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case
28873
288742007-10-29  Maciej Stachowiak  <mjs@apple.com>
28875
28876        Reviewed by Mark.
28877        
28878        - re-enable asserts for access to empty or deleted keys
28879
28880        * wtf/HashTable.h:
28881        (WTF::::lookup):
28882        (WTF::::lookupForWriting):
28883        (WTF::::fullLookupForWriting):
28884        (WTF::::add):
28885
288862007-10-29  Eric Seidel  <eric@webkit.org>
28887
28888        Build fix only, no review.
28889
28890        * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
28891
288922007-10-29  Mark Rowe  <mrowe@apple.com>
28893
28894        Gtk build fix.  Move struct declarations into nodes.h.
28895
28896        * kjs/grammar.y:
28897        * kjs/nodes.h:
28898
288992007-10-29  Eric Seidel  <eric@webkit.org>
28900
28901        Reviewed by darin.
28902        
28903        Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
28904        Make it a compile time error to use toString(ExecState) on a StringInstance
28905        
28906        SunSpider claims this was a 6.6% speedup overall (22% on string-base64)
28907
28908        * kjs/internal.h:
28909        (KJS::StringImp::getLength):
28910        * kjs/string_object.cpp:
28911        (KJS::StringInstance::lengthGetter):
28912        (KJS::StringInstance::inlineGetOwnPropertySlot):
28913        (KJS::StringInstance::getOwnPropertySlot):
28914        * kjs/string_object.h:
28915
289162007-10-28  Oliver Hunt  <oliver@apple.com>
28917
28918        Reviewed by Darin.
28919
28920        Add nodes to allow Assignment, TypeOf, and prefix operators to 
28921        make use of the new optimised local variable look up.
28922
28923        5% gain on sunspider
28924
28925        * kjs/nodes.cpp:
28926        (KJS::TypeOfResolveNode::optimizeVariableAccess):
28927        (KJS::LocalTypeOfAccessNode::evaluate):
28928        (KJS::PrefixResolveNode::optimizeVariableAccess):
28929        (KJS::PrefixLocalAccessNode::evaluate):
28930        (KJS::AssignResolveNode::optimizeVariableAccess):
28931        (KJS::AssignLocalAccessNode::evaluate):
28932        * kjs/nodes.h:
28933        (KJS::TypeOfResolveNode::):
28934        (KJS::TypeOfResolveNode::precedence):
28935        (KJS::LocalTypeOfAccessNode::):
28936        (KJS::PrefixResolveNode::):
28937        (KJS::PrefixResolveNode::precedence):
28938        (KJS::PrefixLocalAccessNode::):
28939        (KJS::AssignResolveNode::):
28940        (KJS::AssignLocalAccessNode::):
28941
289422007-10-28  Maciej Stachowiak  <mjs@apple.com>
28943
28944        Reviewed by Darin.
28945        
28946        - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
28947        http://bugs.webkit.org/show_bug.cgi?id=15748
28948        
28949        Not a significant speedup or slowdown on SunSpider.
28950
28951        * kjs/Parser.cpp:
28952        (KJS::clearNewNodes):
28953        * kjs/Parser.h:
28954        * kjs/grammar.y:
28955        * kjs/nodes.cpp:
28956        (KJS::BlockNode::BlockNode):
28957        (KJS::CaseBlockNode::CaseBlockNode):
28958        (KJS::FunctionBodyNode::FunctionBodyNode):
28959        (KJS::SourceElementsNode::SourceElementsNode):
28960        (KJS::ProgramNode::ProgramNode):
28961        * kjs/nodes.h:
28962        (KJS::ElementNode::):
28963        (KJS::ArrayNode::):
28964        (KJS::PropertyListNode::):
28965        (KJS::ObjectLiteralNode::):
28966        (KJS::ArgumentListNode::):
28967        (KJS::ArgumentsNode::):
28968        (KJS::VarDeclListNode::):
28969        (KJS::VarStatementNode::):
28970        (KJS::ForNode::):
28971        (KJS::ParameterNode::):
28972        (KJS::FuncExprNode::):
28973        (KJS::FuncDeclNode::):
28974        (KJS::SourceElementsNode::):
28975        (KJS::CaseClauseNode::):
28976        (KJS::ClauseListNode::):
28977
289782007-10-28  Mark Rowe  <mrowe@apple.com>
28979
28980        Disable assertions in a manner that doesn't break the Qt Windows build.
28981
28982        * wtf/HashTable.h:
28983        (WTF::::lookup):
28984        (WTF::::lookupForWriting):
28985        (WTF::::fullLookupForWriting):
28986
289872007-10-28  Geoffrey Garen  <ggaren@apple.com>
28988
28989        Temporarily disabling some ASSERTs I introduced in my last check-in 
28990        because of http://bugs.webkit.org/show_bug.cgi?id=15747
28991        Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT
28992
28993        * wtf/HashTable.h:
28994        (WTF::::lookup):
28995        (WTF::::lookupForWriting):
28996        (WTF::::fullLookupForWriting):
28997        (WTF::::add):
28998
289992007-10-28  Geoffrey Garen  <ggaren@apple.com>
29000
29001        Reviewed by Darin Adler.
29002        
29003        Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
29004        #ifndef ASSERT_DISABLED is no good!
29005        
29006        Replaced with #if !ASSERT_DISABLED.
29007
29008        * wtf/HashTable.h:
29009        (WTF::::lookup):
29010        (WTF::::lookupForWriting):
29011        (WTF::::fullLookupForWriting):
29012        (WTF::::add):
29013
290142007-10-28  Geoffrey Garen  <ggaren@apple.com>
29015
29016        Reviewed by Darin Adler.
29017        
29018        Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
29019        to the AST transfom that replaces slow resolve nodes with fast local 
29020        variable alternatives.
29021        
29022        2.5% speedup on SunSpider.
29023        
29024        Also added some missing copyright notices.
29025        
29026        * kjs/nodes.cpp:
29027        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
29028        (KJS::FunctionCallResolveNode::evaluate):
29029        (KJS::LocalVarFunctionCallNode::evaluate):
29030        (KJS::PostfixResolveNode::optimizeVariableAccess):
29031        (KJS::PostfixResolveNode::evaluate):
29032        (KJS::LocalVarPostfixNode::evaluate):
29033        (KJS::DeleteResolveNode::optimizeVariableAccess):
29034        (KJS::DeleteResolveNode::evaluate):
29035        (KJS::LocalVarDeleteNode::evaluate):
29036        * kjs/nodes.h:
29037        (KJS::FunctionCallResolveNode::):
29038        (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
29039        (KJS::PostfixResolveNode::):
29040        (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
29041        (KJS::DeleteResolveNode::):
29042        (KJS::LocalVarDeleteNode::LocalVarDeleteNode):
29043
290442007-10-28  Eric Seidel  <eric@webkit.org>
29045
29046        Reviewed by darin.
29047        
29048        Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
29049        Add virtual keyword to a few virtual functions previously unmarked.
29050
29051        * kjs/internal.h:
29052        (KJS::StringImp::type):
29053        (KJS::NumberImp::type):
29054        * kjs/ustring.h:
29055        (KJS::UString::Rep::deref):
29056
290572007-10-28  Darin Adler  <darin@apple.com>
29058
29059        - fix "broken everything" from the storage leak fix
29060
29061        * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
29062        * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.
29063
290642007-10-28  Darin Adler  <darin@apple.com>
29065
29066        Reviewed by Adam.
29067
29068        - turn on unused parameter waring on Mac OS X because it's already on elsewhere
29069
29070        * Configurations/Base.xcconfig: Took out -wno-unused-parameter.
29071
29072        * API/JSNode.c:
29073        * API/JSNodeList.c:
29074        * API/minidom.c:
29075        * API/testapi.c:
29076        Fixed unused variables by using them or marked them with UNUSED_PARAM.
29077
29078        * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
29079        Removed parameter names to indicate they are unused.
29080
290812007-10-28  Darin Adler  <darin@apple.com>
29082
29083        Reviewed by Maciej.
29084
29085        - fix a storage leak where we ref the UString every time we replace
29086          a ResolveNode with a LocalVarAccessNode
29087
29088        * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
29089        that takes PlacementNewAdopt.
29090
29091        * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
29092        with PlacementNewAdopt instead of the old value of ident.
29093
29094        * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
29095        takes PlacementNewAdopt.
29096
290972007-10-28  Darin Adler  <darin@apple.com>
29098
29099        - Windows build fix; get rid of unused parameter
29100
29101        * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
29102        * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
29103        The assertions weren't all that helpful.
29104
291052007-10-28  Mark Rowe  <mrowe@apple.com>
29106
29107        Gtk build fix.  Add include of MathExtras.h.
29108
29109        * kjs/string_object.cpp:
29110
291112007-10-28  Mark Rowe  <mrowe@apple.com>
29112
29113        Reviewed by Maciej and Tim.
29114
29115        Replace uses of isNaN and isInf with isnan and isinf, and
29116        remove isNaN and isInf.
29117
29118        * kjs/config.h: Remove unused HAVE_'s.
29119        * kjs/date_object.cpp:
29120        (KJS::DateInstance::getTime):
29121        (KJS::DateInstance::getUTCTime):
29122        (KJS::DateProtoFunc::callAsFunction):
29123        (KJS::DateObjectImp::construct):
29124        (KJS::DateObjectFuncImp::callAsFunction):
29125        * kjs/function.cpp:
29126        (KJS::GlobalFuncImp::callAsFunction):
29127        * kjs/math_object.cpp:
29128        (MathFuncImp::callAsFunction):
29129        * kjs/nodes2string.cpp:
29130        (KJS::isParserRoundTripNumber):
29131        * kjs/number_object.cpp:
29132        (NumberProtoFunc::callAsFunction):
29133        * kjs/operations.cpp:
29134        * kjs/operations.h:
29135        * kjs/string_object.cpp:
29136        (KJS::StringProtoFunc::callAsFunction):
29137        * kjs/ustring.cpp:
29138        (KJS::UString::from):
29139        * kjs/value.cpp:
29140        (KJS::JSValue::toInteger):
29141        (KJS::JSValue::toInt32SlowCase):
29142        (KJS::JSValue::toUInt32SlowCase):
29143
291442007-10-28  Geoffrey Garen  <ggaren@apple.com>
29145
29146        Build fix: use the new-fangled missingSymbolMarker().
29147
29148        * kjs/nodes.cpp:
29149        (KJS::ResolveNode::optimizeVariableAccess):
29150        * kjs/nodes.h:
29151        (KJS::LocalVarAccessNode::LocalVarAccessNode):
29152
291532007-10-28  Geoffrey Garen  <ggaren@apple.com>
29154
29155        Reviewed by Maciej Stachowiak, Darin Adler.
29156        
29157        Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 
29158        Cameron Zwarich.
29159        
29160        AST transfom to replace slow resolve nodes with fast local variable
29161        alternatives that do direct memory access. Currently, only ResolveNode
29162        provides a fast local variable alternative. 6 others are soon to come.
29163        
29164        16.7% speedup on SunSpider.
29165        
29166        Most of this patch is just scaffolding to support iterating all the 
29167        resolve nodes in the AST through optimizeResolveNodes(). In 
29168        optimizeResolveNodes(), most classes just push their child nodes onto 
29169        the processing stack, while ResolveNodes actually replace themselves in 
29170        the tree with more optimized alternatives, if possible.
29171
29172        Here are the interesting bits:
29173
29174        * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 
29175        in Node and ResolveNode. This tag allows you to use placement new to 
29176        swap out a base class Node in favor of a subclass copy that holds the
29177        same data. (Without this tag, default initialization would NULL out
29178        RefPtrs, change line numbers, etc.)
29179
29180        * kjs/nodes.cpp:
29181        (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
29182        that the fast path is impossible, to make sure we didn't leave anything
29183        on the table.
29184
29185        (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 
29186        transformation happens.
29187        
29188        (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
29189        optimization happens.
29190
29191        * kjs/function.h: Added symbolTable() accessor for, for the sake of 
29192        an ASSERT.
29193
291942007-10-28  Mark Rowe  <mrowe@apple.com>
29195
29196        Reviewed by Maciej.
29197
29198        Fix "AllInOneFile.o has a global initializer in it".
29199
29200        Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
29201        We can avoid this by moving it inside an inline function.
29202
29203        * kjs/SymbolTable.h:
29204        (KJS::missingSymbolMarker):
29205        * kjs/function.cpp:
29206        (KJS::ActivationImp::getOwnPropertySlot):
29207        (KJS::ActivationImp::put):
29208
292092007-10-28  Maciej Stachowiak  <mjs@apple.com>
29210
29211        Reviewed by Mark.
29212        
29213        - Added assertions to protect against adding empty or deleted keys to a HashTable
29214
29215        * wtf/HashTable.h:
29216        (WTF::HashTable::lookup):
29217        (WTF::HashTable::lookupForWriting):
29218        (WTF::HashTable::fullLookupForWriting):
29219        (WTF::HashTable::add):
29220
292212007-10-28  Darin Adler  <darin@apple.com>
29222
29223        - fix GTK build
29224
29225        * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
29226        Use isNaN and isInf instead of isnan and isinf.
29227
292282007-10-28  Darin Adler  <darin@apple.com>
29229
29230        Reviewed by Maciej.
29231
29232        - http://bugs.webkit.org/show_bug.cgi?id=15735
29233          remove GroupNode to simplify AST and possibly get a modest speedup
29234
29235        This patch removes 4 node types: GroupNode, PropertyNameNode,
29236        FunctionCallParenBracketNode, and FunctionCallParenDotNode.
29237
29238        To remove GroupNode, we add knowledge of precedence to the tree nodes,
29239        and use that when serializing to determine where parentheses are needed.
29240        This means we no longer have to represent parentheses in the tree.
29241
29242        The precedence values are named after productions in the grammar from the
29243        JavaScript standard.
29244
29245        SunSpider says this is an 0.4% speedup.
29246
29247        * kjs/function.h:
29248        * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
29249        serialization, so I moved it to the file that takes care of that.
29250
29251        * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
29252        indicate failure instead of a separate boolean. Got rid of PropertyNameNode
29253        by merging the PropertyName rule into the Property rule (which was easier
29254        than figuring out how to pass the Identifier from one node to another).
29255        Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
29256        and FunctionCallParenDotNode.
29257
29258        * kjs/nodes.h: Removed unused forward declarations and Operator values.
29259        Added Precedence enum, and precedence function to all nodes. Removed
29260        nodeInsideAllParens. Added streamBinaryOperator function for serialization.
29261        Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
29262        Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.
29263
29264        * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
29265        (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
29266        of converting it from an Identifier to a jsString then back to a UString
29267        then into an Identifier again!
29268
29269        * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
29270        function for each of Endl, Indent, Unindent, and DotExpr instead of using a
29271        single function with a switch. Added a precedence that you can stream in, to
29272        cause the next node serialized to add parentheses based on that precedence value.
29273        (KJS::operatorString): Moved to the top of the file.
29274        (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
29275        workaround for snprintf, since StringExtras.h takes care of that.
29276        (KJS::operator<<): Made the char and char* versions faster by using UString's
29277        character append functions instead of constructing a UString. Added the logic
29278        to the Node* version to add parentheses if needed.
29279        (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
29280        (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
29281        (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
29282        the bracket.
29283        (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
29284        (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
29285        (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
29286        (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
29287        (KJS::FunctionCallBracketNode::streamTo): Ditto.
29288        (KJS::FunctionCallDotNode::streamTo): Ditto.
29289        (KJS::PostfixBracketNode::streamTo): Ditto.
29290        (KJS::PostfixDotNode::streamTo): Ditto.
29291        (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
29292        (KJS::DeleteBracketNode::streamTo): Use PrecCall.
29293        (KJS::DeleteDotNode::streamTo): Ditto.
29294        (KJS::DeleteValueNode::streamTo): Use PrecUnary.
29295        (KJS::VoidNode::streamTo): Ditto.
29296        (KJS::TypeOfValueNode::streamTo): Ditto.
29297        (KJS::PrefixBracketNode::streamTo): Use PrecCall.
29298        (KJS::PrefixDotNode::streamTo): Ditto.
29299        (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
29300        (KJS::UnaryPlusNode::streamTo): Ditto.
29301        (KJS::NegateNode::streamTo): Ditto.
29302        (KJS::BitwiseNotNode::streamTo): Ditto.
29303        (KJS::LogicalNotNode::streamTo): Ditto.
29304        (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
29305        (KJS::DivNode::streamTo): Ditto.
29306        (KJS::ModNode::streamTo): Ditto.
29307        (KJS::AddNode::streamTo): Ditto.
29308        (KJS::SubNode::streamTo): Ditto.
29309        (KJS::LeftShiftNode::streamTo): Ditto.
29310        (KJS::RightShiftNode::streamTo): Ditto.
29311        (KJS::UnsignedRightShiftNode::streamTo): Ditto.
29312        (KJS::LessNode::streamTo): Ditto.
29313        (KJS::GreaterNode::streamTo): Ditto.
29314        (KJS::LessEqNode::streamTo): Ditto.
29315        (KJS::GreaterEqNode::streamTo): Ditto.
29316        (KJS::InstanceOfNode::streamTo): Ditto.
29317        (KJS::InNode::streamTo): Ditto.
29318        (KJS::EqualNode::streamTo): Ditto.
29319        (KJS::NotEqualNode::streamTo): Ditto.
29320        (KJS::StrictEqualNode::streamTo): Ditto.
29321        (KJS::NotStrictEqualNode::streamTo): Ditto.
29322        (KJS::BitAndNode::streamTo): Ditto.
29323        (KJS::BitXOrNode::streamTo): Ditto.
29324        (KJS::BitOrNode::streamTo): Ditto.
29325        (KJS::LogicalAndNode::streamTo): Ditto.
29326        (KJS::LogicalOrNode::streamTo): Ditto.
29327        (KJS::ConditionalNode::streamTo): Ditto.
29328        (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
29329        (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
29330        the bracket and PrecAssignment for the right side.
29331        (KJS::AssignDotNode::streamTo): Ditto.
29332        (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
29333        and PrecAssignment for the right side.
29334        (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
29335        (KJS::AssignExprNode::streamTo): Use PrecAssignment.
29336
293372007-10-28  Kevin Ollivier  <kevino@theolliviers.com>
29338
29339        Define wx port and set wx port USE options.
29340
29341        Reviewed by Adam Roben.
29342
29343        * wtf/Platform.h:
29344
293452007-10-28  Mark Rowe  <mrowe@apple.com>
29346
29347        We don't include "config.h" in headers.
29348
29349        * bindings/jni/jni_instance.h:
29350        * kjs/regexp.h:
29351        * wtf/TCPageMap.h:
29352        * wtf/TCSpinLock.h:
29353
293542007-10-28  Maciej Stachowiak  <mjs@apple.com>
29355
29356        Rubber stamped by Mark.
29357        
29358        - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits
29359
29360        * kjs/SymbolTable.h:
29361        (KJS::SymbolTableIndexHashTraits::emptyValue):
29362        * kjs/function.cpp:
29363        (KJS::ActivationImp::getOwnPropertySlot):
29364        (KJS::ActivationImp::put):
29365
293662007-10-28  Maciej Stachowiak  <mjs@apple.com>
29367
29368        Reviewed by Eric.
29369        
29370        - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup
29371
29372        * kjs/SymbolTable.h:
29373        (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
29374        (KJS::IdentifierRepHash::equal): ditto
29375        (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
29376        (KJS::SymbolTable): change to a typedef for a HashMap.
29377        * kjs/function.cpp:
29378        (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
29379        (KJS::ActivationImp::deleteProperty): ditto
29380        (KJS::ActivationImp::put): ditto
29381
29382        * kjs/nodes.cpp:
29383        (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
29384        you now have to store a UString::rep, not an identifier.
29385
293862007-10-27  Maciej Stachowiak  <mjs@apple.com>
29387
29388        Reviewed by Oliver.
29389        
29390        - numerous HashTable performance improvements
29391        
29392        This does not quite add up to a measurable win on SunSpider, but it allows a
29393        follow-on > 3% improvement and probably helps WebCore too.
29394        
29395        I made the following improvements, among others:
29396        
29397        - Made HashFunctions note whether it is ok to compare a real value with the equal() function
29398        to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
29399        
29400        - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
29401        std::pairs for cases that don't need them. There are now four versions, one for read-only access,
29402        two for writing, and one folded directly into add() (these all were improvments).
29403        
29404        - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
29405        
29406        - Made a special constructor for iterators that knows it points to
29407        a valid filled cell and so skips updating itself.
29408
29409        - Reordered memory accesses in the various lookup functions for better code generation
29410        
29411        - Made simple translators avoid passing a hash code around
29412        
29413        - Other minor tweaks
29414        
29415        * wtf/HashTable.h:
29416        (WTF::):
29417        (WTF::HashTableConstIterator::HashTableConstIterator):
29418        (WTF::HashTableIterator::HashTableIterator):
29419        (WTF::IdentityHashTranslator::translate):
29420        (WTF::HashTable::end):
29421        (WTF::HashTable::lookup):
29422        (WTF::HashTable::lookupForWriting):
29423        (WTF::HashTable::makeKnownGoodIterator):
29424        (WTF::HashTable::makeKnownGoodConstIterator):
29425        (WTF::::lookup):
29426        (WTF::::lookupForWriting):
29427        (WTF::::fullLookupForWriting):
29428        (WTF::::add):
29429        (WTF::::addPassingHashCode):
29430        (WTF::::reinsert):
29431        (WTF::::find):
29432        (WTF::::contains):
29433        * kjs/identifier.cpp:
29434        (WTF::):
29435        * wtf/HashFunctions.h:
29436        (WTF::):
29437        * wtf/HashMap.h:
29438        (WTF::):
29439        (WTF::::get):
29440        * wtf/HashSet.h:
29441        (WTF::):
29442        (WTF::::add):
29443        * wtf/ListHashSet.h:
29444        (WTF::ListHashSetTranslator::translate):
29445
294462007-10-27  Darin Adler  <darin@apple.com>
29447
29448        Reviewed by Eric.
29449
29450        - fix ASCIICType.h for some Windows compiles
29451
29452        * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the
29453        compiler/library that has the wchar_t that is just a typedef.
29454
294552007-10-27  Kevin McCullough  <kmccullough@apple.com>
29456
29457        - BuildFix
29458        - Forgot to change the build step when I changed the filename.
29459
29460        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29461
294622007-10-27  Geoffrey Garen  <ggaren@apple.com>
29463
29464        Reviewed by Darin Adler.
29465        
29466        Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep::
29467        computedHash()"
29468        http://bugs.webkit.org/show_bug.cgi?id=15718
29469
29470        * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a 
29471        hash value. Also changed O(n) strlen to O(1) check for empty string.
29472        (KJS::Identifier::add):
29473
29474        * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string.
29475        (KJS::UString::UString):
29476        (KJS::UString::operator=):
29477
294782007-10-27  Darin Adler  <darin@apple.com>
29479
29480        Reviewed by Eric.
29481
29482        - fix pow on Windows
29483
29484        * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has
29485        a "pow" function that does not properly handle the case where arg1 is
29486        NaN and arg2 is 0.
29487
29488        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity
29489        specify "::pow" -- just "pow" is fine.
29490
294912007-10-27  Darin Adler  <darin@apple.com>
29492
29493        Reviewed by Maciej.
29494
29495        - http://bugs.webkit.org/show_bug.cgi?id=15711
29496          force JSImmediate to be inlined for roughly 1.2% SunSpider speedup
29497
29498        * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything.
29499
29500        * kjs/object.h: Removed redundant includes.
29501        * kjs/value.h: Ditto.
29502
295032007-10-27  Maciej Stachowiak  <mjs@apple.com>
29504
29505        Reviewed by Mark.
29506        
29507        - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()"
29508        http://bugs.webkit.org/show_bug.cgi?id=15718
29509
29510        * kjs/identifier.cpp:
29511        (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed,
29512        now that we count on all Identifiers already having one.
29513
295142007-10-27  Mark Rowe  <mrowe@apple.com>
29515
29516        Silence a warning.
29517
29518        * kjs/SymbolTable.h:
29519
295202007-10-27  Mark Rowe  <mrowe@apple.com>
29521
29522        Gtk build fix.
29523
29524        * kjs/function.h:
29525
295262007-10-26  Kevin McCullough  <kmccullough@apple.com>
29527
29528       Rubber stamp by Adam. 
29529
29530        - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the
29531        files contain are functions that operate on BSTRs.
29532
29533        * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp.
29534        * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h.
29535        * API/JSStringRefCOM.cpp: Removed.
29536        * API/JSStringRefCOM.h: Removed.
29537        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29538
295392007-10-26  Kevin McCullough  <kmccullough@apple.com>
29540
29541        Reviewed by Adam.
29542
29543        - Made JSStringCreateWithBSTR capable of handling null BSTRs.
29544
29545        * API/JSStringRefCOM.cpp:
29546        (JSStringCreateWithBSTR):
29547
295482007-10-26  Sam Weinig  <sam@webkit.org>
29549
29550        Windows build fix.
29551
29552        * kjs/SymbolTable.h: Add header gaurd.
29553        * kjs/nodes.h: #include "SymbolTable.h"
29554
295552007-10-26  Geoffrey Garen  <ggaren@apple.com>
29556
29557        Suggested by Anders Carlsson.
29558        
29559        Fixed tyop.
29560
29561        * kjs/function.cpp:
29562        (KJS::ActivationImp::getOwnPropertySlot):
29563
295642007-10-26  Geoffrey Garen  <ggaren@apple.com>
29565
29566        Suggested by Darin Adler.
29567        
29568        Use computedHash(), which is safer than just directly accessing _hash.
29569
29570        * kjs/lookup.cpp:
29571        (KJS::Lookup::findEntry):
29572        (KJS::Lookup::find):
29573
295742007-10-26  Geoffrey Garen  <ggaren@apple.com>
29575
29576        Build fix: svn add SymbolTable.h
29577
29578        * kjs/SymbolTable.h: Added.
29579        (KJS::SymbolTable::set):
29580        (KJS::SymbolTable::get):
29581
295822007-10-26  Geoffrey Garen  <ggaren@apple.com>
29583
29584        Build fix: export SymbolTable.h to WebCore.
29585
29586        * JavaScriptCore.xcodeproj/project.pbxproj:
29587
295882007-10-26  Geoffrey Garen  <ggaren@apple.com>
29589
29590        Comment tweak suggested by Maciej.
29591
29592        * kjs/function.cpp:
29593        (KJS::ActivationImp::getOwnPropertySlot):
29594
295952007-10-26  Geoffrey Garen  <ggaren@apple.com>
29596
29597        Reviewed by Maciej Stachowiak.
29598        
29599        Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider.
29600
29601        * kjs/property_map.cpp: Use a special no branch accessor to the UString's
29602        hash value. Also, return immediately instead of branching to the end
29603        of the loop if the value is not found.
29604        (KJS::PropertyMap::get):
29605        (KJS::PropertyMap::getLocation):
29606        (KJS::PropertyMap::put):
29607        (KJS::PropertyMap::insert):
29608        (KJS::PropertyMap::remove):
29609        (KJS::PropertyMap::checkConsistency):
29610
29611        * kjs/ustring.h:
29612        (KJS::UString::Rep::computedHash): Special no branch accessor to the
29613        UString's hash value. Used when the caller knows that the hash value
29614        has already been computed. (For example, if the caller got the UString
29615        from an Identifier.)
29616
296172007-10-26  Geoffrey Garen  <ggaren@apple.com>
29618
29619        Reviewed by Maciej Stachowiak.
29620        
29621        Switched ActivationImp to using a symbol table. For now, though, all
29622        clients take the slow path.
29623        
29624        Net .6% speedup on SunSpider.
29625        
29626        Slowdowns:
29627            - ActivationImp now mallocs in its constructor
29628            - Local variable hits use an extra level of indirection to retrieve 
29629            data
29630            - Local variable misses do two lookups
29631
29632        Speedups:
29633            - Fast initialization of local variables upon function entry
29634
29635        * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h
29636        
29637        * kjs/function.cpp:
29638        (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold
29639        data that won't fit in a JSCell.
29640        (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for 
29641        lookup.
29642        (KJS::ActivationImp::getOwnPropertySlot): ditto
29643        (KJS::ActivationImp::deleteProperty): ditto
29644        (KJS::ActivationImp::put): ditto
29645        (KJS::ActivationImp::createArgumentsObject): ditto
29646
29647        (KJS::ActivationImp::mark): Call JSObject::mark first so that one of
29648        our properties doesn't try to recursively mark us. (This caused a crash
29649        in earlier testing. Not sure why we haven't run into it before.)
29650
29651        * kjs/nodes.cpp: Functions now build a symbol table the first time 
29652        they're called.
29653        (KJS::VarDeclNode::evaluate):
29654        (KJS::FunctionBodyNode::FunctionBodyNode):
29655        (KJS::FunctionBodyNode::initializeSymbolTable):
29656        (KJS::FunctionBodyNode::processDeclarations):
29657        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
29658        (KJS::FunctionBodyNode::processDeclarationsForProgramCode):
29659
29660        * kjs/nodes.h:
29661        (KJS::FunctionBodyNode::symbolTable):
29662
29663        * wtf/Forward.h: Added Vector.
29664
296652007-10-26  Kevin McCullough  <kmccullough@apple.com>
29666
29667        - Corrected function name mistake in this changelog.
29668
296692007-10-26  Kevin McCullough  <kmccullough@apple.com>
29670        Reviewed by Sam and Steve.
29671
29672        - Added convenience methods for converting between BSTR and JSStringRefs
29673
29674        * API/JSStringRefCOM.cpp: Added.
29675        (JSStringCreateWithBSTR):
29676        (JSStringCopyBSTR):
29677        * API/JSStringRefCOM.h: Added.
29678        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29679
296802007-10-26  Mark Rowe  <mrowe@apple.com>
29681
29682        Windows build fix.
29683
29684        * kjs/collector.cpp:
29685        (KJS::Collector::collect):
29686
296872007-10-26  Oliver Hunt  <oliver@apple.com>
29688
29689        Reviewed by Maciej.
29690
29691        Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider.
29692
29693        * kjs/CollectorHeapIntrospector.cpp:
29694        (KJS::CollectorHeapIntrospector::init):
29695        (KJS::CollectorHeapIntrospector::enumerate):
29696        * kjs/CollectorHeapIntrospector.h:
29697        * kjs/collector.cpp:
29698        (KJS::Collector::recordExtraCost):
29699        (KJS::Collector::heapAllocate):
29700        (KJS::Collector::allocate):
29701        (KJS::Collector::allocateNumber):
29702        (KJS::Collector::registerThread):
29703        (KJS::Collector::markStackObjectsConservatively):
29704        (KJS::Collector::markMainThreadOnlyObjects):
29705        (KJS::Collector::sweep):
29706        (KJS::Collector::collect):
29707        * kjs/collector.h:
29708        * kjs/internal.h:
29709        (KJS::NumberImp::operator new):
29710          Force numbers to be allocated in the secondary heap.
29711
297122007-10-26  Maciej Stachowiak  <mjs@apple.com>
29713
29714        Reviewed by Oliver.
29715        
29716        - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider.
29717
29718        * kjs/value.h:
29719        (KJS::JSValue::getUInt32):
29720        (KJS::JSValue::getTruncatedInt32):
29721        (KJS::JSValue::toNumber):
29722        * wtf/PassRefPtr.h:
29723        (WTF::PassRefPtr::~PassRefPtr):
29724        * wtf/RefPtr.h:
29725        (WTF::RefPtr::operator->):
29726
297272007-10-26  Mark Rowe  <mrowe@apple.com>
29728
29729        Gtk build fix.
29730
29731        * kjs/ExecState.h:
29732
297332007-10-26  Maciej Stachowiak  <mjs@apple.com>
29734
29735        Reviewed by Mark.
29736
29737        - Merge Context class fully into ExecState, since they are always created and used together.
29738
29739        No measurable performance impact but this is a useful cleanup.
29740
29741        * JavaScriptCore.pri:
29742        * kjs/ExecState.cpp:
29743        (KJS::ExecState::ExecState):
29744        (KJS::ExecState::~ExecState):
29745        (KJS::ExecState::mark):
29746        (KJS::ExecState::lexicalInterpreter):
29747        * kjs/ExecState.h:
29748        (KJS::ExecState::dynamicInterpreter):
29749        (KJS::ExecState::setException):
29750        (KJS::ExecState::clearException):
29751        (KJS::ExecState::exception):
29752        (KJS::ExecState::exceptionSlot):
29753        (KJS::ExecState::hadException):
29754        (KJS::ExecState::scopeChain):
29755        (KJS::ExecState::callingExecState):
29756        (KJS::ExecState::propertyNames):
29757        * kjs/collector.cpp:
29758        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
29759        * kjs/function.cpp:
29760        (KJS::FunctionImp::callAsFunction):
29761        (KJS::FunctionImp::argumentsGetter):
29762        (KJS::FunctionImp::callerGetter):
29763        (KJS::GlobalFuncImp::callAsFunction):
29764        * kjs/interpreter.cpp:
29765        (KJS::Interpreter::Interpreter):
29766        (KJS::Interpreter::init):
29767        (KJS::Interpreter::evaluate):
29768        (KJS::Interpreter::mark):
29769        * kjs/interpreter.h:
29770        (KJS::Interpreter::setCurrentExec):
29771        (KJS::Interpreter::currentExec):
29772        * kjs/nodes.cpp:
29773        (KJS::currentSourceId):
29774        (KJS::currentSourceURL):
29775        (KJS::ThisNode::evaluate):
29776        (KJS::ResolveNode::evaluate):
29777        (KJS::FunctionCallResolveNode::evaluate):
29778        (KJS::PostfixResolveNode::evaluate):
29779        (KJS::DeleteResolveNode::evaluate):
29780        (KJS::TypeOfResolveNode::evaluate):
29781        (KJS::PrefixResolveNode::evaluate):
29782        (KJS::AssignResolveNode::evaluate):
29783        (KJS::VarDeclNode::evaluate):
29784        (KJS::DoWhileNode::execute):
29785        (KJS::WhileNode::execute):
29786        (KJS::ForNode::execute):
29787        (KJS::ForInNode::execute):
29788        (KJS::ContinueNode::execute):
29789        (KJS::BreakNode::execute):
29790        (KJS::ReturnNode::execute):
29791        (KJS::WithNode::execute):
29792        (KJS::SwitchNode::execute):
29793        (KJS::LabelNode::execute):
29794        (KJS::TryNode::execute):
29795        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
29796        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
29797        (KJS::FunctionBodyNode::processDeclarations):
29798        (KJS::FuncDeclNode::makeFunction):
29799        (KJS::FuncExprNode::evaluate):
29800
298012007-10-26  Mark Rowe  <mrowe@apple.com>
29802
29803        Windows build fix.
29804
29805        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29806
298072007-10-26  Mark Rowe  <mrowe@apple.com>
29808
29809        Gtk build fix.
29810
29811        * JavaScriptCore.pri:
29812        * kjs/ExecState.cpp:
29813
298142007-10-26  Maciej Stachowiak  <mjs@apple.com>
29815
29816        Reviewed by Oliver.
29817        
29818        - moved Context class into ExecState.{h,cpp} in preparation for merging 
29819        ExecState and Context classes.
29820
29821        * kjs/ExecState.h: Moved CodeType enum and Context class here in
29822        preparation for merging ExecState and Context.
29823        * kjs/ExecState.cpp: Moved Context class here from Context.cpp.
29824        (KJS::Context::Context):
29825        (KJS::Context::~Context):
29826        (KJS::Context::mark):
29827        * kjs/context.h: Removed.
29828        * kjs/Context.cpp: Removed.
29829        * kjs/function.h: Removed CodeType enum.
29830        * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h.
29831        * kjs/internal.h: Removed LabelStack.
29832        * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone.
29833        * kjs/collector.cpp: Fixed includes.
29834        * kjs/function.cpp: ditto
29835        * kjs/internal.cpp: ditto
29836        * kjs/interpreter.cpp: ditto
29837        * kjs/lookup.h: ditto
29838        * kjs/nodes.cpp: ditto
29839
298402007-10-26  Mark Rowe  <mrowe@apple.com>
29841
29842        Windows build fix.
29843
29844        * kjs/string_object.cpp:
29845        (KJS::StringObjectFuncImp::callAsFunction):
29846
298472007-10-25  Darin Adler  <darin@apple.com>
29848
29849        Reviewed by Maciej.
29850
29851        - http://bugs.webkit.org/show_bug.cgi?id=15703
29852          fix numeric functions -- improve correctness and speed
29853
29854        Gives about 1% gain on SunSpider.
29855
29856        * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16.
29857        (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works
29858        with both immediate and number values.
29859        (KJS::JSValue::toUInt32): Ditto.
29860        * kjs/value.cpp:
29861        (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple
29862        differences. One is that it now correctly returns 0 for NaN, and another is that
29863        there's no special case for 0 or infinity, since the general case already handles
29864        those correctly.
29865        (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the
29866        check for NaN.
29867        (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The
29868        truncation done by the typecast already does the necessary truncation that
29869        roundValue was doing.
29870        (KJS::JSValue::toUInt32SlowCase): Ditto.
29871        (KJS::JSValue::toUInt16): Removed.
29872
29873        * kjs/internal.h: Removed roundValue.
29874        * kjs/internal.cpp: Ditto.
29875
29876        * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded
29877        code to handle NaN in Array.slice; toInteger now never returns NaN as specified.
29878
29879        * kjs/date_object.cpp:
29880        (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to
29881        toNumber as specified.
29882        (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue
29883        with a call to toNumber and timeClip as specified.
29884        (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases
29885        where the default behavior of toInt32 (returning 0) was already correct. Replaced
29886        call to roundValue with a call to toNumber as specified.
29887        (KJS::DateObjectFuncImp::callAsFunction): Ditto.
29888
29889        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special
29890        cases for the pow function that the library already handles correctly.
29891
29892        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to
29893        call toIntegerPreserveNaN, so we can continue to handle the NaN case differently.
29894        The real toInteger now returns 0 for NaN. Took out unneeded special case in
29895        ToFixed for undefined; was only needed because our toInteger was wrong. Same
29896        thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN.
29897
29898        * kjs/string_object.cpp:
29899        (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special
29900        cases for undefined that were only needed because toInteger was wrong. Same in
29901        IndexOf, and was able to remove some special cases. In LastIndexOf, used
29902        toIntegerPreserveNaN, but was able to remove some special cases there too.
29903        Changed Substr implementation to preserve correct behavior with the change
29904        to toInteger and match the specification. Also made sure we weren't converting
29905        an out of range double to an int.
29906        (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use
29907        toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's
29908        no reason to have toUInt16 as a second, less-optimized function that's only
29909        called at this one call site.
29910
29911        * wtf/MathExtras.h: Added trunc function for Windows.
29912
299132007-10-25  Geoffrey Garen  <ggaren@apple.com>
29914
29915        Reviewed by Maciej Stachowiak.
29916        
29917        Tweaked the inner hashtable lookup loop to remove a branch in the "not 
29918        found" case. .5% speedup on SunSpider.
29919
29920        * JavaScriptCore.xcodeproj/project.pbxproj:
29921        * wtf/HashTable.h:
29922        (WTF::::lookup):
29923
299242007-10-25  Maciej Stachowiak  <mjs@apple.com>
29925
29926        Reviewed by Oliver.
29927
29928        - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider
29929
29930        * kjs/nodes.cpp:
29931        (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not
29932        adding any value over toNumber() here.
29933        (KJS::valueForReadModifyAssignment): Ditto.
29934        (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls
29935        and branches.
29936        (KJS::lessThanEq): Ditto.
29937        * JavaScriptCore.exp: Export new functions as needed.
29938        * kjs/value.h:
29939        (KJS::JSValue::toPrimitive): Fixed formatting.
29940        (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts
29941        to number and tells you whether a toPrimitive() conversion with a Number hint
29942        would have given a string.
29943        * kjs/internal.cpp:
29944        (KJS::StringImp::getPrimitiveNumber): Implemented. 
29945        (KJS::NumberImp::getPrimitiveNumber): ditto
29946        (KJS::GetterSetterImp::getPrimitiveNumber): ditto
29947        (KJS::StringImp::toPrimitive): Fixed formatting.
29948        (KJS::NumberImp::toPrimitive): ditto
29949        (KJS::GetterSetterImp::toPrimitive): ditto
29950        * kjs/internal.h:
29951        * kjs/object.cpp:
29952        (KJS::JSObject::getPrimitiveNumber): Implemented.
29953        * kjs/object.h:
29954
299552007-10-25  Sam Weinig  <sam@webkit.org>
29956
29957        Reviewed by Adam Roben.
29958
29959        Remove JSStringRefCFHack from windows as it is no longer needed.
29960
29961        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29962
299632007-10-25  Geoffrey Garen  <ggaren@apple.com>
29964
29965        Reviewed by Oliver Hunt.
29966        
29967        Rolled out my last patch. It turns out that I needed 2 words, not 1,
29968        so it didn't help.
29969
299702007-10-25  Geoffrey Garen  <ggaren@apple.com>
29971
29972        Reviewed by Oliver Hunt.
29973        
29974        Fixed http://bugs.webkit.org/show_bug.cgi?id=15694
29975        Shrink the size of an activation object by 1 word
29976        
29977        This is in preparation for adding a symbol table to the activation 
29978        object.
29979        
29980        The basic strategy here is to rely on the mutual exclusion between
29981        the arguments object pointer and the function pointer (you only need
29982        the latter in order to create the former), and store them in the same 
29983        place. The LazyArgumentsObject class encapsulates this strategy.
29984        
29985        Also inlined the ArgumentsImp constructor, for good measure.
29986        
29987        SunSpider reports no regression. Regression tests pass.
29988
29989        * JavaScriptCore.xcodeproj/project.pbxproj:
29990        * kjs/Context.cpp:
29991        (KJS::Context::~Context):
29992        * kjs/function.cpp:
29993        (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject):
29994        (KJS::ActivationImp::LazyArgumentsObject::mark):
29995        (KJS::ActivationImp::argumentsGetter):
29996        (KJS::ActivationImp::mark):
29997        * kjs/function.h:
29998        (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject):
29999        (KJS::ActivationImp::LazyArgumentsObject::getOrCreate):
30000        (KJS::ActivationImp::LazyArgumentsObject::resetArguments):
30001        (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject):
30002        (KJS::ActivationImp::LazyArgumentsObject::argumentsObject):
30003        (KJS::ActivationImp::LazyArgumentsObject::setFunction):
30004        (KJS::ActivationImp::LazyArgumentsObject::function):
30005        (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject):
30006        (KJS::ActivationImp::LazyArgumentsObject::):
30007        (KJS::ActivationImp::ActivationImp::ActivationImp):
30008        (KJS::ActivationImp::resetArguments):
30009
300102007-10-25  Adam Roben  <aroben@apple.com>
30011
30012        Change JavaScriptCore.vcproj to use DerivedSources.make
30013
30014        We were trying to emulate the logic of make in
30015        build-generated-files.sh, but we got it wrong. We now use a
30016        build-generated-files very much like the one that WebCore uses to
30017        invoke make.
30018
30019        We also now only have a Debug configuration of dftables which we build
30020        even when doing a Release build of JavaScriptCore. dftables also no
30021        longer has the "_debug" name suffix.
30022
30023        Changes mostly made by Darin, reviewed by me.
30024
30025        * DerivedSources.make: Add a variable to set the extension used for
30026        the dftables executable.
30027        * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug
30028        dftables in Release configurations.
30029        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
30030        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
30031           - Updated include path to point to the new location of the derived
30032             sources.
30033           - Modified pre-build event to pass the right arguments to
30034             build-generated-files.sh and not call dftables directly.
30035           - Added the derived source files to the project.
30036           - Removed grammarWrapper.cpp, which isn't needed now that we're
30037             compiling grammar.cpp directly.
30038        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
30039        Slightly modified from the WebCore version.
30040        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed.
30041        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
30042            - Changed the output location to match Mac.
30043            - Removed the Release configuration.
30044            - Removed the _debug suffix.
30045
300462007-10-25  Geoffrey Garen  <ggaren@apple.com>
30047
30048        Reviewed by Eric Seidel.
30049        
30050        Slightly elaborated the differences between declaration procesing in 
30051        Function Code and Program Code.
30052        
30053        .3% speedup on SunSpider.
30054
30055        * kjs/nodes.cpp:
30056        (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 
30057        (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a 
30058        minimum set of attributes instead of recomputing all the time. Also,
30059        ignore m_parameters, since programs don't have arguments.
30060
300612007-10-25  Eric Seidel  <eric@webkit.org>
30062
30063        Reviewed by Maciej.
30064        
30065        More preparation work before adding long-running mode to testkjs.
30066
30067        * kjs/testkjs.cpp:
30068        (TestFunctionImp::callAsFunction):
30069        (prettyPrintScript):
30070        (runWithScripts):
30071        (parseArguments):
30072        (kjsmain):
30073        (fillBufferWithContentsOfFile):
30074
300752007-10-25  Eric Seidel  <eric@webkit.org>
30076
30077        Reviewed by Maciej.
30078        
30079        Bring testkjs code out of the dark ages in preparation for more
30080        radical improvements (like long-running testing support!)
30081
30082        * kjs/testkjs.cpp:
30083        (TestFunctionImp::callAsFunction):
30084        (setupInterpreter):
30085        (doIt):
30086        (fillBufferWithContentsOfFile):
30087
300882007-10-25  Geoffrey Garen  <ggaren@apple.com>
30089
30090        Reviewed by Maciej Stachowiak.
30091        
30092        Make a fast path for declaration processing inside Function Code.
30093        
30094        Lifted declaration processing code up from individual declaration nodes
30095        and into processDeclarations.
30096        
30097        Broke out processDeclarations into two cases, depending on the type of 
30098        code. This eliminates 2 branches, and facilitates more radical 
30099        divergeance in the future.
30100        
30101        2.5% SunSpider speedup.
30102
30103        * JavaScriptCore.xcodeproj/project.pbxproj:
30104        * kjs/nodes.cpp:
30105        (KJS::FunctionBodyNode::initializeDeclarationStacks):
30106        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
30107        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
30108        (KJS::FunctionBodyNode::execute):
30109        (KJS::FuncDeclNode::makeFunction):
30110        * kjs/nodes.h:
30111
301122007-10-25  Maciej Stachowiak  <mjs@apple.com>
30113
30114        Reviewed by Adam.
30115        
30116        - add header includes needed on platforms that don't use AllInOneFile.cpp
30117
30118        * API/JSCallbackObject.cpp:
30119        * kjs/Context.cpp:
30120        * kjs/ExecState.cpp:
30121        * kjs/array_instance.cpp:
30122        * kjs/function_object.cpp:
30123        * kjs/interpreter.cpp:
30124        * kjs/nodes.cpp:
30125
301262007-10-25  Eric Seidel  <eric@webkit.org>
30127
30128        Reviewed by Geoff.
30129
30130        * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private
30131
301322007-10-25  Geoffrey Garen  <ggaren@apple.com>
30133
30134        Reviewed by Maciej Stachowiak.
30135        
30136        Fixed http://bugs.webkit.org/show_bug.cgi?id=15683
30137        Re-order declaration initialization to avoid calling hasProperty inside
30138        VarDeclNode::processDeclaration
30139        
30140        .7% speedup on SunSpider.
30141
30142        * kjs/function.h:
30143        * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's
30144        other processing of declared symbols, so the order of execution could 
30145        change.
30146
30147        * kjs/nodes.cpp:
30148        (KJS::VarDeclNode::getDeclarations): Added special case for the 
30149        "arguments" property name, explained in the comment.
30150
30151        (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty
30152        in the case of function code, since we know the declared symbol
30153        management will resolve conflicts between symbols. Yay!
30154
30155        (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's 
30156        implementation of getDeclarations is non-trivial, we can't take a 
30157        short-cut here any longer -- we need to put the VarDecl node on the 
30158        stack so it gets processed normally.
30159
30160        (KJS::FunctionBodyNode::processDeclarations): Changed the order of 
30161        processing to enforce mutual exclusion rules.
30162
30163        * kjs/nodes.h:
30164        (KJS::DeclarationStacks::DeclarationStacks): Structure includes an 
30165        ExecState now, for fast access to the "arguments" property name.
30166
301672007-10-24  Eric Seidel  <eric@webkit.org>
30168
30169        Reviewed by Maciej.
30170        
30171        Add a JSGlobalObject class and remove the InterpreterMap
30172        http://bugs.webkit.org/show_bug.cgi?id=15681
30173        
30174        This required making JSCallbackObject a template class to allow for
30175        JSGlobalObjects with JSCallbackObject functionality.
30176        
30177        SunSpider claims this was a 0.5% speedup.
30178
30179        * API/JSCallbackObject.cpp:
30180        * API/JSCallbackObject.h:
30181        * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp.
30182        (KJS::::JSCallbackObject):
30183        (KJS::::init):
30184        (KJS::::~JSCallbackObject):
30185        (KJS::::initializeIfNeeded):
30186        (KJS::::className):
30187        (KJS::::getOwnPropertySlot):
30188        (KJS::::put):
30189        (KJS::::deleteProperty):
30190        (KJS::::implementsConstruct):
30191        (KJS::::construct):
30192        (KJS::::implementsHasInstance):
30193        (KJS::::hasInstance):
30194        (KJS::::implementsCall):
30195        (KJS::::callAsFunction):
30196        (KJS::::getPropertyNames):
30197        (KJS::::toNumber):
30198        (KJS::::toString):
30199        (KJS::::setPrivate):
30200        (KJS::::getPrivate):
30201        (KJS::::inherits):
30202        (KJS::::cachedValueGetter):
30203        (KJS::::staticValueGetter):
30204        (KJS::::staticFunctionGetter):
30205        (KJS::::callbackGetter):
30206        * API/JSClassRef.cpp:
30207        (OpaqueJSClass::prototype):
30208        * API/JSContextRef.cpp:
30209        (JSGlobalContextCreate):
30210        * API/JSObjectRef.cpp:
30211        (JSObjectMake):
30212        (JSObjectGetPrivate):
30213        (JSObjectSetPrivate):
30214        * API/JSValueRef.cpp:
30215        (JSValueIsObjectOfClass):
30216        * JavaScriptCore.exp:
30217        * JavaScriptCore.xcodeproj/project.pbxproj:
30218        * bindings/c/c_utility.cpp:
30219        (KJS::Bindings::convertValueToNPVariant):
30220        * bindings/jni/jni_jsobject.cpp:
30221        * bindings/objc/objc_utility.mm:
30222        (KJS::Bindings::convertValueToObjcValue):
30223        * kjs/Context.cpp:
30224        (KJS::Context::Context):
30225        * kjs/ExecState.cpp:
30226        (KJS::ExecState::lexicalInterpreter):
30227        * kjs/JSGlobalObject.h: Added.
30228        (KJS::JSGlobalObject::JSGlobalObject):
30229        (KJS::JSGlobalObject::isGlobalObject):
30230        (KJS::JSGlobalObject::interpreter):
30231        (KJS::JSGlobalObject::setInterpreter):
30232        * kjs/array_instance.cpp:
30233        * kjs/context.h:
30234        * kjs/function.cpp:
30235        (KJS::FunctionImp::callAsFunction):
30236        (KJS::GlobalFuncImp::callAsFunction):
30237        * kjs/interpreter.cpp:
30238        (KJS::Interpreter::Interpreter):
30239        (KJS::Interpreter::init):
30240        (KJS::Interpreter::~Interpreter):
30241        (KJS::Interpreter::globalObject):
30242        (KJS::Interpreter::initGlobalObject):
30243        (KJS::Interpreter::evaluate):
30244        * kjs/interpreter.h:
30245        * kjs/lookup.h:
30246        (KJS::cacheGlobalObject):
30247        * kjs/object.h:
30248        (KJS::JSObject::isGlobalObject):
30249        * kjs/testkjs.cpp:
30250
302512007-10-24  Eric Seidel  <eric@webkit.org>
30252
30253        Build fix for Gtk, no review.
30254
30255        * kjs/collector.cpp: #include "context.h"
30256
302572007-10-24  Eric Seidel  <eric@webkit.org>
30258
30259        Reviewed by Maciej.
30260        
30261        Stop checking isOutOfMemory after every allocation, instead let the collector
30262        notify all ExecStates if we ever hit this rare condition.
30263        
30264        SunSpider claims this was a 2.2% speedup.
30265
30266        * kjs/collector.cpp:
30267        (KJS::Collector::collect):
30268        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
30269        * kjs/collector.h:
30270        * kjs/nodes.cpp:
30271        (KJS::TryNode::execute):
30272
302732007-10-24  Mark Rowe  <mrowe@apple.com>
30274
30275        Gtk build fix.
30276
30277        * kjs/identifier.h:  Remove extra qualification.
30278
302792007-10-24  Geoffrey Garen  <ggaren@apple.com>
30280
30281        Reviewed by Sam Weinig.
30282        
30283        Disable ALWAYS_INLINE in debug builds, since it drives the debugger
30284        crazy.
30285
30286        * wtf/AlwaysInline.h:
30287
302882007-10-24  Geoffrey Garen  <ggaren@apple.com>
30289
30290        Reviewed by Sam Weinig.
30291        
30292        Inlined the fast path for creating an Identifier from an Identifier. 
30293        
30294        This is a .4% speedup on SunSpider overall, but as big as a 2.5% 
30295        speedup on certain individual tests. 65% of the Identifiers creating 
30296        by SunSpider are already Identifiers.
30297        
30298        (The main reason I'm making this change is that it resolves a large
30299        regression in a patch I haven't checked in yet.)
30300
30301        * JavaScriptCore.exp:
30302        * kjs/identifier.cpp:
30303        (KJS::Identifier::addSlowCase):
30304        * kjs/identifier.h:
30305        (KJS::Identifier::Identifier::add):
30306
303072007-10-24  Lars Knoll  <lars@trolltech.com>
30308
30309        Reviewed by Simon.
30310
30311        some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's.
30312
30313        * bindings/qt/qt_instance.cpp:
30314        (KJS::Bindings::QtInstance::invokeMethod):
30315        * bindings/qt/qt_runtime.cpp:
30316        (KJS::Bindings::convertValueToQVariant):
30317        (KJS::Bindings::QtField::setValueToInstance):
30318
303192007-10-24  Oliver Hunt  <oliver@apple.com>
30320
30321        Reviewed by Darin.
30322
30323        Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider
30324
30325        * kjs/nodes.cpp:
30326        (KJS::lessThan):
30327        (KJS::lessThanEq):
30328        (KJS::LessNode::evaluate):
30329        (KJS::GreaterNode::evaluate):
30330        (KJS::LessEqNode::evaluate):
30331        (KJS::GreaterEqNode::evaluate):
30332        * kjs/operations.cpp:
30333        * kjs/operations.h:
30334
303352007-10-24  Eric Seidel  <eric@webkit.org>
30336
30337        Reviewed by darin.
30338
30339        * kjs/nodes.h:
30340        (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!)
30341
303422007-10-24  Darin Adler  <darin@apple.com>
30343
30344        Reviewed by Eric.
30345
30346        * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little
30347        Identifier ref/deref for what SunSpider claims is a 0.4% speedup.
30348
303492007-10-24  Darin Adler  <darin@apple.com>
30350
30351        Reviewed by Maciej.
30352
30353        - separate out the code to create a hash table the first time from the code
30354          to rehash
30355
30356        SunSpider claims this was a 0.7% speedup.
30357
30358        * kjs/property_map.cpp:
30359        (KJS::PropertyMap::expand): Changed to call either createTable or rehash.
30360        (KJS::PropertyMap::createTable): Added. For the case where we had no table.
30361        (KJS::PropertyMap::rehash): Removed code needed only in the case where we
30362        had no table.
30363        * kjs/property_map.h: Added createTable.
30364
303652007-10-24  Eric Seidel  <eric@webkit.org>
30366
30367        Reviewed by darin.
30368        
30369        Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers
30370        which can be represented by JSImmediate.
30371        
30372        SunSpider claims this was a 0.6% speedup.
30373
30374        * kjs/grammar.y:
30375        * kjs/nodes.cpp:
30376        (KJS::NumberNode::evaluate):
30377        (KJS::ImmediateNumberNode::evaluate):
30378        * kjs/nodes.h:
30379        (KJS::Node::):
30380        (KJS::ImmediateNumberNode::):
30381        * kjs/nodes2string.cpp:
30382        (ImmediateNumberNode::streamTo):
30383
303842007-10-24  Darin Adler  <darin@apple.com>
30385
30386        Reviewed by Maciej.
30387
30388        - http://bugs.webkit.org/show_bug.cgi?id=15657
30389          change static hash tables to use powers of two for speed
30390
30391        Seems to give 0.7% SunSpider speedup.
30392
30393        * kjs/create_hash_table: Updated to generate new format.
30394        * kjs/lookup.cpp:
30395        (KJS::keysMatch): Took out unneeded typecast.
30396        (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert.
30397        Replaced the modulus with a bit mask.
30398        (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed
30399        their hash -- saves a branch.
30400        (KJS::Lookup::find): Ditto.
30401        * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask.
30402
304032007-10-24  Maciej Stachowiak  <mjs@apple.com>
30404
30405        Reviewed by Darin.
30406        
30407        - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup
30408
30409        * kjs/nodes.cpp:
30410        (KJS::DoWhileNode::execute):
30411        (KJS::WhileNode::execute):
30412        (KJS::ForNode::execute):
30413        (KJS::ForInNode::execute):
30414        (KJS::SourceElementsNode::execute):
30415
304162007-10-23  Darin Adler  <darin@apple.com>
30417
30418        Reviewed by Maciej.
30419
30420        * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32):
30421        Changed an && to an & for a 1% gain in SunSpider.
30422
304232007-10-23  Oliver Hunt  <oliver@apple.com>
30424
30425        Reviewed by Maciej.
30426
30427        Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider.
30428
30429        * kjs/nodes.cpp:
30430        (KJS::MultNode::evaluate):
30431        (KJS::DivNode::evaluate):
30432        (KJS::ModNode::evaluate):
30433        (KJS::add):
30434        (KJS::sub):
30435        (KJS::AddNode::evaluate):
30436        (KJS::SubNode::evaluate):
30437        (KJS::valueForReadModifyAssignment):
30438        * kjs/operations.cpp:
30439        * kjs/operations.h:
30440
304412007-10-23  Oliver Hunt  <oliver@apple.com>
30442
30443        Reviewed by Maciej.
30444
30445        Separating all of the simple (eg. non-read-modify-write) binary operators
30446        into separate classes in preparation for further JS optimisations.
30447        
30448        Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
30449        no further work.
30450
30451        * JavaScriptCore.xcodeproj/project.pbxproj:
30452        * kjs/grammar.y:
30453        * kjs/nodes.cpp:
30454        (KJS::MultNode::evaluate):
30455        (KJS::DivNode::evaluate):
30456        (KJS::ModNode::evaluate):
30457        (KJS::AddNode::evaluate):
30458        (KJS::SubNode::evaluate):
30459        (KJS::LeftShiftNode::evaluate):
30460        (KJS::RightShiftNode::evaluate):
30461        (KJS::UnsignedRightShiftNode::evaluate):
30462        (KJS::LessNode::evaluate):
30463        (KJS::GreaterNode::evaluate):
30464        (KJS::LessEqNode::evaluate):
30465        (KJS::GreaterEqNode::evaluate):
30466        (KJS::InstanceOfNode::evaluate):
30467        (KJS::InNode::evaluate):
30468        (KJS::EqualNode::evaluate):
30469        (KJS::NotEqualNode::evaluate):
30470        (KJS::StrictEqualNode::evaluate):
30471        (KJS::NotStrictEqualNode::evaluate):
30472        (KJS::BitAndNode::evaluate):
30473        (KJS::BitXOrNode::evaluate):
30474        (KJS::BitOrNode::evaluate):
30475        (KJS::LogicalAndNode::evaluate):
30476        (KJS::LogicalOrNode::evaluate):
30477        * kjs/nodes.h:
30478        (KJS::MultNode::):
30479        (KJS::DivNode::):
30480        (KJS::ModNode::):
30481        (KJS::AddNode::):
30482        (KJS::SubNode::):
30483        (KJS::LeftShiftNode::):
30484        (KJS::RightShiftNode::):
30485        (KJS::UnsignedRightShiftNode::):
30486        (KJS::LessNode::):
30487        (KJS::GreaterNode::):
30488        (KJS::LessEqNode::):
30489        (KJS::GreaterEqNode::):
30490        (KJS::InstanceOfNode::):
30491        (KJS::InNode::):
30492        (KJS::EqualNode::):
30493        (KJS::NotEqualNode::):
30494        (KJS::StrictEqualNode::):
30495        (KJS::NotStrictEqualNode::):
30496        (KJS::BitAndNode::):
30497        (KJS::BitOrNode::):
30498        (KJS::BitXOrNode::):
30499        (KJS::LogicalAndNode::):
30500        (KJS::LogicalOrNode::):
30501        * kjs/nodes2string.cpp:
30502        (MultNode::streamTo):
30503        (DivNode::streamTo):
30504        (ModNode::streamTo):
30505        (AddNode::streamTo):
30506        (SubNode::streamTo):
30507        (LeftShiftNode::streamTo):
30508        (RightShiftNode::streamTo):
30509        (UnsignedRightShiftNode::streamTo):
30510        (LessNode::streamTo):
30511        (GreaterNode::streamTo):
30512        (LessEqNode::streamTo):
30513        (GreaterEqNode::streamTo):
30514        (InstanceOfNode::streamTo):
30515        (InNode::streamTo):
30516        (EqualNode::streamTo):
30517        (NotEqualNode::streamTo):
30518        (StrictEqualNode::streamTo):
30519        (NotStrictEqualNode::streamTo):
30520        (BitAndNode::streamTo):
30521        (BitXOrNode::streamTo):
30522        (BitOrNode::streamTo):
30523        (LogicalAndNode::streamTo):
30524
305252007-10-23  Darin Adler  <darin@apple.com>
30526
30527        Reviewed by Maciej.
30528
30529        - fix http://bugs.webkit.org/show_bug.cgi?id=15639
30530          fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)
30531
30532        Test: fast/js/math.html
30533
30534        * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
30535        Fix abs to look at the sign bit. Add a special case for values in the range
30536        between -0 and -1 and a special case for ceil and for -0 for floor.
30537
305382007-10-23  Darin Adler  <darin@apple.com>
30539
30540        Reviewed by Eric.
30541
30542        - streamline exception handling code for a >1% speed-up of SunSpider
30543
30544        * kjs/nodes.cpp: Changed macros to use functions for everything that's not
30545        part of normal execution. We'll take function call overhead when propagating
30546        an exception or out of memory.
30547        (KJS::createOutOfMemoryCompletion): Added.
30548        (KJS::substitute): Use append instead of the relatively inefficient + operator.
30549        (KJS::Node::rethrowException): Added.
30550        * kjs/nodes.h: Added rethrowException.
30551
305522007-10-22  Darin Adler  <darin@apple.com>
30553
30554        Reviewed by Maciej.
30555
30556        - fix http://bugs.webkit.org/show_bug.cgi?id=15636
30557          some JavaScriptCore regression tests are failing due to numeric conversion
30558
30559        This should restore correctness and make speed better too, restoring some
30560        of the optimization we lost in my last check-in.
30561
30562        * kjs/JSImmediate.h:
30563        (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
30564        I used in my patch yesterday.
30565        (KJS::JSImmediate::getTruncatedUInt32): Ditto.
30566
30567        * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
30568        * kjs/internal.cpp:
30569        (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
30570        a way to write this more efficiently for float.
30571        (KJS::NumberImp::getTruncatedInt32): Added.
30572        (KJS::NumberImp::getTruncatedUInt32): Added.
30573
30574        * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
30575        (KJS::JSValue::getUInt32):
30576        (KJS::JSValue::getTruncatedInt32): Added.
30577        (KJS::JSValue::getTruncatedUInt32): Added.
30578        (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
30579        (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
30580        * kjs/value.cpp:
30581        (KJS::JSCell::getTruncatedInt32): Added.
30582        (KJS::JSCell::getTruncatedUInt32): Added.
30583        (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
30584        (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
30585        had left in here.
30586        (KJS::JSValue::toUInt32SlowCase): Ditto.
30587        (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.
30588
30589        * JavaScriptCore.exp: Updated.
30590
305912007-10-22  Darin Adler  <darin@apple.com>
30592
30593        Reviewed by Geoff.
30594
30595        - fix http://bugs.webkit.org/show_bug.cgi?id=15632
30596          js1_5/Array/array-001.js test failing
30597
30598        One of the JavaScriptCore tests was failing; it failed because of
30599        my change to NumberImp::getUInt32. The incorrect code I copied was
30600        from JSImmediate::getUInt32, and was a pre-existing bug.
30601
30602        This patch fixes correctness, but will surely slow down SunSpider.
30603        We may be able to code this tighter and get the speed back.
30604
30605        * kjs/JSImmediate.h:
30606        (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
30607        reflect the fact that this function only returns true if the value is
30608        accurate (no fractional part, etc.). Changed code so that it returns
30609        false when the value has a fraction.
30610        (KJS::JSImmediate::getUInt32): Ditto.
30611
30612        * kjs/internal.cpp:
30613        (KJS::NumberImp::getInt32): Changed code so that it returns false when
30614        the value has a fraction. Restores the old behavior.
30615        (KJS::NumberImp::getUInt32): Ditto.
30616
30617        * kjs/value.h:
30618        (KJS::JSValue::getInt32): Updated for name change.
30619        (KJS::JSValue::getUInt32): Ditto.
30620        (KJS::JSValue::toInt32): Ditto.
30621        (KJS::JSValue::toUInt32): Ditto.
30622
306232007-10-22  Darin Adler  <darin@apple.com>
30624
30625        Reviewed by Brady.
30626
30627        - fix crash seen when running JavaScriptCore tests
30628
30629        * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
30630        Copy and paste error: I accidentally had code here that was
30631        making a copy of the HashMap -- that's illegal inside a mark
30632        function and was unnecessary. The other callsite was modifying
30633        the map as it iterated it, but this function is not.
30634
306352007-10-22  Maciej Stachowiak  <mjs@apple.com>
30636
30637        Reviewed by Oliver.
30638        
30639        - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
30640        http://bugs.webkit.org/show_bug.cgi?id=15627
30641
30642        * kjs/JSImmediate.h:
30643        (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
30644        registers since this is very slow.
30645
306462007-10-22  Darin Adler  <darin@apple.com>
30647
30648        Reviewed by Eric Seidel.
30649
30650        - http://bugs.webkit.org/show_bug.cgi?id=15617
30651          improve speed of integer conversions
30652
30653        Makes SunSpider 6% faster.
30654
30655        * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
30656        32-bit and 64-bit.
30657        * kjs/value.h:
30658        (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.
30659
30660        * kjs/internal.h: Added getInt32.
30661        * kjs/internal.cpp:
30662        (KJS::NumberImp::getInt32): Added.
30663        (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
30664        stolen from JSValue.
30665
30666        * kjs/value.h:
30667        (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
30668        inlined.
30669        (KJS::JSValue::getInt32): Added.
30670        (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
30671        to avoid converting from float to double.
30672        (KJS::JSValue::toInt32): Made inline, separated out the slow case.
30673        (KJS::JSValue::toUInt32): Ditto.
30674        * kjs/value.cpp:
30675        (KJS::JSCell::getInt32): Added.
30676        (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
30677        new getInt32. Added a faster case for in-range numbers.
30678        (KJS::JSValue::toUInt32SlowCase): Ditto.
30679        (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.
30680
30681        * JavaScriptCore.exp: Updated for changes.
30682
306832007-10-22  Adam Roben  <aroben@apple.com>
30684
30685        Windows build fix
30686
30687        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
30688        warning about implicit conversion to bool.
30689
306902007-10-22  Mark Rowe  <mrowe@apple.com>
30691
30692        Gtk build fix.
30693
30694        * kjs/array_instance.cpp:
30695
306962007-10-22  Darin Adler  <darin@apple.com>
30697
30698        Reviewed by Maciej.
30699
30700        - http://bugs.webkit.org/show_bug.cgi?id=15606
30701          make cut-off for sparse vs. dense arrays smarter for speed with large arrays
30702
30703        Makes the morph test in SunSpider 26% faster, and the overall
30704        benchmark 3% faster.
30705
30706        This also fixes some small problems we had with the distinction
30707        between nonexistent and undefined values in arrays.
30708
30709        * kjs/array_instance.h: Tweaked formatting and naming.
30710        * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
30711        (KJS::storageSize): Added. Computes the size of the storage given a vector length.
30712        (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
30713        (KJS::isDenseEnoughForVector): Added.
30714        (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
30715        (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
30716        (KJS::ArrayInstance::getItem): Updated for name changes.
30717        (KJS::ArrayInstance::lengthGetter): Ditto.
30718        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
30719        getOwnPropertySlot to share more code.
30720        (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
30721        (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
30722        array is dense enough. Also keep m_numValuesInVector up to date.
30723        (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
30724        up to date.
30725        (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
30726        for array indices with undefined values.
30727        (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
30728        simplified to only handle getting larger.
30729        (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
30730        zero out the unused part of the vector and to delete the map if it's no longer
30731        needed.
30732        (KJS::ArrayInstance::mark): Tweaked formatting.
30733        (KJS::compareByStringForQSort): Ditto.
30734        (KJS::ArrayInstance::sort): Ditto.
30735        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
30736        Ditto.
30737        (KJS::compareWithCompareFunctionForQSort): Ditto.
30738        (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
30739        undefined values into nonexistent values in some cases.
30740
30741        * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
30742        * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.
30743
30744        * JavaScriptCore.pri: Added array_instance.cpp.
30745        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
30746        * kjs/AllInOneFile.cpp: Ditto.
30747
307482007-10-22  Andrew Wellington  <proton@wiretapped.net>
30749
30750        Reviewed by Mark Rowe.
30751        
30752        Fix for local database support after r26879
30753        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set
30754
30755        * Configurations/JavaScriptCore.xcconfig:
30756
307572007-10-22  Simon Hausmann  <hausmann@kde.org>
30758
30759        Reviewed by Alp.
30760
30761        Build fix for the non-qmake builds.
30762
30763        * wtf/Platform.h: Default to enabling the database features unless
30764        otherwise specified. (similar to ENABLE_ICONDATABASE)
30765
307662007-10-22  Holger Freyther  <zecke@selfish.org>
30767
30768        Reviewed by Simon Hausmann <hausmann@kde.org>.
30769
30770        * Do not build testkjs as an application bundle. This is
30771        needed for run-javascriptcore-tests on OSX.
30772        * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
30773        * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
30774        as we do not have -rpath on OSX.
30775
30776        * kjs/testkjs.pro:
30777
307782007-10-21  Mark Rowe  <mrowe@apple.com>
30779
30780        Reviewed by Alp.
30781
30782        http://bugs.webkit.org/show_bug.cgi?id=15575
30783        Bug 15575: [GTK] Implement threading using GThread
30784
30785        * wtf/Platform.h: Do not enable pthreads for Gtk.
30786
307872007-10-21  Mark Rowe  <mrowe@apple.com>
30788
30789        Reviewed by Mitz.
30790
30791        Fix http://bugs.webkit.org/show_bug.cgi?id=15603
30792        Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript
30793
30794        * kjs/array_object.cpp:
30795        (KJS::freeStorage): Reinstate null-check that was removed in r26847.
30796
307972007-10-21  Darin Adler  <darin@apple.com>
30798
30799        - fix Windows build
30800
30801        * kjs/array_instance.h: Removed unused ExecState parameter.
30802        * kjs/array_object.cpp:
30803        (KJS::ArrayInstance::put): Ditto.
30804        (KJS::ArrayInstance::setLength): Ditto.
30805
308062007-10-21  Darin Adler  <darin@apple.com>
30807
30808        * kjs/array_object.cpp: (KJS::ArrayInstance::put):
30809        Add missing assignment that was causing regression test crash.
30810
308112007-10-21  Darin Adler  <darin@apple.com>
30812
30813        Reviewed by Maciej.
30814
30815        - http://bugs.webkit.org/show_bug.cgi?id=15585
30816          speed up sparse arrays by using a custom map
30817    
30818        Speeds up SunSpider by 10%.
30819
30820        * kjs/array_object.cpp:
30821        (allocateStorage): Leave room for an additional pointer.
30822        (reallocateStorage): Ditto.
30823        (freeStorage): Ditto.
30824        (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
30825        (ArrayInstance::getItem): Read values from the overflow map if present.
30826        Removed the check of length, since it slows down the common case.
30827        (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
30828        to the property map.
30829        (ArrayInstance::put): Write values into the overflow map as needed.
30830        Also create overflow map when needed.
30831        (ArrayInstance::deleteProperty): Remove values from the overflow map
30832        as appropriate.
30833        (ArrayInstance::getPropertyNames): Add a name for each identifier in
30834        the property map. This is extremely inefficient.
30835        (ArrayInstance::setLength): Remove any values in the overflow map
30836        that are past the new length, as we formerly did with the property map.
30837        (ArrayInstance::mark): Mark any values in the overflow map.
30838        (compareByStringForQSort): Removed unneeded undefined case, since
30839        compactForSorting guarantees we will have no undefined values.
30840        (compareWithCompareFunctionForQSort): Ditto.
30841        (ArrayInstance::compactForSorting): Copy all the values out of the
30842        overflow map and destroy it.
30843
30844        * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
30845        * kjs/property_map.cpp: Ditto.
30846
308472007-10-20  Darin Adler  <darin@apple.com>
30848
30849        Reviewed by Maciej.
30850
30851        - http://bugs.webkit.org/show_bug.cgi?id=15579
30852          stop churning identifier reference counts copying Completion objects
30853
30854        * kjs/completion.h: Replace the Identifier with an Identifier*.
30855        * kjs/nodes.cpp:
30856        (ForInNode::execute): Update for change to Completion constructor.
30857        (ContinueNode::execute): Ditto.
30858        (BreakNode::execute): Ditto.
30859
308602007-10-20  Mark Rowe  <mrowe@apple.com>
30861
30862        Reviewed by Alp.
30863
30864        Gtk changes needed to enable HTML 5 client-side database storage.
30865
30866        * wtf/Platform.h: Have Gtk use pthreads for now.
30867
308682007-10-20  Geoffrey Garen  <ggaren@apple.com>
30869
30870        Reviewed by Maciej Stachowiak.
30871
30872        Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
30873        Store gathered declaration nodes in the function body node.
30874        
30875        This means that you only have to gather the declaration nodes the first 
30876        time the function executes. Performance gain of 2.10% on SunSpider, 
30877        0.90% on command-line JS iBench.
30878
30879        * kjs/nodes.cpp: Split declaration stack initialization code off into 
30880        initializeDeclarationStacks().
30881        (FunctionBodyNode::FunctionBodyNode):
30882        (FunctionBodyNode::initializeDeclarationStacks):
30883        (FunctionBodyNode::processDeclarations):
30884
30885        * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 
30886        since the actual Vectors are now stored either on the stack or in the 
30887        function body node.
30888
308892007-10-19  Geoffrey Garen  <ggaren@apple.com>
30890
30891        Reviewed by Darin Adler.
30892        
30893        http://bugs.webkit.org/show_bug.cgi?id=15559
30894        Moved processDeclarations call into FunctionBodyNode::execute
30895
30896        To improve encapsulation, moved processDeclarations call into
30897        FunctionBodyNode::execute. Also marked processDeclarations 
30898        ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 
30899        on command-line JS iBench.
30900
30901        * kjs/function.cpp:
30902        (KJS::FunctionImp::callAsFunction):
30903        (KJS::GlobalFuncImp::callAsFunction):
30904        * kjs/function.h:
30905        * kjs/interpreter.cpp:
30906        (KJS::Interpreter::evaluate):
30907        * kjs/nodes.cpp:
30908        (FunctionBodyNode::execute):
30909        * kjs/nodes.h:
30910
309112007-10-19  Brady Eidson  <beidson@apple.com>
30912
30913        Reviewed by Sam
30914
30915        Queue -> Deque! and small style tweaks
30916
30917        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
30918        * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
30919        * wtf/Deque.h: Added.
30920        (WTF::DequeNode::DequeNode):
30921        (WTF::Deque::Deque):
30922        (WTF::Deque::~Deque):
30923        (WTF::Deque::size):
30924        (WTF::Deque::isEmpty):
30925        (WTF::Deque::append):
30926        (WTF::Deque::prepend):
30927        (WTF::Deque::first):
30928        (WTF::Deque::last):
30929        (WTF::Deque::removeFirst):
30930        (WTF::Deque::clear):
30931        * wtf/Queue.h: Removed.
30932
30933
309342007-10-19  Brady Eidson <beidson@apple.com>
30935
30936        Reviewed by Oliver
30937
30938        Added a simple LinkedList based Queue to wtf
30939        We can make a better, more sophisticated an efficient one later, but have
30940        needed one for some time, now!
30941
30942        * JavaScriptCore.xcodeproj/project.pbxproj:
30943        * wtf/Queue.h: Added.
30944        (WTF::QueueNode::QueueNode):
30945        (WTF::Queue::Queue):
30946        (WTF::Queue::~Queue):
30947        (WTF::Queue::size):
30948        (WTF::Queue::isEmpty):
30949        (WTF::Queue::append):
30950        (WTF::Queue::prepend):
30951        (WTF::Queue::first):
30952        (WTF::Queue::last):
30953        (WTF::Queue::removeFirst):
30954        (WTF::Queue::clear):
30955
309562007-10-19  Nikolas Zimmermann  <zimmermann@kde.org>
30957
30958        Reviewed by Anders.
30959
30960        Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.
30961
30962        * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)
30963
309642007-10-19  Simon Hausmann  <hausmann@kde.org>
30965
30966        Reviewed by Lars.
30967
30968        Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
30969        Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.
30970
30971        * wtf/ASCIICType.h:
30972        (WTF::isASCIIAlpha):
30973        (WTF::isASCIIAlphanumeric):
30974        (WTF::isASCIIDigit):
30975        (WTF::isASCIIHexDigit):
30976        (WTF::isASCIILower):
30977        (WTF::isASCIISpace):
30978        (WTF::toASCIILower):
30979        (WTF::toASCIIUpper):
30980
309812007-10-19  Simon Hausmann  <hausmann@kde.org>
30982
30983        Reviewed by Lars.
30984
30985        Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.
30986
30987        * kjs/config.h:
30988
309892007-10-18  Maciej Stachowiak  <mjs@apple.com>
30990
30991        Reviewed by Adam.
30992        
30993        - use __declspec(thread) for fast thread-local storage on Windows
30994        
30995        - 2.2% speedup on sunspider (on Windows)
30996        - 7% speedup on the string section
30997        - 6% speedup on JS iBench
30998        
30999        - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
31000        - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
31001        
31002        
31003        * wtf/FastMalloc.cpp:
31004        (WTF::getThreadHeap):
31005        (WTF::setThreadHeap):
31006        (WTF::TCMalloc_ThreadCache::GetCache):
31007        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
31008        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
31009
310102007-10-17  Darin Adler  <darin@apple.com>
31011
31012        Reviewed by Mark Rowe.
31013
31014        - fix http://bugs.webkit.org/show_bug.cgi?id=15543
31015          <rdar://problem/5545639> REGRESSION (r26697):
31016          GoogleDocs: Can't create new documents or open existing ones
31017
31018        Test: fast/js/regexp-non-character.html
31019
31020        * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
31021        in the \u sequences -- not needed and actively harmful.
31022
310232007-10-17  Anders Carlsson  <andersca@apple.com>
31024
31025        Reviewed by Oliver.
31026
31027        * wtf/Platform.h:
31028        #define USE_PTHREADS on Mac.
31029
310302007-10-17  Geoffrey Garen  <ggaren@apple.com>
31031
31032        Reviewed by Darin Adler.
31033        
31034        Merged DeclaredFunctionImp into FunctionImp (the base class) because 
31035        the distinction between the two was unused.
31036        
31037        Removed codeType() from FunctionImp because FunctionImp and its 
31038        subclasses all returned FunctionCode, so it was unused, practically 
31039        speaking.
31040        
31041        Removed a different codeType() from GlobalFuncImp because it was unused.
31042        (Perhaps it was vestigial from a time when GlobalFuncImp used to 
31043        inherit from FunctionImp.)
31044
31045        * bindings/runtime_method.cpp:
31046        * bindings/runtime_method.h:
31047        * kjs/function.cpp:
31048        (KJS::FunctionImp::FunctionImp):
31049        (KJS::FunctionImp::callAsFunction):
31050        (KJS::FunctionImp::construct):
31051        (KJS::FunctionImp::execute):
31052        (KJS::FunctionImp::processVarDecls):
31053        * kjs/function.h:
31054        (KJS::FunctionImp::implementsConstruct):
31055        (KJS::FunctionImp::scope):
31056        * kjs/function_object.cpp:
31057        (FunctionProtoFunc::callAsFunction):
31058        (FunctionObjectImp::construct):
31059        * kjs/nodes.cpp:
31060        (FuncDeclNode::processFuncDecl):
31061        (FuncExprNode::evaluate):
31062
310632007-10-17  Adam Roben  <aroben@apple.com>
31064
31065        Windows build fix part 2.
31066
31067        Fix was by Darin, reviewed by Anders and Adam.
31068
31069        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
31070        FastMallocPCRE.cpp to the project, and let Visual Studio have its way
31071        with the post-build step.
31072        * pcre/pcre.h: Don't DLL export the entry points just because this
31073        is Win32 -- this is an internal copy of PCRE and should be private.
31074        * pcre/pcre_compile.c: Fix an uninitialized variable warning --
31075        there's no real problem but it's better to quiet the compiler by
31076        tweaking the code slightly than turn off the warning entirely.
31077
310782007-10-17  Adam Roben  <aroben@apple.com>
31079
31080        Windows build fix.
31081
31082        Reviewed by Anders.
31083
31084        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
31085        some mismatched signed/unsigned comparison warnings.
31086        * pcre/pcre_exec.c:
31087        (match): #if-out some labels that don't seem to exist.
31088
310892007-10-17  Mark Rowe  <mrowe@apple.com>
31090
31091        Gtk build fix.
31092
31093        * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
31094        * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
31095        is currently unavailable for UTF-16.
31096
310972007-10-16  Darin Adler  <darin@apple.com>
31098
31099        Reviewed by Geoff.
31100
31101        - merged PCRE changes between 6.4 and 6.5
31102
31103        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
31104        * JavaScriptCore.xcodeproj/project.pbxproj:
31105        Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
31106        pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
31107        pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.
31108
31109        * pcre/AUTHORS:
31110        * pcre/LICENCE:
31111        * pcre/MERGING:
31112        * pcre/dftables.c:
31113        * pcre/pcre-config.h:
31114        * pcre/pcre.h:
31115        * pcre/pcre.pri:
31116        * pcre/pcre_compile.c:
31117        * pcre/pcre_exec.c:
31118        * pcre/pcre_fullinfo.c:
31119        * pcre/pcre_get.c:
31120        * pcre/pcre_internal.h:
31121        * pcre/pcre_maketables.c:
31122        * pcre/pcre_ord2utf8.c:
31123        * pcre/pcre_tables.c:
31124        * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
31125        * pcre/pcre_xclass.c:
31126        * pcre/ucp.h:
31127        * pcre/ucpinternal.h:
31128        * pcre/ucptable.c:
31129        Updated with new versions from the PCRE 6.5 release, merged with changes.
31130
31131        * pcre/pcre_config.c: Removed.
31132        * pcre/pcre_globals.c: Removed.
31133        * pcre/pcre_info.c: Removed.
31134        * pcre/pcre_printint.src: Removed.
31135        * pcre/pcre_refcount.c: Removed.
31136        * pcre/pcre_study.c: Removed.
31137        * pcre/pcre_try_flipped.c: Removed.
31138        * pcre/pcre_ucp_findchar.c: Removed.
31139        * pcre/pcre_version.c: Removed.
31140
311412007-10-16  Geoffrey Garen  <ggaren@apple.com>
31142
31143        Reviewed by Darin Adler.
31144
31145        Removed KJS_VERBOSE because it was getting in the way of readability, 
31146        and the messages didn't seem very helpful.
31147
31148        * kjs/function.cpp:
31149        (KJS::FunctionImp::callAsFunction):
31150        (KJS::FunctionImp::passInParameters):
31151        * kjs/lookup.h:
31152        (KJS::lookupPut):
31153        * kjs/object.cpp:
31154        (KJS::JSObject::put):
31155        * kjs/value.h:
31156
311572007-10-16  Geoffrey Garen  <ggaren@apple.com>
31158
31159        Reviewed by Darin Adler.
31160        
31161        Removed the Parameter class because it was a redundant wrapper around 
31162        Identifier.
31163
31164        * kjs/function.cpp:
31165        (KJS::FunctionImp::passInParameters):
31166        (KJS::FunctionImp::getParameterName):
31167        * kjs/nodes.cpp:
31168        (FunctionBodyNode::addParam):
31169        * kjs/nodes.h:
31170        (KJS::FunctionBodyNode::):
31171
311722007-10-16  Geoffrey Garen  <ggaren@apple.com>
31173
31174        Reviewed by Darin Adler.
31175        
31176        Global replace of assert with ASSERT.
31177
311782007-10-16  Adam Roben  <aroben@apple.com>
31179
31180        Make testkjs not delay-load WebKit
31181
31182        Soon, delay-loading WebKit will be impossible (because we will be
31183        using __declspec(thread) for thread-local storage). This change
31184        prepares testkjs for the future.
31185
31186        Reviewed by Sam.
31187
31188        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
31189        added FindSafari.
31190        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
31191        WebKitInitializer, don't delay-load WebKit.
31192        * kjs/testkjs.cpp: Don't use WebKitInitializer.
31193
311942007-10-16  Adam Roben  <aroben@apple.com>
31195
31196        Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration
31197
31198        Reviewed by Kevin McCullough.
31199
31200        * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
31201        * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
31202        * JavaScriptCore.vcproj/release.vsprops: Ditto.
31203        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
31204        WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
31205        in the name of icuuc36[_debug].dll.
31206
312072007-10-16  Geoffrey Garen  <ggaren@apple.com>
31208
31209        Reviewed by Maciej Stachowiak.
31210        
31211        Re-structured variable and function declaration code.
31212        
31213        Command-line JS iBench shows no regression.
31214        
31215        Here are the changes:
31216
31217        1. Function declarations are now processed at the same time as var 
31218        declarations -- namely, immediately upon entry to an execution context. 
31219        This does not match Firefox, which waits to process a function
31220        declaration until the declaration's containing block executes, but it 
31221        does match IE and the ECMA spec. (10.1.3 states that var and function 
31222        declarations should be processed at the same time -- namely, "On 
31223        entering an execution context." 12.2 states that "A Block does not 
31224        define a new execution scope.")
31225
31226        2. Declaration processing proceeds iteratively now, rather than 
31227        recursively, storing the nodes is finds in stacks. This will later 
31228        facilitate an optimization to hold on to the gathered declaration nodes, 
31229        rather than re-fetching them in every function call. 
31230        [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31231
31232        Modified these tests because they expected the incorrect Mozilla 
31233        behavior described above:
31234
31235        * tests/mozilla/ecma_3/Function/scope-001.js:
31236        * tests/mozilla/js1_5/Scope/regress-184107.js:
31237
312382007-10-16  Darin Adler  <darin@apple.com>
31239
31240        - try to fix the GTK build
31241
31242        * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.
31243
312442007-10-16  Darin Adler  <darin@apple.com>
31245
31246        - try to fix the Windows build
31247
31248        * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
31249        in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.
31250
312512007-10-16  Darin Adler  <darin@apple.com>
31252
31253        - try to fix the GTK build
31254
31255        * kjs/ustring.cpp: Include ASCIICType.h.
31256
312572007-10-16  Darin Adler  <darin@apple.com>
31258
31259        Reviewed by Maciej and Geoff (and looked over by Eric).
31260
31261        - http://bugs.webkit.org/show_bug.cgi?id=15519
31262          eliminate use of <ctype.h> for processing ASCII
31263
31264        * wtf/ASCIICType.h: Added.
31265        * wtf/DisallowCType.h: Added.
31266
31267        * kjs/config.h: Include DisallowCType.h.
31268
31269        * kjs/date_object.cpp:
31270        (KJS::skipSpacesAndComments):
31271        (KJS::findMonth):
31272        (KJS::parseDate):
31273        * kjs/function.cpp:
31274        (KJS::decode):
31275        * kjs/ustring.cpp:
31276        (KJS::UString::toDouble):
31277        Use ASCIICType.h functions instead of ctype.h ones.
31278
312792007-10-14  Maciej Stachowiak  <mjs@apple.com>
31280
31281        Reviewed by Darin.
31282
31283        - fixes for "New JavaScript benchmark"
31284        http://bugs.webkit.org/show_bug.cgi?id=15515
31285        
31286        * kjs/testkjs.cpp:
31287        (TestFunctionImp::callAsFunction): Implement "load" for compatibility
31288        with SpiderMonkey.
31289        (TestFunctionImp::): ditto
31290        (doIt): ditto
31291        (kjsmain): Drop useless --> from output.
31292
312932007-10-15  Geoffrey Garen  <ggaren@apple.com>
31294
31295        Removed unnecessary #include.
31296
31297        * API/JSObjectRef.cpp:
31298
312992007-10-15  Geoffrey Garen  <ggaren@apple.com>
31300
31301        Double-reverse build fix. My tree was out of date.
31302
31303        * kjs/nodes.cpp:
31304        (NumberNode::evaluate):
31305
313062007-10-15  Geoffrey Garen  <ggaren@apple.com>
31307
31308        Build fix.
31309
31310        * kjs/nodes.cpp:
31311        (NumberNode::evaluate):
31312
313132007-10-15  Geoffrey Garen  <ggaren@apple.com>
31314
31315        Reviewed by Darin Adler.
31316        
31317        Removed surprising self-named "hack" that made nested functions 
31318        available as named properties of their containing functions, and placed
31319        containing function objects in the scope chains of nested functions.
31320        
31321        There were a few reasons to remove this "hack:"
31322
31323        1. It contradicted FF, IE, and the ECMA spec.
31324
31325        2. It incurred a performance penalty, since merely parsing a function 
31326        required parsing its body for nested functions (and so on).
31327
31328        3. SVN history contains no explanation for why it was added. It was just
31329        legacy code in a large merge a long, long time ago.
31330
31331        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31332
31333        * kjs/nodes.cpp:
31334        (FuncDeclNode::processFuncDecl):
31335
313362007-10-15  Geoffrey Garen  <ggaren@apple.com>
31337
31338        Reviewed by Darin Adler.
31339        
31340        Removed the concept of AnonymousCode. It was unused, and it doesn't
31341        exist in the ECMA spec.
31342        
31343        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31344
31345        * kjs/Context.cpp:
31346        (KJS::Context::Context):
31347        * kjs/function.h:
31348        * kjs/nodes.cpp:
31349        (ReturnNode::execute):
31350
313512007-10-15  Geoffrey Garen  <ggaren@apple.com>
31352
31353        Reviewed by Darin Adler.
31354        
31355        Made function parameters DontDelete. This matches FF and the vague
31356        description in ECMA 10.1.3. It's also required in order to make
31357        symbol table based lookup of function parameters valid. (If the 
31358        parameters aren't DontDelete, you can't guarantee that you'll find
31359        them later in the symbol table.)
31360
31361        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31362
31363        * kjs/function.cpp:
31364        (KJS::FunctionImp::passInParameters):
31365
313662007-10-15  Geoffrey Garen  <ggaren@apple.com>
31367
31368        Reviewed by Maciej Stachowiak.
31369        
31370        Some Vector optimizations. These are especially important when using
31371        Vector as a stack for implementing recursive algorithms iteratively.
31372        
31373        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31374
31375        1. Added shrink(), which is a version of resize() that you can call
31376        to save a branch / improve code generation and inlining when you know 
31377        that the vector is not getting bigger.
31378        
31379        2. Changed subclassing relationship in VectorBuffer to remove a call to
31380        fastFree() in the destructor for the inlineCapacity != 0 template
31381        specialization. This brings inline Vectors one step closer to true
31382        stack-allocated arrays.
31383        
31384        Also changed abort() to CRASH(), since the latter works better.
31385
31386        * wtf/Vector.h:
31387        (WTF::VectorBufferBase::allocateBuffer):
31388        (WTF::VectorBufferBase::deallocateBuffer):
31389        (WTF::VectorBufferBase::VectorBufferBase):
31390        (WTF::VectorBufferBase::~VectorBufferBase):
31391        (WTF::):
31392        (WTF::VectorBuffer::VectorBuffer):
31393        (WTF::VectorBuffer::~VectorBuffer):
31394        (WTF::VectorBuffer::deallocateBuffer):
31395        (WTF::VectorBuffer::releaseBuffer):
31396        (WTF::Vector::clear):
31397        (WTF::Vector::removeLast):
31398        (WTF::::operator):
31399        (WTF::::fill):
31400        (WTF::::shrink):
31401
314022007-10-12  Geoffrey Garen  <ggaren@apple.com>
31403
31404        Reviewed by Maciej Stachowiak.
31405        
31406        Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
31407        Iteration statements sometimes incorrectly evaluate to the empty value 
31408        (KDE r670547). 
31409        
31410        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
31411        
31412        This patch is a merge of KDE r670547, with substantial modification 
31413        for performance.
31414        
31415        It fixes do-while statements to evaluate to a value. (They used
31416        to evaluate to the empty value in all cases.) 
31417
31418        It also fixes SourceElementsNode to maintain the value of abnormal 
31419        completions like "break" and "continue."
31420        
31421        It also re-works the main execution loop in SourceElementsNode so that
31422        it (1) makes a little more sense and (2) avoids unnecessary work. This 
31423        is a .28% speedup on command-line JS iBench.
31424
31425        * kjs/nodes.cpp:
31426        (DoWhileNode::execute):
31427        (SourceElementsNode::execute):
31428
314292007-10-15  Simon Hausmann  <hausmann@kde.org>
31430
31431        Reviewed by Lars.
31432
31433        Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.
31434
31435        * wtf/HashTraits.h:
31436
314372007-10-5  Kevin Ollivier  <kevino@theolliviers.com>
31438 
31439        Reviewed by Adam.
31440        
31441        Add support for MSVC7, and fix cases where PLATFORM(WIN) should
31442        be PLATFORM(WIN_OS) for other ports building on Windows.
31443 
31444        * kjs/DateMath.cpp:
31445        (KJS::getDSTOffsetSimple):
31446        * kjs/JSImmediate.h:
31447        * wtf/Assertions.cpp:
31448        * wtf/Assertions.h:
31449        * wtf/Platform.h:
31450        * wtf/StringExtras.h:
31451        (snprintf):
31452        (vsnprintf):
31453
314542007-10-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
31455
31456        Reviewed by Darin.
31457
31458        Adds NegateNode optimization from KJS. The relevant revision in KDE
31459        is 666736.
31460
31461        * kjs/grammar.y:
31462        * kjs/nodes.cpp:
31463        (NumberNode::evaluate):
31464        * kjs/nodes.h:
31465        (KJS::Node::):
31466        (KJS::NumberNode::):
31467        * kjs/nodes2string.cpp:
31468        (NumberNode::streamTo):
31469
314702007-10-14  Jason Foreman  <jason@threeve.org>
31471
31472        Reviewed by Maciej.
31473
31474        Fix http://bugs.webkit.org/show_bug.cgi?id=15145
31475        
31476        Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
31477        that the property n < intPow10(p) is maintained.
31478
31479        * kjs/number_object.cpp:
31480        (NumberProtoFunc::callAsFunction):
31481
31482== Rolled over to ChangeLog-2007-10-14 ==
31483