initial import
[vuplus_webkit] / Source / JavaScriptCore / ChangeLog-2008-08-10
1 2008-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
14 2008-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
31 2008-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
41 2008-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
57 2008-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
72 2008-08-08  Matt Lilek  <webkit@mattlilek.com>
73
74         Not reviewed, build fix.
75
76         * JavaScriptCore.exp:
77
78 2008-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
106 2008-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
113 2008-08-06  Tor Arne Vestbø  <tavestbo@trolltech.com>
114
115         Revert change 35595.
116
117         * wtf/RetainPtr.h:
118
119 2008-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
125 2008-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
131 2008-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
144 2008-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
210 2008-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
222 2008-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
234 2008-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
243 2008-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
254 2008-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
284 2008-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
293 2008-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
302 2008-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
311 2008-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
320 2008-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
329 2008-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
421 2008-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
429 2008-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
463 2008-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
476 2008-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
488 2008-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
506 2008-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
528 2008-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
537 2008-07-30  Anders Carlsson  <andersca@apple.com>
538         
539         Add WebKitAvailability.h forwarding header.
540         
541         * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added.
542
543 2008-07-30  Anders Carlsson  <andersca@apple.com>
544
545         Fix the else.
546         
547         * API/WebKitAvailability.h:
548
549 2008-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
557 2008-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
564 2008-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
578 2008-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
593 2008-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
601 2008-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
644 2008-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
663 2008-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
675 2008-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
681 2008-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
694 2008-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
702 2008-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
738 2008-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
770 2008-07-28  Geoffrey Garen  <ggaren@apple.com>
771
772         Reviewed by Sam Weinig.
773
774         Renamed "ConstructTypeNative" => "ConstructTypeHost".
775         
776 2008-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
782 2008-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
790 2008-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
826 2008-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
837 2008-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
844 2008-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
851 2008-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
889 2008-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
896 2008-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
907 2008-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
935 2008-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
957 2008-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
969 2008-07-23  Alp Toker  <alp@nuanti.com>
970
971         Build fix after r35293: Add API/ to the include path.
972
973         * GNUmakefile.am:
974
975 2008-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
995 2008-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
1033 2008-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
1048 2008-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
1058 2008-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
1105 2008-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
1112 2008-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         
1135 2008-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
1145 2008-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
1154 2008-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
1164 2008-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
1176 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
1177
1178         Windows build fix.
1179
1180         * kjs/JSGlobalObjectFunctions.cpp:
1181         (KJS::isStrWhiteSpace):
1182
1183 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
1184
1185         Windows build fix.
1186
1187         * kjs/nodes.h:
1188         (KJS::ThrowableExpressionData::ThrowableExpressionData):
1189
1190 2008-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
1325 2008-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
1335 2008-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
1343 2008-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
1355 2008-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
1372 2008-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
1381 2008-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
1404 2008-07-17  Steve Falkenburg  <sfalken@apple.com>
1405
1406         Build fix.
1407         
1408         * kjs/InternalFunction.cpp:
1409
1410 2008-07-17  Sam Weinig  <sam@webkit.org>
1411
1412         Roll out r35199 as it is causing failures on the PPC build.
1413
1414 2008-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
1423 2008-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
1440 2008-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
1452 2008-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
1464 2008-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
1476 2008-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
1485 2008-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
1497 2008-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
1509 2008-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
1523 2008-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
1568 2008-07-16  Ada Chan  <adachan@apple.com>
1569
1570         Fixed build.
1571
1572         * kjs/JSGlobalObject.cpp:
1573
1574 2008-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
1587 2008-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
1609 2008-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
1622 2008-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
1634 2008-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
1648 2008-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
1660 2008-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
1683 2008-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
1696 2008-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
1706 2008-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
1713 2008-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
1720 2008-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
1741 2008-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
1749 2008-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
1855 2008-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
1861 2008-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
1870 2008-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
1886 2008-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
1897 2008-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
1913 2008-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
1921 2008-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
1929 2008-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
1945 2008-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
1968 2008-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
1987 2008-07-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
1988
1989         Gtk build fix.
1990
1991         * GNUmakefile.am: Add HeavyProfile.cpp
1992
1993 2008-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
2002 2008-07-09  Darin Adler  <darin@apple.com>
2003
2004         * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
2005
2006 2008-07-09  Kevin Ollivier  <kevino@theolliviers.com>
2007
2008         wx biuld fix. Add HeavyProfile.cpp to build files.
2009
2010         * JavaScriptCoreSources.bkl:
2011
2012 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
2013
2014         - Windows build fix.
2015
2016         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2017
2018 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
2019
2020         - Build fix.
2021
2022         * profiler/HeavyProfile.cpp:
2023         (KJS::HeavyProfile::mergeProfiles):
2024
2025 2008-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
2074 2008-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
2081 2008-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
2088 2008-07-08  Simon Hausmann  <hausmann@webkit.org>
2089
2090         Fix the Qt build, add ProfileGenerator.cpp to the build.
2091
2092         * JavaScriptCore.pri:
2093
2094 2008-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
2109 2008-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
2125 2008-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
2132 2008-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
2139 2008-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
2194 2008-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
2202 2008-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
2210 2008-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
2218 2008-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
2241 2008-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
2251 2008-07-05  Sam Weinig  <sam@webkit.org>
2252
2253         Fix build on case-sensitive build systems.
2254
2255         * kjs/IndexToNameMap.cpp:
2256
2257 2008-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
2272 2008-07-05  Sam Weinig  <sam@webkit.org>
2273
2274         Fix non-AllInOne build.
2275
2276         * kjs/JSGlobalObject.cpp:
2277
2278 2008-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
2313 2008-07-04  Sam Weinig  <sam@webkit.org>
2314
2315         Really fix the mac build.
2316
2317         * JavaScriptCore.xcodeproj/project.pbxproj:
2318
2319 2008-07-04  Sam Weinig  <sam@webkit.org>
2320
2321         Fix mac build.
2322
2323         * JavaScriptCore.xcodeproj/project.pbxproj:
2324
2325 2008-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
2334 2008-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
2356 2008-07-04  Simon Hausmann  <hausmann@webkit.org>
2357
2358         Fix the Wx build, added TreeProfile.cpp to the build.
2359
2360         * JavaScriptCoreSources.bkl:
2361
2362 2008-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
2372 2008-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
2384 2008-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
2397 2008-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
2408 2008-07-03  Dan Bernstein  <mitz@apple.com>
2409
2410         - Windows build fix
2411
2412         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
2413
2414 2008-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
2423 2008-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
2432 2008-07-03  Simon Hausmann  <hausmann@webkit.org>
2433
2434         Fix the Qt build, added TreeProfile to the build.
2435
2436         * JavaScriptCore.pri:
2437
2438 2008-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
2464 2008-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
2483 2008-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
2500 2008-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
2508 2008-07-02  Alp Toker  <alp@nuanti.com>
2509
2510         Build fix for r34960. Add TreeProfile.cpp to build.
2511
2512         * GNUmakefile.am:
2513
2514 2008-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
2524 2008-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
2543 2008-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
2557 2008-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
2578 2008-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
2594 2008-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
2604 2008-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
2610 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
2611
2612         Non-AllInOne build fix.
2613
2614         * kjs/interpreter.cpp: Include JSLock.h.
2615
2616 2008-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
2768 2008-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
2793 2008-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
2822 2008-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
2831 2008-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
2844 2008-07-01  Christian Dywan  <christian@twotoasts.de>
2845
2846         Gtk+ build fix.
2847
2848         * kjs/list.cpp: Include "JSCell.h"
2849
2850 2008-07-01  Kevin McCullough  <kmccullough@apple.com>
2851
2852         Build fix.
2853
2854         * JavaScriptCore.xcodeproj/project.pbxproj:
2855
2856 2008-07-01  Dan Bernstein  <mitz@apple.com>
2857
2858         Reviewed by Anders Carlsson.
2859
2860         - Mac release build fix
2861
2862         * JavaScriptCore.exp:
2863
2864 2008-07-01  Sam Weinig  <sam@webkit.org>
2865
2866         Try and fix mac builds.
2867
2868         * JavaScriptCore.exp:
2869
2870 2008-07-01  Sam Weinig  <sam@webkit.org>
2871
2872         Fix non-AllInOne builds.
2873
2874         * kjs/DateMath.cpp:
2875
2876 2008-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
2903 2008-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
2911 2008-07-01  Simon Hausmann  <hausmann@webkit.org>
2912
2913         Build fix, include OwnPtr.h.
2914
2915         * kjs/RegExpConstructor.h:
2916
2917 2008-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
2930 2008-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         
2940 2008-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
2957 2008-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
2971 2008-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
2995 2008-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
3010 2008-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
3030 2008-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
3054 2008-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
3075 2008-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
3093 2008-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
3102 2008-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
3124 2008-06-29  Sam Weinig  <sam@webkit.org>
3125
3126         Fix non-AllInOne builds.
3127
3128         * kjs/JSObject.cpp:
3129         * kjs/JSValue.cpp:
3130
3131 2008-06-29  Sam Weinig  <sam@webkit.org>
3132
3133         Build fix for Qt.
3134
3135         * kjs/DateMath.cpp:
3136         * kjs/DatePrototype.cpp:
3137
3138 2008-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
3177 2008-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
3185 2008-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
3221 2008-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
3231 2008-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
3250 2008-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
3292 2008-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
3302 2008-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
3309 2008-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
3333 2008-06-28  Sam Weinig  <sam@webkit.org>
3334
3335         Fix non-AllInOne builds.
3336
3337         * kjs/StringConstructor.cpp:
3338
3339 2008-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
3365 2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
3366
3367         Gtk build fix: JSVariableObject is now part of AllInOne
3368
3369         * GNUmakefile.am:
3370
3371 2008-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
3396 2008-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
3404 2008-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
3412 2008-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
3430 2008-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
3478 2008-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
3543 2008-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
3572 2008-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
3579 2008-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
3587 2008-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
3597 2008-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
3631 2008-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
3686 2008-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
3694 2008-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
3706 2008-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
3795 2008-06-26  Mark Rowe  <mrowe@apple.com>
3796
3797         Speculative fix for the Windows build.
3798
3799         * kjs/JSImmediate.cpp:
3800
3801 2008-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
3814 2008-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
3963 2008-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
4007 2008-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
4020 2008-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
4044 2008-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
4056 2008-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
4070 2008-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
4231 2008-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
4242 2008-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
4261 2008-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
4286 2008-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
4298 2008-06-24  Steve Falkenburg  <sfalken@apple.com>
4299
4300         Build fix.
4301
4302         * kjs/nodes.cpp:
4303
4304 2008-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
4318 2008-06-24  Simon Hausmann  <hausmann@webkit.org>
4319
4320         Fix the Qt build, added missing include.
4321
4322         * kjs/PropertySlot.cpp:
4323
4324 2008-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
4339 2008-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
4353 2008-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
4364 2008-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
4384 2008-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
4394 2008-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
4798 2008-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
4812 2008-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
4821 2008-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
4831 2008-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
4839 2008-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
4847 2008-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
4857 2008-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
4866 2008-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
4889 2008-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
4898 2008-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
4916 2008-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
4924 2008-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
4932 2008-06-20  Kevin McCullough  <kmccullough@apple.com>
4933
4934         Just giving credit.
4935
4936         * ChangeLog:
4937
4938 2008-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
4951 2008-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
4996 2008-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
5005 2008-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
5013 2008-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
5050 2008-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
5057 2008-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
5070 2008-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
5079 2008-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
5090 2008-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
5101 2008-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
5456 2008-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
5470 2008-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
5479 2008-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
5509 2008-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
5517 2008-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
5526 2008-06-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
5527
5528         Reviewed by Oliver.
5529
5530         Sort includes alphabetically.
5531
5532         * kjs/nodes.cpp:
5533
5534 2008-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
5555 2008-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
5571 2008-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
5582 2008-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
5590 2008-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
5605 2008-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
5619 2008-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
5749 2008-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
5767 2008-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
5782 2008-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
5791 2008-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
5821 2008-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
5842 2008-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
5869 2008-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
5883 2008-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
5904 2008-06-16  Jan Michael Alonzo  <jmalonzo@webkit.org>
5905
5906         Gtk build fix
5907
5908         * GNUmakefile.am:
5909
5910 2008-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
6194 2008-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
6269 2008-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
6348 2008-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
6567 2008-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
6729 2008-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
6758 2008-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
6766 2008-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
6792 2008-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
6801 2008-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
6812 2008-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
6821 2008-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
6907 2008-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
6933 2008-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
6949 2008-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
6977 2008-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
6996 2008-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
7014 2008-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
7022 2008-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
7040 2008-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
7056 2008-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
7085 2008-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
7099 2008-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
7132 2008-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
7202 2008-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
7229 2008-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
7243 2008-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
7260 2008-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
7280 2008-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
7374 2008-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
7398 2008-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
7404 2008-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
7418 2008-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
7425 2008-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
7436 2008-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
7459 2008-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
7480 2008-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
7491 2008-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
7501 2008-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
7511 2008-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
7518 2008-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
7527 2008-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
7533 2008-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
7630 2008-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
7648 2008-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
7669 2008-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
7680 2008-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
7689 2008-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
7699 2008-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
7728 2008-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
7738 2008-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         
7748 2008-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
7760 2008-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
7767 2008-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
7780 2008-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
7790 2008-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
7806 2008-06-04  Sam Weinig  <sam@webkit.org>
7807
7808         Reviewed by Maciej Stachowiak.
7809
7810         Big cleanup of formatting and whitespace.
7811
7812 2008-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
7825 2008-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
7886 2008-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
7918 2008-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
7927 2008-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
7936 2008-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
8119 2008-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
8147 2008-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
8157 2008-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
8164 2008-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
8172 2008-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
8209 2008-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
8215 2008-06-02  Kevin McCullough  <kmccullough@apple.com>
8216
8217         Took out accidental confilct lines I checked in.
8218
8219         * ChangeLog:
8220
8221 2008-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
8260 2008-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
8273 2008-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
8283 2008-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
8289 2008-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
8302 2008-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
8342 2008-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
8361 2008-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
8383 2008-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
8402 2008-05-29  Steve Falkenburg  <sfalken@apple.com>
8403
8404         Build fix.
8405
8406         * kjs/array_instance.cpp:
8407
8408 2008-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
8422 2008-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
8434 2008-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
8447 2008-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
8465 2008-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
8476 2008-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
8487 2008-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
8496 2008-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
8503 2008-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
8523 2008-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
8544 2008-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
8557 2008-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
8566 2008-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
8575 2008-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
8588 2008-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
8596 2008-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
8614 2008-05-26  Stephanie Lewis  <slewis@apple.com>
8615
8616         Windows build fix. 
8617
8618         * kjs/testkjs.cpp:
8619
8620 2008-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
8629 2008-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
8648 2008-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
8660 2008-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
8666 2008-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
8694 2008-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
8701 2008-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
8711 2008-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
8734 2008-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
8747 2008-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
8791 2008-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
8808 2008-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
8827 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
8828
8829         Rolled out r34073 because it caused lots of layout test crashes.
8830
8831 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
8832
8833         Rolled out r34085 because it measured as a 7.6% performance regression.
8834
8835 2008-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
8842 2008-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
8861 2008-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
8874 2008-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
8882 2008-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
8896 2008-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
8911 2008-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
8939 2008-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
8945 2008-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
8963 2008-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
8976 2008-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
8986 2008-05-22  Alp Toker  <alp@nuanti.com>
8987
8988         GTK+ build fix. Add JavaScriptCore/profiler to include path.
8989
8990         * GNUmakefile.am:
8991
8992 2008-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
9005 2008-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
9016 2008-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
9036 2008-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
9046 2008-05-22  Kevin McCullough  <kmccullough@apple.com>
9047
9048         Build fix.
9049
9050         * VM/Machine.cpp:
9051         (KJS::callEval):
9052
9053 2008-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
9101 2008-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
9117 2008-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
9135 2008-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
9147 2008-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
9156 2008-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
9165 2008-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
9175 2008-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
9188 2008-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
9198 2008-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
9244 2008-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
9256 2008-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
9277 2008-05-21  Kevin McCullough  <kmccullough@apple.com>
9278
9279         Sadness :(
9280
9281         * kjs/config.h:
9282
9283 2008-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
9333 2008-05-21  Alp Toker  <alp@nuanti.com>
9334
9335         GTK+/UNIX testkjs build fix. Include signal.h.
9336
9337         * kjs/testkjs.cpp:
9338
9339 2008-05-21  Oliver Hunt  <oliver@apple.com>
9340
9341         Yet more windows build fixes
9342
9343         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9344
9345 2008-05-21  Oliver Hunt  <oliver@apple.com>
9346
9347         Yet more windows build fixes
9348
9349         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
9350
9351 2008-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
9358 2008-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
9364 2008-05-21  Alp Toker  <alp@nuanti.com>
9365
9366         GTK+ port build fixes following squirrelfish merge r33979.
9367
9368         * GNUmakefile.am:
9369
9370 2008-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
9381 2008-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
9390 2008-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
9404 2008-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
9420 2008-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
9440 2008-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
9451 2008-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
9470 2008-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
9491 2008-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
9517 2008-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
9528 2008-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
9557 2008-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
9568 2008-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
9583 2008-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
9635 2008-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
9648 2008-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
9685 2008-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
9699 2008-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
9729 2008-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
9743 2008-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         
9758 2008-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
9768 2008-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
9796 2008-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
9822 2008-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
9840 2008-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
9852 2008-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
9865 2008-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
9893 2008-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
9909 2008-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
9933 2008-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
9951 2008-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
9969 2008-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
9995 2008-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
10024 2008-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
10039 2008-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
10056 2008-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
10071 2008-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
10085 2008-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
10152 2008-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
10170 2008-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
10184 2008-05-09  Oliver Hunt  <oliver@apple.com>
10185
10186         Debug build fix
10187
10188         * kjs/JSGlobalObject.cpp:
10189         (KJS::JSGlobalObject::restoreLocalStorage):
10190
10191 2008-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
10210 2008-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
10226 2008-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
10247 2008-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
10258 2008-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
10271 2008-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
10324 2008-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
10333 2008-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
10351 2008-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         
10379 2008-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
10388 2008-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
10406 2008-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
10418 2008-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
10449 2008-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
10475 2008-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
10504 2008-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
10522 2008-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
10532 2008-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
10564 2008-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
10579 2008-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
10653 2008-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
10666 2008-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
10674 2008-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
10683 2008-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
10756 2008-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
10766 2008-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
10795 2008-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
10808 2008-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
10819 2008-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
10839 2008-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
10854 2008-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
10878 2008-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
10887 2008-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
10908 2008-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
10920 2008-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
10939 2008-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
10948 2008-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
10958 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
10959
10960         Fixed tyop.
10961
10962         * kjs/ExecState.h:
10963
10964 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
10965
10966         Debug build fix: export a missing symbol.
10967
10968         * JavaScriptCore.exp:
10969
10970 2008-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
10981 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
10982
10983         WebCore build fix: forward-declare ScopeChain.
10984
10985         * kjs/interpreter.h:
10986
10987 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
10988
10989         Build fix for JavaScriptGlue: export a missing symbol.
10990
10991         * JavaScriptCore.exp:
10992
10993 2008-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
11005 2008-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
11038 2008-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
11049 2008-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
11058 2008-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
11080 2008-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
11090 2008-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
11113 2008-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
11133 2008-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
11145 2008-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
11162 2008-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
11213 2008-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
11241 2008-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
11256 2008-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
11266 2008-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
11278 2008-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
11293 2008-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
11308 2008-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
11320 2008-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
11332 2008-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
11347 2008-04-24  Geoffrey Garen  <ggaren@apple.com>
11348
11349         Reviewed by Oliver Hunt.
11350         
11351         Added support for arguments.callee.
11352
11353 2008-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
11377 2008-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
11386 2008-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
11403 2008-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
11414 2008-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
11426 2008-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
11468 2008-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
11480 2008-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
11491 2008-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
11521 2008-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
11534 2008-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
11550 2008-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
11559 2008-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
11990 2008-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
12020 2008-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
12039 2008-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
12054 2008-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
12071 2008-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
12092 2008-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
12103 2008-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
12111 2008-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
12118 2008-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
12136 2008-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
12147 2008-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
12164 2008-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
12182 2008-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
12197 2008-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
12210 2008-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
12224 2008-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
12234 2008-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
12247 2008-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
12256 2008-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
12265 2008-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         
12275 2008-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         
12288 2008-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
12301 2008-04-21  Oliver Hunt  <oliver@apple.com>
12302
12303         Fix debug build
12304
12305         * kjs/nodes.cpp:
12306         (KJS::ConstDeclNode::evaluateSingle):
12307
12308 2008-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
12320 2008-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
12331 2008-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
12344 2008-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
12352 2008-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
12360 2008-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
12368 2008-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
12377 2008-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
12388 2008-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
12409 2008-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
12430 2008-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
12442 2008-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
12459 2008-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
12479 2008-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
12497 2008-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
12510 2008-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
12524 2008-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
12598 2008-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
12606 2008-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
12617 2008-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
12638 2008-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
12649 2008-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         
12662 2008-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
12678 2008-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
12688 2008-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
12725 2008-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
12765 2008-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
12781 2008-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
12797 2008-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
12811 2008-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
12836 2008-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
12863 2008-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
12876 2008-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
12888 2008-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
13010 2008-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
13023 2008-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
13035 2008-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
13066 2008-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
13122 2008-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
13133 2008-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
13151 2008-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
13166 2008-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         
13174 2008-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
13190 2008-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
13207 2008-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
13226 2008-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
13247 2008-04-10  Geoffrey Garen  <ggaren@apple.com>
13248
13249         This time for sure.
13250
13251         * kjs/interpreter.cpp:
13252         (KJS::Interpreter::evaluate):
13253
13254 2008-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
13264 2008-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
13275 2008-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
13339 2008-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
13391 2008-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
13406 2008-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
13436 2008-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
13450 2008-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
13494 2008-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
13505 2008-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
13521 2008-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
13535 2008-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
13557 2008-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
13585 2008-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
13605 2008-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
13628 2008-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
13649 2008-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
13666 2008-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
13685 2008-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
13699 2008-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
13706 2008-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
13719 2008-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
13755 2008-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
13781 2008-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
13791 2008-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
13805 2008-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
13828 2008-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
13865 2008-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
13920 2008-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
13938 2008-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
13963 2008-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
13991 2008-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
14001 2008-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
14010 2008-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
14021 2008-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
14031 2008-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
14040 2008-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
14080 2008-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
14097 2008-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
14114 2008-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
14148 2008-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
14160 2008-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
14169 2008-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
14191 2008-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
14235 2008-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
14249 2008-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
14259 2008-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
14268 2008-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
14278 2008-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
14290 2008-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
14299 2008-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
14319 2008-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
14334 2008-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
14352 2008-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
14361 2008-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
14373 2008-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
14383 2008-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
14406 2008-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
14415 2008-03-31  Geoffrey Garen  <ggaren@apple.com>
14416
14417         Reviewed by Maciej Stachowiak.
14418         
14419         Added op_post_dec.
14420
14421 2008-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
14431 2008-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
14452 2008-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
14465 2008-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
14476 2008-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
14494 2008-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
14505 2008-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
14514 2008-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
14535 2008-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
14552 2008-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
14572 2008-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
14583 2008-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
14593 2008-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
14604 2008-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
14612 2008-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
14622 2008-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
14654 2008-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
14700 2008-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
14709 2008-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
14733 2008-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
14744 2008-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
14754 2008-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
14775 2008-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
14793 2008-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
14816 2008-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
14826 2008-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
14834 2008-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
14864 2008-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
14893 2008-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
14918 2008-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
14929 2008-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
14938 2008-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
14945 2008-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
14963 2008-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
14990 2008-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
15016 2008-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
15025 2008-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
15077 2008-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
15088 2008-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
15096 2008-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
15106 2008-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
15125 2008-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
15144 2008-03-24  Geoffrey Garen  <ggaren@apple.com>
15145
15146         Moved my notes from nodes.h to the wiki.
15147
15148         * kjs/nodes.h:
15149
15150 2008-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
15159 2008-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
15169 2008-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
15186 2008-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
15228 2008-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
15284 2008-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
15308 2008-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
15324 2008-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
15344 2008-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
15368 2008-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
15384 2008-05-20  Kevin McCullough  <kmccullough@apple.com>
15385
15386         Accidentally turned on the profiler.
15387
15388         * kjs/config.h:
15389
15390
15391 2008-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
15433 2008-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
15450 2008-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
15465 2008-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
15484 2008-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
15502 2008-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
15519 2008-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
15527 2008-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
15538 2008-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
15557 2008-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
15599 2008-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
15609 2008-05-15  Kevin McCullough  <kmccullough@apple.com>
15610
15611         - Build fix.
15612
15613         * JavaScriptCore.exp:
15614
15615 2008-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
15648 2008-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
15658 2008-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
15667 2008-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
15676 2008-05-14  Kevin McCullough  <kmccullough@apple.com>
15677
15678         Giving credit where credit is due.
15679
15680         * ChangeLog:
15681
15682 2008-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
15699 2008-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
15735 2008-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
15748 2008-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
15769 2008-05-13  Matt Lilek  <webkit@mattlilek.com>
15770
15771         Not reviewed, build fix.
15772
15773         * kjs/date_object.cpp:
15774         (KJS::DateObjectFuncImp::callAsFunction):
15775
15776 2008-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
15790 2008-05-13  Kevin McCullough  <kmccullough@apple.com>
15791
15792         Giving credit where credit is due.
15793
15794         * ChangeLog:
15795
15796 2008-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
15809 2008-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
15837 2008-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
15855 2008-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
15872 2008-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
15889 2008-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
16271 2008-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
16278 2008-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
16286 2008-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
16293 2008-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
16327 2008-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
16335 2008-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
16345 2008-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
16355 2008-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
16365 2008-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
16387 2008-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
16404 2008-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
16432 2008-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
16793 2008-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
16801 2008-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
16809 2008-05-01  Steve Falkenburg  <sfalken@apple.com>
16810
16811         Build fix.
16812
16813         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
16814
16815 2008-05-01  Sam Weinig  <sam@webkit.org>
16816
16817         Fix build.
16818
16819         * JavaScriptCore.xcodeproj/project.pbxproj:
16820
16821 2008-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
16857 2008-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
16865 2008-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
16873 2008-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
16888 2008-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
16900 2008-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
16907 2008-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
17012 2008-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
17044 2008-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
17054 2008-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
17062 2008-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
17202 2008-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
17222 2008-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
17230 2008-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
17244 2008-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
17251 2008-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
17261 2008-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
17284 2008-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
17321 2008-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
17330 2008-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
17339 2008-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
17354 2008-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
17363 2008-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
17373 2008-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
17381 2008-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
17395 2008-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
17402 2008-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
17410 2008-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
17425 2008-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
17436 2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>
17437
17438         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
17439         build fix.
17440
17441 2008-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
17450 2008-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
17464 2008-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
17499 2008-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
17544 2008-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
17562 2008-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
17569 2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>
17570
17571         Reviewed by mrowe.
17572
17573         * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
17574
17575 2008-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
17591 2008-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
17599 2008-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
17608 2008-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
17649 2008-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
17697 2008-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
17728 2008-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
17742 2008-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
17756 2008-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
17765 2008-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
17772 2008-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
17781 2008-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
17794 2008-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
17839 2008-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
17879 2008-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
17887 2008-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
17902 2008-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
17911 2008-04-14  Steve Falkenburg  <sfalken@apple.com>
17912
17913         Fix build.
17914
17915         * wtf/ThreadingWin.cpp:
17916
17917 2008-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
17932 2008-04-14  Alexey Proskuryakov  <ap@webkit.org>
17933
17934         Touched a file to make JavaScriptCore.vcproj rebuild.
17935
17936         * wtf/MathExtras.h:
17937
17938 2008-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
17949 2008-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
17960 2008-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
17981 2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
17982
17983         Windows build fix.
17984
17985         * kjs/grammar.y:
17986
17987 2008-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
17998 2008-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
18021 2008-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
18052 2008-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
18075 2008-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
18083 2008-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
18090 2008-04-09  Adam Roben  <aroben@apple.com>
18091
18092         Build fix
18093
18094         * JavaScriptCore.exp: Export isMainThread.
18095
18096 2008-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
18103 2008-04-08  Mark Rowe  <mrowe@apple.com>
18104
18105         Export WTF::initializeThreading() from JavaScriptCore.
18106
18107         * JavaScriptCore.exp:
18108
18109 2008-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
18188 2008-04-08  Brady Eidson  <beidson@apple.com>
18189
18190         Encourage Windows to rebuild - AGAIN...
18191
18192         * kjs/DateMath.cpp:
18193
18194 2008-04-08  Adam Roben  <aroben@apple.com>
18195
18196         Mac build fix
18197
18198         * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
18199
18200 2008-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
18208 2008-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
18237 2008-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
18243 2008-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
18249 2008-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
18269 2008-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
18307 2008-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
18315 2008-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
18321 2008-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
18332 2008-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
18354 2008-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
18369 2008-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
18378 2008-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
18393 2008-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
18441 2008-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
18450 2008-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
18462 2008-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
18470 2008-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
18491 2008-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
18499 2008-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
18506 2008-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
18518 2008-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
18530 2008-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
18548 2008-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
18562 2008-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
18572 2008-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
18589 2008-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
18608 2008-03-25  Alexey Proskuryakov  <ap@webkit.org>
18609
18610         Windows build fix.
18611
18612         * kjs/dtoa.cpp: Include stdint.h.
18613
18614 2008-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
18648 2008-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
18662 2008-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
18678 2008-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
18688 2008-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
18703 2008-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
18721 2008-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
18732 2008-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
18742 2008-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
18774 2008-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
18794 2008-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
18804 2008-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
18815 2008-03-20  Maciej Stachowiak  <mjs@apple.com>
18816
18817         - fix build
18818
18819         * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
18820
18821 2008-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
18845 2008-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
18862 2008-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
18870 2008-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
18898 2008-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
18909 2008-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
18919 2008-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
18933 2008-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
18960 2008-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
18973 2008-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
18983 2008-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
18992 2008-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
19002 2008-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
19017 2008-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
19051 2008-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
19062 2008-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  
19113 2008-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
19124 2008-03-14  Steve Falkenburg  <sfalken@apple.com>
19125
19126         PGO build fixes.
19127
19128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19129
19130 2008-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
19161 2008-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
19175 2008-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
19198 2008-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
19214 2008-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
19222 2008-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
19229 2008-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
19238 2008-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
19247 2008-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
19265 2008-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
19274 2008-03-12  Steve Falkenburg  <sfalken@apple.com>
19275
19276         Build fix.
19277
19278         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19279
19280 2008-03-12  Alp Toker  <alp@atoker.com>
19281
19282         Another autotools testkjs build fix attempt.
19283
19284         * GNUmakefile.am:
19285
19286 2008-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
19293 2008-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
19302 2008-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
19314 2008-03-10  Darin Adler  <darin@apple.com>
19315
19316         - Windows build fix
19317
19318         * kjs/function.cpp: (KJS::decode): Initialize variable.
19319
19320 2008-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
19329 2008-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
19340 2008-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
19348 2008-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
19411 2008-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
19422 2008-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
19430 2008-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
19438 2008-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
19468 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
19469
19470         Build fix.
19471
19472         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
19473
19474 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
19475
19476         Build fix.
19477
19478         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19479
19480 2008-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
19486 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
19487
19488         Build fix.
19489
19490         * wtf/ThreadingWin.cpp:
19491         (WTF::ThreadCondition::timedWait):
19492
19493 2008-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
19499 2008-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
19505 2008-03-06  Brady Eidson  <beidson@apple.com>
19506
19507         Gtk Build fix
19508
19509         * wtf/ThreadingGtk.cpp:
19510         (WTF::ThreadCondition::timedWait):
19511
19512 2008-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
19520 2008-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
19542 2008-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
19551 2008-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
19557 2008-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
19563 2008-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
19573 2008-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
19614 2008-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
19621 2008-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
19629 2008-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
19639 2008-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
19659 2008-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
19667 2008-03-05  Anders Carlsson  <andersca@apple.com>
19668
19669         Reviewed by Sam.
19670         
19671         Remove bindings/.
19672
19673         * bindings: Removed.
19674
19675 2008-03-05  Anders Carlsson  <andersca@apple.com>
19676
19677         Don't build bindings/ anymore.
19678         
19679         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19680
19681 2008-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
19699 2008-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
19712 2008-03-04  Mark Rowe  <mrowe@apple.com>
19713
19714         Mac build fix.
19715
19716         * JavaScriptCore.exp:  Add new symbol to exports file.
19717
19718 2008-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
19727 2008-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
19739 2008-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
19748 2008-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
19757 2008-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
19771 2008-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
19780 2008-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
19792 2008-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
19801 2008-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
19813 2008-02-25  Darin Adler  <darin@apple.com>
19814
19815         Reviewed by Adam.
19816
19817         * JavaScriptCore.exp: Sort the contents of this file.
19818
19819 2008-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
19826 2008-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
19838 2008-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
19869 2008-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
19892 2008-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
19904 2008-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
19913 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
19914
19915         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
19916
19917 2008-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
19932 2008-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
20023 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
20024
20025         Not reviewed, Gtk build fix.
20026
20027         * kjs/testkjs.pro:
20028
20029 2008-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
20040 2008-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
20048 2008-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
20054 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
20055
20056         More build fixing - fix mismatched braces.
20057
20058         * JavaScriptCore.pri:
20059
20060 2008-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
20067 2008-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
20098 2008-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
20135 2008-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
20147 2008-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
20163 2008-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
20180 2008-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
20189 2008-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
20201 2008-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
20215 2008-02-18  Darin Adler  <darin@apple.com>
20216
20217         Reviewed by Sam.
20218
20219         * wtf/ASCIICType.h:
20220         (WTF::toASCIIHexValue): Added.
20221
20222 2008-02-17  Darin Adler  <darin@apple.com>
20223
20224         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
20225
20226 2008-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
20234 2008-02-14  Stephanie Lewis <slewis@apple.com>
20235
20236         Reviewed by Geoff.
20237
20238         Update order files.
20239
20240         * JavaScriptCore.order:
20241
20242 2008-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
20261 2008-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
20271 2008-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
20283 2008-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
20297 2008-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
20312 2008-02-10  Darin Adler  <darin@apple.com>
20313
20314         Rubber stamped by Eric.
20315
20316         * kjs/ExecState.h:
20317         (KJS::ExecState::takeException): Added.
20318
20319 2008-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
20329 2008-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
20341 2008-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
20364 2008-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
20378 2008-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
20391 2008-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
20408 2008-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
20418 2008-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
20434 2008-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
20464 2008-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
20499 2008-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
20508 2008-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
20516 2008-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
20542 2008-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
20558 2008-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
20567 2008-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
20576 2008-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
20621 2008-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
20631 2008-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
20642 2008-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
20657 2008-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
20714 2008-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
20760 2008-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
20791 2008-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
20807 2008-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
20818 2008-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
20891 2008-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
20921 2008-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
20935 2008-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
20953 2008-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
20966 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
20967
20968         Build fix.
20969
20970         * JavaScriptCore.vcproj/JavaScriptCore.sln:
20971
20972 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
20973
20974         Build fix.
20975
20976         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
20977
20978 2008-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
20993 2008-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
21018 2008-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
21027 2008-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
21037 2008-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
21058 2008-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
21066 2008-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
21231 2008-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
21244 2008-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
21268 2008-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
21277 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
21278
21279         - Build fix.
21280
21281         * kjs/ustring.h:
21282
21283 2008-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
21291 2008-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
21304 2008-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
21322 2008-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
21332 2008-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
21341 2008-01-17  Antti Koivisto  <antti@apple.com>
21342
21343         Fix Windows build.
21344
21345         * kjs/regexp_object.cpp:
21346         (KJS::regExpProtoFuncToString):
21347
21348 2008-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
21431 2008-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
21454 2008-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
21478 2008-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
21491 2008-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
21507 2008-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
21654 2008-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
21666 2008-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
21675 2008-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
21684 2008-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
21694 2008-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
21700 2008-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
21715 2008-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
21727 2008-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
21750 2008-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
21763 2008-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
21784 2008-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
21808 2008-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
21859 2008-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
21867 2008-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
21881 2008-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
21887 2008-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
21894 2008-01-12  Mark Rowe  <mrowe@apple.com>
21895
21896         Another Windows build fix.
21897
21898         * kjs/Activation.h:
21899
21900 2008-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
21908 2008-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
21920 2008-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
21950 2008-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
22014 2008-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
22025 2008-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
22041 2008-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
22049 2008-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
22079 2008-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
22102 2008-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
22112 2008-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
22120 2008-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
22134 2008-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
22156 2008-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
22165 2008-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
22180 2008-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
22205 2008-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
22233 2008-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
22244 2008-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
22257 2008-01-05  Darin Adler  <darin@apple.com>
22258
22259         * API/JSRetainPtr.h: One more file that needed the change below.
22260
22261 2008-01-05  Darin Adler  <darin@apple.com>
22262
22263         * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
22264
22265 2008-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
22274 2008-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
22289 2008-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
22302 2008-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
22313 2008-01-04  Alp Toker  <alp@atoker.com>
22314
22315         GTK+ autotools build fix. Terminate empty rules.
22316
22317         * GNUmakefile.am:
22318
22319 2008-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
22327 2008-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
22333 2008-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
22356 2008-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
22379 2008-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
22386 2008-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
22393 2008-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
22403 2008-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
22430 2008-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
22436 2008-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
22454 2008-01-01  Darin Adler  <darin@apple.com>
22455
22456         - rolled scope chain optimization out; it was breaking the world
22457
22458 2008-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
22517 2008-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
22541 2008-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
22574 2008-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
22585 2008-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
22613 2007-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
22634 2007-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
22660 2007-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
22671 2007-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
22683 2007-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
22696 2007-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
22711 2007-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
22722 2007-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
22731 2007-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
22742 2007-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
22755 2007-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
22777 2007-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
22787 2007-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
22796 2007-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         
22811 2007-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
22818 2007-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
22877 2007-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
22884 2007-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
22892 2007-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
22977 2007-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
22989 2007-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
22996 2007-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
23021 2007-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
23029 2007-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
23073 2007-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
23084 2007-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
23094 2007-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
23119 2007-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
23141 2007-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
23152 2007-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
23157 2007-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
23244 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
23245
23246         Added Radar number.
23247
23248         * kjs/nodes.cpp:
23249         (KJS::ProgramNode::processDeclarations):
23250
23251 2007-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
23257 2007-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
23320 2007-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
23334 2007-12-19  Oliver Hunt  <oliver@apple.com>
23335
23336         Make appendToVarDeclarationList static
23337
23338         RS=Weinig.
23339
23340         * kjs/grammar.y:
23341
23342 2007-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
23370 2007-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
23408 2007-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
23423 2007-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
23431 2007-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
23439 2007-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
23459 2007-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
23465 2007-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
23471 2007-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
23567 2007-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
23586 2007-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
23599 2007-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
23630 2007-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
23640 2007-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
23648 2007-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
23655 2007-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
23666 2007-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
23674 2007-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
23683 2007-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
23690 2007-12-14  Dan Bernstein  <mitz@apple.com>
23691
23692         - try to fix the Windows build
23693
23694         * wtf/TCSystemAlloc.cpp:
23695         (TCMalloc_SystemRelease):
23696
23697 2007-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
23712 2007-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
23725 2007-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         
23773 2007-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
23785 2007-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
23796 2007-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
23807 2007-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
23828 2007-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
23840 2007-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
23844 2007-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
23866 2007-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
23897 2007-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
23906 2007-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
23917 2007-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
23927 2007-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
23936 2007-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
23942 2007-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
23955 2007-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
23984 2007-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
24021 2007-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
24035 2007-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
24047 2007-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         
24054 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24055
24056         Build fix: added #include.
24057
24058         * kjs/nodes.cpp:
24059
24060 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24061
24062         Build fix: added #include.
24063
24064         * kjs/interpreter.cpp:
24065
24066 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24067
24068         Build fix: added #include.
24069
24070         * kjs/grammar.y:
24071
24072 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24073
24074         Build fix: added #include.
24075
24076         * kjs/function_object.cpp:
24077
24078 2007-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
24092 2007-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
24109 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24110
24111         Build fix: added JSVariableObject.cpp to the .pri file.
24112
24113         * JavaScriptCore.pri:
24114
24115 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
24116
24117         Build fix: added #include.
24118
24119         * kjs/function.cpp:
24120
24121 2007-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
24130 2007-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
24137 2007-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
24146 2007-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
24156 2007-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
24183 2007-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
24193 2007-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
24208 2007-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
24215 2007-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
24229 2007-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
24240 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24241
24242         Build fix: added some #includes.
24243
24244         * kjs/JSImmediate.cpp:
24245
24246 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24247
24248         Build fix: added some #includes.
24249
24250         * kjs/JSGlobalObject.cpp:
24251         * kjs/JSImmediate.cpp:
24252
24253 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24254
24255         Build fix: Fixed #include spelling.
24256
24257         * kjs/debugger.cpp:
24258
24259 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24260
24261         Build fix: added #include.
24262
24263         * kjs/debugger.cpp:
24264
24265 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24266
24267         Build fix: added a forward declaration.
24268
24269         * kjs/debugger.h:
24270
24271 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24272
24273         Build fix: added an #include.
24274
24275         * kjs/error_object.cpp:
24276
24277 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
24278
24279         Build fix: added an #include.
24280
24281         * kjs/bool_object.cpp:
24282
24283 2007-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
24301 2007-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
24313 2007-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
24325 2007-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
24335 2007-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
24348 2007-12-04  Oliver Hunt  <oliver@apple.com>
24349
24350         Fix gtk build.
24351
24352         * wtf/TCSystemAlloc.cpp:
24353
24354 2007-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
24470 2007-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
24479 2007-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
24492 2007-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
24503 2007-12-03  Dan Bernstein  <mitz@apple.com>
24504
24505         - fix a copy-and-paste-o
24506
24507         * bindings/npruntime.cpp:
24508         (_NPN_GetIntIdentifier):
24509
24510 2007-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
24521 2007-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
24535 2007-12-02  Geoffrey Garen  <ggaren@apple.com>
24536
24537         Build fix: added an #include.
24538
24539         * kjs/collector.cpp:
24540
24541 2007-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
24551 2007-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
24577 2007-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
24605 2007-11-30  Brent Fulgham  <bfulgham@gmail.com>
24606
24607         Reviewed by Eric.
24608
24609         * ChangeLog:
24610         * pcre/pcre_compile.cpp:
24611         (compile_branch):
24612
24613 2007-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
24623 2007-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
24652 2007-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
24664 2007-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
24675 2007-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
24694 2007-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
24706 2007-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
24715 2007-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
24723 2007-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
24733 2007-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
24750 2007-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
24767 2007-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
24776 2007-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
24786 2007-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
24802 2007-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
24814 2007-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
24829 2007-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
24838 2007-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
24852 2007-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
24866 2007-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
24877 2007-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
24887 2007-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
24898 2007-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
24907 2007-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
24929 2007-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
24939 2007-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
24947 2007-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
24958 2007-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
24970 2007-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
24980 2007-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
24990 2007-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
25006 2007-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
25022 2007-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
25036 2007-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
25063 2007-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
25086 2007-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
25095 2007-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
25112 2007-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
25125 2007-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
25134 2007-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
25143 2007-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
25152 2007-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
25161 2007-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
25173 2007-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
25185 2007-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
25202 2007-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
25213 2007-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
25223 2007-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
25237 2007-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
25253 2007-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
25262 2007-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
25271 2007-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
25290 2007-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
25299 2007-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
25335 2007-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
25348 2007-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
25372 2007-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
25383 2007-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
25393 2007-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
25401 2007-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
25423 2007-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         
25446 2007-11-27  Anders Carlsson  <andersca@apple.com>
25447
25448         Reviewed by Darin.
25449
25450         Add a ValueType typedef.
25451         
25452         * wtf/Vector.h:
25453
25454 2007-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
25467 2007-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
25482 2007-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
25488 2007-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
25498 2007-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
25508 2007-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
25517 2007-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
25527 2007-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
25539 2007-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
25548 2007-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
25561 2007-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
25581 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
25582
25583         wx port build fix (wx headers include ctype functions).
25584
25585         * kjs/config.h:
25586
25587 2007-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
25596 2007-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
25602 2007-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
25653 2007-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
25663 2007-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
25672 2007-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
25687 2007-11-17  Steve Falkenburg  <sfalken@apple.com>
25688
25689         Windows build fix.
25690
25691         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25692
25693 2007-11-16  Mark Rowe  <mrowe@apple.com>
25694
25695         Windows build fix.
25696
25697         * kjs/lexer.cpp:
25698         (KJS::Lexer::record8):
25699
25700 2007-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
25721 2007-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
25728 2007-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
25736 2007-11-15  Mark Rowe  <mrowe@apple.com>
25737
25738         Gtk build fix.
25739
25740         * kjs/Parser.cpp:
25741
25742 2007-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
25756 2007-11-15  Mark Rowe  <mrowe@apple.com>
25757
25758         Qt build fix.
25759
25760         * kjs/Parser.h:
25761
25762 2007-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
25837 2007-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
25853 2007-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
25870 2007-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         
25882 2007-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
25892 2007-11-15  Steve Falkenburg  <sfalken@apple.com>
25893
25894         Windows build fix.
25895
25896         * JavaScriptCore.vcproj/JavaScriptCore.make:
25897
25898 2007-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
25923 2007-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
25931 2007-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
25940 2007-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
25948 2007-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
25968 2007-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
25984 2007-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
26021 2007-11-13  Anders Carlsson  <andersca@apple.com>
26022
26023         Add RefCounted.h (And remove Shared.h)
26024         
26025         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
26026
26027 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
26028
26029         Build fix.
26030
26031         * kjs/regexp.h:
26032
26033 2007-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
26047 2007-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
26055 2007-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
26079 2007-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
26091 2007-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
26102 2007-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
26164 2007-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
26172 2007-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
26178 2007-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
26203 2007-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
26218 2007-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
26368 2007-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
26408 2007-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
26417 2007-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
26429 2007-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
26487 2007-11-12  Adam Roben  <aroben@apple.com>
26488
26489         Build fix
26490
26491         * wtf/FastMalloc.h: Add missing using statement.
26492
26493 2007-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
26511 2007-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
26542 2007-11-11  Mark Rowe  <mrowe@apple.com>
26543
26544         Build fix.  Use the correct filename case.
26545
26546         * kjs/nodes.h:
26547
26548 2007-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
26575 2007-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
26585 2007-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
26647 2007-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
26659 2007-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
26664 2007-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
26669 2007-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
26796 2007-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
26818 2007-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
26838 2007-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
26847 2007-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
26899 2007-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
26908 2007-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
26916 2007-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
26924 2007-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
26937 2007-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
26965 2007-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
26987 2007-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
26996 2007-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
27011 2007-11-08  Darin Adler  <darin@apple.com>
27012
27013         - fix build
27014
27015         * kjs/nodes.h: Add missing parameter name.
27016
27017 2007-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
27178 2007-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
27201 2007-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
27211 2007-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
27220 2007-11-08  Mark Rowe  <mrowe@apple.com>
27221
27222         Gtk build fix.
27223
27224         * kjs/lookup.h: Add missing include.
27225
27226 2007-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
27382 2007-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
27391 2007-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
27398 2007-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
27404 2007-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
27410 2007-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
27432 2007-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
27489 2007-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
27500 2007-11-07  Mark Rowe  <mrowe@apple.com>
27501
27502         Gtk build fix.
27503
27504         * kjs/regexp_object.cpp:
27505
27506 2007-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
27515 2007-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
27550 2007-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
27559 2007-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
27568 2007-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
27579 2007-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
27595 2007-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
27621 2007-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
27632 2007-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
27656 2007-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
27674 2007-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
27683 2007-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
27694 2007-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
27705 2007-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
27716 2007-11-05  Mark Rowe  <mrowe@apple.com>
27717
27718         Mac build fix.
27719
27720         * kjs/array_object.cpp:
27721         (KJS::ArrayProtoFunc::callAsFunction):
27722
27723 2007-11-05  Adam Roben  <aroben@apple.com>
27724
27725         Windows build fix
27726
27727         * kjs/list.h:
27728
27729 2007-11-05  Mark Rowe  <mrowe@apple.com>
27730
27731         Build fix.  Add missing #include.
27732
27733         * kjs/operations.cpp:
27734
27735 2007-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
27746 2007-11-05  Eric Seidel  <eric@webkit.org>
27747
27748         * kjs/operations.cpp:
27749         (KJS::equal): correct broken change.
27750
27751 2007-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
27762 2007-11-05  Mark Rowe  <mrowe@apple.com>
27763
27764         Gtk build fix.
27765
27766         * pcre/pcre.pri:
27767
27768 2007-11-05  Mark Rowe  <mrowe@apple.com>
27769
27770         Gtk build fix.
27771
27772         * kjs/list.cpp:
27773
27774 2007-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
27780 2007-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
27789 2007-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
27829 2007-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
27838 2007-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
27870 2007-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
27874 2007-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
27896 2007-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
28008 2007-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
28019 2007-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
28047 2007-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
28054 2007-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
28063 2007-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
28068 2007-11-03  Mark Rowe  <mrowe@apple.com>
28069
28070         Gtk build fix.
28071
28072         * kjs/nodes.cpp:  Add missing include.
28073
28074 2007-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
28095 2007-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
28140 2007-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
28148 2007-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
28168 2007-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
28184 2007-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
28203 2007-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
28242 2007-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
28255 2007-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
28264 2007-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
28283 2007-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
28313 2007-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
28328 2007-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
28348 2007-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
28365 2007-10-31  Adam Roben  <aroben@apple.com>
28366
28367         Windows build fix
28368
28369         * kjs/ExecState.h:
28370
28371 2007-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
28396 2007-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
28414 2007-10-31  Kevin McCullough  <kmccullough@apple.com>
28415
28416         Reviewed by Sam.
28417
28418         - Corrected spelling.
28419
28420         * wtf/HashTraits.h:
28421
28422 2007-10-31  Mark Rowe  <mrowe@apple.com>
28423
28424         Further Gtk build fixage.
28425
28426         * kjs/regexp_object.cpp:
28427
28428 2007-10-31  Mark Rowe  <mrowe@apple.com>
28429
28430         Gtk build fix.
28431
28432         * kjs/regexp.h:
28433
28434 2007-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
28476 2007-10-31  Oliver Hunt  <oliver@apple.com>
28477
28478         * kjs/nodes.h: include OwnPtr.h
28479
28480 2007-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
28508 2007-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
28513 2007-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
28518 2007-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
28536 2007-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
28563 2007-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
28568 2007-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
28582 2007-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
28594 2007-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
28611 2007-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
28628 2007-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
28647 2007-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
28655 2007-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
28664 2007-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
28693 2007-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
28726 2007-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
28808 2007-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
28816 2007-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
28824 2007-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
28839 2007-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
28865 2007-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
28874 2007-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
28886 2007-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
28892 2007-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
28899 2007-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
28916 2007-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
28942 2007-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
28978 2007-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
28987 2007-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
28999 2007-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
29014 2007-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
29044 2007-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
29057 2007-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
29064 2007-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
29081 2007-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
29097 2007-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
29105 2007-10-28  Mark Rowe  <mrowe@apple.com>
29106
29107         Gtk build fix.  Add include of MathExtras.h.
29108
29109         * kjs/string_object.cpp:
29110
29111 2007-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
29144 2007-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
29153 2007-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
29194 2007-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
29209 2007-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
29221 2007-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
29228 2007-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
29337 2007-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
29345 2007-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
29354 2007-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
29366 2007-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
29386 2007-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
29446 2007-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
29455 2007-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
29462 2007-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
29478 2007-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
29491 2007-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
29503 2007-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
29514 2007-10-27  Mark Rowe  <mrowe@apple.com>
29515
29516         Silence a warning.
29517
29518         * kjs/SymbolTable.h:
29519
29520 2007-10-27  Mark Rowe  <mrowe@apple.com>
29521
29522         Gtk build fix.
29523
29524         * kjs/function.h:
29525
29526 2007-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
29539 2007-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
29548 2007-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
29555 2007-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
29564 2007-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
29574 2007-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
29582 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
29583
29584         Build fix: export SymbolTable.h to WebCore.
29585
29586         * JavaScriptCore.xcodeproj/project.pbxproj:
29587
29588 2007-10-26  Geoffrey Garen  <ggaren@apple.com>
29589
29590         Comment tweak suggested by Maciej.
29591
29592         * kjs/function.cpp:
29593         (KJS::ActivationImp::getOwnPropertySlot):
29594
29595 2007-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
29617 2007-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
29665 2007-10-26  Kevin McCullough  <kmccullough@apple.com>
29666
29667         - Corrected function name mistake in this changelog.
29668
29669 2007-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
29680 2007-10-26  Mark Rowe  <mrowe@apple.com>
29681
29682         Windows build fix.
29683
29684         * kjs/collector.cpp:
29685         (KJS::Collector::collect):
29686
29687 2007-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
29712 2007-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
29727 2007-10-26  Mark Rowe  <mrowe@apple.com>
29728
29729         Gtk build fix.
29730
29731         * kjs/ExecState.h:
29732
29733 2007-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
29801 2007-10-26  Mark Rowe  <mrowe@apple.com>
29802
29803         Windows build fix.
29804
29805         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
29806
29807 2007-10-26  Mark Rowe  <mrowe@apple.com>
29808
29809         Gtk build fix.
29810
29811         * JavaScriptCore.pri:
29812         * kjs/ExecState.cpp:
29813
29814 2007-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
29840 2007-10-26  Mark Rowe  <mrowe@apple.com>
29841
29842         Windows build fix.
29843
29844         * kjs/string_object.cpp:
29845         (KJS::StringObjectFuncImp::callAsFunction):
29846
29847 2007-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
29913 2007-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
29924 2007-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
29955 2007-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
29963 2007-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
29970 2007-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
30010 2007-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
30046 2007-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
30061 2007-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
30075 2007-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
30088 2007-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
30112 2007-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
30126 2007-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
30132 2007-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
30167 2007-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
30251 2007-10-24  Eric Seidel  <eric@webkit.org>
30252
30253         Build fix for Gtk, no review.
30254
30255         * kjs/collector.cpp: #include "context.h"
30256
30257 2007-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
30273 2007-10-24  Mark Rowe  <mrowe@apple.com>
30274
30275         Gtk build fix.
30276
30277         * kjs/identifier.h:  Remove extra qualification.
30278
30279 2007-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
30288 2007-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
30307 2007-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
30319 2007-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
30335 2007-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
30342 2007-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
30349 2007-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
30365 2007-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
30384 2007-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
30403 2007-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
30416 2007-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
30423 2007-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
30441 2007-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
30525 2007-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
30538 2007-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
30552 2007-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
30591 2007-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
30623 2007-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
30635 2007-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
30646 2007-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
30683 2007-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
30690 2007-10-22  Mark Rowe  <mrowe@apple.com>
30691
30692         Gtk build fix.
30693
30694         * kjs/array_instance.cpp:
30695
30696 2007-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
30748 2007-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
30757 2007-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
30766 2007-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
30778 2007-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
30787 2007-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
30797 2007-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
30806 2007-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
30811 2007-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
30847 2007-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
30860 2007-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
30868 2007-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
30889 2007-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
30911 2007-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
30934 2007-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
30956 2007-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
30964 2007-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
30981 2007-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
30989 2007-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
31010 2007-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
31023 2007-10-17  Anders Carlsson  <andersca@apple.com>
31024
31025         Reviewed by Oliver.
31026
31027         * wtf/Platform.h:
31028         #define USE_PTHREADS on Mac.
31029
31030 2007-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
31063 2007-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
31078 2007-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
31089 2007-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
31097 2007-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
31141 2007-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
31157 2007-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
31172 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
31173
31174         Reviewed by Darin Adler.
31175         
31176         Global replace of assert with ASSERT.
31177
31178 2007-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
31194 2007-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
31207 2007-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
31238 2007-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
31244 2007-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
31251 2007-10-16  Darin Adler  <darin@apple.com>
31252
31253         - try to fix the GTK build
31254
31255         * kjs/ustring.cpp: Include ASCIICType.h.
31256
31257 2007-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
31279 2007-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
31293 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
31294
31295         Removed unnecessary #include.
31296
31297         * API/JSObjectRef.cpp:
31298
31299 2007-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
31306 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
31307
31308         Build fix.
31309
31310         * kjs/nodes.cpp:
31311         (NumberNode::evaluate):
31312
31313 2007-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
31336 2007-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
31351 2007-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
31366 2007-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
31402 2007-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
31429 2007-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
31437 2007-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
31454 2007-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
31470 2007-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 ==